{"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/statiegeldnl.feedback/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode.ts","mod::vue/node_modules/@babel/parser/src/util/location.ts","mod::vue/node_modules/@babel/parser/src/parse-error/module-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/to-node-description.ts","mod::vue/node_modules/@babel/parser/src/parse-error/standard-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/parse-expression-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error.ts","mod::vue/node_modules/@babel/parser/src/options.ts","mod::vue/node_modules/@babel/parser/src/plugins/estree.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/context.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/types.ts","mod::vue/node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts","mod::vue/node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts","mod::vue/node_modules/@babel/parser/src/util/identifier.ts","mod::vue/node_modules/@babel/parser/src/util/scope.ts","mod::vue/node_modules/@babel/parser/src/plugins/flow/scope.ts","mod::vue/node_modules/@babel/parser/src/plugins/flow/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/jsx/xhtml.ts","mod::vue/node_modules/@babel/parser/src/util/whitespace.ts","mod::vue/node_modules/@babel/parser/src/plugins/jsx/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/typescript/scope.ts","mod::vue/node_modules/@babel/parser/src/util/production-parameter.ts","mod::vue/node_modules/@babel/parser/src/parser/base.ts","mod::vue/node_modules/@babel/parser/src/parser/comments.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/state.ts","mod::vue/node_modules/@babel/babel-helper-string-parser/src/index.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/index.ts","mod::vue/node_modules/@babel/parser/src/util/class-scope.ts","mod::vue/node_modules/@babel/parser/src/util/expression-scope.ts","mod::vue/node_modules/@babel/parser/src/parser/util.ts","mod::vue/node_modules/@babel/parser/src/parser/node.ts","mod::vue/node_modules/@babel/parser/src/parser/lval.ts","mod::vue/node_modules/@babel/parser/src/plugins/typescript/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/placeholders.ts","mod::vue/node_modules/@babel/parser/src/plugins/v8intrinsic.ts","mod::vue/node_modules/@babel/parser/src/plugin-utils.ts","mod::vue/node_modules/@babel/parser/src/parser/expression.ts","mod::vue/node_modules/@babel/parser/src/parser/statement.ts","mod::vue/node_modules/@babel/parser/src/parser/index.ts","mod::vue/node_modules/@babel/parser/src/index.ts","mod::vue/node_modules/estree-walker/dist/umd/estree-walker.js","mod::vue/node_modules/source-map-js/lib/base64.js","mod::vue/node_modules/source-map-js/lib/base64-vlq.js","mod::vue/node_modules/source-map-js/lib/util.js","mod::vue/node_modules/source-map-js/lib/array-set.js","mod::vue/node_modules/source-map-js/lib/mapping-list.js","mod::vue/node_modules/source-map-js/lib/source-map-generator.js","mod::vue/node_modules/source-map-js/lib/binary-search.js","mod::vue/node_modules/source-map-js/lib/quick-sort.js","mod::vue/node_modules/source-map-js/lib/source-map-consumer.js","mod::vue/node_modules/source-map-js/lib/source-node.js","mod::vue/node_modules/source-map-js/source-map.js","mod::vue/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js","mod::vue/node_modules/@vue/compiler-core/index.js","mod::vue/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js","mod::vue/node_modules/@vue/compiler-dom/index.js","mod::vue/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js","mod::vue/node_modules/@vue/reactivity/index.js","mod::vue/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js","mod::vue/node_modules/@vue/runtime-core/index.js","mod::vue/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js","mod::vue/node_modules/@vue/runtime-dom/index.js","mod::vue/node_modules/vue/dist/vue.cjs.prod.js","mod::vue/node_modules/vue/index.js","mod::vue/node_modules/vue-router/dist/vue-router.prod.cjs","mod::vue/node_modules/vue-router/index.js","mod::vue/node_modules/embla-carousel-reactive-utils/src/components/utils.ts","mod::vue/node_modules/embla-carousel/src/components/utils.ts","mod::vue/node_modules/embla-carousel/src/components/Alignment.ts","mod::vue/node_modules/embla-carousel/src/components/EventStore.ts","mod::vue/node_modules/embla-carousel/src/components/Animations.ts","mod::vue/node_modules/embla-carousel/src/components/Axis.ts","mod::vue/node_modules/embla-carousel/src/components/Limit.ts","mod::vue/node_modules/embla-carousel/src/components/Counter.ts","mod::vue/node_modules/embla-carousel/src/components/DragHandler.ts","mod::vue/node_modules/embla-carousel/src/components/DragTracker.ts","mod::vue/node_modules/embla-carousel/src/components/NodeRects.ts","mod::vue/node_modules/embla-carousel/src/components/PercentOfView.ts","mod::vue/node_modules/embla-carousel/src/components/ResizeHandler.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollBody.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollBounds.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollContain.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollLimit.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollLooper.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollProgress.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollSnaps.ts","mod::vue/node_modules/embla-carousel/src/components/SlideRegistry.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollTarget.ts","mod::vue/node_modules/embla-carousel/src/components/ScrollTo.ts","mod::vue/node_modules/embla-carousel/src/components/SlideFocus.ts","mod::vue/node_modules/embla-carousel/src/components/Vector1d.ts","mod::vue/node_modules/embla-carousel/src/components/Translate.ts","mod::vue/node_modules/embla-carousel/src/components/SlideLooper.ts","mod::vue/node_modules/embla-carousel/src/components/SlidesHandler.ts","mod::vue/node_modules/embla-carousel/src/components/SlidesInView.ts","mod::vue/node_modules/embla-carousel/src/components/SlideSizes.ts","mod::vue/node_modules/embla-carousel/src/components/SlidesToScroll.ts","mod::vue/node_modules/embla-carousel/src/components/Engine.ts","mod::vue/node_modules/embla-carousel/src/components/EventHandler.ts","mod::vue/node_modules/embla-carousel/src/components/Options.ts","mod::vue/node_modules/embla-carousel/src/components/OptionsHandler.ts","mod::vue/node_modules/embla-carousel/src/components/PluginsHandler.ts","mod::vue/node_modules/embla-carousel/src/components/EmblaCarousel.ts","mod::vue/node_modules/embla-carousel-vue/src/components/emblaCarouselVue.ts","mod::vue/node_modules/leaflet/src/core/Util.js","mod::vue/node_modules/leaflet/src/core/Class.js","mod::vue/node_modules/leaflet/src/core/Events.js","mod::vue/node_modules/leaflet/src/geometry/Point.js","mod::vue/node_modules/leaflet/src/geometry/Bounds.js","mod::vue/node_modules/leaflet/src/geo/LatLngBounds.js","mod::vue/node_modules/leaflet/src/geo/LatLng.js","mod::vue/node_modules/leaflet/src/geo/crs/CRS.js","mod::vue/node_modules/leaflet/src/geo/crs/CRS.Earth.js","mod::vue/node_modules/leaflet/src/geo/projection/Projection.SphericalMercator.js","mod::vue/node_modules/leaflet/src/geometry/Transformation.js","mod::vue/node_modules/leaflet/src/geo/crs/CRS.EPSG3857.js","mod::vue/node_modules/leaflet/src/layer/vector/SVG.Util.js","mod::vue/node_modules/leaflet/src/core/Browser.js","mod::vue/node_modules/leaflet/src/dom/DomEvent.Pointer.js","mod::vue/node_modules/leaflet/src/dom/DomEvent.DoubleTap.js","mod::vue/node_modules/leaflet/src/dom/DomUtil.js","mod::vue/node_modules/leaflet/src/dom/DomEvent.js","mod::vue/node_modules/leaflet/src/dom/PosAnimation.js","mod::vue/node_modules/leaflet/src/map/Map.js","mod::vue/node_modules/leaflet/src/control/Control.js","mod::vue/node_modules/leaflet/src/control/Control.Layers.js","mod::vue/node_modules/leaflet/src/control/Control.Zoom.js","mod::vue/node_modules/leaflet/src/control/Control.Scale.js","mod::vue/node_modules/leaflet/src/control/Control.Attribution.js","mod::vue/node_modules/leaflet/src/control/index.js","mod::vue/node_modules/leaflet/src/core/Handler.js","mod::vue/node_modules/leaflet/src/core/index.js","mod::vue/node_modules/leaflet/src/dom/Draggable.js","mod::vue/node_modules/leaflet/src/geometry/PolyUtil.js","mod::vue/node_modules/leaflet/src/geometry/LineUtil.js","mod::vue/node_modules/leaflet/src/geo/projection/Projection.LonLat.js","mod::vue/node_modules/leaflet/src/geo/projection/Projection.Mercator.js","mod::vue/node_modules/leaflet/src/geo/projection/index.js","mod::vue/node_modules/leaflet/src/geo/crs/CRS.EPSG3395.js","mod::vue/node_modules/leaflet/src/geo/crs/CRS.EPSG4326.js","mod::vue/node_modules/leaflet/src/geo/crs/CRS.Simple.js","mod::vue/node_modules/leaflet/src/geo/crs/index.js","mod::vue/node_modules/leaflet/src/layer/Layer.js","mod::vue/node_modules/leaflet/src/layer/LayerGroup.js","mod::vue/node_modules/leaflet/src/layer/FeatureGroup.js","mod::vue/node_modules/leaflet/src/layer/marker/Icon.js","mod::vue/node_modules/leaflet/src/layer/marker/Icon.Default.js","mod::vue/node_modules/leaflet/src/layer/marker/Marker.Drag.js","mod::vue/node_modules/leaflet/src/layer/marker/Marker.js","mod::vue/node_modules/leaflet/src/layer/vector/Path.js","mod::vue/node_modules/leaflet/src/layer/vector/CircleMarker.js","mod::vue/node_modules/leaflet/src/layer/vector/Circle.js","mod::vue/node_modules/leaflet/src/layer/vector/Polyline.js","mod::vue/node_modules/leaflet/src/layer/vector/Polygon.js","mod::vue/node_modules/leaflet/src/layer/GeoJSON.js","mod::vue/node_modules/leaflet/src/layer/ImageOverlay.js","mod::vue/node_modules/leaflet/src/layer/VideoOverlay.js","mod::vue/node_modules/leaflet/src/layer/SVGOverlay.js","mod::vue/node_modules/leaflet/src/layer/DivOverlay.js","mod::vue/node_modules/leaflet/src/layer/Popup.js","mod::vue/node_modules/leaflet/src/layer/Tooltip.js","mod::vue/node_modules/leaflet/src/layer/marker/DivIcon.js","mod::vue/node_modules/leaflet/src/layer/marker/index.js","mod::vue/node_modules/leaflet/src/layer/tile/GridLayer.js","mod::vue/node_modules/leaflet/src/layer/tile/TileLayer.js","mod::vue/node_modules/leaflet/src/layer/tile/TileLayer.WMS.js","mod::vue/node_modules/leaflet/src/layer/tile/index.js","mod::vue/node_modules/leaflet/src/layer/vector/Renderer.js","mod::vue/node_modules/leaflet/src/layer/vector/Canvas.js","mod::vue/node_modules/leaflet/src/layer/vector/SVG.VML.js","mod::vue/node_modules/leaflet/src/layer/vector/SVG.js","mod::vue/node_modules/leaflet/src/layer/vector/Renderer.getRenderer.js","mod::vue/node_modules/leaflet/src/layer/vector/Rectangle.js","mod::vue/node_modules/leaflet/src/layer/vector/index.js","mod::vue/node_modules/leaflet/src/layer/index.js","mod::vue/node_modules/leaflet/src/map/handler/Map.BoxZoom.js","mod::vue/node_modules/leaflet/src/map/handler/Map.DoubleClickZoom.js","mod::vue/node_modules/leaflet/src/map/handler/Map.Drag.js","mod::vue/node_modules/leaflet/src/map/handler/Map.Keyboard.js","mod::vue/node_modules/leaflet/src/map/handler/Map.ScrollWheelZoom.js","mod::vue/node_modules/leaflet/src/map/handler/Map.TapHold.js","mod::vue/node_modules/leaflet/src/map/handler/Map.TouchZoom.js","mod::vue/node_modules/leaflet/src/map/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/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::statiegeldnl/webdesigns/feedback/frontend/frontend.ts","node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js","@webhare/js-api-tools/src/stacktracing.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/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/App.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LoginForm.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/useTheme.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ThemeToggle.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ThemeToggle.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/ThemeToggle.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/CodeInput.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/CodeInput.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/CodeInput.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PasswordInput.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PasswordInput.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/PasswordInput.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FieldError.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/FieldError.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/api.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/passwordStrength.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LoginForm.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/LoginForm.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/TopNav.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/personalList.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/urls.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/TopNav.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/TopNav.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/useWrdAuthState.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/App.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/App.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/router.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AccountView.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/verkennenOptions.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/Toast.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/Toast.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/Toast.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ConfirmDialog.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ConfirmDialog.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/ConfirmDialog.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/userbackUserData.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/userback.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AccountView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/AccountView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AddLocationView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AddLocationView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/AddLocationView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingDetailView.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/beoordelingenScope.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/feedbackLabels.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/scoutScore.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingDetailView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/BeoordelingDetailView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingenView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingenView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/BeoordelingenView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/DetailView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AddToListButton.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AddToListButton.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/AddToListButton.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AgreeDisagree.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AgreeDisagree.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/AgreeDisagree.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationInfoPanel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PhotoCarousel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PhotoCarousel.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/PhotoCarousel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationInfoPanel.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/LocationInfoPanel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationMap.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/maps.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationMap.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/LocationMap.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ProgressDialog.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ProgressDialog.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/ProgressDialog.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RatingBadge.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RatingBadge.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/RatingBadge.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/QuickScanSection.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/QuickScanSection.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/debugHost.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/reviewFlags.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/DetailView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/DetailView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/HomeView.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/distance.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/HomeView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/HomeView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/MyListView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/MyListView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/MyListView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenContainer.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPanel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AccordionSection.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AccordionSection.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/AccordionSection.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/verkennenFilter.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPanel.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/FilterPanel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationDetailPanel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationDetailPanel.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/LocationDetailPanel.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ScoutMap.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ScoutMap.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/ScoutMap.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenView.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/VerkennenView.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersFilterPill.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPill.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPill.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/FilterPill.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersSlider.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersSlider.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/InwonersSlider.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersFilterPill.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/InwonersFilterPill.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusFilterPill.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusBody.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusBody.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/RadiusBody.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusFilterPill.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/RadiusFilterPill.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelLegend.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelChips.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/FunnelChips.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelLegend.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/FunnelLegend.vue","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ComboToggleFilterPill.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/components/ComboToggleFilterPill.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/scoutGemeente.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/scoutInwoners.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/scoutFunnel.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/filterByRadius.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/lightMap.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/funnelPrefs.ts","mod::statiegeldnl/webdesigns/feedback/frontend/lib/comboToggle.ts","/opt/whdata/generated/platform/ap/statiegeldnl.feedback/build/sfc-template:/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenContainer.vue?type=template","mod::statiegeldnl/webdesigns/feedback/frontend/views/VerkennenContainer.vue","mod::statiegeldnl/webdesigns/feedback/frontend/lib/pwa.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","/*!\n  * vue-router v4.5.1\n  * (c) 2025 Eduardo San Martin Morote\n  * @license MIT\n  */\n'use strict';\n\nvar vue = require('vue');\n\nconst isBrowser = typeof document !== 'undefined';\n\n/**\n * Allows differentiating lazy components from functional components and vue-class-component\n * @internal\n *\n * @param component\n */\nfunction isRouteComponent(component) {\n    return (typeof component === 'object' ||\n        'displayName' in component ||\n        'props' in component ||\n        '__vccOpts' in component);\n}\nfunction isESModule(obj) {\n    return (obj.__esModule ||\n        obj[Symbol.toStringTag] === 'Module' ||\n        // support CF with dynamic imports that do not\n        // add the Module string tag\n        (obj.default && isRouteComponent(obj.default)));\n}\nconst assign = Object.assign;\nfunction applyToParams(fn, params) {\n    const newParams = {};\n    for (const key in params) {\n        const value = params[key];\n        newParams[key] = isArray(value)\n            ? value.map(fn)\n            : fn(value);\n    }\n    return newParams;\n}\nconst noop = () => { };\n/**\n * Typesafe alternative to Array.isArray\n * https://github.com/microsoft/TypeScript/pull/48228\n */\nconst isArray = Array.isArray;\n\n/**\n * Encoding Rules (␣ = Space)\n * - Path: ␣ \" < > # ? { }\n * - Query: ␣ \" < > # & =\n * - Hash: ␣ \" < > `\n *\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\n * defines some extra characters to be encoded. Most browsers do not encode them\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\n * plus `-._~`. This extra safety should be applied to query by patching the\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\n * encoded everywhere because some browsers like FF encode it when directly\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\n */\n// const EXTRA_RESERVED_RE = /[!'()*]/g\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\nconst HASH_RE = /#/g; // %23\nconst AMPERSAND_RE = /&/g; // %26\nconst SLASH_RE = /\\//g; // %2F\nconst EQUAL_RE = /=/g; // %3D\nconst IM_RE = /\\?/g; // %3F\nconst PLUS_RE = /\\+/g; // %2B\n/**\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\n * seems to be less flexible than not doing so and I can't find out the legacy\n * systems requiring this for regular requests like text/html. In the standard,\n * the encoding of the plus character is only mentioned for\n * application/x-www-form-urlencoded\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\n * leave the plus character as is in queries. To be more flexible, we allow the\n * plus character on the query, but it can also be manually encoded by the user.\n *\n * Resources:\n * - https://url.spec.whatwg.org/#urlencoded-parsing\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\n */\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\nconst ENC_CARET_RE = /%5E/g; // ^\nconst ENC_BACKTICK_RE = /%60/g; // `\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\nconst ENC_PIPE_RE = /%7C/g; // |\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\nconst ENC_SPACE_RE = /%20/g; // }\n/**\n * Encode characters that need to be encoded on the path, search and hash\n * sections of the URL.\n *\n * @internal\n * @param text - string to encode\n * @returns encoded string\n */\nfunction commonEncode(text) {\n    return encodeURI('' + text)\n        .replace(ENC_PIPE_RE, '|')\n        .replace(ENC_BRACKET_OPEN_RE, '[')\n        .replace(ENC_BRACKET_CLOSE_RE, ']');\n}\n/**\n * Encode characters that need to be encoded on the hash section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeHash(text) {\n    return commonEncode(text)\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^');\n}\n/**\n * Encode characters that need to be encoded query values on the query\n * section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeQueryValue(text) {\n    return (commonEncode(text)\n        // Encode the space as +, encode the + to differentiate it from the space\n        .replace(PLUS_RE, '%2B')\n        .replace(ENC_SPACE_RE, '+')\n        .replace(HASH_RE, '%23')\n        .replace(AMPERSAND_RE, '%26')\n        .replace(ENC_BACKTICK_RE, '`')\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^'));\n}\n/**\n * Like `encodeQueryValue` but also encodes the `=` character.\n *\n * @param text - string to encode\n */\nfunction encodeQueryKey(text) {\n    return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodePath(text) {\n    return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL as a\n * param. This function encodes everything {@link encodePath} does plus the\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\n * string instead.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeParam(text) {\n    return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\n}\n/**\n * Decode text using `decodeURIComponent`. Returns the original text if it\n * fails.\n *\n * @param text - string to decode\n * @returns decoded string\n */\nfunction decode(text) {\n    try {\n        return decodeURIComponent('' + text);\n    }\n    catch (err) {\n    }\n    return '' + text;\n}\n\nconst TRAILING_SLASH_RE = /\\/$/;\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\n/**\n * Transforms a URI into a normalized history location\n *\n * @param parseQuery\n * @param location - URI to normalize\n * @param currentLocation - current absolute location. Allows resolving relative\n * paths. Must start with `/`. Defaults to `/`\n * @returns a normalized history location\n */\nfunction parseURL(parseQuery, location, currentLocation = '/') {\n    let path, query = {}, searchString = '', hash = '';\n    // Could use URL and URLSearchParams but IE 11 doesn't support it\n    // TODO: move to new URL()\n    const hashPos = location.indexOf('#');\n    let searchPos = location.indexOf('?');\n    // the hash appears before the search, so it's not part of the search string\n    if (hashPos < searchPos && hashPos >= 0) {\n        searchPos = -1;\n    }\n    if (searchPos > -1) {\n        path = location.slice(0, searchPos);\n        searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\n        query = parseQuery(searchString);\n    }\n    if (hashPos > -1) {\n        path = path || location.slice(0, hashPos);\n        // keep the # character\n        hash = location.slice(hashPos, location.length);\n    }\n    // no search and no query\n    path = resolveRelativePath(path != null ? path : location, currentLocation);\n    // empty path means a relative query or hash `?foo=f`, `#thing`\n    return {\n        fullPath: path + (searchString && '?') + searchString + hash,\n        path,\n        query,\n        hash: decode(hash),\n    };\n}\n/**\n * Stringifies a URL object\n *\n * @param stringifyQuery\n * @param location\n */\nfunction stringifyURL(stringifyQuery, location) {\n    const query = location.query ? stringifyQuery(location.query) : '';\n    return location.path + (query && '?') + query + (location.hash || '');\n}\n/**\n * Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\n *\n * @param pathname - location.pathname\n * @param base - base to strip off\n */\nfunction stripBase(pathname, base) {\n    // no base or base is not found at the beginning\n    if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\n        return pathname;\n    return pathname.slice(base.length) || '/';\n}\n/**\n * Checks if two RouteLocation are equal. This means that both locations are\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\n * parameters and `hash` are the same\n *\n * @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\n * @param a - first {@link RouteLocation}\n * @param b - second {@link RouteLocation}\n */\nfunction isSameRouteLocation(stringifyQuery, a, b) {\n    const aLastIndex = a.matched.length - 1;\n    const bLastIndex = b.matched.length - 1;\n    return (aLastIndex > -1 &&\n        aLastIndex === bLastIndex &&\n        isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\n        isSameRouteLocationParams(a.params, b.params) &&\n        stringifyQuery(a.query) === stringifyQuery(b.query) &&\n        a.hash === b.hash);\n}\n/**\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\n * considered equal to the `RouteRecord` they are aliasing.\n *\n * @param a - first {@link RouteRecord}\n * @param b - second {@link RouteRecord}\n */\nfunction isSameRouteRecord(a, b) {\n    // since the original record has an undefined value for aliasOf\n    // but all aliases point to the original record, this will always compare\n    // the original record\n    return (a.aliasOf || a) === (b.aliasOf || b);\n}\nfunction isSameRouteLocationParams(a, b) {\n    if (Object.keys(a).length !== Object.keys(b).length)\n        return false;\n    for (const key in a) {\n        if (!isSameRouteLocationParamsValue(a[key], b[key]))\n            return false;\n    }\n    return true;\n}\nfunction isSameRouteLocationParamsValue(a, b) {\n    return isArray(a)\n        ? isEquivalentArray(a, b)\n        : isArray(b)\n            ? isEquivalentArray(b, a)\n            : a === b;\n}\n/**\n * Check if two arrays are the same or if an array with one single entry is the\n * same as another primitive value. Used to check query and parameters\n *\n * @param a - array of values\n * @param b - array of values or a single value\n */\nfunction isEquivalentArray(a, b) {\n    return isArray(b)\n        ? a.length === b.length && a.every((value, i) => value === b[i])\n        : a.length === 1 && a[0] === b;\n}\n/**\n * Resolves a relative path that starts with `.`.\n *\n * @param to - path location we are resolving\n * @param from - currentLocation.path, should start with `/`\n */\nfunction resolveRelativePath(to, from) {\n    if (to.startsWith('/'))\n        return to;\n    if (!to)\n        return from;\n    const fromSegments = from.split('/');\n    const toSegments = to.split('/');\n    const lastToSegment = toSegments[toSegments.length - 1];\n    // make . and ./ the same (../ === .., ../../ === ../..)\n    // this is the same behavior as new URL()\n    if (lastToSegment === '..' || lastToSegment === '.') {\n        toSegments.push('');\n    }\n    let position = fromSegments.length - 1;\n    let toPosition;\n    let segment;\n    for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\n        segment = toSegments[toPosition];\n        // we stay on the same position\n        if (segment === '.')\n            continue;\n        // go up in the from array\n        if (segment === '..') {\n            // we can't go below zero, but we still need to increment toPosition\n            if (position > 1)\n                position--;\n            // continue\n        }\n        // we reached a non-relative path, we stop here\n        else\n            break;\n    }\n    return (fromSegments.slice(0, position).join('/') +\n        '/' +\n        toSegments.slice(toPosition).join('/'));\n}\n/**\n * Initial route location where the router is. Can be used in navigation guards\n * to differentiate the initial navigation.\n *\n * @example\n * ```js\n * import { START_LOCATION } from 'vue-router'\n *\n * router.beforeEach((to, from) => {\n *   if (from === START_LOCATION) {\n *     // initial navigation\n *   }\n * })\n * ```\n */\nconst START_LOCATION_NORMALIZED = {\n    path: '/',\n    // TODO: could we use a symbol in the future?\n    name: undefined,\n    params: {},\n    query: {},\n    hash: '',\n    fullPath: '/',\n    matched: [],\n    meta: {},\n    redirectedFrom: undefined,\n};\n\nvar NavigationType;\n(function (NavigationType) {\n    NavigationType[\"pop\"] = \"pop\";\n    NavigationType[\"push\"] = \"push\";\n})(NavigationType || (NavigationType = {}));\nvar NavigationDirection;\n(function (NavigationDirection) {\n    NavigationDirection[\"back\"] = \"back\";\n    NavigationDirection[\"forward\"] = \"forward\";\n    NavigationDirection[\"unknown\"] = \"\";\n})(NavigationDirection || (NavigationDirection = {}));\n/**\n * Starting location for Histories\n */\nconst START = '';\n// Generic utils\n/**\n * Normalizes a base by removing any trailing slash and reading the base tag if\n * present.\n *\n * @param base - base to normalize\n */\nfunction normalizeBase(base) {\n    if (!base) {\n        if (isBrowser) {\n            // respect <base> tag\n            const baseEl = document.querySelector('base');\n            base = (baseEl && baseEl.getAttribute('href')) || '/';\n            // strip full URL origin\n            base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\n        }\n        else {\n            base = '/';\n        }\n    }\n    // ensure leading slash when it was removed by the regex above avoid leading\n    // slash with hash because the file could be read from the disk like file://\n    // and the leading slash would cause problems\n    if (base[0] !== '/' && base[0] !== '#')\n        base = '/' + base;\n    // remove the trailing slash so all other method can just do `base + fullPath`\n    // to build an href\n    return removeTrailingSlash(base);\n}\n// remove any character before the hash\nconst BEFORE_HASH_RE = /^[^#]+#/;\nfunction createHref(base, location) {\n    return base.replace(BEFORE_HASH_RE, '#') + location;\n}\n\nfunction getElementPosition(el, offset) {\n    const docRect = document.documentElement.getBoundingClientRect();\n    const elRect = el.getBoundingClientRect();\n    return {\n        behavior: offset.behavior,\n        left: elRect.left - docRect.left - (offset.left || 0),\n        top: elRect.top - docRect.top - (offset.top || 0),\n    };\n}\nconst computeScrollPosition = () => ({\n    left: window.scrollX,\n    top: window.scrollY,\n});\nfunction scrollToPosition(position) {\n    let scrollToOptions;\n    if ('el' in position) {\n        const positionEl = position.el;\n        const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\n        const el = typeof positionEl === 'string'\n            ? isIdSelector\n                ? document.getElementById(positionEl.slice(1))\n                : document.querySelector(positionEl)\n            : positionEl;\n        if (!el) {\n            return;\n        }\n        scrollToOptions = getElementPosition(el, position);\n    }\n    else {\n        scrollToOptions = position;\n    }\n    if ('scrollBehavior' in document.documentElement.style)\n        window.scrollTo(scrollToOptions);\n    else {\n        window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);\n    }\n}\nfunction getScrollKey(path, delta) {\n    const position = history.state ? history.state.position - delta : -1;\n    return position + path;\n}\nconst scrollPositions = new Map();\nfunction saveScrollPosition(key, scrollPosition) {\n    scrollPositions.set(key, scrollPosition);\n}\nfunction getSavedScrollPosition(key) {\n    const scroll = scrollPositions.get(key);\n    // consume it so it's not used again\n    scrollPositions.delete(key);\n    return scroll;\n}\n// TODO: RFC about how to save scroll position\n/**\n * ScrollBehavior instance used by the router to compute and restore the scroll\n * position when navigating.\n */\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\n//   // returns a scroll position that can be saved in history\n//   compute(): ScrollPositionEntry\n//   // can take an extended ScrollPositionEntry\n//   scroll(position: ScrollPosition): void\n// }\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\n//   compute: computeScroll,\n//   scroll: scrollToPosition,\n// }\n\nlet createBaseLocation = () => location.protocol + '//' + location.host;\n/**\n * Creates a normalized history location from a window.location object\n * @param base - The base path\n * @param location - The window.location object\n */\nfunction createCurrentLocation(base, location) {\n    const { pathname, search, hash } = location;\n    // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\n    const hashPos = base.indexOf('#');\n    if (hashPos > -1) {\n        let slicePos = hash.includes(base.slice(hashPos))\n            ? base.slice(hashPos).length\n            : 1;\n        let pathFromHash = hash.slice(slicePos);\n        // prepend the starting slash to hash so the url starts with /#\n        if (pathFromHash[0] !== '/')\n            pathFromHash = '/' + pathFromHash;\n        return stripBase(pathFromHash, '');\n    }\n    const path = stripBase(pathname, base);\n    return path + search + hash;\n}\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\n    let listeners = [];\n    let teardowns = [];\n    // TODO: should it be a stack? a Dict. Check if the popstate listener\n    // can trigger twice\n    let pauseState = null;\n    const popStateHandler = ({ state, }) => {\n        const to = createCurrentLocation(base, location);\n        const from = currentLocation.value;\n        const fromState = historyState.value;\n        let delta = 0;\n        if (state) {\n            currentLocation.value = to;\n            historyState.value = state;\n            // ignore the popstate and reset the pauseState\n            if (pauseState && pauseState === from) {\n                pauseState = null;\n                return;\n            }\n            delta = fromState ? state.position - fromState.position : 0;\n        }\n        else {\n            replace(to);\n        }\n        // Here we could also revert the navigation by calling history.go(-delta)\n        // this listener will have to be adapted to not trigger again and to wait for the url\n        // to be updated before triggering the listeners. Some kind of validation function would also\n        // need to be passed to the listeners so the navigation can be accepted\n        // call all listeners\n        listeners.forEach(listener => {\n            listener(currentLocation.value, from, {\n                delta,\n                type: NavigationType.pop,\n                direction: delta\n                    ? delta > 0\n                        ? NavigationDirection.forward\n                        : NavigationDirection.back\n                    : NavigationDirection.unknown,\n            });\n        });\n    };\n    function pauseListeners() {\n        pauseState = currentLocation.value;\n    }\n    function listen(callback) {\n        // set up the listener and prepare teardown callbacks\n        listeners.push(callback);\n        const teardown = () => {\n            const index = listeners.indexOf(callback);\n            if (index > -1)\n                listeners.splice(index, 1);\n        };\n        teardowns.push(teardown);\n        return teardown;\n    }\n    function beforeUnloadListener() {\n        const { history } = window;\n        if (!history.state)\n            return;\n        history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\n    }\n    function destroy() {\n        for (const teardown of teardowns)\n            teardown();\n        teardowns = [];\n        window.removeEventListener('popstate', popStateHandler);\n        window.removeEventListener('beforeunload', beforeUnloadListener);\n    }\n    // set up the listeners and prepare teardown callbacks\n    window.addEventListener('popstate', popStateHandler);\n    // TODO: could we use 'pagehide' or 'visibilitychange' instead?\n    // https://developer.chrome.com/blog/page-lifecycle-api/\n    window.addEventListener('beforeunload', beforeUnloadListener, {\n        passive: true,\n    });\n    return {\n        pauseListeners,\n        listen,\n        destroy,\n    };\n}\n/**\n * Creates a state object\n */\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\n    return {\n        back,\n        current,\n        forward,\n        replaced,\n        position: window.history.length,\n        scroll: computeScroll ? computeScrollPosition() : null,\n    };\n}\nfunction useHistoryStateNavigation(base) {\n    const { history, location } = window;\n    // private variables\n    const currentLocation = {\n        value: createCurrentLocation(base, location),\n    };\n    const historyState = { value: history.state };\n    // build current history entry as this is a fresh navigation\n    if (!historyState.value) {\n        changeLocation(currentLocation.value, {\n            back: null,\n            current: currentLocation.value,\n            forward: null,\n            // the length is off by one, we need to decrease it\n            position: history.length - 1,\n            replaced: true,\n            // don't add a scroll as the user may have an anchor, and we want\n            // scrollBehavior to be triggered without a saved position\n            scroll: null,\n        }, true);\n    }\n    function changeLocation(to, state, replace) {\n        /**\n         * if a base tag is provided, and we are on a normal domain, we have to\n         * respect the provided `base` attribute because pushState() will use it and\n         * potentially erase anything before the `#` like at\n         * https://github.com/vuejs/router/issues/685 where a base of\n         * `/folder/#` but a base of `/` would erase the `/folder/` section. If\n         * there is no host, the `<base>` tag makes no sense and if there isn't a\n         * base tag we can just use everything after the `#`.\n         */\n        const hashIndex = base.indexOf('#');\n        const url = hashIndex > -1\n            ? (location.host && document.querySelector('base')\n                ? base\n                : base.slice(hashIndex)) + to\n            : createBaseLocation() + base + to;\n        try {\n            // BROWSER QUIRK\n            // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\n            history[replace ? 'replaceState' : 'pushState'](state, '', url);\n            historyState.value = state;\n        }\n        catch (err) {\n            {\n                console.error(err);\n            }\n            // Force the navigation, this also resets the call count\n            location[replace ? 'replace' : 'assign'](url);\n        }\n    }\n    function replace(to, data) {\n        const state = assign({}, history.state, buildState(historyState.value.back, \n        // keep back and forward entries but override current position\n        to, historyState.value.forward, true), data, { position: historyState.value.position });\n        changeLocation(to, state, true);\n        currentLocation.value = to;\n    }\n    function push(to, data) {\n        // Add to current entry the information of where we are going\n        // as well as saving the current position\n        const currentState = assign({}, \n        // use current history state to gracefully handle a wrong call to\n        // history.replaceState\n        // https://github.com/vuejs/router/issues/366\n        historyState.value, history.state, {\n            forward: to,\n            scroll: computeScrollPosition(),\n        });\n        changeLocation(currentState.current, currentState, true);\n        const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\n        changeLocation(to, state, false);\n        currentLocation.value = to;\n    }\n    return {\n        location: currentLocation,\n        state: historyState,\n        push,\n        replace,\n    };\n}\n/**\n * Creates an HTML5 history. Most common history for single page applications.\n *\n * @param base -\n */\nfunction createWebHistory(base) {\n    base = normalizeBase(base);\n    const historyNavigation = useHistoryStateNavigation(base);\n    const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\n    function go(delta, triggerListeners = true) {\n        if (!triggerListeners)\n            historyListeners.pauseListeners();\n        history.go(delta);\n    }\n    const routerHistory = assign({\n        // it's overridden right after\n        location: '',\n        base,\n        go,\n        createHref: createHref.bind(null, base),\n    }, historyNavigation, historyListeners);\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => historyNavigation.location.value,\n    });\n    Object.defineProperty(routerHistory, 'state', {\n        enumerable: true,\n        get: () => historyNavigation.state.value,\n    });\n    return routerHistory;\n}\n\n/**\n * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\n *\n * @param base - Base applied to all urls, defaults to '/'\n * @returns a history object that can be passed to the router constructor\n */\nfunction createMemoryHistory(base = '') {\n    let listeners = [];\n    let queue = [[START, {}]];\n    let position = 0;\n    base = normalizeBase(base);\n    function setLocation(location, state = {}) {\n        position++;\n        if (position !== queue.length) {\n            // we are in the middle, we remove everything from here in the queue\n            queue.splice(position);\n        }\n        queue.push([location, state]);\n    }\n    function triggerListeners(to, from, { direction, delta }) {\n        const info = {\n            direction,\n            delta,\n            type: NavigationType.pop,\n        };\n        for (const callback of listeners) {\n            callback(to, from, info);\n        }\n    }\n    const routerHistory = {\n        // rewritten by Object.defineProperty\n        location: START,\n        // rewritten by Object.defineProperty\n        state: {},\n        base,\n        createHref: createHref.bind(null, base),\n        replace(to, state) {\n            // remove current entry and decrement position\n            queue.splice(position--, 1);\n            setLocation(to, state);\n        },\n        push(to, state) {\n            setLocation(to, state);\n        },\n        listen(callback) {\n            listeners.push(callback);\n            return () => {\n                const index = listeners.indexOf(callback);\n                if (index > -1)\n                    listeners.splice(index, 1);\n            };\n        },\n        destroy() {\n            listeners = [];\n            queue = [[START, {}]];\n            position = 0;\n        },\n        go(delta, shouldTrigger = true) {\n            const from = this.location;\n            const direction = \n            // we are considering delta === 0 going forward, but in abstract mode\n            // using 0 for the delta doesn't make sense like it does in html5 where\n            // it reloads the page\n            delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\n            position = Math.max(0, Math.min(position + delta, queue.length - 1));\n            if (shouldTrigger) {\n                triggerListeners(this.location, from, {\n                    direction,\n                    delta,\n                });\n            }\n        },\n    };\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => queue[position][0],\n    });\n    Object.defineProperty(routerHistory, 'state', {\n        enumerable: true,\n        get: () => queue[position][1],\n    });\n    return routerHistory;\n}\n\n/**\n * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\n * handle any URL is not possible.\n *\n * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\n * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\n * calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\n * after the `#`).\n *\n * @example\n * ```js\n * // at https://example.com/folder\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\n * // you should avoid doing this because it changes the original url and breaks copying urls\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\n *\n * // at file:///usr/etc/folder/index.html\n * // for locations with no `host`, the base is ignored\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\n * ```\n */\nfunction createWebHashHistory(base) {\n    // Make sure this implementation is fine in terms of encoding, specially for IE11\n    // for `file://`, directly use the pathname and ignore the base\n    // location.pathname contains an initial `/` even at the root: `https://example.com`\n    base = location.host ? base || location.pathname + location.search : '';\n    // allow the user to provide a `#` in the middle: `/base/#/app`\n    if (!base.includes('#'))\n        base += '#';\n    return createWebHistory(base);\n}\n\nfunction isRouteLocation(route) {\n    return typeof route === 'string' || (route && typeof route === 'object');\n}\nfunction isRouteName(name) {\n    return typeof name === 'string' || typeof name === 'symbol';\n}\n\nconst NavigationFailureSymbol = Symbol('');\n/**\n * Enumeration with all possible types for navigation failures. Can be passed to\n * {@link isNavigationFailure} to check for specific failures.\n */\nexports.NavigationFailureType = void 0;\n(function (NavigationFailureType) {\n    /**\n     * An aborted navigation is a navigation that failed because a navigation\n     * guard returned `false` or called `next(false)`\n     */\n    NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\n    /**\n     * A cancelled navigation is a navigation that failed because a more recent\n     * navigation finished started (not necessarily finished).\n     */\n    NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\n    /**\n     * A duplicated navigation is a navigation that failed because it was\n     * initiated while already being at the exact same location.\n     */\n    NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\n})(exports.NavigationFailureType || (exports.NavigationFailureType = {}));\n// DEV only debug messages\nconst ErrorTypeMessages = {\n    [1 /* ErrorTypes.MATCHER_NOT_FOUND */]({ location, currentLocation }) {\n        return `No match for\\n ${JSON.stringify(location)}${currentLocation\n            ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\n            : ''}`;\n    },\n    [2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\n        return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\n    },\n    [4 /* ErrorTypes.NAVIGATION_ABORTED */]({ from, to }) {\n        return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\n    },\n    [8 /* ErrorTypes.NAVIGATION_CANCELLED */]({ from, to }) {\n        return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\n    },\n    [16 /* ErrorTypes.NAVIGATION_DUPLICATED */]({ from, to }) {\n        return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\n    },\n};\n/**\n * Creates a typed NavigationFailure object.\n * @internal\n * @param type - NavigationFailureType\n * @param params - { from, to }\n */\nfunction createRouterError(type, params) {\n    // keep full error messages in cjs versions\n    {\n        return assign(new Error(ErrorTypeMessages[type](params)), {\n            type,\n            [NavigationFailureSymbol]: true,\n        }, params);\n    }\n}\nfunction isNavigationFailure(error, type) {\n    return (error instanceof Error &&\n        NavigationFailureSymbol in error &&\n        (type == null || !!(error.type & type)));\n}\nconst propertiesToLog = ['params', 'query', 'hash'];\nfunction stringifyRoute(to) {\n    if (typeof to === 'string')\n        return to;\n    if (to.path != null)\n        return to.path;\n    const location = {};\n    for (const key of propertiesToLog) {\n        if (key in to)\n            location[key] = to[key];\n    }\n    return JSON.stringify(location, null, 2);\n}\n\n// default pattern for a param: non-greedy everything but /\nconst BASE_PARAM_PATTERN = '[^/]+?';\nconst BASE_PATH_PARSER_OPTIONS = {\n    sensitive: false,\n    strict: false,\n    start: true,\n    end: true,\n};\n// Special Regex characters that must be escaped in static tokens\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\n/**\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\n *\n * @param segments - array of segments returned by tokenizePath\n * @param extraOptions - optional options for the regexp\n * @returns a PathParser\n */\nfunction tokensToParser(segments, extraOptions) {\n    const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\n    // the amount of scores is the same as the length of segments except for the root segment \"/\"\n    const score = [];\n    // the regexp as a string\n    let pattern = options.start ? '^' : '';\n    // extracted keys\n    const keys = [];\n    for (const segment of segments) {\n        // the root segment needs special treatment\n        const segmentScores = segment.length ? [] : [90 /* PathScore.Root */];\n        // allow trailing slash\n        if (options.strict && !segment.length)\n            pattern += '/';\n        for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\n            const token = segment[tokenIndex];\n            // resets the score if we are inside a sub-segment /:a-other-:b\n            let subSegmentScore = 40 /* PathScore.Segment */ +\n                (options.sensitive ? 0.25 /* PathScore.BonusCaseSensitive */ : 0);\n            if (token.type === 0 /* TokenType.Static */) {\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    pattern += '/';\n                pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\n                subSegmentScore += 40 /* PathScore.Static */;\n            }\n            else if (token.type === 1 /* TokenType.Param */) {\n                const { value, repeatable, optional, regexp } = token;\n                keys.push({\n                    name: value,\n                    repeatable,\n                    optional,\n                });\n                const re = regexp ? regexp : BASE_PARAM_PATTERN;\n                // the user provided a custom regexp /:id(\\\\d+)\n                if (re !== BASE_PARAM_PATTERN) {\n                    subSegmentScore += 10 /* PathScore.BonusCustomRegExp */;\n                    // make sure the regexp is valid before using it\n                    try {\n                        new RegExp(`(${re})`);\n                    }\n                    catch (err) {\n                        throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\n                            err.message);\n                    }\n                }\n                // when we repeat we must take care of the repeating leading slash\n                let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    subPattern =\n                        // avoid an optional / if there are more segments e.g. /:p?-static\n                        // or /:p?-:p2\n                        optional && segment.length < 2\n                            ? `(?:/${subPattern})`\n                            : '/' + subPattern;\n                if (optional)\n                    subPattern += '?';\n                pattern += subPattern;\n                subSegmentScore += 20 /* PathScore.Dynamic */;\n                if (optional)\n                    subSegmentScore += -8 /* PathScore.BonusOptional */;\n                if (repeatable)\n                    subSegmentScore += -20 /* PathScore.BonusRepeatable */;\n                if (re === '.*')\n                    subSegmentScore += -50 /* PathScore.BonusWildcard */;\n            }\n            segmentScores.push(subSegmentScore);\n        }\n        // an empty array like /home/ -> [[{home}], []]\n        // if (!segment.length) pattern += '/'\n        score.push(segmentScores);\n    }\n    // only apply the strict bonus to the last score\n    if (options.strict && options.end) {\n        const i = score.length - 1;\n        score[i][score[i].length - 1] += 0.7000000000000001 /* PathScore.BonusStrict */;\n    }\n    // TODO: dev only warn double trailing slash\n    if (!options.strict)\n        pattern += '/?';\n    if (options.end)\n        pattern += '$';\n    // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\n    else if (options.strict && !pattern.endsWith('/'))\n        pattern += '(?:/|$)';\n    const re = new RegExp(pattern, options.sensitive ? '' : 'i');\n    function parse(path) {\n        const match = path.match(re);\n        const params = {};\n        if (!match)\n            return null;\n        for (let i = 1; i < match.length; i++) {\n            const value = match[i] || '';\n            const key = keys[i - 1];\n            params[key.name] = value && key.repeatable ? value.split('/') : value;\n        }\n        return params;\n    }\n    function stringify(params) {\n        let path = '';\n        // for optional parameters to allow to be empty\n        let avoidDuplicatedSlash = false;\n        for (const segment of segments) {\n            if (!avoidDuplicatedSlash || !path.endsWith('/'))\n                path += '/';\n            avoidDuplicatedSlash = false;\n            for (const token of segment) {\n                if (token.type === 0 /* TokenType.Static */) {\n                    path += token.value;\n                }\n                else if (token.type === 1 /* TokenType.Param */) {\n                    const { value, repeatable, optional } = token;\n                    const param = value in params ? params[value] : '';\n                    if (isArray(param) && !repeatable) {\n                        throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\n                    }\n                    const text = isArray(param)\n                        ? param.join('/')\n                        : param;\n                    if (!text) {\n                        if (optional) {\n                            // if we have more than one optional param like /:a?-static we don't need to care about the optional param\n                            if (segment.length < 2) {\n                                // remove the last slash as we could be at the end\n                                if (path.endsWith('/'))\n                                    path = path.slice(0, -1);\n                                // do not append a slash on the next iteration\n                                else\n                                    avoidDuplicatedSlash = true;\n                            }\n                        }\n                        else\n                            throw new Error(`Missing required param \"${value}\"`);\n                    }\n                    path += text;\n                }\n            }\n        }\n        // avoid empty path when we have multiple optional params\n        return path || '/';\n    }\n    return {\n        re,\n        score,\n        keys,\n        parse,\n        stringify,\n    };\n}\n/**\n * Compares an array of numbers as used in PathParser.score and returns a\n * number. This function can be used to `sort` an array\n *\n * @param a - first array of numbers\n * @param b - second array of numbers\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n * should be sorted first\n */\nfunction compareScoreArray(a, b) {\n    let i = 0;\n    while (i < a.length && i < b.length) {\n        const diff = b[i] - a[i];\n        // only keep going if diff === 0\n        if (diff)\n            return diff;\n        i++;\n    }\n    // if the last subsegment was Static, the shorter segments should be sorted first\n    // otherwise sort the longest segment first\n    if (a.length < b.length) {\n        return a.length === 1 && a[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? -1\n            : 1;\n    }\n    else if (a.length > b.length) {\n        return b.length === 1 && b[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? 1\n            : -1;\n    }\n    return 0;\n}\n/**\n * Compare function that can be used with `sort` to sort an array of PathParser\n *\n * @param a - first PathParser\n * @param b - second PathParser\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n */\nfunction comparePathParserScore(a, b) {\n    let i = 0;\n    const aScore = a.score;\n    const bScore = b.score;\n    while (i < aScore.length && i < bScore.length) {\n        const comp = compareScoreArray(aScore[i], bScore[i]);\n        // do not return if both are equal\n        if (comp)\n            return comp;\n        i++;\n    }\n    if (Math.abs(bScore.length - aScore.length) === 1) {\n        if (isLastScoreNegative(aScore))\n            return 1;\n        if (isLastScoreNegative(bScore))\n            return -1;\n    }\n    // if a and b share the same score entries but b has more, sort b first\n    return bScore.length - aScore.length;\n    // this is the ternary version\n    // return aScore.length < bScore.length\n    //   ? 1\n    //   : aScore.length > bScore.length\n    //   ? -1\n    //   : 0\n}\n/**\n * This allows detecting splats at the end of a path: /home/:id(.*)*\n *\n * @param score - score to check\n * @returns true if the last entry is negative\n */\nfunction isLastScoreNegative(score) {\n    const last = score[score.length - 1];\n    return score.length > 0 && last[last.length - 1] < 0;\n}\n\nconst ROOT_TOKEN = {\n    type: 0 /* TokenType.Static */,\n    value: '',\n};\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\n// After some profiling, the cache seems to be unnecessary because tokenizePath\n// (the slowest part of adding a route) is very fast\n// const tokenCache = new Map<string, Token[][]>()\nfunction tokenizePath(path) {\n    if (!path)\n        return [[]];\n    if (path === '/')\n        return [[ROOT_TOKEN]];\n    if (!path.startsWith('/')) {\n        throw new Error(`Invalid path \"${path}\"`);\n    }\n    // if (tokenCache.has(path)) return tokenCache.get(path)!\n    function crash(message) {\n        throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\n    }\n    let state = 0 /* TokenizerState.Static */;\n    let previousState = state;\n    const tokens = [];\n    // the segment will always be valid because we get into the initial state\n    // with the leading /\n    let segment;\n    function finalizeSegment() {\n        if (segment)\n            tokens.push(segment);\n        segment = [];\n    }\n    // index on the path\n    let i = 0;\n    // char at index\n    let char;\n    // buffer of the value read\n    let buffer = '';\n    // custom regexp for a param\n    let customRe = '';\n    function consumeBuffer() {\n        if (!buffer)\n            return;\n        if (state === 0 /* TokenizerState.Static */) {\n            segment.push({\n                type: 0 /* TokenType.Static */,\n                value: buffer,\n            });\n        }\n        else if (state === 1 /* TokenizerState.Param */ ||\n            state === 2 /* TokenizerState.ParamRegExp */ ||\n            state === 3 /* TokenizerState.ParamRegExpEnd */) {\n            if (segment.length > 1 && (char === '*' || char === '+'))\n                crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\n            segment.push({\n                type: 1 /* TokenType.Param */,\n                value: buffer,\n                regexp: customRe,\n                repeatable: char === '*' || char === '+',\n                optional: char === '*' || char === '?',\n            });\n        }\n        else {\n            crash('Invalid state to consume buffer');\n        }\n        buffer = '';\n    }\n    function addCharToBuffer() {\n        buffer += char;\n    }\n    while (i < path.length) {\n        char = path[i++];\n        if (char === '\\\\' && state !== 2 /* TokenizerState.ParamRegExp */) {\n            previousState = state;\n            state = 4 /* TokenizerState.EscapeNext */;\n            continue;\n        }\n        switch (state) {\n            case 0 /* TokenizerState.Static */:\n                if (char === '/') {\n                    if (buffer) {\n                        consumeBuffer();\n                    }\n                    finalizeSegment();\n                }\n                else if (char === ':') {\n                    consumeBuffer();\n                    state = 1 /* TokenizerState.Param */;\n                }\n                else {\n                    addCharToBuffer();\n                }\n                break;\n            case 4 /* TokenizerState.EscapeNext */:\n                addCharToBuffer();\n                state = previousState;\n                break;\n            case 1 /* TokenizerState.Param */:\n                if (char === '(') {\n                    state = 2 /* TokenizerState.ParamRegExp */;\n                }\n                else if (VALID_PARAM_RE.test(char)) {\n                    addCharToBuffer();\n                }\n                else {\n                    consumeBuffer();\n                    state = 0 /* TokenizerState.Static */;\n                    // go back one character if we were not modifying\n                    if (char !== '*' && char !== '?' && char !== '+')\n                        i--;\n                }\n                break;\n            case 2 /* TokenizerState.ParamRegExp */:\n                // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\n                // it already works by escaping the closing )\n                // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\n                // is this really something people need since you can also write\n                // /prefix_:p()_suffix\n                if (char === ')') {\n                    // handle the escaped )\n                    if (customRe[customRe.length - 1] == '\\\\')\n                        customRe = customRe.slice(0, -1) + char;\n                    else\n                        state = 3 /* TokenizerState.ParamRegExpEnd */;\n                }\n                else {\n                    customRe += char;\n                }\n                break;\n            case 3 /* TokenizerState.ParamRegExpEnd */:\n                // same as finalizing a param\n                consumeBuffer();\n                state = 0 /* TokenizerState.Static */;\n                // go back one character if we were not modifying\n                if (char !== '*' && char !== '?' && char !== '+')\n                    i--;\n                customRe = '';\n                break;\n            default:\n                crash('Unknown state');\n                break;\n        }\n    }\n    if (state === 2 /* TokenizerState.ParamRegExp */)\n        crash(`Unfinished custom RegExp for param \"${buffer}\"`);\n    consumeBuffer();\n    finalizeSegment();\n    // tokenCache.set(path, tokens)\n    return tokens;\n}\n\nfunction createRouteRecordMatcher(record, parent, options) {\n    const parser = tokensToParser(tokenizePath(record.path), options);\n    const matcher = assign(parser, {\n        record,\n        parent,\n        // these needs to be populated by the parent\n        children: [],\n        alias: [],\n    });\n    if (parent) {\n        // both are aliases or both are not aliases\n        // we don't want to mix them because the order is used when\n        // passing originalRecord in Matcher.addRoute\n        if (!matcher.record.aliasOf === !parent.record.aliasOf)\n            parent.children.push(matcher);\n    }\n    return matcher;\n}\n\n/**\n * Creates a Router Matcher.\n *\n * @internal\n * @param routes - array of initial routes\n * @param globalOptions - global route options\n */\nfunction createRouterMatcher(routes, globalOptions) {\n    // normalized ordered array of matchers\n    const matchers = [];\n    const matcherMap = new Map();\n    globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\n    function getRecordMatcher(name) {\n        return matcherMap.get(name);\n    }\n    function addRoute(record, parent, originalRecord) {\n        // used later on to remove by name\n        const isRootAdd = !originalRecord;\n        const mainNormalizedRecord = normalizeRouteRecord(record);\n        // we might be the child of an alias\n        mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\n        const options = mergeOptions(globalOptions, record);\n        // generate an array of records to correctly handle aliases\n        const normalizedRecords = [mainNormalizedRecord];\n        if ('alias' in record) {\n            const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\n            for (const alias of aliases) {\n                normalizedRecords.push(\n                // we need to normalize again to ensure the `mods` property\n                // being non enumerable\n                normalizeRouteRecord(assign({}, mainNormalizedRecord, {\n                    // this allows us to hold a copy of the `components` option\n                    // so that async components cache is hold on the original record\n                    components: originalRecord\n                        ? originalRecord.record.components\n                        : mainNormalizedRecord.components,\n                    path: alias,\n                    // we might be the child of an alias\n                    aliasOf: originalRecord\n                        ? originalRecord.record\n                        : mainNormalizedRecord,\n                    // the aliases are always of the same kind as the original since they\n                    // are defined on the same record\n                })));\n            }\n        }\n        let matcher;\n        let originalMatcher;\n        for (const normalizedRecord of normalizedRecords) {\n            const { path } = normalizedRecord;\n            // Build up the path for nested routes if the child isn't an absolute\n            // route. Only add the / delimiter if the child path isn't empty and if the\n            // parent path doesn't have a trailing slash\n            if (parent && path[0] !== '/') {\n                const parentPath = parent.record.path;\n                const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\n                normalizedRecord.path =\n                    parent.record.path + (path && connectingSlash + path);\n            }\n            // create the object beforehand, so it can be passed to children\n            matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\n            // if we are an alias we must tell the original record that we exist,\n            // so we can be removed\n            if (originalRecord) {\n                originalRecord.alias.push(matcher);\n            }\n            else {\n                // otherwise, the first record is the original and others are aliases\n                originalMatcher = originalMatcher || matcher;\n                if (originalMatcher !== matcher)\n                    originalMatcher.alias.push(matcher);\n                // remove the route if named and only for the top record (avoid in nested calls)\n                // this works because the original record is the first one\n                if (isRootAdd && record.name && !isAliasRecord(matcher)) {\n                    removeRoute(record.name);\n                }\n            }\n            // Avoid adding a record that doesn't display anything. This allows passing through records without a component to\n            // not be reached and pass through the catch all route\n            if (isMatchable(matcher)) {\n                insertMatcher(matcher);\n            }\n            if (mainNormalizedRecord.children) {\n                const children = mainNormalizedRecord.children;\n                for (let i = 0; i < children.length; i++) {\n                    addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\n                }\n            }\n            // if there was no original record, then the first one was not an alias and all\n            // other aliases (if any) need to reference this record when adding children\n            originalRecord = originalRecord || matcher;\n            // TODO: add normalized records for more flexibility\n            // if (parent && isAliasRecord(originalRecord)) {\n            //   parent.children.push(originalRecord)\n            // }\n        }\n        return originalMatcher\n            ? () => {\n                // since other matchers are aliases, they should be removed by the original matcher\n                removeRoute(originalMatcher);\n            }\n            : noop;\n    }\n    function removeRoute(matcherRef) {\n        if (isRouteName(matcherRef)) {\n            const matcher = matcherMap.get(matcherRef);\n            if (matcher) {\n                matcherMap.delete(matcherRef);\n                matchers.splice(matchers.indexOf(matcher), 1);\n                matcher.children.forEach(removeRoute);\n                matcher.alias.forEach(removeRoute);\n            }\n        }\n        else {\n            const index = matchers.indexOf(matcherRef);\n            if (index > -1) {\n                matchers.splice(index, 1);\n                if (matcherRef.record.name)\n                    matcherMap.delete(matcherRef.record.name);\n                matcherRef.children.forEach(removeRoute);\n                matcherRef.alias.forEach(removeRoute);\n            }\n        }\n    }\n    function getRoutes() {\n        return matchers;\n    }\n    function insertMatcher(matcher) {\n        const index = findInsertionIndex(matcher, matchers);\n        matchers.splice(index, 0, matcher);\n        // only add the original record to the name map\n        if (matcher.record.name && !isAliasRecord(matcher))\n            matcherMap.set(matcher.record.name, matcher);\n    }\n    function resolve(location, currentLocation) {\n        let matcher;\n        let params = {};\n        let path;\n        let name;\n        if ('name' in location && location.name) {\n            matcher = matcherMap.get(location.name);\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                });\n            name = matcher.record.name;\n            params = assign(\n            // paramsFromLocation is a new object\n            paramsFromLocation(currentLocation.params, \n            // only keep params that exist in the resolved location\n            // only keep optional params coming from a parent record\n            matcher.keys\n                .filter(k => !k.optional)\n                .concat(matcher.parent ? matcher.parent.keys.filter(k => k.optional) : [])\n                .map(k => k.name)), \n            // discard any existing params in the current location that do not exist here\n            // #1497 this ensures better active/exact matching\n            location.params &&\n                paramsFromLocation(location.params, matcher.keys.map(k => k.name)));\n            // throws if cannot be stringified\n            path = matcher.stringify(params);\n        }\n        else if (location.path != null) {\n            // no need to resolve the path with the matcher as it was provided\n            // this also allows the user to control the encoding\n            path = location.path;\n            matcher = matchers.find(m => m.re.test(path));\n            // matcher should have a value after the loop\n            if (matcher) {\n                // we know the matcher works because we tested the regexp\n                params = matcher.parse(path);\n                name = matcher.record.name;\n            }\n            // location is a relative path\n        }\n        else {\n            // match by name or path of current route\n            matcher = currentLocation.name\n                ? matcherMap.get(currentLocation.name)\n                : matchers.find(m => m.re.test(currentLocation.path));\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                    currentLocation,\n                });\n            name = matcher.record.name;\n            // since we are navigating to the same location, we don't need to pick the\n            // params like when `name` is provided\n            params = assign({}, currentLocation.params, location.params);\n            path = matcher.stringify(params);\n        }\n        const matched = [];\n        let parentMatcher = matcher;\n        while (parentMatcher) {\n            // reversed order so parents are at the beginning\n            matched.unshift(parentMatcher.record);\n            parentMatcher = parentMatcher.parent;\n        }\n        return {\n            name,\n            path,\n            params,\n            matched,\n            meta: mergeMetaFields(matched),\n        };\n    }\n    // add initial routes\n    routes.forEach(route => addRoute(route));\n    function clearRoutes() {\n        matchers.length = 0;\n        matcherMap.clear();\n    }\n    return {\n        addRoute,\n        resolve,\n        removeRoute,\n        clearRoutes,\n        getRoutes,\n        getRecordMatcher,\n    };\n}\nfunction paramsFromLocation(params, keys) {\n    const newParams = {};\n    for (const key of keys) {\n        if (key in params)\n            newParams[key] = params[key];\n    }\n    return newParams;\n}\n/**\n * Normalizes a RouteRecordRaw. Creates a copy\n *\n * @param record\n * @returns the normalized version\n */\nfunction normalizeRouteRecord(record) {\n    const normalized = {\n        path: record.path,\n        redirect: record.redirect,\n        name: record.name,\n        meta: record.meta || {},\n        aliasOf: record.aliasOf,\n        beforeEnter: record.beforeEnter,\n        props: normalizeRecordProps(record),\n        children: record.children || [],\n        instances: {},\n        leaveGuards: new Set(),\n        updateGuards: new Set(),\n        enterCallbacks: {},\n        // must be declared afterwards\n        // mods: {},\n        components: 'components' in record\n            ? record.components || null\n            : record.component && { default: record.component },\n    };\n    // mods contain modules and shouldn't be copied,\n    // logged or anything. It's just used for internal\n    // advanced use cases like data loaders\n    Object.defineProperty(normalized, 'mods', {\n        value: {},\n    });\n    return normalized;\n}\n/**\n * Normalize the optional `props` in a record to always be an object similar to\n * components. Also accept a boolean for components.\n * @param record\n */\nfunction normalizeRecordProps(record) {\n    const propsObject = {};\n    // props does not exist on redirect records, but we can set false directly\n    const props = record.props || false;\n    if ('component' in record) {\n        propsObject.default = props;\n    }\n    else {\n        // NOTE: we could also allow a function to be applied to every component.\n        // Would need user feedback for use cases\n        for (const name in record.components)\n            propsObject[name] = typeof props === 'object' ? props[name] : props;\n    }\n    return propsObject;\n}\n/**\n * Checks if a record or any of its parent is an alias\n * @param record\n */\nfunction isAliasRecord(record) {\n    while (record) {\n        if (record.record.aliasOf)\n            return true;\n        record = record.parent;\n    }\n    return false;\n}\n/**\n * Merge meta fields of an array of records\n *\n * @param matched - array of matched records\n */\nfunction mergeMetaFields(matched) {\n    return matched.reduce((meta, record) => assign(meta, record.meta), {});\n}\nfunction mergeOptions(defaults, partialOptions) {\n    const options = {};\n    for (const key in defaults) {\n        options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\n    }\n    return options;\n}\n/**\n * Performs a binary search to find the correct insertion index for a new matcher.\n *\n * Matchers are primarily sorted by their score. If scores are tied then we also consider parent/child relationships,\n * with descendants coming before ancestors. If there's still a tie, new routes are inserted after existing routes.\n *\n * @param matcher - new matcher to be inserted\n * @param matchers - existing matchers\n */\nfunction findInsertionIndex(matcher, matchers) {\n    // First phase: binary search based on score\n    let lower = 0;\n    let upper = matchers.length;\n    while (lower !== upper) {\n        const mid = (lower + upper) >> 1;\n        const sortOrder = comparePathParserScore(matcher, matchers[mid]);\n        if (sortOrder < 0) {\n            upper = mid;\n        }\n        else {\n            lower = mid + 1;\n        }\n    }\n    // Second phase: check for an ancestor with the same score\n    const insertionAncestor = getInsertionAncestor(matcher);\n    if (insertionAncestor) {\n        upper = matchers.lastIndexOf(insertionAncestor, upper - 1);\n    }\n    return upper;\n}\nfunction getInsertionAncestor(matcher) {\n    let ancestor = matcher;\n    while ((ancestor = ancestor.parent)) {\n        if (isMatchable(ancestor) &&\n            comparePathParserScore(matcher, ancestor) === 0) {\n            return ancestor;\n        }\n    }\n    return;\n}\n/**\n * Checks if a matcher can be reachable. This means if it's possible to reach it as a route. For example, routes without\n * a component, or name, or redirect, are just used to group other routes.\n * @param matcher\n * @param matcher.record record of the matcher\n * @returns\n */\nfunction isMatchable({ record }) {\n    return !!(record.name ||\n        (record.components && Object.keys(record.components).length) ||\n        record.redirect);\n}\n\n/**\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\n * version with the leading `?` and without Should work as URLSearchParams\n\n * @internal\n *\n * @param search - search string to parse\n * @returns a query object\n */\nfunction parseQuery(search) {\n    const query = {};\n    // avoid creating an object with an empty key and empty value\n    // because of split('&')\n    if (search === '' || search === '?')\n        return query;\n    const hasLeadingIM = search[0] === '?';\n    const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\n    for (let i = 0; i < searchParams.length; ++i) {\n        // pre decode the + into space\n        const searchParam = searchParams[i].replace(PLUS_RE, ' ');\n        // allow the = character\n        const eqPos = searchParam.indexOf('=');\n        const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n        const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n        if (key in query) {\n            // an extra variable for ts types\n            let currentValue = query[key];\n            if (!isArray(currentValue)) {\n                currentValue = query[key] = [currentValue];\n            }\n            currentValue.push(value);\n        }\n        else {\n            query[key] = value;\n        }\n    }\n    return query;\n}\n/**\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\n * doesn't prepend a `?`\n *\n * @internal\n *\n * @param query - query object to stringify\n * @returns string version of the query without the leading `?`\n */\nfunction stringifyQuery(query) {\n    let search = '';\n    for (let key in query) {\n        const value = query[key];\n        key = encodeQueryKey(key);\n        if (value == null) {\n            // only null adds the value\n            if (value !== undefined) {\n                search += (search.length ? '&' : '') + key;\n            }\n            continue;\n        }\n        // keep null values\n        const values = isArray(value)\n            ? value.map(v => v && encodeQueryValue(v))\n            : [value && encodeQueryValue(value)];\n        values.forEach(value => {\n            // skip undefined values in arrays as if they were not present\n            // smaller code than using filter\n            if (value !== undefined) {\n                // only append & with non-empty search\n                search += (search.length ? '&' : '') + key;\n                if (value != null)\n                    search += '=' + value;\n            }\n        });\n    }\n    return search;\n}\n/**\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\n * numbers into strings, removing keys with an undefined value and replacing\n * undefined with null in arrays\n *\n * @param query - query object to normalize\n * @returns a normalized query object\n */\nfunction normalizeQuery(query) {\n    const normalizedQuery = {};\n    for (const key in query) {\n        const value = query[key];\n        if (value !== undefined) {\n            normalizedQuery[key] = isArray(value)\n                ? value.map(v => (v == null ? null : '' + v))\n                : value == null\n                    ? value\n                    : '' + value;\n        }\n    }\n    return normalizedQuery;\n}\n\n/**\n * RouteRecord being rendered by the closest ancestor Router View. Used for\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\n * Location Matched\n *\n * @internal\n */\nconst matchedRouteKey = Symbol('');\n/**\n * Allows overriding the router view depth to control which component in\n * `matched` is rendered. rvd stands for Router View Depth\n *\n * @internal\n */\nconst viewDepthKey = Symbol('');\n/**\n * Allows overriding the router instance returned by `useRouter` in tests. r\n * stands for router\n *\n * @internal\n */\nconst routerKey = Symbol('');\n/**\n * Allows overriding the current route returned by `useRoute` in tests. rl\n * stands for route location\n *\n * @internal\n */\nconst routeLocationKey = Symbol('');\n/**\n * Allows overriding the current route used by router-view. Internally this is\n * used when the `route` prop is passed.\n *\n * @internal\n */\nconst routerViewLocationKey = Symbol('');\n\n/**\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\n */\nfunction useCallbacks() {\n    let handlers = [];\n    function add(handler) {\n        handlers.push(handler);\n        return () => {\n            const i = handlers.indexOf(handler);\n            if (i > -1)\n                handlers.splice(i, 1);\n        };\n    }\n    function reset() {\n        handlers = [];\n    }\n    return {\n        add,\n        list: () => handlers.slice(),\n        reset,\n    };\n}\n\nfunction registerGuard(record, name, guard) {\n    const removeFromList = () => {\n        record[name].delete(guard);\n    };\n    vue.onUnmounted(removeFromList);\n    vue.onDeactivated(removeFromList);\n    vue.onActivated(() => {\n        record[name].add(guard);\n    });\n    record[name].add(guard);\n}\n/**\n * Add a navigation guard that triggers whenever the component for the current\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\n * used in any component. The guard is removed when the component is unmounted.\n *\n * @param leaveGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteLeave(leaveGuard) {\n    const activeRecord = vue.inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        return;\n    }\n    registerGuard(activeRecord, 'leaveGuards', leaveGuard);\n}\n/**\n * Add a navigation guard that triggers whenever the current location is about\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\n * component. The guard is removed when the component is unmounted.\n *\n * @param updateGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteUpdate(updateGuard) {\n    const activeRecord = vue.inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        return;\n    }\n    registerGuard(activeRecord, 'updateGuards', updateGuard);\n}\nfunction guardToPromiseFn(guard, to, from, record, name, runWithContext = fn => fn()) {\n    // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\n    const enterCallbackArray = record &&\n        // name is defined if record is because of the function overload\n        (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\n    return () => new Promise((resolve, reject) => {\n        const next = (valid) => {\n            if (valid === false) {\n                reject(createRouterError(4 /* ErrorTypes.NAVIGATION_ABORTED */, {\n                    from,\n                    to,\n                }));\n            }\n            else if (valid instanceof Error) {\n                reject(valid);\n            }\n            else if (isRouteLocation(valid)) {\n                reject(createRouterError(2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */, {\n                    from: to,\n                    to: valid,\n                }));\n            }\n            else {\n                if (enterCallbackArray &&\n                    // since enterCallbackArray is truthy, both record and name also are\n                    record.enterCallbacks[name] === enterCallbackArray &&\n                    typeof valid === 'function') {\n                    enterCallbackArray.push(valid);\n                }\n                resolve();\n            }\n        };\n        // wrapping with Promise.resolve allows it to work with both async and sync guards\n        const guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from, next));\n        let guardCall = Promise.resolve(guardReturn);\n        if (guard.length < 3)\n            guardCall = guardCall.then(next);\n        guardCall.catch(err => reject(err));\n    });\n}\nfunction extractComponentsGuards(matched, guardType, to, from, runWithContext = fn => fn()) {\n    const guards = [];\n    for (const record of matched) {\n        for (const name in record.components) {\n            let rawComponent = record.components[name];\n            // skip update and leave guards if the route component is not mounted\n            if (guardType !== 'beforeRouteEnter' && !record.instances[name])\n                continue;\n            if (isRouteComponent(rawComponent)) {\n                // __vccOpts is added by vue-class-component and contain the regular options\n                const options = rawComponent.__vccOpts || rawComponent;\n                const guard = options[guardType];\n                guard &&\n                    guards.push(guardToPromiseFn(guard, to, from, record, name, runWithContext));\n            }\n            else {\n                // start requesting the chunk already\n                let componentPromise = rawComponent();\n                guards.push(() => componentPromise.then(resolved => {\n                    if (!resolved)\n                        throw new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`);\n                    const resolvedComponent = isESModule(resolved)\n                        ? resolved.default\n                        : resolved;\n                    // keep the resolved module for plugins like data loaders\n                    record.mods[name] = resolved;\n                    // replace the function with the resolved component\n                    // cannot be null or undefined because we went into the for loop\n                    record.components[name] = resolvedComponent;\n                    // __vccOpts is added by vue-class-component and contain the regular options\n                    const options = resolvedComponent.__vccOpts || resolvedComponent;\n                    const guard = options[guardType];\n                    return (guard &&\n                        guardToPromiseFn(guard, to, from, record, name, runWithContext)());\n                }));\n            }\n        }\n    }\n    return guards;\n}\n/**\n * Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\n *\n * @param route - resolved route to load\n */\nfunction loadRouteLocation(route) {\n    return route.matched.every(record => record.redirect)\n        ? Promise.reject(new Error('Cannot load a route that redirects.'))\n        : Promise.all(route.matched.map(record => record.components &&\n            Promise.all(Object.keys(record.components).reduce((promises, name) => {\n                const rawComponent = record.components[name];\n                if (typeof rawComponent === 'function' &&\n                    !('displayName' in rawComponent)) {\n                    promises.push(rawComponent().then(resolved => {\n                        if (!resolved)\n                            return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\n                        const resolvedComponent = isESModule(resolved)\n                            ? resolved.default\n                            : resolved;\n                        // keep the resolved module for plugins like data loaders\n                        record.mods[name] = resolved;\n                        // replace the function with the resolved component\n                        // cannot be null or undefined because we went into the for loop\n                        record.components[name] = resolvedComponent;\n                        return;\n                    }));\n                }\n                return promises;\n            }, [])))).then(() => route);\n}\n\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\n// `isExactActive` behavior should go through an RFC\n/**\n * Returns the internal behavior of a {@link RouterLink} without the rendering part.\n *\n * @param props - a `to` location and an optional `replace` flag\n */\nfunction useLink(props) {\n    const router = vue.inject(routerKey);\n    const currentRoute = vue.inject(routeLocationKey);\n    const route = vue.computed(() => {\n        const to = vue.unref(props.to);\n        return router.resolve(to);\n    });\n    const activeRecordIndex = vue.computed(() => {\n        const { matched } = route.value;\n        const { length } = matched;\n        const routeMatched = matched[length - 1];\n        const currentMatched = currentRoute.matched;\n        if (!routeMatched || !currentMatched.length)\n            return -1;\n        const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\n        if (index > -1)\n            return index;\n        // possible parent record\n        const parentRecordPath = getOriginalPath(matched[length - 2]);\n        return (\n        // we are dealing with nested routes\n        length > 1 &&\n            // if the parent and matched route have the same path, this link is\n            // referring to the empty child. Or we currently are on a different\n            // child of the same parent\n            getOriginalPath(routeMatched) === parentRecordPath &&\n            // avoid comparing the child with its parent\n            currentMatched[currentMatched.length - 1].path !== parentRecordPath\n            ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\n            : index);\n    });\n    const isActive = vue.computed(() => activeRecordIndex.value > -1 &&\n        includesParams(currentRoute.params, route.value.params));\n    const isExactActive = vue.computed(() => activeRecordIndex.value > -1 &&\n        activeRecordIndex.value === currentRoute.matched.length - 1 &&\n        isSameRouteLocationParams(currentRoute.params, route.value.params));\n    function navigate(e = {}) {\n        if (guardEvent(e)) {\n            const p = router[vue.unref(props.replace) ? 'replace' : 'push'](vue.unref(props.to)\n            // avoid uncaught errors are they are logged anyway\n            ).catch(noop);\n            if (props.viewTransition &&\n                typeof document !== 'undefined' &&\n                'startViewTransition' in document) {\n                document.startViewTransition(() => p);\n            }\n            return p;\n        }\n        return Promise.resolve();\n    }\n    /**\n     * NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\n     */\n    return {\n        route,\n        href: vue.computed(() => route.value.href),\n        isActive,\n        isExactActive,\n        navigate,\n    };\n}\nfunction preferSingleVNode(vnodes) {\n    return vnodes.length === 1 ? vnodes[0] : vnodes;\n}\nconst RouterLinkImpl = /*#__PURE__*/ vue.defineComponent({\n    name: 'RouterLink',\n    compatConfig: { MODE: 3 },\n    props: {\n        to: {\n            type: [String, Object],\n            required: true,\n        },\n        replace: Boolean,\n        activeClass: String,\n        // inactiveClass: String,\n        exactActiveClass: String,\n        custom: Boolean,\n        ariaCurrentValue: {\n            type: String,\n            default: 'page',\n        },\n        viewTransition: Boolean,\n    },\n    useLink,\n    setup(props, { slots }) {\n        const link = vue.reactive(useLink(props));\n        const { options } = vue.inject(routerKey);\n        const elClass = vue.computed(() => ({\n            [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\n            // [getLinkClass(\n            //   props.inactiveClass,\n            //   options.linkInactiveClass,\n            //   'router-link-inactive'\n            // )]: !link.isExactActive,\n            [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\n        }));\n        return () => {\n            const children = slots.default && preferSingleVNode(slots.default(link));\n            return props.custom\n                ? children\n                : vue.h('a', {\n                    'aria-current': link.isExactActive\n                        ? props.ariaCurrentValue\n                        : null,\n                    href: link.href,\n                    // this would override user added attrs but Vue will still add\n                    // the listener, so we end up triggering both\n                    onClick: link.navigate,\n                    class: elClass.value,\n                }, children);\n        };\n    },\n});\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to render a link that triggers a navigation on click.\n */\nconst RouterLink = RouterLinkImpl;\nfunction guardEvent(e) {\n    // don't redirect with control keys\n    if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n        return;\n    // don't redirect when preventDefault called\n    if (e.defaultPrevented)\n        return;\n    // don't redirect on right click\n    if (e.button !== undefined && e.button !== 0)\n        return;\n    // don't redirect if `target=\"_blank\"`\n    // @ts-expect-error getAttribute does exist\n    if (e.currentTarget && e.currentTarget.getAttribute) {\n        // @ts-expect-error getAttribute exists\n        const target = e.currentTarget.getAttribute('target');\n        if (/\\b_blank\\b/i.test(target))\n            return;\n    }\n    // this may be a Weex event which doesn't have this method\n    if (e.preventDefault)\n        e.preventDefault();\n    return true;\n}\nfunction includesParams(outer, inner) {\n    for (const key in inner) {\n        const innerValue = inner[key];\n        const outerValue = outer[key];\n        if (typeof innerValue === 'string') {\n            if (innerValue !== outerValue)\n                return false;\n        }\n        else {\n            if (!isArray(outerValue) ||\n                outerValue.length !== innerValue.length ||\n                innerValue.some((value, i) => value !== outerValue[i]))\n                return false;\n        }\n    }\n    return true;\n}\n/**\n * Get the original path value of a record by following its aliasOf\n * @param record\n */\nfunction getOriginalPath(record) {\n    return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\n}\n/**\n * Utility class to get the active class based on defaults.\n * @param propClass\n * @param globalClass\n * @param defaultClass\n */\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\n    ? propClass\n    : globalClass != null\n        ? globalClass\n        : defaultClass;\n\nconst RouterViewImpl = /*#__PURE__*/ vue.defineComponent({\n    name: 'RouterView',\n    // #674 we manually inherit them\n    inheritAttrs: false,\n    props: {\n        name: {\n            type: String,\n            default: 'default',\n        },\n        route: Object,\n    },\n    // Better compat for @vue/compat users\n    // https://github.com/vuejs/router/issues/1315\n    compatConfig: { MODE: 3 },\n    setup(props, { attrs, slots }) {\n        const injectedRoute = vue.inject(routerViewLocationKey);\n        const routeToDisplay = vue.computed(() => props.route || injectedRoute.value);\n        const injectedDepth = vue.inject(viewDepthKey, 0);\n        // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children\n        // that are used to reuse the `path` property\n        const depth = vue.computed(() => {\n            let initialDepth = vue.unref(injectedDepth);\n            const { matched } = routeToDisplay.value;\n            let matchedRoute;\n            while ((matchedRoute = matched[initialDepth]) &&\n                !matchedRoute.components) {\n                initialDepth++;\n            }\n            return initialDepth;\n        });\n        const matchedRouteRef = vue.computed(() => routeToDisplay.value.matched[depth.value]);\n        vue.provide(viewDepthKey, vue.computed(() => depth.value + 1));\n        vue.provide(matchedRouteKey, matchedRouteRef);\n        vue.provide(routerViewLocationKey, routeToDisplay);\n        const viewRef = vue.ref();\n        // watch at the same time the component instance, the route record we are\n        // rendering, and the name\n        vue.watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\n            // copy reused instances\n            if (to) {\n                // this will update the instance for new instances as well as reused\n                // instances when navigating to a new route\n                to.instances[name] = instance;\n                // the component instance is reused for a different route or name, so\n                // we copy any saved update or leave guards. With async setup, the\n                // mounting component will mount before the matchedRoute changes,\n                // making instance === oldInstance, so we check if guards have been\n                // added before. This works because we remove guards when\n                // unmounting/deactivating components\n                if (from && from !== to && instance && instance === oldInstance) {\n                    if (!to.leaveGuards.size) {\n                        to.leaveGuards = from.leaveGuards;\n                    }\n                    if (!to.updateGuards.size) {\n                        to.updateGuards = from.updateGuards;\n                    }\n                }\n            }\n            // trigger beforeRouteEnter next callbacks\n            if (instance &&\n                to &&\n                // if there is no instance but to and from are the same this might be\n                // the first visit\n                (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\n                (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\n            }\n        }, { flush: 'post' });\n        return () => {\n            const route = routeToDisplay.value;\n            // we need the value at the time we render because when we unmount, we\n            // navigated to a different location so the value is different\n            const currentName = props.name;\n            const matchedRoute = matchedRouteRef.value;\n            const ViewComponent = matchedRoute && matchedRoute.components[currentName];\n            if (!ViewComponent) {\n                return normalizeSlot(slots.default, { Component: ViewComponent, route });\n            }\n            // props from route configuration\n            const routePropsOption = matchedRoute.props[currentName];\n            const routeProps = routePropsOption\n                ? routePropsOption === true\n                    ? route.params\n                    : typeof routePropsOption === 'function'\n                        ? routePropsOption(route)\n                        : routePropsOption\n                : null;\n            const onVnodeUnmounted = vnode => {\n                // remove the instance reference to prevent leak\n                if (vnode.component.isUnmounted) {\n                    matchedRoute.instances[currentName] = null;\n                }\n            };\n            const component = vue.h(ViewComponent, assign({}, routeProps, attrs, {\n                onVnodeUnmounted,\n                ref: viewRef,\n            }));\n            return (\n            // pass the vnode to the slot as a prop.\n            // h and <component :is=\"...\"> both accept vnodes\n            normalizeSlot(slots.default, { Component: component, route }) ||\n                component);\n        };\n    },\n});\nfunction normalizeSlot(slot, data) {\n    if (!slot)\n        return null;\n    const slotContent = slot(data);\n    return slotContent.length === 1 ? slotContent[0] : slotContent;\n}\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to display the current route the user is at.\n */\nconst RouterView = RouterViewImpl;\n\n/**\n * Creates a Router instance that can be used by a Vue app.\n *\n * @param options - {@link RouterOptions}\n */\nfunction createRouter(options) {\n    const matcher = createRouterMatcher(options.routes, options);\n    const parseQuery$1 = options.parseQuery || parseQuery;\n    const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\n    const routerHistory = options.history;\n    const beforeGuards = useCallbacks();\n    const beforeResolveGuards = useCallbacks();\n    const afterGuards = useCallbacks();\n    const currentRoute = vue.shallowRef(START_LOCATION_NORMALIZED);\n    let pendingLocation = START_LOCATION_NORMALIZED;\n    // leave the scrollRestoration if no scrollBehavior is provided\n    if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\n        history.scrollRestoration = 'manual';\n    }\n    const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\n    const encodeParams = applyToParams.bind(null, encodeParam);\n    const decodeParams = \n    // @ts-expect-error: intentionally avoid the type check\n    applyToParams.bind(null, decode);\n    function addRoute(parentOrRoute, route) {\n        let parent;\n        let record;\n        if (isRouteName(parentOrRoute)) {\n            parent = matcher.getRecordMatcher(parentOrRoute);\n            record = route;\n        }\n        else {\n            record = parentOrRoute;\n        }\n        return matcher.addRoute(record, parent);\n    }\n    function removeRoute(name) {\n        const recordMatcher = matcher.getRecordMatcher(name);\n        if (recordMatcher) {\n            matcher.removeRoute(recordMatcher);\n        }\n    }\n    function getRoutes() {\n        return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\n    }\n    function hasRoute(name) {\n        return !!matcher.getRecordMatcher(name);\n    }\n    function resolve(rawLocation, currentLocation) {\n        // const resolve: Router['resolve'] = (rawLocation: RouteLocationRaw, currentLocation) => {\n        // const objectLocation = routerLocationAsObject(rawLocation)\n        // we create a copy to modify it later\n        currentLocation = assign({}, currentLocation || currentRoute.value);\n        if (typeof rawLocation === 'string') {\n            const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\n            const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\n            const href = routerHistory.createHref(locationNormalized.fullPath);\n            // locationNormalized is always a new object\n            return assign(locationNormalized, matchedRoute, {\n                params: decodeParams(matchedRoute.params),\n                hash: decode(locationNormalized.hash),\n                redirectedFrom: undefined,\n                href,\n            });\n        }\n        let matcherLocation;\n        // path could be relative in object as well\n        if (rawLocation.path != null) {\n            matcherLocation = assign({}, rawLocation, {\n                path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\n            });\n        }\n        else {\n            // remove any nullish param\n            const targetParams = assign({}, rawLocation.params);\n            for (const key in targetParams) {\n                if (targetParams[key] == null) {\n                    delete targetParams[key];\n                }\n            }\n            // pass encoded values to the matcher, so it can produce encoded path and fullPath\n            matcherLocation = assign({}, rawLocation, {\n                params: encodeParams(targetParams),\n            });\n            // current location params are decoded, we need to encode them in case the\n            // matcher merges the params\n            currentLocation.params = encodeParams(currentLocation.params);\n        }\n        const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\n        const hash = rawLocation.hash || '';\n        // the matcher might have merged current location params, so\n        // we need to run the decoding again\n        matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\n        const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\n            hash: encodeHash(hash),\n            path: matchedRoute.path,\n        }));\n        const href = routerHistory.createHref(fullPath);\n        return assign({\n            fullPath,\n            // keep the hash encoded so fullPath is effectively path + encodedQuery +\n            // hash\n            hash,\n            query: \n            // if the user is using a custom query lib like qs, we might have\n            // nested objects, so we keep the query as is, meaning it can contain\n            // numbers at `$route.query`, but at the point, the user will have to\n            // use their own type anyway.\n            // https://github.com/vuejs/router/issues/328#issuecomment-649481567\n            stringifyQuery$1 === stringifyQuery\n                ? normalizeQuery(rawLocation.query)\n                : (rawLocation.query || {}),\n        }, matchedRoute, {\n            redirectedFrom: undefined,\n            href,\n        });\n    }\n    function locationAsObject(to) {\n        return typeof to === 'string'\n            ? parseURL(parseQuery$1, to, currentRoute.value.path)\n            : assign({}, to);\n    }\n    function checkCanceledNavigation(to, from) {\n        if (pendingLocation !== to) {\n            return createRouterError(8 /* ErrorTypes.NAVIGATION_CANCELLED */, {\n                from,\n                to,\n            });\n        }\n    }\n    function push(to) {\n        return pushWithRedirect(to);\n    }\n    function replace(to) {\n        return push(assign(locationAsObject(to), { replace: true }));\n    }\n    function handleRedirectRecord(to) {\n        const lastMatched = to.matched[to.matched.length - 1];\n        if (lastMatched && lastMatched.redirect) {\n            const { redirect } = lastMatched;\n            let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\n            if (typeof newTargetLocation === 'string') {\n                newTargetLocation =\n                    newTargetLocation.includes('?') || newTargetLocation.includes('#')\n                        ? (newTargetLocation = locationAsObject(newTargetLocation))\n                        : // force empty params\n                            { path: newTargetLocation };\n                // @ts-expect-error: force empty params when a string is passed to let\n                // the router parse them again\n                newTargetLocation.params = {};\n            }\n            return assign({\n                query: to.query,\n                hash: to.hash,\n                // avoid transferring params if the redirect has a path\n                params: newTargetLocation.path != null ? {} : to.params,\n            }, newTargetLocation);\n        }\n    }\n    function pushWithRedirect(to, redirectedFrom) {\n        const targetLocation = (pendingLocation = resolve(to));\n        const from = currentRoute.value;\n        const data = to.state;\n        const force = to.force;\n        // to could be a string where `replace` is a function\n        const replace = to.replace === true;\n        const shouldRedirect = handleRedirectRecord(targetLocation);\n        if (shouldRedirect)\n            return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\n                state: typeof shouldRedirect === 'object'\n                    ? assign({}, data, shouldRedirect.state)\n                    : data,\n                force,\n                replace,\n            }), \n            // keep original redirectedFrom if it exists\n            redirectedFrom || targetLocation);\n        // if it was a redirect we already called `pushWithRedirect` above\n        const toLocation = targetLocation;\n        toLocation.redirectedFrom = redirectedFrom;\n        let failure;\n        if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\n            failure = createRouterError(16 /* ErrorTypes.NAVIGATION_DUPLICATED */, { to: toLocation, from });\n            // trigger scroll to allow scrolling to the same anchor\n            handleScroll(from, from, \n            // this is a push, the only way for it to be triggered from a\n            // history.listen is with a redirect, which makes it become a push\n            true, \n            // This cannot be the first navigation because the initial location\n            // cannot be manually navigated to\n            false);\n        }\n        return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\n            .catch((error) => isNavigationFailure(error)\n            ? // navigation redirects still mark the router as ready\n                isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)\n                    ? error\n                    : markAsReady(error) // also returns the error\n            : // reject any unknown error\n                triggerError(error, toLocation, from))\n            .then((failure) => {\n            if (failure) {\n                if (isNavigationFailure(failure, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    return pushWithRedirect(\n                    // keep options\n                    assign({\n                        // preserve an existing replacement but allow the redirect to override it\n                        replace,\n                    }, locationAsObject(failure.to), {\n                        state: typeof failure.to === 'object'\n                            ? assign({}, data, failure.to.state)\n                            : data,\n                        force,\n                    }), \n                    // preserve the original redirectedFrom if any\n                    redirectedFrom || toLocation);\n                }\n            }\n            else {\n                // if we fail we don't finalize the navigation\n                failure = finalizeNavigation(toLocation, from, true, replace, data);\n            }\n            triggerAfterEach(toLocation, from, failure);\n            return failure;\n        });\n    }\n    /**\n     * Helper to reject and skip all navigation guards if a new navigation happened\n     * @param to\n     * @param from\n     */\n    function checkCanceledNavigationAndReject(to, from) {\n        const error = checkCanceledNavigation(to, from);\n        return error ? Promise.reject(error) : Promise.resolve();\n    }\n    function runWithContext(fn) {\n        const app = installedApps.values().next().value;\n        // support Vue < 3.3\n        return app && typeof app.runWithContext === 'function'\n            ? app.runWithContext(fn)\n            : fn();\n    }\n    // TODO: refactor the whole before guards by internally using router.beforeEach\n    function navigate(to, from) {\n        let guards;\n        const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\n        // all components here have been resolved once because we are leaving\n        guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\n        // leavingRecords is already reversed\n        for (const record of leavingRecords) {\n            record.leaveGuards.forEach(guard => {\n                guards.push(guardToPromiseFn(guard, to, from));\n            });\n        }\n        const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\n        guards.push(canceledNavigationCheck);\n        // run the queue of per route beforeRouteLeave guards\n        return (runGuardQueue(guards)\n            .then(() => {\n            // check global guards beforeEach\n            guards = [];\n            for (const guard of beforeGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check in components beforeRouteUpdate\n            guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\n            for (const record of updatingRecords) {\n                record.updateGuards.forEach(guard => {\n                    guards.push(guardToPromiseFn(guard, to, from));\n                });\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check the route beforeEnter\n            guards = [];\n            for (const record of enteringRecords) {\n                // do not trigger beforeEnter on reused views\n                if (record.beforeEnter) {\n                    if (isArray(record.beforeEnter)) {\n                        for (const beforeEnter of record.beforeEnter)\n                            guards.push(guardToPromiseFn(beforeEnter, to, from));\n                    }\n                    else {\n                        guards.push(guardToPromiseFn(record.beforeEnter, to, from));\n                    }\n                }\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\n            // clear existing enterCallbacks, these are added by extractComponentsGuards\n            to.matched.forEach(record => (record.enterCallbacks = {}));\n            // check in-component beforeRouteEnter\n            guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from, runWithContext);\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check global guards beforeResolve\n            guards = [];\n            for (const guard of beforeResolveGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            // catch any navigation canceled\n            .catch(err => isNavigationFailure(err, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)\n            ? err\n            : Promise.reject(err)));\n    }\n    function triggerAfterEach(to, from, failure) {\n        // navigation is confirmed, call afterGuards\n        // TODO: wrap with error handlers\n        afterGuards\n            .list()\n            .forEach(guard => runWithContext(() => guard(to, from, failure)));\n    }\n    /**\n     * - Cleans up any navigation guards\n     * - Changes the url if necessary\n     * - Calls the scrollBehavior\n     */\n    function finalizeNavigation(toLocation, from, isPush, replace, data) {\n        // a more recent navigation took place\n        const error = checkCanceledNavigation(toLocation, from);\n        if (error)\n            return error;\n        // only consider as push if it's not the first navigation\n        const isFirstNavigation = from === START_LOCATION_NORMALIZED;\n        const state = !isBrowser ? {} : history.state;\n        // change URL only if the user did a push/replace and if it's not the initial navigation because\n        // it's just reflecting the url\n        if (isPush) {\n            // on the initial navigation, we want to reuse the scroll position from\n            // history state if it exists\n            if (replace || isFirstNavigation)\n                routerHistory.replace(toLocation.fullPath, assign({\n                    scroll: isFirstNavigation && state && state.scroll,\n                }, data));\n            else\n                routerHistory.push(toLocation.fullPath, data);\n        }\n        // accept current navigation\n        currentRoute.value = toLocation;\n        handleScroll(toLocation, from, isPush, isFirstNavigation);\n        markAsReady();\n    }\n    let removeHistoryListener;\n    // attach listener to history to trigger navigations\n    function setupListeners() {\n        // avoid setting up listeners twice due to an invalid first navigation\n        if (removeHistoryListener)\n            return;\n        removeHistoryListener = routerHistory.listen((to, _from, info) => {\n            if (!router.listening)\n                return;\n            // cannot be a redirect route because it was in history\n            const toLocation = resolve(to);\n            // due to dynamic routing, and to hash history with manual navigation\n            // (manually changing the url or calling history.hash = '#/somewhere'),\n            // there could be a redirect record in history\n            const shouldRedirect = handleRedirectRecord(toLocation);\n            if (shouldRedirect) {\n                pushWithRedirect(assign(shouldRedirect, { replace: true, force: true }), toLocation).catch(noop);\n                return;\n            }\n            pendingLocation = toLocation;\n            const from = currentRoute.value;\n            // TODO: should be moved to web history?\n            if (isBrowser) {\n                saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\n            }\n            navigate(toLocation, from)\n                .catch((error) => {\n                if (isNavigationFailure(error, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                    return error;\n                }\n                if (isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    // Here we could call if (info.delta) routerHistory.go(-info.delta,\n                    // false) but this is bug prone as we have no way to wait the\n                    // navigation to be finished before calling pushWithRedirect. Using\n                    // a setTimeout of 16ms seems to work but there is no guarantee for\n                    // it to work on every browser. So instead we do not restore the\n                    // history entry and trigger a new navigation as requested by the\n                    // navigation guard.\n                    // the error is already handled by router.push we just want to avoid\n                    // logging the error\n                    pushWithRedirect(assign(locationAsObject(error.to), {\n                        force: true,\n                    }), toLocation\n                    // avoid an uncaught rejection, let push call triggerError\n                    )\n                        .then(failure => {\n                        // manual change in hash history #916 ending up in the URL not\n                        // changing, but it was changed by the manual url change, so we\n                        // need to manually change it ourselves\n                        if (isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ |\n                            16 /* ErrorTypes.NAVIGATION_DUPLICATED */) &&\n                            !info.delta &&\n                            info.type === NavigationType.pop) {\n                            routerHistory.go(-1, false);\n                        }\n                    })\n                        .catch(noop);\n                    // avoid the then branch\n                    return Promise.reject();\n                }\n                // do not restore history on unknown direction\n                if (info.delta) {\n                    routerHistory.go(-info.delta, false);\n                }\n                // unrecognized error, transfer to the global handler\n                return triggerError(error, toLocation, from);\n            })\n                .then((failure) => {\n                failure =\n                    failure ||\n                        finalizeNavigation(\n                        // after navigation, all matched components are resolved\n                        toLocation, from, false);\n                // revert the navigation\n                if (failure) {\n                    if (info.delta &&\n                        // a new navigation has been triggered, so we do not want to revert, that will change the current history\n                        // entry while a different route is displayed\n                        !isNavigationFailure(failure, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                        routerHistory.go(-info.delta, false);\n                    }\n                    else if (info.type === NavigationType.pop &&\n                        isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 16 /* ErrorTypes.NAVIGATION_DUPLICATED */)) {\n                        // manual change in hash history #916\n                        // it's like a push but lacks the information of the direction\n                        routerHistory.go(-1, false);\n                    }\n                }\n                triggerAfterEach(toLocation, from, failure);\n            })\n                // avoid warnings in the console about uncaught rejections, they are logged by triggerErrors\n                .catch(noop);\n        });\n    }\n    // Initialization and Errors\n    let readyHandlers = useCallbacks();\n    let errorListeners = useCallbacks();\n    let ready;\n    /**\n     * Trigger errorListeners added via onError and throws the error as well\n     *\n     * @param error - error to throw\n     * @param to - location we were navigating to when the error happened\n     * @param from - location we were navigating from when the error happened\n     * @returns the error as a rejected promise\n     */\n    function triggerError(error, to, from) {\n        markAsReady(error);\n        const list = errorListeners.list();\n        if (list.length) {\n            list.forEach(handler => handler(error, to, from));\n        }\n        else {\n            console.error(error);\n        }\n        // reject the error no matter there were error listeners or not\n        return Promise.reject(error);\n    }\n    function isReady() {\n        if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\n            return Promise.resolve();\n        return new Promise((resolve, reject) => {\n            readyHandlers.add([resolve, reject]);\n        });\n    }\n    function markAsReady(err) {\n        if (!ready) {\n            // still not ready if an error happened\n            ready = !err;\n            setupListeners();\n            readyHandlers\n                .list()\n                .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\n            readyHandlers.reset();\n        }\n        return err;\n    }\n    // Scroll behavior\n    function handleScroll(to, from, isPush, isFirstNavigation) {\n        const { scrollBehavior } = options;\n        if (!isBrowser || !scrollBehavior)\n            return Promise.resolve();\n        const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\n            ((isFirstNavigation || !isPush) &&\n                history.state &&\n                history.state.scroll) ||\n            null;\n        return vue.nextTick()\n            .then(() => scrollBehavior(to, from, scrollPosition))\n            .then(position => position && scrollToPosition(position))\n            .catch(err => triggerError(err, to, from));\n    }\n    const go = (delta) => routerHistory.go(delta);\n    let started;\n    const installedApps = new Set();\n    const router = {\n        currentRoute,\n        listening: true,\n        addRoute,\n        removeRoute,\n        clearRoutes: matcher.clearRoutes,\n        hasRoute,\n        getRoutes,\n        resolve,\n        options,\n        push,\n        replace,\n        go,\n        back: () => go(-1),\n        forward: () => go(1),\n        beforeEach: beforeGuards.add,\n        beforeResolve: beforeResolveGuards.add,\n        afterEach: afterGuards.add,\n        onError: errorListeners.add,\n        isReady,\n        install(app) {\n            const router = this;\n            app.component('RouterLink', RouterLink);\n            app.component('RouterView', RouterView);\n            app.config.globalProperties.$router = router;\n            Object.defineProperty(app.config.globalProperties, '$route', {\n                enumerable: true,\n                get: () => vue.unref(currentRoute),\n            });\n            // this initial navigation is only necessary on client, on server it doesn't\n            // make sense because it will create an extra unnecessary navigation and could\n            // lead to problems\n            if (isBrowser &&\n                // used for the initial navigation client side to avoid pushing\n                // multiple times when the router is used in multiple apps\n                !started &&\n                currentRoute.value === START_LOCATION_NORMALIZED) {\n                // see above\n                started = true;\n                push(routerHistory.location).catch(err => {\n                });\n            }\n            const reactiveRoute = {};\n            for (const key in START_LOCATION_NORMALIZED) {\n                Object.defineProperty(reactiveRoute, key, {\n                    get: () => currentRoute.value[key],\n                    enumerable: true,\n                });\n            }\n            app.provide(routerKey, router);\n            app.provide(routeLocationKey, vue.shallowReactive(reactiveRoute));\n            app.provide(routerViewLocationKey, currentRoute);\n            const unmountApp = app.unmount;\n            installedApps.add(app);\n            app.unmount = function () {\n                installedApps.delete(app);\n                // the router is not attached to an app anymore\n                if (installedApps.size < 1) {\n                    // invalidate the current navigation\n                    pendingLocation = START_LOCATION_NORMALIZED;\n                    removeHistoryListener && removeHistoryListener();\n                    removeHistoryListener = null;\n                    currentRoute.value = START_LOCATION_NORMALIZED;\n                    started = false;\n                    ready = false;\n                }\n                unmountApp();\n            };\n        },\n    };\n    // TODO: type this as NavigationGuardReturn or similar instead of any\n    function runGuardQueue(guards) {\n        return guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\n    }\n    return router;\n}\nfunction extractChangingRecords(to, from) {\n    const leavingRecords = [];\n    const updatingRecords = [];\n    const enteringRecords = [];\n    const len = Math.max(from.matched.length, to.matched.length);\n    for (let i = 0; i < len; i++) {\n        const recordFrom = from.matched[i];\n        if (recordFrom) {\n            if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\n                updatingRecords.push(recordFrom);\n            else\n                leavingRecords.push(recordFrom);\n        }\n        const recordTo = to.matched[i];\n        if (recordTo) {\n            // the type doesn't matter because we are comparing per reference\n            if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\n                enteringRecords.push(recordTo);\n            }\n        }\n    }\n    return [leavingRecords, updatingRecords, enteringRecords];\n}\n\n/**\n * Returns the router instance. Equivalent to using `$router` inside\n * templates.\n */\nfunction useRouter() {\n    return vue.inject(routerKey);\n}\n/**\n * Returns the current route location. Equivalent to using `$route` inside\n * templates.\n */\nfunction useRoute(_name) {\n    return vue.inject(routeLocationKey);\n}\n\nexports.RouterLink = RouterLink;\nexports.RouterView = RouterView;\nexports.START_LOCATION = START_LOCATION_NORMALIZED;\nexports.createMemoryHistory = createMemoryHistory;\nexports.createRouter = createRouter;\nexports.createRouterMatcher = createRouterMatcher;\nexports.createWebHashHistory = createWebHashHistory;\nexports.createWebHistory = createWebHistory;\nexports.isNavigationFailure = isNavigationFailure;\nexports.loadRouteLocation = loadRouteLocation;\nexports.matchedRouteKey = matchedRouteKey;\nexports.onBeforeRouteLeave = onBeforeRouteLeave;\nexports.onBeforeRouteUpdate = onBeforeRouteUpdate;\nexports.parseQuery = parseQuery;\nexports.routeLocationKey = routeLocationKey;\nexports.routerKey = routerKey;\nexports.routerViewLocationKey = routerViewLocationKey;\nexports.stringifyQuery = stringifyQuery;\nexports.useLink = useLink;\nexports.useRoute = useRoute;\nexports.useRouter = useRouter;\nexports.viewDepthKey = viewDepthKey;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/vue-router.prod.cjs')\n} else {\n  module.exports = require('./dist/vue-router.cjs')\n}\n","import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record<string, unknown> {\n  return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n  subject: unknown\n): subject is Record<string | number, unknown> {\n  return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n  return !!(\n    typeof window !== 'undefined' &&\n    window.document &&\n    window.document.createElement\n  )\n}\n\nexport function areOptionsEqual(\n  optionsA: Record<string, unknown>,\n  optionsB: Record<string, unknown>\n): boolean {\n  const optionsAKeys = Object.keys(optionsA)\n  const optionsBKeys = Object.keys(optionsB)\n\n  if (optionsAKeys.length !== optionsBKeys.length) return false\n\n  const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n  const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n  if (breakpointsA !== breakpointsB) return false\n\n  return optionsAKeys.every((key) => {\n    const valueA = optionsA[key]\n    const valueB = optionsB[key]\n    if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n    if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n    return areOptionsEqual(valueA, valueB)\n  })\n}\n\nexport function sortAndMapPluginToOptions(\n  plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n  return plugins\n    .concat()\n    .sort((a, b) => (a.name > b.name ? 1 : -1))\n    .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n  pluginsA: EmblaPluginType[],\n  pluginsB: EmblaPluginType[]\n): boolean {\n  if (pluginsA.length !== pluginsB.length) return false\n\n  const optionsA = sortAndMapPluginToOptions(pluginsA)\n  const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n  return optionsA.every((optionA, index) => {\n    const optionB = optionsB[index]\n    return areOptionsEqual(optionA, optionB)\n  })\n}\n","import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n  return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n  return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n  return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record<string, unknown> {\n  return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n  return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n  return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n  return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n  if (valueB === 0 || valueA === 0) return 0\n  if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n  const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n  return mathAbs(diff / valueB)\n}\n\nexport function roundToTwoDecimals(num: number): number {\n  return Math.round(num * 100) / 100\n}\n\nexport function arrayKeys<Type>(array: Type[]): number[] {\n  return objectKeys(array).map(Number)\n}\n\nexport function arrayLast<Type>(array: Type[]): Type {\n  return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex<Type>(array: Type[]): number {\n  return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex<Type>(array: Type[], index: number): boolean {\n  return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n  return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys<Type extends object>(object: Type): string[] {\n  return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n  objectA: Record<string, unknown>,\n  objectB: Record<string, unknown>\n): Record<string, unknown> {\n  return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n    objectKeys(currentObject).forEach((key) => {\n      const valueA = mergedObjects[key]\n      const valueB = currentObject[key]\n      const areObjects = isObject(valueA) && isObject(valueB)\n\n      mergedObjects[key] = areObjects\n        ? objectsMergeDeep(valueA, valueB)\n        : valueB\n    })\n    return mergedObjects\n  }, {})\n}\n\nexport function isMouseEvent(\n  evt: PointerEventType,\n  ownerWindow: WindowType\n): evt is MouseEvent {\n  return (\n    typeof ownerWindow.MouseEvent !== 'undefined' &&\n    evt instanceof ownerWindow.MouseEvent\n  )\n}\n","import { isString } from './utils'\n\nexport type AlignmentOptionType =\n  | 'start'\n  | 'center'\n  | 'end'\n  | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n  measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n  align: AlignmentOptionType,\n  viewSize: number\n): AlignmentType {\n  const predefined = { start, center, end }\n\n  function start(): number {\n    return 0\n  }\n\n  function center(n: number): number {\n    return end(n) / 2\n  }\n\n  function end(n: number): number {\n    return viewSize - n\n  }\n\n  function measure(n: number, index: number): number {\n    if (isString(align)) return predefined[align](n)\n    return align(viewSize, n, index)\n  }\n\n  const self: AlignmentType = {\n    measure\n  }\n  return self\n}\n","type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n  add: (\n    node: EventTarget,\n    type: EventNameType,\n    handler: EventHandlerType,\n    options?: EventOptionsType\n  ) => EventStoreType\n  clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n  let listeners: EventRemoverType[] = []\n\n  function add(\n    node: EventTarget,\n    type: EventNameType,\n    handler: EventHandlerType,\n    options: EventOptionsType = { passive: true }\n  ): EventStoreType {\n    let removeListener: EventRemoverType\n\n    if ('addEventListener' in node) {\n      node.addEventListener(type, handler, options)\n      removeListener = () => node.removeEventListener(type, handler, options)\n    } else {\n      const legacyMediaQueryList = <MediaQueryList>node\n      legacyMediaQueryList.addListener(handler)\n      removeListener = () => legacyMediaQueryList.removeListener(handler)\n    }\n\n    listeners.push(removeListener)\n    return self\n  }\n\n  function clear(): void {\n    listeners = listeners.filter((remove) => remove())\n  }\n\n  const self: EventStoreType = {\n    add,\n    clear\n  }\n  return self\n}\n","import { EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { WindowType } from './utils'\n\nexport type AnimationsUpdateType = (engine: EngineType) => void\nexport type AnimationsRenderType = (engine: EngineType, alpha: number) => void\n\nexport type AnimationsType = {\n  init: () => void\n  destroy: () => void\n  start: () => void\n  stop: () => void\n  update: () => void\n  render: (alpha: number) => void\n}\n\nexport function Animations(\n  ownerDocument: Document,\n  ownerWindow: WindowType,\n  update: () => void,\n  render: (alpha: number) => void\n): AnimationsType {\n  const documentVisibleHandler = EventStore()\n  const fixedTimeStep = 1000 / 60\n\n  let lastTimeStamp: number | null = null\n  let accumulatedTime = 0\n  let animationId = 0\n\n  function init(): void {\n    documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n      if (ownerDocument.hidden) reset()\n    })\n  }\n\n  function destroy(): void {\n    stop()\n    documentVisibleHandler.clear()\n  }\n\n  function animate(timeStamp: DOMHighResTimeStamp): void {\n    if (!animationId) return\n    if (!lastTimeStamp) {\n      lastTimeStamp = timeStamp\n      update()\n      update()\n    }\n\n    const timeElapsed = timeStamp - lastTimeStamp\n    lastTimeStamp = timeStamp\n    accumulatedTime += timeElapsed\n\n    while (accumulatedTime >= fixedTimeStep) {\n      update()\n      accumulatedTime -= fixedTimeStep\n    }\n\n    const alpha = accumulatedTime / fixedTimeStep\n    render(alpha)\n\n    if (animationId) {\n      animationId = ownerWindow.requestAnimationFrame(animate)\n    }\n  }\n\n  function start(): void {\n    if (animationId) return\n    animationId = ownerWindow.requestAnimationFrame(animate)\n  }\n\n  function stop(): void {\n    ownerWindow.cancelAnimationFrame(animationId)\n    lastTimeStamp = null\n    accumulatedTime = 0\n    animationId = 0\n  }\n\n  function reset(): void {\n    lastTimeStamp = null\n    accumulatedTime = 0\n  }\n\n  const self: AnimationsType = {\n    init,\n    destroy,\n    start,\n    stop,\n    update,\n    render\n  }\n  return self\n}\n","import { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\nexport type AxisDirectionOptionType = 'ltr' | 'rtl'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n  scroll: AxisOptionType\n  cross: AxisOptionType\n  startEdge: AxisEdgeType\n  endEdge: AxisEdgeType\n  measureSize: (nodeRect: NodeRectType) => number\n  direction: (n: number) => number\n}\n\nexport function Axis(\n  axis: AxisOptionType,\n  contentDirection: AxisDirectionOptionType\n): AxisType {\n  const isRightToLeft = contentDirection === 'rtl'\n  const isVertical = axis === 'y'\n  const scroll = isVertical ? 'y' : 'x'\n  const cross = isVertical ? 'x' : 'y'\n  const sign = !isVertical && isRightToLeft ? -1 : 1\n  const startEdge = getStartEdge()\n  const endEdge = getEndEdge()\n\n  function measureSize(nodeRect: NodeRectType): number {\n    const { height, width } = nodeRect\n    return isVertical ? height : width\n  }\n\n  function getStartEdge(): AxisEdgeType {\n    if (isVertical) return 'top'\n    return isRightToLeft ? 'right' : 'left'\n  }\n\n  function getEndEdge(): AxisEdgeType {\n    if (isVertical) return 'bottom'\n    return isRightToLeft ? 'left' : 'right'\n  }\n\n  function direction(n: number): number {\n    return n * sign\n  }\n\n  const self: AxisType = {\n    scroll,\n    cross,\n    startEdge,\n    endEdge,\n    measureSize,\n    direction\n  }\n  return self\n}\n","import { mathAbs } from './utils'\n\nexport type LimitType = {\n  min: number\n  max: number\n  length: number\n  constrain: (n: number) => number\n  reachedAny: (n: number) => boolean\n  reachedMax: (n: number) => boolean\n  reachedMin: (n: number) => boolean\n  removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number = 0, max: number = 0): LimitType {\n  const length = mathAbs(min - max)\n\n  function reachedMin(n: number): boolean {\n    return n < min\n  }\n\n  function reachedMax(n: number): boolean {\n    return n > max\n  }\n\n  function reachedAny(n: number): boolean {\n    return reachedMin(n) || reachedMax(n)\n  }\n\n  function constrain(n: number): number {\n    if (!reachedAny(n)) return n\n    return reachedMin(n) ? min : max\n  }\n\n  function removeOffset(n: number): number {\n    if (!length) return n\n    return n - length * Math.ceil((n - max) / length)\n  }\n\n  const self: LimitType = {\n    length,\n    max,\n    min,\n    constrain,\n    reachedAny,\n    reachedMax,\n    reachedMin,\n    removeOffset\n  }\n  return self\n}\n","import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n  get: () => number\n  set: (n: number) => CounterType\n  add: (n: number) => CounterType\n  clone: () => CounterType\n}\n\nexport function Counter(\n  max: number,\n  start: number,\n  loop: boolean\n): CounterType {\n  const { constrain } = Limit(0, max)\n  const loopEnd = max + 1\n  let counter = withinLimit(start)\n\n  function withinLimit(n: number): number {\n    return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n  }\n\n  function get(): number {\n    return counter\n  }\n\n  function set(n: number): CounterType {\n    counter = withinLimit(n)\n    return self\n  }\n\n  function add(n: number): CounterType {\n    return clone().set(get() + n)\n  }\n\n  function clone(): CounterType {\n    return Counter(max, get(), loop)\n  }\n\n  const self: CounterType = {\n    get,\n    set,\n    add,\n    clone\n  }\n  return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n  deltaAbs,\n  factorAbs,\n  isBoolean,\n  isMouseEvent,\n  mathAbs,\n  mathSign,\n  WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n  emblaApi: EmblaCarouselType,\n  evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n  init: (emblaApi: EmblaCarouselType) => void\n  destroy: () => void\n  pointerDown: () => boolean\n}\n\nexport function DragHandler(\n  axis: AxisType,\n  rootNode: HTMLElement,\n  ownerDocument: Document,\n  ownerWindow: WindowType,\n  target: Vector1DType,\n  dragTracker: DragTrackerType,\n  location: Vector1DType,\n  animation: AnimationsType,\n  scrollTo: ScrollToType,\n  scrollBody: ScrollBodyType,\n  scrollTarget: ScrollTargetType,\n  index: CounterType,\n  eventHandler: EventHandlerType,\n  percentOfView: PercentOfViewType,\n  dragFree: boolean,\n  dragThreshold: number,\n  skipSnaps: boolean,\n  baseFriction: number,\n  watchDrag: DragHandlerOptionType\n): DragHandlerType {\n  const { cross: crossAxis, direction } = axis\n  const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n  const nonPassiveEvent = { passive: false }\n  const initEvents = EventStore()\n  const dragEvents = EventStore()\n  const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n  const snapForceBoost = { mouse: 300, touch: 400 }\n  const freeForceBoost = { mouse: 500, touch: 600 }\n  const baseSpeed = dragFree ? 43 : 25\n\n  let isMoving = false\n  let startScroll = 0\n  let startCross = 0\n  let pointerIsDown = false\n  let preventScroll = false\n  let preventClick = false\n  let isMouse = false\n\n  function init(emblaApi: EmblaCarouselType): void {\n    if (!watchDrag) return\n\n    function downIfAllowed(evt: PointerEventType): void {\n      if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n    }\n\n    const node = rootNode\n    initEvents\n      .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n      .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n      .add(node, 'touchend', () => undefined)\n      .add(node, 'touchstart', downIfAllowed)\n      .add(node, 'mousedown', downIfAllowed)\n      .add(node, 'touchcancel', up)\n      .add(node, 'contextmenu', up)\n      .add(node, 'click', click, true)\n  }\n\n  function destroy(): void {\n    initEvents.clear()\n    dragEvents.clear()\n  }\n\n  function addDragEvents(): void {\n    const node = isMouse ? ownerDocument : rootNode\n    dragEvents\n      .add(node, 'touchmove', move, nonPassiveEvent)\n      .add(node, 'touchend', up)\n      .add(node, 'mousemove', move, nonPassiveEvent)\n      .add(node, 'mouseup', up)\n  }\n\n  function isFocusNode(node: Element): boolean {\n    const nodeName = node.nodeName || ''\n    return focusNodes.includes(nodeName)\n  }\n\n  function forceBoost(): number {\n    const boost = dragFree ? freeForceBoost : snapForceBoost\n    const type = isMouse ? 'mouse' : 'touch'\n    return boost[type]\n  }\n\n  function allowedForce(force: number, targetChanged: boolean): number {\n    const next = index.add(mathSign(force) * -1)\n    const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n    if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n    if (skipSnaps && targetChanged) return baseForce * 0.5\n\n    return scrollTarget.byIndex(next.get(), 0).distance\n  }\n\n  function down(evt: PointerEventType): void {\n    const isMouseEvt = isMouseEvent(evt, ownerWindow)\n    isMouse = isMouseEvt\n    preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n    isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n    if (isMouseEvt && evt.button !== 0) return\n    if (isFocusNode(evt.target as Element)) return\n\n    pointerIsDown = true\n    dragTracker.pointerDown(evt)\n    scrollBody.useFriction(0).useDuration(0)\n    target.set(location)\n    addDragEvents()\n    startScroll = dragTracker.readPoint(evt)\n    startCross = dragTracker.readPoint(evt, crossAxis)\n    eventHandler.emit('pointerDown')\n  }\n\n  function move(evt: PointerEventType): void {\n    const isTouchEvt = !isMouseEvent(evt, ownerWindow)\n    if (isTouchEvt && evt.touches.length >= 2) return up(evt)\n\n    const lastScroll = dragTracker.readPoint(evt)\n    const lastCross = dragTracker.readPoint(evt, crossAxis)\n    const diffScroll = deltaAbs(lastScroll, startScroll)\n    const diffCross = deltaAbs(lastCross, startCross)\n\n    if (!preventScroll && !isMouse) {\n      if (!evt.cancelable) return up(evt)\n      preventScroll = diffScroll > diffCross\n      if (!preventScroll) return up(evt)\n    }\n    const diff = dragTracker.pointerMove(evt)\n    if (diffScroll > dragThreshold) preventClick = true\n\n    scrollBody.useFriction(0.3).useDuration(0.75)\n    animation.start()\n    target.add(direction(diff))\n    evt.preventDefault()\n  }\n\n  function up(evt: PointerEventType): void {\n    const currentLocation = scrollTarget.byDistance(0, false)\n    const targetChanged = currentLocation.index !== index.get()\n    const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n    const force = allowedForce(direction(rawForce), targetChanged)\n    const forceFactor = factorAbs(rawForce, force)\n    const speed = baseSpeed - 10 * forceFactor\n    const friction = baseFriction + forceFactor / 50\n\n    preventScroll = false\n    pointerIsDown = false\n    dragEvents.clear()\n    scrollBody.useDuration(speed).useFriction(friction)\n    scrollTo.distance(force, !dragFree)\n    isMouse = false\n    eventHandler.emit('pointerUp')\n  }\n\n  function click(evt: MouseEvent): void {\n    if (preventClick) {\n      evt.stopPropagation()\n      evt.preventDefault()\n      preventClick = false\n    }\n  }\n\n  function pointerDown(): boolean {\n    return pointerIsDown\n  }\n\n  const self: DragHandlerType = {\n    init,\n    destroy,\n    pointerDown\n  }\n  return self\n}\n","import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n  pointerDown: (evt: PointerEventType) => number\n  pointerMove: (evt: PointerEventType) => number\n  pointerUp: (evt: PointerEventType) => number\n  readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n  axis: AxisType,\n  ownerWindow: WindowType\n): DragTrackerType {\n  const logInterval = 170\n\n  let startEvent: PointerEventType\n  let lastEvent: PointerEventType\n\n  function readTime(evt: PointerEventType): number {\n    return evt.timeStamp\n  }\n\n  function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n    const property = evtAxis || axis.scroll\n    const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n    return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n  }\n\n  function pointerDown(evt: PointerEventType): number {\n    startEvent = evt\n    lastEvent = evt\n    return readPoint(evt)\n  }\n\n  function pointerMove(evt: PointerEventType): number {\n    const diff = readPoint(evt) - readPoint(lastEvent)\n    const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n    lastEvent = evt\n    if (expired) startEvent = evt\n    return diff\n  }\n\n  function pointerUp(evt: PointerEventType): number {\n    if (!startEvent || !lastEvent) return 0\n    const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n    const diffTime = readTime(evt) - readTime(startEvent)\n    const expired = readTime(evt) - readTime(lastEvent) > logInterval\n    const force = diffDrag / diffTime\n    const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n    return isFlick ? force : 0\n  }\n\n  const self: DragTrackerType = {\n    pointerDown,\n    pointerMove,\n    pointerUp,\n    readPoint\n  }\n  return self\n}\n","export type NodeRectType = {\n  top: number\n  right: number\n  bottom: number\n  left: number\n  width: number\n  height: number\n}\n\nexport type NodeRectsType = {\n  measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n  function measure(node: HTMLElement): NodeRectType {\n    const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n    const offset: NodeRectType = {\n      top: offsetTop,\n      right: offsetLeft + offsetWidth,\n      bottom: offsetTop + offsetHeight,\n      left: offsetLeft,\n      width: offsetWidth,\n      height: offsetHeight\n    }\n\n    return offset\n  }\n\n  const self: NodeRectsType = {\n    measure\n  }\n  return self\n}\n","export type PercentOfViewType = {\n  measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n  function measure(n: number): number {\n    return viewSize * (n / 100)\n  }\n\n  const self: PercentOfViewType = {\n    measure\n  }\n  return self\n}\n","import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n  emblaApi: EmblaCarouselType,\n  entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n  init: (emblaApi: EmblaCarouselType) => void\n  destroy: () => void\n}\n\nexport function ResizeHandler(\n  container: HTMLElement,\n  eventHandler: EventHandlerType,\n  ownerWindow: WindowType,\n  slides: HTMLElement[],\n  axis: AxisType,\n  watchResize: ResizeHandlerOptionType,\n  nodeRects: NodeRectsType\n): ResizeHandlerType {\n  const observeNodes = [container].concat(slides)\n  let resizeObserver: ResizeObserver\n  let containerSize: number\n  let slideSizes: number[] = []\n  let destroyed = false\n\n  function readSize(node: HTMLElement): number {\n    return axis.measureSize(nodeRects.measure(node))\n  }\n\n  function init(emblaApi: EmblaCarouselType): void {\n    if (!watchResize) return\n\n    containerSize = readSize(container)\n    slideSizes = slides.map(readSize)\n\n    function defaultCallback(entries: ResizeObserverEntry[]): void {\n      for (const entry of entries) {\n        if (destroyed) return\n\n        const isContainer = entry.target === container\n        const slideIndex = slides.indexOf(<HTMLElement>entry.target)\n        const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n        const newSize = readSize(isContainer ? container : slides[slideIndex])\n        const diffSize = mathAbs(newSize - lastSize)\n\n        if (diffSize >= 0.5) {\n          emblaApi.reInit()\n          eventHandler.emit('resize')\n\n          break\n        }\n      }\n    }\n\n    resizeObserver = new ResizeObserver((entries) => {\n      if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n        defaultCallback(entries)\n      }\n    })\n\n    ownerWindow.requestAnimationFrame(() => {\n      observeNodes.forEach((node) => resizeObserver.observe(node))\n    })\n  }\n\n  function destroy(): void {\n    destroyed = true\n    if (resizeObserver) resizeObserver.disconnect()\n  }\n\n  const self: ResizeHandlerType = {\n    init,\n    destroy\n  }\n  return self\n}\n","import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n  direction: () => number\n  duration: () => number\n  velocity: () => number\n  seek: () => ScrollBodyType\n  settled: () => boolean\n  useBaseFriction: () => ScrollBodyType\n  useBaseDuration: () => ScrollBodyType\n  useFriction: (n: number) => ScrollBodyType\n  useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n  location: Vector1DType,\n  offsetLocation: Vector1DType,\n  previousLocation: Vector1DType,\n  target: Vector1DType,\n  baseDuration: number,\n  baseFriction: number\n): ScrollBodyType {\n  let scrollVelocity = 0\n  let scrollDirection = 0\n  let scrollDuration = baseDuration\n  let scrollFriction = baseFriction\n  let rawLocation = location.get()\n  let rawLocationPrevious = 0\n\n  function seek(): ScrollBodyType {\n    const displacement = target.get() - location.get()\n    const isInstant = !scrollDuration\n    let scrollDistance = 0\n\n    if (isInstant) {\n      scrollVelocity = 0\n      previousLocation.set(target)\n      location.set(target)\n\n      scrollDistance = displacement\n    } else {\n      previousLocation.set(location)\n\n      scrollVelocity += displacement / scrollDuration\n      scrollVelocity *= scrollFriction\n      rawLocation += scrollVelocity\n      location.add(scrollVelocity)\n\n      scrollDistance = rawLocation - rawLocationPrevious\n    }\n\n    scrollDirection = mathSign(scrollDistance)\n    rawLocationPrevious = rawLocation\n    return self\n  }\n\n  function settled(): boolean {\n    const diff = target.get() - offsetLocation.get()\n    return mathAbs(diff) < 0.001\n  }\n\n  function duration(): number {\n    return scrollDuration\n  }\n\n  function direction(): number {\n    return scrollDirection\n  }\n\n  function velocity(): number {\n    return scrollVelocity\n  }\n\n  function useBaseDuration(): ScrollBodyType {\n    return useDuration(baseDuration)\n  }\n\n  function useBaseFriction(): ScrollBodyType {\n    return useFriction(baseFriction)\n  }\n\n  function useDuration(n: number): ScrollBodyType {\n    scrollDuration = n\n    return self\n  }\n\n  function useFriction(n: number): ScrollBodyType {\n    scrollFriction = n\n    return self\n  }\n\n  const self: ScrollBodyType = {\n    direction,\n    duration,\n    velocity,\n    seek,\n    settled,\n    useBaseFriction,\n    useBaseDuration,\n    useFriction,\n    useDuration\n  }\n  return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n  shouldConstrain: () => boolean\n  constrain: (pointerDown: boolean) => void\n  toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n  limit: LimitType,\n  location: Vector1DType,\n  target: Vector1DType,\n  scrollBody: ScrollBodyType,\n  percentOfView: PercentOfViewType\n): ScrollBoundsType {\n  const pullBackThreshold = percentOfView.measure(10)\n  const edgeOffsetTolerance = percentOfView.measure(50)\n  const frictionLimit = Limit(0.1, 0.99)\n  let disabled = false\n\n  function shouldConstrain(): boolean {\n    if (disabled) return false\n    if (!limit.reachedAny(target.get())) return false\n    if (!limit.reachedAny(location.get())) return false\n    return true\n  }\n\n  function constrain(pointerDown: boolean): void {\n    if (!shouldConstrain()) return\n    const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n    const diffToEdge = mathAbs(limit[edge] - location.get())\n    const diffToTarget = target.get() - location.get()\n    const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n    target.subtract(diffToTarget * friction)\n\n    if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n      target.set(limit.constrain(target.get()))\n      scrollBody.useDuration(25).useBaseFriction()\n    }\n  }\n\n  function toggleActive(active: boolean): void {\n    disabled = !active\n  }\n\n  const self: ScrollBoundsType = {\n    shouldConstrain,\n    constrain,\n    toggleActive\n  }\n  return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast, deltaAbs } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n  snapsContained: number[]\n  scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n  viewSize: number,\n  contentSize: number,\n  snapsAligned: number[],\n  containScroll: ScrollContainOptionType,\n  pixelTolerance: number\n): ScrollContainType {\n  const scrollBounds = Limit(-contentSize + viewSize, 0)\n  const snapsBounded = measureBounded()\n  const scrollContainLimit = findScrollContainLimit()\n  const snapsContained = measureContained()\n\n  function usePixelTolerance(bound: number, snap: number): boolean {\n    return deltaAbs(bound, snap) <= 1\n  }\n\n  function findScrollContainLimit(): LimitType {\n    const startSnap = snapsBounded[0]\n    const endSnap = arrayLast(snapsBounded)\n    const min = snapsBounded.lastIndexOf(startSnap)\n    const max = snapsBounded.indexOf(endSnap) + 1\n    return Limit(min, max)\n  }\n\n  function measureBounded(): number[] {\n    return snapsAligned\n      .map((snapAligned, index) => {\n        const { min, max } = scrollBounds\n        const snap = scrollBounds.constrain(snapAligned)\n        const isFirst = !index\n        const isLast = arrayIsLastIndex(snapsAligned, index)\n        if (isFirst) return max\n        if (isLast) return min\n        if (usePixelTolerance(min, snap)) return min\n        if (usePixelTolerance(max, snap)) return max\n        return snap\n      })\n      .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n  }\n\n  function measureContained(): number[] {\n    if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max]\n    if (containScroll === 'keepSnaps') return snapsBounded\n    const { min, max } = scrollContainLimit\n    return snapsBounded.slice(min, max)\n  }\n\n  const self: ScrollContainType = {\n    snapsContained,\n    scrollContainLimit\n  }\n  return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n  limit: LimitType\n}\n\nexport function ScrollLimit(\n  contentSize: number,\n  scrollSnaps: number[],\n  loop: boolean\n): ScrollLimitType {\n  const max = scrollSnaps[0]\n  const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n  const limit = Limit(min, max)\n\n  const self: ScrollLimitType = {\n    limit\n  }\n  return self\n}\n","import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n  loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n  contentSize: number,\n  limit: LimitType,\n  location: Vector1DType,\n  vectors: Vector1DType[]\n): ScrollLooperType {\n  const jointSafety = 0.1\n  const min = limit.min + jointSafety\n  const max = limit.max + jointSafety\n  const { reachedMin, reachedMax } = Limit(min, max)\n\n  function shouldLoop(direction: number): boolean {\n    if (direction === 1) return reachedMax(location.get())\n    if (direction === -1) return reachedMin(location.get())\n    return false\n  }\n\n  function loop(direction: number): void {\n    if (!shouldLoop(direction)) return\n\n    const loopDistance = contentSize * (direction * -1)\n    vectors.forEach((v) => v.add(loopDistance))\n  }\n\n  const self: ScrollLooperType = {\n    loop\n  }\n  return self\n}\n","import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n  get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n  const { max, length } = limit\n\n  function get(n: number): number {\n    const currentLocation = n - max\n    return length ? currentLocation / -length : 0\n  }\n\n  const self: ScrollProgressType = {\n    get\n  }\n  return self\n}\n","import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n  snaps: number[]\n  snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n  axis: AxisType,\n  alignment: AlignmentType,\n  containerRect: NodeRectType,\n  slideRects: NodeRectType[],\n  slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n  const { startEdge, endEdge } = axis\n  const { groupSlides } = slidesToScroll\n  const alignments = measureSizes().map(alignment.measure)\n  const snaps = measureUnaligned()\n  const snapsAligned = measureAligned()\n\n  function measureSizes(): number[] {\n    return groupSlides(slideRects)\n      .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n      .map(mathAbs)\n  }\n\n  function measureUnaligned(): number[] {\n    return slideRects\n      .map((rect) => containerRect[startEdge] - rect[startEdge])\n      .map((snap) => -mathAbs(snap))\n  }\n\n  function measureAligned(): number[] {\n    return groupSlides(snaps)\n      .map((g) => g[0])\n      .map((snap, index) => snap + alignments[index])\n  }\n\n  const self: ScrollSnapsType = {\n    snaps,\n    snapsAligned\n  }\n  return self\n}\n","import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n  arrayFromNumber,\n  arrayIsLastIndex,\n  arrayLast,\n  arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n  slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n  containSnaps: boolean,\n  containScroll: ScrollContainOptionType,\n  scrollSnaps: number[],\n  scrollContainLimit: LimitType,\n  slidesToScroll: SlidesToScrollType,\n  slideIndexes: number[]\n): SlideRegistryType {\n  const { groupSlides } = slidesToScroll\n  const { min, max } = scrollContainLimit\n  const slideRegistry = createSlideRegistry()\n\n  function createSlideRegistry(): number[][] {\n    const groupedSlideIndexes = groupSlides(slideIndexes)\n    const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n\n    if (scrollSnaps.length === 1) return [slideIndexes]\n    if (doNotContain) return groupedSlideIndexes\n\n    return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n      const isFirst = !index\n      const isLast = arrayIsLastIndex(groups, index)\n\n      if (isFirst) {\n        const range = arrayLast(groups[0]) + 1\n        return arrayFromNumber(range)\n      }\n      if (isLast) {\n        const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n        return arrayFromNumber(range, arrayLast(groups)[0])\n      }\n      return group\n    })\n  }\n\n  const self: SlideRegistryType = {\n    slideRegistry\n  }\n  return self\n}\n","import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n  distance: number\n  index: number\n}\n\nexport type ScrollTargetType = {\n  byIndex: (target: number, direction: number) => TargetType\n  byDistance: (force: number, snap: boolean) => TargetType\n  shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n  loop: boolean,\n  scrollSnaps: number[],\n  contentSize: number,\n  limit: LimitType,\n  targetVector: Vector1DType\n): ScrollTargetType {\n  const { reachedAny, removeOffset, constrain } = limit\n\n  function minDistance(distances: number[]): number {\n    return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n  }\n\n  function findTargetSnap(target: number): TargetType {\n    const distance = loop ? removeOffset(target) : constrain(target)\n    const ascDiffsToSnaps = scrollSnaps\n      .map((snap, index) => ({ diff: shortcut(snap - distance, 0), index }))\n      .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n    const { index } = ascDiffsToSnaps[0]\n    return { index, distance }\n  }\n\n  function shortcut(target: number, direction: number): number {\n    const targets = [target, target + contentSize, target - contentSize]\n\n    if (!loop) return target\n    if (!direction) return minDistance(targets)\n\n    const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n    if (matchingTargets.length) return minDistance(matchingTargets)\n    return arrayLast(targets) - contentSize\n  }\n\n  function byIndex(index: number, direction: number): TargetType {\n    const diffToSnap = scrollSnaps[index] - targetVector.get()\n    const distance = shortcut(diffToSnap, direction)\n    return { index, distance }\n  }\n\n  function byDistance(distance: number, snap: boolean): TargetType {\n    const target = targetVector.get() + distance\n    const { index, distance: targetSnapDistance } = findTargetSnap(target)\n    const reachedBound = !loop && reachedAny(target)\n\n    if (!snap || reachedBound) return { index, distance }\n\n    const diffToSnap = scrollSnaps[index] - targetSnapDistance\n    const snapDistance = distance + shortcut(diffToSnap, 0)\n\n    return { index, distance: snapDistance }\n  }\n\n  const self: ScrollTargetType = {\n    byDistance,\n    byIndex,\n    shortcut\n  }\n  return self\n}\n","import { AnimationsType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n  distance: (n: number, snap: boolean) => void\n  index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n  animation: AnimationsType,\n  indexCurrent: CounterType,\n  indexPrevious: CounterType,\n  scrollBody: ScrollBodyType,\n  scrollTarget: ScrollTargetType,\n  targetVector: Vector1DType,\n  eventHandler: EventHandlerType\n): ScrollToType {\n  function scrollTo(target: TargetType): void {\n    const distanceDiff = target.distance\n    const indexDiff = target.index !== indexCurrent.get()\n\n    targetVector.add(distanceDiff)\n\n    if (distanceDiff) {\n      if (scrollBody.duration()) {\n        animation.start()\n      } else {\n        animation.update()\n        animation.render(1)\n        animation.update()\n      }\n    }\n\n    if (indexDiff) {\n      indexPrevious.set(indexCurrent.get())\n      indexCurrent.set(target.index)\n      eventHandler.emit('select')\n    }\n  }\n\n  function distance(n: number, snap: boolean): void {\n    const target = scrollTarget.byDistance(n, snap)\n    scrollTo(target)\n  }\n\n  function index(n: number, direction: number): void {\n    const targetIndex = indexCurrent.clone().set(n)\n    const target = scrollTarget.byIndex(targetIndex.get(), direction)\n    scrollTo(target)\n  }\n\n  const self: ScrollToType = {\n    distance,\n    index\n  }\n  return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isBoolean, isNumber } from './utils'\n\ntype FocusHandlerCallbackType = (\n  emblaApi: EmblaCarouselType,\n  evt: FocusEvent\n) => boolean | void\n\nexport type FocusHandlerOptionType = boolean | FocusHandlerCallbackType\n\nexport type SlideFocusType = {\n  init: (emblaApi: EmblaCarouselType) => void\n}\n\nexport function SlideFocus(\n  root: HTMLElement,\n  slides: HTMLElement[],\n  slideRegistry: SlideRegistryType['slideRegistry'],\n  scrollTo: ScrollToType,\n  scrollBody: ScrollBodyType,\n  eventStore: EventStoreType,\n  eventHandler: EventHandlerType,\n  watchFocus: FocusHandlerOptionType\n): SlideFocusType {\n  const focusListenerOptions = { passive: true, capture: true }\n  let lastTabPressTime = 0\n\n  function init(emblaApi: EmblaCarouselType): void {\n    if (!watchFocus) return\n\n    function defaultCallback(index: number): void {\n      const nowTime = new Date().getTime()\n      const diffTime = nowTime - lastTabPressTime\n\n      if (diffTime > 10) return\n\n      eventHandler.emit('slideFocusStart')\n      root.scrollLeft = 0\n\n      const group = slideRegistry.findIndex((group) => group.includes(index))\n\n      if (!isNumber(group)) return\n\n      scrollBody.useDuration(0)\n      scrollTo.index(group, 0)\n\n      eventHandler.emit('slideFocus')\n    }\n\n    eventStore.add(document, 'keydown', registerTabPress, false)\n\n    slides.forEach((slide, slideIndex) => {\n      eventStore.add(\n        slide,\n        'focus',\n        (evt: FocusEvent) => {\n          if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n            defaultCallback(slideIndex)\n          }\n        },\n        focusListenerOptions\n      )\n    })\n  }\n\n  function registerTabPress(event: KeyboardEvent): void {\n    if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n  }\n\n  const self: SlideFocusType = {\n    init\n  }\n  return self\n}\n","import { isNumber } from './utils'\n\nexport type Vector1DType = {\n  get: () => number\n  set: (n: Vector1DType | number) => void\n  add: (n: Vector1DType | number) => void\n  subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n  let value = initialValue\n\n  function get(): number {\n    return value\n  }\n\n  function set(n: Vector1DType | number): void {\n    value = normalizeInput(n)\n  }\n\n  function add(n: Vector1DType | number): void {\n    value += normalizeInput(n)\n  }\n\n  function subtract(n: Vector1DType | number): void {\n    value -= normalizeInput(n)\n  }\n\n  function normalizeInput(n: Vector1DType | number): number {\n    return isNumber(n) ? n : n.get()\n  }\n\n  const self: Vector1DType = {\n    get,\n    set,\n    add,\n    subtract\n  }\n  return self\n}\n","import { AxisType } from './Axis'\nimport { roundToTwoDecimals } from './utils'\n\nexport type TranslateType = {\n  clear: () => void\n  to: (target: number) => void\n  toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n  axis: AxisType,\n  container: HTMLElement\n): TranslateType {\n  const translate = axis.scroll === 'x' ? x : y\n  const containerStyle = container.style\n  let previousTarget: number | null = null\n  let disabled = false\n\n  function x(n: number): string {\n    return `translate3d(${n}px,0px,0px)`\n  }\n\n  function y(n: number): string {\n    return `translate3d(0px,${n}px,0px)`\n  }\n\n  function to(target: number): void {\n    if (disabled) return\n\n    const newTarget = roundToTwoDecimals(axis.direction(target))\n    if (newTarget === previousTarget) return\n\n    containerStyle.transform = translate(newTarget)\n    previousTarget = newTarget\n  }\n\n  function toggleActive(active: boolean): void {\n    disabled = !active\n  }\n\n  function clear(): void {\n    if (disabled) return\n    containerStyle.transform = ''\n    if (!container.getAttribute('style')) container.removeAttribute('style')\n  }\n\n  const self: TranslateType = {\n    clear,\n    to,\n    toggleActive\n  }\n  return self\n}\n","import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\n\ntype SlideBoundType = {\n  start: number\n  end: number\n}\n\ntype LoopPointType = {\n  loopPoint: number\n  index: number\n  translate: TranslateType\n  slideLocation: Vector1DType\n  target: () => number\n}\n\nexport type SlideLooperType = {\n  canLoop: () => boolean\n  clear: () => void\n  loop: () => void\n  loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n  axis: AxisType,\n  viewSize: number,\n  contentSize: number,\n  slideSizes: number[],\n  slideSizesWithGaps: number[],\n  snaps: number[],\n  scrollSnaps: number[],\n  location: Vector1DType,\n  slides: HTMLElement[]\n): SlideLooperType {\n  const roundingSafety = 0.5\n  const ascItems = arrayKeys(slideSizesWithGaps)\n  const descItems = arrayKeys(slideSizesWithGaps).reverse()\n  const loopPoints = startPoints().concat(endPoints())\n\n  function removeSlideSizes(indexes: number[], from: number): number {\n    return indexes.reduce((a: number, i) => {\n      return a - slideSizesWithGaps[i]\n    }, from)\n  }\n\n  function slidesInGap(indexes: number[], gap: number): number[] {\n    return indexes.reduce((a: number[], i) => {\n      const remainingGap = removeSlideSizes(a, gap)\n      return remainingGap > 0 ? a.concat([i]) : a\n    }, [])\n  }\n\n  function findSlideBounds(offset: number): SlideBoundType[] {\n    return snaps.map((snap, index) => ({\n      start: snap - slideSizes[index] + roundingSafety + offset,\n      end: snap + viewSize - roundingSafety + offset\n    }))\n  }\n\n  function findLoopPoints(\n    indexes: number[],\n    offset: number,\n    isEndEdge: boolean\n  ): LoopPointType[] {\n    const slideBounds = findSlideBounds(offset)\n\n    return indexes.map((index) => {\n      const initial = isEndEdge ? 0 : -contentSize\n      const altered = isEndEdge ? contentSize : 0\n      const boundEdge = isEndEdge ? 'end' : 'start'\n      const loopPoint = slideBounds[index][boundEdge]\n\n      return {\n        index,\n        loopPoint,\n        slideLocation: Vector1D(-1),\n        translate: Translate(axis, slides[index]),\n        target: () => (location.get() > loopPoint ? initial : altered)\n      }\n    })\n  }\n\n  function startPoints(): LoopPointType[] {\n    const gap = scrollSnaps[0]\n    const indexes = slidesInGap(descItems, gap)\n    return findLoopPoints(indexes, contentSize, false)\n  }\n\n  function endPoints(): LoopPointType[] {\n    const gap = viewSize - scrollSnaps[0] - 1\n    const indexes = slidesInGap(ascItems, gap)\n    return findLoopPoints(indexes, -contentSize, true)\n  }\n\n  function canLoop(): boolean {\n    return loopPoints.every(({ index }) => {\n      const otherIndexes = ascItems.filter((i) => i !== index)\n      return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n    })\n  }\n\n  function loop(): void {\n    loopPoints.forEach((loopPoint) => {\n      const { target, translate, slideLocation } = loopPoint\n      const shiftLocation = target()\n      if (shiftLocation === slideLocation.get()) return\n      translate.to(shiftLocation)\n      slideLocation.set(shiftLocation)\n    })\n  }\n\n  function clear(): void {\n    loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n  }\n\n  const self: SlideLooperType = {\n    canLoop,\n    clear,\n    loop,\n    loopPoints\n  }\n  return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n  emblaApi: EmblaCarouselType,\n  mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n  init: (emblaApi: EmblaCarouselType) => void\n  destroy: () => void\n}\n\nexport function SlidesHandler(\n  container: HTMLElement,\n  eventHandler: EventHandlerType,\n  watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n  let mutationObserver: MutationObserver\n  let destroyed = false\n\n  function init(emblaApi: EmblaCarouselType): void {\n    if (!watchSlides) return\n\n    function defaultCallback(mutations: MutationRecord[]): void {\n      for (const mutation of mutations) {\n        if (mutation.type === 'childList') {\n          emblaApi.reInit()\n          eventHandler.emit('slidesChanged')\n          break\n        }\n      }\n    }\n\n    mutationObserver = new MutationObserver((mutations) => {\n      if (destroyed) return\n      if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n        defaultCallback(mutations)\n      }\n    })\n\n    mutationObserver.observe(container, { childList: true })\n  }\n\n  function destroy(): void {\n    if (mutationObserver) mutationObserver.disconnect()\n    destroyed = true\n  }\n\n  const self: SlidesHandlerType = {\n    init,\n    destroy\n  }\n  return self\n}\n","import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n  [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n  init: () => void\n  destroy: () => void\n  get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n  container: HTMLElement,\n  slides: HTMLElement[],\n  eventHandler: EventHandlerType,\n  threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n  const intersectionEntryMap: IntersectionEntryMapType = {}\n  let inViewCache: number[] | null = null\n  let notInViewCache: number[] | null = null\n  let intersectionObserver: IntersectionObserver\n  let destroyed = false\n\n  function init(): void {\n    intersectionObserver = new IntersectionObserver(\n      (entries) => {\n        if (destroyed) return\n\n        entries.forEach((entry) => {\n          const index = slides.indexOf(<HTMLElement>entry.target)\n          intersectionEntryMap[index] = entry\n        })\n\n        inViewCache = null\n        notInViewCache = null\n        eventHandler.emit('slidesInView')\n      },\n      {\n        root: container.parentElement,\n        threshold\n      }\n    )\n\n    slides.forEach((slide) => intersectionObserver.observe(slide))\n  }\n\n  function destroy(): void {\n    if (intersectionObserver) intersectionObserver.disconnect()\n    destroyed = true\n  }\n\n  function createInViewList(inView: boolean): number[] {\n    return objectKeys(intersectionEntryMap).reduce(\n      (list: number[], slideIndex) => {\n        const index = parseInt(slideIndex)\n        const { isIntersecting } = intersectionEntryMap[index]\n        const inViewMatch = inView && isIntersecting\n        const notInViewMatch = !inView && !isIntersecting\n\n        if (inViewMatch || notInViewMatch) list.push(index)\n        return list\n      },\n      []\n    )\n  }\n\n  function get(inView: boolean = true): number[] {\n    if (inView && inViewCache) return inViewCache\n    if (!inView && notInViewCache) return notInViewCache\n\n    const slideIndexes = createInViewList(inView)\n\n    if (inView) inViewCache = slideIndexes\n    if (!inView) notInViewCache = slideIndexes\n\n    return slideIndexes\n  }\n\n  const self: SlidesInViewType = {\n    init,\n    destroy,\n    get\n  }\n\n  return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n  slideSizes: number[]\n  slideSizesWithGaps: number[]\n  startGap: number\n  endGap: number\n}\n\nexport function SlideSizes(\n  axis: AxisType,\n  containerRect: NodeRectType,\n  slideRects: NodeRectType[],\n  slides: HTMLElement[],\n  readEdgeGap: boolean,\n  ownerWindow: WindowType\n): SlideSizesType {\n  const { measureSize, startEdge, endEdge } = axis\n  const withEdgeGap = slideRects[0] && readEdgeGap\n  const startGap = measureStartGap()\n  const endGap = measureEndGap()\n  const slideSizes = slideRects.map(measureSize)\n  const slideSizesWithGaps = measureWithGaps()\n\n  function measureStartGap(): number {\n    if (!withEdgeGap) return 0\n    const slideRect = slideRects[0]\n    return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n  }\n\n  function measureEndGap(): number {\n    if (!withEdgeGap) return 0\n    const style = ownerWindow.getComputedStyle(arrayLast(slides))\n    return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n  }\n\n  function measureWithGaps(): number[] {\n    return slideRects\n      .map((rect, index, rects) => {\n        const isFirst = !index\n        const isLast = arrayIsLastIndex(rects, index)\n        if (isFirst) return slideSizes[index] + startGap\n        if (isLast) return slideSizes[index] + endGap\n        return rects[index + 1][startEdge] - rect[startEdge]\n      })\n      .map(mathAbs)\n  }\n\n  const self: SlideSizesType = {\n    slideSizes,\n    slideSizesWithGaps,\n    startGap,\n    endGap\n  }\n  return self\n}\n","import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport {\n  arrayKeys,\n  arrayLast,\n  arrayLastIndex,\n  isNumber,\n  mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n  groupSlides: <Type>(array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n  axis: AxisType,\n  viewSize: number,\n  slidesToScroll: SlidesToScrollOptionType,\n  loop: boolean,\n  containerRect: NodeRectType,\n  slideRects: NodeRectType[],\n  startGap: number,\n  endGap: number,\n  pixelTolerance: number\n): SlidesToScrollType {\n  const { startEdge, endEdge, direction } = axis\n  const groupByNumber = isNumber(slidesToScroll)\n\n  function byNumber<Type>(array: Type[], groupSize: number): Type[][] {\n    return arrayKeys(array)\n      .filter((i) => i % groupSize === 0)\n      .map((i) => array.slice(i, i + groupSize))\n  }\n\n  function bySize<Type>(array: Type[]): Type[][] {\n    if (!array.length) return []\n\n    return arrayKeys(array)\n      .reduce((groups: number[], rectB, index) => {\n        const rectA = arrayLast(groups) || 0\n        const isFirst = rectA === 0\n        const isLast = rectB === arrayLastIndex(array)\n\n        const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n        const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n        const gapA = !loop && isFirst ? direction(startGap) : 0\n        const gapB = !loop && isLast ? direction(endGap) : 0\n        const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n        if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB)\n        if (isLast) groups.push(array.length)\n        return groups\n      }, [])\n      .map((currentSize, index, groups) => {\n        const previousSize = Math.max(groups[index - 1] || 0)\n        return array.slice(previousSize, currentSize)\n      })\n  }\n\n  function groupSlides<Type>(array: Type[]): Type[][] {\n    return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n  }\n\n  const self: SlidesToScrollType = {\n    groupSlides\n  }\n  return self\n}\n","import { Alignment } from './Alignment'\nimport {\n  Animations,\n  AnimationsType,\n  AnimationsUpdateType,\n  AnimationsRenderType\n} from './Animations'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\n\nexport type EngineType = {\n  ownerDocument: Document\n  ownerWindow: WindowType\n  eventHandler: EventHandlerType\n  axis: AxisType\n  animation: AnimationsType\n  scrollBounds: ScrollBoundsType\n  scrollLooper: ScrollLooperType\n  scrollProgress: ScrollProgressType\n  index: CounterType\n  indexPrevious: CounterType\n  limit: LimitType\n  location: Vector1DType\n  offsetLocation: Vector1DType\n  previousLocation: Vector1DType\n  options: OptionsType\n  percentOfView: PercentOfViewType\n  scrollBody: ScrollBodyType\n  dragHandler: DragHandlerType\n  eventStore: EventStoreType\n  slideLooper: SlideLooperType\n  slidesInView: SlidesInViewType\n  slidesToScroll: SlidesToScrollType\n  target: Vector1DType\n  translate: TranslateType\n  resizeHandler: ResizeHandlerType\n  slidesHandler: SlidesHandlerType\n  scrollTo: ScrollToType\n  scrollTarget: ScrollTargetType\n  scrollSnapList: number[]\n  scrollSnaps: number[]\n  slideIndexes: number[]\n  slideFocus: SlideFocusType\n  slideRegistry: SlideRegistryType['slideRegistry']\n  containerRect: NodeRectType\n  slideRects: NodeRectType[]\n}\n\nexport function Engine(\n  root: HTMLElement,\n  container: HTMLElement,\n  slides: HTMLElement[],\n  ownerDocument: Document,\n  ownerWindow: WindowType,\n  options: OptionsType,\n  eventHandler: EventHandlerType\n): EngineType {\n  // Options\n  const {\n    align,\n    axis: scrollAxis,\n    direction,\n    startIndex,\n    loop,\n    duration,\n    dragFree,\n    dragThreshold,\n    inViewThreshold,\n    slidesToScroll: groupSlides,\n    skipSnaps,\n    containScroll,\n    watchResize,\n    watchSlides,\n    watchDrag,\n    watchFocus\n  } = options\n\n  // Measurements\n  const pixelTolerance = 2\n  const nodeRects = NodeRects()\n  const containerRect = nodeRects.measure(container)\n  const slideRects = slides.map(nodeRects.measure)\n  const axis = Axis(scrollAxis, direction)\n  const viewSize = axis.measureSize(containerRect)\n  const percentOfView = PercentOfView(viewSize)\n  const alignment = Alignment(align, viewSize)\n  const containSnaps = !loop && !!containScroll\n  const readEdgeGap = loop || !!containScroll\n  const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n    axis,\n    containerRect,\n    slideRects,\n    slides,\n    readEdgeGap,\n    ownerWindow\n  )\n  const slidesToScroll = SlidesToScroll(\n    axis,\n    viewSize,\n    groupSlides,\n    loop,\n    containerRect,\n    slideRects,\n    startGap,\n    endGap,\n    pixelTolerance\n  )\n  const { snaps, snapsAligned } = ScrollSnaps(\n    axis,\n    alignment,\n    containerRect,\n    slideRects,\n    slidesToScroll\n  )\n  const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n  const { snapsContained, scrollContainLimit } = ScrollContain(\n    viewSize,\n    contentSize,\n    snapsAligned,\n    containScroll,\n    pixelTolerance\n  )\n  const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n  const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n  // Indexes\n  const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n  const indexPrevious = index.clone()\n  const slideIndexes = arrayKeys(slides)\n\n  // Animation\n  const update: AnimationsUpdateType = ({\n    dragHandler,\n    scrollBody,\n    scrollBounds,\n    options: { loop }\n  }) => {\n    if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n    scrollBody.seek()\n  }\n\n  const render: AnimationsRenderType = (\n    {\n      scrollBody,\n      translate,\n      location,\n      offsetLocation,\n      previousLocation,\n      scrollLooper,\n      slideLooper,\n      dragHandler,\n      animation,\n      eventHandler,\n      scrollBounds,\n      options: { loop }\n    },\n    alpha\n  ) => {\n    const shouldSettle = scrollBody.settled()\n    const withinBounds = !scrollBounds.shouldConstrain()\n    const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds\n    const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown()\n\n    if (hasSettledAndIdle) animation.stop()\n\n    const interpolatedLocation =\n      location.get() * alpha + previousLocation.get() * (1 - alpha)\n\n    offsetLocation.set(interpolatedLocation)\n\n    if (loop) {\n      scrollLooper.loop(scrollBody.direction())\n      slideLooper.loop()\n    }\n\n    translate.to(offsetLocation.get())\n\n    if (hasSettledAndIdle) eventHandler.emit('settle')\n    if (!hasSettled) eventHandler.emit('scroll')\n  }\n\n  const animation = Animations(\n    ownerDocument,\n    ownerWindow,\n    () => update(engine),\n    (alpha: number) => render(engine, alpha)\n  )\n\n  // Shared\n  const friction = 0.68\n  const startLocation = scrollSnaps[index.get()]\n  const location = Vector1D(startLocation)\n  const previousLocation = Vector1D(startLocation)\n  const offsetLocation = Vector1D(startLocation)\n  const target = Vector1D(startLocation)\n  const scrollBody = ScrollBody(\n    location,\n    offsetLocation,\n    previousLocation,\n    target,\n    duration,\n    friction\n  )\n  const scrollTarget = ScrollTarget(\n    loop,\n    scrollSnaps,\n    contentSize,\n    limit,\n    target\n  )\n  const scrollTo = ScrollTo(\n    animation,\n    index,\n    indexPrevious,\n    scrollBody,\n    scrollTarget,\n    target,\n    eventHandler\n  )\n  const scrollProgress = ScrollProgress(limit)\n  const eventStore = EventStore()\n  const slidesInView = SlidesInView(\n    container,\n    slides,\n    eventHandler,\n    inViewThreshold\n  )\n  const { slideRegistry } = SlideRegistry(\n    containSnaps,\n    containScroll,\n    scrollSnaps,\n    scrollContainLimit,\n    slidesToScroll,\n    slideIndexes\n  )\n  const slideFocus = SlideFocus(\n    root,\n    slides,\n    slideRegistry,\n    scrollTo,\n    scrollBody,\n    eventStore,\n    eventHandler,\n    watchFocus\n  )\n\n  // Engine\n  const engine: EngineType = {\n    ownerDocument,\n    ownerWindow,\n    eventHandler,\n    containerRect,\n    slideRects,\n    animation,\n    axis,\n    dragHandler: DragHandler(\n      axis,\n      root,\n      ownerDocument,\n      ownerWindow,\n      target,\n      DragTracker(axis, ownerWindow),\n      location,\n      animation,\n      scrollTo,\n      scrollBody,\n      scrollTarget,\n      index,\n      eventHandler,\n      percentOfView,\n      dragFree,\n      dragThreshold,\n      skipSnaps,\n      friction,\n      watchDrag\n    ),\n    eventStore,\n    percentOfView,\n    index,\n    indexPrevious,\n    limit,\n    location,\n    offsetLocation,\n    previousLocation,\n    options,\n    resizeHandler: ResizeHandler(\n      container,\n      eventHandler,\n      ownerWindow,\n      slides,\n      axis,\n      watchResize,\n      nodeRects\n    ),\n    scrollBody,\n    scrollBounds: ScrollBounds(\n      limit,\n      offsetLocation,\n      target,\n      scrollBody,\n      percentOfView\n    ),\n    scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n      location,\n      offsetLocation,\n      previousLocation,\n      target\n    ]),\n    scrollProgress,\n    scrollSnapList: scrollSnaps.map(scrollProgress.get),\n    scrollSnaps,\n    scrollTarget,\n    scrollTo,\n    slideLooper: SlideLooper(\n      axis,\n      viewSize,\n      contentSize,\n      slideSizes,\n      slideSizesWithGaps,\n      snaps,\n      scrollSnaps,\n      offsetLocation,\n      slides\n    ),\n    slideFocus,\n    slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n    slidesInView,\n    slideIndexes,\n    slideRegistry,\n    slidesToScroll,\n    target,\n    translate: Translate(axis, container)\n  }\n\n  return engine\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n  init: 'init'\n  pointerDown: 'pointerDown'\n  pointerUp: 'pointerUp'\n  slidesChanged: 'slidesChanged'\n  slidesInView: 'slidesInView'\n  scroll: 'scroll'\n  select: 'select'\n  settle: 'settle'\n  destroy: 'destroy'\n  reInit: 'reInit'\n  resize: 'resize'\n  slideFocusStart: 'slideFocusStart'\n  slideFocus: 'slideFocus'\n}\n\nexport type EventHandlerType = {\n  init: (emblaApi: EmblaCarouselType) => void\n  emit: (evt: EmblaEventType) => EventHandlerType\n  on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n  off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n  clear: () => void\n}\n\nexport function EventHandler(): EventHandlerType {\n  let listeners: ListenersType = {}\n  let api: EmblaCarouselType\n\n  function init(emblaApi: EmblaCarouselType): void {\n    api = emblaApi\n  }\n\n  function getListeners(evt: EmblaEventType): CallbackType[] {\n    return listeners[evt] || []\n  }\n\n  function emit(evt: EmblaEventType): EventHandlerType {\n    getListeners(evt).forEach((e) => e(api, evt))\n    return self\n  }\n\n  function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n    listeners[evt] = getListeners(evt).concat([cb])\n    return self\n  }\n\n  function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n    listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n    return self\n  }\n\n  function clear(): void {\n    listeners = {}\n  }\n\n  const self: EventHandlerType = {\n    init,\n    emit,\n    off,\n    on,\n    clear\n  }\n  return self\n}\n","import { AlignmentOptionType } from './Alignment'\nimport { AxisDirectionOptionType, AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\nimport { FocusHandlerOptionType } from './SlideFocus'\n\nexport type LooseOptionsType = {\n  [key: string]: unknown\n}\n\nexport type CreateOptionsType<Type extends LooseOptionsType> = Type & {\n  active: boolean\n  breakpoints: {\n    [key: string]: Omit<Partial<CreateOptionsType<Type>>, 'breakpoints'>\n  }\n}\n\nexport type OptionsType = CreateOptionsType<{\n  align: AlignmentOptionType\n  axis: AxisOptionType\n  container: string | HTMLElement | null\n  slides: string | HTMLElement[] | NodeListOf<HTMLElement> | null\n  containScroll: ScrollContainOptionType\n  direction: AxisDirectionOptionType\n  slidesToScroll: SlidesToScrollOptionType\n  dragFree: boolean\n  dragThreshold: number\n  inViewThreshold: SlidesInViewOptionsType\n  loop: boolean\n  skipSnaps: boolean\n  duration: number\n  startIndex: number\n  watchDrag: DragHandlerOptionType\n  watchResize: ResizeHandlerOptionType\n  watchSlides: SlidesHandlerOptionType\n  watchFocus: FocusHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n  align: 'center',\n  axis: 'x',\n  container: null,\n  slides: null,\n  containScroll: 'trimSnaps',\n  direction: 'ltr',\n  slidesToScroll: 1,\n  inViewThreshold: 0,\n  breakpoints: {},\n  dragFree: false,\n  dragThreshold: 10,\n  loop: false,\n  skipSnaps: false,\n  duration: 25,\n  startIndex: 0,\n  active: true,\n  watchDrag: true,\n  watchResize: true,\n  watchSlides: true,\n  watchFocus: true\n}\n\nexport type EmblaOptionsType = Partial<OptionsType>\n","import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial<CreateOptionsType<LooseOptionsType>>\n\nexport type OptionsHandlerType = {\n  mergeOptions: <TypeA extends OptionsType, TypeB extends OptionsType>(\n    optionsA: TypeA,\n    optionsB?: TypeB\n  ) => TypeA\n  optionsAtMedia: <Type extends OptionsType>(options: Type) => Type\n  optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n  function mergeOptions<TypeA extends OptionsType, TypeB extends OptionsType>(\n    optionsA: TypeA,\n    optionsB?: TypeB\n  ): TypeA {\n    return <TypeA>objectsMergeDeep(optionsA, optionsB || {})\n  }\n\n  function optionsAtMedia<Type extends OptionsType>(options: Type): Type {\n    const optionsAtMedia = options.breakpoints || {}\n    const matchedMediaOptions = objectKeys(optionsAtMedia)\n      .filter((media) => ownerWindow.matchMedia(media).matches)\n      .map((media) => optionsAtMedia[media])\n      .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n    return mergeOptions(options, matchedMediaOptions)\n  }\n\n  function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n    return optionsList\n      .map((options) => objectKeys(options.breakpoints || {}))\n      .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n      .map(ownerWindow.matchMedia)\n  }\n\n  const self: OptionsHandlerType = {\n    mergeOptions,\n    optionsAtMedia,\n    optionsMediaQueries\n  }\n  return self\n}\n","import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n  init: (\n    emblaApi: EmblaCarouselType,\n    plugins: EmblaPluginType[]\n  ) => EmblaPluginsType\n  destroy: () => void\n}\n\nexport function PluginsHandler(\n  optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n  let activePlugins: EmblaPluginType[] = []\n\n  function init(\n    emblaApi: EmblaCarouselType,\n    plugins: EmblaPluginType[]\n  ): EmblaPluginsType {\n    activePlugins = plugins.filter(\n      ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n    )\n    activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n    return plugins.reduce(\n      (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n      {}\n    )\n  }\n\n  function destroy(): void {\n    activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n  }\n\n  const self: PluginsHandlerType = {\n    init,\n    destroy\n  }\n  return self\n}\n","import { Engine, EngineType } from './Engine'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n  canScrollNext: () => boolean\n  canScrollPrev: () => boolean\n  containerNode: () => HTMLElement\n  internalEngine: () => EngineType\n  destroy: () => void\n  off: EventHandlerType['off']\n  on: EventHandlerType['on']\n  emit: EventHandlerType['emit']\n  plugins: () => EmblaPluginsType\n  previousScrollSnap: () => number\n  reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n  rootNode: () => HTMLElement\n  scrollNext: (jump?: boolean) => void\n  scrollPrev: (jump?: boolean) => void\n  scrollProgress: () => number\n  scrollSnapList: () => number[]\n  scrollTo: (index: number, jump?: boolean) => void\n  selectedScrollSnap: () => number\n  slideNodes: () => HTMLElement[]\n  slidesInView: () => number[]\n  slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n  root: HTMLElement,\n  userOptions?: EmblaOptionsType,\n  userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n  const ownerDocument = root.ownerDocument\n  const ownerWindow = <WindowType>ownerDocument.defaultView\n  const optionsHandler = OptionsHandler(ownerWindow)\n  const pluginsHandler = PluginsHandler(optionsHandler)\n  const mediaHandlers = EventStore()\n  const eventHandler = EventHandler()\n  const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n  const { on, off, emit } = eventHandler\n  const reInit = reActivate\n\n  let destroyed = false\n  let engine: EngineType\n  let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n  let options = mergeOptions(optionsBase)\n  let pluginList: EmblaPluginType[] = []\n  let pluginApis: EmblaPluginsType\n\n  let container: HTMLElement\n  let slides: HTMLElement[]\n\n  function storeElements(): void {\n    const { container: userContainer, slides: userSlides } = options\n\n    const customContainer = isString(userContainer)\n      ? root.querySelector(userContainer)\n      : userContainer\n    container = <HTMLElement>(customContainer || root.children[0])\n\n    const customSlides = isString(userSlides)\n      ? container.querySelectorAll(userSlides)\n      : userSlides\n    slides = <HTMLElement[]>[].slice.call(customSlides || container.children)\n  }\n\n  function createEngine(options: OptionsType): EngineType {\n    const engine = Engine(\n      root,\n      container,\n      slides,\n      ownerDocument,\n      ownerWindow,\n      options,\n      eventHandler\n    )\n\n    if (options.loop && !engine.slideLooper.canLoop()) {\n      const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n      return createEngine(optionsWithoutLoop)\n    }\n    return engine\n  }\n\n  function activate(\n    withOptions?: EmblaOptionsType,\n    withPlugins?: EmblaPluginType[]\n  ): void {\n    if (destroyed) return\n\n    optionsBase = mergeOptions(optionsBase, withOptions)\n    options = optionsAtMedia(optionsBase)\n    pluginList = withPlugins || pluginList\n\n    storeElements()\n\n    engine = createEngine(options)\n\n    optionsMediaQueries([\n      optionsBase,\n      ...pluginList.map(({ options }) => options)\n    ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n    if (!options.active) return\n\n    engine.translate.to(engine.location.get())\n    engine.animation.init()\n    engine.slidesInView.init()\n    engine.slideFocus.init(self)\n    engine.eventHandler.init(self)\n    engine.resizeHandler.init(self)\n    engine.slidesHandler.init(self)\n\n    if (engine.options.loop) engine.slideLooper.loop()\n    if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n    pluginApis = pluginsHandler.init(self, pluginList)\n  }\n\n  function reActivate(\n    withOptions?: EmblaOptionsType,\n    withPlugins?: EmblaPluginType[]\n  ): void {\n    const startIndex = selectedScrollSnap()\n    deActivate()\n    activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n    eventHandler.emit('reInit')\n  }\n\n  function deActivate(): void {\n    engine.dragHandler.destroy()\n    engine.eventStore.clear()\n    engine.translate.clear()\n    engine.slideLooper.clear()\n    engine.resizeHandler.destroy()\n    engine.slidesHandler.destroy()\n    engine.slidesInView.destroy()\n    engine.animation.destroy()\n    pluginsHandler.destroy()\n    mediaHandlers.clear()\n  }\n\n  function destroy(): void {\n    if (destroyed) return\n    destroyed = true\n    mediaHandlers.clear()\n    deActivate()\n    eventHandler.emit('destroy')\n    eventHandler.clear()\n  }\n\n  function scrollTo(index: number, jump?: boolean, direction?: number): void {\n    if (!options.active || destroyed) return\n    engine.scrollBody\n      .useBaseFriction()\n      .useDuration(jump === true ? 0 : options.duration)\n    engine.scrollTo.index(index, direction || 0)\n  }\n\n  function scrollNext(jump?: boolean): void {\n    const next = engine.index.add(1).get()\n    scrollTo(next, jump, -1)\n  }\n\n  function scrollPrev(jump?: boolean): void {\n    const prev = engine.index.add(-1).get()\n    scrollTo(prev, jump, 1)\n  }\n\n  function canScrollNext(): boolean {\n    const next = engine.index.add(1).get()\n    return next !== selectedScrollSnap()\n  }\n\n  function canScrollPrev(): boolean {\n    const prev = engine.index.add(-1).get()\n    return prev !== selectedScrollSnap()\n  }\n\n  function scrollSnapList(): number[] {\n    return engine.scrollSnapList\n  }\n\n  function scrollProgress(): number {\n    return engine.scrollProgress.get(engine.offsetLocation.get())\n  }\n\n  function selectedScrollSnap(): number {\n    return engine.index.get()\n  }\n\n  function previousScrollSnap(): number {\n    return engine.indexPrevious.get()\n  }\n\n  function slidesInView(): number[] {\n    return engine.slidesInView.get()\n  }\n\n  function slidesNotInView(): number[] {\n    return engine.slidesInView.get(false)\n  }\n\n  function plugins(): EmblaPluginsType {\n    return pluginApis\n  }\n\n  function internalEngine(): EngineType {\n    return engine\n  }\n\n  function rootNode(): HTMLElement {\n    return root\n  }\n\n  function containerNode(): HTMLElement {\n    return container\n  }\n\n  function slideNodes(): HTMLElement[] {\n    return slides\n  }\n\n  const self: EmblaCarouselType = {\n    canScrollNext,\n    canScrollPrev,\n    containerNode,\n    internalEngine,\n    destroy,\n    off,\n    on,\n    emit,\n    plugins,\n    previousScrollSnap,\n    reInit,\n    rootNode,\n    scrollNext,\n    scrollPrev,\n    scrollProgress,\n    scrollSnapList,\n    scrollTo,\n    selectedScrollSnap,\n    slideNodes,\n    slidesInView,\n    slidesNotInView\n  }\n\n  activate(userOptions, userPlugins)\n  setTimeout(() => eventHandler.emit('init'), 0)\n  return self\n}\n\ndeclare namespace EmblaCarousel {\n  let globalOptions: EmblaOptionsType | undefined\n}\n\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n","import {\n  Ref,\n  MaybeRef,\n  isRef,\n  watch,\n  onMounted,\n  onBeforeUnmount,\n  shallowRef\n} from 'vue'\nimport {\n  areOptionsEqual,\n  arePluginsEqual,\n  canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n  EmblaCarouselType,\n  EmblaOptionsType,\n  EmblaPluginType\n} from 'embla-carousel'\n\nexport type EmblaCarouselVueType = [\n  Ref<HTMLElement | undefined>,\n  Ref<EmblaCarouselType | undefined>\n]\n\nfunction emblaCarouselVue(\n  options: MaybeRef<EmblaOptionsType> = {},\n  plugins: MaybeRef<EmblaPluginType[]> = []\n): EmblaCarouselVueType {\n  const isRefOptions = isRef(options)\n  const isRefPlugins = isRef(plugins)\n\n  let storedOptions = isRefOptions ? options.value : options\n  let storedPlugins = isRefPlugins ? plugins.value : plugins\n\n  const emblaNode = shallowRef<HTMLElement>()\n  const emblaApi = shallowRef<EmblaCarouselType>()\n\n  function reInit() {\n    if (!emblaApi.value) return\n    emblaApi.value.reInit(storedOptions, storedPlugins)\n  }\n\n  onMounted(() => {\n    if (!canUseDOM() || !emblaNode.value) return\n    EmblaCarousel.globalOptions = emblaCarouselVue.globalOptions\n    emblaApi.value = EmblaCarousel(\n      emblaNode.value,\n      storedOptions,\n      storedPlugins\n    )\n  })\n\n  onBeforeUnmount(() => {\n    if (emblaApi.value) emblaApi.value.destroy()\n  })\n\n  if (isRefOptions) {\n    watch(options, (newOptions) => {\n      if (areOptionsEqual(storedOptions, newOptions)) return\n      storedOptions = newOptions\n      reInit()\n    })\n  }\n\n  if (isRefPlugins) {\n    watch(plugins, (newPlugins) => {\n      if (arePluginsEqual(storedPlugins, newPlugins)) return\n      storedPlugins = newPlugins\n      reInit()\n    })\n  }\n\n  return [emblaNode, emblaApi]\n}\n\ndeclare namespace emblaCarouselVue {\n  let globalOptions: EmblaOptionsType | undefined\n}\n\nemblaCarouselVue.globalOptions = undefined\n\nexport default emblaCarouselVue\n","/*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n// @function extend(dest: Object, src?: Object): Object\r\n// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\nexport function extend(dest) {\r\n\tvar i, j, len, src;\r\n\r\n\tfor (j = 1, len = arguments.length; j < len; j++) {\r\n\t\tsrc = arguments[j];\r\n\t\tfor (i in src) {\r\n\t\t\tdest[i] = src[i];\r\n\t\t}\r\n\t}\r\n\treturn dest;\r\n}\r\n\r\n// @function create(proto: Object, properties?: Object): Object\r\n// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\nexport var create = Object.create || (function () {\r\n\tfunction F() {}\r\n\treturn function (proto) {\r\n\t\tF.prototype = proto;\r\n\t\treturn new F();\r\n\t};\r\n})();\r\n\r\n// @function bind(fn: Function, …): Function\r\n// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n// Has a `L.bind()` shortcut.\r\nexport function bind(fn, obj) {\r\n\tvar slice = Array.prototype.slice;\r\n\r\n\tif (fn.bind) {\r\n\t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n\t}\r\n\r\n\tvar args = slice.call(arguments, 2);\r\n\r\n\treturn function () {\r\n\t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n\t};\r\n}\r\n\r\n// @property lastId: Number\r\n// Last unique ID used by [`stamp()`](#util-stamp)\r\nexport var lastId = 0;\r\n\r\n// @function stamp(obj: Object): Number\r\n// Returns the unique ID of an object, assigning it one if it doesn't have it.\r\nexport function stamp(obj) {\r\n\tif (!('_leaflet_id' in obj)) {\r\n\t\tobj['_leaflet_id'] = ++lastId;\r\n\t}\r\n\treturn obj._leaflet_id;\r\n}\r\n\r\n// @function throttle(fn: Function, time: Number, context: Object): Function\r\n// Returns a function which executes function `fn` with the given scope `context`\r\n// (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n// `fn` will be called no more than one time per given amount of `time`. The arguments\r\n// received by the bound function will be any arguments passed when binding the\r\n// function, followed by any arguments passed when invoking the bound function.\r\n// Has an `L.throttle` shortcut.\r\nexport function throttle(fn, time, context) {\r\n\tvar lock, args, wrapperFn, later;\r\n\r\n\tlater = function () {\r\n\t\t// reset lock and call if queued\r\n\t\tlock = false;\r\n\t\tif (args) {\r\n\t\t\twrapperFn.apply(context, args);\r\n\t\t\targs = false;\r\n\t\t}\r\n\t};\r\n\r\n\twrapperFn = function () {\r\n\t\tif (lock) {\r\n\t\t\t// called too soon, queue to call later\r\n\t\t\targs = arguments;\r\n\r\n\t\t} else {\r\n\t\t\t// call and lock until later\r\n\t\t\tfn.apply(context, arguments);\r\n\t\t\tsetTimeout(later, time);\r\n\t\t\tlock = true;\r\n\t\t}\r\n\t};\r\n\r\n\treturn wrapperFn;\r\n}\r\n\r\n// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n// Returns the number `num` modulo `range` in such a way so it lies within\r\n// `range[0]` and `range[1]`. The returned value will be always smaller than\r\n// `range[1]` unless `includeMax` is set to `true`.\r\nexport function wrapNum(x, range, includeMax) {\r\n\tvar max = range[1],\r\n\t    min = range[0],\r\n\t    d = max - min;\r\n\treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n}\r\n\r\n// @function falseFn(): Function\r\n// Returns a function which always returns `false`.\r\nexport function falseFn() { return false; }\r\n\r\n// @function formatNum(num: Number, precision?: Number|false): Number\r\n// Returns the number `num` rounded with specified `precision`.\r\n// The default `precision` value is 6 decimal places.\r\n// `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\nexport function formatNum(num, precision) {\r\n\tif (precision === false) { return num; }\r\n\tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n\treturn Math.round(num * pow) / pow;\r\n}\r\n\r\n// @function trim(str: String): String\r\n// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\nexport function trim(str) {\r\n\treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n}\r\n\r\n// @function splitWords(str: String): String[]\r\n// Trims and splits the string on whitespace and returns the array of parts.\r\nexport function splitWords(str) {\r\n\treturn trim(str).split(/\\s+/);\r\n}\r\n\r\n// @function setOptions(obj: Object, options: Object): Object\r\n// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\nexport function setOptions(obj, options) {\r\n\tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n\t\tobj.options = obj.options ? create(obj.options) : {};\r\n\t}\r\n\tfor (var i in options) {\r\n\t\tobj.options[i] = options[i];\r\n\t}\r\n\treturn obj.options;\r\n}\r\n\r\n// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n// Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n// be appended at the end. If `uppercase` is `true`, the parameter names will\r\n// be uppercased (e.g. `'?A=foo&B=bar'`)\r\nexport function getParamString(obj, existingUrl, uppercase) {\r\n\tvar params = [];\r\n\tfor (var i in obj) {\r\n\t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n\t}\r\n\treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n}\r\n\r\nvar templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n// @function template(str: String, data: Object): String\r\n// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n// `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n// data values — they will be evaluated passing `data` as an argument.\r\nexport function template(str, data) {\r\n\treturn str.replace(templateRe, function (str, key) {\r\n\t\tvar value = data[key];\r\n\r\n\t\tif (value === undefined) {\r\n\t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n\t\t} else if (typeof value === 'function') {\r\n\t\t\tvalue = value(data);\r\n\t\t}\r\n\t\treturn value;\r\n\t});\r\n}\r\n\r\n// @function isArray(obj): Boolean\r\n// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\nexport var isArray = Array.isArray || function (obj) {\r\n\treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n};\r\n\r\n// @function indexOf(array: Array, el: Object): Number\r\n// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\nexport function indexOf(array, el) {\r\n\tfor (var i = 0; i < array.length; i++) {\r\n\t\tif (array[i] === el) { return i; }\r\n\t}\r\n\treturn -1;\r\n}\r\n\r\n// @property emptyImageUrl: String\r\n// Data URI string containing a base64-encoded empty GIF image.\r\n// Used as a hack to free memory from unused images on WebKit-powered\r\n// mobile devices (by setting image `src` to this string).\r\nexport var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\nfunction getPrefixed(name) {\r\n\treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n}\r\n\r\nvar lastTime = 0;\r\n\r\n// fallback for IE 7-8\r\nfunction timeoutDefer(fn) {\r\n\tvar time = +new Date(),\r\n\t    timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n\tlastTime = time + timeToCall;\r\n\treturn window.setTimeout(fn, timeToCall);\r\n}\r\n\r\nexport var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\nexport var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n\t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n// Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n// `context` if given. When `immediate` is set, `fn` is called immediately if\r\n// the browser doesn't have native support for\r\n// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n// otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\nexport function requestAnimFrame(fn, context, immediate) {\r\n\tif (immediate && requestFn === timeoutDefer) {\r\n\t\tfn.call(context);\r\n\t} else {\r\n\t\treturn requestFn.call(window, bind(fn, context));\r\n\t}\r\n}\r\n\r\n// @function cancelAnimFrame(id: Number): undefined\r\n// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\nexport function cancelAnimFrame(id) {\r\n\tif (id) {\r\n\t\tcancelFn.call(window, id);\r\n\t}\r\n}\r\n","import * as Util from './Util';\r\n\r\n// @class Class\r\n// @aka L.Class\r\n\r\n// @section\r\n// @uninheritable\r\n\r\n// Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\nexport function Class() {}\r\n\r\nClass.extend = function (props) {\r\n\r\n\t// @function extend(props: Object): Function\r\n\t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n\t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n\tvar NewClass = function () {\r\n\r\n\t\tUtil.setOptions(this);\r\n\r\n\t\t// call the constructor\r\n\t\tif (this.initialize) {\r\n\t\t\tthis.initialize.apply(this, arguments);\r\n\t\t}\r\n\r\n\t\t// call all constructor hooks\r\n\t\tthis.callInitHooks();\r\n\t};\r\n\r\n\tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n\tvar proto = Util.create(parentProto);\r\n\tproto.constructor = NewClass;\r\n\r\n\tNewClass.prototype = proto;\r\n\r\n\t// inherit parent's statics\r\n\tfor (var i in this) {\r\n\t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n\t\t\tNewClass[i] = this[i];\r\n\t\t}\r\n\t}\r\n\r\n\t// mix static properties into the class\r\n\tif (props.statics) {\r\n\t\tUtil.extend(NewClass, props.statics);\r\n\t}\r\n\r\n\t// mix includes into the prototype\r\n\tif (props.includes) {\r\n\t\tcheckDeprecatedMixinEvents(props.includes);\r\n\t\tUtil.extend.apply(null, [proto].concat(props.includes));\r\n\t}\r\n\r\n\t// mix given properties into the prototype\r\n\tUtil.extend(proto, props);\r\n\tdelete proto.statics;\r\n\tdelete proto.includes;\r\n\r\n\t// merge options\r\n\tif (proto.options) {\r\n\t\tproto.options = parentProto.options ? Util.create(parentProto.options) : {};\r\n\t\tUtil.extend(proto.options, props.options);\r\n\t}\r\n\r\n\tproto._initHooks = [];\r\n\r\n\t// add method for calling all hooks\r\n\tproto.callInitHooks = function () {\r\n\r\n\t\tif (this._initHooksCalled) { return; }\r\n\r\n\t\tif (parentProto.callInitHooks) {\r\n\t\t\tparentProto.callInitHooks.call(this);\r\n\t\t}\r\n\r\n\t\tthis._initHooksCalled = true;\r\n\r\n\t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n\t\t\tproto._initHooks[i].call(this);\r\n\t\t}\r\n\t};\r\n\r\n\treturn NewClass;\r\n};\r\n\r\n\r\n// @function include(properties: Object): this\r\n// [Includes a mixin](#class-includes) into the current class.\r\nClass.include = function (props) {\r\n\tvar parentOptions = this.prototype.options;\r\n\tUtil.extend(this.prototype, props);\r\n\tif (props.options) {\r\n\t\tthis.prototype.options = parentOptions;\r\n\t\tthis.mergeOptions(props.options);\r\n\t}\r\n\treturn this;\r\n};\r\n\r\n// @function mergeOptions(options: Object): this\r\n// [Merges `options`](#class-options) into the defaults of the class.\r\nClass.mergeOptions = function (options) {\r\n\tUtil.extend(this.prototype.options, options);\r\n\treturn this;\r\n};\r\n\r\n// @function addInitHook(fn: Function): this\r\n// Adds a [constructor hook](#class-constructor-hooks) to the class.\r\nClass.addInitHook = function (fn) { // (Function) || (String, args...)\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n\tvar init = typeof fn === 'function' ? fn : function () {\r\n\t\tthis[fn].apply(this, args);\r\n\t};\r\n\r\n\tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n\tthis.prototype._initHooks.push(init);\r\n\treturn this;\r\n};\r\n\r\nfunction checkDeprecatedMixinEvents(includes) {\r\n\t/* global L: true */\r\n\tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n\tincludes = Util.isArray(includes) ? includes : [includes];\r\n\r\n\tfor (var i = 0; i < includes.length; i++) {\r\n\t\tif (includes[i] === L.Mixin.Events) {\r\n\t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n\t\t\t\t'this property will be removed in future releases, ' +\r\n\t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n\t\t}\r\n\t}\r\n}\r\n","import {Class} from './Class';\r\nimport * as Util from './Util';\r\n\r\n/*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\nexport var Events = {\r\n\t/* @method on(type: String, fn: Function, context?: Object): this\r\n\t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n\t *\r\n\t * @alternative\r\n\t * @method on(eventMap: Object): this\r\n\t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\t */\r\n\ton: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t/* @method off(type: String, fn?: Function, context?: Object): this\r\n\t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n\t *\r\n\t * @alternative\r\n\t * @method off(eventMap: Object): this\r\n\t * Removes a set of type/listener pairs.\r\n\t *\r\n\t * @alternative\r\n\t * @method off: this\r\n\t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n\t */\r\n\toff: function (types, fn, context) {\r\n\r\n\t\tif (!arguments.length) {\r\n\t\t\t// clear all listeners if called without arguments\r\n\t\t\tdelete this._events;\r\n\r\n\t\t} else if (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\tthis._off(type, types[type], fn);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tvar removeAll = arguments.length === 1;\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tif (removeAll) {\r\n\t\t\t\t\tthis._off(types[i]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis._off(types[i], fn, context);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// attach listener (without syntactic sugar now)\r\n\t_on: function (type, fn, context, _once) {\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// check if fn already there\r\n\t\tif (this._listens(type, fn, context) !== false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar newListener = {fn: fn, ctx: context};\r\n\t\tif (_once) {\r\n\t\t\tnewListener.once = true;\r\n\t\t}\r\n\r\n\t\tthis._events = this._events || {};\r\n\t\tthis._events[type] = this._events[type] || [];\r\n\t\tthis._events[type].push(newListener);\r\n\t},\r\n\r\n\t_off: function (type, fn, context) {\r\n\t\tvar listeners,\r\n\t\t    i,\r\n\t\t    len;\r\n\r\n\t\tif (!this._events) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlisteners = this._events[type];\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (arguments.length === 1) { // remove all\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// Set all removed listeners to noop\r\n\t\t\t\t// so they are not called if remove happens in fire\r\n\t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tlisteners[i].fn = Util.falseFn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// clear all listeners for a type if function isn't specified\r\n\t\t\tdelete this._events[type];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// find fn and remove it\r\n\t\tvar index = this._listens(type, fn, context);\r\n\t\tif (index !== false) {\r\n\t\t\tvar listener = listeners[index];\r\n\t\t\tif (this._firingCount) {\r\n\t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n\t\t\t\tlistener.fn = Util.falseFn;\r\n\r\n\t\t\t\t/* copy array in case events are being fired */\r\n\t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n\t\t\t}\r\n\t\t\tlisteners.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n\t// Fires an event of the specified type. You can optionally provide a data\r\n\t// object — the first argument of the listener function will contain its\r\n\t// properties. The event can optionally be propagated to event parents.\r\n\tfire: function (type, data, propagate) {\r\n\t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n\t\tvar event = Util.extend({}, data, {\r\n\t\t\ttype: type,\r\n\t\t\ttarget: this,\r\n\t\t\tsourceTarget: data && data.sourceTarget || this\r\n\t\t});\r\n\r\n\t\tif (this._events) {\r\n\t\t\tvar listeners = this._events[type];\r\n\t\t\tif (listeners) {\r\n\t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n\t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\t\t\tvar l = listeners[i];\r\n\t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n\t\t\t\t\tvar fn = l.fn;\r\n\t\t\t\t\tif (l.once) {\r\n\t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfn.call(l.ctx || this, event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._firingCount--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// propagate the event to parents (set with addEventParent)\r\n\t\t\tthis._propagateEvent(event);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method listens(type: String, propagate?: Boolean): Boolean\r\n\t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n\t// Returns `true` if a particular event type has any listeners attached to it.\r\n\t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n\tlistens: function (type, fn, context, propagate) {\r\n\t\tif (typeof type !== 'string') {\r\n\t\t\tconsole.warn('\"string\" type argument expected');\r\n\t\t}\r\n\r\n\t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n\t\tvar _fn = fn;\r\n\t\tif (typeof fn !== 'function') {\r\n\t\t\tpropagate = !!fn;\r\n\t\t\t_fn = undefined;\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events && this._events[type];\r\n\t\tif (listeners && listeners.length) {\r\n\t\t\tif (this._listens(type, _fn, context) !== false) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (propagate) {\r\n\t\t\t// also check parents for listeners if event propagates\r\n\t\t\tfor (var id in this._eventParents) {\r\n\t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t// returns the index (number) or false\r\n\t_listens: function (type, fn, context) {\r\n\t\tif (!this._events) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar listeners = this._events[type] || [];\r\n\t\tif (!fn) {\r\n\t\t\treturn !!listeners.length;\r\n\t\t}\r\n\r\n\t\tif (context === this) {\r\n\t\t\t// Less memory footprint.\r\n\t\t\tcontext = undefined;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n\t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\r\n\t},\r\n\r\n\t// @method once(…): this\r\n\t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n\tonce: function (types, fn, context) {\r\n\r\n\t\t// types can be a map of types/handlers\r\n\t\tif (typeof types === 'object') {\r\n\t\t\tfor (var type in types) {\r\n\t\t\t\t// we don't process space-separated events here for performance;\r\n\t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n\t\t\t\tthis._on(type, types[type], fn, true);\r\n\t\t\t}\r\n\r\n\t\t} else {\r\n\t\t\t// types can be a string of space-separated words\r\n\t\t\ttypes = Util.splitWords(types);\r\n\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tthis._on(types[i], fn, context, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addEventParent(obj: Evented): this\r\n\t// Adds an event parent - an `Evented` that will receive propagated events\r\n\taddEventParent: function (obj) {\r\n\t\tthis._eventParents = this._eventParents || {};\r\n\t\tthis._eventParents[Util.stamp(obj)] = obj;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeEventParent(obj: Evented): this\r\n\t// Removes an event parent, so it will stop receiving propagated events\r\n\tremoveEventParent: function (obj) {\r\n\t\tif (this._eventParents) {\r\n\t\t\tdelete this._eventParents[Util.stamp(obj)];\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_propagateEvent: function (e) {\r\n\t\tfor (var id in this._eventParents) {\r\n\t\t\tthis._eventParents[id].fire(e.type, Util.extend({\r\n\t\t\t\tlayer: e.target,\r\n\t\t\t\tpropagatedFrom: e.target\r\n\t\t\t}, e), true);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// aliases; we should ditch those eventually\r\n\r\n// @method addEventListener(…): this\r\n// Alias to [`on(…)`](#evented-on)\r\nEvents.addEventListener = Events.on;\r\n\r\n// @method removeEventListener(…): this\r\n// Alias to [`off(…)`](#evented-off)\r\n\r\n// @method clearAllEventListeners(…): this\r\n// Alias to [`off()`](#evented-off)\r\nEvents.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n// @method addOneTimeEventListener(…): this\r\n// Alias to [`once(…)`](#evented-once)\r\nEvents.addOneTimeEventListener = Events.once;\r\n\r\n// @method fireEvent(…): this\r\n// Alias to [`fire(…)`](#evented-fire)\r\nEvents.fireEvent = Events.fire;\r\n\r\n// @method hasEventListeners(…): Boolean\r\n// Alias to [`listens(…)`](#evented-listens)\r\nEvents.hasEventListeners = Events.listens;\r\n\r\nexport var Evented = Class.extend(Events);\r\n","import {isArray, formatNum} from '../core/Util';\r\n\r\n/*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Point(x, y, round) {\r\n\t// @property x: Number; The `x` coordinate of the point\r\n\tthis.x = (round ? Math.round(x) : x);\r\n\t// @property y: Number; The `y` coordinate of the point\r\n\tthis.y = (round ? Math.round(y) : y);\r\n}\r\n\r\nvar trunc = Math.trunc || function (v) {\r\n\treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n};\r\n\r\nPoint.prototype = {\r\n\r\n\t// @method clone(): Point\r\n\t// Returns a copy of the current point.\r\n\tclone: function () {\r\n\t\treturn new Point(this.x, this.y);\r\n\t},\r\n\r\n\t// @method add(otherPoint: Point): Point\r\n\t// Returns the result of addition of the current and the given points.\r\n\tadd: function (point) {\r\n\t\t// non-destructive, returns a new point\r\n\t\treturn this.clone()._add(toPoint(point));\r\n\t},\r\n\r\n\t_add: function (point) {\r\n\t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n\t\tthis.x += point.x;\r\n\t\tthis.y += point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method subtract(otherPoint: Point): Point\r\n\t// Returns the result of subtraction of the given point from the current.\r\n\tsubtract: function (point) {\r\n\t\treturn this.clone()._subtract(toPoint(point));\r\n\t},\r\n\r\n\t_subtract: function (point) {\r\n\t\tthis.x -= point.x;\r\n\t\tthis.y -= point.y;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method divideBy(num: Number): Point\r\n\t// Returns the result of division of the current point by the given number.\r\n\tdivideBy: function (num) {\r\n\t\treturn this.clone()._divideBy(num);\r\n\t},\r\n\r\n\t_divideBy: function (num) {\r\n\t\tthis.x /= num;\r\n\t\tthis.y /= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method multiplyBy(num: Number): Point\r\n\t// Returns the result of multiplication of the current point by the given number.\r\n\tmultiplyBy: function (num) {\r\n\t\treturn this.clone()._multiplyBy(num);\r\n\t},\r\n\r\n\t_multiplyBy: function (num) {\r\n\t\tthis.x *= num;\r\n\t\tthis.y *= num;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method scaleBy(scale: Point): Point\r\n\t// Multiply each coordinate of the current point by each coordinate of\r\n\t// `scale`. In linear algebra terms, multiply the point by the\r\n\t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n\t// defined by `scale`.\r\n\tscaleBy: function (point) {\r\n\t\treturn new Point(this.x * point.x, this.y * point.y);\r\n\t},\r\n\r\n\t// @method unscaleBy(scale: Point): Point\r\n\t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n\t// each coordinate of `scale`.\r\n\tunscaleBy: function (point) {\r\n\t\treturn new Point(this.x / point.x, this.y / point.y);\r\n\t},\r\n\r\n\t// @method round(): Point\r\n\t// Returns a copy of the current point with rounded coordinates.\r\n\tround: function () {\r\n\t\treturn this.clone()._round();\r\n\t},\r\n\r\n\t_round: function () {\r\n\t\tthis.x = Math.round(this.x);\r\n\t\tthis.y = Math.round(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method floor(): Point\r\n\t// Returns a copy of the current point with floored coordinates (rounded down).\r\n\tfloor: function () {\r\n\t\treturn this.clone()._floor();\r\n\t},\r\n\r\n\t_floor: function () {\r\n\t\tthis.x = Math.floor(this.x);\r\n\t\tthis.y = Math.floor(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method ceil(): Point\r\n\t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n\tceil: function () {\r\n\t\treturn this.clone()._ceil();\r\n\t},\r\n\r\n\t_ceil: function () {\r\n\t\tthis.x = Math.ceil(this.x);\r\n\t\tthis.y = Math.ceil(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method trunc(): Point\r\n\t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n\ttrunc: function () {\r\n\t\treturn this.clone()._trunc();\r\n\t},\r\n\r\n\t_trunc: function () {\r\n\t\tthis.x = trunc(this.x);\r\n\t\tthis.y = trunc(this.y);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method distanceTo(otherPoint: Point): Number\r\n\t// Returns the cartesian distance between the current and the given points.\r\n\tdistanceTo: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\tvar x = point.x - this.x,\r\n\t\t    y = point.y - this.y;\r\n\r\n\t\treturn Math.sqrt(x * x + y * y);\r\n\t},\r\n\r\n\t// @method equals(otherPoint: Point): Boolean\r\n\t// Returns `true` if the given point has the same coordinates.\r\n\tequals: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn point.x === this.x &&\r\n\t\t       point.y === this.y;\r\n\t},\r\n\r\n\t// @method contains(otherPoint: Point): Boolean\r\n\t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n\tcontains: function (point) {\r\n\t\tpoint = toPoint(point);\r\n\r\n\t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n\t\t       Math.abs(point.y) <= Math.abs(this.y);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point for debugging purposes.\r\n\ttoString: function () {\r\n\t\treturn 'Point(' +\r\n\t\t        formatNum(this.x) + ', ' +\r\n\t\t        formatNum(this.y) + ')';\r\n\t}\r\n};\r\n\r\n// @factory L.point(x: Number, y: Number, round?: Boolean)\r\n// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Number[])\r\n// Expects an array of the form `[x, y]` instead.\r\n\r\n// @alternative\r\n// @factory L.point(coords: Object)\r\n// Expects a plain object of the form `{x: Number, y: Number}` instead.\r\nexport function toPoint(x, y, round) {\r\n\tif (x instanceof Point) {\r\n\t\treturn x;\r\n\t}\r\n\tif (isArray(x)) {\r\n\t\treturn new Point(x[0], x[1]);\r\n\t}\r\n\tif (x === undefined || x === null) {\r\n\t\treturn x;\r\n\t}\r\n\tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n\t\treturn new Point(x.x, x.y);\r\n\t}\r\n\treturn new Point(x, y, round);\r\n}\r\n","import {Point, toPoint} from './Point';\r\n\r\n/*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function Bounds(a, b) {\r\n\tif (!a) { return; }\r\n\r\n\tvar points = b ? [a, b] : a;\r\n\r\n\tfor (var i = 0, len = points.length; i < len; i++) {\r\n\t\tthis.extend(points[i]);\r\n\t}\r\n}\r\n\r\nBounds.prototype = {\r\n\t// @method extend(point: Point): this\r\n\t// Extends the bounds to contain the given point.\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: Bounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar min2, max2;\r\n\t\tif (!obj) { return this; }\r\n\r\n\t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n\t\t\tmin2 = max2 = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t\tmin2 = obj.min;\r\n\t\t\tmax2 = obj.max;\r\n\r\n\t\t\tif (!min2 || !max2) { return this; }\r\n\t\t}\r\n\r\n\t\t// @property min: Point\r\n\t\t// The top left corner of the rectangle.\r\n\t\t// @property max: Point\r\n\t\t// The bottom right corner of the rectangle.\r\n\t\tif (!this.min && !this.max) {\r\n\t\t\tthis.min = min2.clone();\r\n\t\t\tthis.max = max2.clone();\r\n\t\t} else {\r\n\t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n\t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n\t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n\t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getCenter(round?: Boolean): Point\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function (round) {\r\n\t\treturn toPoint(\r\n\t\t        (this.min.x + this.max.x) / 2,\r\n\t\t        (this.min.y + this.max.y) / 2, round);\r\n\t},\r\n\r\n\t// @method getBottomLeft(): Point\r\n\t// Returns the bottom-left point of the bounds.\r\n\tgetBottomLeft: function () {\r\n\t\treturn toPoint(this.min.x, this.max.y);\r\n\t},\r\n\r\n\t// @method getTopRight(): Point\r\n\t// Returns the top-right point of the bounds.\r\n\tgetTopRight: function () { // -> Point\r\n\t\treturn toPoint(this.max.x, this.min.y);\r\n\t},\r\n\r\n\t// @method getTopLeft(): Point\r\n\t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n\tgetTopLeft: function () {\r\n\t\treturn this.min; // left, top\r\n\t},\r\n\r\n\t// @method getBottomRight(): Point\r\n\t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n\tgetBottomRight: function () {\r\n\t\treturn this.max; // right, bottom\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the size of the given bounds\r\n\tgetSize: function () {\r\n\t\treturn this.max.subtract(this.min);\r\n\t},\r\n\r\n\t// @method contains(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\t// @alternative\r\n\t// @method contains(point: Point): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) {\r\n\t\tvar min, max;\r\n\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n\t\t\tobj = toPoint(obj);\r\n\t\t} else {\r\n\t\t\tobj = toBounds(obj);\r\n\t\t}\r\n\r\n\t\tif (obj instanceof Bounds) {\r\n\t\t\tmin = obj.min;\r\n\t\t\tmax = obj.max;\r\n\t\t} else {\r\n\t\t\tmin = max = obj;\r\n\t\t}\r\n\r\n\t\treturn (min.x >= this.min.x) &&\r\n\t\t       (max.x <= this.max.x) &&\r\n\t\t       (min.y >= this.min.y) &&\r\n\t\t       (max.y <= this.max.y);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n\t// intersect if they have at least one point in common.\r\n\tintersects: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n\t\t    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n\t\treturn xIntersects && yIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n\t// overlap if their intersection is an area.\r\n\toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\tvar min = this.min,\r\n\t\t    max = this.max,\r\n\t\t    min2 = bounds.min,\r\n\t\t    max2 = bounds.max,\r\n\t\t    xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n\t\t    yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n\t\treturn xOverlaps && yOverlaps;\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this.min && this.max);\r\n\t},\r\n\r\n\r\n\t// @method pad(bufferRatio: Number): Bounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar min = this.min,\r\n\t\tmax = this.max,\r\n\t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n\t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n\t\treturn toBounds(\r\n\t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n\t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n\t},\r\n\r\n\r\n\t// @method equals(otherBounds: Bounds): Boolean\r\n\t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n\tequals: function (bounds) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toBounds(bounds);\r\n\r\n\t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n\t\t\tthis.max.equals(bounds.getBottomRight());\r\n\t},\r\n};\r\n\r\n\r\n// @factory L.bounds(corner1: Point, corner2: Point)\r\n// Creates a Bounds object from two corners coordinate pairs.\r\n// @alternative\r\n// @factory L.bounds(points: Point[])\r\n// Creates a Bounds object from the given array of points.\r\nexport function toBounds(a, b) {\r\n\tif (!a || a instanceof Bounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new Bounds(a, b);\r\n}\r\n","import {LatLng, toLatLng} from './LatLng';\r\n\r\n/*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n\tif (!corner1) { return; }\r\n\r\n\tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\tthis.extend(latlngs[i]);\r\n\t}\r\n}\r\n\r\nLatLngBounds.prototype = {\r\n\r\n\t// @method extend(latlng: LatLng): this\r\n\t// Extend the bounds to contain the given point\r\n\r\n\t// @alternative\r\n\t// @method extend(otherBounds: LatLngBounds): this\r\n\t// Extend the bounds to contain the given bounds\r\n\textend: function (obj) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLng) {\r\n\t\t\tsw2 = obj;\r\n\t\t\tne2 = obj;\r\n\r\n\t\t} else if (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj._southWest;\r\n\t\t\tne2 = obj._northEast;\r\n\r\n\t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n\t\t} else {\r\n\t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n\t\t}\r\n\r\n\t\tif (!sw && !ne) {\r\n\t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n\t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n\t\t} else {\r\n\t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n\t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n\t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n\t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method pad(bufferRatio: Number): LatLngBounds\r\n\t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n\t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n\t// Negative values will retract the bounds.\r\n\tpad: function (bufferRatio) {\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n\t\t    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n\t\treturn new LatLngBounds(\r\n\t\t        new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n\t\t        new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center point of the bounds.\r\n\tgetCenter: function () {\r\n\t\treturn new LatLng(\r\n\t\t        (this._southWest.lat + this._northEast.lat) / 2,\r\n\t\t        (this._southWest.lng + this._northEast.lng) / 2);\r\n\t},\r\n\r\n\t// @method getSouthWest(): LatLng\r\n\t// Returns the south-west point of the bounds.\r\n\tgetSouthWest: function () {\r\n\t\treturn this._southWest;\r\n\t},\r\n\r\n\t// @method getNorthEast(): LatLng\r\n\t// Returns the north-east point of the bounds.\r\n\tgetNorthEast: function () {\r\n\t\treturn this._northEast;\r\n\t},\r\n\r\n\t// @method getNorthWest(): LatLng\r\n\t// Returns the north-west point of the bounds.\r\n\tgetNorthWest: function () {\r\n\t\treturn new LatLng(this.getNorth(), this.getWest());\r\n\t},\r\n\r\n\t// @method getSouthEast(): LatLng\r\n\t// Returns the south-east point of the bounds.\r\n\tgetSouthEast: function () {\r\n\t\treturn new LatLng(this.getSouth(), this.getEast());\r\n\t},\r\n\r\n\t// @method getWest(): Number\r\n\t// Returns the west longitude of the bounds\r\n\tgetWest: function () {\r\n\t\treturn this._southWest.lng;\r\n\t},\r\n\r\n\t// @method getSouth(): Number\r\n\t// Returns the south latitude of the bounds\r\n\tgetSouth: function () {\r\n\t\treturn this._southWest.lat;\r\n\t},\r\n\r\n\t// @method getEast(): Number\r\n\t// Returns the east longitude of the bounds\r\n\tgetEast: function () {\r\n\t\treturn this._northEast.lng;\r\n\t},\r\n\r\n\t// @method getNorth(): Number\r\n\t// Returns the north latitude of the bounds\r\n\tgetNorth: function () {\r\n\t\treturn this._northEast.lat;\r\n\t},\r\n\r\n\t// @method contains(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle contains the given one.\r\n\r\n\t// @alternative\r\n\t// @method contains (latlng: LatLng): Boolean\r\n\t// Returns `true` if the rectangle contains the given point.\r\n\tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n\t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n\t\t\tobj = toLatLng(obj);\r\n\t\t} else {\r\n\t\t\tobj = toLatLngBounds(obj);\r\n\t\t}\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2, ne2;\r\n\r\n\t\tif (obj instanceof LatLngBounds) {\r\n\t\t\tsw2 = obj.getSouthWest();\r\n\t\t\tne2 = obj.getNorthEast();\r\n\t\t} else {\r\n\t\t\tsw2 = ne2 = obj;\r\n\t\t}\r\n\r\n\t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n\t\t       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n\t},\r\n\r\n\t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n\tintersects: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n\t\t    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n\t\treturn latIntersects && lngIntersects;\r\n\t},\r\n\r\n\t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n\t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n\toverlaps: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tvar sw = this._southWest,\r\n\t\t    ne = this._northEast,\r\n\t\t    sw2 = bounds.getSouthWest(),\r\n\t\t    ne2 = bounds.getNorthEast(),\r\n\r\n\t\t    latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n\t\t    lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n\t\treturn latOverlaps && lngOverlaps;\r\n\t},\r\n\r\n\t// @method toBBoxString(): String\r\n\t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n\ttoBBoxString: function () {\r\n\t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n\t},\r\n\r\n\t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (bounds, maxMargin) {\r\n\t\tif (!bounds) { return false; }\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n\t\t       this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n\t},\r\n\r\n\t// @method isValid(): Boolean\r\n\t// Returns `true` if the bounds are properly initialized.\r\n\tisValid: function () {\r\n\t\treturn !!(this._southWest && this._northEast);\r\n\t}\r\n};\r\n\r\n// TODO International date line?\r\n\r\n// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n// @alternative\r\n// @factory L.latLngBounds(latlngs: LatLng[])\r\n// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\nexport function toLatLngBounds(a, b) {\r\n\tif (a instanceof LatLngBounds) {\r\n\t\treturn a;\r\n\t}\r\n\treturn new LatLngBounds(a, b);\r\n}\r\n","import * as Util from '../core/Util';\r\nimport {Earth} from './crs/CRS.Earth';\r\nimport {toLatLngBounds} from './LatLngBounds';\r\n\r\n/* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\nexport function LatLng(lat, lng, alt) {\r\n\tif (isNaN(lat) || isNaN(lng)) {\r\n\t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n\t}\r\n\r\n\t// @property lat: Number\r\n\t// Latitude in degrees\r\n\tthis.lat = +lat;\r\n\r\n\t// @property lng: Number\r\n\t// Longitude in degrees\r\n\tthis.lng = +lng;\r\n\r\n\t// @property alt: Number\r\n\t// Altitude in meters (optional)\r\n\tif (alt !== undefined) {\r\n\t\tthis.alt = +alt;\r\n\t}\r\n}\r\n\r\nLatLng.prototype = {\r\n\t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n\t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n\tequals: function (obj, maxMargin) {\r\n\t\tif (!obj) { return false; }\r\n\r\n\t\tobj = toLatLng(obj);\r\n\r\n\t\tvar margin = Math.max(\r\n\t\t        Math.abs(this.lat - obj.lat),\r\n\t\t        Math.abs(this.lng - obj.lng));\r\n\r\n\t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n\t},\r\n\r\n\t// @method toString(): String\r\n\t// Returns a string representation of the point (for debugging purposes).\r\n\ttoString: function (precision) {\r\n\t\treturn 'LatLng(' +\r\n\t\t        Util.formatNum(this.lat, precision) + ', ' +\r\n\t\t        Util.formatNum(this.lng, precision) + ')';\r\n\t},\r\n\r\n\t// @method distanceTo(otherLatLng: LatLng): Number\r\n\t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n\tdistanceTo: function (other) {\r\n\t\treturn Earth.distance(this, toLatLng(other));\r\n\t},\r\n\r\n\t// @method wrap(): LatLng\r\n\t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n\twrap: function () {\r\n\t\treturn Earth.wrapLatLng(this);\r\n\t},\r\n\r\n\t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n\t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n\ttoBounds: function (sizeInMeters) {\r\n\t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n\t\t    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n\t\treturn toLatLngBounds(\r\n\t\t        [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n\t\t        [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n\t},\r\n\r\n\tclone: function () {\r\n\t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n\t}\r\n};\r\n\r\n\r\n\r\n// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Array): LatLng\r\n// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n// @alternative\r\n// @factory L.latLng(coords: Object): LatLng\r\n// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\nexport function toLatLng(a, b, c) {\r\n\tif (a instanceof LatLng) {\r\n\t\treturn a;\r\n\t}\r\n\tif (Util.isArray(a) && typeof a[0] !== 'object') {\r\n\t\tif (a.length === 3) {\r\n\t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n\t\t}\r\n\t\tif (a.length === 2) {\r\n\t\t\treturn new LatLng(a[0], a[1]);\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\tif (a === undefined || a === null) {\r\n\t\treturn a;\r\n\t}\r\n\tif (typeof a === 'object' && 'lat' in a) {\r\n\t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n\t}\r\n\tif (b === undefined) {\r\n\t\treturn null;\r\n\t}\r\n\treturn new LatLng(a, b, c);\r\n}\r\n","\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {LatLng} from '../LatLng';\r\nimport {LatLngBounds} from '../LatLngBounds';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\nexport var CRS = {\r\n\t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n\t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n\tlatLngToPoint: function (latlng, zoom) {\r\n\t\tvar projectedPoint = this.projection.project(latlng),\r\n\t\t    scale = this.scale(zoom);\r\n\r\n\t\treturn this.transformation._transform(projectedPoint, scale);\r\n\t},\r\n\r\n\t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n\t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n\t// zoom into geographical coordinates.\r\n\tpointToLatLng: function (point, zoom) {\r\n\t\tvar scale = this.scale(zoom),\r\n\t\t    untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n\t\treturn this.projection.unproject(untransformedPoint);\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng): Point\r\n\t// Projects geographical coordinates into coordinates in units accepted for\r\n\t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n\tproject: function (latlng) {\r\n\t\treturn this.projection.project(latlng);\r\n\t},\r\n\r\n\t// @method unproject(point: Point): LatLng\r\n\t// Given a projected coordinate returns the corresponding LatLng.\r\n\t// The inverse of `project`.\r\n\tunproject: function (point) {\r\n\t\treturn this.projection.unproject(point);\r\n\t},\r\n\r\n\t// @method scale(zoom: Number): Number\r\n\t// Returns the scale used when transforming projected coordinates into\r\n\t// pixel coordinates for a particular zoom. For example, it returns\r\n\t// `256 * 2^zoom` for Mercator-based CRS.\r\n\tscale: function (zoom) {\r\n\t\treturn 256 * Math.pow(2, zoom);\r\n\t},\r\n\r\n\t// @method zoom(scale: Number): Number\r\n\t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n\t// factor of `scale`.\r\n\tzoom: function (scale) {\r\n\t\treturn Math.log(scale / 256) / Math.LN2;\r\n\t},\r\n\r\n\t// @method getProjectedBounds(zoom: Number): Bounds\r\n\t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n\tgetProjectedBounds: function (zoom) {\r\n\t\tif (this.infinite) { return null; }\r\n\r\n\t\tvar b = this.projection.bounds,\r\n\t\t    s = this.scale(zoom),\r\n\t\t    min = this.transformation.transform(b.min, s),\r\n\t\t    max = this.transformation.transform(b.max, s);\r\n\r\n\t\treturn new Bounds(min, max);\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates.\r\n\r\n\t// @property code: String\r\n\t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n\t//\r\n\t// @property wrapLng: Number[]\r\n\t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n\t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n\t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n\t//\r\n\t// @property wrapLat: Number[]\r\n\t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n\t// wrapLng: [min, max],\r\n\t// wrapLat: [min, max],\r\n\r\n\t// @property infinite: Boolean\r\n\t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n\tinfinite: false,\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n\t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n\twrapLatLng: function (latlng) {\r\n\t\tvar lng = this.wrapLng ? Util.wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n\t\t    lat = this.wrapLat ? Util.wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n\t\t    alt = latlng.alt;\r\n\r\n\t\treturn new LatLng(lat, lng, alt);\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n\t// that its center is within the CRS's bounds.\r\n\t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n\twrapLatLngBounds: function (bounds) {\r\n\t\tvar center = bounds.getCenter(),\r\n\t\t    newCenter = this.wrapLatLng(center),\r\n\t\t    latShift = center.lat - newCenter.lat,\r\n\t\t    lngShift = center.lng - newCenter.lng;\r\n\r\n\t\tif (latShift === 0 && lngShift === 0) {\r\n\t\t\treturn bounds;\r\n\t\t}\r\n\r\n\t\tvar sw = bounds.getSouthWest(),\r\n\t\t    ne = bounds.getNorthEast(),\r\n\t\t    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n\t\t    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n\t\treturn new LatLngBounds(newSw, newNe);\r\n\t}\r\n};\r\n","import {CRS} from './CRS';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\nexport var Earth = Util.extend({}, CRS, {\n\twrapLng: [-180, 180],\n\n\t// Mean Earth Radius, as recommended for use by\n\t// the International Union of Geodesy and Geophysics,\n\t// see https://rosettacode.org/wiki/Haversine_formula\n\tR: 6371000,\n\n\t// distance between two geographical points using spherical law of cosines approximation\n\tdistance: function (latlng1, latlng2) {\n\t\tvar rad = Math.PI / 180,\n\t\t    lat1 = latlng1.lat * rad,\n\t\t    lat2 = latlng2.lat * rad,\n\t\t    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n\t\t    sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n\t\t    a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n\t\t    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n\t\treturn this.R * c;\n\t}\n});\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\nvar earthRadius = 6378137;\r\n\r\nexport var SphericalMercator = {\r\n\r\n\tR: earthRadius,\r\n\tMAX_LATITUDE: 85.0511287798,\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    max = this.MAX_LATITUDE,\r\n\t\t    lat = Math.max(Math.min(max, latlng.lat), -max),\r\n\t\t    sin = Math.sin(lat * d);\r\n\r\n\t\treturn new Point(\r\n\t\t\tthis.R * latlng.lng * d,\r\n\t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI;\r\n\r\n\t\treturn new LatLng(\r\n\t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n\t\t\tpoint.x * d / this.R);\r\n\t},\r\n\r\n\tbounds: (function () {\r\n\t\tvar d = earthRadius * Math.PI;\r\n\t\treturn new Bounds([-d, -d], [d, d]);\r\n\t})()\r\n};\r\n","import {Point} from './Point';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), //  L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); //  L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Creates a `Transformation` object with the given coefficients.\r\nexport function Transformation(a, b, c, d) {\r\n\tif (Util.isArray(a)) {\r\n\t\t// use array properties\r\n\t\tthis._a = a[0];\r\n\t\tthis._b = a[1];\r\n\t\tthis._c = a[2];\r\n\t\tthis._d = a[3];\r\n\t\treturn;\r\n\t}\r\n\tthis._a = a;\r\n\tthis._b = b;\r\n\tthis._c = c;\r\n\tthis._d = d;\r\n}\r\n\r\nTransformation.prototype = {\r\n\t// @method transform(point: Point, scale?: Number): Point\r\n\t// Returns a transformed point, optionally multiplied by the given scale.\r\n\t// Only accepts actual `L.Point` instances, not arrays.\r\n\ttransform: function (point, scale) { // (Point, Number) -> Point\r\n\t\treturn this._transform(point.clone(), scale);\r\n\t},\r\n\r\n\t// destructive transform (faster)\r\n\t_transform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\tpoint.x = scale * (this._a * point.x + this._b);\r\n\t\tpoint.y = scale * (this._c * point.y + this._d);\r\n\t\treturn point;\r\n\t},\r\n\r\n\t// @method untransform(point: Point, scale?: Number): Point\r\n\t// Returns the reverse transformation of the given point, optionally divided\r\n\t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n\tuntransform: function (point, scale) {\r\n\t\tscale = scale || 1;\r\n\t\treturn new Point(\r\n\t\t        (point.x / scale - this._b) / this._a,\r\n\t\t        (point.y / scale - this._d) / this._c);\r\n\t}\r\n};\r\n\r\n// factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n// Instantiates a Transformation object with the given coefficients.\r\n\r\n// @alternative\r\n// @factory L.transformation(coefficients: Array): Transformation\r\n// Expects an coefficients array of the form\r\n// `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\nexport function toTransformation(a, b, c, d) {\r\n\treturn new Transformation(a, b, c, d);\r\n}\r\n","import {Earth} from './CRS.Earth';\r\nimport {SphericalMercator} from '../projection/Projection.SphericalMercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\nexport var EPSG3857 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3857',\r\n\tprojection: SphericalMercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n\r\nexport var EPSG900913 = Util.extend({}, EPSG3857, {\r\n\tcode: 'EPSG:900913'\r\n});\r\n","import Browser from '../../core/Browser';\n\n// @namespace SVG; @section\n// There are several static functions which can be called without instantiating L.SVG:\n\n// @function create(name: String): SVGElement\n// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n// corresponding to the class name passed. For example, using 'line' will return\n// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\nexport function svgCreate(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\n// @function pointsToPath(rings: Point[], closed: Boolean): String\n// Generates a SVG path string for multiple rings, with each ring turning\n// into \"M..L..L..\" instructions\nexport function pointsToPath(rings, closed) {\n\tvar str = '',\n\ti, j, len, len2, points, p;\n\n\tfor (i = 0, len = rings.length; i < len; i++) {\n\t\tpoints = rings[i];\n\n\t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n\t\t\tp = points[j];\n\t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n\t\t}\n\n\t\t// closes the ring for polygons; \"x\" is VML syntax\n\t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n\t}\n\n\t// SVG complains about empty path strings\n\treturn str || 'M0 0';\n}\n\n\n\n\n","import * as Util from './Util';\r\nimport {svgCreate} from '../layer/vector/SVG.Util';\r\n\r\n/*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n *   alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\nvar style = document.documentElement.style;\r\n\r\n// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\nvar ie = 'ActiveXObject' in window;\r\n\r\n// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\nvar ielt9 = ie && !document.addEventListener;\r\n\r\n// @property edge: Boolean; `true` for the Edge web browser.\r\nvar edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n// @property webkit: Boolean;\r\n// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\nvar webkit = userAgentContains('webkit');\r\n\r\n// @property android: Boolean\r\n// **Deprecated.** `true` for any browser running on an Android platform.\r\nvar android = userAgentContains('android');\r\n\r\n// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\nvar android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\nvar webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\nvar androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n// @property opera: Boolean; `true` for the Opera browser\r\nvar opera = !!window.opera;\r\n\r\n// @property chrome: Boolean; `true` for the Chrome browser.\r\nvar chrome = !edge && userAgentContains('chrome');\r\n\r\n// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\nvar gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n// @property safari: Boolean; `true` for the Safari browser.\r\nvar safari = !chrome && userAgentContains('safari');\r\n\r\nvar phantom = userAgentContains('phantom');\r\n\r\n// @property opera12: Boolean\r\n// `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\nvar opera12 = 'OTransition' in style;\r\n\r\n// @property win: Boolean; `true` when the browser is running in a Windows platform\r\nvar win = navigator.platform.indexOf('Win') === 0;\r\n\r\n// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\nvar ie3d = ie && ('transition' in style);\r\n\r\n// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\nvar webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\nvar gecko3d = 'MozPerspective' in style;\r\n\r\n// @property any3d: Boolean\r\n// `true` for all browsers supporting CSS transforms.\r\nvar any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n// @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\nvar mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\nvar mobileWebkit = mobile && webkit;\r\n\r\n// @property mobileWebkit3d: Boolean\r\n// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\nvar mobileWebkit3d = mobile && webkit3d;\r\n\r\n// @property msPointer: Boolean\r\n// `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\nvar msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n// @property pointer: Boolean\r\n// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\nvar pointer = !!(window.PointerEvent || msPointer);\r\n\r\n// @property touchNative: Boolean\r\n// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n// **This does not necessarily mean** that the browser is running in a computer with\r\n// a touchscreen, it only means that the browser is capable of understanding\r\n// touch events.\r\nvar touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n// @property touch: Boolean\r\n// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\nvar touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\nvar mobileOpera = mobile && opera;\r\n\r\n// @property mobileGecko: Boolean\r\n// `true` for gecko-based browsers running in a mobile device.\r\nvar mobileGecko = mobile && gecko;\r\n\r\n// @property retina: Boolean\r\n// `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\nvar retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n// @property passiveEvents: Boolean\r\n// `true` for browsers that support passive events.\r\nvar passiveEvents = (function () {\r\n\tvar supportsPassiveOption = false;\r\n\ttry {\r\n\t\tvar opts = Object.defineProperty({}, 'passive', {\r\n\t\t\tget: function () { // eslint-disable-line getter-return\r\n\t\t\t\tsupportsPassiveOption = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t\twindow.removeEventListener('testPassiveEventSupport', Util.falseFn, opts);\r\n\t} catch (e) {\r\n\t\t// Errors can safely be ignored since this is only a browser support test.\r\n\t}\r\n\treturn supportsPassiveOption;\r\n}());\r\n\r\n// @property canvas: Boolean\r\n// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\nvar canvas = (function () {\r\n\treturn !!document.createElement('canvas').getContext;\r\n}());\r\n\r\n// @property svg: Boolean\r\n// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\nvar svg = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\nvar inlineSvg = !!svg && (function () {\r\n\tvar div = document.createElement('div');\r\n\tdiv.innerHTML = '<svg/>';\r\n\treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n})();\r\n\r\n// @property vml: Boolean\r\n// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\nvar vml = !svg && (function () {\r\n\ttry {\r\n\t\tvar div = document.createElement('div');\r\n\t\tdiv.innerHTML = '<v:shape adj=\"1\"/>';\r\n\r\n\t\tvar shape = div.firstChild;\r\n\t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n\t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t}\r\n}());\r\n\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Mac platform\r\nvar mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n// @property mac: Boolean; `true` when the browser is running in a Linux platform\r\nvar linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\nfunction userAgentContains(str) {\r\n\treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n}\r\n\r\n\r\nexport default {\r\n\tie: ie,\r\n\tielt9: ielt9,\r\n\tedge: edge,\r\n\twebkit: webkit,\r\n\tandroid: android,\r\n\tandroid23: android23,\r\n\tandroidStock: androidStock,\r\n\topera: opera,\r\n\tchrome: chrome,\r\n\tgecko: gecko,\r\n\tsafari: safari,\r\n\tphantom: phantom,\r\n\topera12: opera12,\r\n\twin: win,\r\n\tie3d: ie3d,\r\n\twebkit3d: webkit3d,\r\n\tgecko3d: gecko3d,\r\n\tany3d: any3d,\r\n\tmobile: mobile,\r\n\tmobileWebkit: mobileWebkit,\r\n\tmobileWebkit3d: mobileWebkit3d,\r\n\tmsPointer: msPointer,\r\n\tpointer: pointer,\r\n\ttouch: touch,\r\n\ttouchNative: touchNative,\r\n\tmobileOpera: mobileOpera,\r\n\tmobileGecko: mobileGecko,\r\n\tretina: retina,\r\n\tpassiveEvents: passiveEvents,\r\n\tcanvas: canvas,\r\n\tsvg: svg,\r\n\tvml: vml,\r\n\tinlineSvg: inlineSvg,\r\n\tmac: mac,\r\n\tlinux: linux\r\n};\r\n","import * as DomEvent from './DomEvent';\nimport Browser from '../core/Browser';\nimport {falseFn} from '../core/Util';\n\n/*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\nvar POINTER_DOWN =   Browser.msPointer ? 'MSPointerDown'   : 'pointerdown';\nvar POINTER_MOVE =   Browser.msPointer ? 'MSPointerMove'   : 'pointermove';\nvar POINTER_UP =     Browser.msPointer ? 'MSPointerUp'     : 'pointerup';\nvar POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\nvar pEvent = {\n\ttouchstart  : POINTER_DOWN,\n\ttouchmove   : POINTER_MOVE,\n\ttouchend    : POINTER_UP,\n\ttouchcancel : POINTER_CANCEL\n};\nvar handle = {\n\ttouchstart  : _onPointerStart,\n\ttouchmove   : _handlePointer,\n\ttouchend    : _handlePointer,\n\ttouchcancel : _handlePointer\n};\nvar _pointers = {};\nvar _pointerDocListener = false;\n\n// Provides a touch events wrapper for (ms)pointer events.\n// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\nexport function addPointerListener(obj, type, handler) {\n\tif (type === 'touchstart') {\n\t\t_addPointerDocListener();\n\t}\n\tif (!handle[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn falseFn;\n\t}\n\thandler = handle[type].bind(this, handler);\n\tobj.addEventListener(pEvent[type], handler, false);\n\treturn handler;\n}\n\nexport function removePointerListener(obj, type, handler) {\n\tif (!pEvent[type]) {\n\t\tconsole.warn('wrong event specified:', type);\n\t\treturn;\n\t}\n\tobj.removeEventListener(pEvent[type], handler, false);\n}\n\nfunction _globalPointerDown(e) {\n\t_pointers[e.pointerId] = e;\n}\n\nfunction _globalPointerMove(e) {\n\tif (_pointers[e.pointerId]) {\n\t\t_pointers[e.pointerId] = e;\n\t}\n}\n\nfunction _globalPointerUp(e) {\n\tdelete _pointers[e.pointerId];\n}\n\nfunction _addPointerDocListener() {\n\t// need to keep track of what pointers and how many are active to provide e.touches emulation\n\tif (!_pointerDocListener) {\n\t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n\t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n\t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n\t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n\t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n\t\t_pointerDocListener = true;\n\t}\n}\n\nfunction _handlePointer(handler, e) {\n\tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n\te.touches = [];\n\tfor (var i in _pointers) {\n\t\te.touches.push(_pointers[i]);\n\t}\n\te.changedTouches = [e];\n\n\thandler(e);\n}\n\nfunction _onPointerStart(handler, e) {\n\t// IE10 specific: MsTouch needs preventDefault. See #2000\n\tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n\t\tDomEvent.preventDefault(e);\n\t}\n\t_handlePointer(handler, e);\n}\n","import * as DomEvent from './DomEvent';\r\n\r\n/*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n *\r\n * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n */\r\n\r\nfunction makeDblclick(event) {\r\n\t// in modern browsers `type` cannot be just overridden:\r\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n\tvar newEvent = {},\r\n\t    prop, i;\r\n\tfor (i in event) {\r\n\t\tprop = event[i];\r\n\t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n\t}\r\n\tevent = newEvent;\r\n\tnewEvent.type = 'dblclick';\r\n\tnewEvent.detail = 2;\r\n\tnewEvent.isTrusted = false;\r\n\tnewEvent._simulated = true; // for debug purposes\r\n\treturn newEvent;\r\n}\r\n\r\nvar delay = 200;\r\nexport function addDoubleTapListener(obj, handler) {\r\n\t// Most browsers handle double tap natively\r\n\tobj.addEventListener('dblclick', handler);\r\n\r\n\t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n\t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n\t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n\tvar last = 0,\r\n\t    detail;\r\n\tfunction simDblclick(e) {\r\n\t\tif (e.detail !== 1) {\r\n\t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (e.pointerType === 'mouse' ||\r\n\t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// When clicking on an <input>, the browser generates a click on its\r\n\t\t// <label> (and vice versa) triggering two clicks in quick succession.\r\n\t\t// This ignores clicks on elements which are a label with a 'for'\r\n\t\t// attribute (or children of such a label), but not children of\r\n\t\t// a <input>.\r\n\t\tvar path = DomEvent.getPropagationPath(e);\r\n\t\tif (path.some(function (el) {\r\n\t\t\treturn el instanceof HTMLLabelElement && el.attributes.for;\r\n\t\t}) &&\r\n\t\t\t!path.some(function (el) {\r\n\t\t\t\treturn (\r\n\t\t\t\t\tel instanceof HTMLInputElement ||\r\n\t\t\t\t\tel instanceof HTMLSelectElement\r\n\t\t\t\t);\r\n\t\t\t})\r\n\t\t) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar now = Date.now();\r\n\t\tif (now - last <= delay) {\r\n\t\t\tdetail++;\r\n\t\t\tif (detail === 2) {\r\n\t\t\t\thandler(makeDblclick(e));\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdetail = 1;\r\n\t\t}\r\n\t\tlast = now;\r\n\t}\r\n\r\n\tobj.addEventListener('click', simDblclick);\r\n\r\n\treturn {\r\n\t\tdblclick: handler,\r\n\t\tsimDblclick: simDblclick\r\n\t};\r\n}\r\n\r\nexport function removeDoubleTapListener(obj, handlers) {\r\n\tobj.removeEventListener('dblclick', handlers.dblclick);\r\n\tobj.removeEventListener('click', handlers.simDblclick);\r\n}\r\n","import * as DomEvent from './DomEvent';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\nimport Browser from '../core/Browser';\r\n\r\n/*\r\n * @namespace DomUtil\r\n *\r\n * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)\r\n * tree, used by Leaflet internally.\r\n *\r\n * Most functions expecting or returning a `HTMLElement` also work for\r\n * SVG elements. The only difference is that classes refer to CSS classes\r\n * in HTML and SVG classes in SVG.\r\n */\r\n\r\n\r\n// @property TRANSFORM: String\r\n// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).\r\nexport var TRANSFORM = testProp(\r\n\t['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\r\n\r\n// webkitTransition comes first because some browser versions that drop vendor prefix don't do\r\n// the same for the transitionend event, in particular the Android 4.1 stock browser\r\n\r\n// @property TRANSITION: String\r\n// Vendor-prefixed transition style name.\r\nexport var TRANSITION = testProp(\r\n\t['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\r\n\r\n// @property TRANSITION_END: String\r\n// Vendor-prefixed transitionend event name.\r\nexport var TRANSITION_END =\r\n\tTRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';\r\n\r\n\r\n// @function get(id: String|HTMLElement): HTMLElement\r\n// Returns an element given its DOM id, or returns the element itself\r\n// if it was passed directly.\r\nexport function get(id) {\r\n\treturn typeof id === 'string' ? document.getElementById(id) : id;\r\n}\r\n\r\n// @function getStyle(el: HTMLElement, styleAttrib: String): String\r\n// Returns the value for a certain style attribute on an element,\r\n// including computed values or values set through CSS.\r\nexport function getStyle(el, style) {\r\n\tvar value = el.style[style] || (el.currentStyle && el.currentStyle[style]);\r\n\r\n\tif ((!value || value === 'auto') && document.defaultView) {\r\n\t\tvar css = document.defaultView.getComputedStyle(el, null);\r\n\t\tvalue = css ? css[style] : null;\r\n\t}\r\n\treturn value === 'auto' ? null : value;\r\n}\r\n\r\n// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement\r\n// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.\r\nexport function create(tagName, className, container) {\r\n\tvar el = document.createElement(tagName);\r\n\tel.className = className || '';\r\n\r\n\tif (container) {\r\n\t\tcontainer.appendChild(el);\r\n\t}\r\n\treturn el;\r\n}\r\n\r\n// @function remove(el: HTMLElement)\r\n// Removes `el` from its parent element\r\nexport function remove(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent) {\r\n\t\tparent.removeChild(el);\r\n\t}\r\n}\r\n\r\n// @function empty(el: HTMLElement)\r\n// Removes all of `el`'s children elements from `el`\r\nexport function empty(el) {\r\n\twhile (el.firstChild) {\r\n\t\tel.removeChild(el.firstChild);\r\n\t}\r\n}\r\n\r\n// @function toFront(el: HTMLElement)\r\n// Makes `el` the last child of its parent, so it renders in front of the other children.\r\nexport function toFront(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.lastChild !== el) {\r\n\t\tparent.appendChild(el);\r\n\t}\r\n}\r\n\r\n// @function toBack(el: HTMLElement)\r\n// Makes `el` the first child of its parent, so it renders behind the other children.\r\nexport function toBack(el) {\r\n\tvar parent = el.parentNode;\r\n\tif (parent && parent.firstChild !== el) {\r\n\t\tparent.insertBefore(el, parent.firstChild);\r\n\t}\r\n}\r\n\r\n// @function hasClass(el: HTMLElement, name: String): Boolean\r\n// Returns `true` if the element's class attribute contains `name`.\r\nexport function hasClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\treturn el.classList.contains(name);\r\n\t}\r\n\tvar className = getClass(el);\r\n\treturn className.length > 0 && new RegExp('(^|\\\\s)' + name + '(\\\\s|$)').test(className);\r\n}\r\n\r\n// @function addClass(el: HTMLElement, name: String)\r\n// Adds `name` to the element's class attribute.\r\nexport function addClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tvar classes = Util.splitWords(name);\r\n\t\tfor (var i = 0, len = classes.length; i < len; i++) {\r\n\t\t\tel.classList.add(classes[i]);\r\n\t\t}\r\n\t} else if (!hasClass(el, name)) {\r\n\t\tvar className = getClass(el);\r\n\t\tsetClass(el, (className ? className + ' ' : '') + name);\r\n\t}\r\n}\r\n\r\n// @function removeClass(el: HTMLElement, name: String)\r\n// Removes `name` from the element's class attribute.\r\nexport function removeClass(el, name) {\r\n\tif (el.classList !== undefined) {\r\n\t\tel.classList.remove(name);\r\n\t} else {\r\n\t\tsetClass(el, Util.trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));\r\n\t}\r\n}\r\n\r\n// @function setClass(el: HTMLElement, name: String)\r\n// Sets the element's class.\r\nexport function setClass(el, name) {\r\n\tif (el.className.baseVal === undefined) {\r\n\t\tel.className = name;\r\n\t} else {\r\n\t\t// in case of SVG element\r\n\t\tel.className.baseVal = name;\r\n\t}\r\n}\r\n\r\n// @function getClass(el: HTMLElement): String\r\n// Returns the element's class.\r\nexport function getClass(el) {\r\n\t// Check if the element is an SVGElementInstance and use the correspondingElement instead\r\n\t// (Required for linked SVG elements in IE11.)\r\n\tif (el.correspondingElement) {\r\n\t\tel = el.correspondingElement;\r\n\t}\r\n\treturn el.className.baseVal === undefined ? el.className : el.className.baseVal;\r\n}\r\n\r\n// @function setOpacity(el: HTMLElement, opacity: Number)\r\n// Set the opacity of an element (including old IE support).\r\n// `opacity` must be a number from `0` to `1`.\r\nexport function setOpacity(el, value) {\r\n\tif ('opacity' in el.style) {\r\n\t\tel.style.opacity = value;\r\n\t} else if ('filter' in el.style) {\r\n\t\t_setOpacityIE(el, value);\r\n\t}\r\n}\r\n\r\nfunction _setOpacityIE(el, value) {\r\n\tvar filter = false,\r\n\t    filterName = 'DXImageTransform.Microsoft.Alpha';\r\n\r\n\t// filters collection throws an error if we try to retrieve a filter that doesn't exist\r\n\ttry {\r\n\t\tfilter = el.filters.item(filterName);\r\n\t} catch (e) {\r\n\t\t// don't set opacity to 1 if we haven't already set an opacity,\r\n\t\t// it isn't needed and breaks transparent pngs.\r\n\t\tif (value === 1) { return; }\r\n\t}\r\n\r\n\tvalue = Math.round(value * 100);\r\n\r\n\tif (filter) {\r\n\t\tfilter.Enabled = (value !== 100);\r\n\t\tfilter.Opacity = value;\r\n\t} else {\r\n\t\tel.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';\r\n\t}\r\n}\r\n\r\n// @function testProp(props: String[]): String|false\r\n// Goes through the array of style names and returns the first name\r\n// that is a valid style name for an element. If no such name is found,\r\n// it returns false. Useful for vendor-prefixed styles like `transform`.\r\nexport function testProp(props) {\r\n\tvar style = document.documentElement.style;\r\n\r\n\tfor (var i = 0; i < props.length; i++) {\r\n\t\tif (props[i] in style) {\r\n\t\t\treturn props[i];\r\n\t\t}\r\n\t}\r\n\treturn false;\r\n}\r\n\r\n// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)\r\n// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels\r\n// and optionally scaled by `scale`. Does not have an effect if the\r\n// browser doesn't support 3D CSS transforms.\r\nexport function setTransform(el, offset, scale) {\r\n\tvar pos = offset || new Point(0, 0);\r\n\r\n\tel.style[TRANSFORM] =\r\n\t\t(Browser.ie3d ?\r\n\t\t\t'translate(' + pos.x + 'px,' + pos.y + 'px)' :\r\n\t\t\t'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +\r\n\t\t(scale ? ' scale(' + scale + ')' : '');\r\n}\r\n\r\n// @function setPosition(el: HTMLElement, position: Point)\r\n// Sets the position of `el` to coordinates specified by `position`,\r\n// using CSS translate or top/left positioning depending on the browser\r\n// (used by Leaflet internally to position its layers).\r\nexport function setPosition(el, point) {\r\n\r\n\t/*eslint-disable */\r\n\tel._leaflet_pos = point;\r\n\t/* eslint-enable */\r\n\r\n\tif (Browser.any3d) {\r\n\t\tsetTransform(el, point);\r\n\t} else {\r\n\t\tel.style.left = point.x + 'px';\r\n\t\tel.style.top = point.y + 'px';\r\n\t}\r\n}\r\n\r\n// @function getPosition(el: HTMLElement): Point\r\n// Returns the coordinates of an element previously positioned with setPosition.\r\nexport function getPosition(el) {\r\n\t// this method is only used for elements previously positioned using setPosition,\r\n\t// so it's safe to cache the position for performance\r\n\r\n\treturn el._leaflet_pos || new Point(0, 0);\r\n}\r\n\r\n// @function disableTextSelection()\r\n// Prevents the user from generating `selectstart` DOM events, usually generated\r\n// when the user drags the mouse through a page with text. Used internally\r\n// by Leaflet to override the behaviour of any click-and-drag interaction on\r\n// the map. Affects drag interactions on the whole document.\r\n\r\n// @function enableTextSelection()\r\n// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).\r\nexport var disableTextSelection;\r\nexport var enableTextSelection;\r\nvar _userSelect;\r\nif ('onselectstart' in document) {\r\n\tdisableTextSelection = function () {\r\n\t\tDomEvent.on(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tDomEvent.off(window, 'selectstart', DomEvent.preventDefault);\r\n\t};\r\n} else {\r\n\tvar userSelectProperty = testProp(\r\n\t\t['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);\r\n\r\n\tdisableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tvar style = document.documentElement.style;\r\n\t\t\t_userSelect = style[userSelectProperty];\r\n\t\t\tstyle[userSelectProperty] = 'none';\r\n\t\t}\r\n\t};\r\n\tenableTextSelection = function () {\r\n\t\tif (userSelectProperty) {\r\n\t\t\tdocument.documentElement.style[userSelectProperty] = _userSelect;\r\n\t\t\t_userSelect = undefined;\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// @function disableImageDrag()\r\n// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but\r\n// for `dragstart` DOM events, usually generated when the user drags an image.\r\nexport function disableImageDrag() {\r\n\tDomEvent.on(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\n// @function enableImageDrag()\r\n// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).\r\nexport function enableImageDrag() {\r\n\tDomEvent.off(window, 'dragstart', DomEvent.preventDefault);\r\n}\r\n\r\nvar _outlineElement, _outlineStyle;\r\n// @function preventOutline(el: HTMLElement)\r\n// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)\r\n// of the element `el` invisible. Used internally by Leaflet to prevent\r\n// focusable elements from displaying an outline when the user performs a\r\n// drag interaction on them.\r\nexport function preventOutline(element) {\r\n\twhile (element.tabIndex === -1) {\r\n\t\telement = element.parentNode;\r\n\t}\r\n\tif (!element.style) { return; }\r\n\trestoreOutline();\r\n\t_outlineElement = element;\r\n\t_outlineStyle = element.style.outlineStyle;\r\n\telement.style.outlineStyle = 'none';\r\n\tDomEvent.on(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function restoreOutline()\r\n// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().\r\nexport function restoreOutline() {\r\n\tif (!_outlineElement) { return; }\r\n\t_outlineElement.style.outlineStyle = _outlineStyle;\r\n\t_outlineElement = undefined;\r\n\t_outlineStyle = undefined;\r\n\tDomEvent.off(window, 'keydown', restoreOutline);\r\n}\r\n\r\n// @function getSizedParentNode(el: HTMLElement): HTMLElement\r\n// Finds the closest parent node which size (width and height) is not null.\r\nexport function getSizedParentNode(element) {\r\n\tdo {\r\n\t\telement = element.parentNode;\r\n\t} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);\r\n\treturn element;\r\n}\r\n\r\n// @function getScale(el: HTMLElement): Object\r\n// Computes the CSS scale currently applied on the element.\r\n// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,\r\n// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).\r\nexport function getScale(element) {\r\n\tvar rect = element.getBoundingClientRect(); // Read-only in old browsers.\r\n\r\n\treturn {\r\n\t\tx: rect.width / element.offsetWidth || 1,\r\n\t\ty: rect.height / element.offsetHeight || 1,\r\n\t\tboundingClientRect: rect\r\n\t};\r\n}\r\n","import {Point} from '../geometry/Point';\r\nimport * as Util from '../core/Util';\r\nimport Browser from '../core/Browser';\r\nimport {addPointerListener, removePointerListener} from './DomEvent.Pointer';\r\nimport {addDoubleTapListener, removeDoubleTapListener} from './DomEvent.DoubleTap';\r\nimport {getScale} from './DomUtil';\r\n\r\n/*\r\n * @namespace DomEvent\r\n * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.\r\n */\r\n\r\n// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.\r\n\r\n// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Adds a listener function (`fn`) to a particular DOM event type of the\r\n// element `el`. You can optionally specify the context of the listener\r\n// (object the `this` keyword will point to). You can also pass several\r\n// space-separated types (e.g. `'click dblclick'`).\r\n\r\n// @alternative\r\n// @function on(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\nexport function on(obj, types, fn, context) {\r\n\r\n\tif (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\taddOne(obj, type, types[type], fn);\r\n\t\t}\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\taddOne(obj, types[i], fn, context);\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nvar eventsKey = '_leaflet_events';\r\n\r\n// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this\r\n// Removes a previously added listener function.\r\n// Note that if you passed a custom context to on, you must pass the same\r\n// context to `off` in order to remove the listener.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, eventMap: Object, context?: Object): this\r\n// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement, types: String): this\r\n// Removes all previously added listeners of given types.\r\n\r\n// @alternative\r\n// @function off(el: HTMLElement): this\r\n// Removes all previously added listeners from given HTMLElement\r\nexport function off(obj, types, fn, context) {\r\n\r\n\tif (arguments.length === 1) {\r\n\t\tbatchRemove(obj);\r\n\t\tdelete obj[eventsKey];\r\n\r\n\t} else if (types && typeof types === 'object') {\r\n\t\tfor (var type in types) {\r\n\t\t\tremoveOne(obj, type, types[type], fn);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\ttypes = Util.splitWords(types);\r\n\r\n\t\tif (arguments.length === 2) {\r\n\t\t\tbatchRemove(obj, function (type) {\r\n\t\t\t\treturn Util.indexOf(types, type) !== -1;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n\t\t\t\tremoveOne(obj, types[i], fn, context);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction batchRemove(obj, filterFn) {\r\n\tfor (var id in obj[eventsKey]) {\r\n\t\tvar type = id.split(/\\d/)[0];\r\n\t\tif (!filterFn || filterFn(type)) {\r\n\t\t\tremoveOne(obj, type, null, null, id);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar mouseSubst = {\r\n\tmouseenter: 'mouseover',\r\n\tmouseleave: 'mouseout',\r\n\twheel: !('onwheel' in window) && 'mousewheel'\r\n};\r\n\r\nfunction addOne(obj, type, fn, context) {\r\n\tvar id = type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\r\n\tif (obj[eventsKey] && obj[eventsKey][id]) { return this; }\r\n\r\n\tvar handler = function (e) {\r\n\t\treturn fn.call(context || obj, e || window.event);\r\n\t};\r\n\r\n\tvar originalHandler = handler;\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\t// Needs DomEvent.Pointer.js\r\n\t\thandler = addPointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\thandler = addDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('addEventListener' in obj) {\r\n\r\n\t\tif (type === 'touchstart' || type === 'touchmove' || type === 'wheel' ||  type === 'mousewheel') {\r\n\t\t\tobj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);\r\n\r\n\t\t} else if (type === 'mouseenter' || type === 'mouseleave') {\r\n\t\t\thandler = function (e) {\r\n\t\t\t\te = e || window.event;\r\n\t\t\t\tif (isExternalTarget(obj, e)) {\r\n\t\t\t\t\toriginalHandler(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tobj.addEventListener(mouseSubst[type], handler, false);\r\n\r\n\t\t} else {\r\n\t\t\tobj.addEventListener(type, originalHandler, false);\r\n\t\t}\r\n\r\n\t} else {\r\n\t\tobj.attachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey] = obj[eventsKey] || {};\r\n\tobj[eventsKey][id] = handler;\r\n}\r\n\r\nfunction removeOne(obj, type, fn, context, id) {\r\n\tid = id || type + Util.stamp(fn) + (context ? '_' + Util.stamp(context) : '');\r\n\tvar handler = obj[eventsKey] && obj[eventsKey][id];\r\n\r\n\tif (!handler) { return this; }\r\n\r\n\tif (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {\r\n\t\tremovePointerListener(obj, type, handler);\r\n\r\n\t} else if (Browser.touch && (type === 'dblclick')) {\r\n\t\tremoveDoubleTapListener(obj, handler);\r\n\r\n\t} else if ('removeEventListener' in obj) {\r\n\r\n\t\tobj.removeEventListener(mouseSubst[type] || type, handler, false);\r\n\r\n\t} else {\r\n\t\tobj.detachEvent('on' + type, handler);\r\n\t}\r\n\r\n\tobj[eventsKey][id] = null;\r\n}\r\n\r\n// @function stopPropagation(ev: DOMEvent): this\r\n// Stop the given event from propagation to parent elements. Used inside the listener functions:\r\n// ```js\r\n// L.DomEvent.on(div, 'click', function (ev) {\r\n// \tL.DomEvent.stopPropagation(ev);\r\n// });\r\n// ```\r\nexport function stopPropagation(e) {\r\n\r\n\tif (e.stopPropagation) {\r\n\t\te.stopPropagation();\r\n\t} else if (e.originalEvent) {  // In case of Leaflet event.\r\n\t\te.originalEvent._stopped = true;\r\n\t} else {\r\n\t\te.cancelBubble = true;\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\n// @function disableScrollPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).\r\nexport function disableScrollPropagation(el) {\r\n\taddOne(el, 'wheel', stopPropagation);\r\n\treturn this;\r\n}\r\n\r\n// @function disableClickPropagation(el: HTMLElement): this\r\n// Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,\r\n// `'mousedown'` and `'touchstart'` events (plus browser variants).\r\nexport function disableClickPropagation(el) {\r\n\ton(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);\r\n\tel['_leaflet_disable_click'] = true;\r\n\treturn this;\r\n}\r\n\r\n// @function preventDefault(ev: DOMEvent): this\r\n// Prevents the default action of the DOM Event `ev` from happening (such as\r\n// following a link in the href of the a element, or doing a POST request\r\n// with page reload when a `<form>` is submitted).\r\n// Use it inside listener functions.\r\nexport function preventDefault(e) {\r\n\tif (e.preventDefault) {\r\n\t\te.preventDefault();\r\n\t} else {\r\n\t\te.returnValue = false;\r\n\t}\r\n\treturn this;\r\n}\r\n\r\n// @function stop(ev: DOMEvent): this\r\n// Does `stopPropagation` and `preventDefault` at the same time.\r\nexport function stop(e) {\r\n\tpreventDefault(e);\r\n\tstopPropagation(e);\r\n\treturn this;\r\n}\r\n\r\n// @function getPropagationPath(ev: DOMEvent): Array\r\n// Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).\r\n// Returns an array containing the `HTMLElement`s that the given DOM event\r\n// should propagate to (if not stopped).\r\nexport function getPropagationPath(ev) {\r\n\tif (ev.composedPath) {\r\n\t\treturn ev.composedPath();\r\n\t}\r\n\r\n\tvar path = [];\r\n\tvar el = ev.target;\r\n\r\n\twhile (el) {\r\n\t\tpath.push(el);\r\n\t\tel = el.parentNode;\r\n\t}\r\n\treturn path;\r\n}\r\n\r\n\r\n// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point\r\n// Gets normalized mouse position from a DOM event relative to the\r\n// `container` (border excluded) or to the whole page if not specified.\r\nexport function getMousePosition(e, container) {\r\n\tif (!container) {\r\n\t\treturn new Point(e.clientX, e.clientY);\r\n\t}\r\n\r\n\tvar scale = getScale(container),\r\n\t    offset = scale.boundingClientRect; // left and top  values are in page scale (like the event clientX/Y)\r\n\r\n\treturn new Point(\r\n\t\t// offset.left/top values are in page scale (like clientX/Y),\r\n\t\t// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).\r\n\t\t(e.clientX - offset.left) / scale.x - container.clientLeft,\r\n\t\t(e.clientY - offset.top) / scale.y - container.clientTop\r\n\t);\r\n}\r\n\r\n\r\n//  except , Safari and\r\n// We need double the scroll pixels (see #7403 and #4538) for all Browsers\r\n// except OSX (Mac) -> 3x, Chrome running on Linux 1x\r\n\r\nvar wheelPxFactor =\r\n\t(Browser.linux && Browser.chrome) ? window.devicePixelRatio :\r\n\tBrowser.mac ? window.devicePixelRatio * 3 :\r\n\twindow.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;\r\n// @function getWheelDelta(ev: DOMEvent): Number\r\n// Gets normalized wheel delta from a wheel DOM event, in vertical\r\n// pixels scrolled (negative if scrolling down).\r\n// Events from pointing devices without precise scrolling are mapped to\r\n// a best guess of 60 pixels.\r\nexport function getWheelDelta(e) {\r\n\treturn (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta\r\n\t       (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels\r\n\t       (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines\r\n\t       (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages\r\n\t       (e.deltaX || e.deltaZ) ? 0 :\t// Skip horizontal/depth wheel events\r\n\t       e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels\r\n\t       (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines\r\n\t       e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages\r\n\t       0;\r\n}\r\n\r\n// check if element really left/entered the event target (for mouseenter/mouseleave)\r\nexport function isExternalTarget(el, e) {\r\n\r\n\tvar related = e.relatedTarget;\r\n\r\n\tif (!related) { return true; }\r\n\r\n\ttry {\r\n\t\twhile (related && (related !== el)) {\r\n\t\t\trelated = related.parentNode;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\treturn false;\r\n\t}\r\n\treturn (related !== el);\r\n}\r\n\r\n// @function addListener(…): this\r\n// Alias to [`L.DomEvent.on`](#domevent-on)\r\nexport {on as addListener};\r\n\r\n// @function removeListener(…): this\r\n// Alias to [`L.DomEvent.off`](#domevent-off)\r\nexport {off as removeListener};\r\n","import * as Util from '../core/Util';\nimport {Evented} from '../core/Events';\nimport * as DomUtil from '../dom/DomUtil';\n\n\n/*\n * @class PosAnimation\n * @aka L.PosAnimation\n * @inherits Evented\n * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.\n *\n * @example\n * ```js\n * var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);\n *\n * myPositionMarker.on(\"click\", function() {\n * \tvar pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());\n * \tpos.y -= 25;\n * \tvar fx = new L.PosAnimation();\n *\n * \tfx.once('end',function() {\n * \t\tpos.y += 25;\n * \t\tfx.run(myPositionMarker._icon, pos, 0.8);\n * \t});\n *\n * \tfx.run(myPositionMarker._icon, pos, 0.3);\n * });\n *\n * ```\n *\n * @constructor L.PosAnimation()\n * Creates a `PosAnimation` object.\n *\n */\n\nexport var PosAnimation = Evented.extend({\n\n\t// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)\n\t// Run an animation of a given element to a new position, optionally setting\n\t// duration in seconds (`0.25` by default) and easing linearity factor (3rd\n\t// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),\n\t// `0.5` by default).\n\trun: function (el, newPos, duration, easeLinearity) {\n\t\tthis.stop();\n\n\t\tthis._el = el;\n\t\tthis._inProgress = true;\n\t\tthis._duration = duration || 0.25;\n\t\tthis._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);\n\n\t\tthis._startPos = DomUtil.getPosition(el);\n\t\tthis._offset = newPos.subtract(this._startPos);\n\t\tthis._startTime = +new Date();\n\n\t\t// @event start: Event\n\t\t// Fired when the animation starts\n\t\tthis.fire('start');\n\n\t\tthis._animate();\n\t},\n\n\t// @method stop()\n\t// Stops the animation (if currently running).\n\tstop: function () {\n\t\tif (!this._inProgress) { return; }\n\n\t\tthis._step(true);\n\t\tthis._complete();\n\t},\n\n\t_animate: function () {\n\t\t// animation loop\n\t\tthis._animId = Util.requestAnimFrame(this._animate, this);\n\t\tthis._step();\n\t},\n\n\t_step: function (round) {\n\t\tvar elapsed = (+new Date()) - this._startTime,\n\t\t    duration = this._duration * 1000;\n\n\t\tif (elapsed < duration) {\n\t\t\tthis._runFrame(this._easeOut(elapsed / duration), round);\n\t\t} else {\n\t\t\tthis._runFrame(1);\n\t\t\tthis._complete();\n\t\t}\n\t},\n\n\t_runFrame: function (progress, round) {\n\t\tvar pos = this._startPos.add(this._offset.multiplyBy(progress));\n\t\tif (round) {\n\t\t\tpos._round();\n\t\t}\n\t\tDomUtil.setPosition(this._el, pos);\n\n\t\t// @event step: Event\n\t\t// Fired continuously during the animation.\n\t\tthis.fire('step');\n\t},\n\n\t_complete: function () {\n\t\tUtil.cancelAnimFrame(this._animId);\n\n\t\tthis._inProgress = false;\n\t\t// @event end: Event\n\t\t// Fired when the animation ends.\n\t\tthis.fire('end');\n\t},\n\n\t_easeOut: function (t) {\n\t\treturn 1 - Math.pow(1 - t, this._easeOutPower);\n\t}\n});\n","import * as Util from '../core/Util';\r\nimport {Evented} from '../core/Events';\r\nimport {EPSG3857} from '../geo/crs/CRS.EPSG3857';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Bounds, toBounds} from '../geometry/Bounds';\r\nimport {LatLng, toLatLng} from '../geo/LatLng';\r\nimport {LatLngBounds, toLatLngBounds} from '../geo/LatLngBounds';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {PosAnimation} from '../dom/PosAnimation';\r\n\r\n/*\r\n * @class Map\r\n * @aka L.Map\r\n * @inherits Evented\r\n *\r\n * The central class of the API — it is used to create a map on a page and manipulate it.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * // initialize the map on the \"map\" div with a given center and zoom\r\n * var map = L.map('map', {\r\n * \tcenter: [51.505, -0.09],\r\n * \tzoom: 13\r\n * });\r\n * ```\r\n *\r\n */\r\n\r\nexport var Map = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section Map State Options\r\n\t\t// @option crs: CRS = L.CRS.EPSG3857\r\n\t\t// The [Coordinate Reference System](#crs) to use. Don't change this if you're not\r\n\t\t// sure what it means.\r\n\t\tcrs: EPSG3857,\r\n\r\n\t\t// @option center: LatLng = undefined\r\n\t\t// Initial geographic center of the map\r\n\t\tcenter: undefined,\r\n\r\n\t\t// @option zoom: Number = undefined\r\n\t\t// Initial map zoom level\r\n\t\tzoom: undefined,\r\n\r\n\t\t// @option minZoom: Number = *\r\n\t\t// Minimum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the lowest of their `minZoom` options will be used instead.\r\n\t\tminZoom: undefined,\r\n\r\n\t\t// @option maxZoom: Number = *\r\n\t\t// Maximum zoom level of the map.\r\n\t\t// If not specified and at least one `GridLayer` or `TileLayer` is in the map,\r\n\t\t// the highest of their `maxZoom` options will be used instead.\r\n\t\tmaxZoom: undefined,\r\n\r\n\t\t// @option layers: Layer[] = []\r\n\t\t// Array of layers that will be added to the map initially\r\n\t\tlayers: [],\r\n\r\n\t\t// @option maxBounds: LatLngBounds = null\r\n\t\t// When this option is set, the map restricts the view to the given\r\n\t\t// geographical bounds, bouncing the user back if the user tries to pan\r\n\t\t// outside the view. To set the restriction dynamically, use\r\n\t\t// [`setMaxBounds`](#map-setmaxbounds) method.\r\n\t\tmaxBounds: undefined,\r\n\r\n\t\t// @option renderer: Renderer = *\r\n\t\t// The default method for drawing vector layers on the map. `L.SVG`\r\n\t\t// or `L.Canvas` by default depending on browser support.\r\n\t\trenderer: undefined,\r\n\r\n\r\n\t\t// @section Animation Options\r\n\t\t// @option zoomAnimation: Boolean = true\r\n\t\t// Whether the map zoom animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tzoomAnimation: true,\r\n\r\n\t\t// @option zoomAnimationThreshold: Number = 4\r\n\t\t// Won't animate zoom if the zoom difference exceeds this value.\r\n\t\tzoomAnimationThreshold: 4,\r\n\r\n\t\t// @option fadeAnimation: Boolean = true\r\n\t\t// Whether the tile fade animation is enabled. By default it's enabled\r\n\t\t// in all browsers that support CSS3 Transitions except Android.\r\n\t\tfadeAnimation: true,\r\n\r\n\t\t// @option markerZoomAnimation: Boolean = true\r\n\t\t// Whether markers animate their zoom with the zoom animation, if disabled\r\n\t\t// they will disappear for the length of the animation. By default it's\r\n\t\t// enabled in all browsers that support CSS3 Transitions except Android.\r\n\t\tmarkerZoomAnimation: true,\r\n\r\n\t\t// @option transform3DLimit: Number = 2^23\r\n\t\t// Defines the maximum size of a CSS translation transform. The default\r\n\t\t// value should not be changed unless a web browser positions layers in\r\n\t\t// the wrong place after doing a large `panBy`.\r\n\t\ttransform3DLimit: 8388608, // Precision limit of a 32-bit float\r\n\r\n\t\t// @section Interaction Options\r\n\t\t// @option zoomSnap: Number = 1\r\n\t\t// Forces the map's zoom level to always be a multiple of this, particularly\r\n\t\t// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.\r\n\t\t// By default, the zoom level snaps to the nearest integer; lower values\r\n\t\t// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`\r\n\t\t// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.\r\n\t\tzoomSnap: 1,\r\n\r\n\t\t// @option zoomDelta: Number = 1\r\n\t\t// Controls how much the map's zoom level will change after a\r\n\t\t// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`\r\n\t\t// or `-` on the keyboard, or using the [zoom controls](#control-zoom).\r\n\t\t// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.\r\n\t\tzoomDelta: 1,\r\n\r\n\t\t// @option trackResize: Boolean = true\r\n\t\t// Whether the map automatically handles browser window resize to update itself.\r\n\t\ttrackResize: true\r\n\t},\r\n\r\n\tinitialize: function (id, options) { // (HTMLElement or String, Object)\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// Make sure to assign internal flags at the beginning,\r\n\t\t// to avoid inconsistent state in some edge cases.\r\n\t\tthis._handlers = [];\r\n\t\tthis._layers = {};\r\n\t\tthis._zoomBoundLayers = {};\r\n\t\tthis._sizeChanged = true;\r\n\r\n\t\tthis._initContainer(id);\r\n\t\tthis._initLayout();\r\n\r\n\t\t// hack for https://github.com/Leaflet/Leaflet/issues/1980\r\n\t\tthis._onResize = Util.bind(this._onResize, this);\r\n\r\n\t\tthis._initEvents();\r\n\r\n\t\tif (options.maxBounds) {\r\n\t\t\tthis.setMaxBounds(options.maxBounds);\r\n\t\t}\r\n\r\n\t\tif (options.zoom !== undefined) {\r\n\t\t\tthis._zoom = this._limitZoom(options.zoom);\r\n\t\t}\r\n\r\n\t\tif (options.center && options.zoom !== undefined) {\r\n\t\t\tthis.setView(toLatLng(options.center), options.zoom, {reset: true});\r\n\t\t}\r\n\r\n\t\tthis.callInitHooks();\r\n\r\n\t\t// don't animate on browsers without hardware-accelerated transitions or old Android/Opera\r\n\t\tthis._zoomAnimated = DomUtil.TRANSITION && Browser.any3d && !Browser.mobileOpera &&\r\n\t\t\t\tthis.options.zoomAnimation;\r\n\r\n\t\t// zoom transitions run with the same duration for all layers, so if one of transitionend events\r\n\t\t// happens after starting zoom animation (propagating to the map pane), we know that it ended globally\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tthis._createAnimProxy();\r\n\t\t\tDomEvent.on(this._proxy, DomUtil.TRANSITION_END, this._catchTransitionEnd, this);\r\n\t\t}\r\n\r\n\t\tthis._addLayers(this.options.layers);\r\n\t},\r\n\r\n\r\n\t// @section Methods for modifying map state\r\n\r\n\t// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) with the given\r\n\t// animation options.\r\n\tsetView: function (center, zoom, options) {\r\n\r\n\t\tzoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);\r\n\t\tcenter = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);\r\n\t\toptions = options || {};\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tif (this._loaded && !options.reset && options !== true) {\r\n\r\n\t\t\tif (options.animate !== undefined) {\r\n\t\t\t\toptions.zoom = Util.extend({animate: options.animate}, options.zoom);\r\n\t\t\t\toptions.pan = Util.extend({animate: options.animate, duration: options.duration}, options.pan);\r\n\t\t\t}\r\n\r\n\t\t\t// try animating pan or zoom\r\n\t\t\tvar moved = (this._zoom !== zoom) ?\r\n\t\t\t\tthis._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :\r\n\t\t\t\tthis._tryAnimatedPan(center, options.pan);\r\n\r\n\t\t\tif (moved) {\r\n\t\t\t\t// prevent resize handler call, the view will refresh after animation anyway\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// animation didn't start, just reset the map view\r\n\t\tthis._resetView(center, zoom, options.pan && options.pan.noMoveStart);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setZoom(zoom: Number, options?: Zoom/pan options): this\r\n\t// Sets the zoom of the map.\r\n\tsetZoom: function (zoom, options) {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthis._zoom = zoom;\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\treturn this.setView(this.getCenter(), zoom, {zoom: options});\r\n\t},\r\n\r\n\t// @method zoomIn(delta?: Number, options?: Zoom options): this\r\n\t// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomIn: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom + delta, options);\r\n\t},\r\n\r\n\t// @method zoomOut(delta?: Number, options?: Zoom options): this\r\n\t// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).\r\n\tzoomOut: function (delta, options) {\r\n\t\tdelta = delta || (Browser.any3d ? this.options.zoomDelta : 1);\r\n\t\treturn this.setZoom(this._zoom - delta, options);\r\n\t},\r\n\r\n\t// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified geographical point on the map\r\n\t// stationary (e.g. used internally for scroll zoom and double-click zoom).\r\n\t// @alternative\r\n\t// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this\r\n\t// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.\r\n\tsetZoomAround: function (latlng, zoom, options) {\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),\r\n\r\n\t\t    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\r\n\t\t    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));\r\n\r\n\t\treturn this.setView(newCenter, zoom, {zoom: options});\r\n\t},\r\n\r\n\t_getBoundsCenterZoom: function (bounds, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tbounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\r\n\t\t    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));\r\n\r\n\t\tzoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;\r\n\r\n\t\tif (zoom === Infinity) {\r\n\t\t\treturn {\r\n\t\t\t\tcenter: bounds.getCenter(),\r\n\t\t\t\tzoom: zoom\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),\r\n\r\n\t\t    swPoint = this.project(bounds.getSouthWest(), zoom),\r\n\t\t    nePoint = this.project(bounds.getNorthEast(), zoom),\r\n\t\t    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);\r\n\r\n\t\treturn {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom\r\n\t\t};\r\n\t},\r\n\r\n\t// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets a map view that contains the given geographical bounds with the\r\n\t// maximum zoom level possible.\r\n\tfitBounds: function (bounds, options) {\r\n\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthrow new Error('Bounds are not valid.');\r\n\t\t}\r\n\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.setView(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method fitWorld(options?: fitBounds options): this\r\n\t// Sets a map view that mostly contains the whole world with the maximum\r\n\t// zoom level possible.\r\n\tfitWorld: function (options) {\r\n\t\treturn this.fitBounds([[-90, -180], [90, 180]], options);\r\n\t},\r\n\r\n\t// @method panTo(latlng: LatLng, options?: Pan options): this\r\n\t// Pans the map to a given center.\r\n\tpanTo: function (center, options) { // (LatLng)\r\n\t\treturn this.setView(center, this._zoom, {pan: options});\r\n\t},\r\n\r\n\t// @method panBy(offset: Point, options?: Pan options): this\r\n\t// Pans the map by a given number of pixels (animated).\r\n\tpanBy: function (offset, options) {\r\n\t\toffset = toPoint(offset).round();\r\n\t\toptions = options || {};\r\n\r\n\t\tif (!offset.x && !offset.y) {\r\n\t\t\treturn this.fire('moveend');\r\n\t\t}\r\n\t\t// If we pan too far, Chrome gets issues with tiles\r\n\t\t// and makes them disappear or appear in the wrong place (slightly offset) #2602\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) {\r\n\t\t\tthis._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tif (!this._panAnim) {\r\n\t\t\tthis._panAnim = new PosAnimation();\r\n\r\n\t\t\tthis._panAnim.on({\r\n\t\t\t\t'step': this._onPanTransitionStep,\r\n\t\t\t\t'end': this._onPanTransitionEnd\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\t// don't fire movestart if animating inertia\r\n\t\tif (!options.noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\r\n\t\t// animate pan unless animate: false specified\r\n\t\tif (options.animate !== false) {\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-pan-anim');\r\n\r\n\t\t\tvar newPos = this._getMapPanePos().subtract(offset).round();\r\n\t\t\tthis._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);\r\n\t\t} else {\r\n\t\t\tthis._rawPanBy(offset);\r\n\t\t\tthis.fire('move').fire('moveend');\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this\r\n\t// Sets the view of the map (geographical center and zoom) performing a smooth\r\n\t// pan-zoom animation.\r\n\tflyTo: function (targetCenter, targetZoom, options) {\r\n\r\n\t\toptions = options || {};\r\n\t\tif (options.animate === false || !Browser.any3d) {\r\n\t\t\treturn this.setView(targetCenter, targetZoom, options);\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tvar from = this.project(this.getCenter()),\r\n\t\t    to = this.project(targetCenter),\r\n\t\t    size = this.getSize(),\r\n\t\t    startZoom = this._zoom;\r\n\r\n\t\ttargetCenter = toLatLng(targetCenter);\r\n\t\ttargetZoom = targetZoom === undefined ? startZoom : targetZoom;\r\n\r\n\t\tvar w0 = Math.max(size.x, size.y),\r\n\t\t    w1 = w0 * this.getZoomScale(startZoom, targetZoom),\r\n\t\t    u1 = (to.distanceTo(from)) || 1,\r\n\t\t    rho = 1.42,\r\n\t\t    rho2 = rho * rho;\r\n\r\n\t\tfunction r(i) {\r\n\t\t\tvar s1 = i ? -1 : 1,\r\n\t\t\t    s2 = i ? w1 : w0,\r\n\t\t\t    t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,\r\n\t\t\t    b1 = 2 * s2 * rho2 * u1,\r\n\t\t\t    b = t1 / b1,\r\n\t\t\t    sq = Math.sqrt(b * b + 1) - b;\r\n\r\n\t\t\t    // workaround for floating point precision bug when sq = 0, log = -Infinite,\r\n\t\t\t    // thus triggering an infinite loop in flyTo\r\n\t\t\t    var log = sq < 0.000000001 ? -18 : Math.log(sq);\r\n\r\n\t\t\treturn log;\r\n\t\t}\r\n\r\n\t\tfunction sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }\r\n\t\tfunction cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }\r\n\t\tfunction tanh(n) { return sinh(n) / cosh(n); }\r\n\r\n\t\tvar r0 = r(0);\r\n\r\n\t\tfunction w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }\r\n\t\tfunction u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }\r\n\r\n\t\tfunction easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }\r\n\r\n\t\tvar start = Date.now(),\r\n\t\t    S = (r(1) - r0) / rho,\r\n\t\t    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;\r\n\r\n\t\tfunction frame() {\r\n\t\t\tvar t = (Date.now() - start) / duration,\r\n\t\t\t    s = easeOut(t) * S;\r\n\r\n\t\t\tif (t <= 1) {\r\n\t\t\t\tthis._flyToFrame = Util.requestAnimFrame(frame, this);\r\n\r\n\t\t\t\tthis._move(\r\n\t\t\t\t\tthis.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),\r\n\t\t\t\t\tthis.getScaleZoom(w0 / w(s), startZoom),\r\n\t\t\t\t\t{flyTo: true});\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis\r\n\t\t\t\t\t._move(targetCenter, targetZoom)\r\n\t\t\t\t\t._moveEnd(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._moveStart(true, options.noMoveStart);\r\n\r\n\t\tframe.call(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this\r\n\t// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),\r\n\t// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).\r\n\tflyToBounds: function (bounds, options) {\r\n\t\tvar target = this._getBoundsCenterZoom(bounds, options);\r\n\t\treturn this.flyTo(target.center, target.zoom, options);\r\n\t},\r\n\r\n\t// @method setMaxBounds(bounds: LatLngBounds): this\r\n\t// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).\r\n\tsetMaxBounds: function (bounds) {\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this.listens('moveend', this._panInsideMaxBounds)) {\r\n\t\t\tthis.off('moveend', this._panInsideMaxBounds);\r\n\t\t}\r\n\r\n\t\tif (!bounds.isValid()) {\r\n\t\t\tthis.options.maxBounds = null;\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tthis.options.maxBounds = bounds;\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\tthis._panInsideMaxBounds();\r\n\t\t}\r\n\r\n\t\treturn this.on('moveend', this._panInsideMaxBounds);\r\n\t},\r\n\r\n\t// @method setMinZoom(zoom: Number): this\r\n\t// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).\r\n\tsetMinZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.minZoom;\r\n\t\tthis.options.minZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() < this.options.minZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setMaxZoom(zoom: Number): this\r\n\t// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).\r\n\tsetMaxZoom: function (zoom) {\r\n\t\tvar oldZoom = this.options.maxZoom;\r\n\t\tthis.options.maxZoom = zoom;\r\n\r\n\t\tif (this._loaded && oldZoom !== zoom) {\r\n\t\t\tthis.fire('zoomlevelschange');\r\n\r\n\t\t\tif (this.getZoom() > this.options.maxZoom) {\r\n\t\t\t\treturn this.setZoom(zoom);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this\r\n\t// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.\r\n\tpanInsideBounds: function (bounds, options) {\r\n\t\tthis._enforcingBounds = true;\r\n\t\tvar center = this.getCenter(),\r\n\t\t    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));\r\n\r\n\t\tif (!center.equals(newCenter)) {\r\n\t\t\tthis.panTo(newCenter, options);\r\n\t\t}\r\n\r\n\t\tthis._enforcingBounds = false;\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method panInside(latlng: LatLng, options?: padding options): this\r\n\t// Pans the map the minimum amount to make the `latlng` visible. Use\r\n\t// padding options to fit the display to more restricted bounds.\r\n\t// If `latlng` is already within the (optionally padded) display bounds,\r\n\t// the map will not be panned.\r\n\tpanInside: function (latlng, options) {\r\n\t\toptions = options || {};\r\n\r\n\t\tvar paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),\r\n\t\t    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),\r\n\t\t    pixelCenter = this.project(this.getCenter()),\r\n\t\t    pixelPoint = this.project(latlng),\r\n\t\t    pixelBounds = this.getPixelBounds(),\r\n\t\t    paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),\r\n\t\t    paddedSize = paddedBounds.getSize();\r\n\r\n\t\tif (!paddedBounds.contains(pixelPoint)) {\r\n\t\t\tthis._enforcingBounds = true;\r\n\t\t\tvar centerOffset = pixelPoint.subtract(paddedBounds.getCenter());\r\n\t\t\tvar offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);\r\n\t\t\tpixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;\r\n\t\t\tpixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;\r\n\t\t\tthis.panTo(this.unproject(pixelCenter), options);\r\n\t\t\tthis._enforcingBounds = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method invalidateSize(options: Zoom/pan options): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default. If `options.pan` is `false`, panning will not occur.\r\n\t// If `options.debounceMoveend` is `true`, it will delay `moveend` event so\r\n\t// that it doesn't happen often even if the method is called many\r\n\t// times in a row.\r\n\r\n\t// @alternative\r\n\t// @method invalidateSize(animate: Boolean): this\r\n\t// Checks if the map container size changed and updates the map if so —\r\n\t// call it after you've changed the map size dynamically, also animating\r\n\t// pan by default.\r\n\tinvalidateSize: function (options) {\r\n\t\tif (!this._loaded) { return this; }\r\n\r\n\t\toptions = Util.extend({\r\n\t\t\tanimate: false,\r\n\t\t\tpan: true\r\n\t\t}, options === true ? {animate: true} : options);\r\n\r\n\t\tvar oldSize = this.getSize();\r\n\t\tthis._sizeChanged = true;\r\n\t\tthis._lastCenter = null;\r\n\r\n\t\tvar newSize = this.getSize(),\r\n\t\t    oldCenter = oldSize.divideBy(2).round(),\r\n\t\t    newCenter = newSize.divideBy(2).round(),\r\n\t\t    offset = oldCenter.subtract(newCenter);\r\n\r\n\t\tif (!offset.x && !offset.y) { return this; }\r\n\r\n\t\tif (options.animate && options.pan) {\r\n\t\t\tthis.panBy(offset);\r\n\r\n\t\t} else {\r\n\t\t\tif (options.pan) {\r\n\t\t\t\tthis._rawPanBy(offset);\r\n\t\t\t}\r\n\r\n\t\t\tthis.fire('move');\r\n\r\n\t\t\tif (options.debounceMoveend) {\r\n\t\t\t\tclearTimeout(this._sizeTimer);\r\n\t\t\t\tthis._sizeTimer = setTimeout(Util.bind(this.fire, this, 'moveend'), 200);\r\n\t\t\t} else {\r\n\t\t\t\tthis.fire('moveend');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @section Map state change events\r\n\t\t// @event resize: ResizeEvent\r\n\t\t// Fired when the map is resized.\r\n\t\treturn this.fire('resize', {\r\n\t\t\toldSize: oldSize,\r\n\t\t\tnewSize: newSize\r\n\t\t});\r\n\t},\r\n\r\n\t// @section Methods for modifying map state\r\n\t// @method stop(): this\r\n\t// Stops the currently running `panTo` or `flyTo` animation, if any.\r\n\tstop: function () {\r\n\t\tthis.setZoom(this._limitZoom(this._zoom));\r\n\t\tif (!this.options.zoomSnap) {\r\n\t\t\tthis.fire('viewreset');\r\n\t\t}\r\n\t\treturn this._stop();\r\n\t},\r\n\r\n\t// @section Geolocation methods\r\n\t// @method locate(options?: Locate options): this\r\n\t// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)\r\n\t// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,\r\n\t// and optionally sets the map view to the user's location with respect to\r\n\t// detection accuracy (or to the world view if geolocation failed).\r\n\t// Note that, if your page doesn't use HTTPS, this method will fail in\r\n\t// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))\r\n\t// See `Locate options` for more details.\r\n\tlocate: function (options) {\r\n\r\n\t\toptions = this._locateOptions = Util.extend({\r\n\t\t\ttimeout: 10000,\r\n\t\t\twatch: false\r\n\t\t\t// setView: false\r\n\t\t\t// maxZoom: <Number>\r\n\t\t\t// maximumAge: 0\r\n\t\t\t// enableHighAccuracy: false\r\n\t\t}, options);\r\n\r\n\t\tif (!('geolocation' in navigator)) {\r\n\t\t\tthis._handleGeolocationError({\r\n\t\t\t\tcode: 0,\r\n\t\t\t\tmessage: 'Geolocation not supported.'\r\n\t\t\t});\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar onResponse = Util.bind(this._handleGeolocationResponse, this),\r\n\t\t    onError = Util.bind(this._handleGeolocationError, this);\r\n\r\n\t\tif (options.watch) {\r\n\t\t\tthis._locationWatchId =\r\n\t\t\t        navigator.geolocation.watchPosition(onResponse, onError, options);\r\n\t\t} else {\r\n\t\t\tnavigator.geolocation.getCurrentPosition(onResponse, onError, options);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method stopLocate(): this\r\n\t// Stops watching location previously initiated by `map.locate({watch: true})`\r\n\t// and aborts resetting the map view if map.locate was called with\r\n\t// `{setView: true}`.\r\n\tstopLocate: function () {\r\n\t\tif (navigator.geolocation && navigator.geolocation.clearWatch) {\r\n\t\t\tnavigator.geolocation.clearWatch(this._locationWatchId);\r\n\t\t}\r\n\t\tif (this._locateOptions) {\r\n\t\t\tthis._locateOptions.setView = false;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_handleGeolocationError: function (error) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar c = error.code,\r\n\t\t    message = error.message ||\r\n\t\t            (c === 1 ? 'permission denied' :\r\n\t\t            (c === 2 ? 'position unavailable' : 'timeout'));\r\n\r\n\t\tif (this._locateOptions.setView && !this._loaded) {\r\n\t\t\tthis.fitWorld();\r\n\t\t}\r\n\r\n\t\t// @section Location events\r\n\t\t// @event locationerror: ErrorEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method) failed.\r\n\t\tthis.fire('locationerror', {\r\n\t\t\tcode: c,\r\n\t\t\tmessage: 'Geolocation error: ' + message + '.'\r\n\t\t});\r\n\t},\r\n\r\n\t_handleGeolocationResponse: function (pos) {\r\n\t\tif (!this._container._leaflet_id) { return; }\r\n\r\n\t\tvar lat = pos.coords.latitude,\r\n\t\t    lng = pos.coords.longitude,\r\n\t\t    latlng = new LatLng(lat, lng),\r\n\t\t    bounds = latlng.toBounds(pos.coords.accuracy * 2),\r\n\t\t    options = this._locateOptions;\r\n\r\n\t\tif (options.setView) {\r\n\t\t\tvar zoom = this.getBoundsZoom(bounds);\r\n\t\t\tthis.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);\r\n\t\t}\r\n\r\n\t\tvar data = {\r\n\t\t\tlatlng: latlng,\r\n\t\t\tbounds: bounds,\r\n\t\t\ttimestamp: pos.timestamp\r\n\t\t};\r\n\r\n\t\tfor (var i in pos.coords) {\r\n\t\t\tif (typeof pos.coords[i] === 'number') {\r\n\t\t\t\tdata[i] = pos.coords[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// @event locationfound: LocationEvent\r\n\t\t// Fired when geolocation (using the [`locate`](#map-locate) method)\r\n\t\t// went successfully.\r\n\t\tthis.fire('locationfound', data);\r\n\t},\r\n\r\n\t// TODO Appropriate docs section?\r\n\t// @section Other Methods\r\n\t// @method addHandler(name: String, HandlerClass: Function): this\r\n\t// Adds a new `Handler` to the map, given its name and constructor function.\r\n\taddHandler: function (name, HandlerClass) {\r\n\t\tif (!HandlerClass) { return this; }\r\n\r\n\t\tvar handler = this[name] = new HandlerClass(this);\r\n\r\n\t\tthis._handlers.push(handler);\r\n\r\n\t\tif (this.options[name]) {\r\n\t\t\thandler.enable();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove(): this\r\n\t// Destroys the map and clears all related event listeners.\r\n\tremove: function () {\r\n\r\n\t\tthis._initEvents(true);\r\n\t\tif (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }\r\n\r\n\t\tif (this._containerId !== this._container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is being reused by another instance');\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\t// throws error in IE6-8\r\n\t\t\tdelete this._container._leaflet_id;\r\n\t\t\tdelete this._containerId;\r\n\t\t} catch (e) {\r\n\t\t\t/*eslint-disable */\r\n\t\t\tthis._container._leaflet_id = undefined;\r\n\t\t\t/* eslint-enable */\r\n\t\t\tthis._containerId = undefined;\r\n\t\t}\r\n\r\n\t\tif (this._locationWatchId !== undefined) {\r\n\t\t\tthis.stopLocate();\r\n\t\t}\r\n\r\n\t\tthis._stop();\r\n\r\n\t\tDomUtil.remove(this._mapPane);\r\n\r\n\t\tif (this._clearControlPos) {\r\n\t\t\tthis._clearControlPos();\r\n\t\t}\r\n\t\tif (this._resizeRequest) {\r\n\t\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\t\tthis._resizeRequest = null;\r\n\t\t}\r\n\r\n\t\tthis._clearHandlers();\r\n\r\n\t\tif (this._loaded) {\r\n\t\t\t// @section Map state change events\r\n\t\t\t// @event unload: Event\r\n\t\t\t// Fired when the map is destroyed with [remove](#map-remove) method.\r\n\t\t\tthis.fire('unload');\r\n\t\t}\r\n\r\n\t\tvar i;\r\n\t\tfor (i in this._layers) {\r\n\t\t\tthis._layers[i].remove();\r\n\t\t}\r\n\t\tfor (i in this._panes) {\r\n\t\t\tDomUtil.remove(this._panes[i]);\r\n\t\t}\r\n\r\n\t\tthis._layers = [];\r\n\t\tthis._panes = [];\r\n\t\tdelete this._mapPane;\r\n\t\tdelete this._renderer;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\t// @method createPane(name: String, container?: HTMLElement): HTMLElement\r\n\t// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,\r\n\t// then returns it. The pane is created as a child of `container`, or\r\n\t// as a child of the main map pane if not set.\r\n\tcreatePane: function (name, container) {\r\n\t\tvar className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),\r\n\t\t    pane = DomUtil.create('div', className, container || this._mapPane);\r\n\r\n\t\tif (name) {\r\n\t\t\tthis._panes[name] = pane;\r\n\t\t}\r\n\t\treturn pane;\r\n\t},\r\n\r\n\t// @section Methods for Getting Map State\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the geographical center of the map view\r\n\tgetCenter: function () {\r\n\t\tthis._checkIfLoaded();\r\n\r\n\t\tif (this._lastCenter && !this._moved()) {\r\n\t\t\treturn this._lastCenter.clone();\r\n\t\t}\r\n\t\treturn this.layerPointToLatLng(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// @method getZoom(): Number\r\n\t// Returns the current zoom level of the map view\r\n\tgetZoom: function () {\r\n\t\treturn this._zoom;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the geographical bounds visible in the current map view\r\n\tgetBounds: function () {\r\n\t\tvar bounds = this.getPixelBounds(),\r\n\t\t    sw = this.unproject(bounds.getBottomLeft()),\r\n\t\t    ne = this.unproject(bounds.getTopRight());\r\n\r\n\t\treturn new LatLngBounds(sw, ne);\r\n\t},\r\n\r\n\t// @method getMinZoom(): Number\r\n\t// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.\r\n\tgetMinZoom: function () {\r\n\t\treturn this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;\r\n\t},\r\n\r\n\t// @method getMaxZoom(): Number\r\n\t// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).\r\n\tgetMaxZoom: function () {\r\n\t\treturn this.options.maxZoom === undefined ?\r\n\t\t\t(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :\r\n\t\t\tthis.options.maxZoom;\r\n\t},\r\n\r\n\t// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number\r\n\t// Returns the maximum zoom level on which the given bounds fit to the map\r\n\t// view in its entirety. If `inside` (optional) is set to `true`, the method\r\n\t// instead returns the minimum zoom level on which the map view fits into\r\n\t// the given bounds in its entirety.\r\n\tgetBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number\r\n\t\tbounds = toLatLngBounds(bounds);\r\n\t\tpadding = toPoint(padding || [0, 0]);\r\n\r\n\t\tvar zoom = this.getZoom() || 0,\r\n\t\t    min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    nw = bounds.getNorthWest(),\r\n\t\t    se = bounds.getSouthEast(),\r\n\t\t    size = this.getSize().subtract(padding),\r\n\t\t    boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1,\r\n\t\t    scalex = size.x / boundsSize.x,\r\n\t\t    scaley = size.y / boundsSize.y,\r\n\t\t    scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);\r\n\r\n\t\tzoom = this.getScaleZoom(scale, zoom);\r\n\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level\r\n\t\t\tzoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;\r\n\t\t}\r\n\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t// @method getSize(): Point\r\n\t// Returns the current size of the map container (in pixels).\r\n\tgetSize: function () {\r\n\t\tif (!this._size || this._sizeChanged) {\r\n\t\t\tthis._size = new Point(\r\n\t\t\t\tthis._container.clientWidth || 0,\r\n\t\t\t\tthis._container.clientHeight || 0);\r\n\r\n\t\t\tthis._sizeChanged = false;\r\n\t\t}\r\n\t\treturn this._size.clone();\r\n\t},\r\n\r\n\t// @method getPixelBounds(): Bounds\r\n\t// Returns the bounds of the current map view in projected pixel\r\n\t// coordinates (sometimes useful in layer and overlay implementations).\r\n\tgetPixelBounds: function (center, zoom) {\r\n\t\tvar topLeftPoint = this._getTopLeftPoint(center, zoom);\r\n\t\treturn new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));\r\n\t},\r\n\r\n\t// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to\r\n\t// the map pane? \"left point of the map layer\" can be confusing, specially\r\n\t// since there can be negative offsets.\r\n\t// @method getPixelOrigin(): Point\r\n\t// Returns the projected pixel coordinates of the top left point of\r\n\t// the map layer (useful in custom layer and overlay implementations).\r\n\tgetPixelOrigin: function () {\r\n\t\tthis._checkIfLoaded();\r\n\t\treturn this._pixelOrigin;\r\n\t},\r\n\r\n\t// @method getPixelWorldBounds(zoom?: Number): Bounds\r\n\t// Returns the world's bounds in pixel coordinates for zoom level `zoom`.\r\n\t// If `zoom` is omitted, the map's current zoom level is used.\r\n\tgetPixelWorldBounds: function (zoom) {\r\n\t\treturn this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method getPane(pane: String|HTMLElement): HTMLElement\r\n\t// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).\r\n\tgetPane: function (pane) {\r\n\t\treturn typeof pane === 'string' ? this._panes[pane] : pane;\r\n\t},\r\n\r\n\t// @method getPanes(): Object\r\n\t// Returns a plain object containing the names of all [panes](#map-pane) as keys and\r\n\t// the panes as values.\r\n\tgetPanes: function () {\r\n\t\treturn this._panes;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTML element that contains the map.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\r\n\t// @section Conversion Methods\r\n\r\n\t// @method getZoomScale(toZoom: Number, fromZoom: Number): Number\r\n\t// Returns the scale factor to be applied to a map transition from zoom level\r\n\t// `fromZoom` to `toZoom`. Used internally to help with zoom animations.\r\n\tgetZoomScale: function (toZoom, fromZoom) {\r\n\t\t// TODO replace with universal implementation after refactoring projections\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\treturn crs.scale(toZoom) / crs.scale(fromZoom);\r\n\t},\r\n\r\n\t// @method getScaleZoom(scale: Number, fromZoom: Number): Number\r\n\t// Returns the zoom level that the map would end up at, if it is at `fromZoom`\r\n\t// level and everything is scaled by a factor of `scale`. Inverse of\r\n\t// [`getZoomScale`](#map-getZoomScale).\r\n\tgetScaleZoom: function (scale, fromZoom) {\r\n\t\tvar crs = this.options.crs;\r\n\t\tfromZoom = fromZoom === undefined ? this._zoom : fromZoom;\r\n\t\tvar zoom = crs.zoom(scale * crs.scale(fromZoom));\r\n\t\treturn isNaN(zoom) ? Infinity : zoom;\r\n\t},\r\n\r\n\t// @method project(latlng: LatLng, zoom: Number): Point\r\n\t// Projects a geographical coordinate `LatLng` according to the projection\r\n\t// of the map's CRS, then scales it according to `zoom` and the CRS's\r\n\t// `Transformation`. The result is pixel coordinate relative to\r\n\t// the CRS origin.\r\n\tproject: function (latlng, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.latLngToPoint(toLatLng(latlng), zoom);\r\n\t},\r\n\r\n\t// @method unproject(point: Point, zoom: Number): LatLng\r\n\t// Inverse of [`project`](#map-project).\r\n\tunproject: function (point, zoom) {\r\n\t\tzoom = zoom === undefined ? this._zoom : zoom;\r\n\t\treturn this.options.crs.pointToLatLng(toPoint(point), zoom);\r\n\t},\r\n\r\n\t// @method layerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding geographical coordinate (for the current zoom level).\r\n\tlayerPointToLatLng: function (point) {\r\n\t\tvar projectedPoint = toPoint(point).add(this.getPixelOrigin());\r\n\t\treturn this.unproject(projectedPoint);\r\n\t},\r\n\r\n\t// @method latLngToLayerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the [origin pixel](#map-getpixelorigin).\r\n\tlatLngToLayerPoint: function (latlng) {\r\n\t\tvar projectedPoint = this.project(toLatLng(latlng))._round();\r\n\t\treturn projectedPoint._subtract(this.getPixelOrigin());\r\n\t},\r\n\r\n\t// @method wrapLatLng(latlng: LatLng): LatLng\r\n\t// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the\r\n\t// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the\r\n\t// CRS's bounds.\r\n\t// By default this means longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees.\r\n\twrapLatLng: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLng(toLatLng(latlng));\r\n\t},\r\n\r\n\t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n\t// Returns a `LatLngBounds` with the same size as the given one, ensuring that\r\n\t// its center is within the CRS's bounds.\r\n\t// By default this means the center longitude is wrapped around the dateline so its\r\n\t// value is between -180 and +180 degrees, and the majority of the bounds\r\n\t// overlaps the CRS's bounds.\r\n\twrapLatLngBounds: function (latlng) {\r\n\t\treturn this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));\r\n\t},\r\n\r\n\t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n\t// Returns the distance between two geographical coordinates according to\r\n\t// the map's CRS. By default this measures distance in meters.\r\n\tdistance: function (latlng1, latlng2) {\r\n\t\treturn this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));\r\n\t},\r\n\r\n\t// @method containerPointToLayerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the map container, returns the corresponding\r\n\t// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).\r\n\tcontainerPointToLayerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method layerPointToContainerPoint(point: Point): Point\r\n\t// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),\r\n\t// returns the corresponding pixel coordinate relative to the map container.\r\n\tlayerPointToContainerPoint: function (point) { // (Point)\r\n\t\treturn toPoint(point).add(this._getMapPanePos());\r\n\t},\r\n\r\n\t// @method containerPointToLatLng(point: Point): LatLng\r\n\t// Given a pixel coordinate relative to the map container, returns\r\n\t// the corresponding geographical coordinate (for the current zoom level).\r\n\tcontainerPointToLatLng: function (point) {\r\n\t\tvar layerPoint = this.containerPointToLayerPoint(toPoint(point));\r\n\t\treturn this.layerPointToLatLng(layerPoint);\r\n\t},\r\n\r\n\t// @method latLngToContainerPoint(latlng: LatLng): Point\r\n\t// Given a geographical coordinate, returns the corresponding pixel coordinate\r\n\t// relative to the map container.\r\n\tlatLngToContainerPoint: function (latlng) {\r\n\t\treturn this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));\r\n\t},\r\n\r\n\t// @method mouseEventToContainerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to the\r\n\t// map container where the event took place.\r\n\tmouseEventToContainerPoint: function (e) {\r\n\t\treturn DomEvent.getMousePosition(e, this._container);\r\n\t},\r\n\r\n\t// @method mouseEventToLayerPoint(ev: MouseEvent): Point\r\n\t// Given a MouseEvent object, returns the pixel coordinate relative to\r\n\t// the [origin pixel](#map-getpixelorigin) where the event took place.\r\n\tmouseEventToLayerPoint: function (e) {\r\n\t\treturn this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));\r\n\t},\r\n\r\n\t// @method mouseEventToLatLng(ev: MouseEvent): LatLng\r\n\t// Given a MouseEvent object, returns geographical coordinate where the\r\n\t// event took place.\r\n\tmouseEventToLatLng: function (e) { // (MouseEvent)\r\n\t\treturn this.layerPointToLatLng(this.mouseEventToLayerPoint(e));\r\n\t},\r\n\r\n\r\n\t// map initialization methods\r\n\r\n\t_initContainer: function (id) {\r\n\t\tvar container = this._container = DomUtil.get(id);\r\n\r\n\t\tif (!container) {\r\n\t\t\tthrow new Error('Map container not found.');\r\n\t\t} else if (container._leaflet_id) {\r\n\t\t\tthrow new Error('Map container is already initialized.');\r\n\t\t}\r\n\r\n\t\tDomEvent.on(container, 'scroll', this._onScroll, this);\r\n\t\tthis._containerId = Util.stamp(container);\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar container = this._container;\r\n\r\n\t\tthis._fadeAnimated = this.options.fadeAnimation && Browser.any3d;\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-container' +\r\n\t\t\t(Browser.touch ? ' leaflet-touch' : '') +\r\n\t\t\t(Browser.retina ? ' leaflet-retina' : '') +\r\n\t\t\t(Browser.ielt9 ? ' leaflet-oldie' : '') +\r\n\t\t\t(Browser.safari ? ' leaflet-safari' : '') +\r\n\t\t\t(this._fadeAnimated ? ' leaflet-fade-anim' : ''));\r\n\r\n\t\tvar position = DomUtil.getStyle(container, 'position');\r\n\r\n\t\tif (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {\r\n\t\t\tcontainer.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis._initPanes();\r\n\r\n\t\tif (this._initControlPos) {\r\n\t\t\tthis._initControlPos();\r\n\t\t}\r\n\t},\r\n\r\n\t_initPanes: function () {\r\n\t\tvar panes = this._panes = {};\r\n\t\tthis._paneRenderers = {};\r\n\r\n\t\t// @section\r\n\t\t//\r\n\t\t// Panes are DOM elements used to control the ordering of layers on the map. You\r\n\t\t// can access panes with [`map.getPane`](#map-getpane) or\r\n\t\t// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the\r\n\t\t// [`map.createPane`](#map-createpane) method.\r\n\t\t//\r\n\t\t// Every map has the following default panes that differ only in zIndex.\r\n\t\t//\r\n\t\t// @pane mapPane: HTMLElement = 'auto'\r\n\t\t// Pane that contains all other map panes\r\n\r\n\t\tthis._mapPane = this.createPane('mapPane', this._container);\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\t// @pane tilePane: HTMLElement = 200\r\n\t\t// Pane for `GridLayer`s and `TileLayer`s\r\n\t\tthis.createPane('tilePane');\r\n\t\t// @pane overlayPane: HTMLElement = 400\r\n\t\t// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s\r\n\t\tthis.createPane('overlayPane');\r\n\t\t// @pane shadowPane: HTMLElement = 500\r\n\t\t// Pane for overlay shadows (e.g. `Marker` shadows)\r\n\t\tthis.createPane('shadowPane');\r\n\t\t// @pane markerPane: HTMLElement = 600\r\n\t\t// Pane for `Icon`s of `Marker`s\r\n\t\tthis.createPane('markerPane');\r\n\t\t// @pane tooltipPane: HTMLElement = 650\r\n\t\t// Pane for `Tooltip`s.\r\n\t\tthis.createPane('tooltipPane');\r\n\t\t// @pane popupPane: HTMLElement = 700\r\n\t\t// Pane for `Popup`s.\r\n\t\tthis.createPane('popupPane');\r\n\r\n\t\tif (!this.options.markerZoomAnimation) {\r\n\t\t\tDomUtil.addClass(panes.markerPane, 'leaflet-zoom-hide');\r\n\t\t\tDomUtil.addClass(panes.shadowPane, 'leaflet-zoom-hide');\r\n\t\t}\r\n\t},\r\n\r\n\r\n\t// private methods that modify map state\r\n\r\n\t// @section Map state change events\r\n\t_resetView: function (center, zoom, noMoveStart) {\r\n\t\tDomUtil.setPosition(this._mapPane, new Point(0, 0));\r\n\r\n\t\tvar loading = !this._loaded;\r\n\t\tthis._loaded = true;\r\n\t\tzoom = this._limitZoom(zoom);\r\n\r\n\t\tthis.fire('viewprereset');\r\n\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\t\tthis\r\n\t\t\t._moveStart(zoomChanged, noMoveStart)\r\n\t\t\t._move(center, zoom)\r\n\t\t\t._moveEnd(zoomChanged);\r\n\r\n\t\t// @event viewreset: Event\r\n\t\t// Fired when the map needs to redraw its content (this usually happens\r\n\t\t// on map zoom or load). Very useful for creating custom overlays.\r\n\t\tthis.fire('viewreset');\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the map is initialized (when its center and zoom are set\r\n\t\t// for the first time).\r\n\t\tif (loading) {\r\n\t\t\tthis.fire('load');\r\n\t\t}\r\n\t},\r\n\r\n\t_moveStart: function (zoomChanged, noMoveStart) {\r\n\t\t// @event zoomstart: Event\r\n\t\t// Fired when the map zoom is about to change (e.g. before zoom animation).\r\n\t\t// @event movestart: Event\r\n\t\t// Fired when the view of the map starts changing (e.g. user starts dragging the map).\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomstart');\r\n\t\t}\r\n\t\tif (!noMoveStart) {\r\n\t\t\tthis.fire('movestart');\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_move: function (center, zoom, data, supressEvent) {\r\n\t\tif (zoom === undefined) {\r\n\t\t\tzoom = this._zoom;\r\n\t\t}\r\n\t\tvar zoomChanged = this._zoom !== zoom;\r\n\r\n\t\tthis._zoom = zoom;\r\n\t\tthis._lastCenter = center;\r\n\t\tthis._pixelOrigin = this._getNewPixelOrigin(center);\r\n\r\n\t\tif (!supressEvent) {\r\n\t\t\t// @event zoom: Event\r\n\t\t\t// Fired repeatedly during any change in zoom level,\r\n\t\t\t// including zoom and fly animations.\r\n\t\t\tif (zoomChanged || (data && data.pinch)) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\t\tthis.fire('zoom', data);\r\n\t\t\t}\r\n\r\n\t\t\t// @event move: Event\r\n\t\t\t// Fired repeatedly during any movement of the map,\r\n\t\t\t// including pan and fly animations.\r\n\t\t\tthis.fire('move', data);\r\n\t\t} else if (data && data.pinch) {\t// Always fire 'zoom' if pinching because #3530\r\n\t\t\tthis.fire('zoom', data);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_moveEnd: function (zoomChanged) {\r\n\t\t// @event zoomend: Event\r\n\t\t// Fired when the map zoom changed, after any animations.\r\n\t\tif (zoomChanged) {\r\n\t\t\tthis.fire('zoomend');\r\n\t\t}\r\n\r\n\t\t// @event moveend: Event\r\n\t\t// Fired when the center of the map stops changing\r\n\t\t// (e.g. user stopped dragging the map or after non-centered zoom).\r\n\t\treturn this.fire('moveend');\r\n\t},\r\n\r\n\t_stop: function () {\r\n\t\tUtil.cancelAnimFrame(this._flyToFrame);\r\n\t\tif (this._panAnim) {\r\n\t\t\tthis._panAnim.stop();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_rawPanBy: function (offset) {\r\n\t\tDomUtil.setPosition(this._mapPane, this._getMapPanePos().subtract(offset));\r\n\t},\r\n\r\n\t_getZoomSpan: function () {\r\n\t\treturn this.getMaxZoom() - this.getMinZoom();\r\n\t},\r\n\r\n\t_panInsideMaxBounds: function () {\r\n\t\tif (!this._enforcingBounds) {\r\n\t\t\tthis.panInsideBounds(this.options.maxBounds);\r\n\t\t}\r\n\t},\r\n\r\n\t_checkIfLoaded: function () {\r\n\t\tif (!this._loaded) {\r\n\t\t\tthrow new Error('Set map center and zoom first.');\r\n\t\t}\r\n\t},\r\n\r\n\t// DOM event handling\r\n\r\n\t// @section Interaction events\r\n\t_initEvents: function (remove) {\r\n\t\tthis._targets = {};\r\n\t\tthis._targets[Util.stamp(this._container)] = this;\r\n\r\n\t\tvar onOff = remove ? DomEvent.off : DomEvent.on;\r\n\r\n\t\t// @event click: MouseEvent\r\n\t\t// Fired when the user clicks (or taps) the map.\r\n\t\t// @event dblclick: MouseEvent\r\n\t\t// Fired when the user double-clicks (or double-taps) the map.\r\n\t\t// @event mousedown: MouseEvent\r\n\t\t// Fired when the user pushes the mouse button on the map.\r\n\t\t// @event mouseup: MouseEvent\r\n\t\t// Fired when the user releases the mouse button on the map.\r\n\t\t// @event mouseover: MouseEvent\r\n\t\t// Fired when the mouse enters the map.\r\n\t\t// @event mouseout: MouseEvent\r\n\t\t// Fired when the mouse leaves the map.\r\n\t\t// @event mousemove: MouseEvent\r\n\t\t// Fired while the mouse moves over the map.\r\n\t\t// @event contextmenu: MouseEvent\r\n\t\t// Fired when the user pushes the right mouse button on the map, prevents\r\n\t\t// default browser context menu from showing if there are listeners on\r\n\t\t// this event. Also fired on mobile when the user holds a single touch\r\n\t\t// for a second (also called long press).\r\n\t\t// @event keypress: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.\r\n\t\t// @event keydown: KeyboardEvent\r\n\t\t// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,\r\n\t\t// the `keydown` event is fired for keys that produce a character value and for keys\r\n\t\t// that do not produce a character value.\r\n\t\t// @event keyup: KeyboardEvent\r\n\t\t// Fired when the user releases a key from the keyboard while the map is focused.\r\n\t\tonOff(this._container, 'click dblclick mousedown mouseup ' +\r\n\t\t\t'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);\r\n\r\n\t\tif (this.options.trackResize) {\r\n\t\t\tonOff(window, 'resize', this._onResize, this);\r\n\t\t}\r\n\r\n\t\tif (Browser.any3d && this.options.transform3DLimit) {\r\n\t\t\t(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);\r\n\t\t}\r\n\t},\r\n\r\n\t_onResize: function () {\r\n\t\tUtil.cancelAnimFrame(this._resizeRequest);\r\n\t\tthis._resizeRequest = Util.requestAnimFrame(\r\n\t\t        function () { this.invalidateSize({debounceMoveend: true}); }, this);\r\n\t},\r\n\r\n\t_onScroll: function () {\r\n\t\tthis._container.scrollTop  = 0;\r\n\t\tthis._container.scrollLeft = 0;\r\n\t},\r\n\r\n\t_onMoveEnd: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\tif (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {\r\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have\r\n\t\t\t// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/\r\n\t\t\tthis._resetView(this.getCenter(), this.getZoom());\r\n\t\t}\r\n\t},\r\n\r\n\t_findEventTargets: function (e, type) {\r\n\t\tvar targets = [],\r\n\t\t    target,\r\n\t\t    isHover = type === 'mouseout' || type === 'mouseover',\r\n\t\t    src = e.target || e.srcElement,\r\n\t\t    dragging = false;\r\n\r\n\t\twhile (src) {\r\n\t\t\ttarget = this._targets[Util.stamp(src)];\r\n\t\t\tif (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {\r\n\t\t\t\t// Prevent firing click after you just dragged an object.\r\n\t\t\t\tdragging = true;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (target && target.listens(type, true)) {\r\n\t\t\t\tif (isHover && !DomEvent.isExternalTarget(src, e)) { break; }\r\n\t\t\t\ttargets.push(target);\r\n\t\t\t\tif (isHover) { break; }\r\n\t\t\t}\r\n\t\t\tif (src === this._container) { break; }\r\n\t\t\tsrc = src.parentNode;\r\n\t\t}\r\n\t\tif (!targets.length && !dragging && !isHover && this.listens(type, true)) {\r\n\t\t\ttargets = [this];\r\n\t\t}\r\n\t\treturn targets;\r\n\t},\r\n\r\n\t_isClickDisabled: function (el) {\r\n\t\twhile (el && el !== this._container) {\r\n\t\t\tif (el['_leaflet_disable_click']) { return true; }\r\n\t\t\tel = el.parentNode;\r\n\t\t}\r\n\t},\r\n\r\n\t_handleDOMEvent: function (e) {\r\n\t\tvar el = (e.target || e.srcElement);\r\n\t\tif (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar type = e.type;\r\n\r\n\t\tif (type === 'mousedown') {\r\n\t\t\t// prevents outline when clicking on keyboard-focusable element\r\n\t\t\tDomUtil.preventOutline(el);\r\n\t\t}\r\n\r\n\t\tthis._fireDOMEvent(e, type);\r\n\t},\r\n\r\n\t_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],\r\n\r\n\t_fireDOMEvent: function (e, type, canvasTargets) {\r\n\r\n\t\tif (e.type === 'click') {\r\n\t\t\t// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).\r\n\t\t\t// @event preclick: MouseEvent\r\n\t\t\t// Fired before mouse click on the map (sometimes useful when you\r\n\t\t\t// want something to happen on click before any existing click\r\n\t\t\t// handlers start running).\r\n\t\t\tvar synth = Util.extend({}, e);\r\n\t\t\tsynth.type = 'preclick';\r\n\t\t\tthis._fireDOMEvent(synth, synth.type, canvasTargets);\r\n\t\t}\r\n\r\n\t\t// Find the layer the event is propagating from and its parents.\r\n\t\tvar targets = this._findEventTargets(e, type);\r\n\r\n\t\tif (canvasTargets) {\r\n\t\t\tvar filtered = []; // pick only targets with listeners\r\n\t\t\tfor (var i = 0; i < canvasTargets.length; i++) {\r\n\t\t\t\tif (canvasTargets[i].listens(type, true)) {\r\n\t\t\t\t\tfiltered.push(canvasTargets[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttargets = filtered.concat(targets);\r\n\t\t}\r\n\r\n\t\tif (!targets.length) { return; }\r\n\r\n\t\tif (type === 'contextmenu') {\r\n\t\t\tDomEvent.preventDefault(e);\r\n\t\t}\r\n\r\n\t\tvar target = targets[0];\r\n\t\tvar data = {\r\n\t\t\toriginalEvent: e\r\n\t\t};\r\n\r\n\t\tif (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {\r\n\t\t\tvar isMarker = target.getLatLng && (!target._radius || target._radius <= 10);\r\n\t\t\tdata.containerPoint = isMarker ?\r\n\t\t\t\tthis.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);\r\n\t\t\tdata.layerPoint = this.containerPointToLayerPoint(data.containerPoint);\r\n\t\t\tdata.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < targets.length; i++) {\r\n\t\t\ttargets[i].fire(type, data, true);\r\n\t\t\tif (data.originalEvent._stopped ||\r\n\t\t\t\t(targets[i].options.bubblingMouseEvents === false && Util.indexOf(this._mouseEvents, type) !== -1)) { return; }\r\n\t\t}\r\n\t},\r\n\r\n\t_draggableMoved: function (obj) {\r\n\t\tobj = obj.dragging && obj.dragging.enabled() ? obj : this;\r\n\t\treturn (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());\r\n\t},\r\n\r\n\t_clearHandlers: function () {\r\n\t\tfor (var i = 0, len = this._handlers.length; i < len; i++) {\r\n\t\t\tthis._handlers[i].disable();\r\n\t\t}\r\n\t},\r\n\r\n\t// @section Other Methods\r\n\r\n\t// @method whenReady(fn: Function, context?: Object): this\r\n\t// Runs the given function `fn` when the map gets initialized with\r\n\t// a view (center and zoom) and at least one layer, or immediately\r\n\t// if it's already initialized, optionally passing a function context.\r\n\twhenReady: function (callback, context) {\r\n\t\tif (this._loaded) {\r\n\t\t\tcallback.call(context || this, {target: this});\r\n\t\t} else {\r\n\t\t\tthis.on('load', callback, context);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\r\n\t// private methods for getting map state\r\n\r\n\t_getMapPanePos: function () {\r\n\t\treturn DomUtil.getPosition(this._mapPane) || new Point(0, 0);\r\n\t},\r\n\r\n\t_moved: function () {\r\n\t\tvar pos = this._getMapPanePos();\r\n\t\treturn pos && !pos.equals([0, 0]);\r\n\t},\r\n\r\n\t_getTopLeftPoint: function (center, zoom) {\r\n\t\tvar pixelOrigin = center && zoom !== undefined ?\r\n\t\t\tthis._getNewPixelOrigin(center, zoom) :\r\n\t\t\tthis.getPixelOrigin();\r\n\t\treturn pixelOrigin.subtract(this._getMapPanePos());\r\n\t},\r\n\r\n\t_getNewPixelOrigin: function (center, zoom) {\r\n\t\tvar viewHalf = this.getSize()._divideBy(2);\r\n\t\treturn this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();\r\n\t},\r\n\r\n\t_latLngToNewLayerPoint: function (latlng, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn this.project(latlng, zoom)._subtract(topLeft);\r\n\t},\r\n\r\n\t_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {\r\n\t\tvar topLeft = this._getNewPixelOrigin(center, zoom);\r\n\t\treturn toBounds([\r\n\t\t\tthis.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),\r\n\t\t\tthis.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)\r\n\t\t]);\r\n\t},\r\n\r\n\t// layer point of the current center\r\n\t_getCenterLayerPoint: function () {\r\n\t\treturn this.containerPointToLayerPoint(this.getSize()._divideBy(2));\r\n\t},\r\n\r\n\t// offset of the specified place to the current center in pixels\r\n\t_getCenterOffset: function (latlng) {\r\n\t\treturn this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());\r\n\t},\r\n\r\n\t// adjust center for view to get inside bounds\r\n\t_limitCenter: function (center, zoom, bounds) {\r\n\r\n\t\tif (!bounds) { return center; }\r\n\r\n\t\tvar centerPoint = this.project(center, zoom),\r\n\t\t    viewHalf = this.getSize().divideBy(2),\r\n\t\t    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),\r\n\t\t    offset = this._getBoundsOffset(viewBounds, bounds, zoom);\r\n\r\n\t\t// If offset is less than a pixel, ignore.\r\n\t\t// This prevents unstable projections from getting into\r\n\t\t// an infinite loop of tiny offsets.\r\n\t\tif (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {\r\n\t\t\treturn center;\r\n\t\t}\r\n\r\n\t\treturn this.unproject(centerPoint.add(offset), zoom);\r\n\t},\r\n\r\n\t// adjust offset for view to get inside bounds\r\n\t_limitOffset: function (offset, bounds) {\r\n\t\tif (!bounds) { return offset; }\r\n\r\n\t\tvar viewBounds = this.getPixelBounds(),\r\n\t\t    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));\r\n\r\n\t\treturn offset.add(this._getBoundsOffset(newBounds, bounds));\r\n\t},\r\n\r\n\t// returns offset needed for pxBounds to get inside maxBounds at a specified zoom\r\n\t_getBoundsOffset: function (pxBounds, maxBounds, zoom) {\r\n\t\tvar projectedMaxBounds = toBounds(\r\n\t\t        this.project(maxBounds.getNorthEast(), zoom),\r\n\t\t        this.project(maxBounds.getSouthWest(), zoom)\r\n\t\t    ),\r\n\t\t    minOffset = projectedMaxBounds.min.subtract(pxBounds.min),\r\n\t\t    maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),\r\n\r\n\t\t    dx = this._rebound(minOffset.x, -maxOffset.x),\r\n\t\t    dy = this._rebound(minOffset.y, -maxOffset.y);\r\n\r\n\t\treturn new Point(dx, dy);\r\n\t},\r\n\r\n\t_rebound: function (left, right) {\r\n\t\treturn left + right > 0 ?\r\n\t\t\tMath.round(left - right) / 2 :\r\n\t\t\tMath.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));\r\n\t},\r\n\r\n\t_limitZoom: function (zoom) {\r\n\t\tvar min = this.getMinZoom(),\r\n\t\t    max = this.getMaxZoom(),\r\n\t\t    snap = Browser.any3d ? this.options.zoomSnap : 1;\r\n\t\tif (snap) {\r\n\t\t\tzoom = Math.round(zoom / snap) * snap;\r\n\t\t}\r\n\t\treturn Math.max(min, Math.min(max, zoom));\r\n\t},\r\n\r\n\t_onPanTransitionStep: function () {\r\n\t\tthis.fire('move');\r\n\t},\r\n\r\n\t_onPanTransitionEnd: function () {\r\n\t\tDomUtil.removeClass(this._mapPane, 'leaflet-pan-anim');\r\n\t\tthis.fire('moveend');\r\n\t},\r\n\r\n\t_tryAnimatedPan: function (center, options) {\r\n\t\t// difference between the new and current centers in pixels\r\n\t\tvar offset = this._getCenterOffset(center)._trunc();\r\n\r\n\t\t// don't animate too far unless animate: true specified in options\r\n\t\tif ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tthis.panBy(offset, options);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_createAnimProxy: function () {\r\n\r\n\t\tvar proxy = this._proxy = DomUtil.create('div', 'leaflet-proxy leaflet-zoom-animated');\r\n\t\tthis._panes.mapPane.appendChild(proxy);\r\n\r\n\t\tthis.on('zoomanim', function (e) {\r\n\t\t\tvar prop = DomUtil.TRANSFORM,\r\n\t\t\t    transform = this._proxy.style[prop];\r\n\r\n\t\t\tDomUtil.setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));\r\n\r\n\t\t\t// workaround for case when transform is the same and so transitionend event is not fired\r\n\t\t\tif (transform === this._proxy.style[prop] && this._animatingZoom) {\r\n\t\t\t\tthis._onZoomTransitionEnd();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tthis.on('load moveend', this._animMoveEnd, this);\r\n\r\n\t\tthis._on('unload', this._destroyAnimProxy, this);\r\n\t},\r\n\r\n\t_destroyAnimProxy: function () {\r\n\t\tDomUtil.remove(this._proxy);\r\n\t\tthis.off('load moveend', this._animMoveEnd, this);\r\n\t\tdelete this._proxy;\r\n\t},\r\n\r\n\t_animMoveEnd: function () {\r\n\t\tvar c = this.getCenter(),\r\n\t\t    z = this.getZoom();\r\n\t\tDomUtil.setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));\r\n\t},\r\n\r\n\t_catchTransitionEnd: function (e) {\r\n\t\tif (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {\r\n\t\t\tthis._onZoomTransitionEnd();\r\n\t\t}\r\n\t},\r\n\r\n\t_nothingToAnimate: function () {\r\n\t\treturn !this._container.getElementsByClassName('leaflet-zoom-animated').length;\r\n\t},\r\n\r\n\t_tryAnimatedZoom: function (center, zoom, options) {\r\n\r\n\t\tif (this._animatingZoom) { return true; }\r\n\r\n\t\toptions = options || {};\r\n\r\n\t\t// don't animate if disabled, not supported or zoom difference is too large\r\n\t\tif (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||\r\n\t\t        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }\r\n\r\n\t\t// offset is the pixel coords of the zoom origin relative to the current center\r\n\t\tvar scale = this.getZoomScale(zoom),\r\n\t\t    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);\r\n\r\n\t\t// don't animate if the zoom origin isn't within one screen from the current center, unless forced\r\n\t\tif (options.animate !== true && !this.getSize().contains(offset)) { return false; }\r\n\r\n\t\tUtil.requestAnimFrame(function () {\r\n\t\t\tthis\r\n\t\t\t    ._moveStart(true, options.noMoveStart || false)\r\n\t\t\t    ._animateZoom(center, zoom, true);\r\n\t\t}, this);\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_animateZoom: function (center, zoom, startAnim, noUpdate) {\r\n\t\tif (!this._mapPane) { return; }\r\n\r\n\t\tif (startAnim) {\r\n\t\t\tthis._animatingZoom = true;\r\n\r\n\t\t\t// remember what center/zoom to set after animation\r\n\t\t\tthis._animateToCenter = center;\r\n\t\t\tthis._animateToZoom = zoom;\r\n\r\n\t\t\tDomUtil.addClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\t// @section Other Events\r\n\t\t// @event zoomanim: ZoomAnimEvent\r\n\t\t// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.\r\n\t\tthis.fire('zoomanim', {\r\n\t\t\tcenter: center,\r\n\t\t\tzoom: zoom,\r\n\t\t\tnoUpdate: noUpdate\r\n\t\t});\r\n\r\n\t\tif (!this._tempFireZoomEvent) {\r\n\t\t\tthis._tempFireZoomEvent = this._zoom !== this._animateToZoom;\r\n\t\t}\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\t// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\r\n\t\tsetTimeout(Util.bind(this._onZoomTransitionEnd, this), 250);\r\n\t},\r\n\r\n\t_onZoomTransitionEnd: function () {\r\n\t\tif (!this._animatingZoom) { return; }\r\n\r\n\t\tif (this._mapPane) {\r\n\t\t\tDomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim');\r\n\t\t}\r\n\r\n\t\tthis._animatingZoom = false;\r\n\r\n\t\tthis._move(this._animateToCenter, this._animateToZoom, undefined, true);\r\n\r\n\t\tif (this._tempFireZoomEvent) {\r\n\t\t\tthis.fire('zoom');\r\n\t\t}\r\n\t\tdelete this._tempFireZoomEvent;\r\n\r\n\t\tthis.fire('move');\r\n\r\n\t\tthis._moveEnd(true);\r\n\t}\r\n});\r\n\r\n// @section\r\n\r\n// @factory L.map(id: String, options?: Map options)\r\n// Instantiates a map object given the DOM ID of a `<div>` element\r\n// and optionally an object literal with `Map options`.\r\n//\r\n// @alternative\r\n// @factory L.map(el: HTMLElement, options?: Map options)\r\n// Instantiates a map object given an instance of a `<div>` HTML element\r\n// and optionally an object literal with `Map options`.\r\nexport function createMap(id, options) {\r\n\treturn new Map(id, options);\r\n}\r\n","\r\nimport {Class} from '../core/Class';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control\r\n * @aka L.Control\r\n * @inherits Class\r\n *\r\n * L.Control is a base class for implementing map controls. Handles positioning.\r\n * All other controls extend from this class.\r\n */\r\n\r\nexport var Control = Class.extend({\r\n\t// @section\r\n\t// @aka Control Options\r\n\toptions: {\r\n\t\t// @option position: String = 'topright'\r\n\t\t// The position of the control (one of the map corners). Possible values are `'topleft'`,\r\n\t\t// `'topright'`, `'bottomleft'` or `'bottomright'`\r\n\t\tposition: 'topright'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\t/* @section\r\n\t * Classes extending L.Control will inherit the following methods:\r\n\t *\r\n\t * @method getPosition: string\r\n\t * Returns the position of the control.\r\n\t */\r\n\tgetPosition: function () {\r\n\t\treturn this.options.position;\r\n\t},\r\n\r\n\t// @method setPosition(position: string): this\r\n\t// Sets the position of the control.\r\n\tsetPosition: function (position) {\r\n\t\tvar map = this._map;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.removeControl(this);\r\n\t\t}\r\n\r\n\t\tthis.options.position = position;\r\n\r\n\t\tif (map) {\r\n\t\t\tmap.addControl(this);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContainer: HTMLElement\r\n\t// Returns the HTMLElement that contains the control.\r\n\tgetContainer: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method addTo(map: Map): this\r\n\t// Adds the control to the given map.\r\n\taddTo: function (map) {\r\n\t\tthis.remove();\r\n\t\tthis._map = map;\r\n\r\n\t\tvar container = this._container = this.onAdd(map),\r\n\t\t    pos = this.getPosition(),\r\n\t\t    corner = map._controlCorners[pos];\r\n\r\n\t\tDomUtil.addClass(container, 'leaflet-control');\r\n\r\n\t\tif (pos.indexOf('bottom') !== -1) {\r\n\t\t\tcorner.insertBefore(container, corner.firstChild);\r\n\t\t} else {\r\n\t\t\tcorner.appendChild(container);\r\n\t\t}\r\n\r\n\t\tthis._map.on('unload', this.remove, this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method remove: this\r\n\t// Removes the control from the map it is currently active on.\r\n\tremove: function () {\r\n\t\tif (!this._map) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._container);\r\n\r\n\t\tif (this.onRemove) {\r\n\t\t\tthis.onRemove(this._map);\r\n\t\t}\r\n\r\n\t\tthis._map.off('unload', this.remove, this);\r\n\t\tthis._map = null;\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_refocusOnMap: function (e) {\r\n\t\t// if map exists and event is not a keyboard event\r\n\t\tif (this._map && e && e.screenX > 0 && e.screenY > 0) {\r\n\t\t\tthis._map.getContainer().focus();\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport var control = function (options) {\r\n\treturn new Control(options);\r\n};\r\n\r\n/* @section Extension methods\r\n * @uninheritable\r\n *\r\n * Every control should extend from `L.Control` and (re-)implement the following methods.\r\n *\r\n * @method onAdd(map: Map): HTMLElement\r\n * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).\r\n *\r\n * @method onRemove(map: Map)\r\n * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).\r\n */\r\n\r\n/* @namespace Map\r\n * @section Methods for Layers and Controls\r\n */\r\nMap.include({\r\n\t// @method addControl(control: Control): this\r\n\t// Adds the given control to the map\r\n\taddControl: function (control) {\r\n\t\tcontrol.addTo(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeControl(control: Control): this\r\n\t// Removes the given control from the map\r\n\tremoveControl: function (control) {\r\n\t\tcontrol.remove();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initControlPos: function () {\r\n\t\tvar corners = this._controlCorners = {},\r\n\t\t    l = 'leaflet-',\r\n\t\t    container = this._controlContainer =\r\n\t\t            DomUtil.create('div', l + 'control-container', this._container);\r\n\r\n\t\tfunction createCorner(vSide, hSide) {\r\n\t\t\tvar className = l + vSide + ' ' + l + hSide;\r\n\r\n\t\t\tcorners[vSide + hSide] = DomUtil.create('div', className, container);\r\n\t\t}\r\n\r\n\t\tcreateCorner('top', 'left');\r\n\t\tcreateCorner('top', 'right');\r\n\t\tcreateCorner('bottom', 'left');\r\n\t\tcreateCorner('bottom', 'right');\r\n\t},\r\n\r\n\t_clearControlPos: function () {\r\n\t\tfor (var i in this._controlCorners) {\r\n\t\t\tDomUtil.remove(this._controlCorners[i]);\r\n\t\t}\r\n\t\tDomUtil.remove(this._controlContainer);\r\n\t\tdelete this._controlCorners;\r\n\t\tdelete this._controlContainer;\r\n\t}\r\n});\r\n","\r\nimport {Control} from './Control';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class Control.Layers\r\n * @aka L.Control.Layers\r\n * @inherits Control\r\n *\r\n * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var baseLayers = {\r\n * \t\"Mapbox\": mapbox,\r\n * \t\"OpenStreetMap\": osm\r\n * };\r\n *\r\n * var overlays = {\r\n * \t\"Marker\": marker,\r\n * \t\"Roads\": roadsLayer\r\n * };\r\n *\r\n * L.control.layers(baseLayers, overlays).addTo(map);\r\n * ```\r\n *\r\n * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:\r\n *\r\n * ```js\r\n * {\r\n *     \"<someName1>\": layer1,\r\n *     \"<someName2>\": layer2\r\n * }\r\n * ```\r\n *\r\n * The layer names can contain HTML, which allows you to add additional styling to the items:\r\n *\r\n * ```js\r\n * {\"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>\": myLayer}\r\n * ```\r\n */\r\n\r\nexport var Layers = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Layers options\r\n\toptions: {\r\n\t\t// @option collapsed: Boolean = true\r\n\t\t// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.\r\n\t\tcollapsed: true,\r\n\t\tposition: 'topright',\r\n\r\n\t\t// @option autoZIndex: Boolean = true\r\n\t\t// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.\r\n\t\tautoZIndex: true,\r\n\r\n\t\t// @option hideSingleBase: Boolean = false\r\n\t\t// If `true`, the base layers in the control will be hidden when there is only one.\r\n\t\thideSingleBase: false,\r\n\r\n\t\t// @option sortLayers: Boolean = false\r\n\t\t// Whether to sort the layers. When `false`, layers will keep the order\r\n\t\t// in which they were added to the control.\r\n\t\tsortLayers: false,\r\n\r\n\t\t// @option sortFunction: Function = *\r\n\t\t// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)\r\n\t\t// that will be used for sorting the layers, when `sortLayers` is `true`.\r\n\t\t// The function receives both the `L.Layer` instances and their names, as in\r\n\t\t// `sortFunction(layerA, layerB, nameA, nameB)`.\r\n\t\t// By default, it sorts layers alphabetically by their name.\r\n\t\tsortFunction: function (layerA, layerB, nameA, nameB) {\r\n\t\t\treturn nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);\r\n\t\t}\r\n\t},\r\n\r\n\tinitialize: function (baseLayers, overlays, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tthis._layers = [];\r\n\t\tthis._lastZIndex = 0;\r\n\t\tthis._handlingClick = false;\r\n\t\tthis._preventClick = false;\r\n\r\n\t\tfor (var i in baseLayers) {\r\n\t\t\tthis._addLayer(baseLayers[i], i);\r\n\t\t}\r\n\r\n\t\tfor (i in overlays) {\r\n\t\t\tthis._addLayer(overlays[i], i, true);\r\n\t\t}\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._initLayout();\r\n\t\tthis._update();\r\n\r\n\t\tthis._map = map;\r\n\t\tmap.on('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\taddTo: function (map) {\r\n\t\tControl.prototype.addTo.call(this, map);\r\n\t\t// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.\r\n\t\treturn this._expandIfNotCollapsed();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tthis._map.off('zoomend', this._checkDisabledLayers, this);\r\n\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\t\t\tthis._layers[i].layer.off('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addBaseLayer(layer: Layer, name: String): this\r\n\t// Adds a base layer (radio button entry) with the given name to the control.\r\n\taddBaseLayer: function (layer, name) {\r\n\t\tthis._addLayer(layer, name);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method addOverlay(layer: Layer, name: String): this\r\n\t// Adds an overlay (checkbox entry) with the given name to the control.\r\n\taddOverlay: function (layer, name) {\r\n\t\tthis._addLayer(layer, name, true);\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Remove the given layer from the control.\r\n\tremoveLayer: function (layer) {\r\n\t\tlayer.off('add remove', this._onLayerChange, this);\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(layer));\r\n\t\tif (obj) {\r\n\t\t\tthis._layers.splice(this._layers.indexOf(obj), 1);\r\n\t\t}\r\n\t\treturn (this._map) ? this._update() : this;\r\n\t},\r\n\r\n\t// @method expand(): this\r\n\t// Expand the control container if collapsed.\r\n\texpand: function () {\r\n\t\tDomUtil.addClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\tthis._section.style.height = null;\r\n\t\tvar acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);\r\n\t\tif (acceptableHeight < this._section.clientHeight) {\r\n\t\t\tDomUtil.addClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t\tthis._section.style.height = acceptableHeight + 'px';\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(this._section, 'leaflet-control-layers-scrollbar');\r\n\t\t}\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method collapse(): this\r\n\t// Collapse the control container if expanded.\r\n\tcollapse: function () {\r\n\t\tDomUtil.removeClass(this._container, 'leaflet-control-layers-expanded');\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar className = 'leaflet-control-layers',\r\n\t\t    container = this._container = DomUtil.create('div', className),\r\n\t\t    collapsed = this.options.collapsed;\r\n\r\n\t\t// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released\r\n\t\tcontainer.setAttribute('aria-haspopup', true);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(container);\r\n\r\n\t\tvar section = this._section = DomUtil.create('section', className + '-list');\r\n\r\n\t\tif (collapsed) {\r\n\t\t\tthis._map.on('click', this.collapse, this);\r\n\r\n\t\t\tDomEvent.on(container, {\r\n\t\t\t\tmouseenter: this._expandSafely,\r\n\t\t\t\tmouseleave: this.collapse\r\n\t\t\t}, this);\r\n\t\t}\r\n\r\n\t\tvar link = this._layersLink = DomUtil.create('a', className + '-toggle', container);\r\n\t\tlink.href = '#';\r\n\t\tlink.title = 'Layers';\r\n\t\tlink.setAttribute('role', 'button');\r\n\r\n\t\tDomEvent.on(link, {\r\n\t\t\tkeydown: function (e) {\r\n\t\t\t\tif (e.keyCode === 13) {\r\n\t\t\t\t\tthis._expandSafely();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t// Certain screen readers intercept the key event and instead send a click event\r\n\t\t\tclick: function (e) {\r\n\t\t\t\tDomEvent.preventDefault(e);\r\n\t\t\t\tthis._expandSafely();\r\n\t\t\t}\r\n\t\t}, this);\r\n\r\n\t\tif (!collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\r\n\t\tthis._baseLayersList = DomUtil.create('div', className + '-base', section);\r\n\t\tthis._separator = DomUtil.create('div', className + '-separator', section);\r\n\t\tthis._overlaysList = DomUtil.create('div', className + '-overlays', section);\r\n\r\n\t\tcontainer.appendChild(section);\r\n\t},\r\n\r\n\t_getLayer: function (id) {\r\n\t\tfor (var i = 0; i < this._layers.length; i++) {\r\n\r\n\t\t\tif (this._layers[i] && Util.stamp(this._layers[i].layer) === id) {\r\n\t\t\t\treturn this._layers[i];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_addLayer: function (layer, name, overlay) {\r\n\t\tif (this._map) {\r\n\t\t\tlayer.on('add remove', this._onLayerChange, this);\r\n\t\t}\r\n\r\n\t\tthis._layers.push({\r\n\t\t\tlayer: layer,\r\n\t\t\tname: name,\r\n\t\t\toverlay: overlay\r\n\t\t});\r\n\r\n\t\tif (this.options.sortLayers) {\r\n\t\t\tthis._layers.sort(Util.bind(function (a, b) {\r\n\t\t\t\treturn this.options.sortFunction(a.layer, b.layer, a.name, b.name);\r\n\t\t\t}, this));\r\n\t\t}\r\n\r\n\t\tif (this.options.autoZIndex && layer.setZIndex) {\r\n\t\t\tthis._lastZIndex++;\r\n\t\t\tlayer.setZIndex(this._lastZIndex);\r\n\t\t}\r\n\r\n\t\tthis._expandIfNotCollapsed();\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._container) { return this; }\r\n\r\n\t\tDomUtil.empty(this._baseLayersList);\r\n\t\tDomUtil.empty(this._overlaysList);\r\n\r\n\t\tthis._layerControlInputs = [];\r\n\t\tvar baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;\r\n\r\n\t\tfor (i = 0; i < this._layers.length; i++) {\r\n\t\t\tobj = this._layers[i];\r\n\t\t\tthis._addItem(obj);\r\n\t\t\toverlaysPresent = overlaysPresent || obj.overlay;\r\n\t\t\tbaseLayersPresent = baseLayersPresent || !obj.overlay;\r\n\t\t\tbaseLayersCount += !obj.overlay ? 1 : 0;\r\n\t\t}\r\n\r\n\t\t// Hide base layers section if there's only one layer.\r\n\t\tif (this.options.hideSingleBase) {\r\n\t\t\tbaseLayersPresent = baseLayersPresent && baseLayersCount > 1;\r\n\t\t\tthis._baseLayersList.style.display = baseLayersPresent ? '' : 'none';\r\n\t\t}\r\n\r\n\t\tthis._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_onLayerChange: function (e) {\r\n\t\tif (!this._handlingClick) {\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\tvar obj = this._getLayer(Util.stamp(e.target));\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Layer events\r\n\t\t// @event baselayerchange: LayersControlEvent\r\n\t\t// Fired when the base layer is changed through the [layers control](#control-layers).\r\n\t\t// @event overlayadd: LayersControlEvent\r\n\t\t// Fired when an overlay is selected through the [layers control](#control-layers).\r\n\t\t// @event overlayremove: LayersControlEvent\r\n\t\t// Fired when an overlay is deselected through the [layers control](#control-layers).\r\n\t\t// @namespace Control.Layers\r\n\t\tvar type = obj.overlay ?\r\n\t\t\t(e.type === 'add' ? 'overlayadd' : 'overlayremove') :\r\n\t\t\t(e.type === 'add' ? 'baselayerchange' : null);\r\n\r\n\t\tif (type) {\r\n\t\t\tthis._map.fire(type, obj);\r\n\t\t}\r\n\t},\r\n\r\n\t// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)\r\n\t_createRadioElement: function (name, checked) {\r\n\r\n\t\tvar radioHtml = '<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"' +\r\n\t\t\t\tname + '\"' + (checked ? ' checked=\"checked\"' : '') + '/>';\r\n\r\n\t\tvar radioFragment = document.createElement('div');\r\n\t\tradioFragment.innerHTML = radioHtml;\r\n\r\n\t\treturn radioFragment.firstChild;\r\n\t},\r\n\r\n\t_addItem: function (obj) {\r\n\t\tvar label = document.createElement('label'),\r\n\t\t    checked = this._map.hasLayer(obj.layer),\r\n\t\t    input;\r\n\r\n\t\tif (obj.overlay) {\r\n\t\t\tinput = document.createElement('input');\r\n\t\t\tinput.type = 'checkbox';\r\n\t\t\tinput.className = 'leaflet-control-layers-selector';\r\n\t\t\tinput.defaultChecked = checked;\r\n\t\t} else {\r\n\t\t\tinput = this._createRadioElement('leaflet-base-layers_' + Util.stamp(this), checked);\r\n\t\t}\r\n\r\n\t\tthis._layerControlInputs.push(input);\r\n\t\tinput.layerId = Util.stamp(obj.layer);\r\n\r\n\t\tDomEvent.on(input, 'click', this._onInputClick, this);\r\n\r\n\t\tvar name = document.createElement('span');\r\n\t\tname.innerHTML = ' ' + obj.name;\r\n\r\n\t\t// Helps from preventing layer control flicker when checkboxes are disabled\r\n\t\t// https://github.com/Leaflet/Leaflet/issues/2771\r\n\t\tvar holder = document.createElement('span');\r\n\r\n\t\tlabel.appendChild(holder);\r\n\t\tholder.appendChild(input);\r\n\t\tholder.appendChild(name);\r\n\r\n\t\tvar container = obj.overlay ? this._overlaysList : this._baseLayersList;\r\n\t\tcontainer.appendChild(label);\r\n\r\n\t\tthis._checkDisabledLayers();\r\n\t\treturn label;\r\n\t},\r\n\r\n\t_onInputClick: function () {\r\n\t\t// expanding the control on mobile with a click can cause adding a layer - we don't want this\r\n\t\tif (this._preventClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input, layer;\r\n\t\tvar addedLayers = [],\r\n\t\t    removedLayers = [];\r\n\r\n\t\tthis._handlingClick = true;\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\r\n\t\t\tif (input.checked) {\r\n\t\t\t\taddedLayers.push(layer);\r\n\t\t\t} else if (!input.checked) {\r\n\t\t\t\tremovedLayers.push(layer);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Bugfix issue 2318: Should remove all old layers before readding new ones\r\n\t\tfor (i = 0; i < removedLayers.length; i++) {\r\n\t\t\tif (this._map.hasLayer(removedLayers[i])) {\r\n\t\t\t\tthis._map.removeLayer(removedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (i = 0; i < addedLayers.length; i++) {\r\n\t\t\tif (!this._map.hasLayer(addedLayers[i])) {\r\n\t\t\t\tthis._map.addLayer(addedLayers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._handlingClick = false;\r\n\r\n\t\tthis._refocusOnMap();\r\n\t},\r\n\r\n\t_checkDisabledLayers: function () {\r\n\t\tvar inputs = this._layerControlInputs,\r\n\t\t    input,\r\n\t\t    layer,\r\n\t\t    zoom = this._map.getZoom();\r\n\r\n\t\tfor (var i = inputs.length - 1; i >= 0; i--) {\r\n\t\t\tinput = inputs[i];\r\n\t\t\tlayer = this._getLayer(input.layerId).layer;\r\n\t\t\tinput.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||\r\n\t\t\t                 (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);\r\n\r\n\t\t}\r\n\t},\r\n\r\n\t_expandIfNotCollapsed: function () {\r\n\t\tif (this._map && !this.options.collapsed) {\r\n\t\t\tthis.expand();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_expandSafely: function () {\r\n\t\tvar section = this._section;\r\n\t\tthis._preventClick = true;\r\n\t\tDomEvent.on(section, 'click', DomEvent.preventDefault);\r\n\t\tthis.expand();\r\n\t\tvar that = this;\r\n\t\tsetTimeout(function () {\r\n\t\t\tDomEvent.off(section, 'click', DomEvent.preventDefault);\r\n\t\t\tthat._preventClick = false;\r\n\t\t});\r\n\t}\r\n\r\n});\r\n\r\n\r\n// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)\r\n// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.\r\nexport var layers = function (baseLayers, overlays, options) {\r\n\treturn new Layers(baseLayers, overlays, options);\r\n};\r\n","\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as DomEvent from '../dom/DomEvent';\r\n\r\n/*\r\n * @class Control.Zoom\r\n * @aka L.Control.Zoom\r\n * @inherits Control\r\n *\r\n * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.\r\n */\r\n\r\nexport var Zoom = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Zoom options\r\n\toptions: {\r\n\t\tposition: 'topleft',\r\n\r\n\t\t// @option zoomInText: String = '<span aria-hidden=\"true\">+</span>'\r\n\t\t// The text set on the 'zoom in' button.\r\n\t\tzoomInText: '<span aria-hidden=\"true\">+</span>',\r\n\r\n\t\t// @option zoomInTitle: String = 'Zoom in'\r\n\t\t// The title set on the 'zoom in' button.\r\n\t\tzoomInTitle: 'Zoom in',\r\n\r\n\t\t// @option zoomOutText: String = '<span aria-hidden=\"true\">&#x2212;</span>'\r\n\t\t// The text set on the 'zoom out' button.\r\n\t\tzoomOutText: '<span aria-hidden=\"true\">&#x2212;</span>',\r\n\r\n\t\t// @option zoomOutTitle: String = 'Zoom out'\r\n\t\t// The title set on the 'zoom out' button.\r\n\t\tzoomOutTitle: 'Zoom out'\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tvar zoomName = 'leaflet-control-zoom',\r\n\t\t    container = DomUtil.create('div', zoomName + ' leaflet-bar'),\r\n\t\t    options = this.options;\r\n\r\n\t\tthis._zoomInButton  = this._createButton(options.zoomInText, options.zoomInTitle,\r\n\t\t        zoomName + '-in',  container, this._zoomIn);\r\n\t\tthis._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,\r\n\t\t        zoomName + '-out', container, this._zoomOut);\r\n\r\n\t\tthis._updateDisabled();\r\n\t\tmap.on('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\r\n\t\treturn container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('zoomend zoomlevelschange', this._updateDisabled, this);\r\n\t},\r\n\r\n\tdisable: function () {\r\n\t\tthis._disabled = true;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\tenable: function () {\r\n\t\tthis._disabled = false;\r\n\t\tthis._updateDisabled();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_zoomIn: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {\r\n\t\t\tthis._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_zoomOut: function (e) {\r\n\t\tif (!this._disabled && this._map._zoom > this._map.getMinZoom()) {\r\n\t\t\tthis._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));\r\n\t\t}\r\n\t},\r\n\r\n\t_createButton: function (html, title, className, container, fn) {\r\n\t\tvar link = DomUtil.create('a', className, container);\r\n\t\tlink.innerHTML = html;\r\n\t\tlink.href = '#';\r\n\t\tlink.title = title;\r\n\r\n\t\t/*\r\n\t\t * Will force screen readers like VoiceOver to read this as \"Zoom in - button\"\r\n\t\t */\r\n\t\tlink.setAttribute('role', 'button');\r\n\t\tlink.setAttribute('aria-label', title);\r\n\r\n\t\tDomEvent.disableClickPropagation(link);\r\n\t\tDomEvent.on(link, 'click', DomEvent.stop);\r\n\t\tDomEvent.on(link, 'click', fn, this);\r\n\t\tDomEvent.on(link, 'click', this._refocusOnMap, this);\r\n\r\n\t\treturn link;\r\n\t},\r\n\r\n\t_updateDisabled: function () {\r\n\t\tvar map = this._map,\r\n\t\t    className = 'leaflet-disabled';\r\n\r\n\t\tDomUtil.removeClass(this._zoomInButton, className);\r\n\t\tDomUtil.removeClass(this._zoomOutButton, className);\r\n\t\tthis._zoomInButton.setAttribute('aria-disabled', 'false');\r\n\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'false');\r\n\r\n\t\tif (this._disabled || map._zoom === map.getMinZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomOutButton, className);\r\n\t\t\tthis._zoomOutButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t\tif (this._disabled || map._zoom === map.getMaxZoom()) {\r\n\t\t\tDomUtil.addClass(this._zoomInButton, className);\r\n\t\t\tthis._zoomInButton.setAttribute('aria-disabled', 'true');\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option zoomControl: Boolean = true\r\n// Whether a [zoom control](#control-zoom) is added to the map by default.\r\nMap.mergeOptions({\r\n\tzoomControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.zoomControl) {\r\n\t\t// @section Controls\r\n\t\t// @property zoomControl: Control.Zoom\r\n\t\t// The default zoom control (only available if the\r\n\t\t// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).\r\n\t\tthis.zoomControl = new Zoom();\r\n\t\tthis.addControl(this.zoomControl);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Zoom\r\n// @factory L.control.zoom(options: Control.Zoom options)\r\n// Creates a zoom control\r\nexport var zoom = function (options) {\r\n\treturn new Zoom(options);\r\n};\r\n","\nimport {Control} from './Control';\nimport * as DomUtil from '../dom/DomUtil';\n\n/*\n * @class Control.Scale\n * @aka L.Control.Scale\n * @inherits Control\n *\n * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.\n *\n * @example\n *\n * ```js\n * L.control.scale().addTo(map);\n * ```\n */\n\nexport var Scale = Control.extend({\n\t// @section\n\t// @aka Control.Scale options\n\toptions: {\n\t\tposition: 'bottomleft',\n\n\t\t// @option maxWidth: Number = 100\n\t\t// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).\n\t\tmaxWidth: 100,\n\n\t\t// @option metric: Boolean = True\n\t\t// Whether to show the metric scale line (m/km).\n\t\tmetric: true,\n\n\t\t// @option imperial: Boolean = True\n\t\t// Whether to show the imperial scale line (mi/ft).\n\t\timperial: true\n\n\t\t// @option updateWhenIdle: Boolean = false\n\t\t// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).\n\t},\n\n\tonAdd: function (map) {\n\t\tvar className = 'leaflet-control-scale',\n\t\t    container = DomUtil.create('div', className),\n\t\t    options = this.options;\n\n\t\tthis._addScales(options, className + '-line', container);\n\n\t\tmap.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t\tmap.whenReady(this._update, this);\n\n\t\treturn container;\n\t},\n\n\tonRemove: function (map) {\n\t\tmap.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);\n\t},\n\n\t_addScales: function (options, className, container) {\n\t\tif (options.metric) {\n\t\t\tthis._mScale = DomUtil.create('div', className, container);\n\t\t}\n\t\tif (options.imperial) {\n\t\t\tthis._iScale = DomUtil.create('div', className, container);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tvar map = this._map,\n\t\t    y = map.getSize().y / 2;\n\n\t\tvar maxMeters = map.distance(\n\t\t\tmap.containerPointToLatLng([0, y]),\n\t\t\tmap.containerPointToLatLng([this.options.maxWidth, y]));\n\n\t\tthis._updateScales(maxMeters);\n\t},\n\n\t_updateScales: function (maxMeters) {\n\t\tif (this.options.metric && maxMeters) {\n\t\t\tthis._updateMetric(maxMeters);\n\t\t}\n\t\tif (this.options.imperial && maxMeters) {\n\t\t\tthis._updateImperial(maxMeters);\n\t\t}\n\t},\n\n\t_updateMetric: function (maxMeters) {\n\t\tvar meters = this._getRoundNum(maxMeters),\n\t\t    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';\n\n\t\tthis._updateScale(this._mScale, label, meters / maxMeters);\n\t},\n\n\t_updateImperial: function (maxMeters) {\n\t\tvar maxFeet = maxMeters * 3.2808399,\n\t\t    maxMiles, miles, feet;\n\n\t\tif (maxFeet > 5280) {\n\t\t\tmaxMiles = maxFeet / 5280;\n\t\t\tmiles = this._getRoundNum(maxMiles);\n\t\t\tthis._updateScale(this._iScale, miles + ' mi', miles / maxMiles);\n\n\t\t} else {\n\t\t\tfeet = this._getRoundNum(maxFeet);\n\t\t\tthis._updateScale(this._iScale, feet + ' ft', feet / maxFeet);\n\t\t}\n\t},\n\n\t_updateScale: function (scale, text, ratio) {\n\t\tscale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';\n\t\tscale.innerHTML = text;\n\t},\n\n\t_getRoundNum: function (num) {\n\t\tvar pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),\n\t\t    d = num / pow10;\n\n\t\td = d >= 10 ? 10 :\n\t\t    d >= 5 ? 5 :\n\t\t    d >= 3 ? 3 :\n\t\t    d >= 2 ? 2 : 1;\n\n\t\treturn pow10 * d;\n\t}\n});\n\n\n// @factory L.control.scale(options?: Control.Scale options)\n// Creates an scale control with the given options.\nexport var scale = function (options) {\n\treturn new Scale(options);\n};\n","\r\nimport {Control} from './Control';\r\nimport {Map} from '../map/Map';\r\nimport * as Util from '../core/Util';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport Browser from '../core/Browser';\r\n\r\nvar ukrainianFlag = '<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" class=\"leaflet-attribution-flag\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg>';\r\n\r\n\r\n/*\r\n * @class Control.Attribution\r\n * @aka L.Control.Attribution\r\n * @inherits Control\r\n *\r\n * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.\r\n */\r\n\r\nexport var Attribution = Control.extend({\r\n\t// @section\r\n\t// @aka Control.Attribution options\r\n\toptions: {\r\n\t\tposition: 'bottomright',\r\n\r\n\t\t// @option prefix: String|false = 'Leaflet'\r\n\t\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\t\tprefix: '<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._attributions = {};\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tmap.attributionControl = this;\r\n\t\tthis._container = DomUtil.create('div', 'leaflet-control-attribution');\r\n\t\tDomEvent.disableClickPropagation(this._container);\r\n\r\n\t\t// TODO ugly, refactor\r\n\t\tfor (var i in map._layers) {\r\n\t\t\tif (map._layers[i].getAttribution) {\r\n\t\t\t\tthis.addAttribution(map._layers[i].getAttribution());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._update();\r\n\r\n\t\tmap.on('layeradd', this._addAttribution, this);\r\n\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tmap.off('layeradd', this._addAttribution, this);\r\n\t},\r\n\r\n\t_addAttribution: function (ev) {\r\n\t\tif (ev.layer.getAttribution) {\r\n\t\t\tthis.addAttribution(ev.layer.getAttribution());\r\n\t\t\tev.layer.once('remove', function () {\r\n\t\t\t\tthis.removeAttribution(ev.layer.getAttribution());\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setPrefix(prefix: String|false): this\r\n\t// The HTML text shown before the attributions. Pass `false` to disable.\r\n\tsetPrefix: function (prefix) {\r\n\t\tthis.options.prefix = prefix;\r\n\t\tthis._update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method addAttribution(text: String): this\r\n\t// Adds an attribution text (e.g. `'&copy; OpenStreetMap contributors'`).\r\n\taddAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (!this._attributions[text]) {\r\n\t\t\tthis._attributions[text] = 0;\r\n\t\t}\r\n\t\tthis._attributions[text]++;\r\n\r\n\t\tthis._update();\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeAttribution(text: String): this\r\n\t// Removes an attribution text.\r\n\tremoveAttribution: function (text) {\r\n\t\tif (!text) { return this; }\r\n\r\n\t\tif (this._attributions[text]) {\r\n\t\t\tthis._attributions[text]--;\r\n\t\t\tthis._update();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_update: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar attribs = [];\r\n\r\n\t\tfor (var i in this._attributions) {\r\n\t\t\tif (this._attributions[i]) {\r\n\t\t\t\tattribs.push(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar prefixAndAttribs = [];\r\n\r\n\t\tif (this.options.prefix) {\r\n\t\t\tprefixAndAttribs.push(this.options.prefix);\r\n\t\t}\r\n\t\tif (attribs.length) {\r\n\t\t\tprefixAndAttribs.push(attribs.join(', '));\r\n\t\t}\r\n\r\n\t\tthis._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden=\"true\">|</span> ');\r\n\t}\r\n});\r\n\r\n// @namespace Map\r\n// @section Control options\r\n// @option attributionControl: Boolean = true\r\n// Whether a [attribution control](#control-attribution) is added to the map by default.\r\nMap.mergeOptions({\r\n\tattributionControl: true\r\n});\r\n\r\nMap.addInitHook(function () {\r\n\tif (this.options.attributionControl) {\r\n\t\tnew Attribution().addTo(this);\r\n\t}\r\n});\r\n\r\n// @namespace Control.Attribution\r\n// @factory L.control.attribution(options: Control.Attribution options)\r\n// Creates an attribution control.\r\nexport var attribution = function (options) {\r\n\treturn new Attribution(options);\r\n};\r\n","import {Control, control} from './Control';\nimport {Layers, layers} from './Control.Layers';\nimport {Zoom, zoom} from './Control.Zoom';\nimport {Scale, scale} from './Control.Scale';\nimport {Attribution, attribution} from './Control.Attribution';\n\nControl.Layers = Layers;\nControl.Zoom = Zoom;\nControl.Scale = Scale;\nControl.Attribution = Attribution;\n\ncontrol.layers = layers;\ncontrol.zoom = zoom;\ncontrol.scale = scale;\ncontrol.attribution = attribution;\n\nexport {Control, control};\n","import {Class} from './Class';\n\n/*\n\tL.Handler is a base class for handler classes that are used internally to inject\n\tinteraction features like dragging to classes like Map and Marker.\n*/\n\n// @class Handler\n// @aka L.Handler\n// Abstract class for map interaction handlers\n\nexport var Handler = Class.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t},\n\n\t// @method enable(): this\n\t// Enables the handler\n\tenable: function () {\n\t\tif (this._enabled) { return this; }\n\n\t\tthis._enabled = true;\n\t\tthis.addHooks();\n\t\treturn this;\n\t},\n\n\t// @method disable(): this\n\t// Disables the handler\n\tdisable: function () {\n\t\tif (!this._enabled) { return this; }\n\n\t\tthis._enabled = false;\n\t\tthis.removeHooks();\n\t\treturn this;\n\t},\n\n\t// @method enabled(): Boolean\n\t// Returns `true` if the handler is enabled\n\tenabled: function () {\n\t\treturn !!this._enabled;\n\t}\n\n\t// @section Extension methods\n\t// Classes inheriting from `Handler` must implement the two following methods:\n\t// @method addHooks()\n\t// Called when the handler is enabled, should add event hooks.\n\t// @method removeHooks()\n\t// Called when the handler is disabled, should remove the event hooks added previously.\n});\n\n// @section There is static function which can be called without instantiating L.Handler:\n// @function addTo(map: Map, name: String): this\n// Adds a new Handler to the given map with the given name.\nHandler.addTo = function (map, name) {\n\tmap.addHandler(name, this);\n\treturn this;\n};\n","import Browser from './Browser';\nexport {Browser};\n\nexport {Class} from './Class';\n\nimport {Evented} from './Events';\nimport {Events} from './Events';\nexport {Evented};\nexport var Mixin = {Events: Events};\n\nexport {Handler} from './Handler';\n\nimport * as Util from './Util';\nexport {Util};\nexport {extend, bind, stamp, setOptions} from './Util';\n","import {Evented} from '../core/Events';\r\nimport Browser from '../core/Browser';\r\nimport * as DomEvent from './DomEvent';\r\nimport * as DomUtil from './DomUtil';\r\nimport * as Util from '../core/Util';\r\nimport {Point} from '../geometry/Point';\r\n\r\n/*\r\n * @class Draggable\r\n * @aka L.Draggable\r\n * @inherits Evented\r\n *\r\n * A class for making DOM elements draggable (including touch support).\r\n * Used internally for map and marker dragging. Only works for elements\r\n * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).\r\n *\r\n * @example\r\n * ```js\r\n * var draggable = new L.Draggable(elementToDrag);\r\n * draggable.enable();\r\n * ```\r\n */\r\n\r\nvar START = Browser.touch ? 'touchstart mousedown' : 'mousedown';\r\n\r\nexport var Draggable = Evented.extend({\r\n\r\n\toptions: {\r\n\t\t// @section\r\n\t\t// @aka Draggable options\r\n\t\t// @option clickTolerance: Number = 3\r\n\t\t// The max number of pixels a user can shift the mouse pointer during a click\r\n\t\t// for it to be considered a valid click (as opposed to a mouse drag).\r\n\t\tclickTolerance: 3\r\n\t},\r\n\r\n\t// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)\r\n\t// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).\r\n\tinitialize: function (element, dragStartTarget, preventOutline, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._element = element;\r\n\t\tthis._dragStartTarget = dragStartTarget || element;\r\n\t\tthis._preventOutline = preventOutline;\r\n\t},\r\n\r\n\t// @method enable()\r\n\t// Enables the dragging ability\r\n\tenable: function () {\r\n\t\tif (this._enabled) { return; }\r\n\r\n\t\tDomEvent.on(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = true;\r\n\t},\r\n\r\n\t// @method disable()\r\n\t// Disables the dragging ability\r\n\tdisable: function () {\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\t// If we're currently dragging this draggable,\r\n\t\t// disabling it counts as first ending the drag.\r\n\t\tif (Draggable._dragging === this) {\r\n\t\t\tthis.finishDrag(true);\r\n\t\t}\r\n\r\n\t\tDomEvent.off(this._dragStartTarget, START, this._onDown, this);\r\n\r\n\t\tthis._enabled = false;\r\n\t\tthis._moved = false;\r\n\t},\r\n\r\n\t_onDown: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tthis._moved = false;\r\n\r\n\t\tif (DomUtil.hasClass(this._element, 'leaflet-zoom-anim')) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length !== 1) {\r\n\t\t\t// Finish dragging to avoid conflict with touchZoom\r\n\t\t\tif (Draggable._dragging === this) {\r\n\t\t\t\tthis.finishDrag();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }\r\n\t\tDraggable._dragging = this;  // Prevent dragging multiple objects at once.\r\n\r\n\t\tif (this._preventOutline) {\r\n\t\t\tDomUtil.preventOutline(this._element);\r\n\t\t}\r\n\r\n\t\tDomUtil.disableImageDrag();\r\n\t\tDomUtil.disableTextSelection();\r\n\r\n\t\tif (this._moving) { return; }\r\n\r\n\t\t// @event down: Event\r\n\t\t// Fired when a drag is about to start.\r\n\t\tthis.fire('down');\r\n\r\n\t\tvar first = e.touches ? e.touches[0] : e,\r\n\t\t    sizedParent = DomUtil.getSizedParentNode(this._element);\r\n\r\n\t\tthis._startPoint = new Point(first.clientX, first.clientY);\r\n\t\tthis._startPos = DomUtil.getPosition(this._element);\r\n\r\n\t\t// Cache the scale, so that we can continuously compensate for it during drag (_onMove).\r\n\t\tthis._parentScale = DomUtil.getScale(sizedParent);\r\n\r\n\t\tvar mouseevent = e.type === 'mousedown';\r\n\t\tDomEvent.on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);\r\n\t\tDomEvent.on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);\r\n\t},\r\n\r\n\t_onMove: function (e) {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\r\n\t\tif (e.touches && e.touches.length > 1) {\r\n\t\t\tthis._moved = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),\r\n\t\t    offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);\r\n\r\n\t\tif (!offset.x && !offset.y) { return; }\r\n\t\tif (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }\r\n\r\n\t\t// We assume that the parent container's position, border and scale do not change for the duration of the drag.\r\n\t\t// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)\r\n\t\t// and we can use the cached value for the scale.\r\n\t\toffset.x /= this._parentScale.x;\r\n\t\toffset.y /= this._parentScale.y;\r\n\r\n\t\tDomEvent.preventDefault(e);\r\n\r\n\t\tif (!this._moved) {\r\n\t\t\t// @event dragstart: Event\r\n\t\t\t// Fired when a drag starts\r\n\t\t\tthis.fire('dragstart');\r\n\r\n\t\t\tthis._moved = true;\r\n\r\n\t\t\tDomUtil.addClass(document.body, 'leaflet-dragging');\r\n\r\n\t\t\tthis._lastTarget = e.target || e.srcElement;\r\n\t\t\t// IE and Edge do not give the <use> element, so fetch it\r\n\t\t\t// if necessary\r\n\t\t\tif (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {\r\n\t\t\t\tthis._lastTarget = this._lastTarget.correspondingUseElement;\r\n\t\t\t}\r\n\t\t\tDomUtil.addClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t}\r\n\r\n\t\tthis._newPos = this._startPos.add(offset);\r\n\t\tthis._moving = true;\r\n\r\n\t\tthis._lastEvent = e;\r\n\t\tthis._updatePosition();\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tvar e = {originalEvent: this._lastEvent};\r\n\r\n\t\t// @event predrag: Event\r\n\t\t// Fired continuously during dragging *before* each corresponding\r\n\t\t// update of the element's position.\r\n\t\tthis.fire('predrag', e);\r\n\t\tDomUtil.setPosition(this._element, this._newPos);\r\n\r\n\t\t// @event drag: Event\r\n\t\t// Fired continuously during dragging.\r\n\t\tthis.fire('drag', e);\r\n\t},\r\n\r\n\t_onUp: function () {\r\n\t\t// Ignore the event if disabled; this happens in IE11\r\n\t\t// under some circumstances, see #3666.\r\n\t\tif (!this._enabled) { return; }\r\n\t\tthis.finishDrag();\r\n\t},\r\n\r\n\tfinishDrag: function (noInertia) {\r\n\t\tDomUtil.removeClass(document.body, 'leaflet-dragging');\r\n\r\n\t\tif (this._lastTarget) {\r\n\t\t\tDomUtil.removeClass(this._lastTarget, 'leaflet-drag-target');\r\n\t\t\tthis._lastTarget = null;\r\n\t\t}\r\n\r\n\t\tDomEvent.off(document, 'mousemove touchmove', this._onMove, this);\r\n\t\tDomEvent.off(document, 'mouseup touchend touchcancel', this._onUp, this);\r\n\r\n\t\tDomUtil.enableImageDrag();\r\n\t\tDomUtil.enableTextSelection();\r\n\r\n\t\tvar fireDragend = this._moved && this._moving;\r\n\r\n\t\tthis._moving = false;\r\n\t\tDraggable._dragging = false;\r\n\r\n\t\tif (fireDragend) {\r\n\t\t\t// @event dragend: DragEndEvent\r\n\t\t\t// Fired when the drag ends.\r\n\t\t\tthis.fire('dragend', {\r\n\t\t\t\tnoInertia: noInertia,\r\n\t\t\t\tdistance: this._newPos.distanceTo(this._startPos)\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n});\r\n","import * as LineUtil from './LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {toPoint} from './Point';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n/*\r\n * @namespace PolyUtil\r\n * Various utility functions for polygon geometries.\r\n */\r\n\r\n/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]\r\n * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).\r\n * Used by Leaflet to only show polygon points that are on the screen or near, increasing\r\n * performance. Note that polygon points needs different algorithm for clipping\r\n * than polyline, so there's a separate method for it.\r\n */\r\nexport function clipPolygon(points, bounds, round) {\r\n\tvar clippedPoints,\r\n\t    edges = [1, 4, 2, 8],\r\n\t    i, j, k,\r\n\t    a, b,\r\n\t    len, edge, p;\r\n\r\n\tfor (i = 0, len = points.length; i < len; i++) {\r\n\t\tpoints[i]._code = LineUtil._getBitCode(points[i], bounds);\r\n\t}\r\n\r\n\t// for each edge (left, bottom, right, top)\r\n\tfor (k = 0; k < 4; k++) {\r\n\t\tedge = edges[k];\r\n\t\tclippedPoints = [];\r\n\r\n\t\tfor (i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n\t\t\ta = points[i];\r\n\t\t\tb = points[j];\r\n\r\n\t\t\t// if a is inside the clip window\r\n\t\t\tif (!(a._code & edge)) {\r\n\t\t\t\t// if b is outside the clip window (a->b goes out of screen)\r\n\t\t\t\tif (b._code & edge) {\r\n\t\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\t\tclippedPoints.push(p);\r\n\t\t\t\t}\r\n\t\t\t\tclippedPoints.push(a);\r\n\r\n\t\t\t// else if b is inside the clip window (a->b enters the screen)\r\n\t\t\t} else if (!(b._code & edge)) {\r\n\t\t\t\tp = LineUtil._getEdgeIntersection(b, a, edge, bounds, round);\r\n\t\t\t\tp._code = LineUtil._getBitCode(p, bounds);\r\n\t\t\t\tclippedPoints.push(p);\r\n\t\t\t}\r\n\t\t}\r\n\t\tpoints = clippedPoints;\r\n\t}\r\n\r\n\treturn points;\r\n}\r\n\r\n/* @function polygonCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.\r\n */\r\nexport function polygonCenter(latlngs, crs) {\r\n\tvar i, j, p1, p2, f, area, x, y, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!LineUtil.isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tarea = x = y = 0;\r\n\r\n\t// polygon centroid algorithm;\r\n\tfor (i = 0, j = len - 1; i < len; j = i++) {\r\n\t\tp1 = points[i];\r\n\t\tp2 = points[j];\r\n\r\n\t\tf = p1.y * p2.x - p2.y * p1.x;\r\n\t\tx += (p1.x + p2.x) * f;\r\n\t\ty += (p1.y + p2.y) * f;\r\n\t\tarea += f * 3;\r\n\t}\r\n\r\n\tif (area === 0) {\r\n\t\t// Polygon is so small that all points are on same pixel.\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tcenter = [x / area, y / area];\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n\r\n/* @function centroid(latlngs: LatLng[]): LatLng\r\n * Returns the 'center of mass' of the passed LatLngs.\r\n */\r\nexport function centroid(coords) {\r\n\tvar latSum = 0;\r\n\tvar lngSum = 0;\r\n\tvar len = 0;\r\n\tfor (var i = 0; i < coords.length; i++) {\r\n\t\tvar latlng = toLatLng(coords[i]);\r\n\t\tlatSum += latlng.lat;\r\n\t\tlngSum += latlng.lng;\r\n\t\tlen++;\r\n\t}\r\n\treturn toLatLng([latSum / len, lngSum / len]);\r\n}\r\n","import {Point, toPoint} from './Point';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng} from '../geo/LatLng';\r\nimport {centroid} from './PolyUtil';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\n\r\n\r\n/*\r\n * @namespace LineUtil\r\n *\r\n * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.\r\n */\r\n\r\n// Simplify polyline with vertex reduction and Douglas-Peucker simplification.\r\n// Improves rendering performance dramatically by lessening the number of points to draw.\r\n\r\n// @function simplify(points: Point[], tolerance: Number): Point[]\r\n// Dramatically reduces the number of points in a polyline while retaining\r\n// its shape and returns a new array of simplified points, using the\r\n// [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).\r\n// Used for a huge performance boost when processing/displaying Leaflet polylines for\r\n// each zoom level and also reducing visual noise. tolerance affects the amount of\r\n// simplification (lesser value means higher quality but slower and with more points).\r\n// Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).\r\nexport function simplify(points, tolerance) {\r\n\tif (!tolerance || !points.length) {\r\n\t\treturn points.slice();\r\n\t}\r\n\r\n\tvar sqTolerance = tolerance * tolerance;\r\n\r\n\t    // stage 1: vertex reduction\r\n\t    points = _reducePoints(points, sqTolerance);\r\n\r\n\t    // stage 2: Douglas-Peucker simplification\r\n\t    points = _simplifyDP(points, sqTolerance);\r\n\r\n\treturn points;\r\n}\r\n\r\n// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number\r\n// Returns the distance between point `p` and segment `p1` to `p2`.\r\nexport function pointToSegmentDistance(p, p1, p2) {\r\n\treturn Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));\r\n}\r\n\r\n// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number\r\n// Returns the closest point from a point `p` on a segment `p1` to `p2`.\r\nexport function closestPointOnSegment(p, p1, p2) {\r\n\treturn _sqClosestPointOnSegment(p, p1, p2);\r\n}\r\n\r\n// Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm\r\nfunction _simplifyDP(points, sqTolerance) {\r\n\r\n\tvar len = points.length,\r\n\t    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,\r\n\t    markers = new ArrayConstructor(len);\r\n\r\n\t    markers[0] = markers[len - 1] = 1;\r\n\r\n\t_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);\r\n\r\n\tvar i,\r\n\t    newPoints = [];\r\n\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tif (markers[i]) {\r\n\t\t\tnewPoints.push(points[i]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn newPoints;\r\n}\r\n\r\nfunction _simplifyDPStep(points, markers, sqTolerance, first, last) {\r\n\r\n\tvar maxSqDist = 0,\r\n\tindex, i, sqDist;\r\n\r\n\tfor (i = first + 1; i <= last - 1; i++) {\r\n\t\tsqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);\r\n\r\n\t\tif (sqDist > maxSqDist) {\r\n\t\t\tindex = i;\r\n\t\t\tmaxSqDist = sqDist;\r\n\t\t}\r\n\t}\r\n\r\n\tif (maxSqDist > sqTolerance) {\r\n\t\tmarkers[index] = 1;\r\n\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, first, index);\r\n\t\t_simplifyDPStep(points, markers, sqTolerance, index, last);\r\n\t}\r\n}\r\n\r\n// reduce points that are too close to each other to a single point\r\nfunction _reducePoints(points, sqTolerance) {\r\n\tvar reducedPoints = [points[0]];\r\n\r\n\tfor (var i = 1, prev = 0, len = points.length; i < len; i++) {\r\n\t\tif (_sqDist(points[i], points[prev]) > sqTolerance) {\r\n\t\t\treducedPoints.push(points[i]);\r\n\t\t\tprev = i;\r\n\t\t}\r\n\t}\r\n\tif (prev < len - 1) {\r\n\t\treducedPoints.push(points[len - 1]);\r\n\t}\r\n\treturn reducedPoints;\r\n}\r\n\r\nvar _lastCode;\r\n\r\n// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean\r\n// Clips the segment a to b by rectangular bounds with the\r\n// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)\r\n// (modifying the segment points directly!). Used by Leaflet to only show polyline\r\n// points that are on the screen or near, increasing performance.\r\nexport function clipSegment(a, b, bounds, useLastCode, round) {\r\n\tvar codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),\r\n\t    codeB = _getBitCode(b, bounds),\r\n\r\n\t    codeOut, p, newCode;\r\n\r\n\t    // save 2nd code to avoid calculating it on the next segment\r\n\t    _lastCode = codeB;\r\n\r\n\twhile (true) {\r\n\t\t// if a,b is inside the clip window (trivial accept)\r\n\t\tif (!(codeA | codeB)) {\r\n\t\t\treturn [a, b];\r\n\t\t}\r\n\r\n\t\t// if a,b is outside the clip window (trivial reject)\r\n\t\tif (codeA & codeB) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// other cases\r\n\t\tcodeOut = codeA || codeB;\r\n\t\tp = _getEdgeIntersection(a, b, codeOut, bounds, round);\r\n\t\tnewCode = _getBitCode(p, bounds);\r\n\r\n\t\tif (codeOut === codeA) {\r\n\t\t\ta = p;\r\n\t\t\tcodeA = newCode;\r\n\t\t} else {\r\n\t\t\tb = p;\r\n\t\t\tcodeB = newCode;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function _getEdgeIntersection(a, b, code, bounds, round) {\r\n\tvar dx = b.x - a.x,\r\n\t    dy = b.y - a.y,\r\n\t    min = bounds.min,\r\n\t    max = bounds.max,\r\n\t    x, y;\r\n\r\n\tif (code & 8) { // top\r\n\t\tx = a.x + dx * (max.y - a.y) / dy;\r\n\t\ty = max.y;\r\n\r\n\t} else if (code & 4) { // bottom\r\n\t\tx = a.x + dx * (min.y - a.y) / dy;\r\n\t\ty = min.y;\r\n\r\n\t} else if (code & 2) { // right\r\n\t\tx = max.x;\r\n\t\ty = a.y + dy * (max.x - a.x) / dx;\r\n\r\n\t} else if (code & 1) { // left\r\n\t\tx = min.x;\r\n\t\ty = a.y + dy * (min.x - a.x) / dx;\r\n\t}\r\n\r\n\treturn new Point(x, y, round);\r\n}\r\n\r\nexport function _getBitCode(p, bounds) {\r\n\tvar code = 0;\r\n\r\n\tif (p.x < bounds.min.x) { // left\r\n\t\tcode |= 1;\r\n\t} else if (p.x > bounds.max.x) { // right\r\n\t\tcode |= 2;\r\n\t}\r\n\r\n\tif (p.y < bounds.min.y) { // bottom\r\n\t\tcode |= 4;\r\n\t} else if (p.y > bounds.max.y) { // top\r\n\t\tcode |= 8;\r\n\t}\r\n\r\n\treturn code;\r\n}\r\n\r\n// square distance (to avoid unnecessary Math.sqrt calls)\r\nfunction _sqDist(p1, p2) {\r\n\tvar dx = p2.x - p1.x,\r\n\t    dy = p2.y - p1.y;\r\n\treturn dx * dx + dy * dy;\r\n}\r\n\r\n// return closest point on segment or distance to that point\r\nexport function _sqClosestPointOnSegment(p, p1, p2, sqDist) {\r\n\tvar x = p1.x,\r\n\t    y = p1.y,\r\n\t    dx = p2.x - x,\r\n\t    dy = p2.y - y,\r\n\t    dot = dx * dx + dy * dy,\r\n\t    t;\r\n\r\n\tif (dot > 0) {\r\n\t\tt = ((p.x - x) * dx + (p.y - y) * dy) / dot;\r\n\r\n\t\tif (t > 1) {\r\n\t\t\tx = p2.x;\r\n\t\t\ty = p2.y;\r\n\t\t} else if (t > 0) {\r\n\t\t\tx += dx * t;\r\n\t\t\ty += dy * t;\r\n\t\t}\r\n\t}\r\n\r\n\tdx = p.x - x;\r\n\tdy = p.y - y;\r\n\r\n\treturn sqDist ? dx * dx + dy * dy : new Point(x, y);\r\n}\r\n\r\n\r\n// @function isFlat(latlngs: LatLng[]): Boolean\r\n// Returns true if `latlngs` is a flat array, false is nested.\r\nexport function isFlat(latlngs) {\r\n\treturn !Util.isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');\r\n}\r\n\r\nexport function _flat(latlngs) {\r\n\tconsole.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');\r\n\treturn isFlat(latlngs);\r\n}\r\n\r\n/* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng\r\n * Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.\r\n */\r\nexport function polylineCenter(latlngs, crs) {\r\n\tvar i, halfDist, segDist, dist, p1, p2, ratio, center;\r\n\r\n\tif (!latlngs || latlngs.length === 0) {\r\n\t\tthrow new Error('latlngs not passed');\r\n\t}\r\n\r\n\tif (!isFlat(latlngs)) {\r\n\t\tconsole.warn('latlngs are not flat! Only the first ring will be used');\r\n\t\tlatlngs = latlngs[0];\r\n\t}\r\n\r\n\tvar centroidLatLng = toLatLng([0, 0]);\r\n\r\n\tvar bounds = toLatLngBounds(latlngs);\r\n\tvar areaBounds = bounds.getNorthWest().distanceTo(bounds.getSouthWest()) * bounds.getNorthEast().distanceTo(bounds.getNorthWest());\r\n\t// tests showed that below 1700 rounding errors are happening\r\n\tif (areaBounds < 1700) {\r\n\t\t// getting a inexact center, to move the latlngs near to [0, 0] to prevent rounding errors\r\n\t\tcentroidLatLng = centroid(latlngs);\r\n\t}\r\n\r\n\tvar len = latlngs.length;\r\n\tvar points = [];\r\n\tfor (i = 0; i < len; i++) {\r\n\t\tvar latlng = toLatLng(latlngs[i]);\r\n\t\tpoints.push(crs.project(toLatLng([latlng.lat - centroidLatLng.lat, latlng.lng - centroidLatLng.lng])));\r\n\t}\r\n\r\n\tfor (i = 0, halfDist = 0; i < len - 1; i++) {\r\n\t\thalfDist += points[i].distanceTo(points[i + 1]) / 2;\r\n\t}\r\n\r\n\t// The line is so small in the current view that all points are on the same pixel.\r\n\tif (halfDist === 0) {\r\n\t\tcenter = points[0];\r\n\t} else {\r\n\t\tfor (i = 0, dist = 0; i < len - 1; i++) {\r\n\t\t\tp1 = points[i];\r\n\t\t\tp2 = points[i + 1];\r\n\t\t\tsegDist = p1.distanceTo(p2);\r\n\t\t\tdist += segDist;\r\n\r\n\t\t\tif (dist > halfDist) {\r\n\t\t\t\tratio = (dist - halfDist) / segDist;\r\n\t\t\t\tcenter = [\r\n\t\t\t\t\tp2.x - ratio * (p2.x - p1.x),\r\n\t\t\t\t\tp2.y - ratio * (p2.y - p1.y)\r\n\t\t\t\t];\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar latlngCenter = crs.unproject(toPoint(center));\r\n\treturn toLatLng([latlngCenter.lat + centroidLatLng.lat, latlngCenter.lng + centroidLatLng.lng]);\r\n}\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @section\r\n * Leaflet comes with a set of already defined Projections out of the box:\r\n *\r\n * @projection L.Projection.LonLat\r\n *\r\n * Equirectangular, or Plate Carree projection — the most simple projection,\r\n * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as\r\n * latitude. Also suitable for flat worlds, e.g. game maps. Used by the\r\n * `EPSG:4326` and `Simple` CRS.\r\n */\r\n\r\nexport var LonLat = {\r\n\tproject: function (latlng) {\r\n\t\treturn new Point(latlng.lng, latlng.lat);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\treturn new LatLng(point.y, point.x);\r\n\t},\r\n\r\n\tbounds: new Bounds([-180, -90], [180, 90])\r\n};\r\n","import {LatLng} from '../LatLng';\r\nimport {Bounds} from '../../geometry/Bounds';\r\nimport {Point} from '../../geometry/Point';\r\n\r\n/*\r\n * @namespace Projection\r\n * @projection L.Projection.Mercator\r\n *\r\n * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.\r\n */\r\n\r\nexport var Mercator = {\r\n\tR: 6378137,\r\n\tR_MINOR: 6356752.314245179,\r\n\r\n\tbounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\r\n\r\n\tproject: function (latlng) {\r\n\t\tvar d = Math.PI / 180,\r\n\t\t    r = this.R,\r\n\t\t    y = latlng.lat * d,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    con = e * Math.sin(y);\r\n\r\n\t\tvar ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\ty = -r * Math.log(Math.max(ts, 1E-10));\r\n\r\n\t\treturn new Point(latlng.lng * d * r, y);\r\n\t},\r\n\r\n\tunproject: function (point) {\r\n\t\tvar d = 180 / Math.PI,\r\n\t\t    r = this.R,\r\n\t\t    tmp = this.R_MINOR / r,\r\n\t\t    e = Math.sqrt(1 - tmp * tmp),\r\n\t\t    ts = Math.exp(-point.y / r),\r\n\t\t    phi = Math.PI / 2 - 2 * Math.atan(ts);\r\n\r\n\t\tfor (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {\r\n\t\t\tcon = e * Math.sin(phi);\r\n\t\t\tcon = Math.pow((1 - con) / (1 + con), e / 2);\r\n\t\t\tdphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;\r\n\t\t\tphi += dphi;\r\n\t\t}\r\n\r\n\t\treturn new LatLng(phi * d, point.x * d / r);\r\n\t}\r\n};\r\n","/*\n * @class Projection\n\n * An object with methods for projecting geographical coordinates of the world onto\n * a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).\n\n * @property bounds: Bounds\n * The bounds (specified in CRS units) where the projection is valid\n\n * @method project(latlng: LatLng): Point\n * Projects geographical coordinates into a 2D point.\n * Only accepts actual `L.LatLng` instances, not arrays.\n\n * @method unproject(point: Point): LatLng\n * The inverse of `project`. Projects a 2D point into a geographical location.\n * Only accepts actual `L.Point` instances, not arrays.\n\n * Note that the projection instances do not inherit from Leaflet's `Class` object,\n * and can't be instantiated. Also, new classes can't inherit from them,\n * and methods can't be added to them with the `include` function.\n\n */\n\nexport {LonLat} from './Projection.LonLat';\nexport {Mercator} from './Projection.Mercator';\nexport {SphericalMercator} from './Projection.SphericalMercator';\n","import {Earth} from './CRS.Earth';\r\nimport {Mercator} from '../projection/Projection.Mercator';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3395\r\n *\r\n * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.\r\n */\r\nexport var EPSG3395 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:3395',\r\n\tprojection: Mercator,\r\n\r\n\ttransformation: (function () {\r\n\t\tvar scale = 0.5 / (Math.PI * Mercator.R);\r\n\t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n\t}())\r\n});\r\n","import {Earth} from './CRS.Earth';\r\nimport {LonLat} from '../projection/Projection.LonLat';\r\nimport {toTransformation} from '../../geometry/Transformation';\r\nimport * as Util from '../../core/Util';\r\n\r\n/*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG4326\r\n *\r\n * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.\r\n *\r\n * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),\r\n * which is a breaking change from 0.7.x behaviour.  If you are using a `TileLayer`\r\n * with this CRS, ensure that there are two 256x256 pixel tiles covering the\r\n * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),\r\n * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.\r\n */\r\n\r\nexport var EPSG4326 = Util.extend({}, Earth, {\r\n\tcode: 'EPSG:4326',\r\n\tprojection: LonLat,\r\n\ttransformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)\r\n});\r\n","import {CRS} from './CRS';\nimport {LonLat} from '../projection/Projection.LonLat';\nimport {toTransformation} from '../../geometry/Transformation';\nimport * as Util from '../../core/Util';\n\n/*\n * @namespace CRS\n * @crs L.CRS.Simple\n *\n * A simple CRS that maps longitude and latitude into `x` and `y` directly.\n * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`\n * axis should still be inverted (going from bottom to top). `distance()` returns\n * simple euclidean distance.\n */\n\nexport var Simple = Util.extend({}, CRS, {\n\tprojection: LonLat,\n\ttransformation: toTransformation(1, 0, -1, 0),\n\n\tscale: function (zoom) {\n\t\treturn Math.pow(2, zoom);\n\t},\n\n\tzoom: function (scale) {\n\t\treturn Math.log(scale) / Math.LN2;\n\t},\n\n\tdistance: function (latlng1, latlng2) {\n\t\tvar dx = latlng2.lng - latlng1.lng,\n\t\t    dy = latlng2.lat - latlng1.lat;\n\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t},\n\n\tinfinite: true\n});\n","import {CRS} from './CRS';\nimport {Earth} from './CRS.Earth';\nimport {EPSG3395} from './CRS.EPSG3395';\nimport {EPSG3857, EPSG900913} from './CRS.EPSG3857';\nimport {EPSG4326} from './CRS.EPSG4326';\nimport {Simple} from './CRS.Simple';\n\nCRS.Earth = Earth;\nCRS.EPSG3395 = EPSG3395;\nCRS.EPSG3857 = EPSG3857;\nCRS.EPSG900913 = EPSG900913;\nCRS.EPSG4326 = EPSG4326;\nCRS.Simple = Simple;\n\nexport {CRS};\n","import {Evented} from '../core/Events';\nimport {Map} from '../map/Map';\nimport * as Util from '../core/Util';\n\n/*\n * @class Layer\n * @inherits Evented\n * @aka L.Layer\n * @aka ILayer\n *\n * A set of methods from the Layer base class that all Leaflet layers use.\n * Inherits all methods, options and events from `L.Evented`.\n *\n * @example\n *\n * ```js\n * var layer = L.marker(latlng).addTo(map);\n * layer.addTo(map);\n * layer.remove();\n * ```\n *\n * @event add: Event\n * Fired after the layer is added to a map\n *\n * @event remove: Event\n * Fired after the layer is removed from a map\n */\n\n\nexport var Layer = Evented.extend({\n\n\t// Classes extending `L.Layer` will inherit the following options:\n\toptions: {\n\t\t// @option pane: String = 'overlayPane'\n\t\t// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.\n\t\tpane: 'overlayPane',\n\n\t\t// @option attribution: String = null\n\t\t// String to be shown in the attribution control, e.g. \"© OpenStreetMap contributors\". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.\n\t\tattribution: null,\n\n\t\tbubblingMouseEvents: true\n\t},\n\n\t/* @section\n\t * Classes extending `L.Layer` will inherit the following methods:\n\t *\n\t * @method addTo(map: Map|LayerGroup): this\n\t * Adds the layer to the given map or layer group.\n\t */\n\taddTo: function (map) {\n\t\tmap.addLayer(this);\n\t\treturn this;\n\t},\n\n\t// @method remove: this\n\t// Removes the layer from the map it is currently active on.\n\tremove: function () {\n\t\treturn this.removeFrom(this._map || this._mapToAdd);\n\t},\n\n\t// @method removeFrom(map: Map): this\n\t// Removes the layer from the given map\n\t//\n\t// @alternative\n\t// @method removeFrom(group: LayerGroup): this\n\t// Removes the layer from the given `LayerGroup`\n\tremoveFrom: function (obj) {\n\t\tif (obj) {\n\t\t\tobj.removeLayer(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getPane(name? : String): HTMLElement\n\t// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.\n\tgetPane: function (name) {\n\t\treturn this._map.getPane(name ? (this.options[name] || name) : this.options.pane);\n\t},\n\n\taddInteractiveTarget: function (targetEl) {\n\t\tthis._map._targets[Util.stamp(targetEl)] = this;\n\t\treturn this;\n\t},\n\n\tremoveInteractiveTarget: function (targetEl) {\n\t\tdelete this._map._targets[Util.stamp(targetEl)];\n\t\treturn this;\n\t},\n\n\t// @method getAttribution: String\n\t// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).\n\tgetAttribution: function () {\n\t\treturn this.options.attribution;\n\t},\n\n\t_layerAdd: function (e) {\n\t\tvar map = e.target;\n\n\t\t// check in case layer gets added and then removed before the map is ready\n\t\tif (!map.hasLayer(this)) { return; }\n\n\t\tthis._map = map;\n\t\tthis._zoomAnimated = map._zoomAnimated;\n\n\t\tif (this.getEvents) {\n\t\t\tvar events = this.getEvents();\n\t\t\tmap.on(events, this);\n\t\t\tthis.once('remove', function () {\n\t\t\t\tmap.off(events, this);\n\t\t\t}, this);\n\t\t}\n\n\t\tthis.onAdd(map);\n\n\t\tthis.fire('add');\n\t\tmap.fire('layeradd', {layer: this});\n\t}\n});\n\n/* @section Extension methods\n * @uninheritable\n *\n * Every layer should extend from `L.Layer` and (re-)implement the following methods.\n *\n * @method onAdd(map: Map): this\n * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).\n *\n * @method onRemove(map: Map): this\n * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).\n *\n * @method getEvents(): Object\n * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.\n *\n * @method getAttribution(): String\n * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.\n *\n * @method beforeAdd(map: Map): this\n * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.\n */\n\n\n/* @namespace Map\n * @section Layer events\n *\n * @event layeradd: LayerEvent\n * Fired when a new layer is added to the map.\n *\n * @event layerremove: LayerEvent\n * Fired when some layer is removed from the map\n *\n * @section Methods for Layers and Controls\n */\nMap.include({\n\t// @method addLayer(layer: Layer): this\n\t// Adds the given layer to the map\n\taddLayer: function (layer) {\n\t\tif (!layer._layerAdd) {\n\t\t\tthrow new Error('The provided object is not a Layer.');\n\t\t}\n\n\t\tvar id = Util.stamp(layer);\n\t\tif (this._layers[id]) { return this; }\n\t\tthis._layers[id] = layer;\n\n\t\tlayer._mapToAdd = this;\n\n\t\tif (layer.beforeAdd) {\n\t\t\tlayer.beforeAdd(this);\n\t\t}\n\n\t\tthis.whenReady(layer._layerAdd, layer);\n\n\t\treturn this;\n\t},\n\n\t// @method removeLayer(layer: Layer): this\n\t// Removes the given layer from the map.\n\tremoveLayer: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (!this._layers[id]) { return this; }\n\n\t\tif (this._loaded) {\n\t\t\tlayer.onRemove(this);\n\t\t}\n\n\t\tdelete this._layers[id];\n\n\t\tif (this._loaded) {\n\t\t\tthis.fire('layerremove', {layer: layer});\n\t\t\tlayer.fire('remove');\n\t\t}\n\n\t\tlayer._map = layer._mapToAdd = null;\n\n\t\treturn this;\n\t},\n\n\t// @method hasLayer(layer: Layer): Boolean\n\t// Returns `true` if the given layer is currently added to the map\n\thasLayer: function (layer) {\n\t\treturn Util.stamp(layer) in this._layers;\n\t},\n\n\t/* @method eachLayer(fn: Function, context?: Object): this\n\t * Iterates over the layers of the map, optionally specifying context of the iterator function.\n\t * ```\n\t * map.eachLayer(function(layer){\n\t *     layer.bindPopup('Hello');\n\t * });\n\t * ```\n\t */\n\teachLayer: function (method, context) {\n\t\tfor (var i in this._layers) {\n\t\t\tmethod.call(context, this._layers[i]);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_addLayers: function (layers) {\n\t\tlayers = layers ? (Util.isArray(layers) ? layers : [layers]) : [];\n\n\t\tfor (var i = 0, len = layers.length; i < len; i++) {\n\t\t\tthis.addLayer(layers[i]);\n\t\t}\n\t},\n\n\t_addZoomLimit: function (layer) {\n\t\tif (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {\n\t\t\tthis._zoomBoundLayers[Util.stamp(layer)] = layer;\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_removeZoomLimit: function (layer) {\n\t\tvar id = Util.stamp(layer);\n\n\t\tif (this._zoomBoundLayers[id]) {\n\t\t\tdelete this._zoomBoundLayers[id];\n\t\t\tthis._updateZoomLevels();\n\t\t}\n\t},\n\n\t_updateZoomLevels: function () {\n\t\tvar minZoom = Infinity,\n\t\t    maxZoom = -Infinity,\n\t\t    oldZoomSpan = this._getZoomSpan();\n\n\t\tfor (var i in this._zoomBoundLayers) {\n\t\t\tvar options = this._zoomBoundLayers[i].options;\n\n\t\t\tminZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);\n\t\t\tmaxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);\n\t\t}\n\n\t\tthis._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;\n\t\tthis._layersMinZoom = minZoom === Infinity ? undefined : minZoom;\n\n\t\t// @section Map state change events\n\t\t// @event zoomlevelschange: Event\n\t\t// Fired when the number of zoomlevels on the map is changed due\n\t\t// to adding or removing a layer.\n\t\tif (oldZoomSpan !== this._getZoomSpan()) {\n\t\t\tthis.fire('zoomlevelschange');\n\t\t}\n\n\t\tif (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {\n\t\t\tthis.setZoom(this._layersMaxZoom);\n\t\t}\n\t\tif (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {\n\t\t\tthis.setZoom(this._layersMinZoom);\n\t\t}\n\t}\n});\n","\r\nimport {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class LayerGroup\r\n * @aka L.LayerGroup\r\n * @inherits Interactive layer\r\n *\r\n * Used to group several layers and handle them as one. If you add it to the map,\r\n * any layers added or removed from the group will be added/removed on the map as\r\n * well. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.layerGroup([marker1, marker2])\r\n * \t.addLayer(polyline)\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var LayerGroup = Layer.extend({\r\n\r\n\tinitialize: function (layers, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (layers) {\r\n\t\t\tfor (i = 0, len = layers.length; i < len; i++) {\r\n\t\t\t\tthis.addLayer(layers[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addLayer(layer: Layer): this\r\n\t// Adds the given layer to the group.\r\n\taddLayer: function (layer) {\r\n\t\tvar id = this.getLayerId(layer);\r\n\r\n\t\tthis._layers[id] = layer;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.addLayer(layer);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method removeLayer(layer: Layer): this\r\n\t// Removes the given layer from the group.\r\n\t// @alternative\r\n\t// @method removeLayer(id: Number): this\r\n\t// Removes the layer with the given internal ID from the group.\r\n\tremoveLayer: function (layer) {\r\n\t\tvar id = layer in this._layers ? layer : this.getLayerId(layer);\r\n\r\n\t\tif (this._map && this._layers[id]) {\r\n\t\t\tthis._map.removeLayer(this._layers[id]);\r\n\t\t}\r\n\r\n\t\tdelete this._layers[id];\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method hasLayer(layer: Layer): Boolean\r\n\t// Returns `true` if the given layer is currently added to the group.\r\n\t// @alternative\r\n\t// @method hasLayer(id: Number): Boolean\r\n\t// Returns `true` if the given internal ID is currently added to the group.\r\n\thasLayer: function (layer) {\r\n\t\tvar layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);\r\n\t\treturn layerId in this._layers;\r\n\t},\r\n\r\n\t// @method clearLayers(): this\r\n\t// Removes all the layers from the group.\r\n\tclearLayers: function () {\r\n\t\treturn this.eachLayer(this.removeLayer, this);\r\n\t},\r\n\r\n\t// @method invoke(methodName: String, …): this\r\n\t// Calls `methodName` on every layer contained in this group, passing any\r\n\t// additional parameters. Has no effect if the layers contained do not\r\n\t// implement `methodName`.\r\n\tinvoke: function (methodName) {\r\n\t\tvar args = Array.prototype.slice.call(arguments, 1),\r\n\t\t    i, layer;\r\n\r\n\t\tfor (i in this._layers) {\r\n\t\t\tlayer = this._layers[i];\r\n\r\n\t\t\tif (layer[methodName]) {\r\n\t\t\t\tlayer[methodName].apply(layer, args);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis.eachLayer(map.addLayer, map);\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tthis.eachLayer(map.removeLayer, map);\r\n\t},\r\n\r\n\t// @method eachLayer(fn: Function, context?: Object): this\r\n\t// Iterates over the layers of the group, optionally specifying context of the iterator function.\r\n\t// ```js\r\n\t// group.eachLayer(function (layer) {\r\n\t// \tlayer.bindPopup('Hello');\r\n\t// });\r\n\t// ```\r\n\teachLayer: function (method, context) {\r\n\t\tfor (var i in this._layers) {\r\n\t\t\tmethod.call(context, this._layers[i]);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getLayer(id: Number): Layer\r\n\t// Returns the layer with the given internal ID.\r\n\tgetLayer: function (id) {\r\n\t\treturn this._layers[id];\r\n\t},\r\n\r\n\t// @method getLayers(): Layer[]\r\n\t// Returns an array of all the layers added to the group.\r\n\tgetLayers: function () {\r\n\t\tvar layers = [];\r\n\t\tthis.eachLayer(layers.push, layers);\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// @method setZIndex(zIndex: Number): this\r\n\t// Calls `setZIndex` on every layer contained in this group, passing the z-index.\r\n\tsetZIndex: function (zIndex) {\r\n\t\treturn this.invoke('setZIndex', zIndex);\r\n\t},\r\n\r\n\t// @method getLayerId(layer: Layer): Number\r\n\t// Returns the internal ID for a layer\r\n\tgetLayerId: function (layer) {\r\n\t\treturn Util.stamp(layer);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.layerGroup(layers?: Layer[], options?: Object)\r\n// Create a layer group, optionally given an initial set of layers and an `options` object.\r\nexport var layerGroup = function (layers, options) {\r\n\treturn new LayerGroup(layers, options);\r\n};\r\n","import {LayerGroup} from './LayerGroup';\r\nimport {LatLngBounds} from '../geo/LatLngBounds';\r\n\r\n/*\r\n * @class FeatureGroup\r\n * @aka L.FeatureGroup\r\n * @inherits LayerGroup\r\n *\r\n * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:\r\n *  * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))\r\n *  * Events are propagated to the `FeatureGroup`, so if the group has an event\r\n * handler, it will handle events from any of the layers. This includes mouse events\r\n * and custom events.\r\n *  * Has `layeradd` and `layerremove` events\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.featureGroup([marker1, marker2, polyline])\r\n * \t.bindPopup('Hello world!')\r\n * \t.on('click', function() { alert('Clicked on a member of the group!'); })\r\n * \t.addTo(map);\r\n * ```\r\n */\r\n\r\nexport var FeatureGroup = LayerGroup.extend({\r\n\r\n\taddLayer: function (layer) {\r\n\t\tif (this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tlayer.addEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.addLayer.call(this, layer);\r\n\r\n\t\t// @event layeradd: LayerEvent\r\n\t\t// Fired when a layer is added to this `FeatureGroup`\r\n\t\treturn this.fire('layeradd', {layer: layer});\r\n\t},\r\n\r\n\tremoveLayer: function (layer) {\r\n\t\tif (!this.hasLayer(layer)) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif (layer in this._layers) {\r\n\t\t\tlayer = this._layers[layer];\r\n\t\t}\r\n\r\n\t\tlayer.removeEventParent(this);\r\n\r\n\t\tLayerGroup.prototype.removeLayer.call(this, layer);\r\n\r\n\t\t// @event layerremove: LayerEvent\r\n\t\t// Fired when a layer is removed from this `FeatureGroup`\r\n\t\treturn this.fire('layerremove', {layer: layer});\r\n\t},\r\n\r\n\t// @method setStyle(style: Path options): this\r\n\t// Sets the given path options to each layer of the group that has a `setStyle` method.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.invoke('setStyle', style);\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer group to the top of all other layers\r\n\tbringToFront: function () {\r\n\t\treturn this.invoke('bringToFront');\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer group to the back of all other layers\r\n\tbringToBack: function () {\r\n\t\treturn this.invoke('bringToBack');\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).\r\n\tgetBounds: function () {\r\n\t\tvar bounds = new LatLngBounds();\r\n\r\n\t\tfor (var id in this._layers) {\r\n\t\t\tvar layer = this._layers[id];\r\n\t\t\tbounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());\r\n\t\t}\r\n\t\treturn bounds;\r\n\t}\r\n});\r\n\r\n// @factory L.featureGroup(layers?: Layer[], options?: Object)\r\n// Create a feature group, optionally given an initial set of layers and an `options` object.\r\nexport var featureGroup = function (layers, options) {\r\n\treturn new FeatureGroup(layers, options);\r\n};\r\n","import {Class} from '../../core/Class';\r\nimport {setOptions} from '../../core/Util';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport Browser from '../../core/Browser';\r\n\r\n/*\r\n * @class Icon\r\n * @aka L.Icon\r\n *\r\n * Represents an icon to provide when creating a marker.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var myIcon = L.icon({\r\n *     iconUrl: 'my-icon.png',\r\n *     iconRetinaUrl: 'my-icon@2x.png',\r\n *     iconSize: [38, 95],\r\n *     iconAnchor: [22, 94],\r\n *     popupAnchor: [-3, -76],\r\n *     shadowUrl: 'my-icon-shadow.png',\r\n *     shadowRetinaUrl: 'my-icon-shadow@2x.png',\r\n *     shadowSize: [68, 95],\r\n *     shadowAnchor: [22, 94]\r\n * });\r\n *\r\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\r\n * ```\r\n *\r\n * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.\r\n *\r\n */\r\n\r\nexport var Icon = Class.extend({\r\n\r\n\t/* @section\r\n\t * @aka Icon options\r\n\t *\r\n\t * @option iconUrl: String = null\r\n\t * **(required)** The URL to the icon image (absolute or relative to your script path).\r\n\t *\r\n\t * @option iconRetinaUrl: String = null\r\n\t * The URL to a retina sized version of the icon image (absolute or relative to your\r\n\t * script path). Used for Retina screen devices.\r\n\t *\r\n\t * @option iconSize: Point = null\r\n\t * Size of the icon image in pixels.\r\n\t *\r\n\t * @option iconAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the icon (relative to its top left corner). The icon\r\n\t * will be aligned so that this point is at the marker's geographical location. Centered\r\n\t * by default if size is specified, also can be set in CSS with negative margins.\r\n\t *\r\n\t * @option popupAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which popups will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option tooltipAnchor: Point = [0, 0]\r\n\t * The coordinates of the point from which tooltips will \"open\", relative to the icon anchor.\r\n\t *\r\n\t * @option shadowUrl: String = null\r\n\t * The URL to the icon shadow image. If not specified, no shadow image will be created.\r\n\t *\r\n\t * @option shadowRetinaUrl: String = null\r\n\t *\r\n\t * @option shadowSize: Point = null\r\n\t * Size of the shadow image in pixels.\r\n\t *\r\n\t * @option shadowAnchor: Point = null\r\n\t * The coordinates of the \"tip\" of the shadow (relative to its top left corner) (the same\r\n\t * as iconAnchor if not specified).\r\n\t *\r\n\t * @option className: String = ''\r\n\t * A custom class name to assign to both icon and shadow images. Empty by default.\r\n\t */\r\n\r\n\toptions: {\r\n\t\tpopupAnchor: [0, 0],\r\n\t\ttooltipAnchor: [0, 0],\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false\r\n\t},\r\n\r\n\tinitialize: function (options) {\r\n\t\tsetOptions(this, options);\r\n\t},\r\n\r\n\t// @method createIcon(oldIcon?: HTMLElement): HTMLElement\r\n\t// Called internally when the icon has to be shown, returns a `<img>` HTML element\r\n\t// styled according to the options.\r\n\tcreateIcon: function (oldIcon) {\r\n\t\treturn this._createIcon('icon', oldIcon);\r\n\t},\r\n\r\n\t// @method createShadow(oldIcon?: HTMLElement): HTMLElement\r\n\t// As `createIcon`, but for the shadow beneath it.\r\n\tcreateShadow: function (oldIcon) {\r\n\t\treturn this._createIcon('shadow', oldIcon);\r\n\t},\r\n\r\n\t_createIcon: function (name, oldIcon) {\r\n\t\tvar src = this._getIconUrl(name);\r\n\r\n\t\tif (!src) {\r\n\t\t\tif (name === 'icon') {\r\n\t\t\t\tthrow new Error('iconUrl not set in Icon options (see the docs).');\r\n\t\t\t}\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);\r\n\t\tthis._setIconStyles(img, name);\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\treturn img;\r\n\t},\r\n\r\n\t_setIconStyles: function (img, name) {\r\n\t\tvar options = this.options;\r\n\t\tvar sizeOption = options[name + 'Size'];\r\n\r\n\t\tif (typeof sizeOption === 'number') {\r\n\t\t\tsizeOption = [sizeOption, sizeOption];\r\n\t\t}\r\n\r\n\t\tvar size = point(sizeOption),\r\n\t\t    anchor = point(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||\r\n\t\t            size && size.divideBy(2, true));\r\n\r\n\t\timg.className = 'leaflet-marker-' + name + ' ' + (options.className || '');\r\n\r\n\t\tif (anchor) {\r\n\t\t\timg.style.marginLeft = (-anchor.x) + 'px';\r\n\t\t\timg.style.marginTop  = (-anchor.y) + 'px';\r\n\t\t}\r\n\r\n\t\tif (size) {\r\n\t\t\timg.style.width  = size.x + 'px';\r\n\t\t\timg.style.height = size.y + 'px';\r\n\t\t}\r\n\t},\r\n\r\n\t_createImg: function (src, el) {\r\n\t\tel = el || document.createElement('img');\r\n\t\tel.src = src;\r\n\t\treturn el;\r\n\t},\r\n\r\n\t_getIconUrl: function (name) {\r\n\t\treturn Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.icon(options: Icon options)\r\n// Creates an icon instance with the given options.\r\nexport function icon(options) {\r\n\treturn new Icon(options);\r\n}\r\n","import {Icon} from './Icon';\nimport * as DomUtil from '../../dom/DomUtil';\n\n/*\n * @miniclass Icon.Default (Icon)\n * @aka L.Icon.Default\n * @section\n *\n * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when\n * no icon is specified. Points to the blue marker image distributed with Leaflet\n * releases.\n *\n * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`\n * (which is a set of `Icon options`).\n *\n * If you want to _completely_ replace the default icon, override the\n * `L.Marker.prototype.options.icon` with your own icon instead.\n */\n\nexport var IconDefault = Icon.extend({\n\n\toptions: {\n\t\ticonUrl:       'marker-icon.png',\n\t\ticonRetinaUrl: 'marker-icon-2x.png',\n\t\tshadowUrl:     'marker-shadow.png',\n\t\ticonSize:    [25, 41],\n\t\ticonAnchor:  [12, 41],\n\t\tpopupAnchor: [1, -34],\n\t\ttooltipAnchor: [16, -28],\n\t\tshadowSize:  [41, 41]\n\t},\n\n\t_getIconUrl: function (name) {\n\t\tif (typeof IconDefault.imagePath !== 'string') {\t// Deprecated, backwards-compatibility only\n\t\t\tIconDefault.imagePath = this._detectIconPath();\n\t\t}\n\n\t\t// @option imagePath: String\n\t\t// `Icon.Default` will try to auto-detect the location of the\n\t\t// blue icon images. If you are placing these images in a non-standard\n\t\t// way, set this option to point to the right path.\n\t\treturn (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);\n\t},\n\n\t_stripUrl: function (path) {\t// separate function to use in tests\n\t\tvar strip = function (str, re, idx) {\n\t\t\tvar match = re.exec(str);\n\t\t\treturn match && match[idx];\n\t\t};\n\t\tpath = strip(path, /^url\\((['\"])?(.+)\\1\\)$/, 2);\n\t\treturn path && strip(path, /^(.*)marker-icon\\.png$/, 1);\n\t},\n\n\t_detectIconPath: function () {\n\t\tvar el = DomUtil.create('div',  'leaflet-default-icon-path', document.body);\n\t\tvar path = DomUtil.getStyle(el, 'background-image') ||\n\t\t           DomUtil.getStyle(el, 'backgroundImage');\t// IE8\n\n\t\tdocument.body.removeChild(el);\n\t\tpath = this._stripUrl(path);\n\t\tif (path) { return path; }\n\t\tvar link = document.querySelector('link[href$=\"leaflet.css\"]');\n\t\tif (!link) { return ''; }\n\t\treturn link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);\n\t}\n});\n","import {Handler} from '../../core/Handler';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Draggable} from '../../dom/Draggable';\nimport {toBounds} from '../../geometry/Bounds';\nimport {toPoint} from '../../geometry/Point';\nimport {requestAnimFrame, cancelAnimFrame} from '../../core/Util';\n\n/*\n * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.\n */\n\n\n/* @namespace Marker\n * @section Interaction handlers\n *\n * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:\n *\n * ```js\n * marker.dragging.disable();\n * ```\n *\n * @property dragging: Handler\n * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).\n */\n\nexport var MarkerDrag = Handler.extend({\n\tinitialize: function (marker) {\n\t\tthis._marker = marker;\n\t},\n\n\taddHooks: function () {\n\t\tvar icon = this._marker._icon;\n\n\t\tif (!this._draggable) {\n\t\t\tthis._draggable = new Draggable(icon, icon, true);\n\t\t}\n\n\t\tthis._draggable.on({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).enable();\n\n\t\tDomUtil.addClass(icon, 'leaflet-marker-draggable');\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._draggable.off({\n\t\t\tdragstart: this._onDragStart,\n\t\t\tpredrag: this._onPreDrag,\n\t\t\tdrag: this._onDrag,\n\t\t\tdragend: this._onDragEnd\n\t\t}, this).disable();\n\n\t\tif (this._marker._icon) {\n\t\t\tDomUtil.removeClass(this._marker._icon, 'leaflet-marker-draggable');\n\t\t}\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\t_adjustPan: function (e) {\n\t\tvar marker = this._marker,\n\t\t    map = marker._map,\n\t\t    speed = this._marker.options.autoPanSpeed,\n\t\t    padding = this._marker.options.autoPanPadding,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    bounds = map.getPixelBounds(),\n\t\t    origin = map.getPixelOrigin();\n\n\t\tvar panBounds = toBounds(\n\t\t\tbounds.min._subtract(origin).add(padding),\n\t\t\tbounds.max._subtract(origin).subtract(padding)\n\t\t);\n\n\t\tif (!panBounds.contains(iconPos)) {\n\t\t\t// Compute incremental movement\n\t\t\tvar movement = toPoint(\n\t\t\t\t(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -\n\t\t\t\t(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),\n\n\t\t\t\t(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -\n\t\t\t\t(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)\n\t\t\t).multiplyBy(speed);\n\n\t\t\tmap.panBy(movement, {animate: false});\n\n\t\t\tthis._draggable._newPos._add(movement);\n\t\t\tthis._draggable._startPos._add(movement);\n\n\t\t\tDomUtil.setPosition(marker._icon, this._draggable._newPos);\n\t\t\tthis._onDrag(e);\n\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDragStart: function () {\n\t\t// @section Dragging events\n\t\t// @event dragstart: Event\n\t\t// Fired when the user starts dragging the marker.\n\n\t\t// @event movestart: Event\n\t\t// Fired when the marker starts moving (because of dragging).\n\n\t\tthis._oldLatLng = this._marker.getLatLng();\n\n\t\t// When using ES6 imports it could not be set when `Popup` was not imported as well\n\t\tthis._marker.closePopup && this._marker.closePopup();\n\n\t\tthis._marker\n\t\t\t.fire('movestart')\n\t\t\t.fire('dragstart');\n\t},\n\n\t_onPreDrag: function (e) {\n\t\tif (this._marker.options.autoPan) {\n\t\t\tcancelAnimFrame(this._panRequest);\n\t\t\tthis._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tvar marker = this._marker,\n\t\t    shadow = marker._shadow,\n\t\t    iconPos = DomUtil.getPosition(marker._icon),\n\t\t    latlng = marker._map.layerPointToLatLng(iconPos);\n\n\t\t// update shadow position\n\t\tif (shadow) {\n\t\t\tDomUtil.setPosition(shadow, iconPos);\n\t\t}\n\n\t\tmarker._latlng = latlng;\n\t\te.latlng = latlng;\n\t\te.oldLatLng = this._oldLatLng;\n\n\t\t// @event drag: Event\n\t\t// Fired repeatedly while the user drags the marker.\n\t\tmarker\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_onDragEnd: function (e) {\n\t\t// @event dragend: DragEndEvent\n\t\t// Fired when the user stops dragging the marker.\n\n\t\t cancelAnimFrame(this._panRequest);\n\n\t\t// @event moveend: Event\n\t\t// Fired when the marker stops moving (because of dragging).\n\t\tdelete this._oldLatLng;\n\t\tthis._marker\n\t\t    .fire('moveend')\n\t\t    .fire('dragend', e);\n\t}\n});\n","import {Layer} from '../Layer';\r\nimport {IconDefault} from './Icon.Default';\r\nimport * as Util from '../../core/Util';\r\nimport {toLatLng as latLng} from '../../geo/LatLng';\r\nimport {toPoint as point} from '../../geometry/Point';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport {MarkerDrag} from './Marker.Drag';\r\n\r\n/*\r\n * @class Marker\r\n * @inherits Interactive layer\r\n * @aka L.Marker\r\n * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.marker([50.5, 30.5]).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var Marker = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka Marker options\r\n\toptions: {\r\n\t\t// @option icon: Icon = *\r\n\t\t// Icon instance to use for rendering the marker.\r\n\t\t// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.\r\n\t\t// If not specified, a common instance of `L.Icon.Default` is used.\r\n\t\ticon: new IconDefault(),\r\n\r\n\t\t// Option inherited from \"Interactive layer\" abstract class\r\n\t\tinteractive: true,\r\n\r\n\t\t// @option keyboard: Boolean = true\r\n\t\t// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.\r\n\t\tkeyboard: true,\r\n\r\n\t\t// @option title: String = ''\r\n\t\t// Text for the browser tooltip that appear on marker hover (no tooltip by default).\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\ttitle: '',\r\n\r\n\t\t// @option alt: String = 'Marker'\r\n\t\t// Text for the `alt` attribute of the icon image.\r\n\t\t// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).\r\n\t\talt: 'Marker',\r\n\r\n\t\t// @option zIndexOffset: Number = 0\r\n\t\t// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).\r\n\t\tzIndexOffset: 0,\r\n\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the marker.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option riseOnHover: Boolean = false\r\n\t\t// If `true`, the marker will get on top of others when you hover the mouse over it.\r\n\t\triseOnHover: false,\r\n\r\n\t\t// @option riseOffset: Number = 250\r\n\t\t// The z-index offset used for the `riseOnHover` feature.\r\n\t\triseOffset: 250,\r\n\r\n\t\t// @option pane: String = 'markerPane'\r\n\t\t// `Map pane` where the markers icon will be added.\r\n\t\tpane: 'markerPane',\r\n\r\n\t\t// @option shadowPane: String = 'shadowPane'\r\n\t\t// `Map pane` where the markers shadow will be added.\r\n\t\tshadowPane: 'shadowPane',\r\n\r\n\t\t// @option bubblingMouseEvents: Boolean = false\r\n\t\t// When `true`, a mouse event on this marker will trigger the same event on the map\r\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\r\n\t\tbubblingMouseEvents: false,\r\n\r\n\t\t// @option autoPanOnFocus: Boolean = true\r\n\t\t// When `true`, the map will pan whenever the marker is focused (via\r\n\t\t// e.g. pressing `tab` on the keyboard) to ensure the marker is\r\n\t\t// visible within the map's bounds\r\n\t\tautoPanOnFocus: true,\r\n\r\n\t\t// @section Draggable marker options\r\n\t\t// @option draggable: Boolean = false\r\n\t\t// Whether the marker is draggable with mouse/touch or not.\r\n\t\tdraggable: false,\r\n\r\n\t\t// @option autoPan: Boolean = false\r\n\t\t// Whether to pan the map when dragging this marker near its edge or not.\r\n\t\tautoPan: false,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(50, 50)\r\n\t\t// Distance (in pixels to the left/right and to the top/bottom) of the\r\n\t\t// map edge to start panning the map.\r\n\t\tautoPanPadding: [50, 50],\r\n\r\n\t\t// @option autoPanSpeed: Number = 10\r\n\t\t// Number of pixels the map should pan by.\r\n\t\tautoPanSpeed: 10\r\n\t},\r\n\r\n\t/* @section\r\n\t *\r\n\t * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:\r\n\t */\r\n\r\n\tinitialize: function (latlng, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\t\tthis._latlng = latLng(latlng);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.on('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._initIcon();\r\n\t\tthis.update();\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (this.dragging && this.dragging.enabled()) {\r\n\t\t\tthis.options.draggable = true;\r\n\t\t\tthis.dragging.removeHooks();\r\n\t\t}\r\n\t\tdelete this.dragging;\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tmap.off('zoomanim', this._animateZoom, this);\r\n\t\t}\r\n\r\n\t\tthis._removeIcon();\r\n\t\tthis._removeShadow();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\treturn {\r\n\t\t\tzoom: this.update,\r\n\t\t\tviewreset: this.update\r\n\t\t};\r\n\t},\r\n\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the current geographical position of the marker.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Changes the marker position to the given point.\r\n\tsetLatLng: function (latlng) {\r\n\t\tvar oldLatLng = this._latlng;\r\n\t\tthis._latlng = latLng(latlng);\r\n\t\tthis.update();\r\n\r\n\t\t// @event move: Event\r\n\t\t// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\r\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\r\n\t},\r\n\r\n\t// @method setZIndexOffset(offset: Number): this\r\n\t// Changes the [zIndex offset](#marker-zindexoffset) of the marker.\r\n\tsetZIndexOffset: function (offset) {\r\n\t\tthis.options.zIndexOffset = offset;\r\n\t\treturn this.update();\r\n\t},\r\n\r\n\t// @method getIcon: Icon\r\n\t// Returns the current icon used by the marker\r\n\tgetIcon: function () {\r\n\t\treturn this.options.icon;\r\n\t},\r\n\r\n\t// @method setIcon(icon: Icon): this\r\n\t// Changes the marker icon.\r\n\tsetIcon: function (icon) {\r\n\r\n\t\tthis.options.icon = icon;\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._initIcon();\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\tif (this._popup) {\r\n\t\t\tthis.bindPopup(this._popup, this._popup.options);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetElement: function () {\r\n\t\treturn this._icon;\r\n\t},\r\n\r\n\tupdate: function () {\r\n\r\n\t\tif (this._icon && this._map) {\r\n\t\t\tvar pos = this._map.latLngToLayerPoint(this._latlng).round();\r\n\t\t\tthis._setPos(pos);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_initIcon: function () {\r\n\t\tvar options = this.options,\r\n\t\t    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\r\n\r\n\t\tvar icon = options.icon.createIcon(this._icon),\r\n\t\t    addIcon = false;\r\n\r\n\t\t// if we're not reusing the icon, remove the old one and init new one\r\n\t\tif (icon !== this._icon) {\r\n\t\t\tif (this._icon) {\r\n\t\t\t\tthis._removeIcon();\r\n\t\t\t}\r\n\t\t\taddIcon = true;\r\n\r\n\t\t\tif (options.title) {\r\n\t\t\t\ticon.title = options.title;\r\n\t\t\t}\r\n\r\n\t\t\tif (icon.tagName === 'IMG') {\r\n\t\t\t\ticon.alt = options.alt || '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDomUtil.addClass(icon, classToAdd);\r\n\r\n\t\tif (options.keyboard) {\r\n\t\t\ticon.tabIndex = '0';\r\n\t\t\ticon.setAttribute('role', 'button');\r\n\t\t}\r\n\r\n\t\tthis._icon = icon;\r\n\r\n\t\tif (options.riseOnHover) {\r\n\t\t\tthis.on({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.on(icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tvar newShadow = options.icon.createShadow(this._shadow),\r\n\t\t    addShadow = false;\r\n\r\n\t\tif (newShadow !== this._shadow) {\r\n\t\t\tthis._removeShadow();\r\n\t\t\taddShadow = true;\r\n\t\t}\r\n\r\n\t\tif (newShadow) {\r\n\t\t\tDomUtil.addClass(newShadow, classToAdd);\r\n\t\t\tnewShadow.alt = '';\r\n\t\t}\r\n\t\tthis._shadow = newShadow;\r\n\r\n\r\n\t\tif (options.opacity < 1) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\r\n\t\tif (addIcon) {\r\n\t\t\tthis.getPane().appendChild(this._icon);\r\n\t\t}\r\n\t\tthis._initInteraction();\r\n\t\tif (newShadow && addShadow) {\r\n\t\t\tthis.getPane(options.shadowPane).appendChild(this._shadow);\r\n\t\t}\r\n\t},\r\n\r\n\t_removeIcon: function () {\r\n\t\tif (this.options.riseOnHover) {\r\n\t\t\tthis.off({\r\n\t\t\t\tmouseover: this._bringToFront,\r\n\t\t\t\tmouseout: this._resetZIndex\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.options.autoPanOnFocus) {\r\n\t\t\tDomEvent.off(this._icon, 'focus', this._panOnFocus, this);\r\n\t\t}\r\n\r\n\t\tDomUtil.remove(this._icon);\r\n\t\tthis.removeInteractiveTarget(this._icon);\r\n\r\n\t\tthis._icon = null;\r\n\t},\r\n\r\n\t_removeShadow: function () {\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.remove(this._shadow);\r\n\t\t}\r\n\t\tthis._shadow = null;\r\n\t},\r\n\r\n\t_setPos: function (pos) {\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setPosition(this._icon, pos);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setPosition(this._shadow, pos);\r\n\t\t}\r\n\r\n\t\tthis._zIndex = pos.y + this.options.zIndexOffset;\r\n\r\n\t\tthis._resetZIndex();\r\n\t},\r\n\r\n\t_updateZIndex: function (offset) {\r\n\t\tif (this._icon) {\r\n\t\t\tthis._icon.style.zIndex = this._zIndex + offset;\r\n\t\t}\r\n\t},\r\n\r\n\t_animateZoom: function (opt) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();\r\n\r\n\t\tthis._setPos(pos);\r\n\t},\r\n\r\n\t_initInteraction: function () {\r\n\r\n\t\tif (!this.options.interactive) { return; }\r\n\r\n\t\tDomUtil.addClass(this._icon, 'leaflet-interactive');\r\n\r\n\t\tthis.addInteractiveTarget(this._icon);\r\n\r\n\t\tif (MarkerDrag) {\r\n\t\t\tvar draggable = this.options.draggable;\r\n\t\t\tif (this.dragging) {\r\n\t\t\t\tdraggable = this.dragging.enabled();\r\n\t\t\t\tthis.dragging.disable();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dragging = new MarkerDrag(this);\r\n\r\n\t\t\tif (draggable) {\r\n\t\t\t\tthis.dragging.enable();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Changes the opacity of the marker.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\t\tif (this._map) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tvar opacity = this.options.opacity;\r\n\r\n\t\tif (this._icon) {\r\n\t\t\tDomUtil.setOpacity(this._icon, opacity);\r\n\t\t}\r\n\r\n\t\tif (this._shadow) {\r\n\t\t\tDomUtil.setOpacity(this._shadow, opacity);\r\n\t\t}\r\n\t},\r\n\r\n\t_bringToFront: function () {\r\n\t\tthis._updateZIndex(this.options.riseOffset);\r\n\t},\r\n\r\n\t_resetZIndex: function () {\r\n\t\tthis._updateZIndex(0);\r\n\t},\r\n\r\n\t_panOnFocus: function () {\r\n\t\tvar map = this._map;\r\n\t\tif (!map) { return; }\r\n\r\n\t\tvar iconOpts = this.options.icon.options;\r\n\t\tvar size = iconOpts.iconSize ? point(iconOpts.iconSize) : point(0, 0);\r\n\t\tvar anchor = iconOpts.iconAnchor ? point(iconOpts.iconAnchor) : point(0, 0);\r\n\r\n\t\tmap.panInside(this._latlng, {\r\n\t\t\tpaddingTopLeft: anchor,\r\n\t\t\tpaddingBottomRight: size.subtract(anchor)\r\n\t\t});\r\n\t},\r\n\r\n\t_getPopupAnchor: function () {\r\n\t\treturn this.options.icon.options.popupAnchor;\r\n\t},\r\n\r\n\t_getTooltipAnchor: function () {\r\n\t\treturn this.options.icon.options.tooltipAnchor;\r\n\t}\r\n});\r\n\r\n\r\n// factory L.marker(latlng: LatLng, options? : Marker options)\r\n\r\n// @factory L.marker(latlng: LatLng, options? : Marker options)\r\n// Instantiates a Marker object given a geographical point and optionally an options object.\r\nexport function marker(latlng, options) {\r\n\treturn new Marker(latlng, options);\r\n}\r\n","import {Layer} from '../Layer';\nimport * as Util from '../../core/Util';\n\n/*\n * @class Path\n * @aka L.Path\n * @inherits Interactive layer\n *\n * An abstract class that contains options and constants shared between vector\n * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.\n */\n\nexport var Path = Layer.extend({\n\n\t// @section\n\t// @aka Path options\n\toptions: {\n\t\t// @option stroke: Boolean = true\n\t\t// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.\n\t\tstroke: true,\n\n\t\t// @option color: String = '#3388ff'\n\t\t// Stroke color\n\t\tcolor: '#3388ff',\n\n\t\t// @option weight: Number = 3\n\t\t// Stroke width in pixels\n\t\tweight: 3,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Stroke opacity\n\t\topacity: 1,\n\n\t\t// @option lineCap: String= 'round'\n\t\t// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.\n\t\tlineCap: 'round',\n\n\t\t// @option lineJoin: String = 'round'\n\t\t// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.\n\t\tlineJoin: 'round',\n\n\t\t// @option dashArray: String = null\n\t\t// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashArray: null,\n\n\t\t// @option dashOffset: String = null\n\t\t// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).\n\t\tdashOffset: null,\n\n\t\t// @option fill: Boolean = depends\n\t\t// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.\n\t\tfill: false,\n\n\t\t// @option fillColor: String = *\n\t\t// Fill color. Defaults to the value of the [`color`](#path-color) option\n\t\tfillColor: null,\n\n\t\t// @option fillOpacity: Number = 0.2\n\t\t// Fill opacity.\n\t\tfillOpacity: 0.2,\n\n\t\t// @option fillRule: String = 'evenodd'\n\t\t// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.\n\t\tfillRule: 'evenodd',\n\n\t\t// className: '',\n\n\t\t// Option inherited from \"Interactive layer\" abstract class\n\t\tinteractive: true,\n\n\t\t// @option bubblingMouseEvents: Boolean = true\n\t\t// When `true`, a mouse event on this path will trigger the same event on the map\n\t\t// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).\n\t\tbubblingMouseEvents: true\n\t},\n\n\tbeforeAdd: function (map) {\n\t\t// Renderer is set here because we need to call renderer.getEvents\n\t\t// before this.getEvents.\n\t\tthis._renderer = map.getRenderer(this);\n\t},\n\n\tonAdd: function () {\n\t\tthis._renderer._initPath(this);\n\t\tthis._reset();\n\t\tthis._renderer._addPath(this);\n\t},\n\n\tonRemove: function () {\n\t\tthis._renderer._removePath(this);\n\t},\n\n\t// @method redraw(): this\n\t// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._renderer._updatePath(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method setStyle(style: Path options): this\n\t// Changes the appearance of a Path based on the options in the `Path options` object.\n\tsetStyle: function (style) {\n\t\tUtil.setOptions(this, style);\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._updateStyle(this);\n\t\t\tif (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {\n\t\t\t\tthis._updateBounds();\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToFront(): this\n\t// Brings the layer to the top of all path layers.\n\tbringToFront: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToFront(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack(): this\n\t// Brings the layer to the bottom of all path layers.\n\tbringToBack: function () {\n\t\tif (this._renderer) {\n\t\t\tthis._renderer._bringToBack(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetElement: function () {\n\t\treturn this._path;\n\t},\n\n\t_reset: function () {\n\t\t// defined in child classes\n\t\tthis._project();\n\t\tthis._update();\n\t},\n\n\t_clickTolerance: function () {\n\t\t// used when doing hit detection for Canvas layers\n\t\treturn (this.options.stroke ? this.options.weight / 2 : 0) +\n\t\t  (this._renderer.options.tolerance || 0);\n\t}\n});\n","import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n/*\n * @class CircleMarker\n * @aka L.CircleMarker\n * @inherits Path\n *\n * A circle of a fixed size with radius specified in pixels. Extends `Path`.\n */\n\nexport var CircleMarker = Path.extend({\n\n\t// @section\n\t// @aka CircleMarker options\n\toptions: {\n\t\tfill: true,\n\n\t\t// @option radius: Number = 10\n\t\t// Radius of the circle marker, in pixels\n\t\tradius: 10\n\t},\n\n\tinitialize: function (latlng, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis._radius = this.options.radius;\n\t},\n\n\t// @method setLatLng(latLng: LatLng): this\n\t// Sets the position of a circle marker to a new location.\n\tsetLatLng: function (latlng) {\n\t\tvar oldLatLng = this._latlng;\n\t\tthis._latlng = toLatLng(latlng);\n\t\tthis.redraw();\n\n\t\t// @event move: Event\n\t\t// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.\n\t\treturn this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});\n\t},\n\n\t// @method getLatLng(): LatLng\n\t// Returns the current geographical position of the circle marker\n\tgetLatLng: function () {\n\t\treturn this._latlng;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle marker. Units are in pixels.\n\tsetRadius: function (radius) {\n\t\tthis.options.radius = this._radius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of the circle\n\tgetRadius: function () {\n\t\treturn this._radius;\n\t},\n\n\tsetStyle : function (options) {\n\t\tvar radius = options && options.radius || this._radius;\n\t\tPath.prototype.setStyle.call(this, options);\n\t\tthis.setRadius(radius);\n\t\treturn this;\n\t},\n\n\t_project: function () {\n\t\tthis._point = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._updateBounds();\n\t},\n\n\t_updateBounds: function () {\n\t\tvar r = this._radius,\n\t\t    r2 = this._radiusY || r,\n\t\t    w = this._clickTolerance(),\n\t\t    p = [r + w, r2 + w];\n\t\tthis._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));\n\t},\n\n\t_update: function () {\n\t\tif (this._map) {\n\t\t\tthis._updatePath();\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updateCircle(this);\n\t},\n\n\t_empty: function () {\n\t\treturn this._radius && !this._renderer._bounds.intersects(this._pxBounds);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\treturn p.distanceTo(this._point) <= this._radius + this._clickTolerance();\n\t}\n});\n\n\n// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)\n// Instantiates a circle marker object given a geographical point, and an optional options object.\nexport function circleMarker(latlng, options) {\n\treturn new CircleMarker(latlng, options);\n}\n","import {CircleMarker} from './CircleMarker';\nimport {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport {toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Earth} from '../../geo/crs/CRS.Earth';\n\n\n/*\n * @class Circle\n * @aka L.Circle\n * @inherits CircleMarker\n *\n * A class for drawing circle overlays on a map. Extends `CircleMarker`.\n *\n * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).\n *\n * @example\n *\n * ```js\n * L.circle([50.5, 30.5], {radius: 200}).addTo(map);\n * ```\n */\n\nexport var Circle = CircleMarker.extend({\n\n\tinitialize: function (latlng, options, legacyOptions) {\n\t\tif (typeof options === 'number') {\n\t\t\t// Backwards compatibility with 0.7.x factory (latlng, radius, options?)\n\t\t\toptions = Util.extend({}, legacyOptions, {radius: options});\n\t\t}\n\t\tUtil.setOptions(this, options);\n\t\tthis._latlng = toLatLng(latlng);\n\n\t\tif (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }\n\n\t\t// @section\n\t\t// @aka Circle options\n\t\t// @option radius: Number; Radius of the circle, in meters.\n\t\tthis._mRadius = this.options.radius;\n\t},\n\n\t// @method setRadius(radius: Number): this\n\t// Sets the radius of a circle. Units are in meters.\n\tsetRadius: function (radius) {\n\t\tthis._mRadius = radius;\n\t\treturn this.redraw();\n\t},\n\n\t// @method getRadius(): Number\n\t// Returns the current radius of a circle. Units are in meters.\n\tgetRadius: function () {\n\t\treturn this._mRadius;\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\tvar half = [this._radius, this._radiusY || this._radius];\n\n\t\treturn new LatLngBounds(\n\t\t\tthis._map.layerPointToLatLng(this._point.subtract(half)),\n\t\t\tthis._map.layerPointToLatLng(this._point.add(half)));\n\t},\n\n\tsetStyle: Path.prototype.setStyle,\n\n\t_project: function () {\n\n\t\tvar lng = this._latlng.lng,\n\t\t    lat = this._latlng.lat,\n\t\t    map = this._map,\n\t\t    crs = map.options.crs;\n\n\t\tif (crs.distance === Earth.distance) {\n\t\t\tvar d = Math.PI / 180,\n\t\t\t    latR = (this._mRadius / Earth.R) / d,\n\t\t\t    top = map.project([lat + latR, lng]),\n\t\t\t    bottom = map.project([lat - latR, lng]),\n\t\t\t    p = top.add(bottom).divideBy(2),\n\t\t\t    lat2 = map.unproject(p).lat,\n\t\t\t    lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /\n\t\t\t            (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;\n\n\t\t\tif (isNaN(lngR) || lngR === 0) {\n\t\t\t\tlngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425\n\t\t\t}\n\n\t\t\tthis._point = p.subtract(map.getPixelOrigin());\n\t\t\tthis._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;\n\t\t\tthis._radiusY = p.y - top.y;\n\n\t\t} else {\n\t\t\tvar latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));\n\n\t\t\tthis._point = map.latLngToLayerPoint(this._latlng);\n\t\t\tthis._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;\n\t\t}\n\n\t\tthis._updateBounds();\n\t}\n});\n\n// @factory L.circle(latlng: LatLng, options?: Circle options)\n// Instantiates a circle object given a geographical point, and an options object\n// which contains the circle radius.\n// @alternative\n// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)\n// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.\n// Do not use in new applications or plugins.\nexport function circle(latlng, options, legacyOptions) {\n\treturn new Circle(latlng, options, legacyOptions);\n}\n","import {Path} from './Path';\nimport * as Util from '../../core/Util';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {LatLng, toLatLng} from '../../geo/LatLng';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\nimport {Point} from '../../geometry/Point';\n\n/*\n * @class Polyline\n * @aka L.Polyline\n * @inherits Path\n *\n * A class for drawing polyline overlays on a map. Extends `Path`.\n *\n * @example\n *\n * ```js\n * // create a red polyline from an array of LatLng points\n * var latlngs = [\n * \t[45.51, -122.68],\n * \t[37.77, -122.43],\n * \t[34.04, -118.2]\n * ];\n *\n * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polyline\n * map.fitBounds(polyline.getBounds());\n * ```\n *\n * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:\n *\n * ```js\n * // create a red polyline from an array of arrays of LatLng points\n * var latlngs = [\n * \t[[45.51, -122.68],\n * \t [37.77, -122.43],\n * \t [34.04, -118.2]],\n * \t[[40.78, -73.91],\n * \t [41.83, -87.62],\n * \t [32.76, -96.72]]\n * ];\n * ```\n */\n\n\nexport var Polyline = Path.extend({\n\n\t// @section\n\t// @aka Polyline options\n\toptions: {\n\t\t// @option smoothFactor: Number = 1.0\n\t\t// How much to simplify the polyline on each zoom level. More means\n\t\t// better performance and smoother look, and less means more accurate representation.\n\t\tsmoothFactor: 1.0,\n\n\t\t// @option noClip: Boolean = false\n\t\t// Disable polyline clipping.\n\t\tnoClip: false\n\t},\n\n\tinitialize: function (latlngs, options) {\n\t\tUtil.setOptions(this, options);\n\t\tthis._setLatLngs(latlngs);\n\t},\n\n\t// @method getLatLngs(): LatLng[]\n\t// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.\n\tgetLatLngs: function () {\n\t\treturn this._latlngs;\n\t},\n\n\t// @method setLatLngs(latlngs: LatLng[]): this\n\t// Replaces all the points in the polyline with the given array of geographical points.\n\tsetLatLngs: function (latlngs) {\n\t\tthis._setLatLngs(latlngs);\n\t\treturn this.redraw();\n\t},\n\n\t// @method isEmpty(): Boolean\n\t// Returns `true` if the Polyline has no LatLngs.\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length;\n\t},\n\n\t// @method closestLayerPoint(p: Point): Point\n\t// Returns the point closest to `p` on the Polyline.\n\tclosestLayerPoint: function (p) {\n\t\tvar minDistance = Infinity,\n\t\t    minPoint = null,\n\t\t    closest = LineUtil._sqClosestPointOnSegment,\n\t\t    p1, p2;\n\n\t\tfor (var j = 0, jLen = this._parts.length; j < jLen; j++) {\n\t\t\tvar points = this._parts[j];\n\n\t\t\tfor (var i = 1, len = points.length; i < len; i++) {\n\t\t\t\tp1 = points[i - 1];\n\t\t\t\tp2 = points[i];\n\n\t\t\t\tvar sqDist = closest(p, p1, p2, true);\n\n\t\t\t\tif (sqDist < minDistance) {\n\t\t\t\t\tminDistance = sqDist;\n\t\t\t\t\tminPoint = closest(p, p1, p2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minPoint) {\n\t\t\tminPoint.distance = Math.sqrt(minDistance);\n\t\t}\n\t\treturn minPoint;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn LineUtil.polylineCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t// @method getBounds(): LatLngBounds\n\t// Returns the `LatLngBounds` of the path.\n\tgetBounds: function () {\n\t\treturn this._bounds;\n\t},\n\n\t// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this\n\t// Adds a given point to the polyline. By default, adds to the first ring of\n\t// the polyline in case of a multi-polyline, but can be overridden by passing\n\t// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).\n\taddLatLng: function (latlng, latlngs) {\n\t\tlatlngs = latlngs || this._defaultShape();\n\t\tlatlng = toLatLng(latlng);\n\t\tlatlngs.push(latlng);\n\t\tthis._bounds.extend(latlng);\n\t\treturn this.redraw();\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tthis._bounds = new LatLngBounds();\n\t\tthis._latlngs = this._convertLatLngs(latlngs);\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];\n\t},\n\n\t// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = [],\n\t\t    flat = LineUtil.isFlat(latlngs);\n\n\t\tfor (var i = 0, len = latlngs.length; i < len; i++) {\n\t\t\tif (flat) {\n\t\t\t\tresult[i] = toLatLng(latlngs[i]);\n\t\t\t\tthis._bounds.extend(result[i]);\n\t\t\t} else {\n\t\t\t\tresult[i] = this._convertLatLngs(latlngs[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t_project: function () {\n\t\tvar pxBounds = new Bounds();\n\t\tthis._rings = [];\n\t\tthis._projectLatlngs(this._latlngs, this._rings, pxBounds);\n\n\t\tif (this._bounds.isValid() && pxBounds.isValid()) {\n\t\t\tthis._rawPxBounds = pxBounds;\n\t\t\tthis._updateBounds();\n\t\t}\n\t},\n\n\t_updateBounds: function () {\n\t\tvar w = this._clickTolerance(),\n\t\t    p = new Point(w, w);\n\n\t\tif (!this._rawPxBounds) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._pxBounds = new Bounds([\n\t\t\tthis._rawPxBounds.min.subtract(p),\n\t\t\tthis._rawPxBounds.max.add(p)\n\t\t]);\n\t},\n\n\t// recursively turns latlngs into a set of rings with projected coordinates\n\t_projectLatlngs: function (latlngs, result, projectedBounds) {\n\t\tvar flat = latlngs[0] instanceof LatLng,\n\t\t    len = latlngs.length,\n\t\t    i, ring;\n\n\t\tif (flat) {\n\t\t\tring = [];\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tring[i] = this._map.latLngToLayerPoint(latlngs[i]);\n\t\t\t\tprojectedBounds.extend(ring[i]);\n\t\t\t}\n\t\t\tresult.push(ring);\n\t\t} else {\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tthis._projectLatlngs(latlngs[i], result, projectedBounds);\n\t\t\t}\n\t\t}\n\t},\n\n\t// clip polyline by renderer bounds so that we have less to render for performance\n\t_clipPoints: function () {\n\t\tvar bounds = this._renderer._bounds;\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tvar parts = this._parts,\n\t\t    i, j, k, len, len2, segment, points;\n\n\t\tfor (i = 0, k = 0, len = this._rings.length; i < len; i++) {\n\t\t\tpoints = this._rings[i];\n\n\t\t\tfor (j = 0, len2 = points.length; j < len2 - 1; j++) {\n\t\t\t\tsegment = LineUtil.clipSegment(points[j], points[j + 1], bounds, j, true);\n\n\t\t\t\tif (!segment) { continue; }\n\n\t\t\t\tparts[k] = parts[k] || [];\n\t\t\t\tparts[k].push(segment[0]);\n\n\t\t\t\t// if segment goes out of screen, or it's the last one, it's the end of the line part\n\t\t\t\tif ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {\n\t\t\t\t\tparts[k].push(segment[1]);\n\t\t\t\t\tk++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// simplify each clipped part of the polyline for performance\n\t_simplifyPoints: function () {\n\t\tvar parts = this._parts,\n\t\t    tolerance = this.options.smoothFactor;\n\n\t\tfor (var i = 0, len = parts.length; i < len; i++) {\n\t\t\tparts[i] = LineUtil.simplify(parts[i], tolerance);\n\t\t}\n\t},\n\n\t_update: function () {\n\t\tif (!this._map) { return; }\n\n\t\tthis._clipPoints();\n\t\tthis._simplifyPoints();\n\t\tthis._updatePath();\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p, closed) {\n\t\tvar i, j, k, len, len2, part,\n\t\t    w = this._clickTolerance();\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// hit detection for polylines\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tif (!closed && (j === 0)) { continue; }\n\n\t\t\t\tif (LineUtil.pointToSegmentDistance(p, part[k], part[j]) <= w) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\n// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)\n// Instantiates a polyline object given an array of geographical points and\n// optionally an options object. You can create a `Polyline` object with\n// multiple separate lines (`MultiPolyline`) by passing an array of arrays\n// of geographic points.\nexport function polyline(latlngs, options) {\n\treturn new Polyline(latlngs, options);\n}\n\n// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.\nPolyline._flat = LineUtil._flat;\n","import {Polyline} from './Polyline';\nimport {LatLng} from '../../geo/LatLng';\nimport * as LineUtil from '../../geometry/LineUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport * as PolyUtil from '../../geometry/PolyUtil';\n\n/*\n * @class Polygon\n * @aka L.Polygon\n * @inherits Polyline\n *\n * A class for drawing polygon overlays on a map. Extends `Polyline`.\n *\n * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.\n *\n *\n * @example\n *\n * ```js\n * // create a red polygon from an array of LatLng points\n * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];\n *\n * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);\n *\n * // zoom the map to the polygon\n * map.fitBounds(polygon.getBounds());\n * ```\n *\n * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:\n *\n * ```js\n * var latlngs = [\n *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n * ];\n * ```\n *\n * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.\n *\n * ```js\n * var latlngs = [\n *   [ // first polygon\n *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring\n *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole\n *   ],\n *   [ // second polygon\n *     [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]\n *   ]\n * ];\n * ```\n */\n\nexport var Polygon = Polyline.extend({\n\n\toptions: {\n\t\tfill: true\n\t},\n\n\tisEmpty: function () {\n\t\treturn !this._latlngs.length || !this._latlngs[0].length;\n\t},\n\n\t// @method getCenter(): LatLng\n\t// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.\n\tgetCenter: function () {\n\t\t// throws error when not yet added to map as this center calculation requires projected coordinates\n\t\tif (!this._map) {\n\t\t\tthrow new Error('Must add layer to map before using getCenter()');\n\t\t}\n\t\treturn PolyUtil.polygonCenter(this._defaultShape(), this._map.options.crs);\n\t},\n\n\t_convertLatLngs: function (latlngs) {\n\t\tvar result = Polyline.prototype._convertLatLngs.call(this, latlngs),\n\t\t    len = result.length;\n\n\t\t// remove last point if it equals first one\n\t\tif (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {\n\t\t\tresult.pop();\n\t\t}\n\t\treturn result;\n\t},\n\n\t_setLatLngs: function (latlngs) {\n\t\tPolyline.prototype._setLatLngs.call(this, latlngs);\n\t\tif (LineUtil.isFlat(this._latlngs)) {\n\t\t\tthis._latlngs = [this._latlngs];\n\t\t}\n\t},\n\n\t_defaultShape: function () {\n\t\treturn LineUtil.isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];\n\t},\n\n\t_clipPoints: function () {\n\t\t// polygons need a different clipping algorithm so we redefine that\n\n\t\tvar bounds = this._renderer._bounds,\n\t\t    w = this.options.weight,\n\t\t    p = new Point(w, w);\n\n\t\t// increase clip padding by stroke width to avoid stroke on clip edges\n\t\tbounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));\n\n\t\tthis._parts = [];\n\t\tif (!this._pxBounds || !this._pxBounds.intersects(bounds)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.noClip) {\n\t\t\tthis._parts = this._rings;\n\t\t\treturn;\n\t\t}\n\n\t\tfor (var i = 0, len = this._rings.length, clipped; i < len; i++) {\n\t\t\tclipped = PolyUtil.clipPolygon(this._rings[i], bounds, true);\n\t\t\tif (clipped.length) {\n\t\t\t\tthis._parts.push(clipped);\n\t\t\t}\n\t\t}\n\t},\n\n\t_updatePath: function () {\n\t\tthis._renderer._updatePoly(this, true);\n\t},\n\n\t// Needed by the `Canvas` renderer for interactivity\n\t_containsPoint: function (p) {\n\t\tvar inside = false,\n\t\t    part, p1, p2, i, j, k, len, len2;\n\n\t\tif (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }\n\n\t\t// ray casting algorithm for detecting if point is in polygon\n\t\tfor (i = 0, len = this._parts.length; i < len; i++) {\n\t\t\tpart = this._parts[i];\n\n\t\t\tfor (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {\n\t\t\t\tp1 = part[j];\n\t\t\t\tp2 = part[k];\n\n\t\t\t\tif (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {\n\t\t\t\t\tinside = !inside;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// also check if it's on polygon stroke\n\t\treturn inside || Polyline.prototype._containsPoint.call(this, p, true);\n\t}\n\n});\n\n\n// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)\nexport function polygon(latlngs, options) {\n\treturn new Polygon(latlngs, options);\n}\n","import {LayerGroup} from './LayerGroup';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {Marker} from './marker/Marker';\r\nimport {Circle} from './vector/Circle';\r\nimport {CircleMarker} from './vector/CircleMarker';\r\nimport {Polyline} from './vector/Polyline';\r\nimport {Polygon} from './vector/Polygon';\r\nimport {LatLng} from '../geo/LatLng';\r\nimport * as LineUtil from '../geometry/LineUtil';\r\nimport {toLatLng} from '../geo/LatLng';\r\n\r\n\r\n/*\r\n * @class GeoJSON\r\n * @aka L.GeoJSON\r\n * @inherits FeatureGroup\r\n *\r\n * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse\r\n * GeoJSON data and display it on the map. Extends `FeatureGroup`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.geoJSON(data, {\r\n * \tstyle: function (feature) {\r\n * \t\treturn {color: feature.properties.color};\r\n * \t}\r\n * }).bindPopup(function (layer) {\r\n * \treturn layer.feature.properties.description;\r\n * }).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var GeoJSON = FeatureGroup.extend({\r\n\r\n\t/* @section\r\n\t * @aka GeoJSON options\r\n\t *\r\n\t * @option pointToLayer: Function = *\r\n\t * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally\r\n\t * called when data is added, passing the GeoJSON point feature and its `LatLng`.\r\n\t * The default is to spawn a default `Marker`:\r\n\t * ```js\r\n\t * function(geoJsonPoint, latlng) {\r\n\t * \treturn L.marker(latlng);\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option style: Function = *\r\n\t * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,\r\n\t * called internally when data is added.\r\n\t * The default value is to not override any defaults:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn {}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @option onEachFeature: Function = *\r\n\t * A `Function` that will be called once for each created `Feature`, after it has\r\n\t * been created and styled. Useful for attaching events and popups to features.\r\n\t * The default is to do nothing with the newly created layers:\r\n\t * ```js\r\n\t * function (feature, layer) {}\r\n\t * ```\r\n\t *\r\n\t * @option filter: Function = *\r\n\t * A `Function` that will be used to decide whether to include a feature or not.\r\n\t * The default is to include all features:\r\n\t * ```js\r\n\t * function (geoJsonFeature) {\r\n\t * \treturn true;\r\n\t * }\r\n\t * ```\r\n\t * Note: dynamically changing the `filter` option will have effect only on newly\r\n\t * added data. It will _not_ re-evaluate already included features.\r\n\t *\r\n\t * @option coordsToLatLng: Function = *\r\n\t * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.\r\n\t * The default is the `coordsToLatLng` static method.\r\n\t *\r\n\t * @option markersInheritOptions: Boolean = false\r\n\t * Whether default Markers for \"Point\" type Features inherit from group options.\r\n\t */\r\n\r\n\tinitialize: function (geojson, options) {\r\n\t\tUtil.setOptions(this, options);\r\n\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (geojson) {\r\n\t\t\tthis.addData(geojson);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method addData( <GeoJSON> data ): this\r\n\t// Adds a GeoJSON object to the layer.\r\n\taddData: function (geojson) {\r\n\t\tvar features = Util.isArray(geojson) ? geojson : geojson.features,\r\n\t\t    i, len, feature;\r\n\r\n\t\tif (features) {\r\n\t\t\tfor (i = 0, len = features.length; i < len; i++) {\r\n\t\t\t\t// only add this if geometry or geometries are set and not null\r\n\t\t\t\tfeature = features[i];\r\n\t\t\t\tif (feature.geometries || feature.geometry || feature.features || feature.coordinates) {\r\n\t\t\t\t\tthis.addData(feature);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\tvar options = this.options;\r\n\r\n\t\tif (options.filter && !options.filter(geojson)) { return this; }\r\n\r\n\t\tvar layer = geometryToLayer(geojson, options);\r\n\t\tif (!layer) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tlayer.feature = asFeature(geojson);\r\n\r\n\t\tlayer.defaultOptions = layer.options;\r\n\t\tthis.resetStyle(layer);\r\n\r\n\t\tif (options.onEachFeature) {\r\n\t\t\toptions.onEachFeature(geojson, layer);\r\n\t\t}\r\n\r\n\t\treturn this.addLayer(layer);\r\n\t},\r\n\r\n\t// @method resetStyle( <Path> layer? ): this\r\n\t// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.\r\n\t// If `layer` is omitted, the style of all features in the current layer is reset.\r\n\tresetStyle: function (layer) {\r\n\t\tif (layer === undefined) {\r\n\t\t\treturn this.eachLayer(this.resetStyle, this);\r\n\t\t}\r\n\t\t// reset any custom styles\r\n\t\tlayer.options = Util.extend({}, layer.defaultOptions);\r\n\t\tthis._setLayerStyle(layer, this.options.style);\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setStyle( <Function> style ): this\r\n\t// Changes styles of GeoJSON vector layers with the given style function.\r\n\tsetStyle: function (style) {\r\n\t\treturn this.eachLayer(function (layer) {\r\n\t\t\tthis._setLayerStyle(layer, style);\r\n\t\t}, this);\r\n\t},\r\n\r\n\t_setLayerStyle: function (layer, style) {\r\n\t\tif (layer.setStyle) {\r\n\t\t\tif (typeof style === 'function') {\r\n\t\t\t\tstyle = style(layer.feature);\r\n\t\t\t}\r\n\t\t\tlayer.setStyle(style);\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// @section\r\n// There are several static functions which can be called without instantiating L.GeoJSON:\r\n\r\n// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer\r\n// Creates a `Layer` from a given GeoJSON feature. Can use a custom\r\n// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// functions if provided as options.\r\nexport function geometryToLayer(geojson, options) {\r\n\r\n\tvar geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,\r\n\t    coords = geometry ? geometry.coordinates : null,\r\n\t    layers = [],\r\n\t    pointToLayer = options && options.pointToLayer,\r\n\t    _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,\r\n\t    latlng, latlngs, i, len;\r\n\r\n\tif (!coords && !geometry) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tswitch (geometry.type) {\r\n\tcase 'Point':\r\n\t\tlatlng = _coordsToLatLng(coords);\r\n\t\treturn _pointToLayer(pointToLayer, geojson, latlng, options);\r\n\r\n\tcase 'MultiPoint':\r\n\t\tfor (i = 0, len = coords.length; i < len; i++) {\r\n\t\t\tlatlng = _coordsToLatLng(coords[i]);\r\n\t\t\tlayers.push(_pointToLayer(pointToLayer, geojson, latlng, options));\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'LineString':\r\n\tcase 'MultiLineString':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);\r\n\t\treturn new Polyline(latlngs, options);\r\n\r\n\tcase 'Polygon':\r\n\tcase 'MultiPolygon':\r\n\t\tlatlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);\r\n\t\treturn new Polygon(latlngs, options);\r\n\r\n\tcase 'GeometryCollection':\r\n\t\tfor (i = 0, len = geometry.geometries.length; i < len; i++) {\r\n\t\t\tvar geoLayer = geometryToLayer({\r\n\t\t\t\tgeometry: geometry.geometries[i],\r\n\t\t\t\ttype: 'Feature',\r\n\t\t\t\tproperties: geojson.properties\r\n\t\t\t}, options);\r\n\r\n\t\t\tif (geoLayer) {\r\n\t\t\t\tlayers.push(geoLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tcase 'FeatureCollection':\r\n\t\tfor (i = 0, len = geometry.features.length; i < len; i++) {\r\n\t\t\tvar featureLayer = geometryToLayer(geometry.features[i], options);\r\n\r\n\t\t\tif (featureLayer) {\r\n\t\t\t\tlayers.push(featureLayer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn new FeatureGroup(layers);\r\n\r\n\tdefault:\r\n\t\tthrow new Error('Invalid GeoJSON object.');\r\n\t}\r\n}\r\n\r\nfunction _pointToLayer(pointToLayerFn, geojson, latlng, options) {\r\n\treturn pointToLayerFn ?\r\n\t\tpointToLayerFn(geojson, latlng) :\r\n\t\tnew Marker(latlng, options && options.markersInheritOptions && options);\r\n}\r\n\r\n// @function coordsToLatLng(coords: Array): LatLng\r\n// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)\r\n// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.\r\nexport function coordsToLatLng(coords) {\r\n\treturn new LatLng(coords[1], coords[0], coords[2]);\r\n}\r\n\r\n// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array\r\n// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.\r\n// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).\r\n// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.\r\nexport function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {\r\n\tvar latlngs = [];\r\n\r\n\tfor (var i = 0, len = coords.length, latlng; i < len; i++) {\r\n\t\tlatlng = levelsDeep ?\r\n\t\t\tcoordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :\r\n\t\t\t(_coordsToLatLng || coordsToLatLng)(coords[i]);\r\n\r\n\t\tlatlngs.push(latlng);\r\n\t}\r\n\r\n\treturn latlngs;\r\n}\r\n\r\n// @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngToCoords(latlng, precision) {\r\n\tlatlng = toLatLng(latlng);\r\n\treturn latlng.alt !== undefined ?\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision), Util.formatNum(latlng.alt, precision)] :\r\n\t\t[Util.formatNum(latlng.lng, precision), Util.formatNum(latlng.lat, precision)];\r\n}\r\n\r\n// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array\r\n// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)\r\n// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.\r\nexport function latLngsToCoords(latlngs, levelsDeep, closed, precision) {\r\n\tvar coords = [];\r\n\r\n\tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n\t\t// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion\r\n\t\tcoords.push(levelsDeep ?\r\n\t\t\tlatLngsToCoords(latlngs[i], LineUtil.isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :\r\n\t\t\tlatLngToCoords(latlngs[i], precision));\r\n\t}\r\n\r\n\tif (!levelsDeep && closed && coords.length > 0) {\r\n\t\tcoords.push(coords[0].slice());\r\n\t}\r\n\r\n\treturn coords;\r\n}\r\n\r\nexport function getFeature(layer, newGeometry) {\r\n\treturn layer.feature ?\r\n\t\tUtil.extend({}, layer.feature, {geometry: newGeometry}) :\r\n\t\tasFeature(newGeometry);\r\n}\r\n\r\n// @function asFeature(geojson: Object): Object\r\n// Normalize GeoJSON geometries/features into GeoJSON features.\r\nexport function asFeature(geojson) {\r\n\tif (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {\r\n\t\treturn geojson;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttype: 'Feature',\r\n\t\tproperties: {},\r\n\t\tgeometry: geojson\r\n\t};\r\n}\r\n\r\nvar PointToGeoJSON = {\r\n\ttoGeoJSON: function (precision) {\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'Point',\r\n\t\t\tcoordinates: latLngToCoords(this.getLatLng(), precision)\r\n\t\t});\r\n\t}\r\n};\r\n\r\n// @namespace Marker\r\n// @section Other methods\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).\r\nMarker.include(PointToGeoJSON);\r\n\r\n// @namespace CircleMarker\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).\r\nCircle.include(PointToGeoJSON);\r\nCircleMarker.include(PointToGeoJSON);\r\n\r\n\r\n// @namespace Polyline\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).\r\nPolyline.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar multi = !LineUtil.isFlat(this._latlngs);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'LineString',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n// @namespace Polygon\r\n// @method toGeoJSON(precision?: Number|false): Object\r\n// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).\r\nPolygon.include({\r\n\ttoGeoJSON: function (precision) {\r\n\t\tvar holes = !LineUtil.isFlat(this._latlngs),\r\n\t\t    multi = holes && !LineUtil.isFlat(this._latlngs[0]);\r\n\r\n\t\tvar coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);\r\n\r\n\t\tif (!holes) {\r\n\t\t\tcoords = [coords];\r\n\t\t}\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: (multi ? 'Multi' : '') + 'Polygon',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t}\r\n});\r\n\r\n\r\n// @namespace LayerGroup\r\nLayerGroup.include({\r\n\ttoMultiPoint: function (precision) {\r\n\t\tvar coords = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tcoords.push(layer.toGeoJSON(precision).geometry.coordinates);\r\n\t\t});\r\n\r\n\t\treturn getFeature(this, {\r\n\t\t\ttype: 'MultiPoint',\r\n\t\t\tcoordinates: coords\r\n\t\t});\r\n\t},\r\n\r\n\t// @method toGeoJSON(precision?: Number|false): Object\r\n\t// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.\r\n\t// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).\r\n\ttoGeoJSON: function (precision) {\r\n\r\n\t\tvar type = this.feature && this.feature.geometry && this.feature.geometry.type;\r\n\r\n\t\tif (type === 'MultiPoint') {\r\n\t\t\treturn this.toMultiPoint(precision);\r\n\t\t}\r\n\r\n\t\tvar isGeometryCollection = type === 'GeometryCollection',\r\n\t\t    jsons = [];\r\n\r\n\t\tthis.eachLayer(function (layer) {\r\n\t\t\tif (layer.toGeoJSON) {\r\n\t\t\t\tvar json = layer.toGeoJSON(precision);\r\n\t\t\t\tif (isGeometryCollection) {\r\n\t\t\t\t\tjsons.push(json.geometry);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar feature = asFeature(json);\r\n\t\t\t\t\t// Squash nested feature collections\r\n\t\t\t\t\tif (feature.type === 'FeatureCollection') {\r\n\t\t\t\t\t\tjsons.push.apply(jsons, feature.features);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tjsons.push(feature);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (isGeometryCollection) {\r\n\t\t\treturn getFeature(this, {\r\n\t\t\t\tgeometries: jsons,\r\n\t\t\t\ttype: 'GeometryCollection'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttype: 'FeatureCollection',\r\n\t\t\tfeatures: jsons\r\n\t\t};\r\n\t}\r\n});\r\n\r\n// @namespace GeoJSON\r\n// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)\r\n// Creates a GeoJSON layer. Optionally accepts an object in\r\n// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map\r\n// (you can alternatively add it later with `addData` method) and an `options` object.\r\nexport function geoJSON(geojson, options) {\r\n\treturn new GeoJSON(geojson, options);\r\n}\r\n\r\n// Backward compatibility.\r\nexport var geoJson = geoJSON;\r\n","import {Layer} from './Layer';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLngBounds} from '../geo/LatLngBounds';\r\nimport {Bounds} from '../geometry/Bounds';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class ImageOverlay\r\n * @aka L.ImageOverlay\r\n * @inherits Interactive layer\r\n *\r\n * Used to load and display a single image over specific bounds of the map. Extends `Layer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',\r\n * \timageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];\r\n * L.imageOverlay(imageUrl, imageBounds).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var ImageOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka ImageOverlay options\r\n\toptions: {\r\n\t\t// @option opacity: Number = 1.0\r\n\t\t// The opacity of the image overlay.\r\n\t\topacity: 1,\r\n\r\n\t\t// @option alt: String = ''\r\n\t\t// Text for the `alt` attribute of the image (useful for accessibility).\r\n\t\talt: '',\r\n\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the image.\r\n\t\t// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option errorOverlayUrl: String = ''\r\n\t\t// URL to the overlay image to show in place of the overlay that failed to load.\r\n\t\terrorOverlayUrl: '',\r\n\r\n\t\t// @option zIndex: Number = 1\r\n\t\t// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.\r\n\t\tzIndex: 1,\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom class name to assign to the image. Empty by default.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\tinitialize: function (url, bounds, options) { // (String, LatLngBounds, Object)\r\n\t\tthis._url = url;\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tUtil.setOptions(this, options);\r\n\t},\r\n\r\n\tonAdd: function () {\r\n\t\tif (!this._image) {\r\n\t\t\tthis._initImage();\r\n\r\n\t\t\tif (this.options.opacity < 1) {\r\n\t\t\t\tthis._updateOpacity();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._image, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._image);\r\n\t\t}\r\n\r\n\t\tthis.getPane().appendChild(this._image);\r\n\t\tthis._reset();\r\n\t},\r\n\r\n\tonRemove: function () {\r\n\t\tDomUtil.remove(this._image);\r\n\t\tif (this.options.interactive) {\r\n\t\t\tthis.removeInteractiveTarget(this._image);\r\n\t\t}\r\n\t},\r\n\r\n\t// @method setOpacity(opacity: Number): this\r\n\t// Sets the opacity of the overlay.\r\n\tsetOpacity: function (opacity) {\r\n\t\tthis.options.opacity = opacity;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._updateOpacity();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tsetStyle: function (styleOpts) {\r\n\t\tif (styleOpts.opacity) {\r\n\t\t\tthis.setOpacity(styleOpts.opacity);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToFront(): this\r\n\t// Brings the layer to the top of all overlays.\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack(): this\r\n\t// Brings the layer to the bottom of all overlays.\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._image);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setUrl(url: String): this\r\n\t// Changes the URL of the image.\r\n\tsetUrl: function (url) {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (this._image) {\r\n\t\t\tthis._image.src = url;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method setBounds(bounds: LatLngBounds): this\r\n\t// Update the bounds that this ImageOverlay covers\r\n\tsetBounds: function (bounds) {\r\n\t\tthis._bounds = toLatLngBounds(bounds);\r\n\r\n\t\tif (this._map) {\r\n\t\t\tthis._reset();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._reset,\r\n\t\t\tviewreset: this._reset\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method setZIndex(value: Number): this\r\n\t// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.\r\n\tsetZIndex: function (value) {\r\n\t\tthis.options.zIndex = value;\r\n\t\tthis._updateZIndex();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getBounds(): LatLngBounds\r\n\t// Get the bounds that this ImageOverlay covers\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t},\r\n\r\n\t// @method getElement(): HTMLElement\r\n\t// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)\r\n\t// used by this overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._image;\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'IMG';\r\n\t\tvar img = this._image = wasElementSupplied ? this._url : DomUtil.create('img');\r\n\r\n\t\tDomUtil.addClass(img, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(img, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(img, this.options.className); }\r\n\r\n\t\timg.onselectstart = Util.falseFn;\r\n\t\timg.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the ImageOverlay layer has loaded its image\r\n\t\timg.onload = Util.bind(this.fire, this, 'load');\r\n\t\timg.onerror = Util.bind(this._overlayOnError, this, 'error');\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\timg.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\tif (this.options.zIndex) {\r\n\t\t\tthis._updateZIndex();\r\n\t\t}\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tthis._url = img.src;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\timg.src = this._url;\r\n\t\timg.alt = this.options.alt;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar scale = this._map.getZoomScale(e.zoom),\r\n\t\t    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;\r\n\r\n\t\tDomUtil.setTransform(this._image, offset, scale);\r\n\t},\r\n\r\n\t_reset: function () {\r\n\t\tvar image = this._image,\r\n\t\t    bounds = new Bounds(\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),\r\n\t\t        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\r\n\t\t    size = bounds.getSize();\r\n\r\n\t\tDomUtil.setPosition(image, bounds.min);\r\n\r\n\t\timage.style.width  = size.x + 'px';\r\n\t\timage.style.height = size.y + 'px';\r\n\t},\r\n\r\n\t_updateOpacity: function () {\r\n\t\tDomUtil.setOpacity(this._image, this.options.opacity);\r\n\t},\r\n\r\n\t_updateZIndex: function () {\r\n\t\tif (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {\r\n\t\t\tthis._image.style.zIndex = this.options.zIndex;\r\n\t\t}\r\n\t},\r\n\r\n\t_overlayOnError: function () {\r\n\t\t// @event error: Event\r\n\t\t// Fired when the ImageOverlay layer fails to load its image\r\n\t\tthis.fire('error');\r\n\r\n\t\tvar errorUrl = this.options.errorOverlayUrl;\r\n\t\tif (errorUrl && this._url !== errorUrl) {\r\n\t\t\tthis._url = errorUrl;\r\n\t\t\tthis._image.src = errorUrl;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method getCenter(): LatLng\r\n\t// Returns the center of the ImageOverlay.\r\n\tgetCenter: function () {\r\n\t\treturn this._bounds.getCenter();\r\n\t}\r\n});\r\n\r\n// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)\r\n// Instantiates an image overlay object given the URL of the image and the\r\n// geographical bounds it is tied to.\r\nexport var imageOverlay = function (url, bounds, options) {\r\n\treturn new ImageOverlay(url, bounds, options);\r\n};\r\n","import {ImageOverlay} from './ImageOverlay';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport * as Util from '../core/Util';\r\n\r\n/*\r\n * @class VideoOverlay\r\n * @aka L.VideoOverlay\r\n * @inherits ImageOverlay\r\n *\r\n * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.\r\n *\r\n * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)\r\n * HTML5 element.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',\r\n * \tvideoBounds = [[ 32, -130], [ 13, -100]];\r\n * L.videoOverlay(videoUrl, videoBounds ).addTo(map);\r\n * ```\r\n */\r\n\r\nexport var VideoOverlay = ImageOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka VideoOverlay options\r\n\toptions: {\r\n\t\t// @option autoplay: Boolean = true\r\n\t\t// Whether the video starts playing automatically when loaded.\r\n\t\t// On some browsers autoplay will only work with `muted: true`\r\n\t\tautoplay: true,\r\n\r\n\t\t// @option loop: Boolean = true\r\n\t\t// Whether the video will loop back to the beginning when played.\r\n\t\tloop: true,\r\n\r\n\t\t// @option keepAspectRatio: Boolean = true\r\n\t\t// Whether the video will save aspect ratio after the projection.\r\n\t\t// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)\r\n\t\tkeepAspectRatio: true,\r\n\r\n\t\t// @option muted: Boolean = false\r\n\t\t// Whether the video starts on mute when loaded.\r\n\t\tmuted: false,\r\n\r\n\t\t// @option playsInline: Boolean = true\r\n\t\t// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.\r\n\t\tplaysInline: true\r\n\t},\r\n\r\n\t_initImage: function () {\r\n\t\tvar wasElementSupplied = this._url.tagName === 'VIDEO';\r\n\t\tvar vid = this._image = wasElementSupplied ? this._url : DomUtil.create('video');\r\n\r\n\t\tDomUtil.addClass(vid, 'leaflet-image-layer');\r\n\t\tif (this._zoomAnimated) { DomUtil.addClass(vid, 'leaflet-zoom-animated'); }\r\n\t\tif (this.options.className) { DomUtil.addClass(vid, this.options.className); }\r\n\r\n\t\tvid.onselectstart = Util.falseFn;\r\n\t\tvid.onmousemove = Util.falseFn;\r\n\r\n\t\t// @event load: Event\r\n\t\t// Fired when the video has finished loading the first frame\r\n\t\tvid.onloadeddata = Util.bind(this.fire, this, 'load');\r\n\r\n\t\tif (wasElementSupplied) {\r\n\t\t\tvar sourceElements = vid.getElementsByTagName('source');\r\n\t\t\tvar sources = [];\r\n\t\t\tfor (var j = 0; j < sourceElements.length; j++) {\r\n\t\t\t\tsources.push(sourceElements[j].src);\r\n\t\t\t}\r\n\r\n\t\t\tthis._url = (sourceElements.length > 0) ? sources : [vid.src];\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!Util.isArray(this._url)) { this._url = [this._url]; }\r\n\r\n\t\tif (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {\r\n\t\t\tvid.style['objectFit'] = 'fill';\r\n\t\t}\r\n\t\tvid.autoplay = !!this.options.autoplay;\r\n\t\tvid.loop = !!this.options.loop;\r\n\t\tvid.muted = !!this.options.muted;\r\n\t\tvid.playsInline = !!this.options.playsInline;\r\n\t\tfor (var i = 0; i < this._url.length; i++) {\r\n\t\t\tvar source = DomUtil.create('source');\r\n\t\t\tsource.src = this._url[i];\r\n\t\t\tvid.appendChild(source);\r\n\t\t}\r\n\t}\r\n\r\n\t// @method getElement(): HTMLVideoElement\r\n\t// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)\r\n\t// used by this overlay.\r\n});\r\n\r\n\r\n// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)\r\n// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the\r\n// geographical bounds it is tied to.\r\n\r\nexport function videoOverlay(video, bounds, options) {\r\n\treturn new VideoOverlay(video, bounds, options);\r\n}\r\n","import {ImageOverlay} from './ImageOverlay';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as Util from '../core/Util';\n\n/*\n * @class SVGOverlay\n * @aka L.SVGOverlay\n * @inherits ImageOverlay\n *\n * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.\n *\n * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.\n *\n * @example\n *\n * ```js\n * var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n * svgElement.setAttribute('xmlns', \"http://www.w3.org/2000/svg\");\n * svgElement.setAttribute('viewBox', \"0 0 200 200\");\n * svgElement.innerHTML = '<rect width=\"200\" height=\"200\"/><rect x=\"75\" y=\"23\" width=\"50\" height=\"50\" style=\"fill:red\"/><rect x=\"75\" y=\"123\" width=\"50\" height=\"50\" style=\"fill:#0013ff\"/>';\n * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];\n * L.svgOverlay(svgElement, svgElementBounds).addTo(map);\n * ```\n */\n\nexport var SVGOverlay = ImageOverlay.extend({\n\t_initImage: function () {\n\t\tvar el = this._image = this._url;\n\n\t\tDomUtil.addClass(el, 'leaflet-image-layer');\n\t\tif (this._zoomAnimated) { DomUtil.addClass(el, 'leaflet-zoom-animated'); }\n\t\tif (this.options.className) { DomUtil.addClass(el, this.options.className); }\n\n\t\tel.onselectstart = Util.falseFn;\n\t\tel.onmousemove = Util.falseFn;\n\t}\n\n\t// @method getElement(): SVGElement\n\t// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)\n\t// used by this overlay.\n});\n\n\n// @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)\n// Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.\n// A viewBox attribute is required on the SVG element to zoom in and out properly.\n\nexport function svgOverlay(el, bounds, options) {\n\treturn new SVGOverlay(el, bounds, options);\n}\n","import {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {FeatureGroup} from './FeatureGroup';\r\nimport * as Util from '../core/Util';\r\nimport {toLatLng, LatLng} from '../geo/LatLng';\r\nimport {toPoint} from '../geometry/Point';\r\nimport * as DomUtil from '../dom/DomUtil';\r\n\r\n/*\r\n * @class DivOverlay\r\n * @inherits Interactive layer\r\n * @aka L.DivOverlay\r\n * Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.\r\n */\r\n\r\n// @namespace DivOverlay\r\nexport var DivOverlay = Layer.extend({\r\n\r\n\t// @section\r\n\t// @aka DivOverlay options\r\n\toptions: {\r\n\t\t// @option interactive: Boolean = false\r\n\t\t// If true, the popup/tooltip will listen to the mouse events.\r\n\t\tinteractive: false,\r\n\r\n\t\t// @option offset: Point = Point(0, 0)\r\n\t\t// The offset of the overlay position.\r\n\t\toffset: [0, 0],\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the overlay.\r\n\t\tclassName: '',\r\n\r\n\t\t// @option pane: String = undefined\r\n\t\t// `Map pane` where the overlay will be added.\r\n\t\tpane: undefined,\r\n\r\n\t\t// @option content: String|HTMLElement|Function = ''\r\n\t\t// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be\r\n\t\t// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\t\tcontent: ''\r\n\t},\r\n\r\n\tinitialize: function (options, source) {\r\n\t\tif (options && (options instanceof LatLng || Util.isArray(options))) {\r\n\t\t\tthis._latlng = toLatLng(options);\r\n\t\t\tUtil.setOptions(this, source);\r\n\t\t} else {\r\n\t\t\tUtil.setOptions(this, options);\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\t\tif (this.options.content) {\r\n\t\t\tthis._content = this.options.content;\r\n\t\t}\r\n\t},\r\n\r\n\t// @method openOn(map: Map): this\r\n\t// Adds the overlay to the map.\r\n\t// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\t\tif (!map.hasLayer(this)) {\r\n\t\t\tmap.addLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method close(): this\r\n\t// Closes the overlay.\r\n\t// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`\r\n\t// and `layer.closePopup()`/`.closeTooltip()`.\r\n\tclose: function () {\r\n\t\tif (this._map) {\r\n\t\t\tthis._map.removeLayer(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method toggle(layer?: Layer): this\r\n\t// Opens or closes the overlay bound to layer depending on its current state.\r\n\t// Argument may be omitted only for overlay bound to layer.\r\n\t// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.\r\n\ttoggle: function (layer) {\r\n\t\tif (this._map) {\r\n\t\t\tthis.close();\r\n\t\t} else {\r\n\t\t\tif (arguments.length) {\r\n\t\t\t\tthis._source = layer;\r\n\t\t\t} else {\r\n\t\t\t\tlayer = this._source;\r\n\t\t\t}\r\n\t\t\tthis._prepareOpen();\r\n\r\n\t\t\t// open the overlay on the map\r\n\t\t\tthis.openOn(layer._map);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tthis._zoomAnimated = map._zoomAnimated;\r\n\r\n\t\tif (!this._container) {\r\n\t\t\tthis._initLayout();\r\n\t\t}\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t}\r\n\r\n\t\tclearTimeout(this._removeTimeout);\r\n\t\tthis.getPane().appendChild(this._container);\r\n\t\tthis.update();\r\n\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 1);\r\n\t\t}\r\n\r\n\t\tthis.bringToFront();\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.addInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tif (map._fadeAnimated) {\r\n\t\t\tDomUtil.setOpacity(this._container, 0);\r\n\t\t\tthis._removeTimeout = setTimeout(Util.bind(DomUtil.remove, undefined, this._container), 200);\r\n\t\t} else {\r\n\t\t\tDomUtil.remove(this._container);\r\n\t\t}\r\n\r\n\t\tif (this.options.interactive) {\r\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\r\n\t\t\tthis.removeInteractiveTarget(this._container);\r\n\t\t}\r\n\t},\r\n\r\n\t// @namespace DivOverlay\r\n\t// @method getLatLng: LatLng\r\n\t// Returns the geographical point of the overlay.\r\n\tgetLatLng: function () {\r\n\t\treturn this._latlng;\r\n\t},\r\n\r\n\t// @method setLatLng(latlng: LatLng): this\r\n\t// Sets the geographical point where the overlay will open.\r\n\tsetLatLng: function (latlng) {\r\n\t\tthis._latlng = toLatLng(latlng);\r\n\t\tif (this._map) {\r\n\t\t\tthis._updatePosition();\r\n\t\t\tthis._adjustPan();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getContent: String|HTMLElement\r\n\t// Returns the content of the overlay.\r\n\tgetContent: function () {\r\n\t\treturn this._content;\r\n\t},\r\n\r\n\t// @method setContent(htmlContent: String|HTMLElement|Function): this\r\n\t// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.\r\n\t// The function should return a `String` or `HTMLElement` to be used in the overlay.\r\n\tsetContent: function (content) {\r\n\t\tthis._content = content;\r\n\t\tthis.update();\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getElement: String|HTMLElement\r\n\t// Returns the HTML container of the overlay.\r\n\tgetElement: function () {\r\n\t\treturn this._container;\r\n\t},\r\n\r\n\t// @method update: null\r\n\t// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.\r\n\tupdate: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tthis._container.style.visibility = 'hidden';\r\n\r\n\t\tthis._updateContent();\r\n\t\tthis._updateLayout();\r\n\t\tthis._updatePosition();\r\n\r\n\t\tthis._container.style.visibility = '';\r\n\r\n\t\tthis._adjustPan();\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = {\r\n\t\t\tzoom: this._updatePosition,\r\n\t\t\tviewreset: this._updatePosition\r\n\t\t};\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tevents.zoomanim = this._animateZoom;\r\n\t\t}\r\n\t\treturn events;\r\n\t},\r\n\r\n\t// @method isOpen: Boolean\r\n\t// Returns `true` when the overlay is visible on the map.\r\n\tisOpen: function () {\r\n\t\treturn !!this._map && this._map.hasLayer(this);\r\n\t},\r\n\r\n\t// @method bringToFront: this\r\n\t// Brings this overlay in front of other overlays (in the same map pane).\r\n\tbringToFront: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toFront(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method bringToBack: this\r\n\t// Brings this overlay to the back of other overlays (in the same map pane).\r\n\tbringToBack: function () {\r\n\t\tif (this._map) {\r\n\t\t\tDomUtil.toBack(this._container);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)\r\n\t_prepareOpen: function (latlng) {\r\n\t\tvar source = this._source;\r\n\t\tif (!source._map) { return false; }\r\n\r\n\t\tif (source instanceof FeatureGroup) {\r\n\t\t\tsource = null;\r\n\t\t\tvar layers = this._source._layers;\r\n\t\t\tfor (var id in layers) {\r\n\t\t\t\tif (layers[id]._map) {\r\n\t\t\t\t\tsource = layers[id];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!source) { return false; } // Unable to get source layer.\r\n\r\n\t\t\t// set overlay source to this layer\r\n\t\t\tthis._source = source;\r\n\t\t}\r\n\r\n\t\tif (!latlng) {\r\n\t\t\tif (source.getCenter) {\r\n\t\t\t\tlatlng = source.getCenter();\r\n\t\t\t} else if (source.getLatLng) {\r\n\t\t\t\tlatlng = source.getLatLng();\r\n\t\t\t} else if (source.getBounds) {\r\n\t\t\t\tlatlng = source.getBounds().getCenter();\r\n\t\t\t} else {\r\n\t\t\t\tthrow new Error('Unable to get source layer LatLng.');\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.setLatLng(latlng);\r\n\r\n\t\tif (this._map) {\r\n\t\t\t// update the overlay (content, layout, etc...)\r\n\t\t\tthis.update();\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t_updateContent: function () {\r\n\t\tif (!this._content) { return; }\r\n\r\n\t\tvar node = this._contentNode;\r\n\t\tvar content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;\r\n\r\n\t\tif (typeof content === 'string') {\r\n\t\t\tnode.innerHTML = content;\r\n\t\t} else {\r\n\t\t\twhile (node.hasChildNodes()) {\r\n\t\t\t\tnode.removeChild(node.firstChild);\r\n\t\t\t}\r\n\t\t\tnode.appendChild(content);\r\n\t\t}\r\n\r\n\t\t// @namespace DivOverlay\r\n\t\t// @section DivOverlay events\r\n\t\t// @event contentupdate: Event\r\n\t\t// Fired when the content of the overlay is updated\r\n\t\tthis.fire('contentupdate');\r\n\t},\r\n\r\n\t_updatePosition: function () {\r\n\t\tif (!this._map) { return; }\r\n\r\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng),\r\n\t\t    offset = toPoint(this.options.offset),\r\n\t\t    anchor = this._getAnchor();\r\n\r\n\t\tif (this._zoomAnimated) {\r\n\t\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t\t} else {\r\n\t\t\toffset = offset.add(pos).add(anchor);\r\n\t\t}\r\n\r\n\t\tvar bottom = this._containerBottom = -offset.y,\r\n\t\t    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;\r\n\r\n\t\t// bottom position the overlay in case the height of the overlay changes (images loading etc)\r\n\t\tthis._container.style.bottom = bottom + 'px';\r\n\t\tthis._container.style.left = left + 'px';\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\treturn [0, 0];\r\n\t}\r\n\r\n});\r\n\r\nMap.include({\r\n\t_initOverlay: function (OverlayClass, content, latlng, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (!(overlay instanceof OverlayClass)) {\r\n\t\t\toverlay = new OverlayClass(options).setContent(content);\r\n\t\t}\r\n\t\tif (latlng) {\r\n\t\t\toverlay.setLatLng(latlng);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n\r\n\r\nLayer.include({\r\n\t_initOverlay: function (OverlayClass, old, content, options) {\r\n\t\tvar overlay = content;\r\n\t\tif (overlay instanceof OverlayClass) {\r\n\t\t\tUtil.setOptions(overlay, options);\r\n\t\t\toverlay._source = this;\r\n\t\t} else {\r\n\t\t\toverlay = (old && !options) ? old : new OverlayClass(options, this);\r\n\t\t\toverlay.setContent(content);\r\n\t\t}\r\n\t\treturn overlay;\r\n\t}\r\n});\r\n","import {DivOverlay} from './DivOverlay';\r\nimport * as DomEvent from '../dom/DomEvent';\r\nimport * as DomUtil from '../dom/DomUtil';\r\nimport {Point, toPoint} from '../geometry/Point';\r\nimport {Map} from '../map/Map';\r\nimport {Layer} from './Layer';\r\nimport {Path} from './vector/Path';\r\nimport {FeatureGroup} from './FeatureGroup';\r\n\r\n/*\r\n * @class Popup\r\n * @inherits DivOverlay\r\n * @aka L.Popup\r\n * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to\r\n * open popups while making sure that only one popup is open at one time\r\n * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.\r\n *\r\n * @example\r\n *\r\n * If you want to just bind a popup to marker click and then open it, it's really easy:\r\n *\r\n * ```js\r\n * marker.bindPopup(popupContent).openPopup();\r\n * ```\r\n * Path overlays like polylines also have a `bindPopup` method.\r\n *\r\n * A popup can be also standalone:\r\n *\r\n * ```js\r\n * var popup = L.popup()\r\n * \t.setLatLng(latlng)\r\n * \t.setContent('<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n * or\r\n * ```js\r\n * var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')\r\n * \t.openOn(map);\r\n * ```\r\n */\r\n\r\n\r\n// @namespace Popup\r\nexport var Popup = DivOverlay.extend({\r\n\r\n\t// @section\r\n\t// @aka Popup options\r\n\toptions: {\r\n\t\t// @option pane: String = 'popupPane'\r\n\t\t// `Map pane` where the popup will be added.\r\n\t\tpane: 'popupPane',\r\n\r\n\t\t// @option offset: Point = Point(0, 7)\r\n\t\t// The offset of the popup position.\r\n\t\toffset: [0, 7],\r\n\r\n\t\t// @option maxWidth: Number = 300\r\n\t\t// Max width of the popup, in pixels.\r\n\t\tmaxWidth: 300,\r\n\r\n\t\t// @option minWidth: Number = 50\r\n\t\t// Min width of the popup, in pixels.\r\n\t\tminWidth: 50,\r\n\r\n\t\t// @option maxHeight: Number = null\r\n\t\t// If set, creates a scrollable container of the given height\r\n\t\t// inside a popup if its content exceeds it.\r\n\t\t// The scrollable container can be styled using the\r\n\t\t// `leaflet-popup-scrolled` CSS class selector.\r\n\t\tmaxHeight: null,\r\n\r\n\t\t// @option autoPan: Boolean = true\r\n\t\t// Set it to `false` if you don't want the map to do panning animation\r\n\t\t// to fit the opened popup.\r\n\t\tautoPan: true,\r\n\r\n\t\t// @option autoPanPaddingTopLeft: Point = null\r\n\t\t// The margin between the popup and the top left corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingTopLeft: null,\r\n\r\n\t\t// @option autoPanPaddingBottomRight: Point = null\r\n\t\t// The margin between the popup and the bottom right corner of the map\r\n\t\t// view after autopanning was performed.\r\n\t\tautoPanPaddingBottomRight: null,\r\n\r\n\t\t// @option autoPanPadding: Point = Point(5, 5)\r\n\t\t// Equivalent of setting both top left and bottom right autopan padding to the same value.\r\n\t\tautoPanPadding: [5, 5],\r\n\r\n\t\t// @option keepInView: Boolean = false\r\n\t\t// Set it to `true` if you want to prevent users from panning the popup\r\n\t\t// off of the screen while it is open.\r\n\t\tkeepInView: false,\r\n\r\n\t\t// @option closeButton: Boolean = true\r\n\t\t// Controls the presence of a close button in the popup.\r\n\t\tcloseButton: true,\r\n\r\n\t\t// @option autoClose: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the popup closing when another popup is opened.\r\n\t\tautoClose: true,\r\n\r\n\t\t// @option closeOnEscapeKey: Boolean = true\r\n\t\t// Set it to `false` if you want to override the default behavior of\r\n\t\t// the ESC key for closing of the popup.\r\n\t\tcloseOnEscapeKey: true,\r\n\r\n\t\t// @option closeOnClick: Boolean = *\r\n\t\t// Set it if you want to override the default behavior of the popup closing when user clicks\r\n\t\t// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.\r\n\r\n\t\t// @option className: String = ''\r\n\t\t// A custom CSS class name to assign to the popup.\r\n\t\tclassName: ''\r\n\t},\r\n\r\n\t// @namespace Popup\r\n\t// @method openOn(map: Map): this\r\n\t// Alternative to `map.openPopup(popup)`.\r\n\t// Adds the popup to the map and closes the previous one.\r\n\topenOn: function (map) {\r\n\t\tmap = arguments.length ? map : this._source._map; // experimental, not the part of public api\r\n\r\n\t\tif (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {\r\n\t\t\tmap.removeLayer(map._popup);\r\n\t\t}\r\n\t\tmap._popup = this;\r\n\r\n\t\treturn DivOverlay.prototype.openOn.call(this, map);\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\t\tDivOverlay.prototype.onAdd.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupopen: PopupEvent\r\n\t\t// Fired when a popup is opened in the map\r\n\t\tmap.fire('popupopen', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupopen: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is opened\r\n\t\t\tthis._source.fire('popupopen', {popup: this}, true);\r\n\t\t\t// For non-path layers, we toggle the popup when clicking\r\n\t\t\t// again the layer, so prevent the map to reopen it.\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.on('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tonRemove: function (map) {\r\n\t\tDivOverlay.prototype.onRemove.call(this, map);\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event popupclose: PopupEvent\r\n\t\t// Fired when a popup in the map is closed\r\n\t\tmap.fire('popupclose', {popup: this});\r\n\r\n\t\tif (this._source) {\r\n\t\t\t// @namespace Layer\r\n\t\t\t// @section Popup events\r\n\t\t\t// @event popupclose: PopupEvent\r\n\t\t\t// Fired when a popup bound to this layer is closed\r\n\t\t\tthis._source.fire('popupclose', {popup: this}, true);\r\n\t\t\tif (!(this._source instanceof Path)) {\r\n\t\t\t\tthis._source.off('preclick', DomEvent.stopPropagation);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetEvents: function () {\r\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\r\n\r\n\t\tif (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {\r\n\t\t\tevents.preclick = this.close;\r\n\t\t}\r\n\r\n\t\tif (this.options.keepInView) {\r\n\t\t\tevents.moveend = this._adjustPan;\r\n\t\t}\r\n\r\n\t\treturn events;\r\n\t},\r\n\r\n\t_initLayout: function () {\r\n\t\tvar prefix = 'leaflet-popup',\r\n\t\t    container = this._container = DomUtil.create('div',\r\n\t\t\tprefix + ' ' + (this.options.className || '') +\r\n\t\t\t' leaflet-zoom-animated');\r\n\r\n\t\tvar wrapper = this._wrapper = DomUtil.create('div', prefix + '-content-wrapper', container);\r\n\t\tthis._contentNode = DomUtil.create('div', prefix + '-content', wrapper);\r\n\r\n\t\tDomEvent.disableClickPropagation(container);\r\n\t\tDomEvent.disableScrollPropagation(this._contentNode);\r\n\t\tDomEvent.on(container, 'contextmenu', DomEvent.stopPropagation);\r\n\r\n\t\tthis._tipContainer = DomUtil.create('div', prefix + '-tip-container', container);\r\n\t\tthis._tip = DomUtil.create('div', prefix + '-tip', this._tipContainer);\r\n\r\n\t\tif (this.options.closeButton) {\r\n\t\t\tvar closeButton = this._closeButton = DomUtil.create('a', prefix + '-close-button', container);\r\n\t\t\tcloseButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399\r\n\t\t\tcloseButton.setAttribute('aria-label', 'Close popup');\r\n\t\t\tcloseButton.href = '#close';\r\n\t\t\tcloseButton.innerHTML = '<span aria-hidden=\"true\">&#215;</span>';\r\n\r\n\t\t\tDomEvent.on(closeButton, 'click', function (ev) {\r\n\t\t\t\tDomEvent.preventDefault(ev);\r\n\t\t\t\tthis.close();\r\n\t\t\t}, this);\r\n\t\t}\r\n\t},\r\n\r\n\t_updateLayout: function () {\r\n\t\tvar container = this._contentNode,\r\n\t\t    style = container.style;\r\n\r\n\t\tstyle.width = '';\r\n\t\tstyle.whiteSpace = 'nowrap';\r\n\r\n\t\tvar width = container.offsetWidth;\r\n\t\twidth = Math.min(width, this.options.maxWidth);\r\n\t\twidth = Math.max(width, this.options.minWidth);\r\n\r\n\t\tstyle.width = (width + 1) + 'px';\r\n\t\tstyle.whiteSpace = '';\r\n\r\n\t\tstyle.height = '';\r\n\r\n\t\tvar height = container.offsetHeight,\r\n\t\t    maxHeight = this.options.maxHeight,\r\n\t\t    scrolledClass = 'leaflet-popup-scrolled';\r\n\r\n\t\tif (maxHeight && height > maxHeight) {\r\n\t\t\tstyle.height = maxHeight + 'px';\r\n\t\t\tDomUtil.addClass(container, scrolledClass);\r\n\t\t} else {\r\n\t\t\tDomUtil.removeClass(container, scrolledClass);\r\n\t\t}\r\n\r\n\t\tthis._containerWidth = this._container.offsetWidth;\r\n\t},\r\n\r\n\t_animateZoom: function (e) {\r\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),\r\n\t\t    anchor = this._getAnchor();\r\n\t\tDomUtil.setPosition(this._container, pos.add(anchor));\r\n\t},\r\n\r\n\t_adjustPan: function () {\r\n\t\tif (!this.options.autoPan) { return; }\r\n\t\tif (this._map._panAnim) { this._map._panAnim.stop(); }\r\n\r\n\t\t// We can endlessly recurse if keepInView is set and the view resets.\r\n\t\t// Let's guard against that by exiting early if we're responding to our own autopan.\r\n\t\tif (this._autopanning) {\r\n\t\t\tthis._autopanning = false;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar map = this._map,\r\n\t\t    marginBottom = parseInt(DomUtil.getStyle(this._container, 'marginBottom'), 10) || 0,\r\n\t\t    containerHeight = this._container.offsetHeight + marginBottom,\r\n\t\t    containerWidth = this._containerWidth,\r\n\t\t    layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);\r\n\r\n\t\tlayerPos._add(DomUtil.getPosition(this._container));\r\n\r\n\t\tvar containerPos = map.layerPointToContainerPoint(layerPos),\r\n\t\t    padding = toPoint(this.options.autoPanPadding),\r\n\t\t    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),\r\n\t\t    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),\r\n\t\t    size = map.getSize(),\r\n\t\t    dx = 0,\r\n\t\t    dy = 0;\r\n\r\n\t\tif (containerPos.x + containerWidth + paddingBR.x > size.x) { // right\r\n\t\t\tdx = containerPos.x + containerWidth - size.x + paddingBR.x;\r\n\t\t}\r\n\t\tif (containerPos.x - dx - paddingTL.x < 0) { // left\r\n\t\t\tdx = containerPos.x - paddingTL.x;\r\n\t\t}\r\n\t\tif (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom\r\n\t\t\tdy = containerPos.y + containerHeight - size.y + paddingBR.y;\r\n\t\t}\r\n\t\tif (containerPos.y - dy - paddingTL.y < 0) { // top\r\n\t\t\tdy = containerPos.y - paddingTL.y;\r\n\t\t}\r\n\r\n\t\t// @namespace Map\r\n\t\t// @section Popup events\r\n\t\t// @event autopanstart: Event\r\n\t\t// Fired when the map starts autopanning when opening a popup.\r\n\t\tif (dx || dy) {\r\n\t\t\t// Track that we're autopanning, as this function will be re-ran on moveend\r\n\t\t\tif (this.options.keepInView) {\r\n\t\t\t\tthis._autopanning = true;\r\n\t\t\t}\r\n\r\n\t\t\tmap\r\n\t\t\t    .fire('autopanstart')\r\n\t\t\t    .panBy([dx, dy]);\r\n\t\t}\r\n\t},\r\n\r\n\t_getAnchor: function () {\r\n\t\t// Where should we anchor the popup on the source layer?\r\n\t\treturn toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);\r\n\t}\r\n\r\n});\r\n\r\n// @namespace Popup\r\n// @factory L.popup(options?: Popup options, source?: Layer)\r\n// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.\r\n// @alternative\r\n// @factory L.popup(latlng: LatLng, options?: Popup options)\r\n// Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.\r\nexport var popup = function (options, source) {\r\n\treturn new Popup(options, source);\r\n};\r\n\r\n\r\n/* @namespace Map\r\n * @section Interaction Options\r\n * @option closePopupOnClick: Boolean = true\r\n * Set it to `false` if you don't want popups to close when user clicks the map.\r\n */\r\nMap.mergeOptions({\r\n\tclosePopupOnClick: true\r\n});\r\n\r\n\r\n// @namespace Map\r\n// @section Methods for Layers and Controls\r\nMap.include({\r\n\t// @method openPopup(popup: Popup): this\r\n\t// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).\r\n\t// @alternative\r\n\t// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this\r\n\t// Creates a popup with the specified content and options and opens it in the given point on a map.\r\n\topenPopup: function (popup, latlng, options) {\r\n\t\tthis._initOverlay(Popup, popup, latlng, options)\r\n\t\t  .openOn(this);\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(popup?: Popup): this\r\n\t// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).\r\n\tclosePopup: function (popup) {\r\n\t\tpopup = arguments.length ? popup : this._popup;\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/*\r\n * @namespace Layer\r\n * @section Popup methods example\r\n *\r\n * All layers share a set of methods convenient for binding popups to it.\r\n *\r\n * ```js\r\n * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);\r\n * layer.openPopup();\r\n * layer.closePopup();\r\n * ```\r\n *\r\n * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.\r\n */\r\n\r\n// @section Popup methods\r\nLayer.include({\r\n\r\n\t// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this\r\n\t// Binds a popup to the layer with the passed `content` and sets up the\r\n\t// necessary event listeners. If a `Function` is passed it will receive\r\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\r\n\tbindPopup: function (content, options) {\r\n\t\tthis._popup = this._initOverlay(Popup, this._popup, content, options);\r\n\t\tif (!this._popupHandlersAdded) {\r\n\t\t\tthis.on({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = true;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method unbindPopup(): this\r\n\t// Removes the popup previously bound with `bindPopup`.\r\n\tunbindPopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis.off({\r\n\t\t\t\tclick: this._openPopup,\r\n\t\t\t\tkeypress: this._onKeyPress,\r\n\t\t\t\tremove: this.closePopup,\r\n\t\t\t\tmove: this._movePopup\r\n\t\t\t});\r\n\t\t\tthis._popupHandlersAdded = false;\r\n\t\t\tthis._popup = null;\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method openPopup(latlng?: LatLng): this\r\n\t// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.\r\n\topenPopup: function (latlng) {\r\n\t\tif (this._popup) {\r\n\t\t\tif (!(this instanceof FeatureGroup)) {\r\n\t\t\t\tthis._popup._source = this;\r\n\t\t\t}\r\n\t\t\tif (this._popup._prepareOpen(latlng || this._latlng)) {\r\n\t\t\t\t// open the popup on the map\r\n\t\t\t\tthis._popup.openOn(this._map);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method closePopup(): this\r\n\t// Closes the popup bound to this layer if it is open.\r\n\tclosePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.close();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method togglePopup(): this\r\n\t// Opens or closes the popup bound to this layer depending on its current state.\r\n\ttogglePopup: function () {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.toggle(this);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method isPopupOpen(): boolean\r\n\t// Returns `true` if the popup bound to this layer is currently open.\r\n\tisPopupOpen: function () {\r\n\t\treturn (this._popup ? this._popup.isOpen() : false);\r\n\t},\r\n\r\n\t// @method setPopupContent(content: String|HTMLElement|Popup): this\r\n\t// Sets the content of the popup bound to this layer.\r\n\tsetPopupContent: function (content) {\r\n\t\tif (this._popup) {\r\n\t\t\tthis._popup.setContent(content);\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method getPopup(): Popup\r\n\t// Returns the popup bound to this layer.\r\n\tgetPopup: function () {\r\n\t\treturn this._popup;\r\n\t},\r\n\r\n\t_openPopup: function (e) {\r\n\t\tif (!this._popup || !this._map) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// prevent map click\r\n\t\tDomEvent.stop(e);\r\n\r\n\t\tvar target = e.layer || e.target;\r\n\t\tif (this._popup._source === target && !(target instanceof Path)) {\r\n\t\t\t// treat it like a marker and figure out\r\n\t\t\t// if we should toggle it open/closed\r\n\t\t\tif (this._map.hasLayer(this._popup)) {\r\n\t\t\t\tthis.closePopup();\r\n\t\t\t} else {\r\n\t\t\t\tthis.openPopup(e.latlng);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._popup._source = target;\r\n\t\tthis.openPopup(e.latlng);\r\n\t},\r\n\r\n\t_movePopup: function (e) {\r\n\t\tthis._popup.setLatLng(e.latlng);\r\n\t},\r\n\r\n\t_onKeyPress: function (e) {\r\n\t\tif (e.originalEvent.keyCode === 13) {\r\n\t\t\tthis._openPopup(e);\r\n\t\t}\r\n\t}\r\n});\r\n","import {DivOverlay} from './DivOverlay';\nimport {toPoint} from '../geometry/Point';\nimport {Map} from '../map/Map';\nimport {Layer} from './Layer';\nimport * as DomUtil from '../dom/DomUtil';\nimport * as DomEvent from '../dom/DomEvent';\nimport * as Util from '../core/Util';\nimport {FeatureGroup} from './FeatureGroup';\n\n/*\n * @class Tooltip\n * @inherits DivOverlay\n * @aka L.Tooltip\n * Used to display small texts on top of map layers.\n *\n * @example\n * If you want to just bind a tooltip to marker:\n *\n * ```js\n * marker.bindTooltip(\"my tooltip text\").openTooltip();\n * ```\n * Path overlays like polylines also have a `bindTooltip` method.\n *\n * A tooltip can be also standalone:\n *\n * ```js\n * var tooltip = L.tooltip()\n * \t.setLatLng(latlng)\n * \t.setContent('Hello world!<br />This is a nice tooltip.')\n * \t.addTo(map);\n * ```\n * or\n * ```js\n * var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})\n * \t.addTo(map);\n * ```\n *\n *\n * Note about tooltip offset. Leaflet takes two options in consideration\n * for computing tooltip offsetting:\n * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.\n *   Add a positive x offset to move the tooltip to the right, and a positive y offset to\n *   move it to the bottom. Negatives will move to the left and top.\n * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You\n *   should adapt this value if you use a custom icon.\n */\n\n\n// @namespace Tooltip\nexport var Tooltip = DivOverlay.extend({\n\n\t// @section\n\t// @aka Tooltip options\n\toptions: {\n\t\t// @option pane: String = 'tooltipPane'\n\t\t// `Map pane` where the tooltip will be added.\n\t\tpane: 'tooltipPane',\n\n\t\t// @option offset: Point = Point(0, 0)\n\t\t// Optional offset of the tooltip position.\n\t\toffset: [0, 0],\n\n\t\t// @option direction: String = 'auto'\n\t\t// Direction where to open the tooltip. Possible values are: `right`, `left`,\n\t\t// `top`, `bottom`, `center`, `auto`.\n\t\t// `auto` will dynamically switch between `right` and `left` according to the tooltip\n\t\t// position on the map.\n\t\tdirection: 'auto',\n\n\t\t// @option permanent: Boolean = false\n\t\t// Whether to open the tooltip permanently or only on mouseover.\n\t\tpermanent: false,\n\n\t\t// @option sticky: Boolean = false\n\t\t// If true, the tooltip will follow the mouse instead of being fixed at the feature center.\n\t\tsticky: false,\n\n\t\t// @option opacity: Number = 0.9\n\t\t// Tooltip container opacity.\n\t\topacity: 0.9\n\t},\n\n\tonAdd: function (map) {\n\t\tDivOverlay.prototype.onAdd.call(this, map);\n\t\tthis.setOpacity(this.options.opacity);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipopen: TooltipEvent\n\t\t// Fired when a tooltip is opened in the map.\n\t\tmap.fire('tooltipopen', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.addEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipopen: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is opened.\n\t\t\tthis._source.fire('tooltipopen', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tonRemove: function (map) {\n\t\tDivOverlay.prototype.onRemove.call(this, map);\n\n\t\t// @namespace Map\n\t\t// @section Tooltip events\n\t\t// @event tooltipclose: TooltipEvent\n\t\t// Fired when a tooltip in the map is closed.\n\t\tmap.fire('tooltipclose', {tooltip: this});\n\n\t\tif (this._source) {\n\t\t\tthis.removeEventParent(this._source);\n\n\t\t\t// @namespace Layer\n\t\t\t// @section Tooltip events\n\t\t\t// @event tooltipclose: TooltipEvent\n\t\t\t// Fired when a tooltip bound to this layer is closed.\n\t\t\tthis._source.fire('tooltipclose', {tooltip: this}, true);\n\t\t}\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = DivOverlay.prototype.getEvents.call(this);\n\n\t\tif (!this.options.permanent) {\n\t\t\tevents.preclick = this.close;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t_initLayout: function () {\n\t\tvar prefix = 'leaflet-tooltip',\n\t\t    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');\n\n\t\tthis._contentNode = this._container = DomUtil.create('div', className);\n\n\t\tthis._container.setAttribute('role', 'tooltip');\n\t\tthis._container.setAttribute('id', 'leaflet-tooltip-' + Util.stamp(this));\n\t},\n\n\t_updateLayout: function () {},\n\n\t_adjustPan: function () {},\n\n\t_setPosition: function (pos) {\n\t\tvar subX, subY,\n\t\t    map = this._map,\n\t\t    container = this._container,\n\t\t    centerPoint = map.latLngToContainerPoint(map.getCenter()),\n\t\t    tooltipPoint = map.layerPointToContainerPoint(pos),\n\t\t    direction = this.options.direction,\n\t\t    tooltipWidth = container.offsetWidth,\n\t\t    tooltipHeight = container.offsetHeight,\n\t\t    offset = toPoint(this.options.offset),\n\t\t    anchor = this._getAnchor();\n\n\t\tif (direction === 'top') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight;\n\t\t} else if (direction === 'bottom') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = 0;\n\t\t} else if (direction === 'center') {\n\t\t\tsubX = tooltipWidth / 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'right') {\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (direction === 'left') {\n\t\t\tsubX = tooltipWidth;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else if (tooltipPoint.x < centerPoint.x) {\n\t\t\tdirection = 'right';\n\t\t\tsubX = 0;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t} else {\n\t\t\tdirection = 'left';\n\t\t\tsubX = tooltipWidth + (offset.x + anchor.x) * 2;\n\t\t\tsubY = tooltipHeight / 2;\n\t\t}\n\n\t\tpos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);\n\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-right');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-left');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-top');\n\t\tDomUtil.removeClass(container, 'leaflet-tooltip-bottom');\n\t\tDomUtil.addClass(container, 'leaflet-tooltip-' + direction);\n\t\tDomUtil.setPosition(container, pos);\n\t},\n\n\t_updatePosition: function () {\n\t\tvar pos = this._map.latLngToLayerPoint(this._latlng);\n\t\tthis._setPosition(pos);\n\t},\n\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\n\t\tif (this._container) {\n\t\t\tDomUtil.setOpacity(this._container, opacity);\n\t\t}\n\t},\n\n\t_animateZoom: function (e) {\n\t\tvar pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);\n\t\tthis._setPosition(pos);\n\t},\n\n\t_getAnchor: function () {\n\t\t// Where should we anchor the tooltip on the source layer?\n\t\treturn toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);\n\t}\n\n});\n\n// @namespace Tooltip\n// @factory L.tooltip(options?: Tooltip options, source?: Layer)\n// Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.\n// @alternative\n// @factory L.tooltip(latlng: LatLng, options?: Tooltip options)\n// Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.\nexport var tooltip = function (options, source) {\n\treturn new Tooltip(options, source);\n};\n\n// @namespace Map\n// @section Methods for Layers and Controls\nMap.include({\n\n\t// @method openTooltip(tooltip: Tooltip): this\n\t// Opens the specified tooltip.\n\t// @alternative\n\t// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this\n\t// Creates a tooltip with the specified content and options and open it.\n\topenTooltip: function (tooltip, latlng, options) {\n\t\tthis._initOverlay(Tooltip, tooltip, latlng, options)\n\t\t  .openOn(this);\n\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(tooltip: Tooltip): this\n\t// Closes the tooltip given as parameter.\n\tcloseTooltip: function (tooltip) {\n\t\ttooltip.close();\n\t\treturn this;\n\t}\n\n});\n\n/*\n * @namespace Layer\n * @section Tooltip methods example\n *\n * All layers share a set of methods convenient for binding tooltips to it.\n *\n * ```js\n * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);\n * layer.openTooltip();\n * layer.closeTooltip();\n * ```\n */\n\n// @section Tooltip methods\nLayer.include({\n\n\t// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this\n\t// Binds a tooltip to the layer with the passed `content` and sets up the\n\t// necessary event listeners. If a `Function` is passed it will receive\n\t// the layer as the first argument and should return a `String` or `HTMLElement`.\n\tbindTooltip: function (content, options) {\n\n\t\tif (this._tooltip && this.isTooltipOpen()) {\n\t\t\tthis.unbindTooltip();\n\t\t}\n\n\t\tthis._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);\n\t\tthis._initTooltipInteractions();\n\n\t\tif (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {\n\t\t\tthis.openTooltip();\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t// @method unbindTooltip(): this\n\t// Removes the tooltip previously bound with `bindTooltip`.\n\tunbindTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._initTooltipInteractions(true);\n\t\t\tthis.closeTooltip();\n\t\t\tthis._tooltip = null;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_initTooltipInteractions: function (remove) {\n\t\tif (!remove && this._tooltipHandlersAdded) { return; }\n\t\tvar onOff = remove ? 'off' : 'on',\n\t\t    events = {\n\t\t\tremove: this.closeTooltip,\n\t\t\tmove: this._moveTooltip\n\t\t    };\n\t\tif (!this._tooltip.options.permanent) {\n\t\t\tevents.mouseover = this._openTooltip;\n\t\t\tevents.mouseout = this.closeTooltip;\n\t\t\tevents.click = this._openTooltip;\n\t\t\tif (this._map) {\n\t\t\t\tthis._addFocusListeners();\n\t\t\t} else {\n\t\t\t\tevents.add = this._addFocusListeners;\n\t\t\t}\n\t\t} else {\n\t\t\tevents.add = this._openTooltip;\n\t\t}\n\t\tif (this._tooltip.options.sticky) {\n\t\t\tevents.mousemove = this._moveTooltip;\n\t\t}\n\t\tthis[onOff](events);\n\t\tthis._tooltipHandlersAdded = !remove;\n\t},\n\n\t// @method openTooltip(latlng?: LatLng): this\n\t// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.\n\topenTooltip: function (latlng) {\n\t\tif (this._tooltip) {\n\t\t\tif (!(this instanceof FeatureGroup)) {\n\t\t\t\tthis._tooltip._source = this;\n\t\t\t}\n\t\t\tif (this._tooltip._prepareOpen(latlng)) {\n\t\t\t\t// open the tooltip on the map\n\t\t\t\tthis._tooltip.openOn(this._map);\n\n\t\t\t\tif (this.getElement) {\n\t\t\t\t\tthis._setAriaDescribedByOnLayer(this);\n\t\t\t\t} else if (this.eachLayer) {\n\t\t\t\t\tthis.eachLayer(this._setAriaDescribedByOnLayer, this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method closeTooltip(): this\n\t// Closes the tooltip bound to this layer if it is open.\n\tcloseTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\treturn this._tooltip.close();\n\t\t}\n\t},\n\n\t// @method toggleTooltip(): this\n\t// Opens or closes the tooltip bound to this layer depending on its current state.\n\ttoggleTooltip: function () {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.toggle(this);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method isTooltipOpen(): boolean\n\t// Returns `true` if the tooltip bound to this layer is currently open.\n\tisTooltipOpen: function () {\n\t\treturn this._tooltip.isOpen();\n\t},\n\n\t// @method setTooltipContent(content: String|HTMLElement|Tooltip): this\n\t// Sets the content of the tooltip bound to this layer.\n\tsetTooltipContent: function (content) {\n\t\tif (this._tooltip) {\n\t\t\tthis._tooltip.setContent(content);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getTooltip(): Tooltip\n\t// Returns the tooltip bound to this layer.\n\tgetTooltip: function () {\n\t\treturn this._tooltip;\n\t},\n\n\t_addFocusListeners: function () {\n\t\tif (this.getElement) {\n\t\t\tthis._addFocusListenersOnLayer(this);\n\t\t} else if (this.eachLayer) {\n\t\t\tthis.eachLayer(this._addFocusListenersOnLayer, this);\n\t\t}\n\t},\n\n\t_addFocusListenersOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tDomEvent.on(el, 'focus', function () {\n\t\t\t\tthis._tooltip._source = layer;\n\t\t\t\tthis.openTooltip();\n\t\t\t}, this);\n\t\t\tDomEvent.on(el, 'blur', this.closeTooltip, this);\n\t\t}\n\t},\n\n\t_setAriaDescribedByOnLayer: function (layer) {\n\t\tvar el = typeof layer.getElement === 'function' && layer.getElement();\n\t\tif (el) {\n\t\t\tel.setAttribute('aria-describedby', this._tooltip._container.id);\n\t\t}\n\t},\n\n\n\t_openTooltip: function (e) {\n\t\tif (!this._tooltip || !this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the map is moving, we will show the tooltip after it's done.\n\t\tif (this._map.dragging && this._map.dragging.moving() && !this._openOnceFlag) {\n\t\t\tthis._openOnceFlag = true;\n\t\t\tvar that = this;\n\t\t\tthis._map.once('moveend', function () {\n\t\t\t\tthat._openOnceFlag = false;\n\t\t\t\tthat._openTooltip(e);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis._tooltip._source = e.layer || e.target;\n\n\t\tthis.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);\n\t},\n\n\t_moveTooltip: function (e) {\n\t\tvar latlng = e.latlng, containerPoint, layerPoint;\n\t\tif (this._tooltip.options.sticky && e.originalEvent) {\n\t\t\tcontainerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);\n\t\t\tlayerPoint = this._map.containerPointToLayerPoint(containerPoint);\n\t\t\tlatlng = this._map.layerPointToLatLng(layerPoint);\n\t\t}\n\t\tthis._tooltip.setLatLng(latlng);\n\t}\n});\n","import {Icon} from './Icon';\nimport {toPoint as point} from '../../geometry/Point';\nimport {empty} from '../../dom/DomUtil';\n\n/*\n * @class DivIcon\n * @aka L.DivIcon\n * @inherits Icon\n *\n * Represents a lightweight icon for markers that uses a simple `<div>`\n * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.\n *\n * @example\n * ```js\n * var myIcon = L.divIcon({className: 'my-div-icon'});\n * // you can set .my-div-icon styles in CSS\n *\n * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);\n * ```\n *\n * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.\n */\n\nexport var DivIcon = Icon.extend({\n\toptions: {\n\t\t// @section\n\t\t// @aka DivIcon options\n\t\ticonSize: [12, 12], // also can be set through CSS\n\n\t\t// iconAnchor: (Point),\n\t\t// popupAnchor: (Point),\n\n\t\t// @option html: String|HTMLElement = ''\n\t\t// Custom HTML code to put inside the div element, empty by default. Alternatively,\n\t\t// an instance of `HTMLElement`.\n\t\thtml: false,\n\n\t\t// @option bgPos: Point = [0, 0]\n\t\t// Optional relative position of the background, in pixels\n\t\tbgPos: null,\n\n\t\tclassName: 'leaflet-div-icon'\n\t},\n\n\tcreateIcon: function (oldIcon) {\n\t\tvar div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),\n\t\t    options = this.options;\n\n\t\tif (options.html instanceof Element) {\n\t\t\tempty(div);\n\t\t\tdiv.appendChild(options.html);\n\t\t} else {\n\t\t\tdiv.innerHTML = options.html !== false ? options.html : '';\n\t\t}\n\n\t\tif (options.bgPos) {\n\t\t\tvar bgPos = point(options.bgPos);\n\t\t\tdiv.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';\n\t\t}\n\t\tthis._setIconStyles(div, 'icon');\n\n\t\treturn div;\n\t},\n\n\tcreateShadow: function () {\n\t\treturn null;\n\t}\n});\n\n// @factory L.divIcon(options: DivIcon options)\n// Creates a `DivIcon` instance with the given options.\nexport function divIcon(options) {\n\treturn new DivIcon(options);\n}\n","import {Icon} from './Icon';\nexport {icon} from './Icon';\nimport {IconDefault} from './Icon.Default';\nIcon.Default = IconDefault;\nexport {Icon};\n\nexport {DivIcon, divIcon} from './DivIcon';\nexport {Marker, marker} from './Marker';\n","import {Layer} from '../Layer';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {Point} from '../../geometry/Point';\nimport {Bounds} from '../../geometry/Bounds';\nimport {LatLngBounds, toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * @class GridLayer\n * @inherits Layer\n * @aka L.GridLayer\n *\n * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.\n * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.\n *\n *\n * @section Synchronous usage\n * @example\n *\n * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords){\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z\n *         var ctx = tile.getContext('2d');\n *\n *         // return the tile so it can be rendered on screen\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section Asynchronous usage\n * @example\n *\n * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.\n *\n * ```js\n * var CanvasLayer = L.GridLayer.extend({\n *     createTile: function(coords, done){\n *         var error;\n *\n *         // create a <canvas> element for drawing\n *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');\n *\n *         // setup tile width and height according to the options\n *         var size = this.getTileSize();\n *         tile.width = size.x;\n *         tile.height = size.y;\n *\n *         // draw something asynchronously and pass the tile to the done() callback\n *         setTimeout(function() {\n *             done(error, tile);\n *         }, 1000);\n *\n *         return tile;\n *     }\n * });\n * ```\n *\n * @section\n */\n\n\nexport var GridLayer = Layer.extend({\n\n\t// @section\n\t// @aka GridLayer options\n\toptions: {\n\t\t// @option tileSize: Number|Point = 256\n\t\t// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.\n\t\ttileSize: 256,\n\n\t\t// @option opacity: Number = 1.0\n\t\t// Opacity of the tiles. Can be used in the `createTile()` function.\n\t\topacity: 1,\n\n\t\t// @option updateWhenIdle: Boolean = (depends)\n\t\t// Load new tiles only when panning ends.\n\t\t// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.\n\t\t// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the\n\t\t// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.\n\t\tupdateWhenIdle: Browser.mobile,\n\n\t\t// @option updateWhenZooming: Boolean = true\n\t\t// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.\n\t\tupdateWhenZooming: true,\n\n\t\t// @option updateInterval: Number = 200\n\t\t// Tiles will not update more than once every `updateInterval` milliseconds when panning.\n\t\tupdateInterval: 200,\n\n\t\t// @option zIndex: Number = 1\n\t\t// The explicit zIndex of the tile layer.\n\t\tzIndex: 1,\n\n\t\t// @option bounds: LatLngBounds = undefined\n\t\t// If set, tiles will only be loaded inside the set `LatLngBounds`.\n\t\tbounds: null,\n\n\t\t// @option minZoom: Number = 0\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\n\t\tminZoom: 0,\n\n\t\t// @option maxZoom: Number = undefined\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\n\t\tmaxZoom: undefined,\n\n\t\t// @option maxNativeZoom: Number = undefined\n\t\t// Maximum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded\n\t\t// from `maxNativeZoom` level and auto-scaled.\n\t\tmaxNativeZoom: undefined,\n\n\t\t// @option minNativeZoom: Number = undefined\n\t\t// Minimum zoom number the tile source has available. If it is specified,\n\t\t// the tiles on all zoom levels lower than `minNativeZoom` will be loaded\n\t\t// from `minNativeZoom` level and auto-scaled.\n\t\tminNativeZoom: undefined,\n\n\t\t// @option noWrap: Boolean = false\n\t\t// Whether the layer is wrapped around the antimeridian. If `true`, the\n\t\t// GridLayer will only be displayed once at low zoom levels. Has no\n\t\t// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used\n\t\t// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting\n\t\t// tiles outside the CRS limits.\n\t\tnoWrap: false,\n\n\t\t// @option pane: String = 'tilePane'\n\t\t// `Map pane` where the grid layer will be added.\n\t\tpane: 'tilePane',\n\n\t\t// @option className: String = ''\n\t\t// A custom class name to assign to the tile layer. Empty by default.\n\t\tclassName: '',\n\n\t\t// @option keepBuffer: Number = 2\n\t\t// When panning the map, keep this many rows and columns of tiles before unloading them.\n\t\tkeepBuffer: 2\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t},\n\n\tonAdd: function () {\n\t\tthis._initContainer();\n\n\t\tthis._levels = {};\n\t\tthis._tiles = {};\n\n\t\tthis._resetView(); // implicit _update() call\n\t},\n\n\tbeforeAdd: function (map) {\n\t\tmap._addZoomLimit(this);\n\t},\n\n\tonRemove: function (map) {\n\t\tthis._removeAllTiles();\n\t\tDomUtil.remove(this._container);\n\t\tmap._removeZoomLimit(this);\n\t\tthis._container = null;\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t// @method bringToFront: this\n\t// Brings the tile layer to the top of all tile layers.\n\tbringToFront: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toFront(this._container);\n\t\t\tthis._setAutoZIndex(Math.max);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method bringToBack: this\n\t// Brings the tile layer to the bottom of all tile layers.\n\tbringToBack: function () {\n\t\tif (this._map) {\n\t\t\tDomUtil.toBack(this._container);\n\t\t\tthis._setAutoZIndex(Math.min);\n\t\t}\n\t\treturn this;\n\t},\n\n\t// @method getContainer: HTMLElement\n\t// Returns the HTML element that contains the tiles for this layer.\n\tgetContainer: function () {\n\t\treturn this._container;\n\t},\n\n\t// @method setOpacity(opacity: Number): this\n\t// Changes the [opacity](#gridlayer-opacity) of the grid layer.\n\tsetOpacity: function (opacity) {\n\t\tthis.options.opacity = opacity;\n\t\tthis._updateOpacity();\n\t\treturn this;\n\t},\n\n\t// @method setZIndex(zIndex: Number): this\n\t// Changes the [zIndex](#gridlayer-zindex) of the grid layer.\n\tsetZIndex: function (zIndex) {\n\t\tthis.options.zIndex = zIndex;\n\t\tthis._updateZIndex();\n\n\t\treturn this;\n\t},\n\n\t// @method isLoading: Boolean\n\t// Returns `true` if any tile in the grid layer has not finished loading.\n\tisLoading: function () {\n\t\treturn this._loading;\n\t},\n\n\t// @method redraw: this\n\t// Causes the layer to clear all the tiles and request them again.\n\tredraw: function () {\n\t\tif (this._map) {\n\t\t\tthis._removeAllTiles();\n\t\t\tvar tileZoom = this._clampZoom(this._map.getZoom());\n\t\t\tif (tileZoom !== this._tileZoom) {\n\t\t\t\tthis._tileZoom = tileZoom;\n\t\t\t\tthis._updateLevels();\n\t\t\t}\n\t\t\tthis._update();\n\t\t}\n\t\treturn this;\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewprereset: this._invalidateAll,\n\t\t\tviewreset: this._resetView,\n\t\t\tzoom: this._resetView,\n\t\t\tmoveend: this._onMoveEnd\n\t\t};\n\n\t\tif (!this.options.updateWhenIdle) {\n\t\t\t// update tiles on move, but not more often than once per given interval\n\t\t\tif (!this._onMove) {\n\t\t\t\tthis._onMove = Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\n\t\t\t}\n\n\t\t\tevents.move = this._onMove;\n\t\t}\n\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._animateZoom;\n\t\t}\n\n\t\treturn events;\n\t},\n\n\t// @section Extension methods\n\t// Layers extending `GridLayer` shall reimplement the following method.\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\n\t// Called only internally, must be overridden by classes extending `GridLayer`.\n\t// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback\n\t// is specified, it must be called when the tile has finished loading and drawing.\n\tcreateTile: function () {\n\t\treturn document.createElement('div');\n\t},\n\n\t// @section\n\t// @method getTileSize: Point\n\t// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.\n\tgetTileSize: function () {\n\t\tvar s = this.options.tileSize;\n\t\treturn s instanceof Point ? s : new Point(s, s);\n\t},\n\n\t_updateZIndex: function () {\n\t\tif (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {\n\t\t\tthis._container.style.zIndex = this.options.zIndex;\n\t\t}\n\t},\n\n\t_setAutoZIndex: function (compare) {\n\t\t// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)\n\n\t\tvar layers = this.getPane().children,\n\t\t    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min\n\n\t\tfor (var i = 0, len = layers.length, zIndex; i < len; i++) {\n\n\t\t\tzIndex = layers[i].style.zIndex;\n\n\t\t\tif (layers[i] !== this._container && zIndex) {\n\t\t\t\tedgeZIndex = compare(edgeZIndex, +zIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (isFinite(edgeZIndex)) {\n\t\t\tthis.options.zIndex = edgeZIndex + compare(-1, 1);\n\t\t\tthis._updateZIndex();\n\t\t}\n\t},\n\n\t_updateOpacity: function () {\n\t\tif (!this._map) { return; }\n\n\t\t// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles\n\t\tif (Browser.ielt9) { return; }\n\n\t\tDomUtil.setOpacity(this._container, this.options.opacity);\n\n\t\tvar now = +new Date(),\n\t\t    nextFrame = false,\n\t\t    willPrune = false;\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar tile = this._tiles[key];\n\t\t\tif (!tile.current || !tile.loaded) { continue; }\n\n\t\t\tvar fade = Math.min(1, (now - tile.loaded) / 200);\n\n\t\t\tDomUtil.setOpacity(tile.el, fade);\n\t\t\tif (fade < 1) {\n\t\t\t\tnextFrame = true;\n\t\t\t} else {\n\t\t\t\tif (tile.active) {\n\t\t\t\t\twillPrune = true;\n\t\t\t\t} else {\n\t\t\t\t\tthis._onOpaqueTile(tile);\n\t\t\t\t}\n\t\t\t\ttile.active = true;\n\t\t\t}\n\t\t}\n\n\t\tif (willPrune && !this._noPrune) { this._pruneTiles(); }\n\n\t\tif (nextFrame) {\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t}\n\t},\n\n\t_onOpaqueTile: Util.falseFn,\n\n\t_initContainer: function () {\n\t\tif (this._container) { return; }\n\n\t\tthis._container = DomUtil.create('div', 'leaflet-layer ' + (this.options.className || ''));\n\t\tthis._updateZIndex();\n\n\t\tif (this.options.opacity < 1) {\n\t\t\tthis._updateOpacity();\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t},\n\n\t_updateLevels: function () {\n\n\t\tvar zoom = this._tileZoom,\n\t\t    maxZoom = this.options.maxZoom;\n\n\t\tif (zoom === undefined) { return undefined; }\n\n\t\tfor (var z in this._levels) {\n\t\t\tz = Number(z);\n\t\t\tif (this._levels[z].el.children.length || z === zoom) {\n\t\t\t\tthis._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);\n\t\t\t\tthis._onUpdateLevel(z);\n\t\t\t} else {\n\t\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\t\tthis._removeTilesAtZoom(z);\n\t\t\t\tthis._onRemoveLevel(z);\n\t\t\t\tdelete this._levels[z];\n\t\t\t}\n\t\t}\n\n\t\tvar level = this._levels[zoom],\n\t\t    map = this._map;\n\n\t\tif (!level) {\n\t\t\tlevel = this._levels[zoom] = {};\n\n\t\t\tlevel.el = DomUtil.create('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);\n\t\t\tlevel.el.style.zIndex = maxZoom;\n\n\t\t\tlevel.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();\n\t\t\tlevel.zoom = zoom;\n\n\t\t\tthis._setZoomTransform(level, map.getCenter(), map.getZoom());\n\n\t\t\t// force the browser to consider the newly added element for transition\n\t\t\tUtil.falseFn(level.el.offsetWidth);\n\n\t\t\tthis._onCreateLevel(level);\n\t\t}\n\n\t\tthis._level = level;\n\n\t\treturn level;\n\t},\n\n\t_onUpdateLevel: Util.falseFn,\n\n\t_onRemoveLevel: Util.falseFn,\n\n\t_onCreateLevel: Util.falseFn,\n\n\t_pruneTiles: function () {\n\t\tif (!this._map) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar key, tile;\n\n\t\tvar zoom = this._map.getZoom();\n\t\tif (zoom > this.options.maxZoom ||\n\t\t\tzoom < this.options.minZoom) {\n\t\t\tthis._removeAllTiles();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\ttile.retain = tile.current;\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\ttile = this._tiles[key];\n\t\t\tif (tile.current && !tile.active) {\n\t\t\t\tvar coords = tile.coords;\n\t\t\t\tif (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {\n\t\t\t\t\tthis._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (key in this._tiles) {\n\t\t\tif (!this._tiles[key].retain) {\n\t\t\t\tthis._removeTile(key);\n\t\t\t}\n\t\t}\n\t},\n\n\t_removeTilesAtZoom: function (zoom) {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (this._tiles[key].coords.z !== zoom) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_removeAllTiles: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tthis._removeTile(key);\n\t\t}\n\t},\n\n\t_invalidateAll: function () {\n\t\tfor (var z in this._levels) {\n\t\t\tDomUtil.remove(this._levels[z].el);\n\t\t\tthis._onRemoveLevel(Number(z));\n\t\t\tdelete this._levels[z];\n\t\t}\n\t\tthis._removeAllTiles();\n\n\t\tthis._tileZoom = undefined;\n\t},\n\n\t_retainParent: function (x, y, z, minZoom) {\n\t\tvar x2 = Math.floor(x / 2),\n\t\t    y2 = Math.floor(y / 2),\n\t\t    z2 = z - 1,\n\t\t    coords2 = new Point(+x2, +y2);\n\t\tcoords2.z = +z2;\n\n\t\tvar key = this._tileCoordsToKey(coords2),\n\t\t    tile = this._tiles[key];\n\n\t\tif (tile && tile.active) {\n\t\t\ttile.retain = true;\n\t\t\treturn true;\n\n\t\t} else if (tile && tile.loaded) {\n\t\t\ttile.retain = true;\n\t\t}\n\n\t\tif (z2 > minZoom) {\n\t\t\treturn this._retainParent(x2, y2, z2, minZoom);\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_retainChildren: function (x, y, z, maxZoom) {\n\n\t\tfor (var i = 2 * x; i < 2 * x + 2; i++) {\n\t\t\tfor (var j = 2 * y; j < 2 * y + 2; j++) {\n\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = z + 1;\n\n\t\t\t\tvar key = this._tileCoordsToKey(coords),\n\t\t\t\t    tile = this._tiles[key];\n\n\t\t\t\tif (tile && tile.active) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t} else if (tile && tile.loaded) {\n\t\t\t\t\ttile.retain = true;\n\t\t\t\t}\n\n\t\t\t\tif (z + 1 < maxZoom) {\n\t\t\t\t\tthis._retainChildren(i, j, z + 1, maxZoom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_resetView: function (e) {\n\t\tvar animating = e && (e.pinch || e.flyTo);\n\t\tthis._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);\n\t},\n\n\t_animateZoom: function (e) {\n\t\tthis._setView(e.center, e.zoom, true, e.noUpdate);\n\t},\n\n\t_clampZoom: function (zoom) {\n\t\tvar options = this.options;\n\n\t\tif (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {\n\t\t\treturn options.minNativeZoom;\n\t\t}\n\n\t\tif (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {\n\t\t\treturn options.maxNativeZoom;\n\t\t}\n\n\t\treturn zoom;\n\t},\n\n\t_setView: function (center, zoom, noPrune, noUpdate) {\n\t\tvar tileZoom = Math.round(zoom);\n\t\tif ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||\n\t\t    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {\n\t\t\ttileZoom = undefined;\n\t\t} else {\n\t\t\ttileZoom = this._clampZoom(tileZoom);\n\t\t}\n\n\t\tvar tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);\n\n\t\tif (!noUpdate || tileZoomChanged) {\n\n\t\t\tthis._tileZoom = tileZoom;\n\n\t\t\tif (this._abortLoading) {\n\t\t\t\tthis._abortLoading();\n\t\t\t}\n\n\t\t\tthis._updateLevels();\n\t\t\tthis._resetGrid();\n\n\t\t\tif (tileZoom !== undefined) {\n\t\t\t\tthis._update(center);\n\t\t\t}\n\n\t\t\tif (!noPrune) {\n\t\t\t\tthis._pruneTiles();\n\t\t\t}\n\n\t\t\t// Flag to prevent _updateOpacity from pruning tiles during\n\t\t\t// a zoom anim or a pinch gesture\n\t\t\tthis._noPrune = !!noPrune;\n\t\t}\n\n\t\tthis._setZoomTransforms(center, zoom);\n\t},\n\n\t_setZoomTransforms: function (center, zoom) {\n\t\tfor (var i in this._levels) {\n\t\t\tthis._setZoomTransform(this._levels[i], center, zoom);\n\t\t}\n\t},\n\n\t_setZoomTransform: function (level, center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, level.zoom),\n\t\t    translate = level.origin.multiplyBy(scale)\n\t\t        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(level.el, translate, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(level.el, translate);\n\t\t}\n\t},\n\n\t_resetGrid: function () {\n\t\tvar map = this._map,\n\t\t    crs = map.options.crs,\n\t\t    tileSize = this._tileSize = this.getTileSize(),\n\t\t    tileZoom = this._tileZoom;\n\n\t\tvar bounds = this._map.getPixelWorldBounds(this._tileZoom);\n\t\tif (bounds) {\n\t\t\tthis._globalTileRange = this._pxBoundsToTileRange(bounds);\n\t\t}\n\n\t\tthis._wrapX = crs.wrapLng && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),\n\t\t\tMath.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)\n\t\t];\n\t\tthis._wrapY = crs.wrapLat && !this.options.noWrap && [\n\t\t\tMath.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),\n\t\t\tMath.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)\n\t\t];\n\t},\n\n\t_onMoveEnd: function () {\n\t\tif (!this._map || this._map._animatingZoom) { return; }\n\n\t\tthis._update();\n\t},\n\n\t_getTiledPixelBounds: function (center) {\n\t\tvar map = this._map,\n\t\t    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),\n\t\t    scale = map.getZoomScale(mapZoom, this._tileZoom),\n\t\t    pixelCenter = map.project(center, this._tileZoom).floor(),\n\t\t    halfSize = map.getSize().divideBy(scale * 2);\n\n\t\treturn new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));\n\t},\n\n\t// Private method to load tiles in the grid's active zoom level according to map bounds\n\t_update: function (center) {\n\t\tvar map = this._map;\n\t\tif (!map) { return; }\n\t\tvar zoom = this._clampZoom(map.getZoom());\n\n\t\tif (center === undefined) { center = map.getCenter(); }\n\t\tif (this._tileZoom === undefined) { return; }\t// if out of minzoom/maxzoom\n\n\t\tvar pixelBounds = this._getTiledPixelBounds(center),\n\t\t    tileRange = this._pxBoundsToTileRange(pixelBounds),\n\t\t    tileCenter = tileRange.getCenter(),\n\t\t    queue = [],\n\t\t    margin = this.options.keepBuffer,\n\t\t    noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),\n\t\t                              tileRange.getTopRight().add([margin, -margin]));\n\n\t\t// Sanity check: panic if the tile range contains Infinity somewhere.\n\t\tif (!(isFinite(tileRange.min.x) &&\n\t\t      isFinite(tileRange.min.y) &&\n\t\t      isFinite(tileRange.max.x) &&\n\t\t      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }\n\n\t\tfor (var key in this._tiles) {\n\t\t\tvar c = this._tiles[key].coords;\n\t\t\tif (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {\n\t\t\t\tthis._tiles[key].current = false;\n\t\t\t}\n\t\t}\n\n\t\t// _update just loads more tiles. If the tile zoom level differs too much\n\t\t// from the map's, let _setView reset levels and prune old tiles.\n\t\tif (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }\n\n\t\t// create a queue of coordinates to load tiles from\n\t\tfor (var j = tileRange.min.y; j <= tileRange.max.y; j++) {\n\t\t\tfor (var i = tileRange.min.x; i <= tileRange.max.x; i++) {\n\t\t\t\tvar coords = new Point(i, j);\n\t\t\t\tcoords.z = this._tileZoom;\n\n\t\t\t\tif (!this._isValidTile(coords)) { continue; }\n\n\t\t\t\tvar tile = this._tiles[this._tileCoordsToKey(coords)];\n\t\t\t\tif (tile) {\n\t\t\t\t\ttile.current = true;\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push(coords);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort tile queue to load tiles in order of their distance to center\n\t\tqueue.sort(function (a, b) {\n\t\t\treturn a.distanceTo(tileCenter) - b.distanceTo(tileCenter);\n\t\t});\n\n\t\tif (queue.length !== 0) {\n\t\t\t// if it's the first batch of tiles to load\n\t\t\tif (!this._loading) {\n\t\t\t\tthis._loading = true;\n\t\t\t\t// @event loading: Event\n\t\t\t\t// Fired when the grid layer starts loading tiles.\n\t\t\t\tthis.fire('loading');\n\t\t\t}\n\n\t\t\t// create DOM fragment to append tiles in one batch\n\t\t\tvar fragment = document.createDocumentFragment();\n\n\t\t\tfor (i = 0; i < queue.length; i++) {\n\t\t\t\tthis._addTile(queue[i], fragment);\n\t\t\t}\n\n\t\t\tthis._level.el.appendChild(fragment);\n\t\t}\n\t},\n\n\t_isValidTile: function (coords) {\n\t\tvar crs = this._map.options.crs;\n\n\t\tif (!crs.infinite) {\n\t\t\t// don't load tile if it's out of bounds and not wrapped\n\t\t\tvar bounds = this._globalTileRange;\n\t\t\tif ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||\n\t\t\t    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }\n\t\t}\n\n\t\tif (!this.options.bounds) { return true; }\n\n\t\t// don't load tile if it doesn't intersect the bounds in options\n\t\tvar tileBounds = this._tileCoordsToBounds(coords);\n\t\treturn latLngBounds(this.options.bounds).overlaps(tileBounds);\n\t},\n\n\t_keyToBounds: function (key) {\n\t\treturn this._tileCoordsToBounds(this._keyToTileCoords(key));\n\t},\n\n\t_tileCoordsToNwSe: function (coords) {\n\t\tvar map = this._map,\n\t\t    tileSize = this.getTileSize(),\n\t\t    nwPoint = coords.scaleBy(tileSize),\n\t\t    sePoint = nwPoint.add(tileSize),\n\t\t    nw = map.unproject(nwPoint, coords.z),\n\t\t    se = map.unproject(sePoint, coords.z);\n\t\treturn [nw, se];\n\t},\n\n\t// converts tile coordinates to its geographical bounds\n\t_tileCoordsToBounds: function (coords) {\n\t\tvar bp = this._tileCoordsToNwSe(coords),\n\t\t    bounds = new LatLngBounds(bp[0], bp[1]);\n\n\t\tif (!this.options.noWrap) {\n\t\t\tbounds = this._map.wrapLatLngBounds(bounds);\n\t\t}\n\t\treturn bounds;\n\t},\n\t// converts tile coordinates to key for the tile cache\n\t_tileCoordsToKey: function (coords) {\n\t\treturn coords.x + ':' + coords.y + ':' + coords.z;\n\t},\n\n\t// converts tile cache key to coordinates\n\t_keyToTileCoords: function (key) {\n\t\tvar k = key.split(':'),\n\t\t    coords = new Point(+k[0], +k[1]);\n\t\tcoords.z = +k[2];\n\t\treturn coords;\n\t},\n\n\t_removeTile: function (key) {\n\t\tvar tile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\tDomUtil.remove(tile.el);\n\n\t\tdelete this._tiles[key];\n\n\t\t// @event tileunload: TileEvent\n\t\t// Fired when a tile is removed (e.g. when a tile goes off the screen).\n\t\tthis.fire('tileunload', {\n\t\t\ttile: tile.el,\n\t\t\tcoords: this._keyToTileCoords(key)\n\t\t});\n\t},\n\n\t_initTile: function (tile) {\n\t\tDomUtil.addClass(tile, 'leaflet-tile');\n\n\t\tvar tileSize = this.getTileSize();\n\t\ttile.style.width = tileSize.x + 'px';\n\t\ttile.style.height = tileSize.y + 'px';\n\n\t\ttile.onselectstart = Util.falseFn;\n\t\ttile.onmousemove = Util.falseFn;\n\n\t\t// update opacity on tiles in IE7-8 because of filter inheritance problems\n\t\tif (Browser.ielt9 && this.options.opacity < 1) {\n\t\t\tDomUtil.setOpacity(tile, this.options.opacity);\n\t\t}\n\t},\n\n\t_addTile: function (coords, container) {\n\t\tvar tilePos = this._getTilePos(coords),\n\t\t    key = this._tileCoordsToKey(coords);\n\n\t\tvar tile = this.createTile(this._wrapCoords(coords), Util.bind(this._tileReady, this, coords));\n\n\t\tthis._initTile(tile);\n\n\t\t// if createTile is defined with a second argument (\"done\" callback),\n\t\t// we know that tile is async and will be ready later; otherwise\n\t\tif (this.createTile.length < 2) {\n\t\t\t// mark tile as ready, but delay one frame for opacity animation to happen\n\t\t\tUtil.requestAnimFrame(Util.bind(this._tileReady, this, coords, null, tile));\n\t\t}\n\n\t\tDomUtil.setPosition(tile, tilePos);\n\n\t\t// save tile in cache\n\t\tthis._tiles[key] = {\n\t\t\tel: tile,\n\t\t\tcoords: coords,\n\t\t\tcurrent: true\n\t\t};\n\n\t\tcontainer.appendChild(tile);\n\t\t// @event tileloadstart: TileEvent\n\t\t// Fired when a tile is requested and starts loading.\n\t\tthis.fire('tileloadstart', {\n\t\t\ttile: tile,\n\t\t\tcoords: coords\n\t\t});\n\t},\n\n\t_tileReady: function (coords, err, tile) {\n\t\tif (err) {\n\t\t\t// @event tileerror: TileErrorEvent\n\t\t\t// Fired when there is an error loading a tile.\n\t\t\tthis.fire('tileerror', {\n\t\t\t\terror: err,\n\t\t\t\ttile: tile,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tvar key = this._tileCoordsToKey(coords);\n\n\t\ttile = this._tiles[key];\n\t\tif (!tile) { return; }\n\n\t\ttile.loaded = +new Date();\n\t\tif (this._map._fadeAnimated) {\n\t\t\tDomUtil.setOpacity(tile.el, 0);\n\t\t\tUtil.cancelAnimFrame(this._fadeFrame);\n\t\t\tthis._fadeFrame = Util.requestAnimFrame(this._updateOpacity, this);\n\t\t} else {\n\t\t\ttile.active = true;\n\t\t\tthis._pruneTiles();\n\t\t}\n\n\t\tif (!err) {\n\t\t\tDomUtil.addClass(tile.el, 'leaflet-tile-loaded');\n\n\t\t\t// @event tileload: TileEvent\n\t\t\t// Fired when a tile loads.\n\t\t\tthis.fire('tileload', {\n\t\t\t\ttile: tile.el,\n\t\t\t\tcoords: coords\n\t\t\t});\n\t\t}\n\n\t\tif (this._noTilesToLoad()) {\n\t\t\tthis._loading = false;\n\t\t\t// @event load: Event\n\t\t\t// Fired when the grid layer loaded all visible tiles.\n\t\t\tthis.fire('load');\n\n\t\t\tif (Browser.ielt9 || !this._map._fadeAnimated) {\n\t\t\t\tUtil.requestAnimFrame(this._pruneTiles, this);\n\t\t\t} else {\n\t\t\t\t// Wait a bit more than 0.2 secs (the duration of the tile fade-in)\n\t\t\t\t// to trigger a pruning.\n\t\t\t\tsetTimeout(Util.bind(this._pruneTiles, this), 250);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getTilePos: function (coords) {\n\t\treturn coords.scaleBy(this.getTileSize()).subtract(this._level.origin);\n\t},\n\n\t_wrapCoords: function (coords) {\n\t\tvar newCoords = new Point(\n\t\t\tthis._wrapX ? Util.wrapNum(coords.x, this._wrapX) : coords.x,\n\t\t\tthis._wrapY ? Util.wrapNum(coords.y, this._wrapY) : coords.y);\n\t\tnewCoords.z = coords.z;\n\t\treturn newCoords;\n\t},\n\n\t_pxBoundsToTileRange: function (bounds) {\n\t\tvar tileSize = this.getTileSize();\n\t\treturn new Bounds(\n\t\t\tbounds.min.unscaleBy(tileSize).floor(),\n\t\t\tbounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));\n\t},\n\n\t_noTilesToLoad: function () {\n\t\tfor (var key in this._tiles) {\n\t\t\tif (!this._tiles[key].loaded) { return false; }\n\t\t}\n\t\treturn true;\n\t}\n});\n\n// @factory L.gridLayer(options?: GridLayer options)\n// Creates a new instance of GridLayer with the supplied options.\nexport function gridLayer(options) {\n\treturn new GridLayer(options);\n}\n","import {GridLayer} from './GridLayer';\r\nimport Browser from '../../core/Browser';\r\nimport * as Util from '../../core/Util';\r\nimport * as DomEvent from '../../dom/DomEvent';\r\nimport * as DomUtil from '../../dom/DomUtil';\r\n\r\n\r\n/*\r\n * @class TileLayer\r\n * @inherits GridLayer\r\n * @aka L.TileLayer\r\n * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(map);\n * ```\r\n *\r\n * @section URL template\r\n * @example\r\n *\r\n * A string of the following form:\r\n *\r\n * ```\r\n * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'\r\n * ```\r\n *\r\n * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add \"&commat;2x\" to the URL to load retina tiles.\r\n *\r\n * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:\r\n *\r\n * ```\r\n * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});\r\n * ```\r\n */\r\n\r\n\r\nexport var TileLayer = GridLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer options\r\n\toptions: {\r\n\t\t// @option minZoom: Number = 0\r\n\t\t// The minimum zoom level down to which this layer will be displayed (inclusive).\r\n\t\tminZoom: 0,\r\n\r\n\t\t// @option maxZoom: Number = 18\r\n\t\t// The maximum zoom level up to which this layer will be displayed (inclusive).\r\n\t\tmaxZoom: 18,\r\n\r\n\t\t// @option subdomains: String|String[] = 'abc'\r\n\t\t// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.\r\n\t\tsubdomains: 'abc',\r\n\r\n\t\t// @option errorTileUrl: String = ''\r\n\t\t// URL to the tile image to show in place of the tile that failed to load.\r\n\t\terrorTileUrl: '',\r\n\r\n\t\t// @option zoomOffset: Number = 0\r\n\t\t// The zoom number used in tile URLs will be offset with this value.\r\n\t\tzoomOffset: 0,\r\n\r\n\t\t// @option tms: Boolean = false\r\n\t\t// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).\r\n\t\ttms: false,\r\n\r\n\t\t// @option zoomReverse: Boolean = false\r\n\t\t// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)\r\n\t\tzoomReverse: false,\r\n\r\n\t\t// @option detectRetina: Boolean = false\r\n\t\t// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.\r\n\t\tdetectRetina: false,\r\n\r\n\t\t// @option crossOrigin: Boolean|String = false\r\n\t\t// Whether the crossOrigin attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.\r\n\t\t// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.\r\n\t\tcrossOrigin: false,\r\n\r\n\t\t// @option referrerPolicy: Boolean|String = false\r\n\t\t// Whether the referrerPolicy attribute will be added to the tiles.\r\n\t\t// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.\r\n\t\t// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer\r\n\t\t// (e.g. to validate an API token).\r\n\t\t// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.\r\n\t\treferrerPolicy: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\toptions = Util.setOptions(this, options);\r\n\r\n\t\t// detecting retina displays, adjusting tileSize and zoom levels\r\n\t\tif (options.detectRetina && Browser.retina && options.maxZoom > 0) {\r\n\r\n\t\t\toptions.tileSize = Math.floor(options.tileSize / 2);\r\n\r\n\t\t\tif (!options.zoomReverse) {\r\n\t\t\t\toptions.zoomOffset++;\r\n\t\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);\r\n\t\t\t} else {\r\n\t\t\t\toptions.zoomOffset--;\r\n\t\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom + 1);\r\n\t\t\t}\r\n\r\n\t\t\toptions.minZoom = Math.max(0, options.minZoom);\r\n\t\t} else if (!options.zoomReverse) {\r\n\t\t\t// make sure maxZoom is gte minZoom\r\n\t\t\toptions.maxZoom = Math.max(options.minZoom, options.maxZoom);\r\n\t\t} else {\r\n\t\t\t// make sure minZoom is lte maxZoom\r\n\t\t\toptions.minZoom = Math.min(options.maxZoom, options.minZoom);\r\n\t\t}\r\n\r\n\t\tif (typeof options.subdomains === 'string') {\r\n\t\t\toptions.subdomains = options.subdomains.split('');\r\n\t\t}\r\n\r\n\t\tthis.on('tileunload', this._onTileRemove);\r\n\t},\r\n\r\n\t// @method setUrl(url: String, noRedraw?: Boolean): this\r\n\t// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).\r\n\t// If the URL does not change, the layer will not be redrawn unless\r\n\t// the noRedraw parameter is set to false.\r\n\tsetUrl: function (url, noRedraw) {\r\n\t\tif (this._url === url && noRedraw === undefined) {\r\n\t\t\tnoRedraw = true;\r\n\t\t}\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\t\treturn this;\r\n\t},\r\n\r\n\t// @method createTile(coords: Object, done?: Function): HTMLElement\r\n\t// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)\r\n\t// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`\r\n\t// callback is called when the tile has been loaded.\r\n\tcreateTile: function (coords, done) {\r\n\t\tvar tile = document.createElement('img');\r\n\r\n\t\tDomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));\r\n\t\tDomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));\r\n\r\n\t\tif (this.options.crossOrigin || this.options.crossOrigin === '') {\r\n\t\t\ttile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;\r\n\t\t}\r\n\r\n\t\t// for this new option we follow the documented behavior\r\n\t\t// more closely by only setting the property when string\r\n\t\tif (typeof this.options.referrerPolicy === 'string') {\r\n\t\t\ttile.referrerPolicy = this.options.referrerPolicy;\r\n\t\t}\r\n\r\n\t\t// The alt attribute is set to the empty string,\r\n\t\t// allowing screen readers to ignore the decorative image tiles.\r\n\t\t// https://www.w3.org/WAI/tutorials/images/decorative/\r\n\t\t// https://www.w3.org/TR/html-aria/#el-img-empty-alt\r\n\t\ttile.alt = '';\r\n\r\n\t\ttile.src = this.getTileUrl(coords);\r\n\r\n\t\treturn tile;\r\n\t},\r\n\r\n\t// @section Extension methods\r\n\t// @uninheritable\r\n\t// Layers extending `TileLayer` might reimplement the following method.\r\n\t// @method getTileUrl(coords: Object): String\r\n\t// Called only internally, returns the URL for a tile given its coordinates.\r\n\t// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.\r\n\tgetTileUrl: function (coords) {\r\n\t\tvar data = {\r\n\t\t\tr: Browser.retina ? '@2x' : '',\r\n\t\t\ts: this._getSubdomain(coords),\r\n\t\t\tx: coords.x,\r\n\t\t\ty: coords.y,\r\n\t\t\tz: this._getZoomForUrl()\r\n\t\t};\r\n\t\tif (this._map && !this._map.options.crs.infinite) {\r\n\t\t\tvar invertedY = this._globalTileRange.max.y - coords.y;\r\n\t\t\tif (this.options.tms) {\r\n\t\t\t\tdata['y'] = invertedY;\r\n\t\t\t}\r\n\t\t\tdata['-y'] = invertedY;\r\n\t\t}\r\n\r\n\t\treturn Util.template(this._url, Util.extend(data, this.options));\r\n\t},\r\n\r\n\t_tileOnLoad: function (done, tile) {\r\n\t\t// For https://github.com/Leaflet/Leaflet/issues/3332\r\n\t\tif (Browser.ielt9) {\r\n\t\t\tsetTimeout(Util.bind(done, this, null, tile), 0);\r\n\t\t} else {\r\n\t\t\tdone(null, tile);\r\n\t\t}\r\n\t},\r\n\r\n\t_tileOnError: function (done, tile, e) {\r\n\t\tvar errorUrl = this.options.errorTileUrl;\r\n\t\tif (errorUrl && tile.getAttribute('src') !== errorUrl) {\r\n\t\t\ttile.src = errorUrl;\r\n\t\t}\r\n\t\tdone(e, tile);\r\n\t},\r\n\r\n\t_onTileRemove: function (e) {\r\n\t\te.tile.onload = null;\r\n\t},\r\n\r\n\t_getZoomForUrl: function () {\r\n\t\tvar zoom = this._tileZoom,\r\n\t\tmaxZoom = this.options.maxZoom,\r\n\t\tzoomReverse = this.options.zoomReverse,\r\n\t\tzoomOffset = this.options.zoomOffset;\r\n\r\n\t\tif (zoomReverse) {\r\n\t\t\tzoom = maxZoom - zoom;\r\n\t\t}\r\n\r\n\t\treturn zoom + zoomOffset;\r\n\t},\r\n\r\n\t_getSubdomain: function (tilePoint) {\r\n\t\tvar index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;\r\n\t\treturn this.options.subdomains[index];\r\n\t},\r\n\r\n\t// stops loading all tiles in the background layer\r\n\t_abortLoading: function () {\r\n\t\tvar i, tile;\r\n\t\tfor (i in this._tiles) {\r\n\t\t\tif (this._tiles[i].coords.z !== this._tileZoom) {\r\n\t\t\t\ttile = this._tiles[i].el;\r\n\r\n\t\t\t\ttile.onload = Util.falseFn;\r\n\t\t\t\ttile.onerror = Util.falseFn;\r\n\r\n\t\t\t\tif (!tile.complete) {\r\n\t\t\t\t\ttile.src = Util.emptyImageUrl;\r\n\t\t\t\t\tvar coords = this._tiles[i].coords;\r\n\t\t\t\t\tDomUtil.remove(tile);\r\n\t\t\t\t\tdelete this._tiles[i];\r\n\t\t\t\t\t// @event tileabort: TileEvent\r\n\t\t\t\t\t// Fired when a tile was loading but is now not wanted.\r\n\t\t\t\t\tthis.fire('tileabort', {\r\n\t\t\t\t\t\ttile: tile,\r\n\t\t\t\t\t\tcoords: coords\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t_removeTile: function (key) {\r\n\t\tvar tile = this._tiles[key];\r\n\t\tif (!tile) { return; }\r\n\r\n\t\t// Cancels any pending http requests associated with the tile\r\n\t\ttile.el.setAttribute('src', Util.emptyImageUrl);\r\n\r\n\t\treturn GridLayer.prototype._removeTile.call(this, key);\r\n\t},\r\n\r\n\t_tileReady: function (coords, err, tile) {\r\n\t\tif (!this._map || (tile && tile.getAttribute('src') === Util.emptyImageUrl)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\treturn GridLayer.prototype._tileReady.call(this, coords, err, tile);\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)\r\n// Instantiates a tile layer object given a `URL template` and optionally an options object.\r\n\r\nexport function tileLayer(url, options) {\r\n\treturn new TileLayer(url, options);\r\n}\r\n","import {TileLayer} from './TileLayer';\r\nimport {extend, setOptions, getParamString} from '../../core/Util';\r\nimport Browser from '../../core/Browser';\r\nimport {EPSG4326} from '../../geo/crs/CRS.EPSG4326';\r\nimport {toBounds} from '../../geometry/Bounds';\r\n\r\n/*\r\n * @class TileLayer.WMS\r\n * @inherits TileLayer\r\n * @aka L.TileLayer.WMS\r\n * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var nexrad = L.tileLayer.wms(\"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi\", {\r\n * \tlayers: 'nexrad-n0r-900913',\r\n * \tformat: 'image/png',\r\n * \ttransparent: true,\r\n * \tattribution: \"Weather data © 2012 IEM Nexrad\"\r\n * });\r\n * ```\r\n */\r\n\r\nexport var TileLayerWMS = TileLayer.extend({\r\n\r\n\t// @section\r\n\t// @aka TileLayer.WMS options\r\n\t// If any custom options not documented here are used, they will be sent to the\r\n\t// WMS server as extra parameters in each request URL. This can be useful for\r\n\t// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).\r\n\tdefaultWmsParams: {\r\n\t\tservice: 'WMS',\r\n\t\trequest: 'GetMap',\r\n\r\n\t\t// @option layers: String = ''\r\n\t\t// **(required)** Comma-separated list of WMS layers to show.\r\n\t\tlayers: '',\r\n\r\n\t\t// @option styles: String = ''\r\n\t\t// Comma-separated list of WMS styles.\r\n\t\tstyles: '',\r\n\r\n\t\t// @option format: String = 'image/jpeg'\r\n\t\t// WMS image format (use `'image/png'` for layers with transparency).\r\n\t\tformat: 'image/jpeg',\r\n\r\n\t\t// @option transparent: Boolean = false\r\n\t\t// If `true`, the WMS service will return images with transparency.\r\n\t\ttransparent: false,\r\n\r\n\t\t// @option version: String = '1.1.1'\r\n\t\t// Version of the WMS service to use\r\n\t\tversion: '1.1.1'\r\n\t},\r\n\r\n\toptions: {\r\n\t\t// @option crs: CRS = null\r\n\t\t// Coordinate Reference System to use for the WMS requests, defaults to\r\n\t\t// map CRS. Don't change this if you're not sure what it means.\r\n\t\tcrs: null,\r\n\r\n\t\t// @option uppercase: Boolean = false\r\n\t\t// If `true`, WMS request parameter keys will be uppercase.\r\n\t\tuppercase: false\r\n\t},\r\n\r\n\tinitialize: function (url, options) {\r\n\r\n\t\tthis._url = url;\r\n\r\n\t\tvar wmsParams = extend({}, this.defaultWmsParams);\r\n\r\n\t\t// all keys that are not TileLayer options go to WMS params\r\n\t\tfor (var i in options) {\r\n\t\t\tif (!(i in this.options)) {\r\n\t\t\t\twmsParams[i] = options[i];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions = setOptions(this, options);\r\n\r\n\t\tvar realRetina = options.detectRetina && Browser.retina ? 2 : 1;\r\n\t\tvar tileSize = this.getTileSize();\r\n\t\twmsParams.width = tileSize.x * realRetina;\r\n\t\twmsParams.height = tileSize.y * realRetina;\r\n\r\n\t\tthis.wmsParams = wmsParams;\r\n\t},\r\n\r\n\tonAdd: function (map) {\r\n\r\n\t\tthis._crs = this.options.crs || map.options.crs;\r\n\t\tthis._wmsVersion = parseFloat(this.wmsParams.version);\r\n\r\n\t\tvar projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';\r\n\t\tthis.wmsParams[projectionKey] = this._crs.code;\r\n\r\n\t\tTileLayer.prototype.onAdd.call(this, map);\r\n\t},\r\n\r\n\tgetTileUrl: function (coords) {\r\n\r\n\t\tvar tileBounds = this._tileCoordsToNwSe(coords),\r\n\t\t    crs = this._crs,\r\n\t\t    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),\r\n\t\t    min = bounds.min,\r\n\t\t    max = bounds.max,\r\n\t\t    bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?\r\n\t\t    [min.y, min.x, max.y, max.x] :\r\n\t\t    [min.x, min.y, max.x, max.y]).join(','),\r\n\t\t    url = TileLayer.prototype.getTileUrl.call(this, coords);\r\n\t\treturn url +\r\n\t\t\tgetParamString(this.wmsParams, url, this.options.uppercase) +\r\n\t\t\t(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;\r\n\t},\r\n\r\n\t// @method setParams(params: Object, noRedraw?: Boolean): this\r\n\t// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).\r\n\tsetParams: function (params, noRedraw) {\r\n\r\n\t\textend(this.wmsParams, params);\r\n\r\n\t\tif (!noRedraw) {\r\n\t\t\tthis.redraw();\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n\r\n// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)\r\n// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.\r\nexport function tileLayerWMS(url, options) {\r\n\treturn new TileLayerWMS(url, options);\r\n}\r\n","export {GridLayer, gridLayer} from './GridLayer';\nimport {TileLayer, tileLayer} from './TileLayer';\nimport {TileLayerWMS, tileLayerWMS} from './TileLayer.WMS';\nTileLayer.WMS = TileLayerWMS;\ntileLayer.wms = tileLayerWMS;\nexport {TileLayer, tileLayer};\n","import {Layer} from '../Layer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\nimport {Bounds} from '../../geometry/Bounds';\n\n\n\n/*\n * @class Renderer\n * @inherits Layer\n * @aka L.Renderer\n *\n * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the\n * DOM container of the renderer, its bounds, and its zoom animation.\n *\n * A `Renderer` works as an implicit layer group for all `Path`s - the renderer\n * itself can be added or removed to the map. All paths use a renderer, which can\n * be implicit (the map will decide the type of renderer and use it automatically)\n * or explicit (using the [`renderer`](#path-renderer) option of the path).\n *\n * Do not use this class directly, use `SVG` and `Canvas` instead.\n *\n * @event update: Event\n * Fired when the renderer updates its bounds, center and zoom, for example when\n * its map has moved\n */\n\nexport var Renderer = Layer.extend({\n\n\t// @section\n\t// @aka Renderer options\n\toptions: {\n\t\t// @option padding: Number = 0.1\n\t\t// How much to extend the clip area around the map view (relative to its size)\n\t\t// e.g. 0.1 would be 10% of map view in each direction\n\t\tpadding: 0.1\n\t},\n\n\tinitialize: function (options) {\n\t\tUtil.setOptions(this, options);\n\t\tUtil.stamp(this);\n\t\tthis._layers = this._layers || {};\n\t},\n\n\tonAdd: function () {\n\t\tif (!this._container) {\n\t\t\tthis._initContainer(); // defined by renderer implementations\n\n\t\t\t// always keep transform-origin as 0 0\n\t\t\tDomUtil.addClass(this._container, 'leaflet-zoom-animated');\n\t\t}\n\n\t\tthis.getPane().appendChild(this._container);\n\t\tthis._update();\n\t\tthis.on('update', this._updatePaths, this);\n\t},\n\n\tonRemove: function () {\n\t\tthis.off('update', this._updatePaths, this);\n\t\tthis._destroyContainer();\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = {\n\t\t\tviewreset: this._reset,\n\t\t\tzoom: this._onZoom,\n\t\t\tmoveend: this._update,\n\t\t\tzoomend: this._onZoomEnd\n\t\t};\n\t\tif (this._zoomAnimated) {\n\t\t\tevents.zoomanim = this._onAnimZoom;\n\t\t}\n\t\treturn events;\n\t},\n\n\t_onAnimZoom: function (ev) {\n\t\tthis._updateTransform(ev.center, ev.zoom);\n\t},\n\n\t_onZoom: function () {\n\t\tthis._updateTransform(this._map.getCenter(), this._map.getZoom());\n\t},\n\n\t_updateTransform: function (center, zoom) {\n\t\tvar scale = this._map.getZoomScale(zoom, this._zoom),\n\t\t    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),\n\t\t    currentCenterPoint = this._map.project(this._center, zoom),\n\n\t\t    topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)\n\t\t\t\t  .subtract(this._map._getNewPixelOrigin(center, zoom));\n\n\t\tif (Browser.any3d) {\n\t\t\tDomUtil.setTransform(this._container, topLeftOffset, scale);\n\t\t} else {\n\t\t\tDomUtil.setPosition(this._container, topLeftOffset);\n\t\t}\n\t},\n\n\t_reset: function () {\n\t\tthis._update();\n\t\tthis._updateTransform(this._center, this._zoom);\n\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._reset();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._project();\n\t\t}\n\t},\n\n\t_updatePaths: function () {\n\t\tfor (var id in this._layers) {\n\t\t\tthis._layers[id]._update();\n\t\t}\n\t},\n\n\t_update: function () {\n\t\t// Update pixel bounds of renderer container (for positioning/sizing/clipping later)\n\t\t// Subclasses are responsible of firing the 'update' event.\n\t\tvar p = this.options.padding,\n\t\t    size = this._map.getSize(),\n\t\t    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();\n\n\t\tthis._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());\n\n\t\tthis._center = this._map.getCenter();\n\t\tthis._zoom = this._map.getZoom();\n\t}\n});\n","import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport * as Util from '../../core/Util';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * @class Canvas\n * @inherits Renderer\n * @aka L.Canvas\n *\n * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not\n * available in all web browsers, notably IE8, and overlapping geometries might\n * not display properly in some edge cases.\n *\n * @example\n *\n * Use Canvas by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.canvas()\n * });\n * ```\n *\n * Use a Canvas renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.canvas({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var Canvas = Renderer.extend({\n\n\t// @section\n\t// @aka Canvas options\n\toptions: {\n\t\t// @option tolerance: Number = 0\n\t\t// How much to extend the click tolerance around a path/object on the map.\n\t\ttolerance: 0\n\t},\n\n\tgetEvents: function () {\n\t\tvar events = Renderer.prototype.getEvents.call(this);\n\t\tevents.viewprereset = this._onViewPreReset;\n\t\treturn events;\n\t},\n\n\t_onViewPreReset: function () {\n\t\t// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once\n\t\tthis._postponeUpdatePaths = true;\n\t},\n\n\tonAdd: function () {\n\t\tRenderer.prototype.onAdd.call(this);\n\n\t\t// Redraw vectors since canvas is cleared upon removal,\n\t\t// in case of removing the renderer itself from the map.\n\t\tthis._draw();\n\t},\n\n\t_initContainer: function () {\n\t\tvar container = this._container = document.createElement('canvas');\n\n\t\tDomEvent.on(container, 'mousemove', this._onMouseMove, this);\n\t\tDomEvent.on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);\n\t\tDomEvent.on(container, 'mouseout', this._handleMouseOut, this);\n\t\tcontainer['_leaflet_disable_events'] = true;\n\n\t\tthis._ctx = container.getContext('2d');\n\t},\n\n\t_destroyContainer: function () {\n\t\tUtil.cancelAnimFrame(this._redrawRequest);\n\t\tdelete this._ctx;\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t},\n\n\t_updatePaths: function () {\n\t\tif (this._postponeUpdatePaths) { return; }\n\n\t\tvar layer;\n\t\tthis._redrawBounds = null;\n\t\tfor (var id in this._layers) {\n\t\t\tlayer = this._layers[id];\n\t\t\tlayer._update();\n\t\t}\n\t\tthis._redraw();\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    container = this._container,\n\t\t    size = b.getSize(),\n\t\t    m = Browser.retina ? 2 : 1;\n\n\t\tDomUtil.setPosition(container, b.min);\n\n\t\t// set canvas size (also clearing it); use double size on retina\n\t\tcontainer.width = m * size.x;\n\t\tcontainer.height = m * size.y;\n\t\tcontainer.style.width = size.x + 'px';\n\t\tcontainer.style.height = size.y + 'px';\n\n\t\tif (Browser.retina) {\n\t\t\tthis._ctx.scale(2, 2);\n\t\t}\n\n\t\t// translate so we use the same path coordinates after canvas element moves\n\t\tthis._ctx.translate(-b.min.x, -b.min.y);\n\n\t\t// Tell paths to redraw themselves\n\t\tthis.fire('update');\n\t},\n\n\t_reset: function () {\n\t\tRenderer.prototype._reset.call(this);\n\n\t\tif (this._postponeUpdatePaths) {\n\t\t\tthis._postponeUpdatePaths = false;\n\t\t\tthis._updatePaths();\n\t\t}\n\t},\n\n\t_initPath: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\n\t\tvar order = layer._order = {\n\t\t\tlayer: layer,\n\t\t\tprev: this._drawLast,\n\t\t\tnext: null\n\t\t};\n\t\tif (this._drawLast) { this._drawLast.next = order; }\n\t\tthis._drawLast = order;\n\t\tthis._drawFirst = this._drawFirst || this._drawLast;\n\t},\n\n\t_addPath: function (layer) {\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar order = layer._order;\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\tthis._drawLast = prev;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\tdelete layer._order;\n\n\t\tdelete this._layers[Util.stamp(layer)];\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updatePath: function (layer) {\n\t\t// Redraw the union of the layer's old pixel\n\t\t// bounds and the new pixel bounds.\n\t\tthis._extendRedrawBounds(layer);\n\t\tlayer._project();\n\t\tlayer._update();\n\t\t// The redraw will extend the redraw bounds\n\t\t// with the new pixel bounds.\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tthis._updateDashArray(layer);\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_updateDashArray: function (layer) {\n\t\tif (typeof layer.options.dashArray === 'string') {\n\t\t\tvar parts = layer.options.dashArray.split(/[, ]+/),\n\t\t\t    dashArray = [],\n\t\t\t    dashValue,\n\t\t\t    i;\n\t\t\tfor (i = 0; i < parts.length; i++) {\n\t\t\t\tdashValue = Number(parts[i]);\n\t\t\t\t// Ignore dash array containing invalid lengths\n\t\t\t\tif (isNaN(dashValue)) { return; }\n\t\t\t\tdashArray.push(dashValue);\n\t\t\t}\n\t\t\tlayer.options._dashArray = dashArray;\n\t\t} else {\n\t\t\tlayer.options._dashArray = layer.options.dashArray;\n\t\t}\n\t},\n\n\t_requestRedraw: function (layer) {\n\t\tif (!this._map) { return; }\n\n\t\tthis._extendRedrawBounds(layer);\n\t\tthis._redrawRequest = this._redrawRequest || Util.requestAnimFrame(this._redraw, this);\n\t},\n\n\t_extendRedrawBounds: function (layer) {\n\t\tif (layer._pxBounds) {\n\t\t\tvar padding = (layer.options.weight || 0) + 1;\n\t\t\tthis._redrawBounds = this._redrawBounds || new Bounds();\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));\n\t\t\tthis._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));\n\t\t}\n\t},\n\n\t_redraw: function () {\n\t\tthis._redrawRequest = null;\n\n\t\tif (this._redrawBounds) {\n\t\t\tthis._redrawBounds.min._floor();\n\t\t\tthis._redrawBounds.max._ceil();\n\t\t}\n\n\t\tthis._clear(); // clear layers in redraw bounds\n\t\tthis._draw(); // draw layers\n\n\t\tthis._redrawBounds = null;\n\t},\n\n\t_clear: function () {\n\t\tvar bounds = this._redrawBounds;\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t} else {\n\t\t\tthis._ctx.save();\n\t\t\tthis._ctx.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tthis._ctx.clearRect(0, 0, this._container.width, this._container.height);\n\t\t\tthis._ctx.restore();\n\t\t}\n\t},\n\n\t_draw: function () {\n\t\tvar layer, bounds = this._redrawBounds;\n\t\tthis._ctx.save();\n\t\tif (bounds) {\n\t\t\tvar size = bounds.getSize();\n\t\t\tthis._ctx.beginPath();\n\t\t\tthis._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);\n\t\t\tthis._ctx.clip();\n\t\t}\n\n\t\tthis._drawing = true;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {\n\t\t\t\tlayer._updatePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._drawing = false;\n\n\t\tthis._ctx.restore();  // Restore state before clipping.\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tif (!this._drawing) { return; }\n\n\t\tvar i, j, len2, p,\n\t\t    parts = layer._parts,\n\t\t    len = parts.length,\n\t\t    ctx = this._ctx;\n\n\t\tif (!len) { return; }\n\n\t\tctx.beginPath();\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tfor (j = 0, len2 = parts[i].length; j < len2; j++) {\n\t\t\t\tp = parts[i][j];\n\t\t\t\tctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\tctx.closePath();\n\t\t\t}\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\n\t\t// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature\n\t},\n\n\t_updateCircle: function (layer) {\n\n\t\tif (!this._drawing || layer._empty()) { return; }\n\n\t\tvar p = layer._point,\n\t\t    ctx = this._ctx,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;\n\n\t\tif (s !== 1) {\n\t\t\tctx.save();\n\t\t\tctx.scale(1, s);\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);\n\n\t\tif (s !== 1) {\n\t\t\tctx.restore();\n\t\t}\n\n\t\tthis._fillStroke(ctx, layer);\n\t},\n\n\t_fillStroke: function (ctx, layer) {\n\t\tvar options = layer.options;\n\n\t\tif (options.fill) {\n\t\t\tctx.globalAlpha = options.fillOpacity;\n\t\t\tctx.fillStyle = options.fillColor || options.color;\n\t\t\tctx.fill(options.fillRule || 'evenodd');\n\t\t}\n\n\t\tif (options.stroke && options.weight !== 0) {\n\t\t\tif (ctx.setLineDash) {\n\t\t\t\tctx.setLineDash(layer.options && layer.options._dashArray || []);\n\t\t\t}\n\t\t\tctx.globalAlpha = options.opacity;\n\t\t\tctx.lineWidth = options.weight;\n\t\t\tctx.strokeStyle = options.color;\n\t\t\tctx.lineCap = options.lineCap;\n\t\t\tctx.lineJoin = options.lineJoin;\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t// Canvas obviously doesn't have mouse events for individual drawn objects,\n\t// so we emulate that by calculating what's under the mouse on mousemove/click manually\n\n\t_onClick: function (e) {\n\t\tvar point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tif (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {\n\t\t\t\t\tclickedLayer = layer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._fireEvent(clickedLayer ? [clickedLayer] : false, e);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }\n\n\t\tvar point = this._map.mouseEventToLayerPoint(e);\n\t\tthis._handleMouseHover(e, point);\n\t},\n\n\n\t_handleMouseOut: function (e) {\n\t\tvar layer = this._hoveredLayer;\n\t\tif (layer) {\n\t\t\t// if we're leaving the layer, fire mouseout\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-interactive');\n\t\t\tthis._fireEvent([layer], e, 'mouseout');\n\t\t\tthis._hoveredLayer = null;\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}\n\t},\n\n\t_handleMouseHover: function (e, point) {\n\t\tif (this._mouseHoverThrottled) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layer, candidateHoveredLayer;\n\n\t\tfor (var order = this._drawFirst; order; order = order.next) {\n\t\t\tlayer = order.layer;\n\t\t\tif (layer.options.interactive && layer._containsPoint(point)) {\n\t\t\t\tcandidateHoveredLayer = layer;\n\t\t\t}\n\t\t}\n\n\t\tif (candidateHoveredLayer !== this._hoveredLayer) {\n\t\t\tthis._handleMouseOut(e);\n\n\t\t\tif (candidateHoveredLayer) {\n\t\t\t\tDomUtil.addClass(this._container, 'leaflet-interactive'); // change cursor\n\t\t\t\tthis._fireEvent([candidateHoveredLayer], e, 'mouseover');\n\t\t\t\tthis._hoveredLayer = candidateHoveredLayer;\n\t\t\t}\n\t\t}\n\n\t\tthis._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);\n\n\t\tthis._mouseHoverThrottled = true;\n\t\tsetTimeout(Util.bind(function () {\n\t\t\tthis._mouseHoverThrottled = false;\n\t\t}, this), 32);\n\t},\n\n\t_fireEvent: function (layers, e, type) {\n\t\tthis._map._fireDOMEvent(e, type || e.type, layers);\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else {\n\t\t\t// Already last\n\t\t\treturn;\n\t\t}\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else if (next) {\n\t\t\t// Update first entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawFirst = next;\n\t\t}\n\n\t\torder.prev = this._drawLast;\n\t\tthis._drawLast.next = order;\n\n\t\torder.next = null;\n\t\tthis._drawLast = order;\n\n\t\tthis._requestRedraw(layer);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tvar order = layer._order;\n\n\t\tif (!order) { return; }\n\n\t\tvar next = order.next;\n\t\tvar prev = order.prev;\n\n\t\tif (prev) {\n\t\t\tprev.next = next;\n\t\t} else {\n\t\t\t// Already first\n\t\t\treturn;\n\t\t}\n\t\tif (next) {\n\t\t\tnext.prev = prev;\n\t\t} else if (prev) {\n\t\t\t// Update last entry unless this is the\n\t\t\t// single entry\n\t\t\tthis._drawLast = prev;\n\t\t}\n\n\t\torder.prev = null;\n\n\t\torder.next = this._drawFirst;\n\t\tthis._drawFirst.prev = order;\n\t\tthis._drawFirst = order;\n\n\t\tthis._requestRedraw(layer);\n\t}\n});\n\n// @factory L.canvas(options?: Renderer options)\n// Creates a Canvas renderer with the given options.\nexport function canvas(options) {\n\treturn Browser.canvas ? new Canvas(options) : null;\n}\n","import * as DomUtil from '../../dom/DomUtil';\nimport * as Util from '../../core/Util';\nimport {Renderer} from './Renderer';\n\n/*\n * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!\n */\n\n\nexport var vmlCreate = (function () {\n\ttry {\n\t\tdocument.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');\n\t\treturn function (name) {\n\t\t\treturn document.createElement('<lvml:' + name + ' class=\"lvml\">');\n\t\t};\n\t} catch (e) {\n\t\t// Do not return fn from catch block so `e` can be garbage collected\n\t\t// See https://github.com/Leaflet/Leaflet/pull/7279\n\t}\n\treturn function (name) {\n\t\treturn document.createElement('<' + name + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">');\n\t};\n})();\n\n\n/*\n * @class SVG\n *\n *\n * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility\n * with old versions of Internet Explorer.\n */\n\n// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences\nexport var vmlMixin = {\n\n\t_initContainer: function () {\n\t\tthis._container = DomUtil.create('div', 'leaflet-vml-container');\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom) { return; }\n\t\tRenderer.prototype._update.call(this);\n\t\tthis.fire('update');\n\t},\n\n\t_initPath: function (layer) {\n\t\tvar container = layer._container = vmlCreate('shape');\n\n\t\tDomUtil.addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));\n\n\t\tcontainer.coordsize = '1 1';\n\n\t\tlayer._path = vmlCreate('path');\n\t\tcontainer.appendChild(layer._path);\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[Util.stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tvar container = layer._container;\n\t\tthis._container.appendChild(container);\n\n\t\tif (layer.options.interactive) {\n\t\t\tlayer.addInteractiveTarget(container);\n\t\t}\n\t},\n\n\t_removePath: function (layer) {\n\t\tvar container = layer._container;\n\t\tDomUtil.remove(container);\n\t\tlayer.removeInteractiveTarget(container);\n\t\tdelete this._layers[Util.stamp(layer)];\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar stroke = layer._stroke,\n\t\t    fill = layer._fill,\n\t\t    options = layer.options,\n\t\t    container = layer._container;\n\n\t\tcontainer.stroked = !!options.stroke;\n\t\tcontainer.filled = !!options.fill;\n\n\t\tif (options.stroke) {\n\t\t\tif (!stroke) {\n\t\t\t\tstroke = layer._stroke = vmlCreate('stroke');\n\t\t\t}\n\t\t\tcontainer.appendChild(stroke);\n\t\t\tstroke.weight = options.weight + 'px';\n\t\t\tstroke.color = options.color;\n\t\t\tstroke.opacity = options.opacity;\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tstroke.dashStyle = Util.isArray(options.dashArray) ?\n\t\t\t\t    options.dashArray.join(' ') :\n\t\t\t\t    options.dashArray.replace(/( *, *)/g, ' ');\n\t\t\t} else {\n\t\t\t\tstroke.dashStyle = '';\n\t\t\t}\n\t\t\tstroke.endcap = options.lineCap.replace('butt', 'flat');\n\t\t\tstroke.joinstyle = options.lineJoin;\n\n\t\t} else if (stroke) {\n\t\t\tcontainer.removeChild(stroke);\n\t\t\tlayer._stroke = null;\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tif (!fill) {\n\t\t\t\tfill = layer._fill = vmlCreate('fill');\n\t\t\t}\n\t\t\tcontainer.appendChild(fill);\n\t\t\tfill.color = options.fillColor || options.color;\n\t\t\tfill.opacity = options.fillOpacity;\n\n\t\t} else if (fill) {\n\t\t\tcontainer.removeChild(fill);\n\t\t\tlayer._fill = null;\n\t\t}\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point.round(),\n\t\t    r = Math.round(layer._radius),\n\t\t    r2 = Math.round(layer._radiusY || r);\n\n\t\tthis._setPath(layer, layer._empty() ? 'M0 0' :\n\t\t\t'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.v = path;\n\t},\n\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._container);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._container);\n\t}\n};\n","import {Renderer} from './Renderer';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport Browser from '../../core/Browser';\nimport {stamp} from '../../core/Util';\nimport {svgCreate, pointsToPath} from './SVG.Util';\nexport {pointsToPath};\nimport {vmlMixin, vmlCreate} from './SVG.VML';\n\nexport var create = Browser.vml ? vmlCreate : svgCreate;\n\n/*\n * @class SVG\n * @inherits Renderer\n * @aka L.SVG\n *\n * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).\n * Inherits `Renderer`.\n *\n * Due to [technical limitations](https://caniuse.com/svg), SVG is not\n * available in all web browsers, notably Android 2.x and 3.x.\n *\n * Although SVG is not available on IE7 and IE8, these browsers support\n * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)\n * (a now deprecated technology), and the SVG renderer will fall back to VML in\n * this case.\n *\n * @example\n *\n * Use SVG by default for all paths in the map:\n *\n * ```js\n * var map = L.map('map', {\n * \trenderer: L.svg()\n * });\n * ```\n *\n * Use a SVG renderer with extra padding for specific vector geometries:\n *\n * ```js\n * var map = L.map('map');\n * var myRenderer = L.svg({ padding: 0.5 });\n * var line = L.polyline( coordinates, { renderer: myRenderer } );\n * var circle = L.circle( center, { renderer: myRenderer } );\n * ```\n */\n\nexport var SVG = Renderer.extend({\n\n\t_initContainer: function () {\n\t\tthis._container = create('svg');\n\n\t\t// makes it possible to click through svg root; we'll reset it back in individual paths\n\t\tthis._container.setAttribute('pointer-events', 'none');\n\n\t\tthis._rootGroup = create('g');\n\t\tthis._container.appendChild(this._rootGroup);\n\t},\n\n\t_destroyContainer: function () {\n\t\tDomUtil.remove(this._container);\n\t\tDomEvent.off(this._container);\n\t\tdelete this._container;\n\t\tdelete this._rootGroup;\n\t\tdelete this._svgSize;\n\t},\n\n\t_update: function () {\n\t\tif (this._map._animatingZoom && this._bounds) { return; }\n\n\t\tRenderer.prototype._update.call(this);\n\n\t\tvar b = this._bounds,\n\t\t    size = b.getSize(),\n\t\t    container = this._container;\n\n\t\t// set size of svg-container if changed\n\t\tif (!this._svgSize || !this._svgSize.equals(size)) {\n\t\t\tthis._svgSize = size;\n\t\t\tcontainer.setAttribute('width', size.x);\n\t\t\tcontainer.setAttribute('height', size.y);\n\t\t}\n\n\t\t// movement: update container viewBox so that we don't have to change coordinates of individual layers\n\t\tDomUtil.setPosition(container, b.min);\n\t\tcontainer.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));\n\n\t\tthis.fire('update');\n\t},\n\n\t// methods below are called by vector layers implementations\n\n\t_initPath: function (layer) {\n\t\tvar path = layer._path = create('path');\n\n\t\t// @namespace Path\n\t\t// @option className: String = null\n\t\t// Custom class name set on an element. Only for SVG renderer.\n\t\tif (layer.options.className) {\n\t\t\tDomUtil.addClass(path, layer.options.className);\n\t\t}\n\n\t\tif (layer.options.interactive) {\n\t\t\tDomUtil.addClass(path, 'leaflet-interactive');\n\t\t}\n\n\t\tthis._updateStyle(layer);\n\t\tthis._layers[stamp(layer)] = layer;\n\t},\n\n\t_addPath: function (layer) {\n\t\tif (!this._rootGroup) { this._initContainer(); }\n\t\tthis._rootGroup.appendChild(layer._path);\n\t\tlayer.addInteractiveTarget(layer._path);\n\t},\n\n\t_removePath: function (layer) {\n\t\tDomUtil.remove(layer._path);\n\t\tlayer.removeInteractiveTarget(layer._path);\n\t\tdelete this._layers[stamp(layer)];\n\t},\n\n\t_updatePath: function (layer) {\n\t\tlayer._project();\n\t\tlayer._update();\n\t},\n\n\t_updateStyle: function (layer) {\n\t\tvar path = layer._path,\n\t\t    options = layer.options;\n\n\t\tif (!path) { return; }\n\n\t\tif (options.stroke) {\n\t\t\tpath.setAttribute('stroke', options.color);\n\t\t\tpath.setAttribute('stroke-opacity', options.opacity);\n\t\t\tpath.setAttribute('stroke-width', options.weight);\n\t\t\tpath.setAttribute('stroke-linecap', options.lineCap);\n\t\t\tpath.setAttribute('stroke-linejoin', options.lineJoin);\n\n\t\t\tif (options.dashArray) {\n\t\t\t\tpath.setAttribute('stroke-dasharray', options.dashArray);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dasharray');\n\t\t\t}\n\n\t\t\tif (options.dashOffset) {\n\t\t\t\tpath.setAttribute('stroke-dashoffset', options.dashOffset);\n\t\t\t} else {\n\t\t\t\tpath.removeAttribute('stroke-dashoffset');\n\t\t\t}\n\t\t} else {\n\t\t\tpath.setAttribute('stroke', 'none');\n\t\t}\n\n\t\tif (options.fill) {\n\t\t\tpath.setAttribute('fill', options.fillColor || options.color);\n\t\t\tpath.setAttribute('fill-opacity', options.fillOpacity);\n\t\t\tpath.setAttribute('fill-rule', options.fillRule || 'evenodd');\n\t\t} else {\n\t\t\tpath.setAttribute('fill', 'none');\n\t\t}\n\t},\n\n\t_updatePoly: function (layer, closed) {\n\t\tthis._setPath(layer, pointsToPath(layer._parts, closed));\n\t},\n\n\t_updateCircle: function (layer) {\n\t\tvar p = layer._point,\n\t\t    r = Math.max(Math.round(layer._radius), 1),\n\t\t    r2 = Math.max(Math.round(layer._radiusY), 1) || r,\n\t\t    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';\n\n\t\t// drawing a circle with two half-arcs\n\t\tvar d = layer._empty() ? 'M0 0' :\n\t\t\t'M' + (p.x - r) + ',' + p.y +\n\t\t\tarc + (r * 2) + ',0 ' +\n\t\t\tarc + (-r * 2) + ',0 ';\n\n\t\tthis._setPath(layer, d);\n\t},\n\n\t_setPath: function (layer, path) {\n\t\tlayer._path.setAttribute('d', path);\n\t},\n\n\t// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements\n\t_bringToFront: function (layer) {\n\t\tDomUtil.toFront(layer._path);\n\t},\n\n\t_bringToBack: function (layer) {\n\t\tDomUtil.toBack(layer._path);\n\t}\n});\n\nif (Browser.vml) {\n\tSVG.include(vmlMixin);\n}\n\n// @namespace SVG\n// @factory L.svg(options?: Renderer options)\n// Creates a SVG renderer with the given options.\nexport function svg(options) {\n\treturn Browser.svg || Browser.vml ? new SVG(options) : null;\n}\n","import {Map} from '../../map/Map';\nimport {canvas} from './Canvas';\nimport {svg} from './SVG';\n\nMap.include({\n\t// @namespace Map; @method getRenderer(layer: Path): Renderer\n\t// Returns the instance of `Renderer` that should be used to render the given\n\t// `Path`. It will ensure that the `renderer` options of the map and paths\n\t// are respected, and that the renderers do exist on the map.\n\tgetRenderer: function (layer) {\n\t\t// @namespace Path; @option renderer: Renderer\n\t\t// Use this specific instance of `Renderer` for this path. Takes\n\t\t// precedence over the map's [default renderer](#map-renderer).\n\t\tvar renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;\n\n\t\tif (!renderer) {\n\t\t\trenderer = this._renderer = this._createRenderer();\n\t\t}\n\n\t\tif (!this.hasLayer(renderer)) {\n\t\t\tthis.addLayer(renderer);\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_getPaneRenderer: function (name) {\n\t\tif (name === 'overlayPane' || name === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar renderer = this._paneRenderers[name];\n\t\tif (renderer === undefined) {\n\t\t\trenderer = this._createRenderer({pane: name});\n\t\t\tthis._paneRenderers[name] = renderer;\n\t\t}\n\t\treturn renderer;\n\t},\n\n\t_createRenderer: function (options) {\n\t\t// @namespace Map; @option preferCanvas: Boolean = false\n\t\t// Whether `Path`s should be rendered on a `Canvas` renderer.\n\t\t// By default, all `Path`s are rendered in a `SVG` renderer.\n\t\treturn (this.options.preferCanvas && canvas(options)) || svg(options);\n\t}\n});\n","import {Polygon} from './Polygon';\nimport {toLatLngBounds} from '../../geo/LatLngBounds';\n\n/*\n * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.\n */\n\n/*\n * @class Rectangle\n * @aka L.Rectangle\n * @inherits Polygon\n *\n * A class for drawing rectangle overlays on a map. Extends `Polygon`.\n *\n * @example\n *\n * ```js\n * // define rectangle geographical bounds\n * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];\n *\n * // create an orange rectangle\n * L.rectangle(bounds, {color: \"#ff7800\", weight: 1}).addTo(map);\n *\n * // zoom the map to the rectangle bounds\n * map.fitBounds(bounds);\n * ```\n *\n */\n\n\nexport var Rectangle = Polygon.extend({\n\tinitialize: function (latLngBounds, options) {\n\t\tPolygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);\n\t},\n\n\t// @method setBounds(latLngBounds: LatLngBounds): this\n\t// Redraws the rectangle with the passed bounds.\n\tsetBounds: function (latLngBounds) {\n\t\treturn this.setLatLngs(this._boundsToLatLngs(latLngBounds));\n\t},\n\n\t_boundsToLatLngs: function (latLngBounds) {\n\t\tlatLngBounds = toLatLngBounds(latLngBounds);\n\t\treturn [\n\t\t\tlatLngBounds.getSouthWest(),\n\t\t\tlatLngBounds.getNorthWest(),\n\t\t\tlatLngBounds.getNorthEast(),\n\t\t\tlatLngBounds.getSouthEast()\n\t\t];\n\t}\n});\n\n\n// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)\nexport function rectangle(latLngBounds, options) {\n\treturn new Rectangle(latLngBounds, options);\n}\n","export {Renderer} from './Renderer';\nexport {Canvas, canvas} from './Canvas';\nimport {SVG, create, pointsToPath, svg} from './SVG';\nSVG.create = create;\nSVG.pointsToPath = pointsToPath;\nexport {SVG, svg};\nimport './Renderer.getRenderer';\t// This is a bit of a hack, but needed because circular dependencies\n\nexport {Path} from './Path';\nexport {CircleMarker, circleMarker} from './CircleMarker';\nexport {Circle, circle} from './Circle';\nexport {Polyline, polyline} from './Polyline';\nexport {Polygon, polygon} from './Polygon';\nexport {Rectangle, rectangle} from './Rectangle';\n","export {Layer} from './Layer';\nexport {LayerGroup, layerGroup} from './LayerGroup';\nexport {FeatureGroup, featureGroup} from './FeatureGroup';\nimport {GeoJSON, geoJSON, geoJson, geometryToLayer, coordsToLatLng, coordsToLatLngs, latLngToCoords, latLngsToCoords, getFeature, asFeature} from './GeoJSON';\nGeoJSON.geometryToLayer = geometryToLayer;\nGeoJSON.coordsToLatLng = coordsToLatLng;\nGeoJSON.coordsToLatLngs = coordsToLatLngs;\nGeoJSON.latLngToCoords = latLngToCoords;\nGeoJSON.latLngsToCoords = latLngsToCoords;\nGeoJSON.getFeature = getFeature;\nGeoJSON.asFeature = asFeature;\nexport {GeoJSON, geoJSON, geoJson};\n\nexport {ImageOverlay, imageOverlay} from './ImageOverlay';\nexport {VideoOverlay, videoOverlay} from './VideoOverlay';\nexport {SVGOverlay, svgOverlay} from './SVGOverlay';\n\nexport {DivOverlay} from './DivOverlay';\nexport {Popup, popup} from './Popup';\nexport {Tooltip, tooltip} from './Tooltip';\n\nexport * from './marker/index';\nexport * from './tile/index';\nexport * from './vector/index';\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {LatLngBounds} from '../../geo/LatLngBounds';\nimport {Bounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map\n * (zoom to a selected bounding box), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option boxZoom: Boolean = true\n\t// Whether the map can be zoomed to a rectangular area specified by\n\t// dragging the mouse while pressing the shift key.\n\tboxZoom: true\n});\n\nexport var BoxZoom = Handler.extend({\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\t\tthis._container = map._container;\n\t\tthis._pane = map._panes.overlayPane;\n\t\tthis._resetStateTimeout = 0;\n\t\tmap.on('unload', this._destroy, this);\n\t},\n\n\taddHooks: function () {\n\t\tDomEvent.on(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._container, 'mousedown', this._onMouseDown, this);\n\t},\n\n\tmoved: function () {\n\t\treturn this._moved;\n\t},\n\n\t_destroy: function () {\n\t\tDomUtil.remove(this._pane);\n\t\tdelete this._pane;\n\t},\n\n\t_resetState: function () {\n\t\tthis._resetStateTimeout = 0;\n\t\tthis._moved = false;\n\t},\n\n\t_clearDeferredResetState: function () {\n\t\tif (this._resetStateTimeout !== 0) {\n\t\t\tclearTimeout(this._resetStateTimeout);\n\t\t\tthis._resetStateTimeout = 0;\n\t\t}\n\t},\n\n\t_onMouseDown: function (e) {\n\t\tif (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }\n\n\t\t// Clear the deferred resetState if it hasn't executed yet, otherwise it\n\t\t// will interrupt the interaction and orphan a box element in the container.\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetState();\n\n\t\tDomUtil.disableTextSelection();\n\t\tDomUtil.disableImageDrag();\n\n\t\tthis._startPoint = this._map.mouseEventToContainerPoint(e);\n\n\t\tDomEvent.on(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseMove: function (e) {\n\t\tif (!this._moved) {\n\t\t\tthis._moved = true;\n\n\t\t\tthis._box = DomUtil.create('div', 'leaflet-zoom-box', this._container);\n\t\t\tDomUtil.addClass(this._container, 'leaflet-crosshair');\n\n\t\t\tthis._map.fire('boxzoomstart');\n\t\t}\n\n\t\tthis._point = this._map.mouseEventToContainerPoint(e);\n\n\t\tvar bounds = new Bounds(this._point, this._startPoint),\n\t\t    size = bounds.getSize();\n\n\t\tDomUtil.setPosition(this._box, bounds.min);\n\n\t\tthis._box.style.width  = size.x + 'px';\n\t\tthis._box.style.height = size.y + 'px';\n\t},\n\n\t_finish: function () {\n\t\tif (this._moved) {\n\t\t\tDomUtil.remove(this._box);\n\t\t\tDomUtil.removeClass(this._container, 'leaflet-crosshair');\n\t\t}\n\n\t\tDomUtil.enableTextSelection();\n\t\tDomUtil.enableImageDrag();\n\n\t\tDomEvent.off(document, {\n\t\t\tcontextmenu: DomEvent.stop,\n\t\t\tmousemove: this._onMouseMove,\n\t\t\tmouseup: this._onMouseUp,\n\t\t\tkeydown: this._onKeyDown\n\t\t}, this);\n\t},\n\n\t_onMouseUp: function (e) {\n\t\tif ((e.which !== 1) && (e.button !== 1)) { return; }\n\n\t\tthis._finish();\n\n\t\tif (!this._moved) { return; }\n\t\t// Postpone to next JS tick so internal click event handling\n\t\t// still see it as \"moved\".\n\t\tthis._clearDeferredResetState();\n\t\tthis._resetStateTimeout = setTimeout(Util.bind(this._resetState, this), 0);\n\n\t\tvar bounds = new LatLngBounds(\n\t\t        this._map.containerPointToLatLng(this._startPoint),\n\t\t        this._map.containerPointToLatLng(this._point));\n\n\t\tthis._map\n\t\t\t.fitBounds(bounds)\n\t\t\t.fire('boxzoomend', {boxZoomBounds: bounds});\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.keyCode === 27) {\n\t\t\tthis._finish();\n\t\t\tthis._clearDeferredResetState();\n\t\t\tthis._resetState();\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property boxZoom: Handler\n// Box (shift-drag with mouse) zoom handler.\nMap.addInitHook('addHandler', 'boxZoom', BoxZoom);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\n\n/*\n * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\n\nMap.mergeOptions({\n\t// @option doubleClickZoom: Boolean|String = true\n\t// Whether the map can be zoomed in by double clicking on it and\n\t// zoomed out by double clicking while holding shift. If passed\n\t// `'center'`, double-click zoom will zoom to the center of the\n\t//  view regardless of where the mouse was.\n\tdoubleClickZoom: true\n});\n\nexport var DoubleClickZoom = Handler.extend({\n\taddHooks: function () {\n\t\tthis._map.on('dblclick', this._onDoubleClick, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._map.off('dblclick', this._onDoubleClick, this);\n\t},\n\n\t_onDoubleClick: function (e) {\n\t\tvar map = this._map,\n\t\t    oldZoom = map.getZoom(),\n\t\t    delta = map.options.zoomDelta,\n\t\t    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n\t\tif (map.options.doubleClickZoom === 'center') {\n\t\t\tmap.setZoom(zoom);\n\t\t} else {\n\t\t\tmap.setZoomAround(e.containerPoint, zoom);\n\t\t}\n\t}\n});\n\n// @section Handlers\n//\n// Map properties include interaction handlers that allow you to control\n// interaction behavior in runtime, enabling or disabling certain features such\n// as dragging or touch zoom (see `Handler` methods). For example:\n//\n// ```js\n// map.doubleClickZoom.disable();\n// ```\n//\n// @property doubleClickZoom: Handler\n// Double click zoom handler.\nMap.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {Draggable} from '../../dom/Draggable';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport {toLatLngBounds as latLngBounds} from '../../geo/LatLngBounds';\nimport {toBounds} from '../../geometry/Bounds';\n\n/*\n * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @option dragging: Boolean = true\n\t// Whether the map is draggable with mouse/touch or not.\n\tdragging: true,\n\n\t// @section Panning Inertia Options\n\t// @option inertia: Boolean = *\n\t// If enabled, panning of the map will have an inertia effect where\n\t// the map builds momentum while dragging and continues moving in\n\t// the same direction for some time. Feels especially nice on touch\n\t// devices. Enabled by default.\n\tinertia: true,\n\n\t// @option inertiaDeceleration: Number = 3000\n\t// The rate with which the inertial movement slows down, in pixels/second².\n\tinertiaDeceleration: 3400, // px/s^2\n\n\t// @option inertiaMaxSpeed: Number = Infinity\n\t// Max speed of the inertial movement, in pixels/second.\n\tinertiaMaxSpeed: Infinity, // px/s\n\n\t// @option easeLinearity: Number = 0.2\n\teaseLinearity: 0.2,\n\n\t// TODO refactor, move to CRS\n\t// @option worldCopyJump: Boolean = false\n\t// With this option enabled, the map tracks when you pan to another \"copy\"\n\t// of the world and seamlessly jumps to the original one so that all overlays\n\t// like markers and vector layers are still visible.\n\tworldCopyJump: false,\n\n\t// @option maxBoundsViscosity: Number = 0.0\n\t// If `maxBounds` is set, this option will control how solid the bounds\n\t// are when dragging the map around. The default value of `0.0` allows the\n\t// user to drag outside the bounds at normal speed, higher values will\n\t// slow down map dragging outside bounds, and `1.0` makes the bounds fully\n\t// solid, preventing the user from dragging outside the bounds.\n\tmaxBoundsViscosity: 0.0\n});\n\nexport var Drag = Handler.extend({\n\taddHooks: function () {\n\t\tif (!this._draggable) {\n\t\t\tvar map = this._map;\n\n\t\t\tthis._draggable = new Draggable(map._mapPane, map._container);\n\n\t\t\tthis._draggable.on({\n\t\t\t\tdragstart: this._onDragStart,\n\t\t\t\tdrag: this._onDrag,\n\t\t\t\tdragend: this._onDragEnd\n\t\t\t}, this);\n\n\t\t\tthis._draggable.on('predrag', this._onPreDragLimit, this);\n\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\tthis._draggable.on('predrag', this._onPreDragWrap, this);\n\t\t\t\tmap.on('zoomend', this._onZoomEnd, this);\n\n\t\t\t\tmap.whenReady(this._onZoomEnd, this);\n\t\t\t}\n\t\t}\n\t\tDomUtil.addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');\n\t\tthis._draggable.enable();\n\t\tthis._positions = [];\n\t\tthis._times = [];\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-grab');\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-drag');\n\t\tthis._draggable.disable();\n\t},\n\n\tmoved: function () {\n\t\treturn this._draggable && this._draggable._moved;\n\t},\n\n\tmoving: function () {\n\t\treturn this._draggable && this._draggable._moving;\n\t},\n\n\t_onDragStart: function () {\n\t\tvar map = this._map;\n\n\t\tmap._stop();\n\t\tif (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {\n\t\t\tvar bounds = latLngBounds(this._map.options.maxBounds);\n\n\t\t\tthis._offsetLimit = toBounds(\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),\n\t\t\t\tthis._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)\n\t\t\t\t\t.add(this._map.getSize()));\n\n\t\t\tthis._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));\n\t\t} else {\n\t\t\tthis._offsetLimit = null;\n\t\t}\n\n\t\tmap\n\t\t    .fire('movestart')\n\t\t    .fire('dragstart');\n\n\t\tif (map.options.inertia) {\n\t\t\tthis._positions = [];\n\t\t\tthis._times = [];\n\t\t}\n\t},\n\n\t_onDrag: function (e) {\n\t\tif (this._map.options.inertia) {\n\t\t\tvar time = this._lastTime = +new Date(),\n\t\t\t    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;\n\n\t\t\tthis._positions.push(pos);\n\t\t\tthis._times.push(time);\n\n\t\t\tthis._prunePositions(time);\n\t\t}\n\n\t\tthis._map\n\t\t    .fire('move', e)\n\t\t    .fire('drag', e);\n\t},\n\n\t_prunePositions: function (time) {\n\t\twhile (this._positions.length > 1 && time - this._times[0] > 50) {\n\t\t\tthis._positions.shift();\n\t\t\tthis._times.shift();\n\t\t}\n\t},\n\n\t_onZoomEnd: function () {\n\t\tvar pxCenter = this._map.getSize().divideBy(2),\n\t\t    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);\n\n\t\tthis._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;\n\t\tthis._worldWidth = this._map.getPixelWorldBounds().getSize().x;\n\t},\n\n\t_viscousLimit: function (value, threshold) {\n\t\treturn value - (value - threshold) * this._viscosity;\n\t},\n\n\t_onPreDragLimit: function () {\n\t\tif (!this._viscosity || !this._offsetLimit) { return; }\n\n\t\tvar offset = this._draggable._newPos.subtract(this._draggable._startPos);\n\n\t\tvar limit = this._offsetLimit;\n\t\tif (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }\n\t\tif (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }\n\t\tif (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }\n\t\tif (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }\n\n\t\tthis._draggable._newPos = this._draggable._startPos.add(offset);\n\t},\n\n\t_onPreDragWrap: function () {\n\t\t// TODO refactor to be able to adjust map pane position after zoom\n\t\tvar worldWidth = this._worldWidth,\n\t\t    halfWidth = Math.round(worldWidth / 2),\n\t\t    dx = this._initialWorldOffset,\n\t\t    x = this._draggable._newPos.x,\n\t\t    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,\n\t\t    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,\n\t\t    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;\n\n\t\tthis._draggable._absPos = this._draggable._newPos.clone();\n\t\tthis._draggable._newPos.x = newX;\n\t},\n\n\t_onDragEnd: function (e) {\n\t\tvar map = this._map,\n\t\t    options = map.options,\n\n\t\t    noInertia = !options.inertia || e.noInertia || this._times.length < 2;\n\n\t\tmap.fire('dragend', e);\n\n\t\tif (noInertia) {\n\t\t\tmap.fire('moveend');\n\n\t\t} else {\n\t\t\tthis._prunePositions(+new Date());\n\n\t\t\tvar direction = this._lastPos.subtract(this._positions[0]),\n\t\t\t    duration = (this._lastTime - this._times[0]) / 1000,\n\t\t\t    ease = options.easeLinearity,\n\n\t\t\t    speedVector = direction.multiplyBy(ease / duration),\n\t\t\t    speed = speedVector.distanceTo([0, 0]),\n\n\t\t\t    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),\n\t\t\t    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),\n\n\t\t\t    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),\n\t\t\t    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();\n\n\t\t\tif (!offset.x && !offset.y) {\n\t\t\t\tmap.fire('moveend');\n\n\t\t\t} else {\n\t\t\t\toffset = map._limitOffset(offset, map.options.maxBounds);\n\n\t\t\t\tUtil.requestAnimFrame(function () {\n\t\t\t\t\tmap.panBy(offset, {\n\t\t\t\t\t\tduration: decelerationDuration,\n\t\t\t\t\t\teaseLinearity: ease,\n\t\t\t\t\t\tnoMoveStart: true,\n\t\t\t\t\t\tanimate: true\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property dragging: Handler\n// Map dragging handler (by both mouse and touch).\nMap.addInitHook('addHandler', 'dragging', Drag);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport {on, off, stop} from '../../dom/DomEvent';\nimport {toPoint} from '../../geometry/Point';\n\n\n/*\n * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.\n */\n\n// @namespace Map\n// @section Keyboard Navigation Options\nMap.mergeOptions({\n\t// @option keyboard: Boolean = true\n\t// Makes the map focusable and allows users to navigate the map with keyboard\n\t// arrows and `+`/`-` keys.\n\tkeyboard: true,\n\n\t// @option keyboardPanDelta: Number = 80\n\t// Amount of pixels to pan when pressing an arrow key.\n\tkeyboardPanDelta: 80\n});\n\nexport var Keyboard = Handler.extend({\n\n\tkeyCodes: {\n\t\tleft:    [37],\n\t\tright:   [39],\n\t\tdown:    [40],\n\t\tup:      [38],\n\t\tzoomIn:  [187, 107, 61, 171],\n\t\tzoomOut: [189, 109, 54, 173]\n\t},\n\n\tinitialize: function (map) {\n\t\tthis._map = map;\n\n\t\tthis._setPanDelta(map.options.keyboardPanDelta);\n\t\tthis._setZoomDelta(map.options.zoomDelta);\n\t},\n\n\taddHooks: function () {\n\t\tvar container = this._map._container;\n\n\t\t// make the container focusable by tabbing\n\t\tif (container.tabIndex <= 0) {\n\t\t\tcontainer.tabIndex = '0';\n\t\t}\n\n\t\ton(container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.on({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tthis._removeHooks();\n\n\t\toff(this._map._container, {\n\t\t\tfocus: this._onFocus,\n\t\t\tblur: this._onBlur,\n\t\t\tmousedown: this._onMouseDown\n\t\t}, this);\n\n\t\tthis._map.off({\n\t\t\tfocus: this._addHooks,\n\t\t\tblur: this._removeHooks\n\t\t}, this);\n\t},\n\n\t_onMouseDown: function () {\n\t\tif (this._focused) { return; }\n\n\t\tvar body = document.body,\n\t\t    docEl = document.documentElement,\n\t\t    top = body.scrollTop || docEl.scrollTop,\n\t\t    left = body.scrollLeft || docEl.scrollLeft;\n\n\t\tthis._map._container.focus();\n\n\t\twindow.scrollTo(left, top);\n\t},\n\n\t_onFocus: function () {\n\t\tthis._focused = true;\n\t\tthis._map.fire('focus');\n\t},\n\n\t_onBlur: function () {\n\t\tthis._focused = false;\n\t\tthis._map.fire('blur');\n\t},\n\n\t_setPanDelta: function (panDelta) {\n\t\tvar keys = this._panKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.left.length; i < len; i++) {\n\t\t\tkeys[codes.left[i]] = [-1 * panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.right.length; i < len; i++) {\n\t\t\tkeys[codes.right[i]] = [panDelta, 0];\n\t\t}\n\t\tfor (i = 0, len = codes.down.length; i < len; i++) {\n\t\t\tkeys[codes.down[i]] = [0, panDelta];\n\t\t}\n\t\tfor (i = 0, len = codes.up.length; i < len; i++) {\n\t\t\tkeys[codes.up[i]] = [0, -1 * panDelta];\n\t\t}\n\t},\n\n\t_setZoomDelta: function (zoomDelta) {\n\t\tvar keys = this._zoomKeys = {},\n\t\t    codes = this.keyCodes,\n\t\t    i, len;\n\n\t\tfor (i = 0, len = codes.zoomIn.length; i < len; i++) {\n\t\t\tkeys[codes.zoomIn[i]] = zoomDelta;\n\t\t}\n\t\tfor (i = 0, len = codes.zoomOut.length; i < len; i++) {\n\t\t\tkeys[codes.zoomOut[i]] = -zoomDelta;\n\t\t}\n\t},\n\n\t_addHooks: function () {\n\t\ton(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_removeHooks: function () {\n\t\toff(document, 'keydown', this._onKeyDown, this);\n\t},\n\n\t_onKeyDown: function (e) {\n\t\tif (e.altKey || e.ctrlKey || e.metaKey) { return; }\n\n\t\tvar key = e.keyCode,\n\t\t    map = this._map,\n\t\t    offset;\n\n\t\tif (key in this._panKeys) {\n\t\t\tif (!map._panAnim || !map._panAnim._inProgress) {\n\t\t\t\toffset = this._panKeys[key];\n\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\toffset = toPoint(offset).multiplyBy(3);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.maxBounds) {\n\t\t\t\t\toffset = map._limitOffset(toPoint(offset), map.options.maxBounds);\n\t\t\t\t}\n\n\t\t\t\tif (map.options.worldCopyJump) {\n\t\t\t\t\tvar newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));\n\t\t\t\t\tmap.panTo(newLatLng);\n\t\t\t\t} else {\n\t\t\t\t\tmap.panBy(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (key in this._zoomKeys) {\n\t\t\tmap.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);\n\n\t\t} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {\n\t\t\tmap.closePopup();\n\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\tstop(e);\n\t}\n});\n\n// @section Handlers\n// @section Handlers\n// @property keyboard: Handler\n// Keyboard navigation handler.\nMap.addInitHook('addHandler', 'keyboard', Keyboard);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\n\n/*\n * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Mouse wheel options\n\t// @option scrollWheelZoom: Boolean|String = true\n\t// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,\n\t// it will zoom to the center of the view regardless of where the mouse was.\n\tscrollWheelZoom: true,\n\n\t// @option wheelDebounceTime: Number = 40\n\t// Limits the rate at which a wheel can fire (in milliseconds). By default\n\t// user can't zoom via wheel more often than once per 40 ms.\n\twheelDebounceTime: 40,\n\n\t// @option wheelPxPerZoomLevel: Number = 60\n\t// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))\n\t// mean a change of one full zoom level. Smaller values will make wheel-zooming\n\t// faster (and vice versa).\n\twheelPxPerZoomLevel: 60\n});\n\nexport var ScrollWheelZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'wheel', this._onWheelScroll, this);\n\n\t\tthis._delta = 0;\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'wheel', this._onWheelScroll, this);\n\t},\n\n\t_onWheelScroll: function (e) {\n\t\tvar delta = DomEvent.getWheelDelta(e);\n\n\t\tvar debounce = this._map.options.wheelDebounceTime;\n\n\t\tthis._delta += delta;\n\t\tthis._lastMousePos = this._map.mouseEventToContainerPoint(e);\n\n\t\tif (!this._startTime) {\n\t\t\tthis._startTime = +new Date();\n\t\t}\n\n\t\tvar left = Math.max(debounce - (+new Date() - this._startTime), 0);\n\n\t\tclearTimeout(this._timer);\n\t\tthis._timer = setTimeout(Util.bind(this._performZoom, this), left);\n\n\t\tDomEvent.stop(e);\n\t},\n\n\t_performZoom: function () {\n\t\tvar map = this._map,\n\t\t    zoom = map.getZoom(),\n\t\t    snap = this._map.options.zoomSnap || 0;\n\n\t\tmap._stop(); // stop panning and fly animations if any\n\n\t\t// map the delta with a sigmoid function to -4..4 range leaning on -1..1\n\t\tvar d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),\n\t\t    d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,\n\t\t    d4 = snap ? Math.ceil(d3 / snap) * snap : d3,\n\t\t    delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;\n\n\t\tthis._delta = 0;\n\t\tthis._startTime = null;\n\n\t\tif (!delta) { return; }\n\n\t\tif (map.options.scrollWheelZoom === 'center') {\n\t\t\tmap.setZoom(zoom + delta);\n\t\t} else {\n\t\t\tmap.setZoomAround(this._lastMousePos, zoom + delta);\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property scrollWheelZoom: Handler\n// Scroll wheel zoom handler.\nMap.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport {Point} from '../../geometry/Point';\nimport * as Util from '../../core/Util';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Map.TapHold is used to simulate `contextmenu` event on long hold,\n * which otherwise is not fired by mobile Safari.\n */\n\nvar tapHoldDelay = 600;\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option tapHold: Boolean\n\t// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.\n\ttapHold: Browser.touchNative && Browser.safari && Browser.mobile,\n\n\t// @option tapTolerance: Number = 15\n\t// The max number of pixels a user can shift his finger during touch\n\t// for it to be considered a valid tap.\n\ttapTolerance: 15\n});\n\nexport var TapHold = Handler.extend({\n\taddHooks: function () {\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onDown, this);\n\t},\n\n\t_onDown: function (e) {\n\t\tclearTimeout(this._holdTimeout);\n\t\tif (e.touches.length !== 1) { return; }\n\n\t\tvar first = e.touches[0];\n\t\tthis._startPos = this._newPos = new Point(first.clientX, first.clientY);\n\n\t\tthis._holdTimeout = setTimeout(Util.bind(function () {\n\t\t\tthis._cancel();\n\t\t\tif (!this._isTapValid()) { return; }\n\n\t\t\t// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events\n\t\t\tDomEvent.on(document, 'touchend', DomEvent.preventDefault);\n\t\t\tDomEvent.on(document, 'touchend touchcancel', this._cancelClickPrevent);\n\t\t\tthis._simulateEvent('contextmenu', first);\n\t\t}, this), tapHoldDelay);\n\n\t\tDomEvent.on(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.on(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_cancelClickPrevent: function cancelClickPrevent() {\n\t\tDomEvent.off(document, 'touchend', DomEvent.preventDefault);\n\t\tDomEvent.off(document, 'touchend touchcancel', cancelClickPrevent);\n\t},\n\n\t_cancel: function () {\n\t\tclearTimeout(this._holdTimeout);\n\t\tDomEvent.off(document, 'touchend touchcancel contextmenu', this._cancel, this);\n\t\tDomEvent.off(document, 'touchmove', this._onMove, this);\n\t},\n\n\t_onMove: function (e) {\n\t\tvar first = e.touches[0];\n\t\tthis._newPos = new Point(first.clientX, first.clientY);\n\t},\n\n\t_isTapValid: function () {\n\t\treturn this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;\n\t},\n\n\t_simulateEvent: function (type, e) {\n\t\tvar simulatedEvent = new MouseEvent(type, {\n\t\t\tbubbles: true,\n\t\t\tcancelable: true,\n\t\t\tview: window,\n\t\t\t// detail: 1,\n\t\t\tscreenX: e.screenX,\n\t\t\tscreenY: e.screenY,\n\t\t\tclientX: e.clientX,\n\t\t\tclientY: e.clientY,\n\t\t\t// button: 2,\n\t\t\t// buttons: 2\n\t\t});\n\n\t\tsimulatedEvent._simulated = true;\n\n\t\te.target.dispatchEvent(simulatedEvent);\n\t}\n});\n\n// @section Handlers\n// @property tapHold: Handler\n// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).\nMap.addInitHook('addHandler', 'tapHold', TapHold);\n","import {Map} from '../Map';\nimport {Handler} from '../../core/Handler';\nimport * as DomEvent from '../../dom/DomEvent';\nimport * as Util from '../../core/Util';\nimport * as DomUtil from '../../dom/DomUtil';\nimport Browser from '../../core/Browser';\n\n/*\n * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.\n */\n\n// @namespace Map\n// @section Interaction Options\nMap.mergeOptions({\n\t// @section Touch interaction options\n\t// @option touchZoom: Boolean|String = *\n\t// Whether the map can be zoomed by touch-dragging with two fingers. If\n\t// passed `'center'`, it will zoom to the center of the view regardless of\n\t// where the touch events (fingers) were. Enabled for touch-capable web\n\t// browsers.\n\ttouchZoom: Browser.touch,\n\n\t// @option bounceAtZoomLimits: Boolean = true\n\t// Set it to false if you don't want the map to zoom beyond min/max zoom\n\t// and then bounce back when pinch-zooming.\n\tbounceAtZoomLimits: true\n});\n\nexport var TouchZoom = Handler.extend({\n\taddHooks: function () {\n\t\tDomUtil.addClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.on(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\tremoveHooks: function () {\n\t\tDomUtil.removeClass(this._map._container, 'leaflet-touch-zoom');\n\t\tDomEvent.off(this._map._container, 'touchstart', this._onTouchStart, this);\n\t},\n\n\t_onTouchStart: function (e) {\n\t\tvar map = this._map;\n\t\tif (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }\n\n\t\tvar p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]);\n\n\t\tthis._centerPoint = map.getSize()._divideBy(2);\n\t\tthis._startLatLng = map.containerPointToLatLng(this._centerPoint);\n\t\tif (map.options.touchZoom !== 'center') {\n\t\t\tthis._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));\n\t\t}\n\n\t\tthis._startDist = p1.distanceTo(p2);\n\t\tthis._startZoom = map.getZoom();\n\n\t\tthis._moved = false;\n\t\tthis._zooming = true;\n\n\t\tmap._stop();\n\n\t\tDomEvent.on(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.on(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchMove: function (e) {\n\t\tif (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }\n\n\t\tvar map = this._map,\n\t\t    p1 = map.mouseEventToContainerPoint(e.touches[0]),\n\t\t    p2 = map.mouseEventToContainerPoint(e.touches[1]),\n\t\t    scale = p1.distanceTo(p2) / this._startDist;\n\n\t\tthis._zoom = map.getScaleZoom(scale, this._startZoom);\n\n\t\tif (!map.options.bounceAtZoomLimits && (\n\t\t\t(this._zoom < map.getMinZoom() && scale < 1) ||\n\t\t\t(this._zoom > map.getMaxZoom() && scale > 1))) {\n\t\t\tthis._zoom = map._limitZoom(this._zoom);\n\t\t}\n\n\t\tif (map.options.touchZoom === 'center') {\n\t\t\tthis._center = this._startLatLng;\n\t\t\tif (scale === 1) { return; }\n\t\t} else {\n\t\t\t// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng\n\t\t\tvar delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);\n\t\t\tif (scale === 1 && delta.x === 0 && delta.y === 0) { return; }\n\t\t\tthis._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);\n\t\t}\n\n\t\tif (!this._moved) {\n\t\t\tmap._moveStart(true, false);\n\t\t\tthis._moved = true;\n\t\t}\n\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tvar moveFn = Util.bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);\n\t\tthis._animRequest = Util.requestAnimFrame(moveFn, this, true);\n\n\t\tDomEvent.preventDefault(e);\n\t},\n\n\t_onTouchEnd: function () {\n\t\tif (!this._moved || !this._zooming) {\n\t\t\tthis._zooming = false;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._zooming = false;\n\t\tUtil.cancelAnimFrame(this._animRequest);\n\n\t\tDomEvent.off(document, 'touchmove', this._onTouchMove, this);\n\t\tDomEvent.off(document, 'touchend touchcancel', this._onTouchEnd, this);\n\n\t\t// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.\n\t\tif (this._map.options.zoomAnimation) {\n\t\t\tthis._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);\n\t\t} else {\n\t\t\tthis._map._resetView(this._center, this._map._limitZoom(this._zoom));\n\t\t}\n\t}\n});\n\n// @section Handlers\n// @property touchZoom: Handler\n// Touch zoom handler.\nMap.addInitHook('addHandler', 'touchZoom', TouchZoom);\n","import {Map} from './Map';\nimport {BoxZoom} from './handler/Map.BoxZoom';\nMap.BoxZoom = BoxZoom;\nimport {DoubleClickZoom} from './handler/Map.DoubleClickZoom';\nMap.DoubleClickZoom = DoubleClickZoom;\nimport {Drag} from './handler/Map.Drag';\nMap.Drag = Drag;\nimport {Keyboard} from './handler/Map.Keyboard';\nMap.Keyboard = Keyboard;\nimport {ScrollWheelZoom} from './handler/Map.ScrollWheelZoom';\nMap.ScrollWheelZoom = ScrollWheelZoom;\nimport {TapHold} from './handler/Map.TapHold';\nMap.TapHold = TapHold;\nimport {TouchZoom} from './handler/Map.TouchZoom';\nMap.TouchZoom = TouchZoom;\n\nexport {Map, createMap as map} from './Map';\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 { 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 \"leaflet/dist/leaflet.css\";\nimport \"./frontend.scss\";\n\nimport { createApp } from \"vue\";\nimport { onDomReady, setupWRDAuth } from \"./lib/runtime\";\nimport App from \"./App.vue\";\nimport { router } from \"./lib/router\";\nimport { initTheme } from \"./lib/useTheme\";\nimport { installPwa } from \"./lib/pwa\";\nimport { installUserback } from \"./lib/userback\";\nimport { reloadPersonalListFromServer } from \"./lib/personalList\";\n\nconst LOGGED_IN_CLASS = \"wh-wrdauth--isloggedin\";\n\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"statiegeldnl:feedback\": { hosted: true; siteRoot: string };\n  }\n}\n\n// Resolve & apply the theme synchronously so the first paint matches the\n// stored preference (or the system preference on first visit).\ninitTheme();\n\nonDomReady(async () => {\n  // Manifest + apple-touch-icon + favicon — moet vóór mount staan zodat\n  // de browser ze meteen ziet en \"Installeer app\" / \"Add to Home Screen\"\n  // direct beschikbaar zijn na de eerste interactie.\n  installPwa();\n\n  const app = createApp(App);\n  app.use(router);\n  // Wacht tot vue-router de eerste route heeft geresolved zodat <router-view>\n  // een view rendert vóór de mount; anders ziet setupWRDAuth() een lege DOM.\n  await router.isReady();\n  app.mount(\"#app\");\n  // After Vue mounts — dompack.register() does a one-shot scan per selector,\n  // so the login form must already be in the DOM when setupWRDAuth() runs.\n  //\n  // Geef een onLogin-callback mee zodat setupWRDAuth NIET de hele pagina herlaadt\n  // na een succesvolle login (de default navigeert naar `returnTo = location.href`,\n  // zie @webhare/frontend auth.ts). Geen reload houdt de login snappy en laat de\n  // MutationObserver in useWrdAuthState de state reactief omklappen. We sturen\n  // daarna expliciet naar home — na inloggen wil je altijd op het startscherm\n  // landen, niet op de route die nog in het hash-fragment stond.\n  setupWRDAuth({\n    onLogin: async () => {\n      // Altijd naar home na een verse login.\n      await router.replace({ name: \"home\" });\n      // De personal-list is al (leeg) geladen voor de uitgelogde sessie; zonder\n      // reload moeten we 'm verversen zodat de planning-badge klopt.\n      await reloadPersonalListFromServer();\n      // Login zonder reload → widget initialiseren / identiteit live doorduwen\n      // nu we de gebruiker kennen.\n      installUserback();\n    },\n  });\n\n  // Userback-feedbackwidget alleen voor al-ingelogde veldagenten. Bij een\n  // verse login regelt de onLogin-callback hierboven de injectie.\n  if (document.documentElement.classList.contains(LOGGED_IN_CLASS))\n    installUserback();\n});\n","var UNKNOWN_FUNCTION = '<unknown>';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n  var lines = stackString.split('\\n');\n  return lines.reduce(function (stack, line) {\n    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n    if (parseResult) {\n      stack.push(parseResult);\n    }\n\n    return stack;\n  }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n  var parts = chromeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n  var submatch = chromeEvalRe.exec(parts[2]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line/column number\n    parts[2] = submatch[1]; // url\n\n    parts[3] = submatch[2]; // line\n\n    parts[4] = submatch[3]; // column\n  }\n\n  return {\n    file: !isNative ? parts[2] : null,\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: isNative ? [parts[2]] : [],\n    lineNumber: parts[3] ? +parts[3] : null,\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n  var parts = winjsRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n  var parts = geckoRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n  var submatch = geckoEvalRe.exec(parts[3]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line number\n    parts[3] = submatch[1];\n    parts[4] = submatch[2];\n    parts[5] = null; // no column when eval\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: parts[2] ? parts[2].split(',') : [],\n    lineNumber: parts[4] ? +parts[4] : null,\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n  var parts = javaScriptCoreRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[4],\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n  var parts = nodeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nexport { parse };\n","import * as stacktrace_parser from \"stacktrace-parser\";\n\nexport type StackTraceItem = {\n  filename: string;\n  line: number;\n  col: number;\n  func: string;\n};\n\nexport type StackTrace = StackTraceItem[];\n\nexport function parseTrace(e: Error): StackTrace {\n  if (!e?.stack)\n    return [];\n\n  const trace = stacktrace_parser.parse(e.stack);\n  return trace.map(i => ({ filename: i.file || \"\", line: i.lineNumber || 1, col: i.column || 1, func: (i.methodName || \"\") }));\n}\n\nexport function getStackTrace(): StackTrace {\n  return parseTrace(new Error()).slice(1);\n}\n\nexport function formatTrace(trace: StackTraceItem[]): string {\n  return trace.map(e =>\n    `    at ${e.func} (${e.filename}:${e.line}:${e.col})`).join(\"\\n\");\n}\n\nexport function prependStackTrace(error: Error, trace: StackTrace) {\n  if (!error.stack)\n    return; //no stack to manipulate\n\n  const stacklines = error.stack?.split(\"\\n\") || [];\n  const tracelines = formatTrace(trace);\n  error.stack = (stacklines[0] ? stacklines[0] + \"\\n\" : \"\") + tracelines + '\\n' + (stacklines.slice(1).join(\"\\n\"));\n  return error;\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/rpc\" {\n  export interface KnownRPCServices {\n    /* Filled by generated services.ts files */\n  }\n}\n\nimport { debugFlags, backendBase } from \"@webhare/env\";\nimport { type StackTrace, parseTrace, prependStackTrace, type PromisifyFunctionReturnType } from \"@webhare/js-api-tools\";\nimport { omit, parseTyped, stringify } from \"@webhare/std\";\n\n//Preload interface definitions. To solve this cleaner we would have to do some sort of auto-inject but how to robustly do that accross IDEs/Tscs ?\n\n//@ts-ignore Ignore if it doesn't exist. this line *must* remain a @ts-ignore\nimport type { } from \"@mod-platform/generated/ts/services.ts\";\n//@ts-ignore Ignore if it doesn't exist. this line *must* remain a @ts-ignore\nimport type { } from \"wh:ts/services.ts\";\n\nfunction isAbsolute(url: string) {\n  return url.startsWith(\"http:\") || url.startsWith(\"https:\");\n}\n\nfunction getBaseURL() {\n  if (!backendBase)\n    throw new Error(`You must set the baseUrl option when using the RPC Client outside Webhare`);\n  return isAbsolute(backendBase) ? backendBase : new URL(backendBase, location.origin);\n}\n\nexport interface RPCClientOptions {\n  /** Custom request update. Use to eg. set keepalive or add debug variables to the URL */\n  onBeforeRequest?: (url: URL, requestInit: RequestInit & { headers: Headers }) => void;\n  /** Response callback. Use this if you need to capture details on the incoming respones. May be invoked multiple times per request, eg due to 429 errors! */\n  onResponse?: (response: Response) => void;\n  /** Call timeout */\n  timeout?: number;\n  /** Abort signal to cancel the RPC */\n  signal?: AbortSignal;\n  /** Retry on 429 */\n  retry429?: boolean;\n  /** Silent - do not log errors */\n  silent?: boolean;\n  /** Debug (Follows 'rpc' debugflag if not explicity specified) */\n  debug?: boolean;\n  /** Headers to submit (Eg Authorization) */\n  headers?: Record<string, string>;\n  /** Base URL for service paths */\n  baseUrl?: string;\n}\n\n/** RPC Response format */\nexport type RPCResponse = ({\n  /** Result. Not present if the function didn't return anything */\n  result?: unknown;\n} | {\n  /** Error message */\n  error: string;\n  /** Captured stack trace (if 'etr' debugFlag is set) */\n  trace?: StackTrace;\n}) & {\n  /** Captured console log entries (if 'etr' debugFlag is set) */\n  consoleLog?: Array<{\n    //TODO this is Serialized<ConsoleLogItem[]> - should probably rename it to SerializedToJSON and move to std or env ?\n    /** Date when console function was called */\n    when: string;\n    /** `console` method that was called (eg 'log') */\n    method: string;\n    /** Logged data */\n    data: string;\n    /** Location of caller */\n    location?: {\n      filename: string;\n      line: number;\n      col: number;\n      func: string;\n    };\n    /** Codecontext */\n    codeContextId?: string;\n  }>;\n};\n\nclass ControlledCall {\n  client: RPCClient;\n  options: RPCClientOptions;\n  abortcontroller?: AbortController;\n  timeout?: number;\n  _callurl: string;\n  _fetchoptions: RequestInit;\n  promise: Promise<unknown>;\n  timedout?: boolean;\n  aborted?: boolean;\n\n  constructor(client: RPCClient, method: string, stack: StackTrace | null, options: RPCClientOptions, callurl: URL, fetchoptions: RequestInit) {\n    this.client = client;\n    this.options = options;\n\n    if (options.timeout || options.signal) {\n      this.abortcontroller = new AbortController;\n      fetchoptions.signal = this.abortcontroller.signal;\n\n      if (options.timeout && options.timeout > 0) {\n        this.timeout = options.timeout;\n        setTimeout(() => this._handleTimeout(), options.timeout);\n      }\n      if (options.signal) {\n        options.signal.addEventListener(\"abort\", () => this._abort());\n      }\n    }\n\n    this._callurl = callurl.toString();\n    this._fetchoptions = fetchoptions;\n\n    const fetchpromise = fetch(this._callurl, this._fetchoptions);\n    this.promise = this._completeCall(method, stack, fetchpromise) as Promise<unknown>;\n  }\n  _handleTimeout() {\n    this.timedout = true;\n    this.abortcontroller?.abort();\n  }\n  _abort() {\n    this.aborted = true;\n    this.abortcontroller?.abort();\n  }\n\n  async _completeCall(method: string, requestStack: StackTrace | null, fetchpromise: Promise<Response>) {\n    let response;\n    for (; ;) { //loop to handle \"429 Conflict\"s\n      try { //we should only guard the fetch call and specifically *not* the onResponse callback\n        response = await fetchpromise;\n      } catch (exception) {\n        if (this.client.debug)\n          console.log(`[rpc] Exception invoking '${method}'`, exception);\n\n        if (this.aborted)\n          throw new Error(`RPC Aborted`);\n        else if (this.timedout)\n          throw new Error(`RPC Timeout: timeout was set to ${this.timeout} milliseconds`);\n        else\n          throw new Error(`RPC Failed: exception: ` + exception);\n      }\n\n      this.options.onResponse?.(response); //allow hooks to capture headers\n\n      if (response.status === 429 && !(\"retry429\" in this.options && !this.options.retry429) && response.headers.get(\"Retry-After\")) {\n        const retryafter = parseInt(response.headers.get(\"Retry-After\") || \"\");\n        if (this.client.debug)\n          console.warn(`[rpc] We are being throttled (429 Too Many Requests) - retrying after ${retryafter} seconds`);\n\n        await new Promise(resolve => setTimeout(resolve, retryafter * 1000));\n        fetchpromise = fetch(this._callurl, this._fetchoptions);\n        continue;\n      }\n      break;\n    }\n\n    let jsonresponse: RPCResponse;\n    try {\n      jsonresponse = parseTyped(await response.text());\n      if (jsonresponse.consoleLog) {\n        for (const logitem of jsonresponse.consoleLog) {\n          //should we log 'when'? it's getting more and more noisy then though....\n          //TODO should we match the remote's method (after validating) or just keep everything at 'log' ?\n          console.log(`[remote:${logitem.method}] ${logitem.location ? `${logitem.location.filename.split(\"/\").at(-1)}:${logitem.location.line}: ` : ''}${logitem.data}`);\n        }\n      }\n\n      if (this.client.debug)\n        console.log(`[rpc] Received response to '${method}'`, omit(jsonresponse, [\"consoleLog\", \"trace\"]));\n    } catch (exception) {\n      if (this.client.debug)\n        console.warn(`[rpc] Response was not valid JSON`, exception);\n      throw new Error(\"RPC Failed: Invalid response received\", { cause: exception });\n    }\n\n    if (\"error\" in jsonresponse) {\n      const err = new Error(`RPC Error: ${jsonresponse.error}`);\n      if (jsonresponse.trace) {\n        try {\n          prependStackTrace(err, jsonresponse.trace);\n        } catch (err2) {\n          //ignore stacktrace manipulation error\n        }\n      }\n\n      if (this.options.debug) {\n        console.group();\n        console.warn(\"RPC failed:\", err);\n        if (requestStack) {\n          console.warn(\"Stack at calling point\");\n          console.log(requestStack);\n        }\n        console.groupEnd();\n      }\n\n      throw err;\n    }\n\n    return jsonresponse.result;\n  }\n}\n\nclass RPCClient {\n  readonly url: string;\n  options: RPCClientOptions;\n\n  constructor(url: string, options?: RPCClientOptions) {\n    this.url = url;\n    this.options = {\n      timeout: 0,\n      debug: false,\n      ...options\n    };\n  }\n\n  get debug() {\n    return this.options.debug || debugFlags.rpc;\n  }\n\n  _tryLogError(requestStack: StackTrace | null, error: Error) {\n  }\n\n  invoke(method: string, params: unknown[]) {\n    //build the URL, add profiling and function parameters where needed\n    //We'll delay the baseurl calculation until the first call to allow for the backendBase to be set up\n    const callurl = isAbsolute(this.url) ? new URL(this.url + method) : new URL(this.url + method, this.options.baseUrl || getBaseURL());\n\n    let requestStack: StackTrace | null = null;\n\n    const fetchoptions: RequestInit & { headers: Headers } = {\n      method: \"POST\",\n      headers: new Headers({\n        \"Accept\": \"application/json\",\n        \"Content-Type\": \"application/json; charset=utf-8\",\n        ...this.options.headers\n      }),\n      body: stringify(params, { typed: true }),\n    };\n\n    if (typeof location !== \"undefined\")\n      callurl.searchParams.set(\"pathname\", location.pathname);\n\n    if (this.debug) {\n      requestStack = parseTrace(new Error);\n      console.log(`[rpc] Invoking '${method}'`, params);\n    }\n\n    this.options.onBeforeRequest?.(callurl, fetchoptions);\n    return new ControlledCall(this, method, requestStack, this.options, callurl, fetchoptions).promise;\n  }\n}\n\ntype ServiceBase<T> = {\n  withOptions(options: RPCClientOptions): T & ServiceBase<T>;\n};\n\nclass ServiceProxy<Service extends keyof KnownRPCServices | object> {\n  client: RPCClient;\n\n  constructor(client: RPCClient) {\n    this.client = client;\n  }\n\n  get(target: object, prop: string, receiver: unknown) {\n    if ([\"then\", \"catch\", \"finally\"].includes(prop)) //do not appear like our object is a promise\n      return undefined;\n\n    if (prop === 'withOptions') { //create a withOptions function\n      return (options: RPCClientOptions) => {\n        const newoptions = {\n          ...this.client.options,\n          ...options,\n          headers: { ...this.client.options.headers, ...options.headers }\n        };\n        return rpc(this.client.url as (Service extends keyof KnownRPCServices ? Service : string), newoptions);\n      };\n    }\n\n    return (...args: unknown[]) => this.client.invoke(prop, args);\n  }\n}\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R ? (...args: P) => R : never;\n\nexport type OmitRPCContextArgs<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? OmitFirstArg<ServiceType[K]> : never;\n};\n\n/** Creates an async version of the functions in a class, removes context parameters\n * @typeParam ServiceType - Type definition of the service class that implements this service.\n*/\ntype ConvertToRPCInterface<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- using any is needed for this type definition\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? PromisifyFunctionReturnType<ServiceType[K]> : never;\n};\n\ntype ExtractInterface<Service extends object> = ConvertToRPCInterface<Service> & ServiceBase<ConvertToRPCInterface<Service>>;\n\n/** Get the client interface type as would be returned by createClient\n * @typeParam Service - either the `module:service` name or the interface to implement. If you want to pass the implementation's type you should wrap it into `OmitRPCContextArgs`.\n*/\nexport type GetRPCClientInterface<Service extends (keyof KnownRPCServices) | object> = Service extends keyof KnownRPCServices ? ExtractInterface<OmitRPCContextArgs<KnownRPCServices[Service]>> : Service extends object ? ExtractInterface<Service> : never;\n\n/** Create a WebHare RPC client\n  @param service - URL (https://<ORIGIN>/.wh/rpc/module/service/) or service name (module:service) to invoke\n*/\nexport function rpc<Service extends keyof KnownRPCServices>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\nexport function rpc<Service extends object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\n\nexport function rpc<Service extends keyof KnownRPCServices | object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service> {\n  //NOTE: needed the separate overloads to get Intellisense to list the known services for createRPClient's first argument\n\n  if (!service)\n    throw new Error(`You must specify either a WebHare rpcService name or a full URL`);\n\n  const servicematch = service.match(/^([a-z0-9_]+):([a-z0-9_]+)$/);\n  if (servicematch)\n    service = `/.wh/rpc/${servicematch[1]}/${servicematch[2]}/` as (Service extends keyof KnownRPCServices ? Service : string);\n  else if (!service.endsWith('/'))\n    throw new Error(`Service URL must end in a slash`);\n\n  const rpcclient = new RPCClient(service, options);\n  return new Proxy({}, new ServiceProxy<GetRPCClientInterface<Service>>(rpcclient)) as GetRPCClientInterface<Service>;\n}\n","import type { NavigateInstruction } from \"@webhare/env\";\n\n/** Login failure reasons that can also be used by custom isLoginDenied checks */\nexport type LoginErrorCode = \"internal-error\" | \"incorrect-login-password\" | \"incorrect-email-password\" | \"account-disabled\" | \"unknown-account\" | \"require-external-login\";\n\n/** Login reasons that require further client side work but are not errors per-se */\nexport type LoginIncompleteCode = \"totp\" | \"incomplete-account\";\n\nexport type LoginTweaks = {\n  /** Limit session duration (development servers only) */\n  limitExpiry?: number;\n  /** Language code */\n  lang?: string;\n};\n\nexport type LoginResult = {\n  loggedIn: boolean;\n  navigateTo: NavigateInstruction;\n} | {\n  loggedIn: false;\n  code: LoginErrorCode;\n  error?: string;\n};\n\nexport type LogoutResult = { success: true } | {\n  error: string;\n  code: LoginErrorCode | LoginIncompleteCode;\n};\n\nexport const PublicCookieSuffix = \"_publicauthdata\";\n\n/* APIs and types shared between the client and server */\nexport function getCompleteAccountNavigation(token: string, pathname: string): NavigateInstruction {\n  return {\n    type: \"redirect\", //TODO or use a \"form\" too? went for a session now as an excursion to followup GET pages is much more likely in this procedure than with totp\n    url: \"/.wh/common/authpages/?wrd_pwdaction=completeaccount&token=\" + encodeURIComponent(token || '') + \"&pathname=\" + encodeURIComponent(pathname)\n  };\n}\n","import { createClient } from \"@webhare/jsonrpc-client\";\nimport { type NavigateInstruction, navigateTo } from \"@webhare/env\";\nimport * as dompack from '@webhare/dompack';\nimport type { LoginOptions } from \"@webhare/auth/src/identity\";\nimport { rpc } from \"@webhare/rpc\";\n\n//NOTE: Do *NOT* load @webhare/frontend or we enforce the new CSS reset!\nimport { getFrontendData } from '@webhare/frontend/src/init';\nimport { PublicCookieSuffix, type LoginErrorCode, type LoginResult, type LoginTweaks } from \"@webhare/auth/src/shared\";\nimport { parseTyped, toSnakeCase, type ToSnakeCase } from \"@webhare/std\";\nimport type WRDAuthenticationProvider from \"@mod-wrd/js/auth\";\nimport type { OAuth2PromptFlag } from \"@webhare/auth/src/oauth2-client\";\n\n/** WRDAuth configuration */\nexport interface WRDAuthOptions {\n  /** Callback that is invoked after a succesful login. If not set the page will be reloaded. */\n  onLogin?: () => Promise<void> | void;\n}\n\nexport interface PublicAuthData {\n  expiresMs: number;\n  userInfo?: object | null;\n  persistent?: boolean;\n}\n\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"wrd:auth\": {\n      /** WRDAuth cookiename (used to store userinfo and expiry) */\n      cookiename: string;\n    };\n  }\n}\n\ndeclare global {\n  interface Window {\n    $wh$legacyAuthProvider: WRDAuthenticationProvider;\n    triggerWebHareSSO?: (tag: string, options?: SSOLoginOptions) => Promise<void>;\n  }\n}\n\n/** Current authoptions. undefined if setupWRDAuth hasn't been invoked yet */\nlet authOptions: WRDAuthOptions | undefined;\n\n/** Get current login cookie. If empty, wrdauth is not initialized here */\nfunction getCookieName(): string | null {\n  const settings = getFrontendData(\"wrd:auth\", { allowMissing: true });\n  return settings?.cookiename || null;\n}\n\nfunction getAuthLocalData(): PublicAuthData | null {\n  const c = getCookieName();\n  if (!c)\n    return null;\n\n  try {\n    return parseTyped(dompack.getCookie(c + PublicCookieSuffix)!) as PublicAuthData;\n  } catch {\n    return null;\n  }\n}\n\nasync function submitLoginForm(node: HTMLFormElement, event: SubmitEvent) {\n  if (node.propWhFormhandler)\n    return; //already handled by publisher forms so we'll defer to that\n  dompack.stop(event);\n\n  const username = (node.elements.namedItem(\"login\") as HTMLInputElement)?.value;\n  const password = (node.elements.namedItem(\"password\") as HTMLInputElement)?.value;\n  const site = (node.elements.namedItem(\"site\") as HTMLInputElement)?.value || undefined;\n  const returnto = (node.elements.namedItem(\"returnto\") as HTMLInputElement)?.value || undefined;\n  const persistentlogin = (node.elements.namedItem(\"persistent\") as HTMLInputElement)?.checked;\n  if (!login || !password)\n    throw new Error(`submitLoginForm: required elements login/password not set or missing`);\n\n  using lock = dompack.flagUIBusy({ modal: true });\n  void (lock);\n\n  const loginresult = await login(username, password, {\n    persistent: persistentlogin,\n    site,\n    returnTo: returnto ? new URL(returnto, location.href).toString() : location.href.split('#')[0]\n  });\n  if (loginresult.loggedIn) {\n    refreshLoginStatus();\n    if (loginresult.navigateTo.type === \"redirect\" && loginresult.navigateTo.url.split('#')[0] === location.href.split('#')[0]  //stay on same page\n      && authOptions?.onLogin) {\n\n      if (loginresult.navigateTo.url.includes('#')) //execute any #hash instruction\n        history.replaceState(null, \"\", loginresult.navigateTo.url.substring(loginresult.navigateTo.url.indexOf('#')));\n\n      await authOptions.onLogin();\n    } else {\n      //Reload the page to get the new login status - TODO put this behind a 'login state change' event and allow users to cancel it if they can deal with login/logout on-page\n      console.log(\"Post login redirect\", loginresult.navigateTo);\n      navigateTo(loginresult.navigateTo);\n    }\n  } else if (\"navigateTo\" in loginresult) {\n    console.log(\"Login incomplete, redirecting to\", loginresult.navigateTo);\n    navigateTo(loginresult.navigateTo);\n  } else\n    failLogin(loginresult.error ?? loginresult.code, { code: loginresult.code, data: \"\" }, node); //FIXME restore the code & data members from old wrdauth\n}\n\nfunction refreshLoginStatus() {\n  const loggedIn = isLoggedIn();\n  document.documentElement.classList.toggle(\"wh-wrdauth--isloggedin\", loggedIn);\n\n  window.$wh$legacyAuthProvider?.refresh();\n}\n\n/** Return whether a user's currently logged in */\nexport function isLoggedIn(): boolean {\n  return (getAuthLocalData()?.expiresMs || 0) > Date.now();\n}\n\n/** Setup WRDAuth frontend integration */\nexport function setupWRDAuth(options?: WRDAuthOptions) {\n  if (authOptions)\n    throw new Error(`Duplicate setupWRDAuth call`);\n\n  authOptions = { ...options };\n\n  dompack.register<HTMLFormElement>('form.wh-wrdauth__loginform,form.wh-wrdauth-login__form', node => {\n    node.setAttribute(\"data-wh-wrdauth-attached\", \"\");\n    dompack.addDocEventListener(node, \"submit\", evt => submitLoginForm(node, evt));\n  });\n  dompack.register('.wh-wrdauth__logout', node => {\n    function handleLogoutClick(event: Event) {\n      dompack.stop(event);\n\n      //letting rejections escape - our trigger is generally setup in HTML so there's nothing to catch but uncaught rejection handlers anyway\n      if (node instanceof HTMLAnchorElement && node.href && node.href.split('#')[0] !== location.href.split('#')[0]) { //logout link sending you elsewhere\n        void doLogout().then(() => {\n          console.log(\"Logout complete, redirecting to\", node.href);\n          navigateTo({ type: \"redirect\", url: node.href });\n        });\n      } else {\n        void logout(); //TODO what if the logout only changed the anchor? but what's the usecase for that?\n      }\n    }\n\n    dompack.addDocEventListener(node, \"click\", event => handleLogoutClick(event));\n  });\n\n  dompack.onDomReady(() => {\n    if (\"$wh$wrdauth\" in window) {\n      console.error(\"Both setupWRDAuth from @webhare/frontend and @mod-wrd/js/auth are present in this page. Mixing these is not supported!\");\n    }\n  });\n\n  refreshLoginStatus();\n}\n\nfunction failLogin(message: string, response: { code: LoginErrorCode; data: string }, form: HTMLFormElement) {\n  const evtdetail = {\n    message: message,\n    code: response.code,\n    data: response.data\n  };\n\n  const cancelled = !dompack.dispatchCustomEvent(form || document.documentElement, \"wh:wrdauth-loginfailed\", { bubbles: true, cancelable: true, detail: evtdetail });\n  if (!cancelled) {\n    //TODO depending on error we may need to change a different field?\n    const loginfield = dompack.qR<HTMLInputElement>(form, \"input[name=password]\");\n    loginfield.setCustomValidity(message);\n    // loginfield.reportValidity(); //this actually blocks wh-form error handling from showing the error in-page when so desired\n    loginfield.focus();\n  }\n}\n\n/** Retrieve userinfo if set by onFrontendUserInfo in your WRDAuth customizer */\nexport function getUserInfo<T extends object = object>(): T | null {\n  return isLoggedIn() ? getAuthLocalData()?.userInfo as T | null : null;\n}\n\nfunction getLoginTweaks(): LoginTweaks {\n  const tweaks: LoginTweaks = {\n    lang: dompack.getLang().tag\n  };\n\n  const urlvars = new URL(location.href);\n  if (urlvars.searchParams.has(\"wrdauth_limit_expiry\"))\n    tweaks.limitExpiry = parseInt(urlvars.searchParams.get(\"wrdauth_limit_expiry\") || '0') || undefined;\n\n  return tweaks;\n}\n\n/** Implements the common username/password flows */\nexport async function login(username: string, password: string, options: LoginOptions = {}): Promise<LoginResult> {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  const result = await rpc(\"platform:authservice\").login(username, password, cookieName, dompack.getBrowser().triplet, { ...options, ...getLoginTweaks() });\n  if (result.loggedIn && !getAuthLocalData())\n    throw new Error(\"Login succeeded but no auth data was set in the cookie\");\n\n  return result;\n}\n\n/** Execute and verify cookie clearance to prepare for logging out */\nasync function doLogout() {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  await rpc(\"platform:authservice\").logout(cookieName, dompack.getBrowser().triplet);\n\n  if (getAuthLocalData())\n    throw new Error(\"Logged out but we still have auth data in the cookie\");\n}\n\n/** Logout the current user */\nexport async function logout() {\n  await doLogout();\n  console.log(\"Reloading to process the new logged out status\");\n  navigateTo({ type: \"reload\" }); //TODO put this behind a 'login state change' event\n}\n\nexport interface MyService {\n  startLogin2(urlpath: string, tag: string, options: ToSnakeCase<SSOLoginOptions>): Promise<NavigateInstruction>;\n}\n\ninterface SSOLoginOptions {\n  /** @deprecated use prompt: \"none\" from WH6.0 up */\n  passive?: boolean;\n  /** Set the prompt flag for the authorize request */\n  prompt?: OAuth2PromptFlag;\n}\n\nexport function startSSOLogin(tag: string, options?: SSOLoginOptions): Promise<void> {\n  const client = createClient<MyService>(\"wrd:auth\");\n\n  if (options?.passive)\n    options = { prompt: \"none\", ...options, passive: undefined }; //force prompt to none in passive mode, and remove the passive flag since it doesn't mean anything to the server\n\n  const defer = Promise.withResolvers<void>();\n\n  //Launch SSO login for the current page.\n  //TODO also pass getLoginTweaks() at least to OIDC logins as soon as we've ported this to authservice\n  client.startLogin2(location.pathname + location.search + location.hash, tag, toSnakeCase(options) || {}).then(instr => {\n    //we leave the promise unresolved so any busy layers stay active during the actual redirect\n    //TODO can we have navigateTo detect failed navigations so we can throw ?\n    navigateTo(instr);\n  }).catch((e: Error) => {\n    defer.reject(e);\n  });\n\n  return defer.promise;\n}\n\n/** Configure WebHare external auth buttons (even hidden ones) to listen for bookmarklet login requests */\nexport function setupWebHareSSOTrigger(): void {\n  window.triggerWebHareSSO = startSSOLogin;\n}\n","import { qSA } from \"@webhare/dompack\";\nimport { debugFlags } from \"@webhare/env\";\nimport type { FormAnalyticsEvent } from \"@webhare/forms\";\nimport type { DataLayerEntry } from \"./gtm-types\";\nimport { omit } from \"@webhare/std\";\n\ndeclare global {\n  interface Window {\n    /** The google tag manager (GTM) datalayer */\n    dataLayer: DataLayerEntry[]; //technically window.dataLayer may not exist and should be optional, but we already used to declare it as existing from gtm.ts\n  }\n  //It's safer to access dataLayer through globalThis, which will always be available in all environments unlike 'window'\n  var dataLayer: DataLayerEntry[] | undefined;\n}\n\n//ADDME if we ever figure out a bundler trick to flush this command to the top of all imports/loads, that would be great (we could consider *ALWAYS* putting this in the generated startup code, or we'd need to do a tree pre-walk to see if gtm.es is loaded anywhere)\n(globalThis as unknown as Window).dataLayer ||= [];\nlet lastSeen: DataLayerEntry | undefined;\n\nfunction showDataLayerUpdates() {\n  if (!globalThis.dataLayer)\n    return; //not set up (yet?)\n\n  if (debugFlags.anl)\n    globalThis.dataLayer.slice(globalThis.dataLayer.indexOf(lastSeen!) + 1).forEach(entry => console.log(\"[anl] dataLayer.push:\", entry));\n\n  lastSeen = globalThis.dataLayer[globalThis.dataLayer.length - 1];\n}\n\n/** Push to the dataLayer\n * @param vars - The variables to push\n * @param options - Options for the push\n *   timeout Time before any eventCallback is forcibly called (default 200ms)\n*/\nexport function pushToDataLayer(vars: DataLayerEntry, options?: { timeout?: number }) {\n  if (vars.eventCallback) { //we'll wrap the callback into a promise to ensure it's only invoked once\n    const savecallback = vars.eventCallback;\n    let newcallback: () => void;\n    void (new Promise<void>(resolve => newcallback = resolve)).then(() => savecallback());\n    setTimeout(() => newcallback, options?.timeout || 200);\n  }\n\n  globalThis.dataLayer?.push(vars);\n  showDataLayerUpdates();\n}\n\nfunction collectFormValues(formnode: HTMLFormElement): Record<string, unknown> {\n  const donefields: Record<string, boolean> = {};\n  const outdata: Record<string, unknown> = {};\n\n  const multifields = qSA<HTMLInputElement>(formnode, 'input[type=radio], input[type=checkbox]');\n  for (const multifield of multifields) {\n    if (!multifield.name || donefields[multifield.name])\n      continue; //we did this one\n\n    donefields[multifield.name] = true;\n\n    let idx = 0;\n    const values = [];\n    const labels = [];\n    const checkboxes = multifields.filter(node => node.name === multifield.name);\n\n    for (const node of checkboxes.filter(cbox => cbox.checked)) {\n      const keyname = 'form_' + multifield.name + (idx ? '_' + idx : '');\n      let labelsfornode = node.dataset.gtmTag || qSA(`label[for=\"${CSS.escape(node.id)}\"]`).map(labelnode => labelnode.textContent).filter(labelnode => Boolean(labelnode)).join(' ');\n      labelsfornode = labelsfornode.trim(); //TODO normalize whitespace\n      outdata[keyname] = node.value;\n      outdata[keyname + '_label'] = labelsfornode;\n\n      ++idx;\n      values.push(node.value);\n      labels.push(labelsfornode);\n    }\n\n    if (values.length) {\n      const allkeyname = 'form_' + multifield.name + '_all';\n      outdata[allkeyname] = values.join(';');\n      outdata[allkeyname + '_label'] = labels.join(';');\n    }\n  }\n\n  for (const field of formnode.querySelectorAll<HTMLSelectElement | HTMLInputElement>('input:not([type=radio]):not([type=checkbox]),select,textarea')) {\n    if (!field.name || donefields[field.name])\n      continue;\n\n    donefields[field.name] = true;\n\n    const val = field.value;\n    outdata['form_' + field.name] = val;\n    if (field.matches('select')) {\n      const opt = (field as HTMLSelectElement).options[(field as HTMLSelectElement).selectedIndex];\n      if (opt)\n        outdata['form_' + field.name + '_label'] = opt.dataset.gtmTag || opt.textContent;\n    }\n  }\n  return outdata;\n}\n\n/** Setup the dataLayer */\nlet didinit: boolean | undefined;\nexport function setupGTM() {\n  if (!didinit) {\n    didinit = true;\n    if (debugFlags.anl)\n      setInterval(showDataLayerUpdates, 100);\n  }\n}\n\n/** Setup dataLayer events for form analytics events\n * @param options - Options for the form analytics setup\n     - `eventPrefix`. Prefix to use. Default is `wh-platform:form_` but existing integrations may (also) require `publisher:form`\n*/\nexport function setupFormAnalyticsForGTM(options?: { eventPrefix: string }): void {\n  setupGTM(); //ensurse the GTM basics are installed\n\n  addEventListener(\"wh:form-analytics\", (e: FormAnalyticsEvent) => {\n    //we use the same prefixing as pxl events would\n    const entry: DataLayerEntry = {\n      event: `${options?.eventPrefix || \"platform:form_\"}${e.detail.event}`\n    };\n\n    for (const [key, val] of Object.entries(e.detail))\n      if (key !== \"event\" && [\"string\", \"number\", \"boolean\"].includes(typeof val))\n        entry[`formmeta_${key}`] = val;\n\n    const form = e.target as HTMLFormElement | undefined;\n    if (form?.dataset.gtmSubmit) {\n      //When set, we push both the form: variable in gtmSubmit and the current form field avlues\n      Object.assign(entry, JSON.parse(form.dataset.gtmSubmit));\n      Object.assign(entry, collectFormValues(form));\n    }\n\n    pushToDataLayer(entry);\n  });\n}\n\nfunction processClickDataLayerTags(event: MouseEvent) {\n  const entry: Record<string, unknown> = {};\n\n  for (let node = event.target as HTMLElement | undefined | null; node; node = node?.parentElement)\n    for (const attr of node.attributes)\n      if (attr.nodeName.startsWith(\"data-wh-datalayer-onclick-\")) {\n        const key = attr.nodeName.substring(26);\n        if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n          entry[key] = attr.nodeValue || \"\";\n      } else if (attr.nodeName === \"data-wh-datalayer-onclick\") { //JSON setter\n        const data = JSON.parse(attr.nodeValue!);\n        for (const [key, value] of Object.entries(data))\n          if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n            entry[key] = value;\n      }\n\n  if (Object.keys(entry).length)\n    pushToDataLayer(entry as DataLayerEntry);\n}\n\n/** Setup support for data-wh-datalayer-onclick-xxx=\"yyy\" attributes. When clicking an element with these attributes the JSON from the attribute and all parents are merged together and pushed to the dataLayer  */\nexport function setupDataLayerTags() {\n  //we capture so we can also simply set variables for any existing GTM handlers\n  window.addEventListener(\"click\", processClickDataLayerTags, { capture: true });\n}\n\n/** Get the current variables in the GTM datalayer\n * @param win - The window to get the dataLayer from (default: current window)\n * @return The current variables in the GTM datalayer, merged together from all entries. Note that this is a snapshot and won't update as the dataLayer changes\n*/\nexport function getCurrentDataLayerVariables<DataLayerFormat extends object = Record<string, unknown>>(win: Window = window): DataLayerFormat {\n  const state: DataLayerFormat = {} as DataLayerFormat;\n  if (win.dataLayer)\n    win.dataLayer.forEach(entry =>\n      Object.assign(state, structuredClone(omit(entry, [\"event\", \"eventCallback\", \"gtm.uniqueEventId\"]))));\n  return state;\n}\n","/* To verify tree shaking viability, try:\n   whcd\n   cd whtree\n   echo 'import \"@webhare/frontend\"' | node_modules/.bin/esbuild --loader:.css=empty --tsconfig=tsconfig.json --bundle --minify\n*/\n\n// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/frontend\" {\n}\n\nimport { onDomReady } from \"@webhare/dompack\";\nexport { frontendConfig, getFrontendData, getSiteRoot } from \"./init\";\nexport { startSSOLogin, login, setupWRDAuth, isLoggedIn, logout, getUserInfo, setupWebHareSSOTrigger } from \"./auth\";\nexport { loadAssetPack, setupAuthorMode, type AuthorModeOptions } from \"./authormode\";\nexport { setPxlOptions, sendPxl, getPxlUserId, getPxlSessionId, setupFormAnalytics, type PxlData } from \"./pxl\";\nexport { getRemoteIPAddress, getGeoIPInfo, type GetIPInfoOptions, type GeoIPInfoResult } from \"./analytics\";\nexport { setupGTM, setupFormAnalyticsForGTM, pushToDataLayer, setupDataLayerTags, getCurrentDataLayerVariables } from \"./gtm\";\nexport { setupLinksInNewWindow, type LinkOpenOptions } from \"./linkhandler\";\n\nexport type * from \"./gtm-types\";\n\n// we shouldn't deprecate navigateTo exported from frontend. in fact it makes more sense to export it from frontend than env as it's browser-only\nexport { navigateTo } from \"@webhare/env\";\n\n/** Registry for data we receive from the backend */\nexport interface FrontendDataTypes {\n}\n\n/** Registry for expected PXL formats */\nexport interface PxlDataTypes {\n}\n\n/** Test whether the current page is being iframed in the WebHare test framework */\nexport function isInTestFramework(): boolean {\n  if (window.top !== window) { //in a frame\n    try {\n      if ((window.top as { __testframework?: unknown })?.__testframework)\n        return true;//we're inside a testframe, pretend to be the parent\n    } catch (ignore) {\n    }\n  }\n  return false;\n}\n\nfunction postRenderChecks() {\n  const log = document.getElementById(\"wh-console-log\");\n  if (log) {\n    const logtext = atob(log.textContent || \"\");\n    console.group(\"[etr] Server-side console output\");\n    console.log(logtext);\n    console.groupEnd();\n  }\n}\n\nonDomReady(postRenderChecks);\n","<template>\n  <template v-if=\"isLoggedIn\">\n    <div class=\"layout\">\n      <TopNav :active-view=\"view\" />\n\n      <main class=\"layout__main\">\n        <div class=\"layout__content\" :class=\"{ 'layout__content--wide': view === 'verkennen' }\">\n          <router-view />\n        </div>\n\n        <nav class=\"layout__tabbar\" aria-label=\"Hoofdnavigatie\">\n          <a\n            class=\"layout__tab\"\n            :class=\"{ 'layout__tab--active': view === 'home' }\"\n            :href=\"urlHome()\"\n            aria-label=\"Home\"\n          >\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1v-9.5z\"/>\n            </svg>\n            <span>Home</span>\n          </a>\n          <a\n            class=\"layout__tab\"\n            :class=\"{ 'layout__tab--active': view === 'verkennen' }\"\n            :href=\"urlVerkennen()\"\n            aria-label=\"Verkennen\"\n          >\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\"/>\n            </svg>\n            <span>Verkennen</span>\n          </a>\n          <a\n            class=\"layout__tab\"\n            :class=\"{ 'layout__tab--active': view === 'planning' }\"\n            :href=\"urlPlanning()\"\n            aria-label=\"Mijn planning\"\n          >\n            <span class=\"layout__tab-icon-wrap\">\n              <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                <path d=\"M9 11l3 3L22 4\"/>\n                <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"/>\n              </svg>\n              <span v-if=\"listCount > 0\" class=\"layout__tab-badge\">{{ listCount }}</span>\n            </span>\n            <span>Planning</span>\n          </a>\n          <a\n            class=\"layout__tab\"\n            :class=\"{ 'layout__tab--active': view === 'beoordelingen' }\"\n            :href=\"urlBeoordelingen()\"\n            aria-label=\"Beoordelingen\"\n          >\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\"/>\n              <rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1\"/>\n              <path d=\"m9 14 2 2 4-4\"/>\n            </svg>\n            <span>Beoordeeld</span>\n          </a>\n          <a\n            class=\"layout__tab\"\n            :class=\"{ 'layout__tab--active': view === 'account' }\"\n            :href=\"urlAccount()\"\n            aria-label=\"Account\"\n          >\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <circle cx=\"12\" cy=\"8\" r=\"4\"/>\n              <path d=\"M4 21a8 8 0 0 1 16 0\"/>\n            </svg>\n            <span>Account</span>\n          </a>\n        </nav>\n      </main>\n    </div>\n  </template>\n  <LoginForm v-else />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport LoginForm from \"./components/LoginForm.vue\";\nimport TopNav from \"./components/TopNav.vue\";\nimport { useWrdAuthState } from \"./lib/useWrdAuthState\";\nimport { usePersonalList } from \"./lib/personalList\";\nimport { urlAccount, urlBeoordelingen, urlHome, urlPlanning, urlVerkennen } from \"./lib/urls\";\n\ntype View = \"home\" | \"verkennen\" | \"detail\" | \"planning\" | \"beoordelingen\" | \"account\";\n\nconst { isLoggedIn } = useWrdAuthState();\nconst { count: listCount } = usePersonalList();\nconst route = useRoute();\nconst router = useRouter();\n\n// De auth-subschermen (/wachtwoord-vergeten, /wachtwoord-herstellen) zijn alleen\n// voor uitgelogde bezoekers. Stuur een ingelogde gebruiker die er via een\n// deeplink belandt naar home. immediate + reactief, zodat ook de class-flip\n// nadat setupWRDAuth heeft gedraaid wordt opgevangen.\nwatch(\n  [isLoggedIn, () => route.name],\n  ([loggedIn, name]) => {\n    if (loggedIn && (name === \"forgot-password\" || name === \"reset-password\"))\n      void router.replace({ name: \"home\" });\n  },\n  { immediate: true },\n);\n\nconst view = computed<View>(() => {\n  switch (route.name) {\n    case \"location\": return \"detail\";\n    case \"verkennen\": return \"verkennen\";\n    case \"planning\": return \"planning\";\n    case \"beoordelingen\": return \"beoordelingen\";\n    case \"account\": return \"account\";\n    default: return \"home\";\n  }\n});\n</script>\n\n<style scoped>\n.layout {\n  /* Height of the desktop top bar; 0 on mobile (top bar hidden). Used to size\n     the full-bleed Verkennen pane to the remaining viewport. */\n  --topnav-h: 0px;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  min-height: 100dvh;\n  padding-top: env(safe-area-inset-top);\n  padding-left: env(safe-area-inset-left);\n  padding-right: env(safe-area-inset-right);\n}\n\n.layout__main {\n  flex: 1;\n  min-width: 0;\n  min-height: 0;\n  display: flex;\n  flex-direction: column;\n}\n\n.layout__content {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  max-width: 720px;\n  margin: 0 auto;\n}\n\n/* Verkennen is a full-bleed two-pane app screen — break out of the centered,\n   max-width content column the other views use. It also gets an explicit\n   viewport height so its inner list scrolls and the map fills, instead of the\n   whole document growing with the list (the left sidebar used to give the main\n   column a definite height; the top bar layout no longer does). */\n.layout__content--wide {\n  /* flex:none so the explicit height below is honored — the base rule's\n     flex:1 (flex-basis:0%) would otherwise override it in the flex column. */\n  flex: none;\n  max-width: none;\n  margin: 0;\n  height: calc(100dvh - env(safe-area-inset-top) - var(--topnav-h));\n  overflow: hidden;\n}\n\n/* ===========================================================\n   Bottom tabbar — alleen op mobile/tablet\n   =========================================================== */\n.layout__tabbar {\n  position: fixed;\n  bottom: calc(14px + env(safe-area-inset-bottom));\n  left: calc(14px + env(safe-area-inset-left));\n  right: calc(14px + env(safe-area-inset-right));\n  z-index: 40;\n  display: flex;\n  justify-content: space-around;\n  gap: 4px;\n  padding: 10px 8px;\n  border: 1px solid var(--snl-line);\n  border-radius: 28px;\n  background: var(--snl-glass-strong);\n  backdrop-filter: blur(20px) saturate(160%);\n  -webkit-backdrop-filter: blur(20px) saturate(160%);\n  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5);\n}\n.layout__tab {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 3px;\n  flex: 1;\n  padding: 6px 8px;\n  border-radius: 18px;\n  text-decoration: none;\n  color: var(--snl-fg-muted);\n  transition: background 0.15s, color 0.15s;\n}\n.layout__tab:hover { color: var(--snl-fg); }\n.layout__tab--active {\n  color: var(--snl-mint);\n  background: rgba(143, 204, 177, 0.12);\n}\n.layout__tab span:not(.layout__tab-icon-wrap):not(.layout__tab-badge) {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: 0.02em;\n}\n.layout__tab-icon-wrap {\n  position: relative;\n  display: inline-flex;\n}\n.layout__tab-badge {\n  position: absolute;\n  top: -6px;\n  right: -8px;\n  min-width: 16px;\n  height: 16px;\n  padding: 0 4px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 99px;\n  background: var(--snl-koraal);\n  color: #fff;\n  font-size: 9.5px;\n  font-weight: 800;\n  font-variant-numeric: tabular-nums;\n  border: 2px solid var(--snl-bg);\n}\n\n/* Geef de content-area onderaan ruimte voor de tabbar zodat hij niets afdekt */\n@media (max-width: 959px) {\n  .layout__content {\n    padding-bottom: calc(80px + env(safe-area-inset-bottom));\n  }\n  /* Verkennen vult zelf het scherm (kaart + FAB zweven boven de tabbar). */\n  .layout__content--wide { padding-bottom: 0; }\n}\n\n/* Desktop: geen bottom-tabbar, de bovenbalk (TopNav) neemt navigatie over */\n@media (min-width: 960px) {\n  .layout { --topnav-h: 56px; }\n  .layout__tabbar { display: none; }\n  .layout__content { padding: 24px 32px; max-width: 880px; }\n  .layout__content--wide { padding: 0; max-width: none; }\n}\n</style>\n","<template>\n  <div class=\"login\">\n    <div class=\"login__topbar\">\n      <ThemeToggle />\n    </div>\n\n    <button type=\"button\" class=\"login__brand\" @click=\"goLogin\" aria-label=\"Terug naar inloggen\">\n      <img\n        :src=\"logoUrl\"\n        alt=\"Statiegeld Nederland\"\n        class=\"login__logo\"\n      />\n      <span class=\"login__tagline\">SNL Scout-app</span>\n    </button>\n\n    <!-- Login. Kept mounted with v-show (NOT v-if) so setupWRDAuth's one-shot\n         scan keeps the form wired even after toggling to forgot/reset. -->\n    <form\n      v-show=\"mode === 'login'\"\n      class=\"wh-wrdauth__loginform login-form\"\n      method=\"post\"\n      action=\"javascript:\"\n      @submit=\"onLoginSubmit\"\n    >\n      <h2 class=\"login-form__title\">Inloggen</h2>\n      <p class=\"login-form__subtitle\">Log in om feedback in te sturen.</p>\n\n      <p v-if=\"loginNotice\" class=\"login-form__notice\" role=\"status\">{{ loginNotice }}</p>\n      <FieldError v-if=\"errorMessage\">{{ errorMessage }}</FieldError>\n\n      <label class=\"login-form__field\">\n        <span class=\"login-form__label\">E-mail</span>\n        <input\n          ref=\"loginInput\"\n          v-model=\"email\"\n          name=\"login\"\n          type=\"email\"\n          required\n          autocomplete=\"email\"\n          class=\"login-form__input\"\n        />\n      </label>\n\n      <label class=\"login-form__field\">\n        <span class=\"login-form__label\">Wachtwoord</span>\n        <PasswordInput\n          v-model=\"loginPassword\"\n          v-model:visible=\"loginPasswordVisible\"\n          name=\"password\"\n          autocomplete=\"current-password\"\n          :required=\"true\"\n        />\n      </label>\n\n      <label class=\"login-form__persist\">\n        <input name=\"persistent\" type=\"checkbox\" class=\"snl-checkbox\" v-model=\"rememberMe\" />\n        <span>Ingelogd blijven</span>\n      </label>\n\n      <button type=\"submit\" class=\"login-form__submit\" :disabled=\"loggingIn\" :aria-busy=\"loggingIn\">\n        <span v-if=\"loggingIn\" class=\"login-form__spinner\" aria-hidden=\"true\"></span>\n        {{ loggingIn ? \"Bezig met inloggen…\" : \"Inloggen\" }}\n      </button>\n\n      <button type=\"button\" class=\"login-form__forgot\" @click=\"goForgot\">\n        Wachtwoord vergeten?\n      </button>\n\n      <p v-if=\"prefill.login\" class=\"login-form__hint\">\n        Developmentmodus: ingevuld als <code>{{ prefill.login }}</code>\n      </p>\n    </form>\n\n    <!-- Forgot: request a reset code by email. Plain form (no wh-wrdauth class). -->\n    <form v-if=\"mode === 'forgot'\" class=\"login-form\" @submit.prevent=\"onRequestCode\">\n      <h2 class=\"login-form__title\">Wachtwoord vergeten</h2>\n      <p class=\"login-form__subtitle\">\n        Vul je e-mailadres in. Je ontvangt een code om een nieuw wachtwoord in te stellen.\n      </p>\n\n      <label class=\"login-form__field\">\n        <span class=\"login-form__label\">E-mail</span>\n        <input\n          v-model=\"email\"\n          type=\"email\"\n          required\n          autocomplete=\"email\"\n          class=\"login-form__input\"\n        />\n      </label>\n\n      <button type=\"submit\" class=\"login-form__submit\" :disabled=\"busy\">\n        {{ busy ? \"Versturen…\" : \"Stuur code\" }}\n      </button>\n\n      <button type=\"button\" class=\"login-form__forgot\" @click=\"goLogin\">Terug naar inloggen</button>\n\n      <FieldError v-if=\"flowError\">{{ flowError }}</FieldError>\n    </form>\n\n    <!-- Reset: enter the emailed code + a new password. -->\n    <form v-if=\"mode === 'reset'\" class=\"login-form\" @submit.prevent=\"onResetPassword\">\n      <h2 class=\"login-form__title\">Nieuw wachtwoord</h2>\n      <p v-if=\"flowNotice\" class=\"login-form__notice\" role=\"status\">{{ flowNotice }}</p>\n      <p class=\"login-form__subtitle\">\n        Vul de code uit de e-mail in en kies een nieuw wachtwoord (minimaal 8 tekens).\n      </p>\n\n      <div class=\"login-form__field\">\n        <span class=\"login-form__label\">Code</span>\n        <CodeInput\n          v-model=\"code\"\n          :length=\"6\"\n          :disabled=\"busy\"\n          :error=\"!!fieldErrors.code\"\n          :valid=\"codeValid\"\n          @complete=\"onCodeComplete\"\n          @blur=\"onCodeBlur\"\n        />\n        <div class=\"login-form__msg\">\n          <FieldError v-if=\"fieldErrors.code\">{{ fieldErrors.code }}</FieldError>\n          <span v-else-if=\"codeValid\" class=\"login-form__okhint\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 6 9 17l-5-5\"/></svg>\n            Code klopt\n          </span>\n        </div>\n      </div>\n\n      <label class=\"login-form__field\">\n        <span class=\"login-form__label\">Nieuw wachtwoord</span>\n        <PasswordInput\n          ref=\"newPasswordRef\"\n          v-model=\"newPassword\"\n          v-model:visible=\"showPassword\"\n          autocomplete=\"new-password\"\n          :error=\"!!fieldErrors.newPassword\"\n        />\n        <div class=\"login-form__msg\">\n          <FieldError v-if=\"fieldErrors.newPassword\">{{ fieldErrors.newPassword }}</FieldError>\n          <div v-else-if=\"newPassword\" class=\"pwstrength\" :data-score=\"strength.score\">\n            <span class=\"pwstrength__bars\" aria-hidden=\"true\">\n              <span\n                v-for=\"n in 4\"\n                :key=\"n\"\n                class=\"pwstrength__bar\"\n                :class=\"{ 'pwstrength__bar--on': n <= strength.score }\"\n              ></span>\n            </span>\n            <span class=\"pwstrength__label\">{{ strength.label }}</span>\n          </div>\n          <span v-else class=\"login-form__minhint\">Minimaal {{ MIN_PASSWORD_LENGTH }} tekens.</span>\n        </div>\n      </label>\n\n      <label class=\"login-form__field\">\n        <span class=\"login-form__label\">Herhaal wachtwoord</span>\n        <PasswordInput\n          v-model=\"newPassword2\"\n          v-model:visible=\"showPassword2\"\n          autocomplete=\"new-password\"\n          :disabled=\"showPassword\"\n          :error=\"!!fieldErrors.newPassword2\"\n        />\n        <div class=\"login-form__msg\">\n          <FieldError v-if=\"fieldErrors.newPassword2\">{{ fieldErrors.newPassword2 }}</FieldError>\n          <span v-else-if=\"showPassword\" class=\"login-form__minhint\">Niet nodig — je wachtwoord is zichtbaar.</span>\n        </div>\n      </label>\n\n      <button type=\"submit\" class=\"login-form__submit\" :disabled=\"busy\">\n        {{ busy ? \"Bezig…\" : \"Wachtwoord wijzigen\" }}\n      </button>\n\n      <button type=\"button\" class=\"login-form__forgot\" @click=\"onRequestCode\">\n        Geen code ontvangen? Opnieuw versturen\n      </button>\n      <button type=\"button\" class=\"login-form__forgot\" @click=\"goLogin\">Terug naar inloggen</button>\n\n      <p v-if=\"devCode\" class=\"login-form__hint\">\n        Developmentmodus: code is <code>{{ devCode }}</code>\n      </p>\n      <FieldError v-if=\"flowError\">{{ flowError }}</FieldError>\n    </form>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, reactive, ref, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport logoUrl from \"../assets/statiegeld-logo.svg\";\nimport ThemeToggle from \"./ThemeToggle.vue\";\nimport CodeInput from \"./CodeInput.vue\";\nimport PasswordInput from \"./PasswordInput.vue\";\nimport FieldError from \"./FieldError.vue\";\nimport { requestPasswordReset, resetPassword, checkResetCode } from \"../lib/api\";\nimport { scorePassword, MIN_PASSWORD_LENGTH } from \"../lib/passwordStrength\";\n\ntype Mode = \"login\" | \"forgot\" | \"reset\";\n\n// De modus wordt afgeleid uit de route zodat elk subscherm een eigen URL heeft\n// (deeplinkbaar) en browser-back door de flow login → vergeten → herstellen\n// loopt. Navigeren gebeurt via de router (goForgot/goLogin/…), nooit door hier\n// lokaal een ref te zetten.\nconst route = useRoute();\nconst router = useRouter();\nconst mode = computed<Mode>(() => {\n  switch (route.name) {\n    case \"forgot-password\": return \"forgot\";\n    case \"reset-password\": return \"reset\";\n    default: return \"login\";\n  }\n});\n\n// Login error (from the wh:wrdauth-loginfailed event) + a success notice shown\n// on the login panel after a completed password reset.\nconst errorMessage = ref(\"\");\nconst loginNotice = ref(\"\");\n\n// Login-attempt UX. setupWRDAuth does the actual auth on the same submit; these\n// only drive the button's loading state. Without this, a repeated wrong password\n// sets `errorMessage` to the SAME string, so the red box never changes and the\n// user can't tell the retry even registered. We clear the error on submit, show\n// a loader for at least MIN_LOGIN_BUSY_MS, then (re-)show the failure — so a\n// retry visibly \"happens\".\nconst loggingIn = ref(false);\nconst MIN_LOGIN_BUSY_MS = 500;\n// Safety net: if the auth request hangs/drops and never fires the failed event,\n// re-enable the button instead of leaving it stuck on \"Bezig…\" forever.\nconst LOGIN_SAFETY_MS = 12000;\nlet loginSubmittedAt = 0;\nlet failTimer: number | null = null;\nlet safetyTimer: number | null = null;\n\n// On development (localhost) pre-fill with the test user created by\n// scripts/create-testuser.ts. Production pages stay blank.\nconst isDev = /^(localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0)$/.test(window.location.hostname);\nconst prefill = isDev\n  ? { login: \"test@example.com\", password: \"test1234\" }\n  : { login: \"\", password: \"\" };\n\n// Shared across login → forgot → reset, and persisted so a returning user finds\n// their email prefilled. On dev the local prefill (test@example.com) overrides\n// the persisted value — we fill it in ourselves there. v-model on the login\n// field keeps the DOM in sync for setupWRDAuth.\nconst EMAIL_KEY = \"snl-scout-login-email\";\nfunction readStoredEmail(): string {\n  try {\n    return localStorage.getItem(EMAIL_KEY) ?? \"\";\n  } catch {\n    return \"\";\n  }\n}\nconst email = ref(isDev ? prefill.login : readStoredEmail());\nwatch(email, (value) => {\n  if (isDev) return; // dev prefills its own email — don't persist over it\n  try {\n    localStorage.setItem(EMAIL_KEY, value.trim());\n  } catch {\n    // Private mode / storage disabled — preference just won't persist.\n  }\n});\nconst loginInput = ref<HTMLInputElement | null>(null);\n// Login password is v-model'd through PasswordInput (for the reveal toggle).\n// setupWRDAuth still reads the live `input[name=password]` value at submit.\nconst loginPassword = ref(prefill.password);\nconst loginPasswordVisible = ref(false);\n\n// \"Ingelogd blijven\" preference, persisted across visits. v-model keeps the\n// DOM checkbox in sync, so setupWRDAuth still reads the right `.checked` value\n// at submit. Reading/writing localStorage is guarded for private-mode browsers.\nconst REMEMBER_ME_KEY = \"snl-scout-remember-me\";\nfunction readRememberMe(): boolean {\n  try {\n    return localStorage.getItem(REMEMBER_ME_KEY) === \"true\";\n  } catch {\n    return false;\n  }\n}\nconst rememberMe = ref(readRememberMe());\nwatch(rememberMe, (on) => {\n  try {\n    localStorage.setItem(REMEMBER_ME_KEY, String(on));\n  } catch {\n    // Private mode / storage disabled — preference just won't persist.\n  }\n});\n\n// Forgot/reset flow state.\nconst code = ref(\"\");\nconst newPassword = ref(\"\");\nconst newPassword2 = ref(\"\");\nconst busy = ref(false);\nconst flowError = ref(\"\");\nconst flowNotice = ref(\"\");\nconst devCode = ref(\"\");\nconst newPasswordRef = ref<{ focus: () => void } | null>(null);\n\n// Reveal-password toggle for the first field. When on, the user can read what\n// they typed, so the \"herhaal wachtwoord\" field is disabled + not required.\nconst showPassword = ref(false);\n// Independent reveal toggle for the confirm field (only usable while the first\n// field is hidden — otherwise the confirm field is disabled).\nconst showPassword2 = ref(false);\n\nconst strength = computed(() => scorePassword(newPassword.value));\n\n// Per-field validation messages. The submit button stays enabled (only disabled\n// while busy) — on submit we populate these so the user is told exactly what's\n// missing, instead of guessing why a disabled button won't respond.\nconst fieldErrors = reactive({ code: \"\", newPassword: \"\", newPassword2: \"\" });\n\n// Server-verified code state, for immediate feedback (green \"Code klopt\").\nconst codeValid = ref(false);\nconst lastCheckedCode = ref(\"\");\n\n// Clear a field's error as soon as the user edits it. Editing the code also\n// drops any earlier verified state until it's re-checked.\nwatch(code, () => { fieldErrors.code = \"\"; codeValid.value = false; lastCheckedCode.value = \"\"; });\nwatch(newPassword, () => { fieldErrors.newPassword = \"\"; });\nwatch(newPassword2, () => { fieldErrors.newPassword2 = \"\"; });\n\n// Wisselen van subscherm (ook via browser back/forward) mag geen oude\n// foutmelding van het vorige scherm laten staan. Notices (groen) blijven wél —\n// die zijn juist bedoeld om mee te reizen (bv. \"Als dit e-mailadres bekend is…\").\n// En: het herstelscherm heeft geen e-mailveld, dus direct deeplinken naar\n// /wachtwoord-herstellen zonder bekend e-mailadres kan niet — stuur dan terug\n// naar /wachtwoord-vergeten. immediate, zodat dat ook bij een verse deeplink geldt.\nwatch(mode, (m) => {\n  flowError.value = \"\";\n  fieldErrors.code = \"\";\n  fieldErrors.newPassword = \"\";\n  fieldErrors.newPassword2 = \"\";\n  if (m === \"reset\" && !email.value.trim()) void router.replace({ name: \"forgot-password\" });\n}, { immediate: true });\n\n// Revealing the password makes the confirm field moot — clear it + its error.\nwatch(showPassword, (on) => {\n  if (on) {\n    newPassword2.value = \"\";\n    fieldErrors.newPassword2 = \"\";\n    showPassword2.value = false;\n  }\n});\n\n// Verify the code server-side (HMAC check, no password needed) for immediate\n// feedback. Only runs once 6 digits are entered. Sets codeValid / the code\n// error; network hiccups fail soft (the final submit re-checks anyway).\nasync function checkCode() {\n  if (code.value.length !== 6) return;\n  if (code.value === lastCheckedCode.value) return; // already checked this exact code\n  lastCheckedCode.value = code.value;\n  try {\n    const { valid } = await checkResetCode(email.value.trim(), code.value);\n    codeValid.value = valid;\n    fieldErrors.code = valid ? \"\" : \"Ongeldige of verlopen code.\";\n  } catch {\n    lastCheckedCode.value = \"\"; // allow a retry on the next blur/complete\n  }\n}\n\n// All 6 digits in: verify, and only jump to the password field once valid.\nasync function onCodeComplete() {\n  await checkCode();\n  if (codeValid.value) void nextTick(() => newPasswordRef.value?.focus());\n}\n\n// Tabbed/clicked away from the code group: verify if complete, else nudge.\nfunction onCodeBlur() {\n  if (code.value.length === 0) return;\n  if (code.value.length < 6) {\n    fieldErrors.code = \"Vul de 6-cijferige code in.\";\n    return;\n  }\n  void checkCode();\n}\n\nfunction goForgot() {\n  // Carry over whatever the user already typed in the login field.\n  if (loginInput.value?.value) email.value = loginInput.value.value;\n  clearLoginTimers();\n  loggingIn.value = false;\n  flowError.value = \"\";\n  flowNotice.value = \"\";\n  devCode.value = \"\";\n  loginNotice.value = \"\";\n  void router.push({ name: \"forgot-password\" });\n}\n\nfunction goLogin() {\n  clearLoginTimers();\n  loggingIn.value = false;\n  flowError.value = \"\";\n  flowNotice.value = \"\";\n  void router.push({ name: \"home\" });\n}\n\nasync function onRequestCode() {\n  flowError.value = \"\";\n  flowNotice.value = \"\";\n  devCode.value = \"\";\n  const target = email.value.trim();\n  if (!target) {\n    flowError.value = \"Vul je e-mailadres in.\";\n    return;\n  }\n  busy.value = true;\n  try {\n    const res = await requestPasswordReset(target);\n    if (!res.success) {\n      flowError.value = res.error || \"Er ging iets mis. Probeer het opnieuw.\";\n      return;\n    }\n    // Deliberately vague: we don't reveal whether the email exists.\n    flowNotice.value = \"Als dit e-mailadres bij ons bekend is, ontvang je zo een code.\";\n    if (res.code) devCode.value = res.code; // dev convenience only\n    void router.push({ name: \"reset-password\" });\n  } catch {\n    flowError.value = \"Er ging iets mis. Probeer het later opnieuw.\";\n  } finally {\n    busy.value = false;\n  }\n}\n\nasync function onResetPassword() {\n  flowError.value = \"\";\n  fieldErrors.code = \"\";\n  fieldErrors.newPassword = \"\";\n  fieldErrors.newPassword2 = \"\";\n\n  const target = email.value.trim();\n  const enteredCode = code.value.trim();\n\n  // Validate on submit and report per field — don't gate the button.\n  if (enteredCode.length !== 6) {\n    fieldErrors.code = \"Vul de 6-cijferige code in.\";\n  }\n  if (newPassword.value.length < MIN_PASSWORD_LENGTH) {\n    fieldErrors.newPassword = `Minimaal ${MIN_PASSWORD_LENGTH} tekens.`;\n  }\n  // Only require the confirmation when the password isn't revealed.\n  if (!showPassword.value) {\n    if (!newPassword2.value) {\n      fieldErrors.newPassword2 = \"Herhaal je wachtwoord.\";\n    } else if (newPassword.value !== newPassword2.value) {\n      fieldErrors.newPassword2 = \"De wachtwoorden komen niet overeen.\";\n    }\n  }\n  if (fieldErrors.code || fieldErrors.newPassword || fieldErrors.newPassword2) {\n    if (fieldErrors.newPassword) newPasswordRef.value?.focus();\n    return;\n  }\n\n  busy.value = true;\n  try {\n    const res = await resetPassword({ email: target, code: enteredCode, newPassword: newPassword.value });\n    if (!res.success) {\n      const msg = res.error || \"Wachtwoord wijzigen mislukte. Probeer het opnieuw.\";\n      // A bad/expired code is a code-field problem; everything else is general.\n      if (/code/i.test(msg)) fieldErrors.code = msg;\n      else flowError.value = msg;\n      return;\n    }\n    // Success → back to login (prefilled) with a confirmation. `replace` zodat\n    // browser-back niet terug naar het (afgeronde) herstelscherm gaat.\n    code.value = \"\";\n    newPassword.value = \"\";\n    newPassword2.value = \"\";\n    devCode.value = \"\";\n    flowNotice.value = \"\";\n    errorMessage.value = \"\";\n    loginNotice.value = \"Je wachtwoord is gewijzigd. Log in met je nieuwe wachtwoord.\";\n    void router.replace({ name: \"home\" });\n  } catch {\n    flowError.value = \"Er ging iets mis. Probeer het later opnieuw.\";\n  } finally {\n    busy.value = false;\n  }\n}\n\nfunction clearLoginTimers() {\n  if (failTimer !== null) { window.clearTimeout(failTimer); failTimer = null; }\n  if (safetyTimer !== null) { window.clearTimeout(safetyTimer); safetyTimer = null; }\n}\n\n// \"Inloggen\" pressed (button click or Enter). setupWRDAuth handles the real auth\n// on this same submit — do NOT preventDefault, it needs the event to fire.\nfunction onLoginSubmit() {\n  clearLoginTimers();\n  errorMessage.value = \"\"; // drop the previous error so a repeat failure reads as new\n  loginNotice.value = \"\"; // and the \"wachtwoord gewijzigd\" notice once they start logging in\n  loggingIn.value = true;\n  loginSubmittedAt = Date.now();\n  safetyTimer = window.setTimeout(() => {\n    safetyTimer = null;\n    if (!loggingIn.value) return;\n    loggingIn.value = false;\n    errorMessage.value = \"Inloggen duurt te lang. Controleer je verbinding en probeer het opnieuw.\";\n  }, LOGIN_SAFETY_MS);\n}\n\nfunction onLoginFailed(evt: Event) {\n  evt.preventDefault();\n  const detail = (evt as CustomEvent<{ message?: string }>).detail;\n  const message = detail?.message || \"Inloggen mislukt. Controleer je e-mail en wachtwoord.\";\n  // Keep the loader up for at least MIN_LOGIN_BUSY_MS so even an instant rejection\n  // registers as a fresh attempt, then surface the (possibly identical) error.\n  const wait = Math.max(0, MIN_LOGIN_BUSY_MS - (Date.now() - loginSubmittedAt));\n  clearLoginTimers();\n  failTimer = window.setTimeout(() => {\n    failTimer = null;\n    errorMessage.value = message;\n    loggingIn.value = false;\n  }, wait);\n}\n\nonMounted(() => {\n  window.addEventListener(\"wh:wrdauth-loginfailed\", onLoginFailed);\n});\n\nonBeforeUnmount(() => {\n  window.removeEventListener(\"wh:wrdauth-loginfailed\", onLoginFailed);\n  clearLoginTimers();\n});\n</script>\n\n<style scoped>\n.login {\n  flex: 1;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n  justify-content: center;\n  gap: 28px;\n  padding: calc(32px + env(safe-area-inset-top)) calc(20px + env(safe-area-inset-right)) calc(32px + env(safe-area-inset-bottom)) calc(20px + env(safe-area-inset-left));\n  width: 100%;\n  max-width: 600px;\n  margin: 0 auto;\n}\n.login__topbar {\n  position: absolute;\n  top: calc(16px + env(safe-area-inset-top));\n  right: calc(16px + env(safe-area-inset-right));\n  z-index: 2;\n}\n\n.login__brand {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 0;\n  /* Acts as a \"home\" button — back to the login form from forgot/reset. */\n  border: 0;\n  background: transparent;\n  cursor: pointer;\n  transition: opacity 0.12s var(--ease-out);\n}\n@media (hover: hover) {\n  .login__brand:hover { opacity: 0.8; }\n}\n.login__logo {\n  height: 42px;\n  width: auto;\n  max-width: 100%;\n  /* Source SVG uses brand blue + koraal. On dark surfaces we invert + hue\n     rotate to mint/cream tones for contrast; in light mode we leave the\n     brand colors untouched. Matches the SNL UI-kit preview treatment. */\n  filter: var(--snl-logo-filter, invert(1) hue-rotate(180deg) brightness(1.1));\n  transition: filter 0.25s var(--ease-out);\n}\n[data-theme=\"light\"] .login__logo {\n  filter: none;\n}\n.login__tagline {\n  margin: 0;\n  font-size: 11px;\n  letter-spacing: 0.18em;\n  text-transform: uppercase;\n  color: var(--snl-fg-subtle);\n  font-weight: 600;\n}\n\n.login-form {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n  padding: 24px 20px;\n  border: 1px solid var(--snl-line);\n  border-radius: 24px;\n  background: var(--snl-surface);\n  color: var(--snl-fg);\n  box-shadow: var(--snl-shadow-card);\n  animation: snl-rise 0.4s var(--ease-spring);\n}\n.login-form__title {\n  margin: 0;\n  font-size: 22px;\n  font-weight: 700;\n  letter-spacing: -0.025em;\n  color: var(--snl-fg);\n}\n.login-form__subtitle {\n  margin: -4px 0 8px 0;\n  font-size: 13.5px;\n  color: var(--snl-fg-muted);\n  line-height: 1.5;\n}\n.login-form__field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n.login-form__label {\n  font-size: 11.5px;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n}\n.login-form__input {\n  height: 48px;\n  padding: 0 14px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  font-size: 15px;\n  outline: none;\n  transition: border-color 0.12s, box-shadow 0.12s;\n}\n.login-form__input::placeholder { color: var(--snl-fg-placeholder); }\n.login-form__input:focus {\n  border-color: var(--snl-mint);\n  box-shadow: 0 0 0 3px rgba(143, 204, 177, 0.2);\n}\n.login-form__persist {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n  user-select: none;\n}\n/* The checkbox itself is styled globally via .snl-checkbox (frontend.scss). */\n.login-form__submit {\n  height: 52px;\n  margin-top: 4px;\n  border: 0;\n  border-radius: 16px;\n  background: var(--snl-koraal);\n  color: #fff;\n  font-size: 15px;\n  font-weight: 700;\n  letter-spacing: -0.01em;\n  cursor: pointer;\n  box-shadow: 0 16px 32px -10px rgba(243, 108, 79, 0.55);\n  transition: transform 0.12s var(--ease-spring), box-shadow 0.12s var(--ease-out), opacity 0.12s;\n}\n.login-form__submit:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 20px 36px -10px rgba(243, 108, 79, 0.65);\n}\n.login-form__submit:active { transform: translateY(0); }\n.login-form__spinner {\n  display: inline-block;\n  width: 16px;\n  height: 16px;\n  margin-right: 8px;\n  vertical-align: -3px;\n  border: 2px solid rgba(255, 255, 255, 0.45);\n  border-top-color: #fff;\n  border-radius: 50%;\n  animation: snl-spin 0.6s linear infinite;\n}\n@keyframes snl-spin {\n  to { transform: rotate(360deg); }\n}\n.login-form__forgot {\n  align-self: center;\n  margin-top: 2px;\n  padding: 4px 8px;\n  border: 0;\n  background: transparent;\n  color: var(--snl-fg-muted);\n  font-size: 13px;\n  font-weight: 600;\n  text-decoration: underline;\n  text-underline-offset: 2px;\n  cursor: pointer;\n  transition: color 0.12s;\n}\n@media (hover: hover) {\n  .login-form__forgot:hover { color: var(--snl-fg); }\n}\n/* Errors render via the shared <FieldError> component (tinted red, distinct\n   from the koraal CTA) — no local error styles needed here. */\n.login-form__notice {\n  margin: 0;\n  padding: 10px 14px;\n  border-radius: 14px;\n  border: 1px solid rgba(143, 204, 177, 0.4);\n  background: rgba(143, 204, 177, 0.1);\n  color: var(--snl-fg);\n  font-size: 13px;\n  line-height: 1.5;\n}\n[data-theme=\"light\"] .login-form__notice { color: var(--snl-fg-muted); }\n.login-form__submit:disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n  transform: none;\n  box-shadow: none;\n}\n/* Reserved slot under a field so a message (error/strength/hint) appearing or\n   disappearing never shifts the layout. The slot keeps a fixed min-height; its\n   single child is taken out of flow (absolute) so it fills the reserved space\n   instead of pushing siblings. Longer (2-line) messages spill into the form's\n   gap below rather than nudging the next field. */\n.login-form__msg {\n  position: relative;\n  min-height: 32px;\n}\n.login-form__msg > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  margin-top: 0;\n}\n.login-form__minhint {\n  font-size: 11.5px;\n  color: var(--snl-fg-subtle);\n}\n.login-form__okhint {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  margin-top: 2px;\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--snl-mint);\n}\n.login-form__minhint--warn {\n  color: var(--snl-koraal);\n}\n\n/* Password strength meter */\n.pwstrength {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin-top: 2px;\n}\n.pwstrength__bars {\n  display: flex;\n  gap: 4px;\n  flex: 1;\n}\n.pwstrength__bar {\n  height: 4px;\n  flex: 1;\n  border-radius: 999px;\n  background: var(--snl-line-strong);\n  transition: background 0.15s;\n}\n.pwstrength__label {\n  font-size: 11.5px;\n  font-weight: 600;\n  min-width: 56px;\n  text-align: right;\n  color: var(--snl-fg-muted);\n}\n.pwstrength[data-score=\"1\"] .pwstrength__bar--on { background: var(--snl-koraal); }\n.pwstrength[data-score=\"2\"] .pwstrength__bar--on { background: var(--snl-golden); }\n.pwstrength[data-score=\"3\"] .pwstrength__bar--on { background: var(--snl-mint); }\n.pwstrength[data-score=\"4\"] .pwstrength__bar--on { background: var(--snl-mint); }\n.pwstrength[data-score=\"1\"] .pwstrength__label { color: var(--snl-koraal); }\n.pwstrength[data-score=\"2\"] .pwstrength__label { color: var(--snl-golden); }\n.pwstrength[data-score=\"3\"] .pwstrength__label { color: var(--snl-mint); }\n.pwstrength[data-score=\"4\"] .pwstrength__label { color: var(--snl-mint); }\n\n.login-form__hint {\n  margin: 0;\n  font-size: 11.5px;\n  color: var(--snl-fg-subtle);\n}\n.login-form__hint code {\n  font-family: var(--font-mono);\n  font-size: 11px;\n  padding: 2px 6px;\n  border-radius: 6px;\n  background: var(--snl-surface-2);\n  color: var(--snl-mint);\n}\n</style>\n","// Theme state: dark | light. Persisted in localStorage; falls back to the\n// system `prefers-color-scheme` preference on first load. `data-theme` on\n// `<html>` drives the CSS variable switching in frontend.scss.\nimport { onBeforeUnmount, onMounted, readonly, ref } from \"vue\";\n\nconst STORAGE_KEY = \"statiegeldnl:feedback:theme\";\nconst ATTR = \"data-theme\";\n\nexport type Theme = \"dark\" | \"light\";\n\nfunction readStored(): Theme | null {\n  try {\n    const v = localStorage.getItem(STORAGE_KEY);\n    return v === \"dark\" || v === \"light\" ? v : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction prefersDark(): boolean {\n  return typeof window !== \"undefined\" && window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n}\n\nfunction resolveInitialTheme(): Theme {\n  return readStored() ?? (prefersDark() ? \"dark\" : \"light\");\n}\n\nfunction apply(theme: Theme) {\n  document.documentElement.setAttribute(ATTR, theme);\n}\n\n// Sync init — call once from frontend.ts before Vue mounts so the first\n// render matches the resolved theme (avoids a flash of default dark).\nexport function initTheme(): void {\n  apply(resolveInitialTheme());\n}\n\nexport function useTheme() {\n  const theme = ref<Theme>((document.documentElement.getAttribute(ATTR) as Theme | null) ?? resolveInitialTheme());\n\n  function setTheme(next: Theme) {\n    theme.value = next;\n    apply(next);\n    try { localStorage.setItem(STORAGE_KEY, next); } catch { /* quota/denied — silent */ }\n  }\n\n  function toggleTheme() {\n    setTheme(theme.value === \"dark\" ? \"light\" : \"dark\");\n  }\n\n  // React to system preference changes only when the user hasn't explicitly\n  // picked a theme yet.\n  const mq = typeof window !== \"undefined\" ? window.matchMedia(\"(prefers-color-scheme: dark)\") : null;\n  function onSystemChange() {\n    if (readStored() !== null) return;\n    const next: Theme = mq?.matches ? \"dark\" : \"light\";\n    theme.value = next;\n    apply(next);\n  }\n\n  onMounted(() => {\n    mq?.addEventListener(\"change\", onSystemChange);\n  });\n  onBeforeUnmount(() => {\n    mq?.removeEventListener(\"change\", onSystemChange);\n  });\n\n  return {\n    theme: readonly(theme),\n    setTheme,\n    toggleTheme,\n  };\n}\n","<template>\n  <button\n    type=\"button\"\n    class=\"theme-toggle\"\n    :class=\"`theme-toggle--${theme}`\"\n    :aria-label=\"theme === 'dark' ? 'Schakel naar licht thema' : 'Schakel naar donker thema'\"\n    :title=\"theme === 'dark' ? 'Licht thema' : 'Donker thema'\"\n    @click=\"toggleTheme\"\n  >\n    <!-- Sun (visible in dark mode — click to go light) -->\n    <svg\n      v-if=\"theme === 'dark'\"\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n    >\n      <circle cx=\"12\" cy=\"12\" r=\"4\" />\n      <path d=\"M12 2v2\" />\n      <path d=\"M12 20v2\" />\n      <path d=\"m4.93 4.93 1.41 1.41\" />\n      <path d=\"m17.66 17.66 1.41 1.41\" />\n      <path d=\"M2 12h2\" />\n      <path d=\"M20 12h2\" />\n      <path d=\"m6.34 17.66-1.41 1.41\" />\n      <path d=\"m19.07 4.93-1.41 1.41\" />\n    </svg>\n    <!-- Moon (visible in light mode — click to go dark) -->\n    <svg\n      v-else\n      width=\"16\"\n      height=\"16\"\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      stroke-width=\"2\"\n      stroke-linecap=\"round\"\n      stroke-linejoin=\"round\"\n      aria-hidden=\"true\"\n    >\n      <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z\" />\n    </svg>\n  </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { useTheme } from \"../lib/useTheme\";\n\nconst { theme, toggleTheme } = useTheme();\n</script>\n\n<style scoped>\n.theme-toggle {\n  display: grid;\n  place-items: center;\n  width: 34px;\n  height: 34px;\n  flex-shrink: 0;\n  border-radius: 99px;\n  border: 1px solid var(--snl-line);\n  background: var(--snl-glass);\n  backdrop-filter: blur(12px) saturate(140%);\n  -webkit-backdrop-filter: blur(12px) saturate(140%);\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n  transition: background 0.18s var(--ease-out), color 0.18s var(--ease-out),\n              border-color 0.18s var(--ease-out), transform 0.15s var(--ease-spring);\n}\n.theme-toggle:hover {\n  color: var(--snl-mint);\n  border-color: rgba(143, 204, 177, 0.4);\n  background: var(--snl-mint-soft);\n  transform: translateY(-1px);\n}\n.theme-toggle:active {\n  transform: translateY(0);\n}\n.theme-toggle svg {\n  transition: transform 0.3s var(--ease-spring);\n}\n.theme-toggle--dark svg { color: var(--snl-golden); }\n.theme-toggle--light svg { color: var(--snl-deep); }\n</style>\n","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment, normalizeClass as _normalizeClass, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\", \"title\"]\nconst _hoisted_2 = {\n  key: 0,\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2\",\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    type: \"button\",\n    class: _normalizeClass([\"theme-toggle\", `theme-toggle--${$setup.theme}`]),\n    \"aria-label\": $setup.theme === 'dark' ? 'Schakel naar licht thema' : 'Schakel naar donker thema',\n    title: $setup.theme === 'dark' ? 'Licht thema' : 'Donker thema',\n    onClick: _cache[0] || (_cache[0] = (...args) => ($setup.toggleTheme && $setup.toggleTheme(...args)))\n  }, [\n    _createCommentVNode(\" Sun (visible in dark mode — click to go light) \"),\n    ($setup.theme === 'dark')\n      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, _cache[1] || (_cache[1] = [\n          _createStaticVNode(\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\" data-v-3ee099aa></circle><path d=\\\"M12 2v2\\\" data-v-3ee099aa></path><path d=\\\"M12 20v2\\\" data-v-3ee099aa></path><path d=\\\"m4.93 4.93 1.41 1.41\\\" data-v-3ee099aa></path><path d=\\\"m17.66 17.66 1.41 1.41\\\" data-v-3ee099aa></path><path d=\\\"M2 12h2\\\" data-v-3ee099aa></path><path d=\\\"M20 12h2\\\" data-v-3ee099aa></path><path d=\\\"m6.34 17.66-1.41 1.41\\\" data-v-3ee099aa></path><path d=\\\"m19.07 4.93-1.41 1.41\\\" data-v-3ee099aa></path>\", 9)\n        ])))\n      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n          _createCommentVNode(\" Moon (visible in light mode — click to go dark) \"),\n          _cache[2] || (_cache[2] = _createElementVNode(\"svg\", {\n            width: \"16\",\n            height: \"16\",\n            viewBox: \"0 0 24 24\",\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: \"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z\" })\n          ], -1 /* CACHED */))\n        ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n  ], 10 /* CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ThemeToggle.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ThemeToggle.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ThemeToggle.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ThemeToggle.vue\";script.__scopeId = \"data-v-3ee099aa\";export default script;","<template>\n  <div\n    ref=\"rootEl\"\n    class=\"codeinput\"\n    :class=\"{ 'codeinput--error': error, 'codeinput--valid': valid }\"\n    role=\"group\"\n    aria-label=\"Verificatiecode\"\n    @focusout=\"onFocusOut\"\n  >\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\">\nimport { ref, watch } from \"vue\";\n\nconst props = withDefaults(\n  defineProps<{ modelValue: string; length?: number; disabled?: boolean; error?: boolean; valid?: boolean }>(),\n  { length: 6, disabled: false, error: false, valid: false },\n);\nconst emit = defineEmits<{\n  (e: \"update:modelValue\", value: string): void;\n  (e: \"complete\", value: string): void;\n  (e: \"blur\"): void;\n}>();\n\nconst cells = ref<string[]>(Array.from({ length: props.length }, () => \"\"));\nconst inputs = ref<HTMLInputElement[]>([]);\nconst rootEl = ref<HTMLElement | null>(null);\n\n// Fire `blur` only when focus leaves the whole group (not when moving between\n// cells) so the parent can verify the code as soon as the user tabs/clicks away.\nfunction onFocusOut(event: FocusEvent) {\n  const next = event.relatedTarget as Node | null;\n  if (!next || !rootEl.value?.contains(next)) emit(\"blur\");\n}\n\nfunction setRef(el: Element | null, i: number) {\n  if (el) inputs.value[i] = el as HTMLInputElement;\n}\n\n// Keep cells in sync when the parent resets the value (e.g. clears it after a\n// failed reset). Only react to external changes — splitting the incoming string\n// into per-cell digits.\nwatch(\n  () => props.modelValue,\n  (val) => {\n    if (val === cells.value.join(\"\")) return;\n    const digits = (val ?? \"\").replace(/\\D/g, \"\").slice(0, props.length).split(\"\");\n    cells.value = Array.from({ length: props.length }, (_, i) => digits[i] ?? \"\");\n  },\n);\n\nfunction commit() {\n  const value = cells.value.join(\"\");\n  emit(\"update:modelValue\", value);\n  // Each cell holds at most 1 char, so a joined length === length means all\n  // cells are filled. (Do NOT use value.includes(\"\") — that's always true.)\n  if (value.length === props.length) emit(\"complete\", value);\n}\n\nfunction focusCell(i: number) {\n  const el = inputs.value[i];\n  if (el) {\n    el.focus();\n    el.select();\n  }\n}\n\nfunction onInput(i: number, event: Event) {\n  const target = event.target as HTMLInputElement;\n  // Keep only the last typed digit (handles fast typing / replacing a filled cell).\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 < props.length - 1) focusCell(i + 1);\n}\n\nfunction onKeydown(i: number, event: KeyboardEvent) {\n  if (event.key === \"Backspace\") {\n    if (cells.value[i]) {\n      // Non-empty: let the input event clear this cell.\n      return;\n    }\n    // Empty: step back and clear the previous cell.\n    if (i > 0) {\n      event.preventDefault();\n      cells.value[i - 1] = \"\";\n      commit();\n      focusCell(i - 1);\n    }\n  } else if (event.key === \"ArrowLeft\" && i > 0) {\n    event.preventDefault();\n    focusCell(i - 1);\n  } else if (event.key === \"ArrowRight\" && i < props.length - 1) {\n    event.preventDefault();\n    focusCell(i + 1);\n  }\n}\n\nfunction onFocus(event: FocusEvent) {\n  (event.target as HTMLInputElement).select();\n}\n\nfunction onPaste(event: ClipboardEvent) {\n  event.preventDefault();\n  const text = event.clipboardData?.getData(\"text\") ?? \"\";\n  const digits = text.replace(/\\D/g, \"\").slice(0, props.length).split(\"\");\n  if (digits.length === 0) return;\n  cells.value = Array.from({ length: props.length }, (_, i) => digits[i] ?? \"\");\n  commit();\n  // Focus the first empty cell, or the last one when fully filled.\n  const firstEmpty = cells.value.findIndex((c) => !c);\n  focusCell(firstEmpty === -1 ? props.length - 1 : firstEmpty);\n}\n</script>\n\n<style scoped>\n.codeinput {\n  display: flex;\n  gap: 8px;\n  justify-content: space-between;\n}\n.codeinput__cell {\n  flex: 1;\n  min-width: 0;\n  height: 56px;\n  padding: 0;\n  text-align: center;\n  font-size: 24px;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  outline: none;\n  transition: border-color 0.12s, box-shadow 0.12s;\n}\n.codeinput__cell:focus {\n  border-color: var(--snl-mint);\n  box-shadow: 0 0 0 3px rgba(143, 204, 177, 0.2);\n}\n.codeinput__cell:disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n.codeinput--error .codeinput__cell {\n  border-color: var(--snl-danger);\n}\n.codeinput--valid .codeinput__cell {\n  border-color: var(--snl-mint);\n}\n</style>\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\", \"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, 'codeinput--valid': $props.valid }]),\n    role: \"group\",\n    \"aria-label\": \"Verificatiecode\",\n    onFocusout: $setup.onFocusOut\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_1))\n    }), 128 /* KEYED_FRAGMENT */))\n  ], 34 /* CLASS, NEED_HYDRATION */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/CodeInput.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/CodeInput.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/CodeInput.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/CodeInput.vue\";script.__scopeId = \"data-v-3e7aa61b\";export default script;","<template>\n  <div class=\"pwinput\" :class=\"{ 'pwinput--error': error, 'pwinput--disabled': disabled }\">\n    <input\n      ref=\"inputEl\"\n      class=\"pwinput__field\"\n      :type=\"visible ? 'text' : 'password'\"\n      :value=\"modelValue\"\n      :disabled=\"disabled\"\n      :autocomplete=\"autocomplete\"\n      :name=\"name\"\n      :required=\"required\"\n      @input=\"onInput\"\n    />\n    <button\n      type=\"button\"\n      class=\"pwinput__toggle\"\n      :disabled=\"disabled\"\n      :aria-label=\"visible ? 'Wachtwoord verbergen' : 'Wachtwoord tonen'\"\n      :aria-pressed=\"visible\"\n      tabindex=\"-1\"\n      @click=\"toggle\"\n    >\n      <svg v-if=\"!visible\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\" />\n        <circle cx=\"12\" cy=\"12\" r=\"3\" />\n      </svg>\n      <svg v-else width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"M9.9 4.24A9.12 9.12 0 0 1 12 5c6.5 0 10 7 10 7a13.2 13.2 0 0 1-1.67 2.68\" />\n        <path d=\"M6.61 6.61A13.5 13.5 0 0 0 2 12s3.5 7 10 7a9.1 9.1 0 0 0 5.39-1.61\" />\n        <line x1=\"2\" y1=\"2\" x2=\"22\" y2=\"22\" />\n        <path d=\"M9.88 9.88a3 3 0 0 0 4.24 4.24\" />\n      </svg>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: string;\n    visible?: boolean;\n    disabled?: boolean;\n    error?: boolean;\n    autocomplete?: string;\n    name?: string;\n    required?: boolean;\n  }>(),\n  { visible: false, disabled: false, error: false, autocomplete: \"new-password\", name: undefined, required: false },\n);\nconst emit = defineEmits<{\n  (e: \"update:modelValue\", value: string): void;\n  (e: \"update:visible\", value: boolean): void;\n}>();\n\nconst inputEl = ref<HTMLInputElement | null>(null);\n\nfunction onInput(event: Event) {\n  emit(\"update:modelValue\", (event.target as HTMLInputElement).value);\n}\nfunction toggle() {\n  emit(\"update:visible\", !props.visible);\n}\n\n// Let the parent focus this field (e.g. on a validation error).\ndefineExpose({ focus: () => inputEl.value?.focus() });\n</script>\n\n<style scoped>\n.pwinput {\n  position: relative;\n}\n.pwinput__field {\n  width: 100%;\n  height: 48px;\n  padding: 0 46px 0 14px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  font-size: 15px;\n  outline: none;\n  transition: border-color 0.12s, box-shadow 0.12s;\n}\n.pwinput__field:focus {\n  border-color: var(--snl-mint);\n  box-shadow: 0 0 0 3px rgba(143, 204, 177, 0.2);\n}\n.pwinput--error .pwinput__field {\n  border-color: var(--snl-danger);\n}\n.pwinput--disabled .pwinput__field {\n  opacity: 0.55;\n  cursor: not-allowed;\n}\n.pwinput__toggle {\n  position: absolute;\n  top: 50%;\n  right: 6px;\n  transform: translateY(-50%);\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 36px;\n  height: 36px;\n  padding: 0;\n  border: 0;\n  border-radius: 10px;\n  background: transparent;\n  color: var(--snl-fg-subtle);\n  cursor: pointer;\n  transition: color 0.12s, background 0.12s;\n}\n.pwinput__toggle:disabled {\n  opacity: 0;\n  pointer-events: none;\n}\n@media (hover: hover) {\n  .pwinput__toggle:hover {\n    color: var(--snl-fg);\n    background: var(--snl-surface-3);\n  }\n}\n</style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"type\", \"value\", \"disabled\", \"autocomplete\", \"name\", \"required\"]\nconst _hoisted_2 = [\"disabled\", \"aria-label\", \"aria-pressed\"]\nconst _hoisted_3 = {\n  key: 0,\n  width: \"20\",\n  height: \"20\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_4 = {\n  key: 1,\n  width: \"20\",\n  height: \"20\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2\",\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(\"div\", {\n    class: _normalizeClass([\"pwinput\", { 'pwinput--error': $props.error, 'pwinput--disabled': $props.disabled }])\n  }, [\n    _createElementVNode(\"input\", {\n      ref: \"inputEl\",\n      class: \"pwinput__field\",\n      type: $props.visible ? 'text' : 'password',\n      value: $props.modelValue,\n      disabled: $props.disabled,\n      autocomplete: $props.autocomplete,\n      name: $props.name,\n      required: $props.required,\n      onInput: $setup.onInput\n    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_1),\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: \"pwinput__toggle\",\n      disabled: $props.disabled,\n      \"aria-label\": $props.visible ? 'Wachtwoord verbergen' : 'Wachtwoord tonen',\n      \"aria-pressed\": $props.visible,\n      tabindex: \"-1\",\n      onClick: $setup.toggle\n    }, [\n      (!$props.visible)\n        ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, _cache[0] || (_cache[0] = [\n            _createElementVNode(\"path\", { d: \"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\" }, null, -1 /* CACHED */),\n            _createElementVNode(\"circle\", {\n              cx: \"12\",\n              cy: \"12\",\n              r: \"3\"\n            }, null, -1 /* CACHED */)\n          ])))\n        : (_openBlock(), _createElementBlock(\"svg\", _hoisted_4, _cache[1] || (_cache[1] = [\n            _createElementVNode(\"path\", { d: \"M9.9 4.24A9.12 9.12 0 0 1 12 5c6.5 0 10 7 10 7a13.2 13.2 0 0 1-1.67 2.68\" }, null, -1 /* CACHED */),\n            _createElementVNode(\"path\", { d: \"M6.61 6.61A13.5 13.5 0 0 0 2 12s3.5 7 10 7a9.1 9.1 0 0 0 5.39-1.61\" }, null, -1 /* CACHED */),\n            _createElementVNode(\"line\", {\n              x1: \"2\",\n              y1: \"2\",\n              x2: \"22\",\n              y2: \"22\"\n            }, null, -1 /* CACHED */),\n            _createElementVNode(\"path\", { d: \"M9.88 9.88a3 3 0 0 0 4.24 4.24\" }, null, -1 /* CACHED */)\n          ])))\n    ], 8 /* PROPS */, _hoisted_2)\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PasswordInput.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PasswordInput.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PasswordInput.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PasswordInput.vue\";script.__scopeId = \"data-v-7fbd020d\";export default script;","import { createElementVNode as _createElementVNode, renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"fielderror\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"span\", _hoisted_1, [\n    _cache[0] || (_cache[0] = _createElementVNode(\"svg\", {\n      class: \"fielderror__icon\",\n      width: \"15\",\n      height: \"15\",\n      viewBox: \"0 0 24 24\",\n      fill: \"none\",\n      stroke: \"currentColor\",\n      \"stroke-width\": \"2.2\",\n      \"stroke-linecap\": \"round\",\n      \"stroke-linejoin\": \"round\",\n      \"aria-hidden\": \"true\"\n    }, [\n      _createElementVNode(\"circle\", {\n        cx: \"12\",\n        cy: \"12\",\n        r: \"10\"\n      }),\n      _createElementVNode(\"line\", {\n        x1: \"12\",\n        y1: \"8\",\n        x2: \"12\",\n        y2: \"12\"\n      }),\n      _createElementVNode(\"line\", {\n        x1: \"12\",\n        y1: \"16\",\n        x2: \"12.01\",\n        y2: \"16\"\n      })\n    ], -1 /* CACHED */)),\n    _createElementVNode(\"span\", null, [\n      _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FieldError.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FieldError.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FieldError.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FieldError.vue\";script.__scopeId = \"data-v-a6c15b17\";export default script;","import { rpc as createRpcClient, type OmitRPCContextArgs } from \"@webhare/rpc\";\nimport type { PublicRPC } from \"@mod-statiegeldnl/js/public-rpc\";\n\n// Canonical @webhare/rpc client:\n// - typed against the PublicRPC service (first `context` arg stripped)\n// - auto-adds ?pathname=location.pathname so the router can resolve the\n//   siteprofile <wrdauth> rule for cookie-based auth\n// - typed stringify (dates/bigints) and cross-stack traces for free\n//\n// baseUrl: location.origin werkt zowel in WebHare (same-origin) als in de\n// standalone Vite-shell (webdesigns/feedback/standalone/, waar @webhare/env\n// geen backendBase levert en de client anders met \"must set baseUrl\" faalt).\nexport const api = createRpcClient<OmitRPCContextArgs<typeof PublicRPC>>(\"statiegeldnl:public\", {\n  baseUrl: location.origin,\n});\n\n// Thin wrappers keep existing call-sites (HomeView/DetailView) unchanged.\n// AbortSignal threading isn't supported by the typed client yet — the\n// calls that need it still live inside watchers that can ignore stale results.\n\nexport function searchLocations(query: string, _signal?: AbortSignal) {\n  return api.searchLocations({ query });\n}\n\n// Verkennen-tab: every location (with coords) for the map + list.\nexport function listLocations(query?: string) {\n  return api.listLocations(query ? { query } : {});\n}\n\nexport function nearbyLocations(lat: number, lng: number, limit = 5) {\n  return api.nearbyLocations({ lat, lng, limit });\n}\n\nexport function getLocationDetail(id: number) {\n  return api.getLocationDetail({ id });\n}\n\nexport function fetchImagesForLocation(locationId: number) {\n  return api.fetchImagesForLocation({ locationId });\n}\n\n// Start an AI analysis for a location with none yet (auth-gated, paid).\nexport function startLocationAnalysis(locationId: number) {\n  return api.startLocationAnalysis({ locationId });\n}\n\n// Poll the status/stage of a running analysis (reads WRD directly).\nexport function getAnalysisStatus(analysisId: number) {\n  return api.getAnalysisStatus({ analysisId });\n}\n\nexport function getMyFeedbackForLocation(locationId: number) {\n  return api.getMyFeedbackForLocation({ locationId });\n}\n\n// Handmatig een locatie toevoegen (adres → coördinaten via forward-geocode).\n// Zonder `force` geeft de server `duplicates` terug (locaties vlakbij) i.p.v.\n// aanmaken, zodat de PWA kan waarschuwen; met `force: true` maakt 'ie 'm toch aan.\nexport function createManualLocation(payload: {\n  address: string;\n  companyName?: string | null;\n  locationType?: string | null;\n  force?: boolean;\n}) {\n  return api.createManualLocation(payload);\n}\n\n// ----- Password reset (\"Wachtwoord vergeten\") -----------------\n// Step 1: email a reset code. Always resolves to { success } (anti-enumeration);\n// dev returns the code too. Step 2: verify the code + set the new password.\n\nexport function requestPasswordReset(email: string) {\n  return api.requestPasswordReset({ email });\n}\n\nexport function resetPassword(payload: { email: string; code: string; newPassword: string }) {\n  return api.resetPassword(payload);\n}\n\n// Lightweight code check for immediate feedback (on blur / once 6 digits in).\nexport function checkResetCode(email: string, code: string) {\n  return api.checkResetCode({ email, code });\n}\n\n// Beoordelingen-tab: all feedback the current user has submitted.\nexport function getMyFeedback() {\n  return api.getMyFeedback();\n}\n\n// Beoordelingen-tab \"Alle beoordelingen\": every user's feedback, each row\n// attributed to its submitter (auth-gated server-side; needs the feedback right).\nexport function getAllFeedback() {\n  return api.getAllFeedback();\n}\n\n// Beoordeling-detailpagina: the full review (per-dimension verdict + reason,\n// overall rating, free-text notes) for one feedback row by its id. Auth-gated\n// server-side; returns { feedback: null } when not found / no access.\nexport function getFeedbackDetail(id: number) {\n  return api.getFeedbackDetail({ id });\n}\n\nexport function submitFeedback(payload: Parameters<typeof api.submitFeedback>[0]) {\n  return api.submitFeedback(payload);\n}\n\n// ----- Scout-kaart datasets (Verkennen-filters) ---------------\n// Funnel = interne sales-data, auth-gated server-side. Gemeente/inwoners =\n// publieke CBS/PDOK-data. Alle drie zijn 0-arg (alleen context server-side).\n\nexport function getFunnelLocations() {\n  return api.getFunnelLocations();\n}\n\n// Gedeelde per-apparaat radius opslaan/wissen (radiusM = null → terug naar globaal).\nexport function setFunnelRadius(slug: string, radiusM: number | null) {\n  return api.setFunnelRadius({ slug, radiusM });\n}\n\n// Gedeelde globale default-radius opslaan.\nexport function setFunnelGlobalRadius(radiusM: number) {\n  return api.setFunnelGlobalRadius({ radiusM });\n}\n\nexport function getGemeenteGrenzen() {\n  return api.getGemeenteGrenzen();\n}\n\nexport function getGemeenteInwoners() {\n  return api.getGemeenteInwoners();\n}\n\n// ----- Personal planning list ---------------------------------\n\nexport function getMyList() {\n  return api.getMyList();\n}\n\nexport function addToMyListServer(locationId: number) {\n  return api.addToMyList({ locationId });\n}\n\nexport function removeFromMyListServer(locationId: number) {\n  return api.removeFromMyList({ locationId });\n}\n\nexport function reorderMyListServer(orderedLocationIds: number[]) {\n  return api.reorderMyList({ orderedLocationIds });\n}\n\n// ----- Voorkeursregio (per-gebruiker Verkennen-default) -------\n// getMyPreferredRegions geeft voor een ingelogde agent de effectieve regio's\n// (incl. de Utrecht-default als er nog niets is ingesteld). De UI laat voorlopig\n// één keuze toe, maar de opslag is array-ready.\n\nexport function getMyPreferredRegions() {\n  return api.getMyPreferredRegions();\n}\n\nexport function setMyPreferredRegions(regions: string[]) {\n  return api.setMyPreferredRegions({ regions });\n}\n\n// Distinct province-strings voor de Account-instellingen-dropdown.\nexport function getProvinces() {\n  return api.getProvinces();\n}\n","// Small, dependency-free password-strength heuristic for the reset form.\n// Deliberately NOT zxcvbn (huge dictionary, overkill here): we only need a\n// minimum-length gate plus a coarse 1-4 strength hint. Pure function so it's\n// unit-testable via `wh runtest` (see tests/password-strength.test.ts).\n\n/** Minimum acceptable password length (also enforced server-side). */\nexport const MIN_PASSWORD_LENGTH = 8;\n\nexport interface PasswordStrength {\n  /** 0 = below the minimum length; 1 (zwak) … 4 (sterk) once long enough. */\n  score: 0 | 1 | 2 | 3 | 4;\n  /** Dutch label for the score. */\n  label: string;\n  /** True once the password is at least MIN_PASSWORD_LENGTH chars. */\n  meetsMinimum: boolean;\n}\n\nconst LABELS: Record<number, string> = {\n  0: `Minimaal ${MIN_PASSWORD_LENGTH} tekens`,\n  1: \"Zwak\",\n  2: \"Redelijk\",\n  3: \"Goed\",\n  4: \"Sterk\",\n};\n\n/**\n * Score a password 0-4. Below the minimum length the score is 0 (\"too short\").\n * Above it, the score grows with character variety (lower/upper/digit/symbol)\n * and length (a 12+ password counts as longer/stronger).\n */\nexport function scorePassword(password: string): PasswordStrength {\n  if (password.length < MIN_PASSWORD_LENGTH) {\n    return { score: 0, label: LABELS[0], meetsMinimum: false };\n  }\n\n  const classes =\n    (/[a-z]/.test(password) ? 1 : 0) +\n    (/[A-Z]/.test(password) ? 1 : 0) +\n    (/\\d/.test(password) ? 1 : 0) +\n    (/[^A-Za-z0-9]/.test(password) ? 1 : 0);\n  const long = password.length >= 12;\n\n  let score: 1 | 2 | 3 | 4 = 1;\n  if (classes >= 2) score = 2;\n  if (classes >= 3 || long) score = 3;\n  if (classes >= 3 && long) score = 4;\n\n  return { score, label: LABELS[score], meetsMinimum: true };\n}\n","import { createVNode as _createVNode, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, vModelText as _vModelText, withDirectives as _withDirectives, vModelCheckbox as _vModelCheckbox, vShow as _vShow, withModifiers as _withModifiers, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"login\" }\nconst _hoisted_2 = { class: \"login__topbar\" }\nconst _hoisted_3 = [\"src\"]\nconst _hoisted_4 = {\n  key: 0,\n  class: \"login-form__notice\",\n  role: \"status\"\n}\nconst _hoisted_5 = { class: \"login-form__field\" }\nconst _hoisted_6 = { class: \"login-form__field\" }\nconst _hoisted_7 = { class: \"login-form__persist\" }\nconst _hoisted_8 = [\"disabled\", \"aria-busy\"]\nconst _hoisted_9 = {\n  key: 0,\n  class: \"login-form__spinner\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_10 = {\n  key: 2,\n  class: \"login-form__hint\"\n}\nconst _hoisted_11 = { class: \"login-form__field\" }\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = {\n  key: 0,\n  class: \"login-form__notice\",\n  role: \"status\"\n}\nconst _hoisted_14 = { class: \"login-form__field\" }\nconst _hoisted_15 = { class: \"login-form__msg\" }\nconst _hoisted_16 = {\n  key: 1,\n  class: \"login-form__okhint\"\n}\nconst _hoisted_17 = { class: \"login-form__field\" }\nconst _hoisted_18 = { class: \"login-form__msg\" }\nconst _hoisted_19 = [\"data-score\"]\nconst _hoisted_20 = {\n  class: \"pwstrength__bars\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_21 = { class: \"pwstrength__label\" }\nconst _hoisted_22 = {\n  key: 2,\n  class: \"login-form__minhint\"\n}\nconst _hoisted_23 = { class: \"login-form__field\" }\nconst _hoisted_24 = { class: \"login-form__msg\" }\nconst _hoisted_25 = {\n  key: 1,\n  class: \"login-form__minhint\"\n}\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = {\n  key: 1,\n  class: \"login-form__hint\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createVNode($setup[\"ThemeToggle\"])\n    ]),\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: \"login__brand\",\n      onClick: $setup.goLogin,\n      \"aria-label\": \"Terug naar inloggen\"\n    }, [\n      _createElementVNode(\"img\", {\n        src: $setup.logoUrl,\n        alt: \"Statiegeld Nederland\",\n        class: \"login__logo\"\n      }, null, 8 /* PROPS */, _hoisted_3),\n      _cache[10] || (_cache[10] = _createElementVNode(\"span\", { class: \"login__tagline\" }, \"SNL Scout-app\", -1 /* CACHED */))\n    ]),\n    _createCommentVNode(\" Login. Kept mounted with v-show (NOT v-if) so setupWRDAuth's one-shot\\n         scan keeps the form wired even after toggling to forgot/reset. \"),\n    _withDirectives(_createElementVNode(\"form\", {\n      class: \"wh-wrdauth__loginform login-form\",\n      method: \"post\",\n      action: \"javascript:\",\n      onSubmit: $setup.onLoginSubmit\n    }, [\n      _cache[15] || (_cache[15] = _createElementVNode(\"h2\", { class: \"login-form__title\" }, \"Inloggen\", -1 /* CACHED */)),\n      _cache[16] || (_cache[16] = _createElementVNode(\"p\", { class: \"login-form__subtitle\" }, \"Log in om feedback in te sturen.\", -1 /* CACHED */)),\n      ($setup.loginNotice)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($setup.loginNotice), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.errorMessage)\n        ? (_openBlock(), _createBlock($setup[\"FieldError\"], { key: 1 }, {\n            default: _withCtx(() => [\n              _createTextVNode(_toDisplayString($setup.errorMessage), 1 /* TEXT */)\n            ]),\n            _: 1 /* STABLE */\n          }))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"label\", _hoisted_5, [\n        _cache[11] || (_cache[11] = _createElementVNode(\"span\", { class: \"login-form__label\" }, \"E-mail\", -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"input\", {\n          ref: \"loginInput\",\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.email) = $event)),\n          name: \"login\",\n          type: \"email\",\n          required: \"\",\n          autocomplete: \"email\",\n          class: \"login-form__input\"\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelText, $setup.email]\n        ])\n      ]),\n      _createElementVNode(\"label\", _hoisted_6, [\n        _cache[12] || (_cache[12] = _createElementVNode(\"span\", { class: \"login-form__label\" }, \"Wachtwoord\", -1 /* CACHED */)),\n        _createVNode($setup[\"PasswordInput\"], {\n          modelValue: $setup.loginPassword,\n          \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.loginPassword) = $event)),\n          visible: $setup.loginPasswordVisible,\n          \"onUpdate:visible\": _cache[2] || (_cache[2] = $event => (($setup.loginPasswordVisible) = $event)),\n          name: \"password\",\n          autocomplete: \"current-password\",\n          required: true\n        }, null, 8 /* PROPS */, [\"modelValue\", \"visible\"])\n      ]),\n      _createElementVNode(\"label\", _hoisted_7, [\n        _withDirectives(_createElementVNode(\"input\", {\n          name: \"persistent\",\n          type: \"checkbox\",\n          class: \"snl-checkbox\",\n          \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.rememberMe) = $event))\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelCheckbox, $setup.rememberMe]\n        ]),\n        _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, \"Ingelogd blijven\", -1 /* CACHED */))\n      ]),\n      _createElementVNode(\"button\", {\n        type: \"submit\",\n        class: \"login-form__submit\",\n        disabled: $setup.loggingIn,\n        \"aria-busy\": $setup.loggingIn\n      }, [\n        ($setup.loggingIn)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_9))\n          : _createCommentVNode(\"v-if\", true),\n        _createTextVNode(\" \" + _toDisplayString($setup.loggingIn ? \"Bezig met inloggen…\" : \"Inloggen\"), 1 /* TEXT */)\n      ], 8 /* PROPS */, _hoisted_8),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"login-form__forgot\",\n        onClick: $setup.goForgot\n      }, \" Wachtwoord vergeten? \"),\n      ($setup.prefill.login)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_10, [\n            _cache[14] || (_cache[14] = _createTextVNode(\" Developmentmodus: ingevuld als \", -1 /* CACHED */)),\n            _createElementVNode(\"code\", null, _toDisplayString($setup.prefill.login), 1 /* TEXT */)\n          ]))\n        : _createCommentVNode(\"v-if\", true)\n    ], 544 /* NEED_HYDRATION, NEED_PATCH */), [\n      [_vShow, $setup.mode === 'login']\n    ]),\n    _createCommentVNode(\" Forgot: request a reset code by email. Plain form (no wh-wrdauth class). \"),\n    ($setup.mode === 'forgot')\n      ? (_openBlock(), _createElementBlock(\"form\", {\n          key: 0,\n          class: \"login-form\",\n          onSubmit: _withModifiers($setup.onRequestCode, [\"prevent\"])\n        }, [\n          _cache[18] || (_cache[18] = _createElementVNode(\"h2\", { class: \"login-form__title\" }, \"Wachtwoord vergeten\", -1 /* CACHED */)),\n          _cache[19] || (_cache[19] = _createElementVNode(\"p\", { class: \"login-form__subtitle\" }, \" Vul je e-mailadres in. Je ontvangt een code om een nieuw wachtwoord in te stellen. \", -1 /* CACHED */)),\n          _createElementVNode(\"label\", _hoisted_11, [\n            _cache[17] || (_cache[17] = _createElementVNode(\"span\", { class: \"login-form__label\" }, \"E-mail\", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => (($setup.email) = $event)),\n              type: \"email\",\n              required: \"\",\n              autocomplete: \"email\",\n              class: \"login-form__input\"\n            }, null, 512 /* NEED_PATCH */), [\n              [_vModelText, $setup.email]\n            ])\n          ]),\n          _createElementVNode(\"button\", {\n            type: \"submit\",\n            class: \"login-form__submit\",\n            disabled: $setup.busy\n          }, _toDisplayString($setup.busy ? \"Versturen…\" : \"Stuur code\"), 9 /* TEXT, PROPS */, _hoisted_12),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"login-form__forgot\",\n            onClick: $setup.goLogin\n          }, \"Terug naar inloggen\"),\n          ($setup.flowError)\n            ? (_openBlock(), _createBlock($setup[\"FieldError\"], { key: 0 }, {\n                default: _withCtx(() => [\n                  _createTextVNode(_toDisplayString($setup.flowError), 1 /* TEXT */)\n                ]),\n                _: 1 /* STABLE */\n              }))\n            : _createCommentVNode(\"v-if\", true)\n        ], 32 /* NEED_HYDRATION */))\n      : _createCommentVNode(\"v-if\", true),\n    _createCommentVNode(\" Reset: enter the emailed code + a new password. \"),\n    ($setup.mode === 'reset')\n      ? (_openBlock(), _createElementBlock(\"form\", {\n          key: 1,\n          class: \"login-form\",\n          onSubmit: _withModifiers($setup.onResetPassword, [\"prevent\"])\n        }, [\n          _cache[25] || (_cache[25] = _createElementVNode(\"h2\", { class: \"login-form__title\" }, \"Nieuw wachtwoord\", -1 /* CACHED */)),\n          ($setup.flowNotice)\n            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, _toDisplayString($setup.flowNotice), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true),\n          _cache[26] || (_cache[26] = _createElementVNode(\"p\", { class: \"login-form__subtitle\" }, \" Vul de code uit de e-mail in en kies een nieuw wachtwoord (minimaal 8 tekens). \", -1 /* CACHED */)),\n          _createElementVNode(\"div\", _hoisted_14, [\n            _cache[21] || (_cache[21] = _createElementVNode(\"span\", { class: \"login-form__label\" }, \"Code\", -1 /* CACHED */)),\n            _createVNode($setup[\"CodeInput\"], {\n              modelValue: $setup.code,\n              \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => (($setup.code) = $event)),\n              length: 6,\n              disabled: $setup.busy,\n              error: !!$setup.fieldErrors.code,\n              valid: $setup.codeValid,\n              onComplete: $setup.onCodeComplete,\n              onBlur: $setup.onCodeBlur\n            }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\", \"error\", \"valid\"]),\n            _createElementVNode(\"div\", _hoisted_15, [\n              ($setup.fieldErrors.code)\n                ? (_openBlock(), _createBlock($setup[\"FieldError\"], { key: 0 }, {\n                    default: _withCtx(() => [\n                      _createTextVNode(_toDisplayString($setup.fieldErrors.code), 1 /* TEXT */)\n                    ]),\n                    _: 1 /* STABLE */\n                  }))\n                : ($setup.codeValid)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_16, _cache[20] || (_cache[20] = [\n                      _createElementVNode(\"svg\", {\n                        width: \"14\",\n                        height: \"14\",\n                        viewBox: \"0 0 24 24\",\n                        fill: \"none\",\n                        stroke: \"currentColor\",\n                        \"stroke-width\": \"2.4\",\n                        \"stroke-linecap\": \"round\",\n                        \"stroke-linejoin\": \"round\",\n                        \"aria-hidden\": \"true\"\n                      }, [\n                        _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" })\n                      ], -1 /* CACHED */),\n                      _createTextVNode(\" Code klopt \", -1 /* CACHED */)\n                    ])))\n                  : _createCommentVNode(\"v-if\", true)\n            ])\n          ]),\n          _createElementVNode(\"label\", _hoisted_17, [\n            _cache[22] || (_cache[22] = _createElementVNode(\"span\", { class: \"login-form__label\" }, \"Nieuw wachtwoord\", -1 /* CACHED */)),\n            _createVNode($setup[\"PasswordInput\"], {\n              ref: \"newPasswordRef\",\n              modelValue: $setup.newPassword,\n              \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => (($setup.newPassword) = $event)),\n              visible: $setup.showPassword,\n              \"onUpdate:visible\": _cache[7] || (_cache[7] = $event => (($setup.showPassword) = $event)),\n              autocomplete: \"new-password\",\n              error: !!$setup.fieldErrors.newPassword\n            }, null, 8 /* PROPS */, [\"modelValue\", \"visible\", \"error\"]),\n            _createElementVNode(\"div\", _hoisted_18, [\n              ($setup.fieldErrors.newPassword)\n                ? (_openBlock(), _createBlock($setup[\"FieldError\"], { key: 0 }, {\n                    default: _withCtx(() => [\n                      _createTextVNode(_toDisplayString($setup.fieldErrors.newPassword), 1 /* TEXT */)\n                    ]),\n                    _: 1 /* STABLE */\n                  }))\n                : ($setup.newPassword)\n                  ? (_openBlock(), _createElementBlock(\"div\", {\n                      key: 1,\n                      class: \"pwstrength\",\n                      \"data-score\": $setup.strength.score\n                    }, [\n                      _createElementVNode(\"span\", _hoisted_20, [\n                        (_openBlock(), _createElementBlock(_Fragment, null, _renderList(4, (n) => {\n                          return _createElementVNode(\"span\", {\n                            key: n,\n                            class: _normalizeClass([\"pwstrength__bar\", { 'pwstrength__bar--on': n <= $setup.strength.score }])\n                          }, null, 2 /* CLASS */)\n                        }), 64 /* STABLE_FRAGMENT */))\n                      ]),\n                      _createElementVNode(\"span\", _hoisted_21, _toDisplayString($setup.strength.label), 1 /* TEXT */)\n                    ], 8 /* PROPS */, _hoisted_19))\n                  : (_openBlock(), _createElementBlock(\"span\", _hoisted_22, \"Minimaal \" + _toDisplayString($setup.MIN_PASSWORD_LENGTH) + \" tekens.\", 1 /* TEXT */))\n            ])\n          ]),\n          _createElementVNode(\"label\", _hoisted_23, [\n            _cache[23] || (_cache[23] = _createElementVNode(\"span\", { class: \"login-form__label\" }, \"Herhaal wachtwoord\", -1 /* CACHED */)),\n            _createVNode($setup[\"PasswordInput\"], {\n              modelValue: $setup.newPassword2,\n              \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => (($setup.newPassword2) = $event)),\n              visible: $setup.showPassword2,\n              \"onUpdate:visible\": _cache[9] || (_cache[9] = $event => (($setup.showPassword2) = $event)),\n              autocomplete: \"new-password\",\n              disabled: $setup.showPassword,\n              error: !!$setup.fieldErrors.newPassword2\n            }, null, 8 /* PROPS */, [\"modelValue\", \"visible\", \"disabled\", \"error\"]),\n            _createElementVNode(\"div\", _hoisted_24, [\n              ($setup.fieldErrors.newPassword2)\n                ? (_openBlock(), _createBlock($setup[\"FieldError\"], { key: 0 }, {\n                    default: _withCtx(() => [\n                      _createTextVNode(_toDisplayString($setup.fieldErrors.newPassword2), 1 /* TEXT */)\n                    ]),\n                    _: 1 /* STABLE */\n                  }))\n                : ($setup.showPassword)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_25, \"Niet nodig — je wachtwoord is zichtbaar.\"))\n                  : _createCommentVNode(\"v-if\", true)\n            ])\n          ]),\n          _createElementVNode(\"button\", {\n            type: \"submit\",\n            class: \"login-form__submit\",\n            disabled: $setup.busy\n          }, _toDisplayString($setup.busy ? \"Bezig…\" : \"Wachtwoord wijzigen\"), 9 /* TEXT, PROPS */, _hoisted_26),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"login-form__forgot\",\n            onClick: $setup.onRequestCode\n          }, \" Geen code ontvangen? Opnieuw versturen \"),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"login-form__forgot\",\n            onClick: $setup.goLogin\n          }, \"Terug naar inloggen\"),\n          ($setup.devCode)\n            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_27, [\n                _cache[24] || (_cache[24] = _createTextVNode(\" Developmentmodus: code is \", -1 /* CACHED */)),\n                _createElementVNode(\"code\", null, _toDisplayString($setup.devCode), 1 /* TEXT */)\n              ]))\n            : _createCommentVNode(\"v-if\", true),\n          ($setup.flowError)\n            ? (_openBlock(), _createBlock($setup[\"FieldError\"], { key: 2 }, {\n                default: _withCtx(() => [\n                  _createTextVNode(_toDisplayString($setup.flowError), 1 /* TEXT */)\n                ]),\n                _: 1 /* STABLE */\n              }))\n            : _createCommentVNode(\"v-if\", true)\n        ], 32 /* NEED_HYDRATION */))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LoginForm.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LoginForm.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LoginForm.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LoginForm.vue\";script.__scopeId = \"data-v-f5aafc18\";export default script;","<template>\n  <header class=\"topnav\">\n    <!-- Brand (left) -->\n    <a class=\"topnav__brand\" :href=\"urlHome()\" aria-label=\"SNL Scout home\">\n      <span class=\"topnav__brand-mark\" aria-hidden=\"true\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\"/>\n          <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n        </svg>\n      </span>\n      <span class=\"topnav__brand-text\">\n        <span class=\"topnav__brand-kicker\">Statiegeld&nbsp;NL</span>\n        <span class=\"topnav__brand-title\">SNL Scout</span>\n      </span>\n    </a>\n\n    <!-- Tabs (center) -->\n    <nav class=\"topnav__tabs\" aria-label=\"Hoofdnavigatie\">\n      <a\n        class=\"topnav__tab\"\n        :class=\"{ 'topnav__tab--active': activeView === 'home' }\"\n        :href=\"urlHome()\"\n      >\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1v-9.5z\"/>\n        </svg>\n        <span>Home</span>\n      </a>\n      <a\n        class=\"topnav__tab\"\n        :class=\"{ 'topnav__tab--active': activeView === 'verkennen' }\"\n        :href=\"urlVerkennen()\"\n      >\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\"/>\n        </svg>\n        <span>Verkennen</span>\n      </a>\n      <a\n        class=\"topnav__tab\"\n        :class=\"{ 'topnav__tab--active': activeView === 'planning' }\"\n        :href=\"urlPlanning()\"\n      >\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M9 11l3 3L22 4\"/>\n          <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"/>\n        </svg>\n        <span>Planning</span>\n        <span v-if=\"count > 0\" class=\"topnav__badge\">{{ count }}</span>\n      </a>\n      <a\n        class=\"topnav__tab\"\n        :class=\"{ 'topnav__tab--active': activeView === 'beoordelingen' }\"\n        :href=\"urlBeoordelingen()\"\n      >\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\"/>\n          <rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1\"/>\n          <path d=\"m9 14 2 2 4-4\"/>\n        </svg>\n        <span>Beoordelingen</span>\n      </a>\n    </nav>\n\n    <!-- Account avatar (right) -->\n    <a\n      class=\"topnav__avatar\"\n      :class=\"{ 'topnav__avatar--active': activeView === 'account' }\"\n      :href=\"urlAccount()\"\n      :title=\"displayName ? `${displayName} — Account` : 'Account'\"\n      aria-label=\"Account\"\n    >\n      {{ initials }}\n    </a>\n  </header>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { getUserInfo } from \"../lib/runtime\";\nimport { usePersonalList } from \"../lib/personalList\";\nimport { urlAccount, urlBeoordelingen, urlHome, urlPlanning, urlVerkennen } from \"../lib/urls\";\n\ndefineProps<{\n  activeView: \"home\" | \"verkennen\" | \"detail\" | \"planning\" | \"beoordelingen\" | \"account\";\n}>();\n\ntype CachedUserInfo = {\n  wrd_contact_email?: string | null;\n  wrd_firstname?: string | null;\n  wrd_lastname?: string | null;\n};\n\nconst { count } = usePersonalList();\n\nconst info = computed(() => getUserInfo<CachedUserInfo>() ?? null);\n\nconst displayName = computed(() => {\n  if (!info.value) return \"\";\n  const full = [info.value.wrd_firstname, info.value.wrd_lastname].filter(Boolean).join(\" \").trim();\n  return full || info.value.wrd_contact_email || \"\";\n});\n\nconst initials = computed(() => {\n  if (!info.value) return \"•\";\n  const first = (info.value.wrd_firstname ?? \"\").trim();\n  const last = (info.value.wrd_lastname ?? \"\").trim();\n  if (first || last) return `${first.charAt(0)}${last.charAt(0)}`.toUpperCase() || \"•\";\n  return (info.value.wrd_contact_email ?? \"?\").charAt(0).toUpperCase();\n});\n</script>\n\n<style scoped>\n.topnav {\n  display: grid;\n  grid-template-columns: 1fr auto 1fr;\n  align-items: center;\n  gap: 16px;\n  height: 56px;\n  padding: 0 18px;\n  position: sticky;\n  top: env(safe-area-inset-top);\n  z-index: 50;\n  background: var(--snl-glass);\n  backdrop-filter: blur(14px) saturate(160%);\n  -webkit-backdrop-filter: blur(14px) saturate(160%);\n  border-bottom: 1px solid var(--snl-line);\n}\n\n/* Brand */\n.topnav__brand {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  justify-self: start;\n  text-decoration: none;\n  color: var(--snl-fg);\n  min-width: 0;\n}\n.topnav__brand-mark {\n  display: grid;\n  place-items: center;\n  width: 30px;\n  height: 30px;\n  border-radius: 9px;\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n  flex-shrink: 0;\n}\n.topnav__brand-text {\n  display: flex;\n  flex-direction: column;\n  line-height: 1.1;\n  min-width: 0;\n}\n.topnav__brand-kicker {\n  font-size: 9.5px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: var(--snl-fg-subtle);\n  font-weight: 600;\n}\n.topnav__brand-title {\n  font-size: 14px;\n  font-weight: 700;\n  letter-spacing: -0.015em;\n}\n\n/* Center tab group — a dark inset pill containing the tabs */\n.topnav__tabs {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  justify-self: center;\n  padding: 4px;\n  border-radius: 12px;\n  background: var(--snl-bg-deep);\n}\n.topnav__tab {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n  padding: 8px 14px;\n  border-radius: 9px;\n  text-decoration: none;\n  font-size: 13.5px;\n  font-weight: 600;\n  color: var(--snl-fg-muted);\n  white-space: nowrap;\n  transition: background 0.12s, color 0.12s;\n}\n.topnav__tab:hover { color: var(--snl-fg); }\n.topnav__tab--active {\n  background: var(--snl-mint-soft);\n  color: var(--snl-fg);\n}\n.topnav__badge {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 18px;\n  height: 18px;\n  padding: 0 6px;\n  border-radius: 99px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 10.5px;\n  font-weight: 800;\n  font-variant-numeric: tabular-nums;\n}\n\n/* Account avatar */\n.topnav__avatar {\n  display: grid;\n  place-items: center;\n  justify-self: end;\n  width: 34px;\n  height: 34px;\n  border-radius: 99px;\n  background: linear-gradient(135deg, var(--snl-mint), var(--snl-deep));\n  color: var(--snl-ink);\n  font-size: 12.5px;\n  font-weight: 800;\n  text-decoration: none;\n  transition: box-shadow 0.15s, transform 0.08s;\n}\n.topnav__avatar:hover { box-shadow: 0 0 0 3px var(--snl-mint-soft); }\n.topnav__avatar:active { transform: translateY(1px); }\n.topnav__avatar--active { box-shadow: 0 0 0 2px var(--snl-mint); }\n\n/* The top bar is desktop-only; mobile keeps the bottom tabbar. */\n@media (max-width: 959px) {\n  .topnav { display: none; }\n}\n</style>\n","// Persoonlijke planning-lijst voor de SNL Scout PWA.\n//\n// Server-state (WRD personal_list_item) met optimistic updates en een\n// localStorage-cache zodat de sidebar instant rendert bij paginaload terwijl\n// de echte data wordt opgehaald.\n//\n// Mutations zijn allemaal optimistic: UI updatet meteen, server-call gaat\n// async; bij fout reverten we naar de pre-call snapshot. De auth-laag draait\n// op WRDAuth — een niet-ingelogde sessie krijgt een lege lijst van de server.\n\nimport { computed, readonly, ref, watch } from \"vue\";\nimport { getUserInfo } from \"./runtime\";\nimport {\n  addToMyListServer,\n  getMyList,\n  removeFromMyListServer,\n  reorderMyListServer,\n} from \"./api\";\nimport type { LocationSummary } from \"./types\";\n\nexport interface PersonalListItem {\n  id: number | null; // server wrdId; null tijdens optimistic add\n  location: LocationSummary;\n  addedAt: number;\n}\n\nconst STORAGE_PREFIX = \"snl-feedback:personal-list:\";\n\ntype CachedUserInfo = {\n  wrd_contact_email?: string | null;\n};\n\nfunction storageKey(): string {\n  const info = getUserInfo<CachedUserInfo>();\n  const email = info?.wrd_contact_email?.trim().toLowerCase() ?? \"anon\";\n  return `${STORAGE_PREFIX}${email}`;\n}\n\nfunction loadInitial(): PersonalListItem[] {\n  if (typeof window === \"undefined\") return [];\n  try {\n    const raw = window.localStorage.getItem(storageKey());\n    if (!raw) return [];\n    const parsed = JSON.parse(raw);\n    if (!Array.isArray(parsed)) return [];\n    return parsed.filter(\n      (it): it is PersonalListItem =>\n        it && typeof it === \"object\" && it.location && typeof it.location.id === \"number\",\n    );\n  } catch {\n    return [];\n  }\n}\n\nconst items = ref<PersonalListItem[]>(loadInitial());\nlet serverLoaded = false;\n\nwatch(\n  items,\n  (next) => {\n    if (typeof window === \"undefined\") return;\n    try {\n      window.localStorage.setItem(storageKey(), JSON.stringify(next));\n    } catch (err) {\n      console.warn(\"Could not persist personal list:\", err);\n    }\n  },\n  { deep: true },\n);\n\nif (typeof window !== \"undefined\") {\n  window.addEventListener(\"storage\", (event) => {\n    if (event.key !== storageKey()) return;\n    items.value = loadInitial();\n  });\n}\n\nfunction findIndex(locationId: number): number {\n  return items.value.findIndex((it) => it.location.id === locationId);\n}\n\nasync function loadFromServer(): Promise<void> {\n  try {\n    const { items: serverItems } = await getMyList();\n    items.value = serverItems.map((s) => ({\n      id: s.id,\n      location: s.location,\n      addedAt: new Date(s.addedAt).getTime(),\n    }));\n    serverLoaded = true;\n  } catch (err) {\n    console.warn(\"Could not load personal list from server:\", err);\n  }\n}\n\n// Forceer een verse server-load. Nodig na login-zonder-reload: de lijst is dan\n// al (leeg) geladen voor een uitgelogde sessie, dus serverLoaded staat op true\n// en de lazy first-load in usePersonalList() vuurt niet meer. Zie frontend.ts.\nexport async function reloadPersonalListFromServer(): Promise<void> {\n  serverLoaded = false;\n  await loadFromServer();\n}\n\nexport function usePersonalList() {\n  const list = readonly(items);\n  const count = computed(() => items.value.length);\n\n  // Lazy first-load: triggert bij eerste use binnen de app-shell. localStorage\n  // toont meteen de oude staat zodat de sidebar niet flickert.\n  if (!serverLoaded) void loadFromServer();\n\n  function isInList(locationId: number): boolean {\n    return findIndex(locationId) !== -1;\n  }\n\n  async function addToList(location: LocationSummary): Promise<void> {\n    if (isInList(location.id)) return;\n    const snapshot = items.value;\n    items.value = [...items.value, { id: null, location, addedAt: Date.now() }];\n    try {\n      const { id } = await addToMyListServer(location.id);\n      // Vervang de optimistic placeholder met het echte server-id\n      items.value = items.value.map((it) =>\n        it.location.id === location.id && it.id === null ? { ...it, id } : it,\n      );\n    } catch (err) {\n      console.warn(\"addToList failed, reverting:\", err);\n      items.value = snapshot;\n    }\n  }\n\n  async function removeFromList(locationId: number): Promise<void> {\n    const idx = findIndex(locationId);\n    if (idx === -1) return;\n    const snapshot = items.value;\n    const next = items.value.slice();\n    next.splice(idx, 1);\n    items.value = next;\n    try {\n      await removeFromMyListServer(locationId);\n    } catch (err) {\n      console.warn(\"removeFromList failed, reverting:\", err);\n      items.value = snapshot;\n    }\n  }\n\n  async function moveUp(locationId: number): Promise<void> {\n    const idx = findIndex(locationId);\n    if (idx <= 0) return;\n    const snapshot = items.value;\n    const next = items.value.slice();\n    [next[idx - 1], next[idx]] = [next[idx], next[idx - 1]];\n    items.value = next;\n    await persistOrder(snapshot);\n  }\n\n  async function moveDown(locationId: number): Promise<void> {\n    const idx = findIndex(locationId);\n    if (idx === -1 || idx >= items.value.length - 1) return;\n    const snapshot = items.value;\n    const next = items.value.slice();\n    [next[idx], next[idx + 1]] = [next[idx + 1], next[idx]];\n    items.value = next;\n    await persistOrder(snapshot);\n  }\n\n  // Commit een volledige, willekeurige volgorde (gebruikt door drag-to-reorder).\n  // Anders dan moveUp/moveDown — die alleen aangrenzend wisselen — kan een sleep\n  // een item over meerdere posities verplaatsen, dus we herschikken op id-lijst.\n  async function reorder(orderedLocationIds: number[]): Promise<void> {\n    const snapshot = items.value;\n    const byId = new Map(items.value.map((it) => [it.location.id, it]));\n    const next: PersonalListItem[] = [];\n    for (const id of orderedLocationIds) {\n      const it = byId.get(id);\n      if (it) {\n        next.push(it);\n        byId.delete(id);\n      }\n    }\n    // Defensief: items die niet in de payload zaten achteraan bewaren.\n    for (const it of items.value) if (byId.has(it.location.id)) next.push(it);\n    items.value = next;\n    await persistOrder(snapshot);\n  }\n\n  async function persistOrder(snapshot: PersonalListItem[]): Promise<void> {\n    try {\n      const orderedLocationIds = items.value.map((it) => it.location.id);\n      await reorderMyListServer(orderedLocationIds);\n    } catch (err) {\n      console.warn(\"reorder failed, reverting:\", err);\n      items.value = snapshot;\n    }\n  }\n\n  async function clear(): Promise<void> {\n    if (items.value.length === 0) return;\n    const snapshot = items.value;\n    const ids = items.value.map((it) => it.location.id);\n    items.value = [];\n    try {\n      await Promise.all(ids.map((id) => removeFromMyListServer(id)));\n    } catch (err) {\n      console.warn(\"clear failed, reverting:\", err);\n      items.value = snapshot;\n    }\n  }\n\n  function nextLocationId(afterId?: number): number | null {\n    if (items.value.length === 0) return null;\n    if (afterId === undefined) return items.value[0].location.id;\n    const idx = findIndex(afterId);\n    if (idx === -1) return items.value[0].location.id;\n    const next = items.value[idx + 1] ?? items.value[0];\n    return next.location.id === afterId ? null : next.location.id;\n  }\n\n  return {\n    list,\n    count,\n    isInList,\n    addToList,\n    removeFromList,\n    moveUp,\n    moveDown,\n    reorder,\n    clear,\n    nextLocationId,\n  };\n}\n","// Bouwt URL's t.o.v. de site-root die het backend (webdesign.ts) als\n// frontend-data heeft meegegeven. Hardcoded \"/\" of relatieve paden werken\n// niet wanneer de site onder een sub-pad gepubliceerd is (bv.\n// `/statiegeld-nl-feedback/`).\n//\n// In-app routes lopen via vue-router met hash-history, dus we plakken\n// `#/<route>` achter de site-root. WebHare ziet alleen de root en serveert\n// daarvoor één en dezelfde HTML; vue-router pikt de hash op.\n\nimport { getFrontendData } from \"./runtime\";\n\nfunction root(): string {\n  const data = getFrontendData(\"statiegeldnl:feedback\");\n  // Fallback naar \"/\" voor het geval het webdesign een keer zonder site-root\n  // serveert (bijv. tijdens een lokale unit-test). Sluit altijd op \"/\".\n  const raw = data?.siteRoot ?? \"/\";\n  return raw.endsWith(\"/\") ? raw : `${raw}/`;\n}\n\nexport function urlHome(): string {\n  return `${root()}#/`;\n}\n\nexport function urlVerkennen(): string {\n  return `${root()}#/verkennen`;\n}\n\nexport function urlPlanning(): string {\n  return `${root()}#/planning`;\n}\n\nexport function urlBeoordelingen(): string {\n  return `${root()}#/beoordelingen`;\n}\n\nexport function urlBeoordeling(id: number): string {\n  return `${root()}#/beoordeling/${id}`;\n}\n\nexport function urlAccount(): string {\n  return `${root()}#/account`;\n}\n\nexport function urlLocation(id: number): string {\n  return `${root()}#/location/${id}`;\n}\n\nexport function urlAddLocation(): string {\n  return `${root()}#/toevoegen`;\n}\n\nexport function siteRoot(): string {\n  return root();\n}\n","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"topnav\" }\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = {\n  class: \"topnav__tabs\",\n  \"aria-label\": \"Hoofdnavigatie\"\n}\nconst _hoisted_4 = [\"href\"]\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = [\"href\"]\nconst _hoisted_7 = {\n  key: 0,\n  class: \"topnav__badge\"\n}\nconst _hoisted_8 = [\"href\"]\nconst _hoisted_9 = [\"href\", \"title\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"header\", _hoisted_1, [\n    _createCommentVNode(\" Brand (left) \"),\n    _createElementVNode(\"a\", {\n      class: \"topnav__brand\",\n      href: $setup.urlHome(),\n      \"aria-label\": \"SNL Scout home\"\n    }, _cache[0] || (_cache[0] = [\n      _createStaticVNode(\"<span class=\\\"topnav__brand-mark\\\" aria-hidden=\\\"true\\\" data-v-5d7d2391><svg width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" data-v-5d7d2391><path d=\\\"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\\\" data-v-5d7d2391></path><circle cx=\\\"12\\\" cy=\\\"10\\\" r=\\\"2.5\\\" data-v-5d7d2391></circle></svg></span><span class=\\\"topnav__brand-text\\\" data-v-5d7d2391><span class=\\\"topnav__brand-kicker\\\" data-v-5d7d2391>Statiegeld NL</span><span class=\\\"topnav__brand-title\\\" data-v-5d7d2391>SNL Scout</span></span>\", 2)\n    ]), 8 /* PROPS */, _hoisted_2),\n    _createCommentVNode(\" Tabs (center) \"),\n    _createElementVNode(\"nav\", _hoisted_3, [\n      _createElementVNode(\"a\", {\n        class: _normalizeClass([\"topnav__tab\", { 'topnav__tab--active': $props.activeView === 'home' }]),\n        href: $setup.urlHome()\n      }, _cache[1] || (_cache[1] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 24 24\",\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: \"M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1v-9.5z\" })\n        ], -1 /* CACHED */),\n        _createElementVNode(\"span\", null, \"Home\", -1 /* CACHED */)\n      ]), 10 /* CLASS, PROPS */, _hoisted_4),\n      _createElementVNode(\"a\", {\n        class: _normalizeClass([\"topnav__tab\", { 'topnav__tab--active': $props.activeView === 'verkennen' }]),\n        href: $setup.urlVerkennen()\n      }, _cache[2] || (_cache[2] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 24 24\",\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: \"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\" })\n        ], -1 /* CACHED */),\n        _createElementVNode(\"span\", null, \"Verkennen\", -1 /* CACHED */)\n      ]), 10 /* CLASS, PROPS */, _hoisted_5),\n      _createElementVNode(\"a\", {\n        class: _normalizeClass([\"topnav__tab\", { 'topnav__tab--active': $props.activeView === 'planning' }]),\n        href: $setup.urlPlanning()\n      }, [\n        _cache[3] || (_cache[3] = _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 24 24\",\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: \"M9 11l3 3L22 4\" }),\n          _createElementVNode(\"path\", { d: \"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" })\n        ], -1 /* CACHED */)),\n        _cache[4] || (_cache[4] = _createElementVNode(\"span\", null, \"Planning\", -1 /* CACHED */)),\n        ($setup.count > 0)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_7, _toDisplayString($setup.count), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ], 10 /* CLASS, PROPS */, _hoisted_6),\n      _createElementVNode(\"a\", {\n        class: _normalizeClass([\"topnav__tab\", { 'topnav__tab--active': $props.activeView === 'beoordelingen' }]),\n        href: $setup.urlBeoordelingen()\n      }, _cache[5] || (_cache[5] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 24 24\",\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: \"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\" }),\n          _createElementVNode(\"rect\", {\n            x: \"9\",\n            y: \"3\",\n            width: \"6\",\n            height: \"4\",\n            rx: \"1\"\n          }),\n          _createElementVNode(\"path\", { d: \"m9 14 2 2 4-4\" })\n        ], -1 /* CACHED */),\n        _createElementVNode(\"span\", null, \"Beoordelingen\", -1 /* CACHED */)\n      ]), 10 /* CLASS, PROPS */, _hoisted_8)\n    ]),\n    _createCommentVNode(\" Account avatar (right) \"),\n    _createElementVNode(\"a\", {\n      class: _normalizeClass([\"topnav__avatar\", { 'topnav__avatar--active': $props.activeView === 'account' }]),\n      href: $setup.urlAccount(),\n      title: $setup.displayName ? `${$setup.displayName} — Account` : 'Account',\n      \"aria-label\": \"Account\"\n    }, _toDisplayString($setup.initials), 11 /* TEXT, CLASS, PROPS */, _hoisted_9)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/TopNav.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/TopNav.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/TopNav.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/TopNav.vue\";script.__scopeId = \"data-v-5d7d2391\";export default script;","import { onBeforeUnmount, onMounted, readonly, ref } from \"vue\";\n\nconst LOGGED_IN_CLASS = \"wh-wrdauth--isloggedin\";\n\n// Reactive WRDAuth state driven by the `.wh-wrdauth--isloggedin` class that\n// setupWRDAuth() toggles on <html>. Returns readonly so components can't\n// accidentally flip it — login/logout goes through the form / logout link.\nexport function useWrdAuthState() {\n  // Read synchronously so the first render already reflects login state —\n  // avoids a flash of LoginForm for users who arrive logged in.\n  const isLoggedIn = ref(document.documentElement.classList.contains(LOGGED_IN_CLASS));\n  let observer: MutationObserver | null = null;\n\n  function read() {\n    isLoggedIn.value = document.documentElement.classList.contains(LOGGED_IN_CLASS);\n  }\n\n  onMounted(() => {\n    read();\n    observer = new MutationObserver(read);\n    observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"class\"] });\n  });\n\n  onBeforeUnmount(() => {\n    observer?.disconnect();\n    observer = null;\n  });\n\n  return { isLoggedIn: readonly(isLoggedIn) };\n}\n","import { createVNode as _createVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"layout\"\n}\nconst _hoisted_2 = { class: \"layout__main\" }\nconst _hoisted_3 = {\n  class: \"layout__tabbar\",\n  \"aria-label\": \"Hoofdnavigatie\"\n}\nconst _hoisted_4 = [\"href\"]\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = [\"href\"]\nconst _hoisted_7 = { class: \"layout__tab-icon-wrap\" }\nconst _hoisted_8 = {\n  key: 0,\n  class: \"layout__tab-badge\"\n}\nconst _hoisted_9 = [\"href\"]\nconst _hoisted_10 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_router_view = _resolveComponent(\"router-view\")\n\n  return ($setup.isLoggedIn)\n    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n        _createVNode($setup[\"TopNav\"], { \"active-view\": $setup.view }, null, 8 /* PROPS */, [\"active-view\"]),\n        _createElementVNode(\"main\", _hoisted_2, [\n          _createElementVNode(\"div\", {\n            class: _normalizeClass([\"layout__content\", { 'layout__content--wide': $setup.view === 'verkennen' }])\n          }, [\n            _createVNode(_component_router_view)\n          ], 2 /* CLASS */),\n          _createElementVNode(\"nav\", _hoisted_3, [\n            _createElementVNode(\"a\", {\n              class: _normalizeClass([\"layout__tab\", { 'layout__tab--active': $setup.view === 'home' }]),\n              href: $setup.urlHome(),\n              \"aria-label\": \"Home\"\n            }, _cache[0] || (_cache[0] = [\n              _createElementVNode(\"svg\", {\n                width: \"22\",\n                height: \"22\",\n                viewBox: \"0 0 24 24\",\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: \"M3 10.5 12 3l9 7.5V20a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1v-9.5z\" })\n              ], -1 /* CACHED */),\n              _createElementVNode(\"span\", null, \"Home\", -1 /* CACHED */)\n            ]), 10 /* CLASS, PROPS */, _hoisted_4),\n            _createElementVNode(\"a\", {\n              class: _normalizeClass([\"layout__tab\", { 'layout__tab--active': $setup.view === 'verkennen' }]),\n              href: $setup.urlVerkennen(),\n              \"aria-label\": \"Verkennen\"\n            }, _cache[1] || (_cache[1] = [\n              _createElementVNode(\"svg\", {\n                width: \"22\",\n                height: \"22\",\n                viewBox: \"0 0 24 24\",\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: \"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\" })\n              ], -1 /* CACHED */),\n              _createElementVNode(\"span\", null, \"Verkennen\", -1 /* CACHED */)\n            ]), 10 /* CLASS, PROPS */, _hoisted_5),\n            _createElementVNode(\"a\", {\n              class: _normalizeClass([\"layout__tab\", { 'layout__tab--active': $setup.view === 'planning' }]),\n              href: $setup.urlPlanning(),\n              \"aria-label\": \"Mijn planning\"\n            }, [\n              _createElementVNode(\"span\", _hoisted_7, [\n                _cache[2] || (_cache[2] = _createElementVNode(\"svg\", {\n                  width: \"22\",\n                  height: \"22\",\n                  viewBox: \"0 0 24 24\",\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: \"M9 11l3 3L22 4\" }),\n                  _createElementVNode(\"path\", { d: \"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" })\n                ], -1 /* CACHED */)),\n                ($setup.listCount > 0)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString($setup.listCount), 1 /* TEXT */))\n                  : _createCommentVNode(\"v-if\", true)\n              ]),\n              _cache[3] || (_cache[3] = _createElementVNode(\"span\", null, \"Planning\", -1 /* CACHED */))\n            ], 10 /* CLASS, PROPS */, _hoisted_6),\n            _createElementVNode(\"a\", {\n              class: _normalizeClass([\"layout__tab\", { 'layout__tab--active': $setup.view === 'beoordelingen' }]),\n              href: $setup.urlBeoordelingen(),\n              \"aria-label\": \"Beoordelingen\"\n            }, _cache[4] || (_cache[4] = [\n              _createElementVNode(\"svg\", {\n                width: \"22\",\n                height: \"22\",\n                viewBox: \"0 0 24 24\",\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: \"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\" }),\n                _createElementVNode(\"rect\", {\n                  x: \"9\",\n                  y: \"3\",\n                  width: \"6\",\n                  height: \"4\",\n                  rx: \"1\"\n                }),\n                _createElementVNode(\"path\", { d: \"m9 14 2 2 4-4\" })\n              ], -1 /* CACHED */),\n              _createElementVNode(\"span\", null, \"Beoordeeld\", -1 /* CACHED */)\n            ]), 10 /* CLASS, PROPS */, _hoisted_9),\n            _createElementVNode(\"a\", {\n              class: _normalizeClass([\"layout__tab\", { 'layout__tab--active': $setup.view === 'account' }]),\n              href: $setup.urlAccount(),\n              \"aria-label\": \"Account\"\n            }, _cache[5] || (_cache[5] = [\n              _createElementVNode(\"svg\", {\n                width: \"22\",\n                height: \"22\",\n                viewBox: \"0 0 24 24\",\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(\"circle\", {\n                  cx: \"12\",\n                  cy: \"8\",\n                  r: \"4\"\n                }),\n                _createElementVNode(\"path\", { d: \"M4 21a8 8 0 0 1 16 0\" })\n              ], -1 /* CACHED */),\n              _createElementVNode(\"span\", null, \"Account\", -1 /* CACHED */)\n            ]), 10 /* CLASS, PROPS */, _hoisted_10)\n          ])\n        ])\n      ]))\n    : (_openBlock(), _createBlock($setup[\"LoginForm\"], { key: 1 }))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/App.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/App.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/App.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/App.vue\";script.__scopeId = \"data-v-b8b1efd9\";export default script;","// Hash-based router. WebHare's Publisher serveert het webdesign onder een vaste\n// site-root; alle in-app navigatie loopt via het hash-fragment zodat WebHare\n// geen 404 geeft op /location/123 etc.\n\nimport { createRouter, createWebHashHistory, type RouteRecordRaw } from \"vue-router\";\n\nimport AccountView from \"../views/AccountView.vue\";\n// Handmatig locatie toevoegen (TEC-129): adres → coördinaten → nieuwe locatie.\nimport AddLocationView from \"../views/AddLocationView.vue\";\n// Beoordeling-detailpagina: de volledige ingediende review (eigen path).\nimport BeoordelingDetailView from \"../views/BeoordelingDetailView.vue\";\n// Beoordelingen-tab: the field worker's own submitted reviews.\nimport BeoordelingenView from \"../views/BeoordelingenView.vue\";\nimport DetailView from \"../views/DetailView.vue\";\nimport HomeView from \"../views/HomeView.vue\";\nimport MyListView from \"../views/MyListView.vue\";\n// VerkennenContainer = de Verkennen-pagina mét de extra combo-filters\n// (inwoners / sales-funnel / radius). Het wrapt de herbruikbare VerkennenView.\nimport VerkennenContainer from \"../views/VerkennenContainer.vue\";\n\nconst routes: RouteRecordRaw[] = [\n  { path: \"/\", name: \"home\", component: HomeView },\n  { path: \"/verkennen\", name: \"verkennen\", component: VerkennenContainer },\n  { path: \"/toevoegen\", name: \"add-location\", component: AddLocationView },\n  { path: \"/planning\", name: \"planning\", component: MyListView },\n  { path: \"/beoordelingen\", name: \"beoordelingen\", component: BeoordelingenView },\n  // Detail van één ingediende beoordeling (klik vanuit de Beoordelingen-lijst).\n  {\n    path: \"/beoordeling/:id(\\\\d+)\",\n    name: \"beoordeling-detail\",\n    component: BeoordelingDetailView,\n    props: (route) => ({ feedbackId: Number(route.params.id) }),\n  },\n  { path: \"/account\", name: \"account\", component: AccountView },\n  // Auth-subschermen (uitgelogd). Eigen URL zodat 'wachtwoord vergeten'\n  // deeplinkbaar is en browser-back door login → vergeten → herstellen loopt.\n  // LoginForm rendert buiten <router-view> (App.vue v-else), dus voor uitgelogde\n  // bezoekers wordt de `component` hieronder nooit gemount — de route levert\n  // alleen de `name` waaruit LoginForm zijn modus afleidt. Ingelogde bezoekers\n  // worden door App.vue van deze routes naar home gestuurd.\n  { path: \"/wachtwoord-vergeten\", name: \"forgot-password\", component: HomeView },\n  { path: \"/wachtwoord-herstellen\", name: \"reset-password\", component: HomeView },\n  {\n    path: \"/location/:id(\\\\d+)\",\n    name: \"location\",\n    component: DetailView,\n    props: (route) => ({ locationId: Number(route.params.id) }),\n  },\n  { path: \"/:pathMatch(.*)*\", redirect: \"/\" },\n];\n\nexport const router = createRouter({\n  history: createWebHashHistory(),\n  routes,\n  scrollBehavior() {\n    return { top: 0 };\n  },\n});\n","<template>\n  <div class=\"account\">\n    <header class=\"account__header\">\n      <span class=\"account__avatar\" aria-hidden=\"true\">{{ initials }}</span>\n      <div class=\"account__head-text\">\n        <p class=\"account__kicker\">Account</p>\n        <h1 class=\"account__name\">{{ displayName }}</h1>\n        <p v-if=\"email && email !== displayName\" class=\"account__email\">{{ email }}</p>\n      </div>\n    </header>\n\n    <section class=\"account__group\">\n      <h2 class=\"account__group-title\">Voorkeuren</h2>\n      <div class=\"account__row\">\n        <div class=\"account__row-label\">\n          <span class=\"account__row-title\">Donkere modus</span>\n          <span class=\"account__row-sub\">Wissel tussen licht en donker thema.</span>\n        </div>\n        <ThemeToggle />\n      </div>\n\n      <div class=\"account__row\">\n        <div class=\"account__row-label\">\n          <span class=\"account__row-title\">Voorkeursregio</span>\n          <span class=\"account__row-sub\">Wordt automatisch als filter aangezet bij het openen van de kaart.</span>\n        </div>\n        <div class=\"account__region\" @focusout=\"onRegionBlur\">\n          <button type=\"button\" class=\"account__region-btn\" :disabled=\"regionLoading\" @click=\"regionOpen = !regionOpen\">\n            <span class=\"account__region-val\">{{ selectedRegion }}</span>\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"m6 9 6 6 6-6\"/>\n            </svg>\n          </button>\n          <div v-if=\"regionOpen\" class=\"account__region-pop\">\n            <button\n              v-for=\"r in regionOptions\"\n              :key=\"r\"\n              type=\"button\"\n              class=\"account__region-item\"\n              :class=\"{ 'is-on': r === selectedRegion }\"\n              @mousedown.prevent=\"selectRegion(r)\"\n            >\n              {{ r }}\n              <svg v-if=\"r === selectedRegion\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                <path d=\"M5 13l4 4L19 7\"/>\n              </svg>\n            </button>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section class=\"account__group\">\n      <h2 class=\"account__group-title\">Feedback</h2>\n      <button type=\"button\" class=\"account__feedback-btn\" @click=\"openUserbackFeedback\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"/>\n        </svg>\n        Feedback geven\n      </button>\n      <p class=\"account__feedback-hint\">\n        Tip, idee of bug gevonden? Laat het ons weten. Je kunt er een schermafbeelding bij maken.\n      </p>\n    </section>\n\n    <section class=\"account__group\">\n      <button type=\"button\" class=\"account__logout\" @click=\"logoutDialogOpen = true\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>\n          <path d=\"M16 17l5-5-5-5\"/>\n          <path d=\"M21 12H9\"/>\n        </svg>\n        Uitloggen\n      </button>\n    </section>\n\n    <p class=\"account__app-info\">\n      SNL Scout · Statiegeld&nbsp;NL\n    </p>\n\n    <Toast\n      :open=\"toastOpen\"\n      :message=\"toastMessage\"\n      :tone=\"toastTone\"\n      @close=\"toastOpen = false\"\n    />\n\n    <ConfirmDialog\n      v-model:open=\"logoutDialogOpen\"\n      title=\"Uitloggen?\"\n      confirm-label=\"Uitloggen\"\n      cancel-label=\"Annuleren\"\n      tone=\"danger\"\n      @confirm=\"handleLogout\"\n    >\n      <template #icon>\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"/>\n          <path d=\"M16 17l5-5-5-5\"/>\n          <path d=\"M21 12H9\"/>\n        </svg>\n      </template>\n      Je wordt afgemeld bij SNL Scout en moet daarna opnieuw inloggen.\n    </ConfirmDialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\nimport { getUserInfo, logout } from \"../lib/runtime\";\nimport { getMyPreferredRegions, getProvinces, setMyPreferredRegions } from \"../lib/api\";\nimport { ALL_REGIONS } from \"../lib/verkennenOptions\";\nimport ThemeToggle from \"../components/ThemeToggle.vue\";\nimport Toast from \"../components/Toast.vue\";\nimport ConfirmDialog from \"../components/ConfirmDialog.vue\";\nimport { openUserbackFeedback } from \"../lib/userback\";\n\ntype CachedUserInfo = {\n  wrd_contact_email?: string | null;\n  wrd_firstname?: string | null;\n  wrd_lastname?: string | null;\n};\n\nconst info = computed(() => getUserInfo<CachedUserInfo>() ?? null);\n\nconst displayName = computed(() => {\n  if (!info.value) return \"\";\n  const full = [info.value.wrd_firstname, info.value.wrd_lastname].filter(Boolean).join(\" \").trim();\n  return full || info.value.wrd_contact_email || \"\";\n});\n\nconst email = computed(() => info.value?.wrd_contact_email ?? \"\");\n\nconst initials = computed(() => {\n  if (!info.value) return \"•\";\n  const first = (info.value.wrd_firstname ?? \"\").trim();\n  const last = (info.value.wrd_lastname ?? \"\").trim();\n  if (first || last) return `${first.charAt(0)}${last.charAt(0)}`.toUpperCase() || \"•\";\n  return (info.value.wrd_contact_email ?? \"?\").charAt(0).toUpperCase();\n});\n\n// Bevestigingsdialoog vóór uitloggen; voorkomt een per ongeluk afgemelde sessie.\nconst logoutDialogOpen = ref(false);\n\nasync function handleLogout() {\n  try {\n    await logout();\n  } catch (err) {\n    console.error(\"Logout failed:\", err);\n  }\n}\n\n// ----- Voorkeursregio -----------------------------------------\n// Opties komen uit dezelfde authoritatieve bron als de Verkennen-filter\n// (province-strings), zodat een opgeslagen voorkeur 1-op-1 matcht. De server\n// geeft voor een ingelogde agent al de effectieve waarde (incl. Utrecht-default\n// zolang er nog niets is ingesteld). \"Alle regio's\" = geen default-filter ([]).\nconst regionOptions = ref<string[]>([ALL_REGIONS]);\nconst selectedRegion = ref<string>(ALL_REGIONS);\nconst regionOpen = ref(false);\nconst regionLoading = ref(true);\n\n// Zelf-verdwijnende bevestiging bij het opslaan van de voorkeursregio.\nconst toastOpen = ref(false);\nconst toastMessage = ref(\"\");\nconst toastTone = ref<\"success\" | \"error\">(\"success\");\n\nfunction showToast(message: string, tone: \"success\" | \"error\" = \"success\") {\n  toastMessage.value = message;\n  toastTone.value = tone;\n  toastOpen.value = true;\n}\n\nonMounted(async () => {\n  try {\n    const [provincesRes, prefRes] = await Promise.all([getProvinces(), getMyPreferredRegions()]);\n    regionOptions.value = [ALL_REGIONS, ...provincesRes.provinces];\n    selectedRegion.value = prefRes.regions.length > 0 ? prefRes.regions[0] : ALL_REGIONS;\n  } catch (err) {\n    console.error(\"Voorkeursregio laden mislukt:\", err);\n  } finally {\n    regionLoading.value = false;\n  }\n});\n\nasync function selectRegion(r: string) {\n  regionOpen.value = false;\n  if (r === selectedRegion.value) return;\n  const previous = selectedRegion.value;\n  selectedRegion.value = r; // optimistisch\n  try {\n    // \"Alle regio's\" → [] (geen default-filter); anders precies één regio.\n    await setMyPreferredRegions(r === ALL_REGIONS ? [] : [r]);\n    showToast(\n      r === ALL_REGIONS ? \"Voorkeursregio uitgezet: alle regio's.\" : `Voorkeursregio ingesteld op ${r}.`,\n    );\n  } catch (err) {\n    console.error(\"Voorkeursregio opslaan mislukt:\", err);\n    selectedRegion.value = previous; // terugdraaien bij falen\n    showToast(\"Opslaan mislukt. Probeer het opnieuw.\", \"error\");\n  }\n}\n\nfunction onRegionBlur() {\n  // Sluit ná de klik op een item (mousedown.prevent houdt de focus, dus de\n  // selectie vuurt eerst).\n  setTimeout(() => { regionOpen.value = false; }, 120);\n}\n</script>\n\n<style scoped>\n.account {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  /* Top = 20px zodat Planning/Beoordelingen/Account op dezelfde hoogte beginnen. */\n  padding: 20px 22px 32px;\n  gap: 20px;\n}\n\n.account__header {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n}\n.account__avatar {\n  display: grid;\n  place-items: center;\n  width: 56px;\n  height: 56px;\n  border-radius: 99px;\n  background: linear-gradient(135deg, var(--snl-mint), var(--snl-deep));\n  color: var(--snl-ink);\n  font-size: 18px;\n  font-weight: 800;\n  flex-shrink: 0;\n  box-shadow: 0 0 0 2px rgba(143, 204, 177, 0.18);\n}\n.account__head-text {\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n}\n.account__kicker {\n  margin: 0;\n  font-size: 11px;\n  letter-spacing: 0.16em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n}\n.account__name {\n  margin: 2px 0 0;\n  font-size: 22px;\n  font-weight: 800;\n  letter-spacing: -0.02em;\n  color: var(--snl-fg);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.account__email {\n  margin: 2px 0 0;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.account__group {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n.account__group-title {\n  margin: 0 4px;\n  font-size: 11px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: var(--snl-fg-subtle);\n  font-weight: 600;\n}\n\n.account__row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 14px;\n  padding: 14px 16px;\n  border: 1px solid var(--snl-line);\n  border-radius: 18px;\n  background: var(--snl-surface);\n}\n.account__row-label {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  min-width: 0;\n}\n.account__row-title {\n  font-size: 14px;\n  font-weight: 600;\n  color: var(--snl-fg);\n}\n.account__row-sub {\n  font-size: 12px;\n  color: var(--snl-fg-muted);\n}\n\n/* Voorkeursregio-dropdown, spiegelt de Verkennen `regionmenu`-stijl. */\n.account__region { position: relative; flex-shrink: 0; }\n.account__region-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  height: 36px;\n  padding: 0 12px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line);\n  border-radius: 10px;\n  font-family: inherit;\n  font-size: 13px;\n  font-weight: 700;\n  color: var(--snl-fg);\n  cursor: pointer;\n}\n.account__region-btn:hover { background: var(--snl-surface-3); border-color: var(--snl-line-strong); }\n.account__region-btn:disabled { opacity: 0.6; cursor: default; }\n.account__region-val { color: var(--snl-fg); font-weight: 700; }\n.account__region-pop {\n  position: absolute;\n  right: 0;\n  top: 40px;\n  z-index: 30;\n  min-width: 200px;\n  max-height: 280px;\n  overflow-y: auto;\n  padding: 6px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line-strong);\n  border-radius: 10px;\n  box-shadow: 0 18px 40px -10px rgba(0, 0, 0, 0.6);\n}\n.account__region-item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n  width: 100%;\n  padding: 7px 10px;\n  background: transparent;\n  border: 0;\n  border-radius: 7px;\n  text-align: left;\n  font-family: inherit;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n}\n.account__region-item:hover { background: var(--snl-surface-3); color: var(--snl-fg); }\n.account__region-item.is-on { color: var(--snl-mint); }\n\n.account__feedback-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  width: 100%;\n  height: 52px;\n  border: 1px solid var(--snl-mint);\n  border-radius: 16px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 14px;\n  font-weight: 700;\n  letter-spacing: -0.005em;\n  cursor: pointer;\n  transition: filter 0.15s;\n}\n.account__feedback-btn:hover {\n  filter: brightness(1.05);\n}\n.account__feedback-hint {\n  margin: 2px 4px 0;\n  font-size: 12px;\n  line-height: 1.45;\n  color: var(--snl-fg-muted);\n}\n\n.account__logout {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  width: 100%;\n  height: 52px;\n  border: 1px solid var(--snl-koraal);\n  border-radius: 16px;\n  background: var(--snl-koraal-soft);\n  color: var(--snl-koraal);\n  font-size: 14px;\n  font-weight: 700;\n  letter-spacing: -0.005em;\n  transition: background 0.15s, color 0.15s;\n}\n.account__logout:hover {\n  background: var(--snl-koraal);\n  color: #fff;\n}\n\n.account__app-info {\n  margin-top: auto;\n  text-align: center;\n  font-size: 11px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: var(--snl-fg-subtle);\n  padding-top: 12px;\n}\n</style>\n","// Shared static option config for the Verkennen filters. Both the desktop\n// dropdown toolbar (VerkennenView.vue) and the mobile slide-in FilterPanel.vue\n// render from these, so the labels/sentinels can't drift between the two\n// surfaces. Data-derived option lists (regionOptions, categoryOptions) still\n// live in the view because they depend on the loaded locations.\n\nimport type { ScoutBucket } from \"./scoutScore\";\nimport type { FeedbackFilter } from \"./verkennenFilter\";\n\n// Sentinel \"all\" value for the Regio single-select. (Soort has no such sentinel\n// row — it's a plain \"select all\" multi-select where an empty selection = all.)\nexport const ALL_REGIONS = \"Alle regio's\";\n\n// \"Geschiktheid\" labels. Only the four scored levels are rendered in the menu\n// (SCORED_BUCKET_OPTIONS) — each with a short range hint — under an \"Alle\n// geschiktheden\" master. There is no \"Zonder analyse\" row: an empty selection\n// shows the without-analysis locations. DEFAULT_BUCKETS controls which levels\n// are ticked when the view opens. The \"geen-analyse\" entry is kept only for the\n// occasional label lookup; it is never shown as a toggle.\nexport const BUCKET_OPTIONS: { id: ScoutBucket; label: string; hint: string }[] = [\n  { id: \"zeer-geschikt\", label: \"Zeer geschikt\", hint: \"85+\" },\n  { id: \"geschikt\", label: \"Geschikt\", hint: \"65–84\" },\n  { id: \"mogelijk\", label: \"Mogelijk\", hint: \"40–64\" },\n  { id: \"niet-geschikt\", label: \"Niet geschikt\", hint: \"<40\" },\n  { id: \"geen-analyse\", label: \"Zonder analyse\", hint: \"\" },\n];\nexport const SCORED_BUCKET_OPTIONS = BUCKET_OPTIONS.filter((b) => b.id !== \"geen-analyse\");\n\nexport const FEEDBACK_OPTIONS: { id: FeedbackFilter; label: string }[] = [\n  { id: \"all\", label: \"Alle\" },\n  { id: \"with\", label: \"Met feedback\" },\n  { id: \"without\", label: \"Zonder feedback\" },\n];\n\n// NL labels for the OSM-derived locationType values from the import. Unknown\n// types (new OSM categories from a future import) fall back to a cleaned-up\n// version of the raw value, so the filter never breaks on unexpected data.\nconst TYPE_LABELS: Record<string, string> = {\n  fuel: \"Tankstation\",\n  doityourself: \"Doe-het-zelf\",\n  garden_centre: \"Tuincentrum\",\n  hardware: \"IJzerwaren\",\n  car_wash: \"Wasstraten\",\n};\n\nexport function typeLabel(t: string): string {\n  return TYPE_LABELS[t] ?? t.replace(/_/g, \" \");\n}\n\n// The soort-options a field agent can pick when adding a location by hand\n// (TEC-129). Derived from the same TYPE_LABELS so the dropdown labels never\n// drift from the Verkennen filter. Order matches the labels a scout expects\n// first (fuel/car_wash are the bulk of the dataset).\nexport const MANUAL_LOCATION_TYPES: { id: string; label: string }[] = [\n  { id: \"fuel\", label: TYPE_LABELS.fuel },\n  { id: \"car_wash\", label: TYPE_LABELS.car_wash },\n  { id: \"doityourself\", label: TYPE_LABELS.doityourself },\n  { id: \"garden_centre\", label: TYPE_LABELS.garden_centre },\n  { id: \"hardware\", label: TYPE_LABELS.hardware },\n];\n","<template>\n  <Teleport to=\"body\">\n    <Transition name=\"toast\">\n      <div\n        v-if=\"open\"\n        class=\"toast\"\n        :class=\"{ 'toast--error': tone === 'error' }\"\n        role=\"status\"\n        aria-live=\"polite\"\n      >\n        <span class=\"toast__icon\" aria-hidden=\"true\">\n          <svg v-if=\"tone === 'error'\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n            <path d=\"M12 8v5M12 16h.01\"/>\n          </svg>\n          <svg v-else width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M5 13l4 4L19 7\"/>\n          </svg>\n        </span>\n        <span class=\"toast__msg\">{{ message }}</span>\n      </div>\n    </Transition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, watch } from \"vue\";\n\n// Lichtgewicht, zelf-verdwijnende melding. Controlled component: de parent zet\n// `open` + `message` en luistert op `@close` om 'm weer dicht te zetten. De timer\n// (her)start bij elke wijziging zolang `open` true is, zodat snel achter elkaar\n// triggeren de melding verlengt i.p.v. 'm vroeg te laten verdwijnen.\nconst props = withDefaults(defineProps<{\n  open: boolean;\n  message: string;\n  tone?: \"success\" | \"error\";\n  duration?: number;\n}>(), {\n  tone: \"success\",\n  duration: 2600,\n});\n\nconst emit = defineEmits<{ close: [] }>();\n\nlet timer: number | null = null;\n\nfunction clearTimer() {\n  if (timer !== null) {\n    window.clearTimeout(timer);\n    timer = null;\n  }\n}\n\nwatch(\n  () => [props.open, props.message, props.tone] as const,\n  () => {\n    clearTimer();\n    if (!props.open) return;\n    timer = window.setTimeout(() => emit(\"close\"), props.duration);\n  },\n  { immediate: true },\n);\n\nonBeforeUnmount(clearTimer);\n</script>\n\n<style scoped>\n.toast {\n  position: fixed;\n  left: 50%;\n  bottom: calc(24px + env(safe-area-inset-bottom));\n  transform: translateX(-50%);\n  z-index: 1200;\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  max-width: min(420px, calc(100vw - 32px));\n  padding: 12px 16px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line-strong);\n  border-radius: 12px;\n  box-shadow: 0 18px 40px -12px rgba(0, 0, 0, 0.55);\n  color: var(--snl-fg);\n  font-size: 13.5px;\n  font-weight: 600;\n}\n.toast__icon {\n  display: grid;\n  place-items: center;\n  flex-shrink: 0;\n  color: var(--snl-mint);\n}\n.toast--error .toast__icon { color: var(--snl-koraal); }\n.toast__msg { min-width: 0; }\n\n/* Op mobiel boven de bottom-tabbar (zelfde clearance als de Verkennen-toggle). */\n@media (max-width: 959px) {\n  .toast { bottom: calc(94px + env(safe-area-inset-bottom)); }\n}\n\n.toast-enter-active,\n.toast-leave-active {\n  transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.toast-enter-from,\n.toast-leave-to {\n  opacity: 0;\n  transform: translateX(-50%) translateY(8px);\n}\n</style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"toast__icon\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_2 = {\n  key: 0,\n  width: \"18\",\n  height: \"18\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2.2\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  width: \"18\",\n  height: \"18\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\"\n}\nconst _hoisted_4 = { class: \"toast__msg\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createVNode(_Transition, { name: \"toast\" }, {\n      default: _withCtx(() => [\n        ($props.open)\n          ? (_openBlock(), _createElementBlock(\"div\", {\n              key: 0,\n              class: _normalizeClass([\"toast\", { 'toast--error': $props.tone === 'error' }]),\n              role: \"status\",\n              \"aria-live\": \"polite\"\n            }, [\n              _createElementVNode(\"span\", _hoisted_1, [\n                ($props.tone === 'error')\n                  ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, _cache[0] || (_cache[0] = [\n                      _createElementVNode(\"circle\", {\n                        cx: \"12\",\n                        cy: \"12\",\n                        r: \"10\"\n                      }, null, -1 /* CACHED */),\n                      _createElementVNode(\"path\", { d: \"M12 8v5M12 16h.01\" }, null, -1 /* CACHED */)\n                    ])))\n                  : (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, _cache[1] || (_cache[1] = [\n                      _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                    ])))\n              ]),\n              _createElementVNode(\"span\", _hoisted_4, _toDisplayString($props.message), 1 /* TEXT */)\n            ], 2 /* CLASS */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/Toast.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/Toast.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/Toast.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/Toast.vue\";script.__scopeId = \"data-v-93e4a648\";export default script;","<template>\n  <Teleport to=\"body\">\n    <Transition name=\"confirm\">\n      <div\n        v-if=\"open\"\n        class=\"confirm\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        :aria-labelledby=\"titleId\"\n        :aria-describedby=\"messageId\"\n        @click.self=\"onCancel\"\n        @keydown.esc=\"onCancel\"\n      >\n        <div class=\"confirm__panel\">\n          <div class=\"confirm__icon\" :class=\"{ 'confirm__icon--danger': tone === 'danger' }\" aria-hidden=\"true\">\n            <slot name=\"icon\">\n              <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/>\n              </svg>\n            </slot>\n          </div>\n\n          <h2 :id=\"titleId\" class=\"confirm__title\">{{ title }}</h2>\n          <p :id=\"messageId\" class=\"confirm__message\">\n            <slot>{{ message }}</slot>\n          </p>\n\n          <div class=\"confirm__actions\">\n            <button\n              ref=\"cancelBtnEl\"\n              type=\"button\"\n              class=\"confirm__btn confirm__btn--ghost\"\n              @click=\"onCancel\"\n            >\n              {{ cancelLabel }}\n            </button>\n            <button\n              ref=\"confirmBtnEl\"\n              type=\"button\"\n              class=\"confirm__btn\"\n              :class=\"tone === 'danger' ? 'confirm__btn--danger' : 'confirm__btn--primary'\"\n              @click=\"onConfirm\"\n            >\n              {{ confirmLabel }}\n            </button>\n          </div>\n        </div>\n      </div>\n    </Transition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from \"vue\";\n\nconst props = withDefaults(\n  defineProps<{\n    open: boolean;\n    title?: string;\n    message?: string;\n    confirmLabel?: string;\n    cancelLabel?: string;\n    tone?: \"default\" | \"danger\";\n  }>(),\n  {\n    title: \"Weet je het zeker?\",\n    message: \"\",\n    confirmLabel: \"Verwijderen\",\n    cancelLabel: \"Annuleren\",\n    tone: \"danger\",\n  },\n);\n\nconst emit = defineEmits<{\n  (e: \"confirm\"): void;\n  (e: \"cancel\"): void;\n  (e: \"update:open\", value: boolean): void;\n}>();\n\nconst uid = Math.random().toString(36).slice(2, 9);\nconst titleId = computed(() => `confirm-title-${uid}`);\nconst messageId = computed(() => `confirm-message-${uid}`);\n\nconst confirmBtnEl = ref<HTMLButtonElement | null>(null);\nconst cancelBtnEl = ref<HTMLButtonElement | null>(null);\n\nlet lastFocus: HTMLElement | null = null;\n\nwatch(\n  () => props.open,\n  async (open) => {\n    if (open) {\n      lastFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n      await nextTick();\n      // Focus de cancel-knop bij destructieve dialogen — veiligste default.\n      (props.tone === \"danger\" ? cancelBtnEl.value : confirmBtnEl.value)?.focus();\n    } else {\n      lastFocus?.focus();\n      lastFocus = null;\n    }\n  },\n);\n\nfunction onCancel() {\n  emit(\"cancel\");\n  emit(\"update:open\", false);\n}\n\nfunction onConfirm() {\n  emit(\"confirm\");\n  emit(\"update:open\", false);\n}\n</script>\n\n<style scoped>\n.confirm {\n  position: fixed;\n  inset: 0;\n  z-index: 9999;\n  display: grid;\n  place-items: center;\n  padding: 24px;\n  background: rgba(8, 12, 14, 0.62);\n  backdrop-filter: blur(8px);\n  -webkit-backdrop-filter: blur(8px);\n}\n[data-theme=\"light\"] .confirm { background: rgba(18, 23, 26, 0.32); }\n\n.confirm__panel {\n  width: 100%;\n  max-width: 380px;\n  padding: 22px 22px 18px;\n  border-radius: 22px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  box-shadow: 0 32px 80px -24px rgba(0, 0, 0, 0.6),\n              0 0 0 1px rgba(255, 255, 255, 0.02);\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  text-align: left;\n  animation: confirm-rise 0.22s var(--ease-spring) both;\n}\n[data-theme=\"light\"] .confirm__panel {\n  box-shadow: 0 24px 64px -20px rgba(18, 23, 26, 0.35);\n}\n\n.confirm__icon {\n  width: 44px;\n  height: 44px;\n  border-radius: 14px;\n  display: grid;\n  place-items: center;\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n  margin-bottom: 4px;\n}\n.confirm__icon--danger {\n  background: var(--snl-koraal-soft);\n  color: var(--snl-koraal);\n}\n\n.confirm__title {\n  margin: 0;\n  font-size: 18px;\n  font-weight: 700;\n  letter-spacing: -0.015em;\n  color: var(--snl-fg);\n  line-height: 1.25;\n}\n\n.confirm__message {\n  margin: 0;\n  font-size: 13.5px;\n  line-height: 1.55;\n  color: var(--snl-fg-muted);\n}\n.confirm__message :deep(strong) { color: var(--snl-fg); font-weight: 600; }\n\n.confirm__actions {\n  display: flex;\n  gap: 8px;\n  margin-top: 8px;\n  justify-content: flex-end;\n  flex-wrap: wrap;\n}\n\n.confirm__btn {\n  height: 42px;\n  padding: 0 18px;\n  border-radius: 12px;\n  border: 1px solid transparent;\n  font-size: 13.5px;\n  font-weight: 600;\n  letter-spacing: -0.005em;\n  cursor: pointer;\n  transition: background 0.12s, color 0.12s, border-color 0.12s, transform 0.1s var(--ease-out);\n}\n.confirm__btn:active { transform: scale(0.98); }\n.confirm__btn:focus-visible {\n  outline: 2px solid var(--snl-mint);\n  outline-offset: 2px;\n}\n\n.confirm__btn--ghost {\n  background: transparent;\n  color: var(--snl-fg-muted);\n  border-color: var(--snl-line);\n}\n.confirm__btn--ghost:hover {\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  border-color: var(--snl-line-strong);\n}\n\n.confirm__btn--primary {\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n}\n.confirm__btn--primary:hover { filter: brightness(1.05); }\n\n.confirm__btn--danger {\n  background: var(--snl-koraal);\n  color: #fff;\n  box-shadow: 0 12px 28px -10px rgba(243, 108, 79, 0.55);\n}\n.confirm__btn--danger:hover { filter: brightness(1.05); }\n\n@keyframes confirm-rise {\n  from { opacity: 0; transform: translateY(8px) scale(0.97); }\n  to   { opacity: 1; transform: translateY(0)   scale(1); }\n}\n\n/* Vue <Transition name=\"confirm\"> hooks */\n.confirm-enter-active,\n.confirm-leave-active { transition: opacity 0.18s var(--ease-out); }\n.confirm-enter-from,\n.confirm-leave-to    { opacity: 0; }\n.confirm-leave-active .confirm__panel {\n  animation: confirm-fall 0.16s var(--ease-out) both;\n}\n@keyframes confirm-fall {\n  to { opacity: 0; transform: translateY(6px) scale(0.98); }\n}\n</style>\n","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withModifiers as _withModifiers, withKeys as _withKeys, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-labelledby\", \"aria-describedby\"]\nconst _hoisted_2 = { class: \"confirm__panel\" }\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = { class: \"confirm__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createVNode(_Transition, { name: \"confirm\" }, {\n      default: _withCtx(() => [\n        ($props.open)\n          ? (_openBlock(), _createElementBlock(\"div\", {\n              key: 0,\n              class: \"confirm\",\n              role: \"dialog\",\n              \"aria-modal\": \"true\",\n              \"aria-labelledby\": $setup.titleId,\n              \"aria-describedby\": $setup.messageId,\n              onClick: _withModifiers($setup.onCancel, [\"self\"]),\n              onKeydown: _withKeys($setup.onCancel, [\"esc\"])\n            }, [\n              _createElementVNode(\"div\", _hoisted_2, [\n                _createElementVNode(\"div\", {\n                  class: _normalizeClass([\"confirm__icon\", { 'confirm__icon--danger': $props.tone === 'danger' }]),\n                  \"aria-hidden\": \"true\"\n                }, [\n                  _renderSlot(_ctx.$slots, \"icon\", {}, () => [\n                    _cache[0] || (_cache[0] = _createElementVNode(\"svg\", {\n                      width: \"22\",\n                      height: \"22\",\n                      viewBox: \"0 0 24 24\",\n                      fill: \"none\",\n                      stroke: \"currentColor\",\n                      \"stroke-width\": \"2.2\",\n                      \"stroke-linecap\": \"round\",\n                      \"stroke-linejoin\": \"round\"\n                    }, [\n                      _createElementVNode(\"path\", { d: \"M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" })\n                    ], -1 /* CACHED */))\n                  ], true)\n                ], 2 /* CLASS */),\n                _createElementVNode(\"h2\", {\n                  id: $setup.titleId,\n                  class: \"confirm__title\"\n                }, _toDisplayString($props.title), 9 /* TEXT, PROPS */, _hoisted_3),\n                _createElementVNode(\"p\", {\n                  id: $setup.messageId,\n                  class: \"confirm__message\"\n                }, [\n                  _renderSlot(_ctx.$slots, \"default\", {}, () => [\n                    _createTextVNode(_toDisplayString($props.message), 1 /* TEXT */)\n                  ], true)\n                ], 8 /* PROPS */, _hoisted_4),\n                _createElementVNode(\"div\", _hoisted_5, [\n                  _createElementVNode(\"button\", {\n                    ref: \"cancelBtnEl\",\n                    type: \"button\",\n                    class: \"confirm__btn confirm__btn--ghost\",\n                    onClick: $setup.onCancel\n                  }, _toDisplayString($props.cancelLabel), 513 /* TEXT, NEED_PATCH */),\n                  _createElementVNode(\"button\", {\n                    ref: \"confirmBtnEl\",\n                    type: \"button\",\n                    class: _normalizeClass([\"confirm__btn\", $props.tone === 'danger' ? 'confirm__btn--danger' : 'confirm__btn--primary']),\n                    onClick: $setup.onConfirm\n                  }, _toDisplayString($props.confirmLabel), 3 /* TEXT, CLASS */)\n                ])\n              ])\n            ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_1))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 3 /* FORWARDED */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ConfirmDialog.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ConfirmDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ConfirmDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ConfirmDialog.vue\";script.__scopeId = \"data-v-48970e14\";export default script;","// Pure mapper: cached WRDAuth user info → Userback `user_data` shape.\n//\n// Lives in its own file (no `@webhare/*` imports) so it is unit-testable via\n// `wh runtest` — see the webhare-vue-stack skill (\"Unit-testing pure frontend\n// lib/*.ts\"). The injector in `userback.ts` imports this.\n\nexport interface UserbackInfo {\n  name: string;\n  email: string;\n}\n\nexport interface UserbackUserData {\n  id: string;\n  info: UserbackInfo;\n}\n\n// The fields cached by the `<wrdauth cachefields=\"...\">` block in\n// feedback.siteprl.xml. `getUserInfo()` returns this shape (or null).\nexport interface CachedUserInfo {\n  wrd_fullname?: string | null;\n  wrd_firstname?: string | null;\n  wrd_lastname?: string | null;\n  wrd_contact_email?: string | null;\n}\n\n/**\n * Map cached WRDAuth user info to Userback's `user_data` shape.\n *\n * The email anchors the identity (it becomes the Userback `id`), so without one\n * we return null and the widget loads anonymously. The display name prefers the\n * first/last name pair, then `wrd_fullname`, and finally the email itself.\n *\n * @param info - Cached user fields from `getUserInfo()`, or null when logged out\n * @returns The Userback `user_data` object, or null when there is no email\n */\nexport function buildUserbackUserData(info: CachedUserInfo | null): UserbackUserData | null {\n  const email = info?.wrd_contact_email?.trim();\n  if (!email)\n    return null;\n\n  const fromParts = [info?.wrd_firstname, info?.wrd_lastname]\n    .map(part => (part ?? \"\").trim())\n    .filter(Boolean)\n    .join(\" \");\n  const name = fromParts || (info?.wrd_fullname ?? \"\").trim() || email;\n\n  return { id: email, info: { name, email } };\n}\n","// Userback feedback widget integration voor de SNL Scout-app.\n//\n// Userback levert een classic snippet aan dat een global `window.Userback`\n// config zet (access_token + user_data) en dan async het widget-script laadt.\n// We doen dat runtime (net als de PWA-injectie in `pwa.ts`) i.p.v. in de witty,\n// zodat we de ingelogde gebruiker mee kunnen sturen; die kennen we pas in de\n// browser via `getUserInfo()`.\n//\n// Bewust pas aanroepen wanneer de agent is INGELOGD: dit is een login-gated\n// tool en feedback hoort van ingelogde veldagenten te komen, niet van het\n// loginscherm. `frontend.ts` roept `installUserback()` aan bij een al-ingelogde\n// sessie én vanuit de `onLogin`-callback (login zonder page-reload).\n//\n// `installUserback()` is idempotent: het script wordt maar één keer ingespoten;\n// herhaalde aanroepen verversen alleen de identiteit. Bij een login zónder\n// reload (zie frontend.ts) is het widget mogelijk al geladen; dan duwen we de\n// identiteit live via `Userback.identify()` (de runtime-update API).\n//\n// De standaard zwevende launcher-knop is bewust ONDERDRUKT\n// (`widget_settings.trigger_type = \"api\"`): die stond in de weg. Feedback geven\n// gaat via `openUserbackFeedback()`, gekoppeld aan een knop op de\n// account-pagina (zie AccountView.vue).\n\nimport { getUserInfo } from \"./runtime\";\nimport { buildUserbackUserData, type CachedUserInfo, type UserbackInfo, type UserbackUserData } from \"./userbackUserData\";\n\n// Publieke client-side widget-token (hoort in de frontend te staan; Userback\n// genereert 'm hiervoor).\nconst ACCESS_TOKEN = \"A-bSKjWfx6PEapcX4Z10yHTsPAa\";\nconst WIDGET_SRC = \"https://static.userback.io/widget/v1.js\";\n\ninterface UserbackGlobal {\n  access_token?: string;\n  user_data?: UserbackUserData;\n  // Widget-config; door v1.js gelezen bij het laden. `trigger_type: \"api\"`\n  // onderdrukt de zwevende launcher-knop; we openen zelf via `open()`.\n  widget_settings?: { trigger_type?: string;[key: string]: unknown };\n  // Beschikbaar zodra v1.js geladen is; updatet de identiteit at-runtime.\n  identify?: (userId: string, info: UserbackInfo) => void;\n  // Beschikbaar zodra v1.js geladen is; opent het feedbackformulier.\n  open?: (feedbackType?: string, destination?: string) => void;\n}\n\ndeclare global {\n  interface Window {\n    Userback?: UserbackGlobal;\n  }\n}\n\nlet scriptInjected = false;\n\n/**\n * Initialiseer (of ververs) het Userback-widget voor de ingelogde gebruiker.\n *\n * Idempotent: het widget-script wordt hoogstens één keer ingespoten; latere\n * aanroepen verversen alleen `user_data` en duwen de identiteit live door via\n * `Userback.identify()` wanneer het widget al draait.\n */\nexport function installUserback(): void {\n  window.Userback = window.Userback ?? {};\n  window.Userback.access_token = ACCESS_TOKEN;\n  // Onderdruk de zwevende launcher-knop. Moet vóór het injecteren van het\n  // script gezet zijn, anders rendert v1.js 'm alsnog. Idempotent: bestaande\n  // settings blijven behouden.\n  window.Userback.widget_settings = { ...window.Userback.widget_settings, trigger_type: \"api\" };\n\n  const userData = buildUserbackUserData(getUserInfo<CachedUserInfo>() ?? null);\n  if (userData) {\n    // Gelezen door v1.js bij het laden (eerste keer).\n    window.Userback.user_data = userData;\n    // Al geladen (re-login zonder reload) → identiteit live bijwerken.\n    window.Userback.identify?.(userData.id, userData.info);\n  }\n\n  if (scriptInjected)\n    return;\n  scriptInjected = true;\n\n  const script = document.createElement(\"script\");\n  script.async = true;\n  script.src = WIDGET_SRC;\n  (document.head || document.body).appendChild(script);\n}\n\n/**\n * Open het Userback-feedbackformulier.\n *\n * De zwevende launcher is onderdrukt (zie `installUserback`), dus dit is de\n * enige ingang, gekoppeld aan de \"Feedback geven\"-knop op de account-pagina.\n * `Userback.open` bestaat pas zodra v1.js geladen is; we zorgen eerst dat het\n * script is ingespoten (idempotent). De account-pagina is alleen bereikbaar als\n * ingelogde agent en `installUserback()` draait dan al bij mount, dus het widget\n * is in de praktijk al geladen wanneer hierop geklikt wordt.\n */\nexport function openUserbackFeedback(): void {\n  installUserback();\n  window.Userback?.open?.(\"general\");\n}\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"account\" }\nconst _hoisted_2 = { class: \"account__header\" }\nconst _hoisted_3 = {\n  class: \"account__avatar\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_4 = { class: \"account__head-text\" }\nconst _hoisted_5 = { class: \"account__name\" }\nconst _hoisted_6 = {\n  key: 0,\n  class: \"account__email\"\n}\nconst _hoisted_7 = { class: \"account__group\" }\nconst _hoisted_8 = { class: \"account__row\" }\nconst _hoisted_9 = { class: \"account__row\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = { class: \"account__region-val\" }\nconst _hoisted_12 = {\n  key: 0,\n  class: \"account__region-pop\"\n}\nconst _hoisted_13 = [\"onMousedown\"]\nconst _hoisted_14 = {\n  key: 0,\n  width: \"14\",\n  height: \"14\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"var(--snl-mint)\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_15 = { class: \"account__group\" }\nconst _hoisted_16 = { class: \"account__group\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"span\", _hoisted_3, _toDisplayString($setup.initials), 1 /* TEXT */),\n      _createElementVNode(\"div\", _hoisted_4, [\n        _cache[5] || (_cache[5] = _createElementVNode(\"p\", { class: \"account__kicker\" }, \"Account\", -1 /* CACHED */)),\n        _createElementVNode(\"h1\", _hoisted_5, _toDisplayString($setup.displayName), 1 /* TEXT */),\n        ($setup.email && $setup.email !== $setup.displayName)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, _toDisplayString($setup.email), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    _createElementVNode(\"section\", _hoisted_7, [\n      _cache[10] || (_cache[10] = _createElementVNode(\"h2\", { class: \"account__group-title\" }, \"Voorkeuren\", -1 /* CACHED */)),\n      _createElementVNode(\"div\", _hoisted_8, [\n        _cache[6] || (_cache[6] = _createElementVNode(\"div\", { class: \"account__row-label\" }, [\n          _createElementVNode(\"span\", { class: \"account__row-title\" }, \"Donkere modus\"),\n          _createElementVNode(\"span\", { class: \"account__row-sub\" }, \"Wissel tussen licht en donker thema.\")\n        ], -1 /* CACHED */)),\n        _createVNode($setup[\"ThemeToggle\"])\n      ]),\n      _createElementVNode(\"div\", _hoisted_9, [\n        _cache[9] || (_cache[9] = _createElementVNode(\"div\", { class: \"account__row-label\" }, [\n          _createElementVNode(\"span\", { class: \"account__row-title\" }, \"Voorkeursregio\"),\n          _createElementVNode(\"span\", { class: \"account__row-sub\" }, \"Wordt automatisch als filter aangezet bij het openen van de kaart.\")\n        ], -1 /* CACHED */)),\n        _createElementVNode(\"div\", {\n          class: \"account__region\",\n          onFocusout: $setup.onRegionBlur\n        }, [\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"account__region-btn\",\n            disabled: $setup.regionLoading,\n            onClick: _cache[0] || (_cache[0] = $event => ($setup.regionOpen = !$setup.regionOpen))\n          }, [\n            _createElementVNode(\"span\", _hoisted_11, _toDisplayString($setup.selectedRegion), 1 /* TEXT */),\n            _cache[7] || (_cache[7] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\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: \"m6 9 6 6 6-6\" })\n            ], -1 /* CACHED */))\n          ], 8 /* PROPS */, _hoisted_10),\n          ($setup.regionOpen)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.regionOptions, (r) => {\n                  return (_openBlock(), _createElementBlock(\"button\", {\n                    key: r,\n                    type: \"button\",\n                    class: _normalizeClass([\"account__region-item\", { 'is-on': r === $setup.selectedRegion }]),\n                    onMousedown: _withModifiers($event => ($setup.selectRegion(r)), [\"prevent\"])\n                  }, [\n                    _createTextVNode(_toDisplayString(r) + \" \", 1 /* TEXT */),\n                    (r === $setup.selectedRegion)\n                      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_14, _cache[8] || (_cache[8] = [\n                          _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                        ])))\n                      : _createCommentVNode(\"v-if\", true)\n                  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_13))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 32 /* NEED_HYDRATION */)\n      ])\n    ]),\n    _createElementVNode(\"section\", _hoisted_15, [\n      _cache[12] || (_cache[12] = _createElementVNode(\"h2\", { class: \"account__group-title\" }, \"Feedback\", -1 /* CACHED */)),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"account__feedback-btn\",\n        onClick: _cache[1] || (_cache[1] = (...args) => ($setup.openUserbackFeedback && $setup.openUserbackFeedback(...args)))\n      }, _cache[11] || (_cache[11] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 24 24\",\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: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" })\n        ], -1 /* CACHED */),\n        _createTextVNode(\" Feedback geven \", -1 /* CACHED */)\n      ])),\n      _cache[13] || (_cache[13] = _createElementVNode(\"p\", { class: \"account__feedback-hint\" }, \" Tip, idee of bug gevonden? Laat het ons weten. Je kunt er een schermafbeelding bij maken. \", -1 /* CACHED */))\n    ]),\n    _createElementVNode(\"section\", _hoisted_16, [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"account__logout\",\n        onClick: _cache[2] || (_cache[2] = $event => ($setup.logoutDialogOpen = true))\n      }, _cache[14] || (_cache[14] = [\n        _createElementVNode(\"svg\", {\n          width: \"16\",\n          height: \"16\",\n          viewBox: \"0 0 24 24\",\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: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" }),\n          _createElementVNode(\"path\", { d: \"M16 17l5-5-5-5\" }),\n          _createElementVNode(\"path\", { d: \"M21 12H9\" })\n        ], -1 /* CACHED */),\n        _createTextVNode(\" Uitloggen \", -1 /* CACHED */)\n      ]))\n    ]),\n    _cache[17] || (_cache[17] = _createElementVNode(\"p\", { class: \"account__app-info\" }, \" SNL Scout · Statiegeld NL \", -1 /* CACHED */)),\n    _createVNode($setup[\"Toast\"], {\n      open: $setup.toastOpen,\n      message: $setup.toastMessage,\n      tone: $setup.toastTone,\n      onClose: _cache[3] || (_cache[3] = $event => ($setup.toastOpen = false))\n    }, null, 8 /* PROPS */, [\"open\", \"message\", \"tone\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.logoutDialogOpen,\n      \"onUpdate:open\": _cache[4] || (_cache[4] = $event => (($setup.logoutDialogOpen) = $event)),\n      title: \"Uitloggen?\",\n      \"confirm-label\": \"Uitloggen\",\n      \"cancel-label\": \"Annuleren\",\n      tone: \"danger\",\n      onConfirm: $setup.handleLogout\n    }, {\n      icon: _withCtx(() => _cache[15] || (_cache[15] = [\n        _createElementVNode(\"svg\", {\n          width: \"22\",\n          height: \"22\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"2.2\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" }),\n          _createElementVNode(\"path\", { d: \"M16 17l5-5-5-5\" }),\n          _createElementVNode(\"path\", { d: \"M21 12H9\" })\n        ], -1 /* CACHED */)\n      ])),\n      default: _withCtx(() => [\n        _cache[16] || (_cache[16] = _createTextVNode(\" Je wordt afgemeld bij SNL Scout en moet daarna opnieuw inloggen. \", -1 /* CACHED */))\n      ]),\n      _: 1 /* STABLE */,\n      __: [16]\n    }, 8 /* PROPS */, [\"open\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AccountView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AccountView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AccountView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AccountView.vue\";script.__scopeId = \"data-v-6d4b3cff\";export default script;","<template>\n  <div class=\"addloc\">\n    <header class=\"addloc__head\">\n      <a :href=\"urlVerkennen()\" class=\"addloc__back\" aria-label=\"Terug naar Verkennen\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M15 18l-6-6 6-6\"/>\n        </svg>\n      </a>\n      <div>\n        <p class=\"addloc__kicker\">Handmatig toevoegen</p>\n        <h1 class=\"addloc__title\">Locatie toevoegen</h1>\n      </div>\n    </header>\n\n    <p class=\"addloc__lede\">\n      Staat een locatie niet in de lijst? Voeg 'm hier toe met het adres.\n      We zoeken de coördinaten er automatisch bij, zodat je er meteen een\n      analyse op kunt draaien en feedback kunt geven.\n    </p>\n\n    <form class=\"addloc__form\" @submit.prevent=\"onSubmit\">\n      <label class=\"addloc__field\">\n        <span class=\"addloc__label\">Adres <span class=\"addloc__req\">*</span></span>\n        <input\n          v-model=\"address\"\n          type=\"text\"\n          class=\"addloc__input\"\n          placeholder=\"Straat + huisnummer, plaats\"\n          autocomplete=\"off\"\n          :disabled=\"isSaving\"\n          @input=\"onEdit\"\n        />\n        <span class=\"addloc__hint\">Bijv. \"Damrak 1, Amsterdam\". Hoe vollediger, hoe beter de match.</span>\n      </label>\n\n      <label class=\"addloc__field\">\n        <span class=\"addloc__label\">Bedrijfsnaam</span>\n        <input\n          v-model=\"companyName\"\n          type=\"text\"\n          class=\"addloc__input\"\n          placeholder=\"Bijv. Shell, Gamma, Intratuin…\"\n          autocomplete=\"off\"\n          :disabled=\"isSaving\"\n          @input=\"onEdit\"\n        />\n      </label>\n\n      <label class=\"addloc__field\">\n        <span class=\"addloc__label\">Soort</span>\n        <div class=\"addloc__select-wrap\">\n          <select v-model=\"locationType\" class=\"addloc__select\" :disabled=\"isSaving\">\n            <option value=\"\">Onbekend / anders</option>\n            <option v-for=\"t in MANUAL_LOCATION_TYPES\" :key=\"t.id\" :value=\"t.id\">{{ t.label }}</option>\n          </select>\n          <svg class=\"addloc__select-chevron\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"m6 9 6 6 6-6\"/>\n          </svg>\n        </div>\n        <span class=\"addloc__hint\">Helpt de analyse. Weet je het niet zeker? Laat 'm op \"Onbekend\".</span>\n      </label>\n\n      <!-- Duplicaat-waarschuwing: server vond locatie(s) vlakbij het adres. -->\n      <div v-if=\"duplicates.length > 0\" class=\"addloc__dupes\" role=\"alert\">\n        <div class=\"addloc__dupes-head\">\n          <span class=\"addloc__dupes-icon\" aria-hidden=\"true\">⚠</span>\n          <div>\n            <strong>Er staat al iets vlakbij</strong>\n            <p>Controleer of dit niet dezelfde locatie is voordat je 'm toevoegt:</p>\n          </div>\n        </div>\n        <ul class=\"addloc__dupes-list\">\n          <li v-for=\"d in duplicates\" :key=\"d.id\">\n            <a :href=\"urlLocation(d.id)\" class=\"addloc__dupe-link\">\n              <span class=\"addloc__dupe-name\">{{ d.companyName }}</span>\n              <span class=\"addloc__dupe-meta\">{{ d.address }} · {{ formatMeters(d.distanceMeters) }}</span>\n            </a>\n          </li>\n        </ul>\n        <div class=\"addloc__dupes-actions\">\n          <button type=\"button\" class=\"addloc__btn addloc__btn--ghost\" :disabled=\"isSaving\" @click=\"onForceSubmit\">\n            Toch toevoegen\n          </button>\n        </div>\n      </div>\n\n      <p v-if=\"errorMessage\" class=\"addloc__error\">{{ errorMessage }}</p>\n\n      <button type=\"submit\" class=\"addloc__btn addloc__btn--primary\" :disabled=\"isSaving || !address.trim()\">\n        <span v-if=\"isSaving\" class=\"addloc__spinner\" aria-hidden=\"true\"></span>\n        {{ isSaving ? \"Bezig met toevoegen…\" : \"Locatie toevoegen\" }}\n      </button>\n    </form>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { createManualLocation } from \"../lib/api\";\nimport { MANUAL_LOCATION_TYPES } from \"../lib/verkennenOptions\";\nimport { urlLocation, urlVerkennen } from \"../lib/urls\";\n\ninterface Duplicate {\n  id: number;\n  companyName: string;\n  address: string;\n  distanceMeters: number;\n}\n\nconst route = useRoute();\nconst router = useRouter();\n\n// Prefill the address from a `?q=` query (the Verkennen/Home entry-points pass\n// the term the agent just searched for, so a \"0 resultaten → toevoegen\" jump\n// lands with the address already typed).\nconst prefill = typeof route.query.q === \"string\" ? route.query.q : \"\";\nconst address = ref(prefill);\nconst companyName = ref(\"\");\nconst locationType = ref(\"\");\n\nconst isSaving = ref(false);\nconst errorMessage = ref<string | null>(null);\nconst duplicates = ref<Duplicate[]>([]);\n\nfunction formatMeters(m: number): string {\n  return m >= 1000 ? `${(m / 1000).toFixed(1)} km` : `${m} m`;\n}\n\n// Editing any field invalidates a shown duplicate warning — the next submit\n// re-checks against the (possibly changed) address.\nfunction onEdit() {\n  if (duplicates.value.length > 0) duplicates.value = [];\n  errorMessage.value = null;\n}\n\nasync function create(force: boolean) {\n  if (!address.value.trim() || isSaving.value) return;\n  isSaving.value = true;\n  errorMessage.value = null;\n  try {\n    const result = await createManualLocation({\n      address: address.value.trim(),\n      companyName: companyName.value.trim() || null,\n      locationType: locationType.value || null,\n      force,\n    });\n    if (result.locationId === null) {\n      // Nearby locations found — show the warning and let the agent confirm.\n      duplicates.value = result.duplicates;\n      return;\n    }\n    // Success → straight to the new location's detail, where \"Analyse starten\"\n    // kicks off images + AI. replace() so back doesn't return to the form.\n    await router.replace({ name: \"location\", params: { id: String(result.locationId) } });\n  } catch (err) {\n    errorMessage.value = err instanceof Error ? err.message : \"Toevoegen mislukte. Probeer het opnieuw.\";\n  } finally {\n    isSaving.value = false;\n  }\n}\n\nfunction onSubmit() {\n  void create(false);\n}\n\nfunction onForceSubmit() {\n  void create(true);\n}\n</script>\n\n<style scoped>\n.addloc {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  padding: 0 0 32px;\n  max-width: 620px;\n  width: 100%;\n  margin: 0 auto;\n}\n\n.addloc__head {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 18px 22px 4px;\n}\n.addloc__back {\n  display: grid;\n  place-items: center;\n  width: 38px;\n  height: 38px;\n  border-radius: 12px;\n  flex-shrink: 0;\n  color: var(--snl-fg);\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  text-decoration: none;\n}\n.addloc__back:hover { background: var(--snl-surface-2); border-color: var(--snl-line-strong); }\n.addloc__kicker {\n  margin: 0;\n  font-size: 11px;\n  letter-spacing: 0.16em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n}\n.addloc__title {\n  margin: 2px 0 0;\n  font-size: 22px;\n  font-weight: 800;\n  letter-spacing: -0.02em;\n  color: var(--snl-fg);\n}\n\n.addloc__lede {\n  margin: 12px 22px 20px;\n  font-size: 14px;\n  line-height: 1.55;\n  color: var(--snl-fg-muted);\n}\n\n.addloc__form {\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n  padding: 0 22px;\n}\n\n.addloc__field {\n  display: flex;\n  flex-direction: column;\n  gap: 7px;\n}\n.addloc__label {\n  font-size: 13px;\n  font-weight: 700;\n  color: var(--snl-fg);\n}\n.addloc__req { color: var(--snl-koraal); }\n.addloc__input {\n  height: 50px;\n  padding: 0 16px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  font-family: inherit;\n  font-size: 15px;\n  color: var(--snl-fg);\n  outline: none;\n  transition: border-color 0.2s, box-shadow 0.2s;\n}\n.addloc__input::placeholder { color: var(--snl-fg-placeholder); }\n.addloc__input:focus {\n  border-color: rgba(143, 204, 177, 0.5);\n  box-shadow: 0 0 0 4px rgba(143, 204, 177, 0.12);\n}\n.addloc__input:disabled { opacity: 0.6; }\n.addloc__hint {\n  font-size: 12px;\n  color: var(--snl-fg-muted);\n  line-height: 1.4;\n}\n\n.addloc__select-wrap { position: relative; }\n.addloc__select {\n  width: 100%;\n  height: 50px;\n  padding: 0 40px 0 16px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  font-family: inherit;\n  font-size: 15px;\n  color: var(--snl-fg);\n  outline: none;\n  appearance: none;\n  -webkit-appearance: none;\n  cursor: pointer;\n}\n.addloc__select:focus {\n  border-color: rgba(143, 204, 177, 0.5);\n  box-shadow: 0 0 0 4px rgba(143, 204, 177, 0.12);\n}\n.addloc__select:disabled { opacity: 0.6; }\n.addloc__select-chevron {\n  position: absolute;\n  right: 14px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: var(--snl-fg-muted);\n  pointer-events: none;\n}\n\n/* Duplicaat-waarschuwing */\n.addloc__dupes {\n  padding: 14px 16px;\n  border: 1px solid rgba(242, 180, 65, 0.4);\n  border-radius: 16px;\n  background: rgba(242, 180, 65, 0.08);\n}\n.addloc__dupes-head {\n  display: flex;\n  gap: 10px;\n  align-items: flex-start;\n}\n.addloc__dupes-icon {\n  flex-shrink: 0;\n  color: var(--snl-golden);\n  font-size: 16px;\n  line-height: 1.4;\n}\n.addloc__dupes-head strong { font-size: 14px; color: var(--snl-fg); }\n.addloc__dupes-head p {\n  margin: 2px 0 0;\n  font-size: 12.5px;\n  color: var(--snl-fg-muted);\n  line-height: 1.45;\n}\n.addloc__dupes-list {\n  list-style: none;\n  margin: 12px 0 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n.addloc__dupe-link {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  padding: 10px 12px;\n  border-radius: 12px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  text-decoration: none;\n}\n.addloc__dupe-link:hover { border-color: var(--snl-line-strong); background: var(--snl-surface-2); }\n.addloc__dupe-name { font-size: 13.5px; font-weight: 700; color: var(--snl-fg); }\n.addloc__dupe-meta { font-size: 12px; color: var(--snl-fg-muted); }\n.addloc__dupes-actions { margin-top: 12px; }\n\n.addloc__error {\n  margin: 0;\n  padding: 12px 14px;\n  border: 1px solid rgba(243, 108, 79, 0.4);\n  border-radius: 14px;\n  background: rgba(243, 108, 79, 0.08);\n  font-size: 13px;\n  color: var(--snl-koraal);\n  line-height: 1.5;\n}\n\n.addloc__btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  height: 52px;\n  padding: 0 22px;\n  border-radius: 14px;\n  font-family: inherit;\n  font-size: 15px;\n  font-weight: 700;\n  cursor: pointer;\n  border: 1px solid transparent;\n  transition: background 0.15s, border-color 0.15s, transform 0.08s, opacity 0.15s;\n}\n.addloc__btn:active:not(:disabled) { transform: translateY(1px); }\n.addloc__btn:disabled { opacity: 0.55; cursor: default; }\n.addloc__btn--primary {\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n}\n.addloc__btn--primary:hover:not(:disabled) { background: var(--snl-mint-strong, var(--snl-mint)); }\n.addloc__btn--ghost {\n  height: 44px;\n  background: transparent;\n  border-color: var(--snl-golden);\n  color: var(--snl-golden);\n  font-size: 14px;\n}\n.addloc__btn--ghost:hover:not(:disabled) { background: rgba(242, 180, 65, 0.12); }\n\n.addloc__spinner {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  border: 2px solid rgba(0, 0, 0, 0.25);\n  border-top-color: var(--snl-ink);\n  animation: addloc-spin 0.7s linear infinite;\n}\n@keyframes addloc-spin { to { transform: rotate(360deg); } }\n\n@media (min-width: 960px) {\n  .addloc__head,\n  .addloc__lede,\n  .addloc__form { padding-left: 0; padding-right: 0; }\n  .addloc__lede { margin-left: 0; margin-right: 0; }\n}\n</style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, vModelSelect as _vModelSelect, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"addloc\" }\nconst _hoisted_2 = { class: \"addloc__head\" }\nconst _hoisted_3 = [\"href\"]\nconst _hoisted_4 = { class: \"addloc__field\" }\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = { class: \"addloc__field\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"addloc__field\" }\nconst _hoisted_9 = { class: \"addloc__select-wrap\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n  key: 0,\n  class: \"addloc__dupes\",\n  role: \"alert\"\n}\nconst _hoisted_13 = { class: \"addloc__dupes-list\" }\nconst _hoisted_14 = [\"href\"]\nconst _hoisted_15 = { class: \"addloc__dupe-name\" }\nconst _hoisted_16 = { class: \"addloc__dupe-meta\" }\nconst _hoisted_17 = { class: \"addloc__dupes-actions\" }\nconst _hoisted_18 = [\"disabled\"]\nconst _hoisted_19 = {\n  key: 1,\n  class: \"addloc__error\"\n}\nconst _hoisted_20 = [\"disabled\"]\nconst _hoisted_21 = {\n  key: 0,\n  class: \"addloc__spinner\",\n  \"aria-hidden\": \"true\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"a\", {\n        href: $setup.urlVerkennen(),\n        class: \"addloc__back\",\n        \"aria-label\": \"Terug naar Verkennen\"\n      }, _cache[3] || (_cache[3] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"2.2\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M15 18l-6-6 6-6\" })\n        ], -1 /* CACHED */)\n      ]), 8 /* PROPS */, _hoisted_3),\n      _cache[4] || (_cache[4] = _createElementVNode(\"div\", null, [\n        _createElementVNode(\"p\", { class: \"addloc__kicker\" }, \"Handmatig toevoegen\"),\n        _createElementVNode(\"h1\", { class: \"addloc__title\" }, \"Locatie toevoegen\")\n      ], -1 /* CACHED */))\n    ]),\n    _cache[13] || (_cache[13] = _createElementVNode(\"p\", { class: \"addloc__lede\" }, \" Staat een locatie niet in de lijst? Voeg 'm hier toe met het adres. We zoeken de coördinaten er automatisch bij, zodat je er meteen een analyse op kunt draaien en feedback kunt geven. \", -1 /* CACHED */)),\n    _createElementVNode(\"form\", {\n      class: \"addloc__form\",\n      onSubmit: _withModifiers($setup.onSubmit, [\"prevent\"])\n    }, [\n      _createElementVNode(\"label\", _hoisted_4, [\n        _cache[5] || (_cache[5] = _createElementVNode(\"span\", { class: \"addloc__label\" }, [\n          _createTextVNode(\"Adres \"),\n          _createElementVNode(\"span\", { class: \"addloc__req\" }, \"*\")\n        ], -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"input\", {\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.address) = $event)),\n          type: \"text\",\n          class: \"addloc__input\",\n          placeholder: \"Straat + huisnummer, plaats\",\n          autocomplete: \"off\",\n          disabled: $setup.isSaving,\n          onInput: $setup.onEdit\n        }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_5), [\n          [_vModelText, $setup.address]\n        ]),\n        _cache[6] || (_cache[6] = _createElementVNode(\"span\", { class: \"addloc__hint\" }, \"Bijv. \\\"Damrak 1, Amsterdam\\\". Hoe vollediger, hoe beter de match.\", -1 /* CACHED */))\n      ]),\n      _createElementVNode(\"label\", _hoisted_6, [\n        _cache[7] || (_cache[7] = _createElementVNode(\"span\", { class: \"addloc__label\" }, \"Bedrijfsnaam\", -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"input\", {\n          \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.companyName) = $event)),\n          type: \"text\",\n          class: \"addloc__input\",\n          placeholder: \"Bijv. Shell, Gamma, Intratuin…\",\n          autocomplete: \"off\",\n          disabled: $setup.isSaving,\n          onInput: $setup.onEdit\n        }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_7), [\n          [_vModelText, $setup.companyName]\n        ])\n      ]),\n      _createElementVNode(\"label\", _hoisted_8, [\n        _cache[10] || (_cache[10] = _createElementVNode(\"span\", { class: \"addloc__label\" }, \"Soort\", -1 /* CACHED */)),\n        _createElementVNode(\"div\", _hoisted_9, [\n          _withDirectives(_createElementVNode(\"select\", {\n            \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.locationType) = $event)),\n            class: \"addloc__select\",\n            disabled: $setup.isSaving\n          }, [\n            _cache[8] || (_cache[8] = _createElementVNode(\"option\", { value: \"\" }, \"Onbekend / anders\", -1 /* CACHED */)),\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.MANUAL_LOCATION_TYPES, (t) => {\n              return (_openBlock(), _createElementBlock(\"option\", {\n                key: t.id,\n                value: t.id\n              }, _toDisplayString(t.label), 9 /* TEXT, PROPS */, _hoisted_11))\n            }), 128 /* KEYED_FRAGMENT */))\n          ], 8 /* PROPS */, _hoisted_10), [\n            [_vModelSelect, $setup.locationType]\n          ]),\n          _cache[9] || (_cache[9] = _createElementVNode(\"svg\", {\n            class: \"addloc__select-chevron\",\n            width: \"16\",\n            height: \"16\",\n            viewBox: \"0 0 24 24\",\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: \"m6 9 6 6 6-6\" })\n          ], -1 /* CACHED */))\n        ]),\n        _cache[11] || (_cache[11] = _createElementVNode(\"span\", { class: \"addloc__hint\" }, \"Helpt de analyse. Weet je het niet zeker? Laat 'm op \\\"Onbekend\\\".\", -1 /* CACHED */))\n      ]),\n      _createCommentVNode(\" Duplicaat-waarschuwing: server vond locatie(s) vlakbij het adres. \"),\n      ($setup.duplicates.length > 0)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n            _cache[12] || (_cache[12] = _createElementVNode(\"div\", { class: \"addloc__dupes-head\" }, [\n              _createElementVNode(\"span\", {\n                class: \"addloc__dupes-icon\",\n                \"aria-hidden\": \"true\"\n              }, \"⚠\"),\n              _createElementVNode(\"div\", null, [\n                _createElementVNode(\"strong\", null, \"Er staat al iets vlakbij\"),\n                _createElementVNode(\"p\", null, \"Controleer of dit niet dezelfde locatie is voordat je 'm toevoegt:\")\n              ])\n            ], -1 /* CACHED */)),\n            _createElementVNode(\"ul\", _hoisted_13, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.duplicates, (d) => {\n                return (_openBlock(), _createElementBlock(\"li\", {\n                  key: d.id\n                }, [\n                  _createElementVNode(\"a\", {\n                    href: $setup.urlLocation(d.id),\n                    class: \"addloc__dupe-link\"\n                  }, [\n                    _createElementVNode(\"span\", _hoisted_15, _toDisplayString(d.companyName), 1 /* TEXT */),\n                    _createElementVNode(\"span\", _hoisted_16, _toDisplayString(d.address) + \" · \" + _toDisplayString($setup.formatMeters(d.distanceMeters)), 1 /* TEXT */)\n                  ], 8 /* PROPS */, _hoisted_14)\n                ]))\n              }), 128 /* KEYED_FRAGMENT */))\n            ]),\n            _createElementVNode(\"div\", _hoisted_17, [\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"addloc__btn addloc__btn--ghost\",\n                disabled: $setup.isSaving,\n                onClick: $setup.onForceSubmit\n              }, \" Toch toevoegen \", 8 /* PROPS */, _hoisted_18)\n            ])\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.errorMessage)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_19, _toDisplayString($setup.errorMessage), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"button\", {\n        type: \"submit\",\n        class: \"addloc__btn addloc__btn--primary\",\n        disabled: $setup.isSaving || !$setup.address.trim()\n      }, [\n        ($setup.isSaving)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_21))\n          : _createCommentVNode(\"v-if\", true),\n        _createTextVNode(\" \" + _toDisplayString($setup.isSaving ? \"Bezig met toevoegen…\" : \"Locatie toevoegen\"), 1 /* TEXT */)\n      ], 8 /* PROPS */, _hoisted_20)\n    ], 32 /* NEED_HYDRATION */)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AddLocationView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AddLocationView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AddLocationView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/AddLocationView.vue\";script.__scopeId = \"data-v-bbd9d80b\";export default script;","<template>\n  <div class=\"bd\">\n    <div class=\"bd__topbar\">\n      <button type=\"button\" class=\"bd__back\" aria-label=\"Terug naar beoordelingen\" @click=\"goBack\">‹</button>\n      <span class=\"bd__topbar-title\">Beoordeling</span>\n    </div>\n\n    <div v-if=\"isLoading\" class=\"bd__state\">Beoordeling laden…</div>\n\n    <div v-else-if=\"!detail\" class=\"bd__empty\">\n      <h2>Beoordeling niet gevonden</h2>\n      <p>Deze beoordeling bestaat niet (meer) of je hebt er geen toegang toe.</p>\n      <button type=\"button\" class=\"bd__empty-cta\" @click=\"goBack\">Terug naar beoordelingen</button>\n    </div>\n\n    <template v-else>\n      <!-- Intro: locatie + AI-score + inzender/datum + status -->\n      <header class=\"bd__head\">\n        <div class=\"bd__head-main\">\n          <p class=\"bd__kicker\">Ingediende beoordeling</p>\n          <h1 class=\"bd__title\">{{ detail.companyName }}</h1>\n          <p v-if=\"detail.city\" class=\"bd__city\">{{ detail.city }}</p>\n          <p class=\"bd__meta\">\n            Door {{ detail.submittedBy || \"Onbekend\" }} · {{ formatDate(detail.createdAt) }}\n          </p>\n        </div>\n        <div class=\"bd__head-aside\">\n          <span\n            v-if=\"detail.latestScore !== null\"\n            class=\"bd__score\"\n            :style=\"scoreStyle\"\n            :title=\"`AI-score: ${detail.latestScore}`\"\n          >\n            AI {{ detail.latestScore }}\n          </span>\n          <span class=\"bd__status\" :class=\"hasAttention ? 'bd__status--attention' : 'bd__status--ok'\">\n            <svg v-if=\"!hasAttention\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M20 6 9 17l-5-5\"/>\n            </svg>\n            {{ hasAttention ? \"Opmerkingen\" : \"Beoordeeld\" }}\n          </span>\n        </div>\n      </header>\n\n      <!-- Per-dimensie verdict + toelichting -->\n      <section class=\"bd__card\">\n        <h2 class=\"bd__card-title\">Beoordeling per dimensie</h2>\n        <ul class=\"bd__dims\">\n          <li v-for=\"row in dimensionRows\" :key=\"row.key\" class=\"bd-dim\">\n            <div class=\"bd-dim__head\">\n              <span class=\"bd-dim__label\">{{ row.label }}</span>\n              <span class=\"bd-dim__verdict\" :class=\"verdictClass(row.rating)\">\n                <svg v-if=\"row.rating === 'agree'\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                  <path d=\"M20 6 9 17l-5-5\"/>\n                </svg>\n                <svg v-else-if=\"row.rating === 'disagree'\" width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                  <path d=\"M18 6 6 18M6 6l12 12\"/>\n                </svg>\n                {{ verdictLabel(row.rating) }}\n              </span>\n            </div>\n            <div v-if=\"row.aiExplanation\" class=\"bd-dim__ai\">\n              <span class=\"bd-dim__box-label\">AI-beoordeling</span>\n              <p class=\"bd-dim__box-text\">{{ row.aiExplanation }}</p>\n            </div>\n            <div v-if=\"row.reason\" class=\"bd-dim__reaction\">\n              <span class=\"bd-dim__box-label\">{{ reactionBoxLabel }}</span>\n              <p class=\"bd-dim__box-text\">{{ row.reason }}</p>\n            </div>\n          </li>\n        </ul>\n      </section>\n\n      <!-- Eindoordeel -->\n      <section v-if=\"detail.overallRating\" class=\"bd__card\">\n        <h2 class=\"bd__card-title\">Eindoordeel</h2>\n        <div class=\"bd-dim__head\">\n          <span class=\"bd-dim__label\">{{ overallVerdictBoxLabel }}</span>\n          <span class=\"bd-dim__verdict\" :class=\"verdictClass(detail.overallRating)\">\n            <svg v-if=\"detail.overallRating === 'agree'\" width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M20 6 9 17l-5-5\"/>\n            </svg>\n            <svg v-else width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M18 6 6 18M6 6l12 12\"/>\n            </svg>\n            {{ verdictLabel(detail.overallRating) }}\n          </span>\n        </div>\n        <p v-if=\"detail.reasonOverallRating\" class=\"bd-dim__reason\">{{ detail.reasonOverallRating }}</p>\n      </section>\n\n      <!-- Vrije tekst -->\n      <section v-if=\"detail.generalNotes || detail.aiMissesNotes\" class=\"bd__card\">\n        <h2 class=\"bd__card-title\">Opmerkingen</h2>\n        <div v-if=\"detail.aiMissesNotes\" class=\"bd__note\">\n          <span class=\"bd__note-label\">Wat de AI mist</span>\n          <p class=\"bd__note-text\">{{ detail.aiMissesNotes }}</p>\n        </div>\n        <div v-if=\"detail.generalNotes\" class=\"bd__note\">\n          <span class=\"bd__note-label\">Overige opmerkingen</span>\n          <p class=\"bd__note-text\">{{ detail.generalNotes }}</p>\n        </div>\n      </section>\n\n      <!-- CTA -->\n      <button type=\"button\" class=\"bd__cta\" @click=\"goToLocation\">\n        <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M12 5v14M5 12h14\"/>\n        </svg>\n        Doe nieuwe beoordeling\n      </button>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { getFeedbackDetail } from \"../lib/api\";\nimport { parseScope, scopeToQuery } from \"../lib/beoordelingenScope\";\nimport { overallVerdictLabel, reactionLabel } from \"../lib/feedbackLabels\";\nimport { scoutColor, scoutTextColor } from \"../lib/scoutScore\";\nimport type { Agreement, FeedbackDetail } from \"../lib/types\";\n\nconst props = defineProps<{ feedbackId: number }>();\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst detail = ref<FeedbackDetail | null>(null);\nconst isLoading = ref(true);\n\n// Same dimension order + labels as the Beoordelingen list view so the field\n// agent reads them in a familiar order. The backend returns dimensions in a\n// different order; we look each up by key.\nconst CRITERIA: Array<{ key: FeedbackDetail[\"dimensions\"][number][\"key\"]; label: string }> = [\n  { key: \"natureSize\", label: \"Locatie & omvang\" },\n  { key: \"parkingSpace\", label: \"Parkeerruimte\" },\n  { key: \"accessibility\", label: \"Bereikbaarheid\" },\n  { key: \"visibility\", label: \"Zichtbaarheid\" },\n  { key: \"extraServices\", label: \"Extra diensten\" },\n];\n\nconst dimensionRows = computed(() =>\n  CRITERIA.map((c) => {\n    const dim = detail.value?.dimensions.find((d) => d.key === c.key);\n    return {\n      key: c.key,\n      label: c.label,\n      rating: dim?.rating ?? null,\n      reason: dim?.reason ?? null,\n      aiExplanation: dim?.aiExplanation ?? null,\n    };\n  }),\n);\n\nconst hasAttention = computed(() =>\n  (detail.value?.dimensions ?? []).some((d) => d.rating === \"disagree\")\n  || detail.value?.overallRating === \"disagree\",\n);\n\nconst scoreStyle = computed(() => {\n  const score = detail.value?.latestScore ?? null;\n  return { background: scoutColor(score), color: scoutTextColor(score) };\n});\n\n// Personalize the per-dimension reaction label with the submitter's first name\n// (e.g. \"Reactie van Wouter\"), falling back to \"Reactie veldwerker\".\nconst reactionBoxLabel = computed(() => reactionLabel(detail.value?.submittedBy));\n\n// Eindoordeel row label: \"Algemeen oordeel van Wouter\", falling back to\n// \"Algemeen oordeel veldagent\".\nconst overallVerdictBoxLabel = computed(() => overallVerdictLabel(detail.value?.submittedBy));\n\n// vue-router reuses this component instance when only :id changes, so onMounted\n// fires once — reset state + reload from the watch too. (webhare-vue-stack\n// \"Re-init on param change\".)\nasync function initDetail() {\n  isLoading.value = true;\n  detail.value = null;\n  try {\n    const { feedback } = await getFeedbackDetail(props.feedbackId);\n    detail.value = feedback;\n  } catch (err) {\n    console.error(\"Beoordeling laden mislukt:\", err);\n    detail.value = null;\n  } finally {\n    isLoading.value = false;\n  }\n}\n\nonMounted(initDetail);\nwatch(() => props.feedbackId, initDetail);\n\n// Back to the Beoordelingen tab, preserving the scope that was active (?scope=all)\n// so the user returns to the right tab.\nfunction goBack() {\n  void router.push({ name: \"beoordelingen\", query: scopeToQuery(parseScope(route.query.scope)) });\n}\n\n// \"Doe nieuwe beoordeling\" → the location detail (DetailView), where a new\n// review is filled in.\nfunction goToLocation() {\n  const id = detail.value?.locationId;\n  if (id) void router.push({ name: \"location\", params: { id: String(id) } });\n}\n\nfunction verdictLabel(rating: Agreement | null): string {\n  if (rating === \"agree\") return \"Eens\";\n  if (rating === \"disagree\") return \"Oneens\";\n  return \"Niet beoordeeld\";\n}\n\nfunction verdictClass(rating: Agreement | null): string {\n  if (rating === \"agree\") return \"bd-dim__verdict--yes\";\n  if (rating === \"disagree\") return \"bd-dim__verdict--no\";\n  return \"bd-dim__verdict--none\";\n}\n\nconst dateFmt = new Intl.DateTimeFormat(\"nl-NL\", { day: \"numeric\", month: \"long\", year: \"numeric\" });\nfunction formatDate(iso: string): string {\n  const d = new Date(iso);\n  return Number.isNaN(d.getTime()) ? \"\" : dateFmt.format(d);\n}\n</script>\n\n<style scoped>\n.bd {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  padding: 20px 20px 32px;\n}\n\n.bd__topbar {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n.bd__back {\n  flex-shrink: 0;\n  width: 38px;\n  height: 38px;\n  border-radius: 50%;\n  border: 1px solid var(--snl-line);\n  background: var(--snl-surface);\n  color: var(--snl-fg);\n  font-size: 24px;\n  line-height: 1;\n  display: grid;\n  place-items: center;\n  cursor: pointer;\n  transition: background 0.12s, transform 0.08s;\n}\n.bd__back:hover { background: var(--snl-surface-2); }\n.bd__back:active { transform: scale(0.94); }\n.bd__topbar-title {\n  font-size: 13px;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n  color: var(--snl-fg-muted);\n}\n\n.bd__state {\n  padding: 40px 0;\n  text-align: center;\n  color: var(--snl-fg-muted);\n  font-size: 14px;\n}\n\n.bd__empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  text-align: center;\n  gap: 8px;\n  padding: 44px 24px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 18px;\n  background: var(--snl-surface);\n}\n.bd__empty h2 { margin: 0; font-size: 17px; font-weight: 700; color: var(--snl-fg); }\n.bd__empty p { margin: 0; max-width: 340px; font-size: 13px; color: var(--snl-fg-muted); line-height: 1.55; }\n.bd__empty-cta {\n  margin-top: 10px;\n  padding: 10px 16px;\n  border-radius: 12px;\n  border: 0;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font: inherit;\n  font-size: 13px;\n  font-weight: 700;\n  cursor: pointer;\n}\n\n.bd__head {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  gap: 16px;\n  flex-wrap: wrap;\n}\n.bd__head-main { min-width: 0; }\n.bd__kicker {\n  font-size: 11px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n  margin: 0 0 6px;\n}\n.bd__title {\n  margin: 0;\n  font-size: 26px;\n  font-weight: 700;\n  letter-spacing: -0.025em;\n  color: var(--snl-fg);\n  line-height: 1.15;\n}\n.bd__city { margin: 4px 0 0; font-size: 14px; color: var(--snl-fg-muted); }\n.bd__meta { margin: 8px 0 0; font-size: 12.5px; color: var(--snl-fg-subtle); }\n\n.bd__head-aside {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  gap: 8px;\n  flex-shrink: 0;\n}\n.bd__score {\n  padding: 6px 12px;\n  border-radius: 999px;\n  font-size: 13px;\n  font-weight: 800;\n  letter-spacing: -0.01em;\n  font-variant-numeric: tabular-nums;\n}\n.bd__status {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 5px 11px;\n  border-radius: 999px;\n  font-size: 12px;\n  font-weight: 700;\n  white-space: nowrap;\n}\n.bd__status--ok { background: var(--snl-mint-soft); color: var(--snl-mint); }\n.bd__status--attention {\n  background: var(--snl-golden-soft, rgba(242, 180, 65, 0.14));\n  color: var(--snl-golden);\n  border: 1px solid rgba(242, 180, 65, 0.3);\n}\n\n.bd__card {\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 18px;\n  padding: 18px;\n}\n.bd__card-title {\n  margin: 0 0 12px;\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--snl-fg);\n}\n\n.bd__dims { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 14px; }\n.bd-dim { display: flex; flex-direction: column; gap: 6px; }\n.bd-dim + .bd-dim { border-top: 1px solid var(--snl-line); padding-top: 14px; }\n.bd-dim__head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 12px;\n}\n.bd-dim__label { font-size: 14px; font-weight: 600; color: var(--snl-fg); }\n.bd-dim__verdict {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 4px 10px;\n  border-radius: 999px;\n  font-size: 12px;\n  font-weight: 700;\n  white-space: nowrap;\n  flex-shrink: 0;\n}\n.bd-dim__verdict--yes { background: var(--snl-mint-soft); color: var(--snl-mint); }\n.bd-dim__verdict--no { background: rgba(243, 108, 79, 0.16); color: var(--snl-koraal); }\n.bd-dim__verdict--none { background: var(--snl-surface-2); color: var(--snl-fg-subtle); }\n.bd-dim__reason {\n  margin: 0;\n  font-size: 13px;\n  line-height: 1.55;\n  color: var(--snl-fg-muted);\n  background: var(--snl-surface-2);\n  border-radius: 10px;\n  padding: 10px 12px;\n}\n\n/* Per dimension: the AI's original Quick-Scan text the agent reacted to, then\n   the agent's own reaction. Distinguished by an accent border + label so it's\n   clear which is the AI and which is the field worker. */\n.bd-dim__ai,\n.bd-dim__reaction {\n  border-radius: 10px;\n  padding: 10px 12px;\n  background: var(--snl-surface-2);\n}\n.bd-dim__ai { border-left: 3px solid var(--snl-line-strong); }\n.bd-dim__reaction { border-left: 3px solid var(--snl-mint); margin-top: 8px; }\n.bd-dim__box-label {\n  display: block;\n  font-size: 10.5px;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  font-weight: 600;\n  color: var(--snl-fg-subtle);\n  margin-bottom: 4px;\n}\n.bd-dim__box-text {\n  margin: 0;\n  font-size: 13px;\n  line-height: 1.55;\n  color: var(--snl-fg-muted);\n}\n.bd-dim__reaction .bd-dim__box-text { color: var(--snl-fg); }\n\n.bd__note + .bd__note { margin-top: 14px; }\n.bd__note-label {\n  display: block;\n  font-size: 11px;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  font-weight: 600;\n  color: var(--snl-fg-subtle);\n  margin-bottom: 4px;\n}\n.bd__note-text { margin: 0; font-size: 13.5px; line-height: 1.6; color: var(--snl-fg); }\n\n.bd__cta {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  align-self: flex-start;\n  margin-top: 4px;\n  padding: 12px 20px;\n  border-radius: 14px;\n  border: 0;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font: inherit;\n  font-size: 14px;\n  font-weight: 700;\n  cursor: pointer;\n  transition: transform 0.08s;\n}\n.bd__cta:hover { transform: translateY(-1px); }\n.bd__cta:active { transform: translateY(0); }\n\n@media (max-width: 720px) {\n  .bd__head-aside { flex-direction: row; align-items: center; align-self: flex-start; }\n  .bd__cta { align-self: stretch; }\n}\n</style>\n","// Scope toggle for the Beoordelingen tab: \"mine\" = own feedback (default),\n// \"all\" = the whole team's. Pure serialize/parse so the BeoordelingenView can\n// mirror the toggle to the route query (refresh-stable + shareable) — and so\n// the contract is unit-testable via `wh runtest` (the .vue body isn't).\n\nexport type FeedbackScope = \"mine\" | \"all\";\n\n// route.query values are string | null | (string|null)[]; take the first value.\nexport function parseScope(raw: string | (string | null)[] | null | undefined): FeedbackScope {\n  const value = Array.isArray(raw) ? raw[0] : raw;\n  return value === \"all\" ? \"all\" : \"mine\";\n}\n\n// \"mine\" is the default → omit the param so the URL stays clean (#/beoordelingen).\nexport function scopeToQuery(scope: FeedbackScope): Record<string, string> {\n  return scope === \"all\" ? { scope: \"all\" } : {};\n}\n","// Labels for the beoordeling-detail view. Kept as pure functions (no @webhare/*\n// imports) so they're unit-testable via `wh runtest` — see webhare-vue-stack\n// \"Unit-testing pure frontend lib/*.ts\".\n\n/**\n * Derive a friendly first name from a submitter's display name.\n *\n * `submittedBy` comes from resolveUserDisplayName (full name → email → login),\n * so it isn't always a real name. Returns the first whitespace-separated token\n * of a real name, or null when no friendly first name can be derived (empty,\n * the \"Onbekend\" UI fallback, or an email/login).\n */\nexport function firstNameOf(submittedBy: string | null | undefined): string | null {\n  if (!submittedBy) {\n    return null;\n  }\n  const trimmed = submittedBy.trim();\n  if (!trimmed || trimmed.toLowerCase() === \"onbekend\") {\n    return null;\n  }\n  // An email/login (no friendly first name to extract) — fall back to generic.\n  if (trimmed.includes(\"@\")) {\n    return null;\n  }\n  const first = trimmed.split(/\\s+/)[0];\n  return first || null;\n}\n\n/**\n * Personalize the per-dimension reaction label with the submitter's first name,\n * falling back to the generic \"Reactie veldwerker\" when none is available.\n */\nexport function reactionLabel(submittedBy: string | null | undefined): string {\n  const first = firstNameOf(submittedBy);\n  return first ? `Reactie van ${first}` : \"Reactie veldwerker\";\n}\n\n/**\n * Personalize the Eindoordeel (\"overall verdict\") row label with the submitter's\n * first name (e.g. \"Algemeen oordeel van Wouter\"), falling back to the generic\n * \"Algemeen oordeel veldagent\" when no friendly first name is available.\n */\nexport function overallVerdictLabel(submittedBy: string | null | undefined): string {\n  const first = firstNameOf(submittedBy);\n  return first ? `Algemeen oordeel van ${first}` : \"Algemeen oordeel veldagent\";\n}\n","// Score → color/recommendation mapping for the Verkennen tab. The legend and the\n// map pins share these exact buckets so a pin's color always matches its card.\n//\n// Colors are a deliberate traffic-light so visual prominence tracks actual\n// suitability, descending green → amber → orange → red: bright green = only the\n// best (Zeer geschikt), golden amber = a clear step down (Geschikt), orange = a\n// mediocre maybe (Mogelijk), red = not suitable (Niet geschikt). Each of the 4\n// analyzed buckets has its own distinct tone — Mogelijk and Niet geschikt used\n// to share one red, which made them indistinguishable on the map.\n//\n// This is the SINGLE source of truth for score colors across the whole PWA:\n// the Verkennen map + legend, the Home/Planning list numbers + gauges, and the\n// RatingBadge pill (detail/quick-scan) all derive from these 4 buckets\n// (≥85/≥65/≥40/<40) so a 92 reads green everywhere, never koraal in one place\n// and green in another. (The former separate 5-group lib/rating.ts scale was\n// retired in favor of this one.)\n\nexport type ScoutTone = \"green\" | \"amber\" | \"orange\" | \"red\" | \"muted\";\n\n// Stable bucket id for a score. This is the single source of truth for the\n// thresholds — scoutRecommendation (label/tone/badge) and the Verkennen\n// \"Geschiktheid\" filter both derive from it, so the score bands can never drift\n// apart between the map legend and the filter dropdown.\nexport type ScoutBucket = \"zeer-geschikt\" | \"geschikt\" | \"mogelijk\" | \"niet-geschikt\" | \"geen-analyse\";\n\nexport interface ScoutRecommendation {\n  label: string;\n  tone: ScoutTone;\n  badge: string | null;\n}\n\n// Exported so every consumer (RatingBadge pill, list views, map legend) reads\n// the same tone→hex map instead of hardcoding colors. This is THE single source\n// of truth for score colors across the whole PWA.\nexport const SCOUT_TONE_COLORS: Record<ScoutTone, string> = {\n  green: \"#22C55E\",\n  amber: \"#F2B441\",\n  orange: \"#F0883E\",\n  red: \"#E5484D\",\n  muted: \"rgba(255,255,255,0.32)\",\n};\n\nexport function scoutBucket(score: number | null): ScoutBucket {\n  // null = no (completed) analysis at all → \"geen-analyse\". A real analysis that\n  // scored 0 is NOT \"no analysis\" — it falls through to \"niet-geschikt\" below.\n  // Both findAllLocations (latestScore) and the detail panel (consensusOverallScore)\n  // yield null only when there's nothing to show; 0 is always a real result.\n  if (score === null) return \"geen-analyse\";\n  if (score >= 85) return \"zeer-geschikt\";\n  if (score >= 65) return \"geschikt\";\n  if (score >= 40) return \"mogelijk\";\n  return \"niet-geschikt\";\n}\n\nexport function scoutRecommendation(score: number | null): ScoutRecommendation {\n  switch (scoutBucket(score)) {\n    case \"geen-analyse\": return { label: \"Geen analyse\", tone: \"muted\", badge: null };\n    case \"zeer-geschikt\": return { label: \"Zeer geschikt\", tone: \"green\", badge: \"top match\" };\n    case \"geschikt\": return { label: \"Geschikt\", tone: \"amber\", badge: \"geschikt\" };\n    case \"mogelijk\": return { label: \"Mogelijk\", tone: \"orange\", badge: \"mogelijk\" };\n    case \"niet-geschikt\": return { label: \"Niet geschikt\", tone: \"red\", badge: \"lage score\" };\n  }\n}\n\nexport function scoutColor(score: number | null): string {\n  return SCOUT_TONE_COLORS[scoutRecommendation(score).tone];\n}\n\n// Readable text color for a FILLED badge of this score's tone (e.g. the\n// RatingBadge pill). The dark-red fill needs white text; the lighter\n// green/amber/orange fills read better with the dark brand ink.\nexport function scoutTextColor(score: number | null): string {\n  return scoutRecommendation(score).tone === \"red\" ? \"#fff\" : \"var(--snl-ink)\";\n}\n\n// Legend for the Verkennen map. One row per distinct pin color (all 4 analyzed\n// buckets now have their own tone), plus the muted \"no analysis\" pin, so the key\n// always matches what's on the map. Render this instead of hardcoding swatches —\n// keeps legend and pins in lock-step.\nexport const SCOUT_LEGEND: { label: string; color: string }[] = [\n  { label: \"Zeer geschikt\", color: SCOUT_TONE_COLORS.green },\n  { label: \"Geschikt\", color: SCOUT_TONE_COLORS.amber },\n  { label: \"Mogelijk\", color: SCOUT_TONE_COLORS.orange },\n  { label: \"Niet geschikt\", color: SCOUT_TONE_COLORS.red },\n  { label: \"Geen analyse\", color: SCOUT_TONE_COLORS.muted },\n];\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"bd\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"bd__state\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"bd__empty\"\n}\nconst _hoisted_4 = { class: \"bd__head\" }\nconst _hoisted_5 = { class: \"bd__head-main\" }\nconst _hoisted_6 = { class: \"bd__title\" }\nconst _hoisted_7 = {\n  key: 0,\n  class: \"bd__city\"\n}\nconst _hoisted_8 = { class: \"bd__meta\" }\nconst _hoisted_9 = { class: \"bd__head-aside\" }\nconst _hoisted_10 = [\"title\"]\nconst _hoisted_11 = {\n  key: 0,\n  width: \"13\",\n  height: \"13\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2.6\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"bd__card\" }\nconst _hoisted_13 = { class: \"bd__dims\" }\nconst _hoisted_14 = { class: \"bd-dim__head\" }\nconst _hoisted_15 = { class: \"bd-dim__label\" }\nconst _hoisted_16 = {\n  key: 0,\n  width: \"11\",\n  height: \"11\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"3\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_17 = {\n  key: 1,\n  width: \"10\",\n  height: \"10\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"3\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_18 = {\n  key: 0,\n  class: \"bd-dim__ai\"\n}\nconst _hoisted_19 = { class: \"bd-dim__box-text\" }\nconst _hoisted_20 = {\n  key: 1,\n  class: \"bd-dim__reaction\"\n}\nconst _hoisted_21 = { class: \"bd-dim__box-label\" }\nconst _hoisted_22 = { class: \"bd-dim__box-text\" }\nconst _hoisted_23 = {\n  key: 0,\n  class: \"bd__card\"\n}\nconst _hoisted_24 = { class: \"bd-dim__head\" }\nconst _hoisted_25 = { class: \"bd-dim__label\" }\nconst _hoisted_26 = {\n  key: 0,\n  width: \"11\",\n  height: \"11\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"3\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_27 = {\n  key: 1,\n  width: \"10\",\n  height: \"10\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"3\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_28 = {\n  key: 0,\n  class: \"bd-dim__reason\"\n}\nconst _hoisted_29 = {\n  key: 1,\n  class: \"bd__card\"\n}\nconst _hoisted_30 = {\n  key: 0,\n  class: \"bd__note\"\n}\nconst _hoisted_31 = { class: \"bd__note-text\" }\nconst _hoisted_32 = {\n  key: 1,\n  class: \"bd__note\"\n}\nconst _hoisted_33 = { class: \"bd__note-text\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", { class: \"bd__topbar\" }, [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"bd__back\",\n        \"aria-label\": \"Terug naar beoordelingen\",\n        onClick: $setup.goBack\n      }, \"‹\"),\n      _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"bd__topbar-title\" }, \"Beoordeling\", -1 /* CACHED */))\n    ]),\n    ($setup.isLoading)\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \"Beoordeling laden…\"))\n      : (!$setup.detail)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n            _cache[1] || (_cache[1] = _createElementVNode(\"h2\", null, \"Beoordeling niet gevonden\", -1 /* CACHED */)),\n            _cache[2] || (_cache[2] = _createElementVNode(\"p\", null, \"Deze beoordeling bestaat niet (meer) of je hebt er geen toegang toe.\", -1 /* CACHED */)),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"bd__empty-cta\",\n              onClick: $setup.goBack\n            }, \"Terug naar beoordelingen\")\n          ]))\n        : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n            _createCommentVNode(\" Intro: locatie + AI-score + inzender/datum + status \"),\n            _createElementVNode(\"header\", _hoisted_4, [\n              _createElementVNode(\"div\", _hoisted_5, [\n                _cache[3] || (_cache[3] = _createElementVNode(\"p\", { class: \"bd__kicker\" }, \"Ingediende beoordeling\", -1 /* CACHED */)),\n                _createElementVNode(\"h1\", _hoisted_6, _toDisplayString($setup.detail.companyName), 1 /* TEXT */),\n                ($setup.detail.city)\n                  ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString($setup.detail.city), 1 /* TEXT */))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"p\", _hoisted_8, \" Door \" + _toDisplayString($setup.detail.submittedBy || \"Onbekend\") + \" · \" + _toDisplayString($setup.formatDate($setup.detail.createdAt)), 1 /* TEXT */)\n              ]),\n              _createElementVNode(\"div\", _hoisted_9, [\n                ($setup.detail.latestScore !== null)\n                  ? (_openBlock(), _createElementBlock(\"span\", {\n                      key: 0,\n                      class: \"bd__score\",\n                      style: _normalizeStyle($setup.scoreStyle),\n                      title: `AI-score: ${$setup.detail.latestScore}`\n                    }, \" AI \" + _toDisplayString($setup.detail.latestScore), 13 /* TEXT, STYLE, PROPS */, _hoisted_10))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"span\", {\n                  class: _normalizeClass([\"bd__status\", $setup.hasAttention ? 'bd__status--attention' : 'bd__status--ok'])\n                }, [\n                  (!$setup.hasAttention)\n                    ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, _cache[4] || (_cache[4] = [\n                        _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" }, null, -1 /* CACHED */)\n                      ])))\n                    : _createCommentVNode(\"v-if\", true),\n                  _createTextVNode(\" \" + _toDisplayString($setup.hasAttention ? \"Opmerkingen\" : \"Beoordeeld\"), 1 /* TEXT */)\n                ], 2 /* CLASS */)\n              ])\n            ]),\n            _createCommentVNode(\" Per-dimensie verdict + toelichting \"),\n            _createElementVNode(\"section\", _hoisted_12, [\n              _cache[8] || (_cache[8] = _createElementVNode(\"h2\", { class: \"bd__card-title\" }, \"Beoordeling per dimensie\", -1 /* CACHED */)),\n              _createElementVNode(\"ul\", _hoisted_13, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.dimensionRows, (row) => {\n                  return (_openBlock(), _createElementBlock(\"li\", {\n                    key: row.key,\n                    class: \"bd-dim\"\n                  }, [\n                    _createElementVNode(\"div\", _hoisted_14, [\n                      _createElementVNode(\"span\", _hoisted_15, _toDisplayString(row.label), 1 /* TEXT */),\n                      _createElementVNode(\"span\", {\n                        class: _normalizeClass([\"bd-dim__verdict\", $setup.verdictClass(row.rating)])\n                      }, [\n                        (row.rating === 'agree')\n                          ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_16, _cache[5] || (_cache[5] = [\n                              _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" }, null, -1 /* CACHED */)\n                            ])))\n                          : (row.rating === 'disagree')\n                            ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_17, _cache[6] || (_cache[6] = [\n                                _createElementVNode(\"path\", { d: \"M18 6 6 18M6 6l12 12\" }, null, -1 /* CACHED */)\n                              ])))\n                            : _createCommentVNode(\"v-if\", true),\n                        _createTextVNode(\" \" + _toDisplayString($setup.verdictLabel(row.rating)), 1 /* TEXT */)\n                      ], 2 /* CLASS */)\n                    ]),\n                    (row.aiExplanation)\n                      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n                          _cache[7] || (_cache[7] = _createElementVNode(\"span\", { class: \"bd-dim__box-label\" }, \"AI-beoordeling\", -1 /* CACHED */)),\n                          _createElementVNode(\"p\", _hoisted_19, _toDisplayString(row.aiExplanation), 1 /* TEXT */)\n                        ]))\n                      : _createCommentVNode(\"v-if\", true),\n                    (row.reason)\n                      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n                          _createElementVNode(\"span\", _hoisted_21, _toDisplayString($setup.reactionBoxLabel), 1 /* TEXT */),\n                          _createElementVNode(\"p\", _hoisted_22, _toDisplayString(row.reason), 1 /* TEXT */)\n                        ]))\n                      : _createCommentVNode(\"v-if\", true)\n                  ]))\n                }), 128 /* KEYED_FRAGMENT */))\n              ])\n            ]),\n            _createCommentVNode(\" Eindoordeel \"),\n            ($setup.detail.overallRating)\n              ? (_openBlock(), _createElementBlock(\"section\", _hoisted_23, [\n                  _cache[11] || (_cache[11] = _createElementVNode(\"h2\", { class: \"bd__card-title\" }, \"Eindoordeel\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_24, [\n                    _createElementVNode(\"span\", _hoisted_25, _toDisplayString($setup.overallVerdictBoxLabel), 1 /* TEXT */),\n                    _createElementVNode(\"span\", {\n                      class: _normalizeClass([\"bd-dim__verdict\", $setup.verdictClass($setup.detail.overallRating)])\n                    }, [\n                      ($setup.detail.overallRating === 'agree')\n                        ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_26, _cache[9] || (_cache[9] = [\n                            _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" }, null, -1 /* CACHED */)\n                          ])))\n                        : (_openBlock(), _createElementBlock(\"svg\", _hoisted_27, _cache[10] || (_cache[10] = [\n                            _createElementVNode(\"path\", { d: \"M18 6 6 18M6 6l12 12\" }, null, -1 /* CACHED */)\n                          ]))),\n                      _createTextVNode(\" \" + _toDisplayString($setup.verdictLabel($setup.detail.overallRating)), 1 /* TEXT */)\n                    ], 2 /* CLASS */)\n                  ]),\n                  ($setup.detail.reasonOverallRating)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_28, _toDisplayString($setup.detail.reasonOverallRating), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true)\n                ]))\n              : _createCommentVNode(\"v-if\", true),\n            _createCommentVNode(\" Vrije tekst \"),\n            ($setup.detail.generalNotes || $setup.detail.aiMissesNotes)\n              ? (_openBlock(), _createElementBlock(\"section\", _hoisted_29, [\n                  _cache[14] || (_cache[14] = _createElementVNode(\"h2\", { class: \"bd__card-title\" }, \"Opmerkingen\", -1 /* CACHED */)),\n                  ($setup.detail.aiMissesNotes)\n                    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_30, [\n                        _cache[12] || (_cache[12] = _createElementVNode(\"span\", { class: \"bd__note-label\" }, \"Wat de AI mist\", -1 /* CACHED */)),\n                        _createElementVNode(\"p\", _hoisted_31, _toDisplayString($setup.detail.aiMissesNotes), 1 /* TEXT */)\n                      ]))\n                    : _createCommentVNode(\"v-if\", true),\n                  ($setup.detail.generalNotes)\n                    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, [\n                        _cache[13] || (_cache[13] = _createElementVNode(\"span\", { class: \"bd__note-label\" }, \"Overige opmerkingen\", -1 /* CACHED */)),\n                        _createElementVNode(\"p\", _hoisted_33, _toDisplayString($setup.detail.generalNotes), 1 /* TEXT */)\n                      ]))\n                    : _createCommentVNode(\"v-if\", true)\n                ]))\n              : _createCommentVNode(\"v-if\", true),\n            _createCommentVNode(\" CTA \"),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"bd__cta\",\n              onClick: $setup.goToLocation\n            }, _cache[15] || (_cache[15] = [\n              _createElementVNode(\"svg\", {\n                width: \"17\",\n                height: \"17\",\n                viewBox: \"0 0 24 24\",\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: \"M12 5v14M5 12h14\" })\n              ], -1 /* CACHED */),\n              _createTextVNode(\" Doe nieuwe beoordeling \", -1 /* CACHED */)\n            ]))\n          ], 64 /* STABLE_FRAGMENT */))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingDetailView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingDetailView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingDetailView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingDetailView.vue\";script.__scopeId = \"data-v-663fa013\";export default script;","<template>\n  <div class=\"beoord\">\n    <header class=\"beoord__head\">\n      <p class=\"beoord__kicker\">{{ kicker }}</p>\n      <h1 class=\"beoord__title\">\n        Beoordelingen<template v-if=\"!isLoading\"> · {{ items.length }}</template>\n      </h1>\n    </header>\n\n    <div class=\"beoord__scope\" role=\"tablist\" aria-label=\"Welke beoordelingen\">\n      <button\n        type=\"button\"\n        role=\"tab\"\n        class=\"scopetab\"\n        :class=\"{ 'scopetab--on': scope === 'mine' }\"\n        :aria-selected=\"scope === 'mine'\"\n        @click=\"scope = 'mine'\"\n      >\n        Mijn beoordelingen\n      </button>\n      <button\n        type=\"button\"\n        role=\"tab\"\n        class=\"scopetab\"\n        :class=\"{ 'scopetab--on': scope === 'all' }\"\n        :aria-selected=\"scope === 'all'\"\n        @click=\"scope = 'all'\"\n      >\n        Alle beoordelingen\n      </button>\n    </div>\n\n    <div v-if=\"items.length > 0\" class=\"beoord__stats\">\n      <div class=\"stat\">\n        <div class=\"stat__num\">{{ items.length }}</div>\n        <div class=\"stat__lbl\">Ingestuurd</div>\n      </div>\n      <div class=\"stat\">\n        <div class=\"stat__num\">{{ fullyAgreedCount }}</div>\n        <div class=\"stat__lbl\">Volledig akkoord</div>\n      </div>\n      <div class=\"stat\">\n        <div class=\"stat__num stat__num--amber\">{{ attentionCount }}</div>\n        <div class=\"stat__lbl\">Met opmerkingen</div>\n      </div>\n    </div>\n\n    <div v-if=\"isLoading\" class=\"beoord__state\">Beoordelingen laden…</div>\n\n    <div v-else-if=\"items.length === 0\" class=\"beoord__empty\">\n      <span class=\"beoord__empty-icon\" aria-hidden=\"true\">\n        <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\"/>\n          <rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1\"/>\n          <path d=\"m9 14 2 2 4-4\"/>\n        </svg>\n      </span>\n      <h2>Nog geen beoordelingen</h2>\n      <p v-if=\"scope === 'all'\">Er zijn nog geen beoordelingen ingestuurd door het team.</p>\n      <p v-else>Beoordeel een locatie via <strong>Verkennen</strong> of je planning. Je ingestuurde beoordelingen verschijnen hier.</p>\n      <a :href=\"urlVerkennen()\" class=\"beoord__empty-cta\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\"/>\n        </svg>\n        Locaties verkennen\n      </a>\n    </div>\n\n    <div v-else class=\"beoord__list\">\n      <div class=\"bo-row bo-row--head\" aria-hidden=\"true\">\n        <div>Locatie</div>\n        <div>Datum</div>\n        <div>Criteria</div>\n        <div>Status</div>\n      </div>\n\n      <button\n        v-for=\"item in items\"\n        :key=\"item.id\"\n        type=\"button\"\n        class=\"bo-row\"\n        @click=\"openDetail(item)\"\n      >\n        <div class=\"bo-row__name\">\n          <span class=\"bo-row__name-text\">\n            <span class=\"bo-row__loc\">{{ item.companyName }}</span>\n            <span v-if=\"item.city\" class=\"bo-row__city\">{{ item.city }}</span>\n            <span v-if=\"scope === 'all'\" class=\"bo-row__by\">Door {{ item.submittedBy || \"Onbekend\" }}</span>\n          </span>\n        </div>\n\n        <div class=\"bo-row__date\">{{ formatDate(item.createdAt) }}</div>\n\n        <div class=\"bo-row__crit\">\n          <span\n            v-for=\"c in criteriaDots(item)\"\n            :key=\"c.label\"\n            class=\"critdot\"\n            :class=\"critClass(c.value)\"\n            :title=\"`${c.label}: ${critTitle(c.value)}`\"\n          >\n            <svg v-if=\"c.value === 'agree'\" width=\"9\" height=\"9\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#0c1f17\" stroke-width=\"3.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M20 6 9 17l-5-5\"/>\n            </svg>\n            <svg v-else-if=\"c.value === 'disagree'\" width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"3.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M18 6 6 18M6 6l12 12\"/>\n            </svg>\n          </span>\n        </div>\n\n        <div class=\"bo-row__status\">\n          <span class=\"bo-status\" :class=\"hasAttention(item) ? 'bo-status--attention' : 'bo-status--ok'\">\n            <svg v-if=\"!hasAttention(item)\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M20 6 9 17l-5-5\"/>\n            </svg>\n            {{ hasAttention(item) ? \"Opmerkingen\" : \"Beoordeeld\" }}\n          </span>\n        </div>\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { getAllFeedback, getMyFeedback } from \"../lib/api\";\nimport { type FeedbackScope, parseScope, scopeToQuery } from \"../lib/beoordelingenScope\";\nimport { urlVerkennen } from \"../lib/urls\";\nimport type { Agreement, MyFeedbackItem } from \"../lib/types\";\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst items = ref<MyFeedbackItem[]>([]);\nconst isLoading = ref(true);\n// \"mine\" = own feedback (default, current behavior); \"all\" = the whole team's,\n// with the submitter's name shown. Both are auth-gated server-side.\n// Restored from the route query synchronously so a refresh/shared link keeps the\n// chosen tab; \"mine\" stays out of the URL (clean #/beoordelingen).\nconst scope = ref<FeedbackScope>(parseScope(route.query.scope));\n\nconst kicker = computed(() => scope.value === \"all\"\n  ? \"Alle beoordelingen van het team\"\n  : \"Mijn beoordelingen\");\n\n// Same dimension order/labels as the detail panel's \"Score per dimensie\".\nconst CRITERIA: Array<{ key: keyof MyFeedbackItem[\"criteria\"]; label: string }> = [\n  { key: \"natureSize\", label: \"Locatie & omvang\" },\n  { key: \"parkingSpace\", label: \"Parkeerruimte\" },\n  { key: \"accessibility\", label: \"Bereikbaarheid\" },\n  { key: \"visibility\", label: \"Zichtbaarheid\" },\n  { key: \"extraServices\", label: \"Extra diensten\" },\n];\n\nasync function loadFeedback() {\n  isLoading.value = true;\n  try {\n    const { feedback } = scope.value === \"all\" ? await getAllFeedback() : await getMyFeedback();\n    items.value = feedback;\n  } catch (err) {\n    console.error(\"Beoordelingen laden mislukt:\", err);\n    items.value = [];\n  } finally {\n    isLoading.value = false;\n  }\n}\n\nonMounted(loadFeedback);\nwatch(scope, loadFeedback);\n\n// Mirror the tab in the route query so a refresh/shared link restores it.\n// `replace` keeps it out of the history stack; the guard skips no-ops so\n// vue-router doesn't warn about redundant navigation.\nwatch(scope, (next) => {\n  if (parseScope(route.query.scope) === next) return;\n  void router.replace({ query: scopeToQuery(next) });\n});\n\n// Klik op een rij → de beoordeling-detailpagina (eigen path), NIET de\n// locatie-zijbalk. Geef de huidige scope mee zodat browser-back op de juiste\n// tab (Mijn / Alle) terugkomt.\nfunction openDetail(item: MyFeedbackItem) {\n  void router.push({\n    name: \"beoordeling-detail\",\n    params: { id: String(item.id) },\n    query: scopeToQuery(scope.value),\n  });\n}\n\nfunction criteriaDots(item: MyFeedbackItem) {\n  return CRITERIA.map((c) => ({ label: c.label, value: item.criteria[c.key] }));\n}\n\nfunction hasAttention(item: MyFeedbackItem): boolean {\n  return Object.values(item.criteria).some((v) => v === \"disagree\");\n}\n\nconst attentionCount = computed(() => items.value.filter(hasAttention).length);\nconst fullyAgreedCount = computed(() => items.value.length - attentionCount.value);\n\nfunction critClass(value: Agreement | null): string {\n  if (value === \"agree\") return \"critdot--yes\";\n  if (value === \"disagree\") return \"critdot--no\";\n  return \"critdot--none\";\n}\n\nfunction critTitle(value: Agreement | null): string {\n  if (value === \"agree\") return \"eens\";\n  if (value === \"disagree\") return \"oneens\";\n  return \"niet beoordeeld\";\n}\n\nconst dateFmt = new Intl.DateTimeFormat(\"nl-NL\", { day: \"numeric\", month: \"long\", year: \"numeric\" });\nfunction formatDate(iso: string): string {\n  const d = new Date(iso);\n  return Number.isNaN(d.getTime()) ? \"\" : dateFmt.format(d);\n}\n</script>\n\n<style scoped>\n.beoord {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  /* Horizontale padding zoals de andere tab-views (Home/Planning/Account); de\n     layout-shell geeft alleen op desktop horizontale padding, dus elke view\n     regelt z'n eigen marge op mobiel. Zonder dit staat de hele pagina flush\n     tegen de schermrand (TEC-109). Top = 20px zodat Planning/Beoordelingen/\n     Account op dezelfde hoogte beginnen. */\n  padding: 20px 20px 8px;\n}\n\n.beoord__head { min-width: 0; }\n/* Subkop + kop identiek aan de Planning-view zodat de twee lijst-tabs matchen. */\n.beoord__kicker {\n  font-size: 11px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n.beoord__title {\n  margin: 0;\n  font-size: 28px;\n  font-weight: 700;\n  letter-spacing: -0.025em;\n  color: var(--snl-fg);\n}\n\n/* \"Mijn\" / \"Alle\" segmented toggle — same pill language as Verkennen'.seg. */\n.beoord__scope {\n  display: inline-flex;\n  align-self: flex-start;\n  gap: 2px;\n  padding: 4px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 999px;\n}\n.scopetab {\n  appearance: none;\n  border: 0;\n  background: transparent;\n  padding: 8px 16px;\n  border-radius: 999px;\n  font: inherit;\n  font-size: 13px;\n  font-weight: 700;\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n  transition: background 0.12s, color 0.12s;\n}\n.scopetab--on {\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n}\n@media (hover: hover) {\n  .scopetab:not(.scopetab--on):hover { color: var(--snl-fg); }\n}\n\n.beoord__stats {\n  display: flex;\n  gap: 10px;\n}\n.stat {\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  padding: 10px;\n  min-width: 100px;\n}\n.stat__num {\n  font-size: 22px;\n  font-weight: 800;\n  letter-spacing: -0.02em;\n  color: var(--snl-fg);\n  font-variant-numeric: tabular-nums;\n}\n.stat__num--amber { color: var(--snl-golden); }\n.stat__lbl {\n  font-size: 9.5px;\n  color: var(--snl-fg-muted);\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  font-weight: 600;\n  margin-top: 2px;\n  /* Iets kleiner + minder letter-spacing zodat een lang label als \"Met\n     opmerkingen\" netjes op de spatie afbreekt binnen de smalle kaart; de\n     break-word is een vangnet tegen overlopen bij toekomstige labels. */\n  overflow-wrap: break-word;\n}\n\n.beoord__state {\n  padding: 32px 0;\n  text-align: center;\n  color: var(--snl-fg-muted);\n  font-size: 14px;\n}\n\n.beoord__empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  text-align: center;\n  gap: 6px;\n  padding: 44px 24px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 18px;\n  background: var(--snl-surface);\n}\n.beoord__empty-icon {\n  display: grid;\n  place-items: center;\n  width: 60px;\n  height: 60px;\n  border-radius: 16px;\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n  margin-bottom: 6px;\n}\n.beoord__empty h2 {\n  margin: 0;\n  font-size: 17px;\n  font-weight: 700;\n  color: var(--snl-fg);\n}\n.beoord__empty p {\n  margin: 0;\n  max-width: 360px;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n  line-height: 1.55;\n}\n.beoord__empty-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 10px;\n  padding: 10px 16px;\n  border-radius: 12px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 13px;\n  font-weight: 700;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.beoord__list {\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 18px;\n  overflow: hidden;\n}\n.bo-row {\n  display: grid;\n  grid-template-columns: 2fr 1fr 1fr 1fr;\n  gap: 16px;\n  align-items: center;\n  width: 100%;\n  text-align: left;\n  padding: 14px 18px;\n  background: transparent;\n  border: 0;\n  border-bottom: 1px solid var(--snl-line);\n  color: var(--snl-fg);\n  font: inherit;\n  cursor: pointer;\n  transition: background 0.12s;\n}\n.bo-row:last-child { border-bottom: 0; }\n.bo-row:not(.bo-row--head):hover { background: var(--snl-surface-2); }\n.bo-row--head {\n  font-size: 10.5px;\n  letter-spacing: 0.12em;\n  text-transform: uppercase;\n  color: var(--snl-fg-subtle);\n  font-weight: 600;\n  padding: 12px 18px;\n  background: var(--snl-surface-2);\n  cursor: default;\n}\n\n.bo-row__name {\n  display: flex;\n  align-items: center;\n  min-width: 0;\n}\n.bo-row__name-text {\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n.bo-row__loc {\n  font-weight: 700;\n  font-size: 14px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.bo-row__city {\n  font-size: 11.5px;\n  color: var(--snl-fg-muted);\n}\n.bo-row__by {\n  font-size: 11.5px;\n  color: var(--snl-fg-subtle);\n}\n.bo-row__date {\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n  font-variant-numeric: tabular-nums;\n}\n\n.bo-row__crit { display: flex; gap: 5px; }\n.critdot {\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  display: grid;\n  place-items: center;\n  flex-shrink: 0;\n}\n.critdot--yes { background: var(--snl-mint); }\n.critdot--no { background: var(--snl-koraal); }\n.critdot--none {\n  background: transparent;\n  border: 1.5px solid var(--snl-line-strong);\n}\n\n.bo-row__status { display: flex; }\n.bo-status {\n  display: inline-flex;\n  align-items: center;\n  gap: 5px;\n  padding: 5px 11px;\n  border-radius: 999px;\n  font-size: 12px;\n  font-weight: 700;\n  white-space: nowrap;\n}\n.bo-status--ok {\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n}\n.bo-status--attention {\n  background: var(--snl-golden-soft, rgba(242, 180, 65, 0.14));\n  color: var(--snl-golden);\n  border: 1px solid rgba(242, 180, 65, 0.3);\n}\n\n/* ===== Mobile: collapse the grid into stacked cards ===== */\n@media (max-width: 720px) {\n  .beoord__stats { width: 100%; }\n  .stat { flex: 1; min-width: 0; }\n  .bo-row--head { display: none; }\n  .bo-row {\n    grid-template-columns: 1fr auto;\n    gap: 8px 12px;\n    padding: 14px 16px;\n  }\n  .bo-row__date {\n    grid-column: 2;\n    grid-row: 1;\n    text-align: right;\n    font-size: 11.5px;\n  }\n  .bo-row__crit {\n    grid-column: 1 / -1;\n    padding-top: 8px;\n    border-top: 1px dashed var(--snl-line);\n  }\n  .bo-row__status { grid-column: 1 / -1; }\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, renderList as _renderList, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"beoord\" }\nconst _hoisted_2 = { class: \"beoord__head\" }\nconst _hoisted_3 = { class: \"beoord__kicker\" }\nconst _hoisted_4 = { class: \"beoord__title\" }\nconst _hoisted_5 = {\n  class: \"beoord__scope\",\n  role: \"tablist\",\n  \"aria-label\": \"Welke beoordelingen\"\n}\nconst _hoisted_6 = [\"aria-selected\"]\nconst _hoisted_7 = [\"aria-selected\"]\nconst _hoisted_8 = {\n  key: 0,\n  class: \"beoord__stats\"\n}\nconst _hoisted_9 = { class: \"stat\" }\nconst _hoisted_10 = { class: \"stat__num\" }\nconst _hoisted_11 = { class: \"stat\" }\nconst _hoisted_12 = { class: \"stat__num\" }\nconst _hoisted_13 = { class: \"stat\" }\nconst _hoisted_14 = { class: \"stat__num stat__num--amber\" }\nconst _hoisted_15 = {\n  key: 1,\n  class: \"beoord__state\"\n}\nconst _hoisted_16 = {\n  key: 2,\n  class: \"beoord__empty\"\n}\nconst _hoisted_17 = { key: 0 }\nconst _hoisted_18 = { key: 1 }\nconst _hoisted_19 = [\"href\"]\nconst _hoisted_20 = {\n  key: 3,\n  class: \"beoord__list\"\n}\nconst _hoisted_21 = [\"onClick\"]\nconst _hoisted_22 = { class: \"bo-row__name\" }\nconst _hoisted_23 = { class: \"bo-row__name-text\" }\nconst _hoisted_24 = { class: \"bo-row__loc\" }\nconst _hoisted_25 = {\n  key: 0,\n  class: \"bo-row__city\"\n}\nconst _hoisted_26 = {\n  key: 1,\n  class: \"bo-row__by\"\n}\nconst _hoisted_27 = { class: \"bo-row__date\" }\nconst _hoisted_28 = { class: \"bo-row__crit\" }\nconst _hoisted_29 = [\"title\"]\nconst _hoisted_30 = {\n  key: 0,\n  width: \"9\",\n  height: \"9\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"#0c1f17\",\n  \"stroke-width\": \"3.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_31 = {\n  key: 1,\n  width: \"8\",\n  height: \"8\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"#fff\",\n  \"stroke-width\": \"3.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_32 = { class: \"bo-row__status\" }\nconst _hoisted_33 = {\n  key: 0,\n  width: \"13\",\n  height: \"13\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2.6\",\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(\"div\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"p\", _hoisted_3, _toDisplayString($setup.kicker), 1 /* TEXT */),\n      _createElementVNode(\"h1\", _hoisted_4, [\n        _cache[2] || (_cache[2] = _createTextVNode(\" Beoordelingen\", -1 /* CACHED */)),\n        (!$setup.isLoading)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              _createTextVNode(\" · \" + _toDisplayString($setup.items.length), 1 /* TEXT */)\n            ], 64 /* STABLE_FRAGMENT */))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    _createElementVNode(\"div\", _hoisted_5, [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        role: \"tab\",\n        class: _normalizeClass([\"scopetab\", { 'scopetab--on': $setup.scope === 'mine' }]),\n        \"aria-selected\": $setup.scope === 'mine',\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.scope = 'mine'))\n      }, \" Mijn beoordelingen \", 10 /* CLASS, PROPS */, _hoisted_6),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        role: \"tab\",\n        class: _normalizeClass([\"scopetab\", { 'scopetab--on': $setup.scope === 'all' }]),\n        \"aria-selected\": $setup.scope === 'all',\n        onClick: _cache[1] || (_cache[1] = $event => ($setup.scope = 'all'))\n      }, \" Alle beoordelingen \", 10 /* CLASS, PROPS */, _hoisted_7)\n    ]),\n    ($setup.items.length > 0)\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n          _createElementVNode(\"div\", _hoisted_9, [\n            _createElementVNode(\"div\", _hoisted_10, _toDisplayString($setup.items.length), 1 /* TEXT */),\n            _cache[3] || (_cache[3] = _createElementVNode(\"div\", { class: \"stat__lbl\" }, \"Ingestuurd\", -1 /* CACHED */))\n          ]),\n          _createElementVNode(\"div\", _hoisted_11, [\n            _createElementVNode(\"div\", _hoisted_12, _toDisplayString($setup.fullyAgreedCount), 1 /* TEXT */),\n            _cache[4] || (_cache[4] = _createElementVNode(\"div\", { class: \"stat__lbl\" }, \"Volledig akkoord\", -1 /* CACHED */))\n          ]),\n          _createElementVNode(\"div\", _hoisted_13, [\n            _createElementVNode(\"div\", _hoisted_14, _toDisplayString($setup.attentionCount), 1 /* TEXT */),\n            _cache[5] || (_cache[5] = _createElementVNode(\"div\", { class: \"stat__lbl\" }, \"Met opmerkingen\", -1 /* CACHED */))\n          ])\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.isLoading)\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, \"Beoordelingen laden…\"))\n      : ($setup.items.length === 0)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_16, [\n            _cache[8] || (_cache[8] = _createStaticVNode(\"<span class=\\\"beoord__empty-icon\\\" aria-hidden=\\\"true\\\" data-v-df8e6f74><svg width=\\\"36\\\" height=\\\"36\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1.6\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" data-v-df8e6f74><path d=\\\"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\\\" data-v-df8e6f74></path><rect x=\\\"9\\\" y=\\\"3\\\" width=\\\"6\\\" height=\\\"4\\\" rx=\\\"1\\\" data-v-df8e6f74></rect><path d=\\\"m9 14 2 2 4-4\\\" data-v-df8e6f74></path></svg></span><h2 data-v-df8e6f74>Nog geen beoordelingen</h2>\", 2)),\n            ($setup.scope === 'all')\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_17, \"Er zijn nog geen beoordelingen ingestuurd door het team.\"))\n              : (_openBlock(), _createElementBlock(\"p\", _hoisted_18, _cache[6] || (_cache[6] = [\n                  _createTextVNode(\"Beoordeel een locatie via \", -1 /* CACHED */),\n                  _createElementVNode(\"strong\", null, \"Verkennen\", -1 /* CACHED */),\n                  _createTextVNode(\" of je planning. Je ingestuurde beoordelingen verschijnen hier.\", -1 /* CACHED */)\n                ]))),\n            _createElementVNode(\"a\", {\n              href: $setup.urlVerkennen(),\n              class: \"beoord__empty-cta\"\n            }, _cache[7] || (_cache[7] = [\n              _createElementVNode(\"svg\", {\n                width: \"16\",\n                height: \"16\",\n                viewBox: \"0 0 24 24\",\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: \"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\" })\n              ], -1 /* CACHED */),\n              _createTextVNode(\" Locaties verkennen \", -1 /* CACHED */)\n            ]), 8 /* PROPS */, _hoisted_19)\n          ]))\n        : (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n            _cache[12] || (_cache[12] = _createElementVNode(\"div\", {\n              class: \"bo-row bo-row--head\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"div\", null, \"Locatie\"),\n              _createElementVNode(\"div\", null, \"Datum\"),\n              _createElementVNode(\"div\", null, \"Criteria\"),\n              _createElementVNode(\"div\", null, \"Status\")\n            ], -1 /* CACHED */)),\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.items, (item) => {\n              return (_openBlock(), _createElementBlock(\"button\", {\n                key: item.id,\n                type: \"button\",\n                class: \"bo-row\",\n                onClick: $event => ($setup.openDetail(item))\n              }, [\n                _createElementVNode(\"div\", _hoisted_22, [\n                  _createElementVNode(\"span\", _hoisted_23, [\n                    _createElementVNode(\"span\", _hoisted_24, _toDisplayString(item.companyName), 1 /* TEXT */),\n                    (item.city)\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_25, _toDisplayString(item.city), 1 /* TEXT */))\n                      : _createCommentVNode(\"v-if\", true),\n                    ($setup.scope === 'all')\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_26, \"Door \" + _toDisplayString(item.submittedBy || \"Onbekend\"), 1 /* TEXT */))\n                      : _createCommentVNode(\"v-if\", true)\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_27, _toDisplayString($setup.formatDate(item.createdAt)), 1 /* TEXT */),\n                _createElementVNode(\"div\", _hoisted_28, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.criteriaDots(item), (c) => {\n                    return (_openBlock(), _createElementBlock(\"span\", {\n                      key: c.label,\n                      class: _normalizeClass([\"critdot\", $setup.critClass(c.value)]),\n                      title: `${c.label}: ${$setup.critTitle(c.value)}`\n                    }, [\n                      (c.value === 'agree')\n                        ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_30, _cache[9] || (_cache[9] = [\n                            _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" }, null, -1 /* CACHED */)\n                          ])))\n                        : (c.value === 'disagree')\n                          ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_31, _cache[10] || (_cache[10] = [\n                              _createElementVNode(\"path\", { d: \"M18 6 6 18M6 6l12 12\" }, null, -1 /* CACHED */)\n                            ])))\n                          : _createCommentVNode(\"v-if\", true)\n                    ], 10 /* CLASS, PROPS */, _hoisted_29))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ]),\n                _createElementVNode(\"div\", _hoisted_32, [\n                  _createElementVNode(\"span\", {\n                    class: _normalizeClass([\"bo-status\", $setup.hasAttention(item) ? 'bo-status--attention' : 'bo-status--ok'])\n                  }, [\n                    (!$setup.hasAttention(item))\n                      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_33, _cache[11] || (_cache[11] = [\n                          _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" }, null, -1 /* CACHED */)\n                        ])))\n                      : _createCommentVNode(\"v-if\", true),\n                    _createTextVNode(\" \" + _toDisplayString($setup.hasAttention(item) ? \"Opmerkingen\" : \"Beoordeeld\"), 1 /* TEXT */)\n                  ], 2 /* CLASS */)\n                ])\n              ], 8 /* PROPS */, _hoisted_21))\n            }), 128 /* KEYED_FRAGMENT */))\n          ]))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingenView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/BeoordelingenView.vue\";script.__scopeId = \"data-v-df8e6f74\";export default script;","<template>\n  <div class=\"detail\" v-if=\"isLoading\">\n    <div class=\"detail__error\"><p>Laden...</p></div>\n  </div>\n\n  <div class=\"detail\" v-else-if=\"isSubmitted\">\n    <div class=\"detail__success\">\n      <span class=\"detail__success-icon\" aria-hidden=\"true\">✓</span>\n      <h2>Feedback verzonden!</h2>\n      <p>\n        Bedankt voor je beoordeling van\n        <strong>{{ detail?.location?.companyName }}</strong>.\n      </p>\n      <p v-if=\"wasInList && nextInListId\" class=\"detail__success-hint\">\n        Doorgestreept van je lijst. De volgende staat al klaar.\n      </p>\n      <p v-else-if=\"wasInList\" class=\"detail__success-hint\">\n        Doorgestreept van je lijst. Je lijst is nu leeg.\n      </p>\n      <div class=\"detail__success-actions\">\n        <a v-if=\"nextInListId\" :href=\"urlLocation(nextInListId)\" class=\"detail__back-btn\">\n          Volgende locatie ›\n        </a>\n        <a :href=\"homeUrl\" class=\"detail__back-link\">Terug naar zoeken</a>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"detail\" v-else-if=\"error || !detail?.location\">\n    <div class=\"detail__error\">\n      <p>{{ error ?? \"Er ging iets mis\" }}</p>\n      <a :href=\"homeUrl\" class=\"detail__back-link\">Terug naar zoeken</a>\n    </div>\n  </div>\n\n  <div class=\"detail\" v-else>\n    <header class=\"detail__header\">\n      <a :href=\"homeUrl\" class=\"detail__back\" aria-label=\"Terug\">‹</a>\n      <div class=\"detail__header-body\">\n        <h1 class=\"detail__title\">{{ detail.location.companyName }}</h1>\n      </div>\n      <div class=\"detail__header-aside\">\n        <AddToListButton v-if=\"locationSummary\" :location=\"locationSummary\" />\n      </div>\n    </header>\n\n    <!-- Live, interactieve Google Maps-kaart als blikvanger bovenaan — het\n         eerste wat een veldagent wil zien om in te schatten of de rit loont.\n         Street View wordt direct als beweegbaar panorama ingeladen (net als in\n         het Verkennen-zijpaneel), niet meer als losse knop. -->\n    <LocationMap :location=\"detail.location\" street-view-mode=\"embed\" />\n\n    <!-- Naam + AI-score + klikbaar adres (→ Google Maps) + korte samenvatting,\n         netjes bij elkaar direct onder de kaart. -->\n    <section class=\"detail__intro\">\n      <div class=\"detail__intro-top\">\n        <h2 class=\"detail__intro-name\">{{ detail.location.companyName }}</h2>\n        <RatingBadge\n          v-if=\"consensusOverall !== null\"\n          :score=\"consensusOverall\"\n          size=\"md\"\n        />\n      </div>\n      <a\n        v-if=\"introAddressHref\"\n        :href=\"introAddressHref\"\n        class=\"detail__intro-address\"\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      >\n        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\"/>\n          <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n        </svg>\n        <span>{{ introAddressText }}</span>\n      </a>\n      <p v-else class=\"detail__intro-address detail__intro-address--plain\">\n        {{ introAddressText }}\n      </p>\n      <p v-if=\"consensusConclusion\" class=\"detail__intro-summary\">\n        {{ consensusConclusion }}\n      </p>\n    </section>\n\n    <!-- Onze opgeslagen beelden (luchtfoto met perceelslijn + street-view-\n         snapshots) blijven beschikbaar, maar lager dan de live kaart. -->\n    <LocationInfoPanel\n      :location=\"detail.location\"\n      :images=\"detail.images\"\n      @update:images=\"handleImagesUpdated\"\n    />\n\n    <div v-if=\"!detail.latestAnalysis\" class=\"detail__warning\">\n      <!-- TEC-138: onderscheid \"nog nooit geanalyseerd\" van \"vorige analyse\n           mislukt\". De veldagent ziet bij een mislukking een duidelijke melding\n           i.p.v. een nep-score; de rauwe (spend-limit-)foutmelding tonen we\n           bewust niet. Zelfde startknop als bij \"nog geen analyse\". -->\n      <p v-if=\"detail.failedAnalysis\" class=\"detail__warning-text\">\n        De vorige analyse voor deze locatie is mislukt en moet opnieuw uitgevoerd\n        worden. Start hieronder een nieuwe analyse.\n      </p>\n      <p v-else class=\"detail__warning-text\">\n        Nog geen AI-analyse beschikbaar voor deze locatie. Feedback geven heeft pas zin\n        nadat een analyse gedraaid is.\n      </p>\n      <button\n        type=\"button\"\n        class=\"detail__start-analysis\"\n        @click=\"onStartButtonClick\"\n      >\n        <template v-if=\"analyzing\">\n          <span class=\"detail__start-spinner\" aria-hidden=\"true\"></span>\n          Analyse bezig… (bekijk voortgang)\n        </template>\n        <template v-else>\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"m5 3 14 9-14 9V3Z\"/>\n          </svg>\n          Analyse starten\n        </template>\n      </button>\n    </div>\n\n    <div\n      v-if=\"previousFeedbackAt && detail.latestAnalysis\"\n      class=\"detail__prefill-notice\"\n    >\n      Je hebt deze locatie al beoordeeld<template v-if=\"previousFeedbackDateLabel\">\n        op {{ previousFeedbackDateLabel }}</template>.\n      Je eerdere antwoorden zijn ingevuld — pas ze aan en verstuur opnieuw om ze bij te werken.\n    </div>\n\n    <!-- \"Review nodig\"-banner: getoond zodra minimaal 1 model deze analyse vlagt\n         (PublicRPC.getLocationDetail aggregeert dit op latestAnalysis). Toont de\n         concrete redenen (reviewFlags) wanneer beschikbaar, anders algemene copy.\n         De golden tone matcht het bestaande \"let-op\"-register van de PWA. -->\n    <div\n      v-if=\"detail.latestAnalysis?.requiresHumanReview\"\n      class=\"detail__review-banner\"\n      role=\"note\"\n    >\n      <span class=\"detail__review-banner-icon\" aria-hidden=\"true\">⚠</span>\n      <div class=\"detail__review-banner-body\">\n        <strong>Review nodig</strong>\n        <!-- Concrete redenen wanneer de analyse ze heeft (observe-then-score);\n             anders de algemene toelichting (oude/monolithische runs). -->\n        <template v-if=\"reviewReasons.length > 0\">\n          <p>De AI was onzeker over:</p>\n          <ul class=\"detail__review-banner-list\">\n            <li v-for=\"reason in reviewReasons\" :key=\"reason\">{{ reason }}</li>\n          </ul>\n          <p>Controleer deze locatie ter plaatse extra zorgvuldig.</p>\n        </template>\n        <p v-else>\n          De AI was onzeker over één of meer aspecten — bijvoorbeeld de 50%-parkeerregel,\n          een reststrook-alternatief, of niet-vaststelbare terreingrenzen. Controleer\n          deze locatie ter plaatse extra zorgvuldig.\n        </p>\n      </div>\n    </div>\n\n    <form class=\"detail__form\" @submit.prevent=\"handleSubmit\">\n      <!-- Snel-pad: \"Eens met alles\". Spaart het langslopen van elke\n           dimensie wanneer de veldagent de AI-beoordeling overal onderschrijft.\n           Opent een bevestigingsdialog (TEC-128). -->\n      <button\n        v-if=\"detail.latestAnalysis\"\n        type=\"button\"\n        class=\"detail__agree-all\"\n        :disabled=\"isSubmitting\"\n        @click=\"onAgreeAllClick\"\n      >\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M20 6 9 17l-5-5\"/>\n        </svg>\n        Eens met alles — meteen afronden\n      </button>\n\n      <!-- Quick-Scan -->\n      <div v-if=\"detail.latestAnalysis\" class=\"detail__group-block\">\n        <h2 class=\"detail__group-label\">Quick-Scan</h2>\n        <QuickScanSection\n          v-for=\"d in DIMENSIONS\"\n          :key=\"d.key\"\n          :title=\"d.label\"\n          :ai-score=\"aiScores[d.key]\"\n          :explanation=\"explanationFor(d.explanationKey)\"\n          :agreement=\"feedback[d.key]\"\n          :reason=\"reasons[d.key]\"\n          :reason-error=\"reasonErrors[d.key]\"\n          @update:agreement=\"setAgreement(d.key, $event)\"\n          @update:reason=\"setReason(d.key, $event)\"\n        />\n      </div>\n\n      <!-- Eindoordeel -->\n      <div v-if=\"detail.latestAnalysis && consensusOverall !== null\" class=\"detail__group-block\">\n        <h2 class=\"detail__group-label\">Eindoordeel</h2>\n        <section class=\"detail__card detail__sub-card\">\n          <p class=\"detail__sub-body\">\n            Op basis van de totaalscore plaatst AI deze locatie in de groep:\n          </p>\n          <div class=\"detail__rating-wrap\">\n            <RatingBadge :score=\"consensusOverall!\" size=\"md\" />\n          </div>\n          <AgreeDisagree\n            :model-value=\"feedback.OverallRating\"\n            :reason=\"reasons.OverallRating\"\n            :reason-error=\"reasonErrors.OverallRating\"\n            reason-placeholder=\"Bijv. ik vind het eerder 'slecht', niet 'voldoende'\"\n            @update:model-value=\"setAgreement('OverallRating', $event)\"\n            @update:reason=\"setReason('OverallRating', $event)\"\n          />\n        </section>\n      </div>\n\n      <!-- Opmerkingen -->\n      <div v-if=\"detail.latestAnalysis\" class=\"detail__group-block\">\n        <h2 class=\"detail__group-label\">Overige opmerkingen</h2>\n        <section class=\"detail__card detail__sub-card\">\n          <label class=\"detail__label\">Iets wat je nog kwijt wilt?</label>\n          <textarea\n            v-model=\"generalNotes\"\n            rows=\"4\"\n            maxlength=\"1500\"\n            placeholder=\"Dingen om op te letten, observaties die de AI gemist heeft, enz.\"\n            class=\"detail__textarea\"\n          ></textarea>\n        </section>\n      </div>\n\n      <div v-if=\"submitError\" class=\"detail__submit-error\">\n        {{ submitError }}\n      </div>\n\n      <div v-if=\"attemptedSubmit && validationErrors.length > 0\" class=\"detail__submit-error\">\n        <p class=\"detail__submit-error-title\">\n          Nog niet klaar om te verzenden — vul eerst het volgende in:\n        </p>\n        <ul class=\"detail__submit-error-list\">\n          <li v-for=\"(msg, i) in validationErrors\" :key=\"i\">{{ msg }}</li>\n        </ul>\n      </div>\n\n      <button\n        v-if=\"detail.latestAnalysis\"\n        type=\"submit\"\n        class=\"detail__submit\"\n        :class=\"isFormInvalid && 'detail__submit--invalid'\"\n        :disabled=\"isSubmitting\"\n        :aria-disabled=\"isFormInvalid\"\n      >\n        <template v-if=\"isSubmitting\">Verzenden...</template>\n        <template v-else>\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M22 2 11 13\"/>\n            <path d=\"M22 2 15 22l-4-9-9-4Z\"/>\n          </svg>\n          Feedback verzenden\n        </template>\n      </button>\n\n      <button\n        v-if=\"showDebugFill && detail.latestAnalysis\"\n        type=\"button\"\n        class=\"detail__debug-fill\"\n        @click=\"debugFillRandom\"\n      >🎲 Debug: random invullen</button>\n    </form>\n\n    <ConfirmDialog\n      v-model:open=\"confirmOpen\"\n      tone=\"default\"\n      title=\"AI-analyse starten?\"\n      message=\"Er wordt een nieuwe AI-analyse voor deze locatie gestart. Dit duurt ongeveer tussen de 1 en 2 minuten.\"\n      confirm-label=\"Analyse starten\"\n      cancel-label=\"Annuleren\"\n      @confirm=\"onStartAnalysisConfirmed\"\n    >\n      <template #icon>\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"m5 3 14 9-14 9V3Z\"/>\n        </svg>\n      </template>\n    </ConfirmDialog>\n\n    <ConfirmDialog\n      v-model:open=\"confirmAgreeAllOpen\"\n      tone=\"default\"\n      title=\"Eens met alles?\"\n      message=\"Je geeft hiermee aan dat je het op alle punten met de AI-beoordeling eens bent. De feedback wordt direct verzonden. Wat je in 'Overige opmerkingen' hebt getypt, gaat mee.\"\n      confirm-label=\"Verzenden\"\n      cancel-label=\"Annuleren\"\n      @confirm=\"onAgreeAllConfirmed\"\n    >\n      <template #icon>\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M20 6 9 17l-5-5\"/>\n        </svg>\n      </template>\n    </ConfirmDialog>\n\n    <ProgressDialog\n      v-model:open=\"progressOpen\"\n      :stage=\"progressStage\"\n      :state=\"progressState\"\n      :error-message=\"progressError\"\n      @close=\"onProgressClose\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, reactive, ref, watch } from \"vue\";\nimport AddToListButton from \"../components/AddToListButton.vue\";\nimport AgreeDisagree from \"../components/AgreeDisagree.vue\";\nimport ConfirmDialog from \"../components/ConfirmDialog.vue\";\nimport LocationInfoPanel from \"../components/LocationInfoPanel.vue\";\nimport LocationMap from \"../components/LocationMap.vue\";\nimport ProgressDialog from \"../components/ProgressDialog.vue\";\nimport QuickScanSection from \"../components/QuickScanSection.vue\";\nimport RatingBadge from \"../components/RatingBadge.vue\";\nimport {\n  getAnalysisStatus,\n  getLocationDetail,\n  getMyFeedbackForLocation,\n  startLocationAnalysis,\n  submitFeedback,\n} from \"../lib/api\";\nimport { isDebugFillHost } from \"../lib/debugHost\";\nimport { googleMapsUrl } from \"../lib/maps\";\nimport { usePersonalList } from \"../lib/personalList\";\nimport { reviewReasonLabels } from \"../lib/reviewFlags\";\nimport { urlHome, urlLocation } from \"../lib/urls\";\nimport type {\n  Agreement,\n  AnalysisImages,\n  ConsensusExplanations,\n  LocationDetail,\n  LocationSummary,\n  ModelResult,\n} from \"../lib/types\";\n\nconst props = defineProps<{\n  locationId: number;\n}>();\n\nconst homeUrl = urlHome();\n\n// ---------------------------------------------------------------------------\n// Dimension config (Quick-Scan)\n// ---------------------------------------------------------------------------\nconst DIMENSIONS = [\n  { key: \"NatureSize\", label: \"Aard & Grootte\", scoreField: \"scoreNatureSize\", explanationKey: \"natureSize\" },\n  { key: \"ExtraServices\", label: \"Extra services\", scoreField: \"scoreExtraServices\", explanationKey: \"extraServices\" },\n  { key: \"ParkingSpace\", label: \"Parkeerruimte\", scoreField: \"scoreParkingSpace\", explanationKey: \"parkingSpace\" },\n  { key: \"Accessibility\", label: \"Toegankelijkheid\", scoreField: \"scoreAccessibility\", explanationKey: \"accessibility\" },\n  { key: \"Visibility\", label: \"Zichtbaarheid\", scoreField: \"scoreVisibility\", explanationKey: \"visibility\" },\n] as const;\n\ntype DimensionKey = (typeof DIMENSIONS)[number][\"key\"];\ntype ExplanationKey = (typeof DIMENSIONS)[number][\"explanationKey\"];\n\n// Parking feedback is a single Quick-Scan dimension (\"ParkingSpace\") — the\n// former standalone \"Aantal parkeerplaatsen\" + \"Minstens 3 plekken naast elkaar\"\n// questions are gone (TEC-93). The backend still accepts the old columns, we\n// just no longer collect them.\nconst REASONED_KEYS = [\n  \"NatureSize\", \"ExtraServices\", \"ParkingSpace\", \"Accessibility\", \"Visibility\",\n  \"OverallRating\",\n] as const;\n\ntype ReasonedKey = (typeof REASONED_KEYS)[number];\n\n// ---------------------------------------------------------------------------\n// State\n// ---------------------------------------------------------------------------\nconst detail = ref<LocationDetail | null>(null);\nconst error = ref<string | null>(null);\nconst isLoading = ref(true);\n\nconst feedback = reactive<Record<ReasonedKey, Agreement | undefined>>({\n  NatureSize: undefined,\n  ExtraServices: undefined,\n  ParkingSpace: undefined,\n  Accessibility: undefined,\n  Visibility: undefined,\n  OverallRating: undefined,\n});\n\nconst reasons = reactive<Record<ReasonedKey, string>>({\n  NatureSize: \"\",\n  ExtraServices: \"\",\n  ParkingSpace: \"\",\n  Accessibility: \"\",\n  Visibility: \"\",\n  OverallRating: \"\",\n});\n\nconst generalNotes = ref(\"\");\nconst gpsCoords = ref<{ lat: number; lng: number } | null>(null);\n\nconst attemptedSubmit = ref(false);\nconst isSubmitting = ref(false);\nconst isSubmitted = ref(false);\nconst submitError = ref<string | null>(null);\nconst confirmAgreeAllOpen = ref(false);\n\n// Persoonlijke planning-lijst — na succesvolle submit verdwijnt de locatie\n// uit de lijst en navigeren we naar de eerstvolgende. wasInList legt vast of\n// hij erin zat zodat de success-state de juiste tekst toont.\nconst personalList = usePersonalList();\nconst wasInList = ref(false);\nconst nextInListId = ref<number | null>(null);\n\n// Snapshot voor de AddToListButton in de header — zodra detail is geladen\n// bouwen we een minimale LocationSummary zodat de sidebar dezelfde velden\n// krijgt als bij toevoegen vanaf HomeView.\nconst locationSummary = computed<LocationSummary | null>(() => {\n  if (!detail.value?.location) return null;\n  const loc = detail.value.location;\n  return {\n    id: loc.id,\n    companyName: loc.companyName,\n    address: loc.address,\n    city: loc.city,\n    province: loc.province,\n    latitude: loc.latitude,\n    longitude: loc.longitude,\n    analysisCount: detail.value.feedbackCount ?? 0,\n    latestScore: consensusOverall.value,\n    requiresHumanReview: detail.value.latestAnalysis?.requiresHumanReview ?? false,\n  };\n});\n\n// Pre-fill cue: set to the createdAt ISO of the row we loaded so we can show\n// a subtle \"je hebt deze locatie eerder beoordeeld\" banner.\nconst previousFeedbackAt = ref<string | null>(null);\n\nconst previousFeedbackDateLabel = computed<string | null>(() => {\n  if (!previousFeedbackAt.value) return null;\n  const d = new Date(previousFeedbackAt.value);\n  if (Number.isNaN(d.getTime())) return null;\n  return d.toLocaleDateString(\"nl-NL\", { day: \"numeric\", month: \"long\", year: \"numeric\" });\n});\n\n// ---------------------------------------------------------------------------\n// Derived\n// ---------------------------------------------------------------------------\nconst modelResults = computed(() => detail.value?.latestAnalysis?.modelResults ?? []);\nconst consensus = computed(() => detail.value?.latestAnalysis?.consensusScores ?? null);\nconst consensusOverall = computed(() => consensus.value?.consensusOverallScore ?? null);\nconst consensusExplanations = computed<ConsensusExplanations | null>(\n  () => detail.value?.latestAnalysis?.consensusExplanations ?? null,\n);\nconst consensusConclusion = computed<string | null>(\n  () => detail.value?.latestAnalysis?.consensusConclusion ?? null,\n);\n// Intro block: address line shown under the name. Clickable → Google Maps when\n// we have coordinates; plain text otherwise.\nconst introAddressText = computed<string>(() => {\n  const loc = detail.value?.location;\n  if (!loc) return \"\";\n  const parts = [\n    loc.address,\n    [loc.postalCode, loc.city].filter(Boolean).join(\" \"),\n  ].filter(Boolean);\n  return parts.join(\", \");\n});\n\nconst introAddressHref = computed<string | null>(() => {\n  const loc = detail.value?.location;\n  if (!loc || loc.latitude === null || loc.longitude === null) return null;\n  const label = [loc.companyName, loc.address].filter(Boolean).join(\", \") || null;\n  return googleMapsUrl({ lat: loc.latitude, lng: loc.longitude, label });\n});\n\n// Concrete review reasons for the banner. Empty for older/monolithic runs\n// without a scoring breakdown — the banner then falls back to generic copy.\nconst reviewReasons = computed(() =>\n  reviewReasonLabels(detail.value?.latestAnalysis?.reviewFlags ?? []),\n);\n\nfunction averageModelScore(field: keyof ModelResult): number | null {\n  const values = modelResults.value\n    .map((mr) => mr[field])\n    .filter((v): v is number => typeof v === \"number\");\n  if (values.length === 0) return null;\n  return Math.round(values.reduce((sum, s) => sum + s, 0) / values.length);\n}\n\nconst aiScores = computed(() => {\n  const out = {} as Record<DimensionKey, number | null>;\n  for (const d of DIMENSIONS) {\n    out[d.key] = averageModelScore(d.scoreField as keyof ModelResult);\n  }\n  return out;\n});\n\nfunction explanationFor(key: ExplanationKey): string | null {\n  return consensusExplanations.value?.[key] ?? null;\n}\n\nconst reasonErrors = computed<Partial<Record<ReasonedKey, string>>>(() => {\n  if (!attemptedSubmit.value) return {};\n  const errs: Partial<Record<ReasonedKey, string>> = {};\n  for (const key of REASONED_KEYS) {\n    if (feedback[key] === \"disagree\" && reasons[key].trim().length === 0) {\n      errs[key] = \"Bij 'Oneens' is een reden verplicht\";\n    }\n  }\n  return errs;\n});\n\n// All sections that must be answered, with human-readable labels used in the\n// validation error list.\nconst SECTION_LABELS: Record<ReasonedKey, string> = {\n  NatureSize: \"Aard & Grootte\",\n  ExtraServices: \"Extra services\",\n  ParkingSpace: \"Parkeerruimte\",\n  Accessibility: \"Toegankelijkheid\",\n  Visibility: \"Zichtbaarheid\",\n  OverallRating: \"Eindoordeel\",\n};\n\nconst validationErrors = computed<string[]>(() => {\n  const errs: string[] = [];\n\n  // Only enforce section-answers when we actually have an analysis to react to.\n  if (detail.value?.latestAnalysis) {\n    for (const key of REASONED_KEYS) {\n      const agreement = feedback[key];\n      if (!agreement) {\n        errs.push(`Kies bij '${SECTION_LABELS[key]}' Eens of Oneens.`);\n      } else if (agreement === \"disagree\" && reasons[key].trim().length === 0) {\n        errs.push(`Geef een reden op bij '${SECTION_LABELS[key]}'.`);\n      }\n    }\n  }\n  return errs;\n});\n\nconst isFormInvalid = computed(() => validationErrors.value.length > 0);\n\n// Dev-only helper: only show when running against localhost.\nconst showDebugFill = typeof window !== \"undefined\" && isDebugFillHost(window.location.hostname);\n\nconst DEBUG_REASONS = [\n  \"Ter plekke zie ik iets anders\",\n  \"De luchtfoto klopt niet met de situatie nu\",\n  \"Er is een verbouwing geweest\",\n  \"De rode lijn loopt verkeerd\",\n  \"Er staat een container op de plek\",\n];\nconst DEBUG_GENERAL_NOTES = [\n  \"\",\n  \"Geen bijzonderheden.\",\n  \"Laagseizoen — mogelijk meer ruimte dan normaal.\",\n  \"Automatische debug-invoer.\",\n];\nfunction pickOne<T>(arr: readonly T[]): T {\n  return arr[Math.floor(Math.random() * arr.length)];\n}\n\nfunction debugFillRandom() {\n  for (const key of REASONED_KEYS) {\n    const agreement: Agreement = Math.random() < 0.6 ? \"agree\" : \"disagree\";\n    feedback[key] = agreement;\n    reasons[key] = agreement === \"disagree\" ? pickOne(DEBUG_REASONS) : \"\";\n  }\n  generalNotes.value = pickOne(DEBUG_GENERAL_NOTES);\n  attemptedSubmit.value = false;\n}\n\n// ---------------------------------------------------------------------------\n// Handlers\n// ---------------------------------------------------------------------------\nfunction setAgreement(key: ReasonedKey, value: Agreement | undefined) {\n  feedback[key] = value;\n}\nfunction setReason(key: ReasonedKey, value: string) {\n  reasons[key] = value;\n}\n\nfunction onAgreeAllClick() {\n  confirmAgreeAllOpen.value = true;\n}\n\nasync function onAgreeAllConfirmed() {\n  for (const key of REASONED_KEYS) {\n    feedback[key] = \"agree\";\n    reasons[key] = \"\";\n  }\n  await handleSubmit();\n}\n\nfunction handleImagesUpdated(images: AnalysisImages) {\n  if (detail.value) {\n    detail.value.images = images;\n  }\n}\n\nasync function handleSubmit() {\n  attemptedSubmit.value = true;\n\n  if (!detail.value?.latestAnalysis || !detail.value.location) return;\n  if (isFormInvalid.value) return;\n\n  isSubmitting.value = true;\n  submitError.value = null;\n\n  const reasonOrUndef = (key: ReasonedKey): string | undefined =>\n    feedback[key] === \"disagree\" ? reasons[key].trim() || undefined : undefined;\n\n  try {\n    await submitFeedback({\n      locationId: detail.value.location.id,\n      analysisId: detail.value.latestAnalysis.id,\n\n      feedbackNatureSize: feedback.NatureSize,\n      reasonNatureSize: reasonOrUndef(\"NatureSize\"),\n      feedbackExtraServices: feedback.ExtraServices,\n      reasonExtraServices: reasonOrUndef(\"ExtraServices\"),\n      feedbackParkingSpace: feedback.ParkingSpace,\n      reasonParkingSpace: reasonOrUndef(\"ParkingSpace\"),\n      feedbackAccessibility: feedback.Accessibility,\n      reasonAccessibility: reasonOrUndef(\"Accessibility\"),\n      feedbackVisibility: feedback.Visibility,\n      reasonVisibility: reasonOrUndef(\"Visibility\"),\n\n      feedbackOverallRating: feedback.OverallRating,\n      reasonOverallRating: reasonOrUndef(\"OverallRating\"),\n\n      generalNotes: generalNotes.value.trim() || undefined,\n\n      feedbackLatitude: gpsCoords.value?.lat,\n      feedbackLongitude: gpsCoords.value?.lng,\n    });\n\n    // Personal-list bookkeeping: bepaal vóór het verwijderen wat de\n    // eerstvolgende ID zou worden, sluit deze af, en toon de juiste copy.\n    const id = detail.value.location.id;\n    wasInList.value = personalList.isInList(id);\n    if (wasInList.value) {\n      nextInListId.value = personalList.nextLocationId(id);\n      personalList.removeFromList(id);\n    } else {\n      nextInListId.value = personalList.nextLocationId();\n    }\n    isSubmitted.value = true;\n  } catch (err) {\n    submitError.value = err instanceof Error ? err.message : \"Feedback kon niet worden verzonden\";\n  } finally {\n    isSubmitting.value = false;\n  }\n}\n\ntype PreviousFeedback = Awaited<ReturnType<typeof getMyFeedbackForLocation>>[\"feedback\"];\n\nfunction toAgreement(value: unknown): Agreement | undefined {\n  return value === \"agree\" || value === \"disagree\" ? value : undefined;\n}\n\nfunction prefillFromPreviousFeedback(row: NonNullable<PreviousFeedback>) {\n  feedback.NatureSize = toAgreement(row.feedbackNatureSize);\n  feedback.ExtraServices = toAgreement(row.feedbackExtraServices);\n  feedback.ParkingSpace = toAgreement(row.feedbackParkingSpace);\n  feedback.Accessibility = toAgreement(row.feedbackAccessibility);\n  feedback.Visibility = toAgreement(row.feedbackVisibility);\n  feedback.OverallRating = toAgreement(row.feedbackOverallRating);\n\n  reasons.NatureSize = row.reasonNatureSize ?? \"\";\n  reasons.ExtraServices = row.reasonExtraServices ?? \"\";\n  reasons.ParkingSpace = row.reasonParkingSpace ?? \"\";\n  reasons.Accessibility = row.reasonAccessibility ?? \"\";\n  reasons.Visibility = row.reasonVisibility ?? \"\";\n  reasons.OverallRating = row.reasonOverallRating ?? \"\";\n\n  generalNotes.value = row.generalNotes ?? \"\";\n\n  previousFeedbackAt.value = row.createdAt;\n}\n\n// Loads (or reloads) the location detail. Extracted so the analysis-start flow\n// can refetch once an analysis completes — making the feedback form appear\n// without a full page reload.\nasync function loadDetail() {\n  try {\n    const result = await getLocationDetail(props.locationId);\n    if (!result.location) {\n      error.value = `Locatie #${props.locationId} niet gevonden`;\n    } else {\n      detail.value = result;\n      error.value = null;\n    }\n  } catch (err) {\n    error.value = err instanceof Error ? err.message : \"Fout bij laden locatiegegevens\";\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Start AI analysis (when this location has none yet)\n// ---------------------------------------------------------------------------\n// `analyzing` is the source of truth for \"an analysis is in flight\" — it stays\n// true while the run is ongoing, INDEPENDENT of whether the progress dialog is\n// open. So closing the dialog (or refreshing the page) keeps the running state\n// visible on the start button, and polling continues in the background until\n// the analysis finishes.\nconst confirmOpen = ref(false);\nconst progressOpen = ref(false);\nconst analyzing = ref(false);\nconst progressState = ref<\"running\" | \"completed\" | \"failed\">(\"running\");\nconst progressStage = ref<string | null>(null);\nconst progressError = ref<string | null>(null);\n\nconst POLL_INTERVAL_MS = 2500;\nconst MAX_POLL_FAILURES = 3;\nlet pollTimer: ReturnType<typeof setTimeout> | null = null;\nlet pollFailures = 0;\n// Guards the one-time image refresh during a run (see maybeRefreshImagesDuringRun).\nlet imagesRefreshedDuringRun = false;\n\nfunction stopPoll() {\n  if (pollTimer !== null) {\n    clearTimeout(pollTimer);\n    pollTimer = null;\n  }\n}\n\nfunction schedulePoll(analysisId: number) {\n  pollTimer = setTimeout(() => { void pollOnce(analysisId); }, POLL_INTERVAL_MS);\n}\n\n// Begins (or resumes) tracking an in-flight analysis: flags `analyzing` and\n// starts the poll loop. The progress dialog is opened separately by the caller\n// so we can also resume silently after a refresh (button-only, no popup).\nfunction beginPolling(analysisId: number) {\n  analyzing.value = true;\n  pollFailures = 0;\n  imagesRefreshedDuringRun = false;\n  stopPoll();\n  schedulePoll(analysisId);\n}\n\n// The analysis fetches + uploads photos in its first stage (`fetching_images`),\n// which flips the location's image flags. Our `detail.images` was loaded before\n// that, so it's empty. Once the image stage has passed, re-read the detail ONCE\n// to pull the fresh Publisher photo URLs — so the user can review them under\n// \"Locatiegegevens\" while the rest of the analysis is still running.\nasync function maybeRefreshImagesDuringRun(stage: string | null) {\n  if (imagesRefreshedDuringRun) return;\n  // fetching_images is the first stage; wait until it has passed.\n  if (!stage || stage === \"fetching_images\") return;\n  imagesRefreshedDuringRun = true;\n  const hasImage = Boolean(detail.value?.images?.satellite)\n    || (detail.value?.images?.streetView?.length ?? 0) > 0;\n  if (!hasImage) await loadDetail();\n}\n\nasync function pollOnce(analysisId: number) {\n  try {\n    const { status, stage } = await getAnalysisStatus(analysisId);\n    pollFailures = 0;\n    progressStage.value = stage;\n\n    if (status === \"completed\") {\n      progressState.value = \"completed\";\n      analyzing.value = false;\n      stopPoll();\n      // Refetch first so the form is rendered the instant the dialog closes.\n      await loadDetail();\n      progressOpen.value = false;\n      return;\n    }\n    if (status === \"failed\") {\n      progressState.value = \"failed\";\n      progressError.value = \"De analyse is mislukt. Probeer het later opnieuw.\";\n      analyzing.value = false;\n      stopPoll();\n      // Surface the failure even if the user had closed the dialog.\n      progressOpen.value = true;\n      return;\n    }\n    // still pending/running → surface photos as soon as they're ready, keep polling\n    await maybeRefreshImagesDuringRun(stage);\n    schedulePoll(analysisId);\n  } catch {\n    // Transient blips on cellular shouldn't kill the run — tolerate a few.\n    pollFailures += 1;\n    if (pollFailures >= MAX_POLL_FAILURES) {\n      progressState.value = \"failed\";\n      progressError.value = \"Kan de status niet ophalen. Controleer je verbinding.\";\n      analyzing.value = false;\n      stopPoll();\n      progressOpen.value = true;\n      return;\n    }\n    schedulePoll(analysisId);\n  }\n}\n\n// Start button: re-open the progress dialog when an analysis is already\n// running, otherwise ask for confirmation to start a new one.\nfunction onStartButtonClick() {\n  if (analyzing.value) {\n    progressOpen.value = true;\n  } else {\n    confirmOpen.value = true;\n  }\n}\n\nasync function onStartAnalysisConfirmed() {\n  progressError.value = null;\n  progressStage.value = null;\n  progressState.value = \"running\";\n  progressOpen.value = true;\n  try {\n    const { analysisId } = await startLocationAnalysis(props.locationId);\n    beginPolling(analysisId);\n  } catch (err) {\n    progressState.value = \"failed\";\n    progressError.value = err instanceof Error ? err.message : \"Analyse kon niet worden gestart.\";\n  }\n}\n\nfunction onProgressClose() {\n  // Only hide the dialog — the analysis keeps running server-side and the poll\n  // keeps going, so the start button stays in its \"Analyse bezig…\" state and\n  // the form appears automatically once it completes.\n  progressOpen.value = false;\n}\n\nonUnmounted(stopPoll);\n\n// Resets all per-location state, then (re)loads the location and its previous\n// feedback. Runs on first mount AND whenever the :id route param changes —\n// vue-router REUSES this same component instance across #/location/A →\n// #/location/B (e.g. the \"Volgende locatie ›\" jump), so onMounted fires only\n// once. Without re-running this, the success screen and stale detail of the\n// previous location would linger, making the button look like it does nothing.\nasync function initLocation() {\n  stopPoll();\n  isLoading.value = true;\n  isSubmitted.value = false;\n  attemptedSubmit.value = false;\n  isSubmitting.value = false;\n  submitError.value = null;\n  error.value = null;\n  detail.value = null;\n  wasInList.value = false;\n  nextInListId.value = null;\n  previousFeedbackAt.value = null;\n  generalNotes.value = \"\";\n  for (const key of REASONED_KEYS) {\n    feedback[key] = undefined;\n    reasons[key] = \"\";\n  }\n  analyzing.value = false;\n  confirmOpen.value = false;\n  progressOpen.value = false;\n  progressError.value = null;\n  progressStage.value = null;\n  progressState.value = \"running\";\n\n  // Fetch detail + any previous feedback in parallel — both are independent,\n  // and pre-fill is a best-effort UX nicety so any failure must not block the\n  // detail view.\n  const [, previousResult] = await Promise.allSettled([\n    loadDetail(),\n    getMyFeedbackForLocation(props.locationId),\n  ]);\n\n  if (previousResult.status === \"fulfilled\" && previousResult.value.feedback) {\n    prefillFromPreviousFeedback(previousResult.value.feedback);\n  }\n\n  // Resume after a refresh: if an analysis this location started is still\n  // running, reflect it on the button (and keep polling) without popping the\n  // dialog open — the user can tap the button to view progress.\n  // (Typed local: TS flow-narrowed detail.value to null from the reset above\n  // and can't see that loadDetail() reassigned it across the await.)\n  const loaded: LocationDetail | null = detail.value;\n  const runningId = loaded?.runningAnalysisId ?? null;\n  if (runningId && !loaded?.latestAnalysis) {\n    progressState.value = \"running\";\n    progressError.value = null;\n    beginPolling(runningId);\n  }\n\n  isLoading.value = false;\n}\n\nonMounted(() => {\n  // GPS is the user's position, not the location's — fetch once, independent of\n  // which location is shown.\n  if (navigator.geolocation) {\n    navigator.geolocation.getCurrentPosition(\n      (position) => {\n        gpsCoords.value = {\n          lat: position.coords.latitude,\n          lng: position.coords.longitude,\n        };\n      },\n      () => { /* silently ignore denied/unavailable */ },\n    );\n  }\n\n  void initLocation();\n});\n\n// Re-initialize when navigating between locations without a full remount.\nwatch(() => props.locationId, () => { void initLocation(); });\n</script>\n\n<style scoped>\n.detail {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  padding: 0 16px 32px;\n}\n\n/* Sticky glass nav bar — compact iOS-style nav with back + title + badge. */\n.detail__header {\n  position: sticky;\n  top: 0;\n  z-index: 10;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  margin-top: 12px;\n  padding: 12px 16px;\n  background: var(--snl-glass);\n  backdrop-filter: blur(18px) saturate(150%);\n  -webkit-backdrop-filter: blur(18px) saturate(150%);\n  border: 1px solid var(--snl-line);\n  border-radius: 20px;\n}\n.detail__back {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 36px;\n  height: 36px;\n  flex-shrink: 0;\n  border-radius: 99px;\n  border: 1px solid var(--snl-line);\n  background: var(--snl-surface);\n  color: var(--snl-mint);\n  font-size: 20px;\n  line-height: 1;\n  text-decoration: none;\n  transition: background 0.12s, transform 0.12s;\n}\n.detail__back:hover { background: var(--snl-surface-2); }\n.detail__back:active { transform: scale(0.94); }\n.detail__header-body { min-width: 0; flex: 1; padding-right: 4px; }\n.detail__header-aside {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  flex-shrink: 0;\n}\n.detail__title {\n  margin: 0;\n  font-size: 15px;\n  font-weight: 600;\n  letter-spacing: -0.015em;\n  color: var(--snl-fg);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n/* Intro block — name + score + clickable address + short summary, grouped\n   directly under the live map hero (TEC-93). */\n.detail__intro {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  margin-top: 14px;\n  padding: 16px;\n  border: 1px solid var(--snl-line);\n  border-radius: 20px;\n  background: var(--snl-surface);\n  animation: snl-rise 0.3s var(--ease-spring) both;\n}\n.detail__intro-top {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 12px;\n}\n.detail__intro-name {\n  margin: 0;\n  font-size: 19px;\n  font-weight: 700;\n  letter-spacing: -0.02em;\n  line-height: 1.2;\n  color: var(--snl-fg);\n}\n.detail__intro-address {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n  align-self: flex-start;\n  color: var(--snl-mint);\n  font-size: 13px;\n  font-weight: 500;\n  text-decoration: none;\n  border-bottom: 1px solid rgba(143, 204, 177, 0.35);\n}\n.detail__intro-address svg { flex-shrink: 0; }\n@media (hover: hover) {\n  .detail__intro-address:hover { border-bottom-color: var(--snl-mint); }\n}\n.detail__intro-address--plain {\n  color: var(--snl-fg-muted);\n  border-bottom: 0;\n}\n.detail__intro-summary {\n  position: relative;\n  margin: 4px 0 0;\n  padding: 2px 0 2px 14px;\n  border-left: 3px solid var(--snl-mint);\n  color: var(--snl-fg-muted);\n  font-size: 13px;\n  line-height: 1.6;\n}\n\n.detail__warning {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 12px;\n  margin: 16px 0;\n  padding: 14px 16px;\n  border: 1px solid rgba(242, 180, 65, 0.35);\n  border-radius: 16px;\n  background: rgba(242, 180, 65, 0.08);\n  color: #F9D58B;\n  font-size: 13px;\n  line-height: 1.5;\n  text-align: center;\n}\n.detail__warning-text {\n  margin: 0;\n}\n.detail__start-analysis {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  align-self: center;\n  height: 44px;\n  padding: 0 18px;\n  border: 0;\n  border-radius: 14px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 14px;\n  font-weight: 700;\n  letter-spacing: -0.01em;\n  cursor: pointer;\n  box-shadow: 0 12px 28px -12px rgba(143, 204, 177, 0.55);\n  transition: transform 0.12s var(--ease-spring), box-shadow 0.12s var(--ease-out), opacity 0.12s;\n}\n.detail__start-analysis:hover:not(:disabled) {\n  transform: translateY(-1px);\n  box-shadow: 0 16px 32px -12px rgba(143, 204, 177, 0.7);\n}\n.detail__start-analysis:active:not(:disabled) { transform: scale(0.98); }\n.detail__start-analysis:disabled { opacity: 0.55; cursor: not-allowed; }\n.detail__start-spinner {\n  width: 15px;\n  height: 15px;\n  border-radius: 99px;\n  border: 2px solid rgba(11, 17, 19, 0.3);\n  border-top-color: var(--snl-ink);\n  animation: detail-start-spin 0.8s linear infinite;\n}\n@keyframes detail-start-spin {\n  to { transform: rotate(360deg); }\n}\n\n.detail__prefill-notice {\n  margin: 12px 0 0;\n  padding: 10px 14px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg-muted);\n  font-size: 12.5px;\n  line-height: 1.5;\n}\n\n.detail__review-banner {\n  display: flex;\n  gap: 12px;\n  align-items: flex-start;\n  margin: 12px 0 0;\n  padding: 14px 16px;\n  border: 1px solid rgba(242, 180, 65, 0.45);\n  border-radius: 16px;\n  background: rgba(242, 180, 65, 0.12);\n  color: #F9D58B;\n  font-size: 13px;\n  line-height: 1.5;\n}\n.detail__review-banner-icon {\n  font-size: 20px;\n  line-height: 1;\n  flex-shrink: 0;\n}\n.detail__review-banner-body strong {\n  display: block;\n  font-size: 13.5px;\n  margin-bottom: 2px;\n  color: #FBE4A8;\n}\n.detail__review-banner-body p {\n  margin: 0;\n  color: #F4D293;\n}\n.detail__review-banner-list {\n  margin: 4px 0;\n  padding-left: 18px;\n  color: #F4D293;\n}\n.detail__review-banner-list li {\n  margin: 2px 0;\n}\n\n.detail__form {\n  padding: 16px 0;\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n}\n\n.detail__group-block {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n.detail__group-label {\n  margin: 0 4px;\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.14em;\n  color: var(--snl-fg-subtle);\n}\n\n/* Surface cards — SNL MCard. Works both as top-level card and sub-card. */\n.detail__card,\n.detail__sub-card {\n  padding: 16px;\n  border: 1px solid var(--snl-line);\n  border-radius: 20px;\n  background: var(--snl-surface);\n  color: var(--snl-fg);\n  animation: snl-rise 0.3s var(--ease-spring) both;\n}\n.detail__sub-card + .detail__sub-card { margin-top: 10px; }\n\n.detail__label {\n  display: block;\n  margin-bottom: 8px;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--snl-fg);\n}\n.detail__sub-title {\n  margin: 0 0 4px 0;\n  font-size: 14px;\n  font-weight: 600;\n  letter-spacing: -0.01em;\n  color: var(--snl-fg);\n}\n.detail__sub-body {\n  margin: 0 0 12px 0;\n  font-size: 13px;\n  line-height: 1.55;\n  color: var(--snl-fg-muted);\n}\n.detail__sub-body strong {\n  color: var(--snl-fg);\n  font-weight: 600;\n}\n\n.detail__textarea {\n  width: 100%;\n  padding: 12px 14px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  font-size: 14px;\n  font-family: var(--font-ui);\n  resize: none;\n  outline: none;\n  transition: border-color 0.12s, box-shadow 0.12s;\n}\n.detail__textarea::placeholder { color: var(--snl-fg-placeholder); }\n.detail__textarea:focus {\n  border-color: var(--snl-mint);\n  box-shadow: 0 0 0 3px rgba(143, 204, 177, 0.18);\n}\n\n.detail__rating-wrap {\n  margin-bottom: 10px;\n}\n\n.detail__submit-error {\n  padding: 14px 16px;\n  border: 1px solid rgba(243, 108, 79, 0.35);\n  border-radius: 16px;\n  background: rgba(243, 108, 79, 0.08);\n  color: #FFCFBF;\n  font-size: 13px;\n  line-height: 1.55;\n}\n.detail__submit-error-title {\n  margin: 0 0 6px 0;\n  font-weight: 600;\n  color: var(--snl-fg);\n}\n.detail__submit-error-list {\n  margin: 0;\n  padding-left: 18px;\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n\n/* Primary CTA — mint on ink. Matches the confirmation pattern in the UI-kit\n   mocks (positive action, high legibility on dark bg). */\n.detail__submit {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  width: 100%;\n  height: 56px;\n  border: 0;\n  border-radius: 18px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 15px;\n  font-weight: 700;\n  letter-spacing: -0.01em;\n  box-shadow: 0 18px 36px -12px rgba(143, 204, 177, 0.55);\n  transition: transform 0.12s var(--ease-spring), box-shadow 0.12s var(--ease-out), opacity 0.12s;\n  cursor: pointer;\n}\n.detail__submit:hover:not(.detail__submit--invalid):not(:disabled) {\n  transform: translateY(-1px);\n  box-shadow: 0 22px 40px -12px rgba(143, 204, 177, 0.7);\n}\n.detail__submit:disabled { opacity: 0.55; cursor: not-allowed; }\n.detail__submit--invalid { opacity: 0.5; }\n\n.detail__agree-all {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  width: 100%;\n  height: 48px;\n  padding: 0 18px;\n  border: 1px solid var(--snl-mint);\n  border-radius: 16px;\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n  font-size: 14px;\n  font-weight: 600;\n  letter-spacing: -0.005em;\n  cursor: pointer;\n  transition: background 0.12s, color 0.12s, transform 0.1s var(--ease-out);\n}\n.detail__agree-all:hover:not(:disabled) {\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n}\n.detail__agree-all:active:not(:disabled) { transform: scale(0.99); }\n.detail__agree-all:disabled { opacity: 0.55; cursor: not-allowed; }\n\n.detail__debug-fill {\n  align-self: center;\n  margin-top: 4px;\n  padding: 8px 14px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 12px;\n  background: transparent;\n  color: var(--snl-fg-subtle);\n  font-size: 11.5px;\n  font-weight: 500;\n}\n.detail__debug-fill:hover {\n  background: var(--snl-surface-2);\n  color: var(--snl-mint);\n  border-color: var(--snl-mint);\n}\n\n/* Success state — big mint orb + confirmation copy. */\n.detail__success {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 14px;\n  padding: 24px;\n  text-align: center;\n  animation: snl-rise 0.4s var(--ease-spring);\n}\n.detail__success h2 {\n  margin: 0;\n  font-size: 22px;\n  font-weight: 700;\n  letter-spacing: -0.025em;\n  color: var(--snl-fg);\n}\n.detail__success p {\n  margin: 0;\n  font-size: 14px;\n  color: var(--snl-fg-muted);\n  max-width: 48ch;\n  line-height: 1.55;\n  /* Balance the line breaks so short sentences don't orphan a single word\n     (e.g. \"...staat al klaar.\" breaking \"klaar.\" onto its own line). */\n  text-wrap: balance;\n}\n.detail__success-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 72px;\n  height: 72px;\n  border-radius: 99px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 32px;\n  font-weight: 700;\n  box-shadow: 0 0 0 8px rgba(143, 204, 177, 0.15),\n              0 20px 40px -12px rgba(143, 204, 177, 0.55);\n}\n.detail__back-btn {\n  display: inline-flex;\n  align-items: center;\n  height: 48px;\n  padding: 0 24px;\n  border-radius: 16px;\n  background: var(--snl-koraal);\n  color: #FFFFFF;\n  font-size: 14px;\n  font-weight: 600;\n  text-decoration: none;\n  margin-top: 8px;\n  box-shadow: 0 16px 32px -10px rgba(243, 108, 79, 0.55);\n}\n.detail__back-btn:hover { transform: translateY(-1px); }\n\n.detail__success-hint {\n  margin-top: -4px;\n  font-size: 13px;\n  color: var(--snl-mint);\n}\n.detail__success-actions {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  margin-top: 8px;\n}\n\n.detail__back-link {\n  color: var(--snl-mint);\n  font-size: 14px;\n  font-weight: 500;\n  text-decoration: underline;\n  text-underline-offset: 4px;\n}\n.detail__error {\n  flex: 1;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 14px;\n  padding: 24px;\n  color: var(--snl-fg-muted);\n  font-size: 14px;\n  text-align: center;\n}\n</style>\n","<template>\n  <button\n    type=\"button\"\n    class=\"add-list-btn\"\n    :class=\"{ 'add-list-btn--in': inList }\"\n    :aria-pressed=\"inList\"\n    :title=\"inList ? 'In mijn lijst — klik om te verwijderen' : 'Aan mijn lijst toevoegen'\"\n    @click.stop.prevent=\"onClick\"\n  >\n    <template v-if=\"inList\">\n      <svg\n        class=\"add-list-btn__icon add-list-btn__icon--check\"\n        width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n        stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\n      >\n        <path d=\"M5 13l4 4L19 7\"/>\n      </svg>\n      <svg\n        class=\"add-list-btn__icon add-list-btn__icon--cross\"\n        width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n        stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\n      >\n        <path d=\"M6 6l12 12M6 18L18 6\"/>\n      </svg>\n    </template>\n    <svg\n      v-else\n      width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n      stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\n    >\n      <path d=\"M12 5v14M5 12h14\"/>\n    </svg>\n    <span class=\"add-list-btn__label\">{{ inList ? \"In lijst\" : \"In lijst\" }}</span>\n  </button>\n\n  <ConfirmDialog\n    v-model:open=\"confirmOpen\"\n    title=\"Locatie verwijderen?\"\n    confirm-label=\"Verwijderen\"\n    tone=\"danger\"\n    @confirm=\"confirmRemove\"\n  >\n    Weet je zeker dat je\n    <strong>{{ props.location.companyName }}</strong>\n    uit je planning wilt verwijderen?\n  </ConfirmDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport ConfirmDialog from \"./ConfirmDialog.vue\";\nimport { usePersonalList } from \"../lib/personalList\";\nimport type { LocationSummary } from \"../lib/types\";\n\nconst props = defineProps<{\n  location: LocationSummary;\n}>();\n\nconst { isInList, addToList, removeFromList } = usePersonalList();\n\nconst inList = computed(() => isInList(props.location.id));\nconst confirmOpen = ref(false);\n\nfunction onClick() {\n  if (inList.value) {\n    confirmOpen.value = true;\n  } else {\n    addToList(props.location);\n  }\n}\n\nfunction confirmRemove() {\n  removeFromList(props.location.id);\n}\n</script>\n\n<style scoped>\n.add-list-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 6px;\n  height: 32px;\n  padding: 0 12px;\n  border: 1px solid var(--snl-line-strong);\n  border-radius: 99px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg-muted);\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: -0.005em;\n  white-space: nowrap;\n  transition:\n    background 0.15s var(--ease-out),\n    color 0.15s var(--ease-out),\n    border-color 0.15s var(--ease-out),\n    transform 0.12s var(--ease-spring);\n}\n@media (hover: hover) {\n  .add-list-btn:hover {\n    background: var(--snl-mint-soft);\n    border-color: var(--snl-mint);\n    color: var(--snl-mint);\n  }\n  .add-list-btn--in:hover {\n    background: var(--snl-koraal-soft);\n    border-color: var(--snl-koraal);\n    color: var(--snl-koraal);\n  }\n  .add-list-btn--in:hover .add-list-btn__icon--check {\n    display: none;\n  }\n  .add-list-btn--in:hover .add-list-btn__icon--cross {\n    display: inline;\n  }\n}\n.add-list-btn__icon--cross {\n  display: none;\n}\n.add-list-btn:active {\n  transform: scale(0.97);\n}\n.add-list-btn--in {\n  background: var(--snl-mint);\n  border-color: var(--snl-mint);\n  color: var(--snl-ink);\n}\n.add-list-btn__label {\n  line-height: 1;\n}\n</style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-pressed\", \"title\"]\nconst _hoisted_2 = {\n  key: 1,\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_3 = { class: \"add-list-btn__label\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: _normalizeClass([\"add-list-btn\", { 'add-list-btn--in': $setup.inList }]),\n      \"aria-pressed\": $setup.inList,\n      title: $setup.inList ? 'In mijn lijst — klik om te verwijderen' : 'Aan mijn lijst toevoegen',\n      onClick: _withModifiers($setup.onClick, [\"stop\",\"prevent\"])\n    }, [\n      ($setup.inList)\n        ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n            _cache[1] || (_cache[1] = _createElementVNode(\"svg\", {\n              class: \"add-list-btn__icon add-list-btn__icon--check\",\n              width: \"16\",\n              height: \"16\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"currentColor\",\n              \"stroke-width\": \"2.4\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" })\n            ], -1 /* CACHED */)),\n            _cache[2] || (_cache[2] = _createElementVNode(\"svg\", {\n              class: \"add-list-btn__icon add-list-btn__icon--cross\",\n              width: \"16\",\n              height: \"16\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"currentColor\",\n              \"stroke-width\": \"2.4\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M6 6l12 12M6 18L18 6\" })\n            ], -1 /* CACHED */))\n          ], 64 /* STABLE_FRAGMENT */))\n        : (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, _cache[3] || (_cache[3] = [\n            _createElementVNode(\"path\", { d: \"M12 5v14M5 12h14\" }, null, -1 /* CACHED */)\n          ]))),\n      _createElementVNode(\"span\", _hoisted_3, _toDisplayString($setup.inList ? \"In lijst\" : \"In lijst\"), 1 /* TEXT */)\n    ], 10 /* CLASS, PROPS */, _hoisted_1),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.confirmOpen,\n      \"onUpdate:open\": _cache[0] || (_cache[0] = $event => (($setup.confirmOpen) = $event)),\n      title: \"Locatie verwijderen?\",\n      \"confirm-label\": \"Verwijderen\",\n      tone: \"danger\",\n      onConfirm: $setup.confirmRemove\n    }, {\n      default: _withCtx(() => [\n        _cache[4] || (_cache[4] = _createTextVNode(\" Weet je zeker dat je \", -1 /* CACHED */)),\n        _createElementVNode(\"strong\", null, _toDisplayString($setup.props.location.companyName), 1 /* TEXT */),\n        _cache[5] || (_cache[5] = _createTextVNode(\" uit je planning wilt verwijderen? \", -1 /* CACHED */))\n      ]),\n      _: 1 /* STABLE */,\n      __: [4,5]\n    }, 8 /* PROPS */, [\"open\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AddToListButton.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AddToListButton.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AddToListButton.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AddToListButton.vue\";script.__scopeId = \"data-v-54161f5f\";export default script;","<template>\n  <div class=\"agree-disagree\">\n    <div class=\"agree-disagree__buttons\">\n      <button\n        type=\"button\"\n        class=\"agree-disagree__btn agree-disagree__btn--agree\"\n        :class=\"modelValue === 'agree' && 'agree-disagree__btn--agree-active'\"\n        @click=\"toggle('agree')\"\n      >\n        <span class=\"agree-disagree__icon\" aria-hidden=\"true\">✓</span>\n        Eens\n      </button>\n      <button\n        type=\"button\"\n        class=\"agree-disagree__btn agree-disagree__btn--disagree\"\n        :class=\"modelValue === 'disagree' && 'agree-disagree__btn--disagree-active'\"\n        @click=\"toggle('disagree')\"\n      >\n        <span class=\"agree-disagree__icon\" aria-hidden=\"true\">✕</span>\n        Oneens\n      </button>\n    </div>\n\n    <div\n      class=\"agree-disagree__reveal\"\n      :class=\"modelValue === 'disagree' && 'agree-disagree__reveal--open'\"\n    >\n      <div class=\"agree-disagree__reveal-inner\">\n        <label :for=\"reasonId\" class=\"agree-disagree__reason-label\">\n          Waarom oneens? <span class=\"agree-disagree__required\">*</span>\n        </label>\n        <textarea\n          :id=\"reasonId\"\n          rows=\"3\"\n          maxlength=\"1500\"\n          :value=\"reason\"\n          :placeholder=\"reasonPlaceholder\"\n          :aria-invalid=\"reasonError ? true : undefined\"\n          class=\"agree-disagree__textarea\"\n          :class=\"reasonError && 'agree-disagree__textarea--error'\"\n          @input=\"$emit('update:reason', ($event.target as HTMLTextAreaElement).value)\"\n        ></textarea>\n        <p v-if=\"reasonError\" class=\"agree-disagree__error\">{{ reasonError }}</p>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useId } from \"vue\";\nimport type { Agreement } from \"../lib/types\";\n\nconst props = withDefaults(defineProps<{\n  modelValue?: Agreement;\n  reason: string;\n  reasonError?: string;\n  reasonPlaceholder?: string;\n}>(), {\n  modelValue: undefined,\n  reasonError: undefined,\n  reasonPlaceholder: \"Waarom niet? Licht kort toe...\",\n});\n\nconst emit = defineEmits<{\n  (e: \"update:modelValue\", value: Agreement | undefined): void;\n  (e: \"update:reason\", value: string): void;\n}>();\n\nfunction toggle(value: Agreement) {\n  emit(\"update:modelValue\", props.modelValue === value ? undefined : value);\n}\n\nconst reasonId = useId();\n</script>\n\n<style scoped>\n.agree-disagree__buttons {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 8px;\n}\n.agree-disagree__btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  min-height: 46px;\n  padding: 10px 14px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg-muted);\n  font-size: 13.5px;\n  font-weight: 600;\n  letter-spacing: -0.01em;\n  transition: background 0.12s, color 0.12s, border-color 0.12s, box-shadow 0.12s, transform 0.12s;\n}\n.agree-disagree__btn:hover:not(.agree-disagree__btn--agree-active):not(.agree-disagree__btn--disagree-active) {\n  background: var(--snl-surface-3);\n  color: var(--snl-fg);\n}\n.agree-disagree__btn--agree-active {\n  background: rgba(143, 204, 177, 0.16);\n  border-color: var(--snl-mint);\n  color: var(--snl-mint);\n  box-shadow: 0 0 0 3px rgba(143, 204, 177, 0.18);\n}\n.agree-disagree__btn--disagree-active {\n  background: rgba(243, 108, 79, 0.16);\n  border-color: var(--snl-koraal);\n  color: #FFCFBF;\n  box-shadow: 0 0 0 3px rgba(243, 108, 79, 0.18);\n}\n.agree-disagree__icon {\n  font-size: 15px;\n  line-height: 1;\n  font-weight: 800;\n}\n\n/* Animated reveal — CSS grid trick: row expands from 0fr to 1fr. */\n.agree-disagree__reveal {\n  display: grid;\n  grid-template-rows: 0fr;\n  opacity: 0;\n  margin-top: 0;\n  overflow: hidden;\n  transition: grid-template-rows 0.22s var(--ease-out), opacity 0.22s var(--ease-out), margin 0.22s var(--ease-out);\n}\n.agree-disagree__reveal--open {\n  grid-template-rows: 1fr;\n  opacity: 1;\n  margin-top: 10px;\n}\n.agree-disagree__reveal-inner { min-height: 0; }\n\n.agree-disagree__reason-label {\n  display: block;\n  margin-bottom: 6px;\n  font-size: 11.5px;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n}\n.agree-disagree__required { color: var(--snl-koraal); }\n\n.agree-disagree__textarea {\n  width: 100%;\n  padding: 10px 12px;\n  border: 1px solid var(--snl-line);\n  border-radius: 12px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  font-family: var(--font-ui);\n  font-size: 13.5px;\n  resize: none;\n  outline: none;\n  transition: border-color 0.12s, box-shadow 0.12s;\n}\n.agree-disagree__textarea::placeholder { color: var(--snl-fg-placeholder); }\n.agree-disagree__textarea:focus {\n  border-color: var(--snl-mint);\n  box-shadow: 0 0 0 3px rgba(143, 204, 177, 0.18);\n}\n.agree-disagree__textarea--error {\n  border-color: var(--snl-koraal);\n}\n.agree-disagree__textarea--error:focus {\n  border-color: var(--snl-koraal);\n  box-shadow: 0 0 0 3px rgba(243, 108, 79, 0.2);\n}\n\n.agree-disagree__error {\n  margin: 6px 0 0 0;\n  font-size: 11.5px;\n  font-weight: 500;\n  color: #FFCFBF;\n}\n</style>\n","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"agree-disagree\" }\nconst _hoisted_2 = { class: \"agree-disagree__buttons\" }\nconst _hoisted_3 = { class: \"agree-disagree__reveal-inner\" }\nconst _hoisted_4 = [\"for\"]\nconst _hoisted_5 = [\"id\", \"value\", \"placeholder\", \"aria-invalid\"]\nconst _hoisted_6 = {\n  key: 0,\n  class: \"agree-disagree__error\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass([\"agree-disagree__btn agree-disagree__btn--agree\", $props.modelValue === 'agree' && 'agree-disagree__btn--agree-active']),\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.toggle('agree')))\n      }, _cache[3] || (_cache[3] = [\n        _createElementVNode(\"span\", {\n          class: \"agree-disagree__icon\",\n          \"aria-hidden\": \"true\"\n        }, \"✓\", -1 /* CACHED */),\n        _createTextVNode(\" Eens \", -1 /* CACHED */)\n      ]), 2 /* CLASS */),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass([\"agree-disagree__btn agree-disagree__btn--disagree\", $props.modelValue === 'disagree' && 'agree-disagree__btn--disagree-active']),\n        onClick: _cache[1] || (_cache[1] = $event => ($setup.toggle('disagree')))\n      }, _cache[4] || (_cache[4] = [\n        _createElementVNode(\"span\", {\n          class: \"agree-disagree__icon\",\n          \"aria-hidden\": \"true\"\n        }, \"✕\", -1 /* CACHED */),\n        _createTextVNode(\" Oneens \", -1 /* CACHED */)\n      ]), 2 /* CLASS */)\n    ]),\n    _createElementVNode(\"div\", {\n      class: _normalizeClass([\"agree-disagree__reveal\", $props.modelValue === 'disagree' && 'agree-disagree__reveal--open'])\n    }, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _createElementVNode(\"label\", {\n          for: $setup.reasonId,\n          class: \"agree-disagree__reason-label\"\n        }, _cache[5] || (_cache[5] = [\n          _createTextVNode(\" Waarom oneens? \", -1 /* CACHED */),\n          _createElementVNode(\"span\", { class: \"agree-disagree__required\" }, \"*\", -1 /* CACHED */)\n        ]), 8 /* PROPS */, _hoisted_4),\n        _createElementVNode(\"textarea\", {\n          id: $setup.reasonId,\n          rows: \"3\",\n          maxlength: \"1500\",\n          value: $props.reason,\n          placeholder: $props.reasonPlaceholder,\n          \"aria-invalid\": $props.reasonError ? true : undefined,\n          class: _normalizeClass([\"agree-disagree__textarea\", $props.reasonError && 'agree-disagree__textarea--error']),\n          onInput: _cache[2] || (_cache[2] = $event => (_ctx.$emit('update:reason', ($event.target as HTMLTextAreaElement).value)))\n        }, null, 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_5),\n        ($props.reasonError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, _toDisplayString($props.reasonError), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ], 2 /* CLASS */)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AgreeDisagree.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AgreeDisagree.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AgreeDisagree.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AgreeDisagree.vue\";script.__scopeId = \"data-v-d46cf3a5\";export default script;","<template>\n  <article class=\"locinfo\">\n    <div class=\"locinfo__panel\">\n      <PhotoCarousel\n        v-if=\"carouselImages.length > 0\"\n        :images=\"carouselImages\"\n      />\n\n      <div\n        v-else\n        class=\"locinfo__no-photos\"\n      >\n        <p class=\"locinfo__no-photos-text\">\n          Er zijn nog geen foto's opgehaald voor deze locatie.\n        </p>\n        <button\n          type=\"button\"\n          class=\"locinfo__fetch-btn\"\n          :disabled=\"fetching\"\n          @click=\"handleFetchImages\"\n        >\n          <template v-if=\"fetching\">Bezig met ophalen...</template>\n          <template v-else>\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\n              <polyline points=\"7 10 12 15 17 10\"/>\n              <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"/>\n            </svg>\n            Haal foto's op\n          </template>\n        </button>\n        <p v-if=\"fetchError\" class=\"locinfo__fetch-error\">{{ fetchError }}</p>\n      </div>\n\n      <h3 v-if=\"hasDetails\" class=\"locinfo__heading\">Locatiegegevens</h3>\n\n      <dl v-if=\"hasDetails\" class=\"locinfo__details\">\n        <template v-if=\"fullAddress\">\n          <dt>Adres</dt>\n          <dd>{{ fullAddress }}</dd>\n        </template>\n        <template v-if=\"location?.website\">\n          <dt>Website</dt>\n          <dd>\n            <a :href=\"location.website\" target=\"_blank\" rel=\"noopener noreferrer\">\n              {{ stripProtocol(location.website) }}\n            </a>\n          </dd>\n        </template>\n        <template v-if=\"location?.phone\">\n          <dt>Telefoon</dt>\n          <dd><a :href=\"`tel:${location.phone.replace(/\\s+/g, '')}`\">{{ location.phone }}</a></dd>\n        </template>\n      </dl>\n    </div>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport PhotoCarousel from \"./PhotoCarousel.vue\";\nimport { fetchImagesForLocation } from \"../lib/api\";\nimport type { AnalysisImages, LocationDetail } from \"../lib/types\";\n\nconst props = defineProps<{\n  location: NonNullable<LocationDetail[\"location\"]>;\n  images: AnalysisImages;\n}>();\n\nconst emit = defineEmits<{\n  \"update:images\": [images: AnalysisImages];\n}>();\n\n// After a successful \"Haal foto's op\" the parent's images prop hasn't changed\n// yet (no refetch of the detail); we keep the freshly returned URLs locally\n// so the carousel renders immediately. The parent can listen on\n// update:images and persist them if it wants the change to survive a remount.\nconst localImages = ref<AnalysisImages | null>(null);\nconst fetching = ref(false);\nconst fetchError = ref<string | null>(null);\n\nconst effectiveImages = computed<AnalysisImages>(() => localImages.value ?? props.images);\n\nconst STREETVIEW_LABELS = [\"Straat — Noord\", \"Straat — Oost\", \"Straat — Zuid\", \"Straat — West\"] as const;\n\nconst carouselImages = computed(() => {\n  const out: Array<{ url: string; label: string }> = [];\n  if (effectiveImages.value?.satellite) {\n    out.push({ url: effectiveImages.value.satellite, label: \"Satelliet\" });\n  }\n  const sv = effectiveImages.value?.streetView ?? [];\n  for (let i = 0; i < sv.length; i++) {\n    out.push({ url: sv[i], label: STREETVIEW_LABELS[i] ?? `Straat ${i + 1}` });\n  }\n  return out;\n});\n\nasync function handleFetchImages() {\n  if (fetching.value) return;\n  fetching.value = true;\n  fetchError.value = null;\n  try {\n    const { images } = await fetchImagesForLocation(props.location.id);\n    if (!images.satellite && images.streetView.length === 0) {\n      fetchError.value = \"Geen foto's beschikbaar voor deze locatie.\";\n      return;\n    }\n    localImages.value = images;\n    emit(\"update:images\", images);\n  } catch (err) {\n    fetchError.value = err instanceof Error ? err.message : \"Kon foto's niet ophalen\";\n  } finally {\n    fetching.value = false;\n  }\n}\n\nconst fullAddress = computed(() => {\n  const parts = [\n    props.location.address,\n    [props.location.postalCode, props.location.city].filter(Boolean).join(\" \"),\n  ].filter(Boolean);\n  return parts.length > 0 ? parts.join(\", \") : null;\n});\n\nconst hasDetails = computed(() =>\n  Boolean(fullAddress.value || props.location.website || props.location.phone),\n);\n\nfunction stripProtocol(url: string): string {\n  return url.replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\");\n}\n</script>\n\n<style scoped>\n.locinfo {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  padding: 12px 0 0;\n}\n\n.locinfo__heading {\n  margin: 0 4px -4px;\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.14em;\n  color: var(--snl-fg-subtle);\n}\n\n.locinfo__panel {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.locinfo__details {\n  margin: 0;\n  padding: 14px 16px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface);\n  display: grid;\n  grid-template-columns: 90px 1fr;\n  row-gap: 10px;\n  column-gap: 14px;\n  font-size: 13px;\n}\n\n.locinfo__details dt {\n  color: var(--snl-fg-subtle);\n  font-weight: 500;\n}\n\n.locinfo__details dd {\n  margin: 0;\n  color: var(--snl-fg);\n  word-break: break-word;\n  line-height: 1.5;\n}\n\n.locinfo__details dd a {\n  color: var(--snl-mint);\n  text-decoration: none;\n  border-bottom: 1px solid rgba(143, 204, 177, 0.35);\n}\n\n.locinfo__details dd a:hover {\n  border-bottom-color: var(--snl-mint);\n}\n\n.locinfo__no-photos {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  padding: 18px 16px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 16px;\n  background: var(--snl-surface-2);\n  text-align: center;\n}\n\n.locinfo__no-photos-text {\n  margin: 0;\n  font-size: 13px;\n  line-height: 1.5;\n  color: var(--snl-fg-muted);\n}\n\n.locinfo__fetch-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  height: 44px;\n  padding: 0 18px;\n  border: 0;\n  border-radius: 14px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 13px;\n  font-weight: 600;\n  letter-spacing: -0.01em;\n  cursor: pointer;\n  transition: transform 0.12s var(--ease-spring), box-shadow 0.12s var(--ease-out), opacity 0.12s;\n}\n\n@media (hover: hover) {\n  .locinfo__fetch-btn:hover:not(:disabled) {\n    transform: translateY(-1px);\n    box-shadow: 0 14px 28px -10px rgba(143, 204, 177, 0.55);\n  }\n}\n\n.locinfo__fetch-btn:disabled {\n  opacity: 0.6;\n  cursor: progress;\n}\n\n.locinfo__fetch-error {\n  margin: 0;\n  font-size: 12px;\n  color: #FFCFBF;\n}\n</style>\n","<template>\n  <div class=\"carousel\" v-if=\"images.length > 0\">\n    <div class=\"carousel__stage\">\n      <div ref=\"viewportRef\" class=\"carousel__viewport\">\n        <div class=\"carousel__container\">\n          <div\n            v-for=\"(img, idx) in images\"\n            :key=\"img.url + idx\"\n            class=\"carousel__slide\"\n          >\n            <button\n              type=\"button\"\n              class=\"carousel__btn\"\n              :aria-label=\"`Open ${img.label} op volledig scherm`\"\n              @click=\"openLightbox(idx)\"\n            >\n              <img\n                :src=\"img.url\"\n                :alt=\"img.label\"\n                class=\"carousel__img\"\n                loading=\"lazy\"\n                decoding=\"async\"\n              />\n              <span class=\"carousel__label\">{{ img.label }}</span>\n              <span class=\"carousel__zoom\" aria-hidden=\"true\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                  <path d=\"M15 3h6v6\"/>\n                  <path d=\"M9 21H3v-6\"/>\n                  <path d=\"M21 3l-7 7\"/>\n                  <path d=\"M3 21l7-7\"/>\n                </svg>\n              </span>\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <template v-if=\"images.length > 1\">\n        <button\n          type=\"button\"\n          class=\"carousel__nav carousel__nav--prev\"\n          :class=\"{ 'carousel__nav--hidden': !canScrollPrev }\"\n          :disabled=\"!canScrollPrev\"\n          aria-label=\"Vorige foto\"\n          @click=\"scrollPrev\"\n        >\n          <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"m15 18-6-6 6-6\"/>\n          </svg>\n        </button>\n        <button\n          type=\"button\"\n          class=\"carousel__nav carousel__nav--next\"\n          :class=\"{ 'carousel__nav--hidden': !canScrollNext }\"\n          :disabled=\"!canScrollNext\"\n          aria-label=\"Volgende foto\"\n          @click=\"scrollNext\"\n        >\n          <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"m9 18 6-6-6-6\"/>\n          </svg>\n        </button>\n      </template>\n    </div>\n\n    <div class=\"carousel__dots\" v-if=\"images.length > 1\">\n      <button\n        v-for=\"(_, idx) in images\"\n        :key=\"idx\"\n        type=\"button\"\n        class=\"carousel__dot\"\n        :class=\"{ 'carousel__dot--active': idx === selectedIndex }\"\n        :aria-label=\"`Foto ${idx + 1} van ${images.length}`\"\n        :aria-current=\"idx === selectedIndex ? 'true' : undefined\"\n        @click=\"scrollTo(idx)\"\n      />\n    </div>\n\n    <Teleport to=\"body\">\n      <div\n        v-if=\"lightboxOpen\"\n        class=\"lightbox\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        :aria-label=\"`Foto ${lightboxIndex + 1} van ${images.length}`\"\n        @click.self=\"closeLightbox\"\n      >\n        <button\n          type=\"button\"\n          class=\"lightbox__close\"\n          aria-label=\"Sluiten\"\n          @click=\"closeLightbox\"\n        >\n          <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M18 6 6 18\"/>\n            <path d=\"m6 6 12 12\"/>\n          </svg>\n        </button>\n\n        <div\n          class=\"lightbox__stage\"\n          @touchstart.passive=\"onTouchStart\"\n          @touchend.passive=\"onTouchEnd\"\n          @touchcancel.passive=\"onTouchCancel\"\n        >\n          <img\n            :key=\"images[lightboxIndex]?.url\"\n            :src=\"images[lightboxIndex]?.url\"\n            :alt=\"images[lightboxIndex]?.label\"\n            class=\"lightbox__img\"\n            decoding=\"async\"\n            draggable=\"false\"\n          />\n        </div>\n\n        <div class=\"lightbox__caption\">\n          <span class=\"lightbox__caption-label\">{{ images[lightboxIndex]?.label }}</span>\n          <span v-if=\"images.length > 1\" class=\"lightbox__caption-counter\">\n            {{ lightboxIndex + 1 }} / {{ images.length }}\n          </span>\n        </div>\n\n        <template v-if=\"images.length > 1\">\n          <button\n            type=\"button\"\n            class=\"lightbox__nav lightbox__nav--prev\"\n            :disabled=\"lightboxIndex === 0\"\n            aria-label=\"Vorige foto\"\n            @click=\"goPrev\"\n          >\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"m15 18-6-6 6-6\"/>\n            </svg>\n          </button>\n          <button\n            type=\"button\"\n            class=\"lightbox__nav lightbox__nav--next\"\n            :disabled=\"lightboxIndex === images.length - 1\"\n            aria-label=\"Volgende foto\"\n            @click=\"goNext\"\n          >\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"m9 18 6-6-6-6\"/>\n            </svg>\n          </button>\n        </template>\n      </div>\n    </Teleport>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport emblaCarouselVue from \"embla-carousel-vue\";\n\ninterface CarouselImage {\n  url: string;\n  label: string;\n}\n\nconst props = defineProps<{\n  images: CarouselImage[];\n}>();\n\n// ---------------------------------------------------------------------------\n// Inline carousel — uses embla because it's mounted with the page and gets a\n// proper layout pass before init. Swipe + dots work out of the box.\n// ---------------------------------------------------------------------------\nconst [viewportRef, emblaApi] = emblaCarouselVue({\n  loop: false,\n  align: \"center\",\n  containScroll: \"trimSnaps\",\n});\n\nconst selectedIndex = ref(0);\nconst canScrollPrev = ref(false);\nconst canScrollNext = ref(false);\n\nfunction onSelect() {\n  const api = emblaApi.value;\n  if (!api) return;\n  selectedIndex.value = api.selectedScrollSnap();\n  canScrollPrev.value = api.canScrollPrev();\n  canScrollNext.value = api.canScrollNext();\n}\n\nfunction scrollTo(idx: number) {\n  emblaApi.value?.scrollTo(idx);\n}\n\nfunction scrollPrev() {\n  emblaApi.value?.scrollPrev();\n}\n\nfunction scrollNext() {\n  emblaApi.value?.scrollNext();\n}\n\nonMounted(() => {\n  emblaApi.value?.on(\"select\", onSelect);\n  onSelect();\n});\n\nonBeforeUnmount(() => {\n  emblaApi.value?.off(\"select\", onSelect);\n});\n\nwatch(\n  () => props.images.length,\n  () => {\n    emblaApi.value?.reInit();\n    onSelect();\n  },\n);\n\n// ---------------------------------------------------------------------------\n// Lightbox — fullscreen overlay. Earlier versions tried a second embla here,\n// but Teleport + v-if causes embla to measure a not-yet-laid-out viewport so\n// scrollTo/scrollNext silently no-op. We render a single image keyed on the\n// active URL and drive navigation via a plain index ref. Swipe is detected\n// from raw touch events; arrow keys and prev/next buttons drive the same ref.\n// ---------------------------------------------------------------------------\nconst lightboxOpen = ref(false);\nconst lightboxIndex = ref(0);\n\n// Minimum horizontal travel (in CSS pixels) to count as a swipe. Below this,\n// it's treated as a tap (which would otherwise close the overlay if it lands\n// on the backdrop, but the stage is opaque so it's a no-op).\nconst SWIPE_THRESHOLD_PX = 40;\n\nlet touchStartX: number | null = null;\nlet touchStartY: number | null = null;\n\nfunction openLightbox(idx: number) {\n  lightboxIndex.value = idx;\n  lightboxOpen.value = true;\n  document.documentElement.style.overflow = \"hidden\";\n}\n\nfunction closeLightbox() {\n  lightboxOpen.value = false;\n  document.documentElement.style.overflow = \"\";\n}\n\nfunction goPrev() {\n  if (lightboxIndex.value > 0) lightboxIndex.value--;\n}\nfunction goNext() {\n  if (lightboxIndex.value < props.images.length - 1) lightboxIndex.value++;\n}\n\nfunction onTouchStart(e: TouchEvent) {\n  if (e.touches.length !== 1) {\n    touchStartX = null;\n    return;\n  }\n  touchStartX = e.touches[0].clientX;\n  touchStartY = e.touches[0].clientY;\n}\n\nfunction onTouchEnd(e: TouchEvent) {\n  if (touchStartX === null || touchStartY === null) return;\n  const t = e.changedTouches[0];\n  const dx = t.clientX - touchStartX;\n  const dy = t.clientY - touchStartY;\n  touchStartX = null;\n  touchStartY = null;\n\n  // Reject vertical-dominant gestures (scroll/zoom) so they don't navigate.\n  if (Math.abs(dx) < SWIPE_THRESHOLD_PX) return;\n  if (Math.abs(dy) > Math.abs(dx)) return;\n\n  if (dx < 0) goNext();\n  else goPrev();\n}\n\nfunction onTouchCancel() {\n  touchStartX = null;\n  touchStartY = null;\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n  if (!lightboxOpen.value) return;\n  if (e.key === \"Escape\") closeLightbox();\n  else if (e.key === \"ArrowLeft\") goPrev();\n  else if (e.key === \"ArrowRight\") goNext();\n}\n\nonMounted(() => {\n  window.addEventListener(\"keydown\", onKeydown);\n});\n\nonBeforeUnmount(() => {\n  window.removeEventListener(\"keydown\", onKeydown);\n  // Defensief: als de component unmount terwijl de overlay nog open is,\n  // moet de body-scroll-lock alsnog terug. Anders blijft de pagina vast.\n  if (lightboxOpen.value) document.documentElement.style.overflow = \"\";\n});\n</script>\n\n<style scoped>\n.carousel {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n\n.carousel__stage {\n  position: relative;\n}\n\n.carousel__viewport {\n  overflow: hidden;\n  border-radius: 16px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line);\n}\n\n.carousel__nav {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 38px;\n  height: 38px;\n  display: grid;\n  place-items: center;\n  color: #fff;\n  background: rgba(0, 0, 0, 0.55);\n  border: 0;\n  border-radius: 999px;\n  cursor: pointer;\n  z-index: 2;\n  backdrop-filter: blur(4px);\n  transition: background 0.12s, transform 0.12s, opacity 0.18s;\n}\n\n@media (hover: hover) {\n  .carousel__nav:hover {\n    background: rgba(0, 0, 0, 0.72);\n  }\n}\n\n.carousel__nav:active {\n  transform: translateY(-50%) scale(0.92);\n}\n\n.carousel__nav--prev { left: 10px; }\n.carousel__nav--next { right: 10px; }\n\n.carousel__nav--hidden {\n  opacity: 0;\n  pointer-events: none;\n}\n\n.carousel__container {\n  display: flex;\n  touch-action: pan-y pinch-zoom;\n}\n\n.carousel__slide {\n  position: relative;\n  flex: 0 0 100%;\n  min-width: 0;\n  aspect-ratio: 16 / 10;\n  background: var(--snl-surface-2);\n}\n\n.carousel__btn {\n  display: block;\n  width: 100%;\n  height: 100%;\n  padding: 0;\n  border: 0;\n  background: none;\n  cursor: zoom-in;\n  position: relative;\n}\n\n.carousel__img {\n  display: block;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n\n.carousel__label {\n  position: absolute;\n  left: 10px;\n  bottom: 10px;\n  padding: 4px 10px;\n  font-size: 11px;\n  font-weight: 600;\n  letter-spacing: 0.04em;\n  color: #fff;\n  background: rgba(0, 0, 0, 0.55);\n  border-radius: 999px;\n  backdrop-filter: blur(4px);\n  pointer-events: none;\n}\n\n.carousel__zoom {\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  width: 32px;\n  height: 32px;\n  display: grid;\n  place-items: center;\n  color: #fff;\n  background: rgba(0, 0, 0, 0.55);\n  border-radius: 999px;\n  backdrop-filter: blur(4px);\n  pointer-events: none;\n}\n\n.carousel__dots {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 6px;\n  height: 16px;\n}\n\n.carousel__dot {\n  cursor: pointer;\n  width: 7px;\n  height: 7px;\n  border: 0;\n  border-radius: 50%;\n  background: var(--snl-line-strong);\n  padding: 0;\n  transition: background 0.15s, transform 0.15s;\n}\n\n.carousel__dot:hover {\n  background: var(--snl-fg-muted);\n}\n\n.carousel__dot--active {\n  background: var(--snl-mint);\n  transform: scale(1.25);\n}\n\n/* ===========================================================\n   Lightbox — fullscreen overlay\n   =========================================================== */\n.lightbox {\n  position: fixed;\n  inset: 0;\n  z-index: 1000;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(0, 0, 0, 0.92);\n  backdrop-filter: blur(8px);\n  -webkit-backdrop-filter: blur(8px);\n  animation: lightbox-fade 0.18s ease-out;\n}\n@keyframes lightbox-fade {\n  from { opacity: 0; }\n  to   { opacity: 1; }\n}\n\n.lightbox__stage {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  height: 100%;\n  padding: 56px 16px 80px;\n  box-sizing: border-box;\n  /* Allow vertical scroll/zoom but let our handler intercept horizontal swipe. */\n  touch-action: pan-y pinch-zoom;\n  user-select: none;\n  -webkit-user-select: none;\n  -webkit-tap-highlight-color: transparent;\n}\n\n.lightbox__img {\n  display: block;\n  max-width: 100%;\n  max-height: 100%;\n  width: auto;\n  height: auto;\n  object-fit: contain;\n  user-select: none;\n  -webkit-user-drag: none;\n  pointer-events: none;\n  animation: lightbox-img-fade 0.16s ease-out;\n}\n@keyframes lightbox-img-fade {\n  from { opacity: 0; }\n  to   { opacity: 1; }\n}\n\n.lightbox__close {\n  position: absolute;\n  top: calc(env(safe-area-inset-top, 0px) + 12px);\n  right: 12px;\n  width: 44px;\n  height: 44px;\n  display: grid;\n  place-items: center;\n  color: #fff;\n  background: rgba(255, 255, 255, 0.12);\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  border-radius: 999px;\n  cursor: pointer;\n  z-index: 2;\n  transition: background 0.12s, transform 0.12s;\n}\n.lightbox__close:hover {\n  background: rgba(255, 255, 255, 0.22);\n}\n.lightbox__close:active {\n  transform: scale(0.94);\n}\n\n.lightbox__caption {\n  position: absolute;\n  left: 50%;\n  bottom: calc(env(safe-area-inset-bottom, 0px) + 16px);\n  transform: translateX(-50%);\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 8px 14px;\n  font-size: 12px;\n  font-weight: 600;\n  letter-spacing: 0.02em;\n  color: #fff;\n  background: rgba(0, 0, 0, 0.55);\n  border-radius: 999px;\n  backdrop-filter: blur(6px);\n  pointer-events: none;\n}\n.lightbox__caption-counter {\n  color: rgba(255, 255, 255, 0.7);\n  font-variant-numeric: tabular-nums;\n}\n\n.lightbox__nav {\n  position: absolute;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 44px;\n  height: 44px;\n  display: grid;\n  place-items: center;\n  color: #fff;\n  background: rgba(255, 255, 255, 0.12);\n  border: 1px solid rgba(255, 255, 255, 0.2);\n  border-radius: 999px;\n  cursor: pointer;\n  z-index: 2;\n  transition: background 0.12s, opacity 0.12s;\n}\n.lightbox__nav:hover:not(:disabled) {\n  background: rgba(255, 255, 255, 0.22);\n}\n.lightbox__nav:disabled {\n  opacity: 0.3;\n  cursor: not-allowed;\n}\n.lightbox__nav--prev { left: 12px; }\n.lightbox__nav--next { right: 12px; }\n</style>\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, Teleport as _Teleport, createBlock as _createBlock, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"carousel\"\n}\nconst _hoisted_2 = { class: \"carousel__stage\" }\nconst _hoisted_3 = {\n  ref: \"viewportRef\",\n  class: \"carousel__viewport\"\n}\nconst _hoisted_4 = { class: \"carousel__container\" }\nconst _hoisted_5 = [\"aria-label\", \"onClick\"]\nconst _hoisted_6 = [\"src\", \"alt\"]\nconst _hoisted_7 = { class: \"carousel__label\" }\nconst _hoisted_8 = [\"disabled\"]\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = {\n  key: 0,\n  class: \"carousel__dots\"\n}\nconst _hoisted_11 = [\"aria-label\", \"aria-current\", \"onClick\"]\nconst _hoisted_12 = [\"aria-label\"]\nconst _hoisted_13 = [\"src\", \"alt\"]\nconst _hoisted_14 = { class: \"lightbox__caption\" }\nconst _hoisted_15 = { class: \"lightbox__caption-label\" }\nconst _hoisted_16 = {\n  key: 0,\n  class: \"lightbox__caption-counter\"\n}\nconst _hoisted_17 = [\"disabled\"]\nconst _hoisted_18 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return ($props.images.length > 0)\n    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n        _createElementVNode(\"div\", _hoisted_2, [\n          _createElementVNode(\"div\", _hoisted_3, [\n            _createElementVNode(\"div\", _hoisted_4, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.images, (img, idx) => {\n                return (_openBlock(), _createElementBlock(\"div\", {\n                  key: img.url + idx,\n                  class: \"carousel__slide\"\n                }, [\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"carousel__btn\",\n                    \"aria-label\": `Open ${img.label} op volledig scherm`,\n                    onClick: $event => ($setup.openLightbox(idx))\n                  }, [\n                    _createElementVNode(\"img\", {\n                      src: img.url,\n                      alt: img.label,\n                      class: \"carousel__img\",\n                      loading: \"lazy\",\n                      decoding: \"async\"\n                    }, null, 8 /* PROPS */, _hoisted_6),\n                    _createElementVNode(\"span\", _hoisted_7, _toDisplayString(img.label), 1 /* TEXT */),\n                    _cache[0] || (_cache[0] = _createStaticVNode(\"<span class=\\\"carousel__zoom\\\" aria-hidden=\\\"true\\\" data-v-9bab8f54><svg width=\\\"16\\\" height=\\\"16\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" data-v-9bab8f54><path d=\\\"M15 3h6v6\\\" data-v-9bab8f54></path><path d=\\\"M9 21H3v-6\\\" data-v-9bab8f54></path><path d=\\\"M21 3l-7 7\\\" data-v-9bab8f54></path><path d=\\\"M3 21l7-7\\\" data-v-9bab8f54></path></svg></span>\", 1))\n                  ], 8 /* PROPS */, _hoisted_5)\n                ]))\n              }), 128 /* KEYED_FRAGMENT */))\n            ])\n          ], 512 /* NEED_PATCH */),\n          ($props.images.length > 1)\n            ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: _normalizeClass([\"carousel__nav carousel__nav--prev\", { 'carousel__nav--hidden': !$setup.canScrollPrev }]),\n                  disabled: !$setup.canScrollPrev,\n                  \"aria-label\": \"Vorige foto\",\n                  onClick: $setup.scrollPrev\n                }, _cache[1] || (_cache[1] = [\n                  _createElementVNode(\"svg\", {\n                    width: \"22\",\n                    height: \"22\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"2.2\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"m15 18-6-6 6-6\" })\n                  ], -1 /* CACHED */)\n                ]), 10 /* CLASS, PROPS */, _hoisted_8),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: _normalizeClass([\"carousel__nav carousel__nav--next\", { 'carousel__nav--hidden': !$setup.canScrollNext }]),\n                  disabled: !$setup.canScrollNext,\n                  \"aria-label\": \"Volgende foto\",\n                  onClick: $setup.scrollNext\n                }, _cache[2] || (_cache[2] = [\n                  _createElementVNode(\"svg\", {\n                    width: \"22\",\n                    height: \"22\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"2.2\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"m9 18 6-6-6-6\" })\n                  ], -1 /* CACHED */)\n                ]), 10 /* CLASS, PROPS */, _hoisted_9)\n              ], 64 /* STABLE_FRAGMENT */))\n            : _createCommentVNode(\"v-if\", true)\n        ]),\n        ($props.images.length > 1)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_10, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.images, (_, idx) => {\n                return (_openBlock(), _createElementBlock(\"button\", {\n                  key: idx,\n                  type: \"button\",\n                  class: _normalizeClass([\"carousel__dot\", { 'carousel__dot--active': idx === $setup.selectedIndex }]),\n                  \"aria-label\": `Foto ${idx + 1} van ${$props.images.length}`,\n                  \"aria-current\": idx === $setup.selectedIndex ? 'true' : undefined,\n                  onClick: $event => ($setup.scrollTo(idx))\n                }, null, 10 /* CLASS, PROPS */, _hoisted_11))\n              }), 128 /* KEYED_FRAGMENT */))\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n          ($setup.lightboxOpen)\n            ? (_openBlock(), _createElementBlock(\"div\", {\n                key: 0,\n                class: \"lightbox\",\n                role: \"dialog\",\n                \"aria-modal\": \"true\",\n                \"aria-label\": `Foto ${$setup.lightboxIndex + 1} van ${$props.images.length}`,\n                onClick: _withModifiers($setup.closeLightbox, [\"self\"])\n              }, [\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"lightbox__close\",\n                  \"aria-label\": \"Sluiten\",\n                  onClick: $setup.closeLightbox\n                }, _cache[3] || (_cache[3] = [\n                  _createElementVNode(\"svg\", {\n                    width: \"22\",\n                    height: \"22\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"2.2\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"M18 6 6 18\" }),\n                    _createElementVNode(\"path\", { d: \"m6 6 12 12\" })\n                  ], -1 /* CACHED */)\n                ])),\n                _createElementVNode(\"div\", {\n                  class: \"lightbox__stage\",\n                  onTouchstartPassive: $setup.onTouchStart,\n                  onTouchendPassive: $setup.onTouchEnd,\n                  onTouchcancelPassive: $setup.onTouchCancel\n                }, [\n                  (_openBlock(), _createElementBlock(\"img\", {\n                    key: $props.images[$setup.lightboxIndex]?.url,\n                    src: $props.images[$setup.lightboxIndex]?.url,\n                    alt: $props.images[$setup.lightboxIndex]?.label,\n                    class: \"lightbox__img\",\n                    decoding: \"async\",\n                    draggable: \"false\"\n                  }, null, 8 /* PROPS */, _hoisted_13))\n                ], 32 /* NEED_HYDRATION */),\n                _createElementVNode(\"div\", _hoisted_14, [\n                  _createElementVNode(\"span\", _hoisted_15, _toDisplayString($props.images[$setup.lightboxIndex]?.label), 1 /* TEXT */),\n                  ($props.images.length > 1)\n                    ? (_openBlock(), _createElementBlock(\"span\", _hoisted_16, _toDisplayString($setup.lightboxIndex + 1) + \" / \" + _toDisplayString($props.images.length), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true)\n                ]),\n                ($props.images.length > 1)\n                  ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                      _createElementVNode(\"button\", {\n                        type: \"button\",\n                        class: \"lightbox__nav lightbox__nav--prev\",\n                        disabled: $setup.lightboxIndex === 0,\n                        \"aria-label\": \"Vorige foto\",\n                        onClick: $setup.goPrev\n                      }, _cache[4] || (_cache[4] = [\n                        _createElementVNode(\"svg\", {\n                          width: \"24\",\n                          height: \"24\",\n                          viewBox: \"0 0 24 24\",\n                          fill: \"none\",\n                          stroke: \"currentColor\",\n                          \"stroke-width\": \"2.2\",\n                          \"stroke-linecap\": \"round\",\n                          \"stroke-linejoin\": \"round\"\n                        }, [\n                          _createElementVNode(\"path\", { d: \"m15 18-6-6 6-6\" })\n                        ], -1 /* CACHED */)\n                      ]), 8 /* PROPS */, _hoisted_17),\n                      _createElementVNode(\"button\", {\n                        type: \"button\",\n                        class: \"lightbox__nav lightbox__nav--next\",\n                        disabled: $setup.lightboxIndex === $props.images.length - 1,\n                        \"aria-label\": \"Volgende foto\",\n                        onClick: $setup.goNext\n                      }, _cache[5] || (_cache[5] = [\n                        _createElementVNode(\"svg\", {\n                          width: \"24\",\n                          height: \"24\",\n                          viewBox: \"0 0 24 24\",\n                          fill: \"none\",\n                          stroke: \"currentColor\",\n                          \"stroke-width\": \"2.2\",\n                          \"stroke-linecap\": \"round\",\n                          \"stroke-linejoin\": \"round\"\n                        }, [\n                          _createElementVNode(\"path\", { d: \"m9 18 6-6-6-6\" })\n                        ], -1 /* CACHED */)\n                      ]), 8 /* PROPS */, _hoisted_18)\n                    ], 64 /* STABLE_FRAGMENT */))\n                  : _createCommentVNode(\"v-if\", true)\n              ], 8 /* PROPS */, _hoisted_12))\n            : _createCommentVNode(\"v-if\", true)\n        ]))\n      ]))\n    : _createCommentVNode(\"v-if\", true)\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PhotoCarousel.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PhotoCarousel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PhotoCarousel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/PhotoCarousel.vue\";script.__scopeId = \"data-v-9bab8f54\";export default script;","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"locinfo\" }\nconst _hoisted_2 = { class: \"locinfo__panel\" }\nconst _hoisted_3 = {\n  key: 1,\n  class: \"locinfo__no-photos\"\n}\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = {\n  key: 0,\n  class: \"locinfo__fetch-error\"\n}\nconst _hoisted_6 = {\n  key: 2,\n  class: \"locinfo__heading\"\n}\nconst _hoisted_7 = {\n  key: 3,\n  class: \"locinfo__details\"\n}\nconst _hoisted_8 = [\"href\"]\nconst _hoisted_9 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"article\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      ($setup.carouselImages.length > 0)\n        ? (_openBlock(), _createBlock($setup[\"PhotoCarousel\"], {\n            key: 0,\n            images: $setup.carouselImages\n          }, null, 8 /* PROPS */, [\"images\"]))\n        : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n            _cache[2] || (_cache[2] = _createElementVNode(\"p\", { class: \"locinfo__no-photos-text\" }, \" Er zijn nog geen foto's opgehaald voor deze locatie. \", -1 /* CACHED */)),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"locinfo__fetch-btn\",\n              disabled: $setup.fetching,\n              onClick: $setup.handleFetchImages\n            }, [\n              ($setup.fetching)\n                ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                    _createTextVNode(\"Bezig met ophalen...\")\n                  ], 64 /* STABLE_FRAGMENT */))\n                : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                    _cache[0] || (_cache[0] = _createElementVNode(\"svg\", {\n                      width: \"16\",\n                      height: \"16\",\n                      viewBox: \"0 0 24 24\",\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: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" }),\n                      _createElementVNode(\"polyline\", { points: \"7 10 12 15 17 10\" }),\n                      _createElementVNode(\"line\", {\n                        x1: \"12\",\n                        y1: \"15\",\n                        x2: \"12\",\n                        y2: \"3\"\n                      })\n                    ], -1 /* CACHED */)),\n                    _cache[1] || (_cache[1] = _createTextVNode(\" Haal foto's op \", -1 /* CACHED */))\n                  ], 64 /* STABLE_FRAGMENT */))\n            ], 8 /* PROPS */, _hoisted_4),\n            ($setup.fetchError)\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($setup.fetchError), 1 /* TEXT */))\n              : _createCommentVNode(\"v-if\", true)\n          ])),\n      ($setup.hasDetails)\n        ? (_openBlock(), _createElementBlock(\"h3\", _hoisted_6, \"Locatiegegevens\"))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.hasDetails)\n        ? (_openBlock(), _createElementBlock(\"dl\", _hoisted_7, [\n            ($setup.fullAddress)\n              ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                  _cache[3] || (_cache[3] = _createElementVNode(\"dt\", null, \"Adres\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, _toDisplayString($setup.fullAddress), 1 /* TEXT */)\n                ], 64 /* STABLE_FRAGMENT */))\n              : _createCommentVNode(\"v-if\", true),\n            ($props.location?.website)\n              ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                  _cache[4] || (_cache[4] = _createElementVNode(\"dt\", null, \"Website\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, [\n                    _createElementVNode(\"a\", {\n                      href: $props.location.website,\n                      target: \"_blank\",\n                      rel: \"noopener noreferrer\"\n                    }, _toDisplayString($setup.stripProtocol($props.location.website)), 9 /* TEXT, PROPS */, _hoisted_8)\n                  ])\n                ], 64 /* STABLE_FRAGMENT */))\n              : _createCommentVNode(\"v-if\", true),\n            ($props.location?.phone)\n              ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                  _cache[5] || (_cache[5] = _createElementVNode(\"dt\", null, \"Telefoon\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, [\n                    _createElementVNode(\"a\", {\n                      href: `tel:${$props.location.phone.replace(/\\s+/g, '')}`\n                    }, _toDisplayString($props.location.phone), 9 /* TEXT, PROPS */, _hoisted_9)\n                  ])\n                ], 64 /* STABLE_FRAGMENT */))\n              : _createCommentVNode(\"v-if\", true)\n          ]))\n        : _createCommentVNode(\"v-if\", true)\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationInfoPanel.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationInfoPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationInfoPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationInfoPanel.vue\";script.__scopeId = \"data-v-f5d7719a\";export default script;","<template>\n  <section class=\"locmap\">\n    <template v-if=\"hasCoords\">\n      <!-- Live, interactive Google Maps (keyless embed). The blikvanger before\n           driving out — NOT our cached satellite/street-view screenshots. -->\n      <iframe\n        class=\"locmap__frame\"\n        :src=\"embedSrc!\"\n        title=\"Kaart van de locatie\"\n        loading=\"lazy\"\n        referrerpolicy=\"no-referrer-when-downgrade\"\n        allowfullscreen\n      ></iframe>\n\n      <!-- Interactieve, beweegbare Street View direct ingeladen (keyless svembed)\n           in plaats van een knop — gebruikt in het Verkennen-zijpaneel (TEC-90).\n           In button-modus (detailpagina) blijft Street View een knop hieronder. -->\n      <iframe\n        v-if=\"streetViewEmbedMode\"\n        class=\"locmap__frame locmap__frame--sv\"\n        :src=\"streetViewEmbedSrc!\"\n        title=\"Street View van de locatie\"\n        loading=\"lazy\"\n        referrerpolicy=\"no-referrer-when-downgrade\"\n        allowfullscreen\n      ></iframe>\n\n      <div v-if=\"hasActions\" class=\"locmap__actions\" :class=\"{ 'locmap__actions--single': actionsSingle }\">\n        <a\n          v-if=\"!streetViewEmbedMode\"\n          :href=\"streetViewHref!\"\n          class=\"locmap__btn locmap__btn--primary\"\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <circle cx=\"12\" cy=\"5\" r=\"2.5\"/>\n            <path d=\"M12 9c-2.4 0-4 1.6-4 4v3h2l1 5h2l1-5h2v-3c0-2.4-1.6-4-4-4Z\"/>\n          </svg>\n          <span>Street View</span>\n        </a>\n        <!-- Google/Apple-knoppen kunnen verborgen worden (showMapLinks=false) wanneer\n             het adres elders al klikbaar naar Google Maps linkt — zo gebruikt in het\n             Verkennen-zijpaneel (TEC-90), terwijl de detailpagina alle knoppen houdt. -->\n        <template v-if=\"mapLinksVisible\">\n          <a\n            :href=\"googleHref!\"\n            class=\"locmap__btn\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\"/>\n              <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n            </svg>\n            <span>Google Maps</span>\n          </a>\n          <a\n            :href=\"appleHref!\"\n            class=\"locmap__btn\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <polygon points=\"3 11 22 2 13 21 11 13 3 11\"/>\n            </svg>\n            <span>Apple Maps</span>\n          </a>\n        </template>\n      </div>\n    </template>\n\n    <div v-else class=\"locmap__empty\">\n      Geen coördinaten bekend voor deze locatie — een kaart kan niet getoond worden.\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport {\n  appleMapsUrl,\n  googleMapsEmbedUrl,\n  googleMapsUrl,\n  streetViewEmbedUrl,\n  streetViewUrl,\n} from \"../lib/maps\";\nimport type { LocationDetail } from \"../lib/types\";\n\nconst props = defineProps<{\n  location: NonNullable<LocationDetail[\"location\"]>;\n  // When false, the Google Maps + Apple Maps jump-buttons are hidden (only Street\n  // View remains). Used by the Verkennen side panel where the address itself is the\n  // Google Maps link. Defaults to showing all links (detail page behaviour).\n  showMapLinks?: boolean;\n  // \"button\" (default) shows a Street View jump-button below the map. \"embed\"\n  // loads an interactive, draggable Street View panorama right under the map\n  // (keyless) — used by the Verkennen side panel (TEC-90).\n  streetViewMode?: \"button\" | \"embed\";\n}>();\n\nconst mapLinksVisible = computed(() => props.showMapLinks !== false);\nconst streetViewEmbedMode = computed(() => props.streetViewMode === \"embed\");\n\n// The actions row only renders when it has at least one button: the Street View\n// jump-button (button mode) and/or the Google/Apple links. In the panel (embed +\n// no map links) it disappears entirely.\nconst hasActions = computed(() => !streetViewEmbedMode.value || mapLinksVisible.value);\n// Single-column grid when the Street View button is the only one (button mode,\n// map links hidden).\nconst actionsSingle = computed(() => !streetViewEmbedMode.value && !mapLinksVisible.value);\n\nconst hasCoords = computed(() =>\n  props.location.latitude !== null && props.location.longitude !== null,\n);\n\nconst coords = computed(() =>\n  hasCoords.value\n    ? { lat: props.location.latitude!, lng: props.location.longitude! }\n    : null,\n);\n\nconst label = computed(() => {\n  const parts = [props.location.companyName, props.location.address].filter(Boolean);\n  return parts.length > 0 ? parts.join(\", \") : null;\n});\n\nconst embedSrc = computed(() => (coords.value ? googleMapsEmbedUrl(coords.value) : null));\nconst streetViewEmbedSrc = computed(() => (coords.value ? streetViewEmbedUrl(coords.value) : null));\nconst streetViewHref = computed(() => (coords.value ? streetViewUrl(coords.value) : null));\nconst googleHref = computed(() =>\n  coords.value ? googleMapsUrl({ ...coords.value, label: label.value }) : null,\n);\nconst appleHref = computed(() =>\n  coords.value ? appleMapsUrl({ ...coords.value, label: label.value }) : null,\n);\n</script>\n\n<style scoped>\n.locmap {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  margin-top: 12px;\n}\n\n.locmap__frame {\n  width: 100%;\n  height: 220px;\n  border: 1px solid var(--snl-line);\n  border-radius: 20px;\n  background: var(--snl-surface-2);\n  display: block;\n}\n\n.locmap__actions {\n  display: grid;\n  grid-template-columns: 1.2fr 1fr 1fr;\n  gap: 10px;\n}\n\n/* Only the Street View button remains (showMapLinks=false) — let it span full width. */\n.locmap__actions--single {\n  grid-template-columns: 1fr;\n}\n\n.locmap__btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  height: 48px;\n  padding: 0 10px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface);\n  color: var(--snl-fg);\n  font-size: 13px;\n  font-weight: 600;\n  text-decoration: none;\n  letter-spacing: -0.01em;\n  cursor: pointer;\n  transition: transform 0.12s var(--ease-out), border-color 0.12s, background 0.12s;\n}\n\n@media (hover: hover) {\n  .locmap__btn:hover {\n    border-color: rgba(143, 204, 177, 0.4);\n    background: var(--snl-surface-2);\n    transform: translateY(-1px);\n  }\n}\n\n.locmap__btn:active {\n  transform: translateY(0);\n}\n\n/* Street View is the primary jump-out the issue asks for, right under the map. */\n.locmap__btn--primary {\n  color: var(--snl-ink);\n  background: var(--snl-mint);\n  border-color: transparent;\n  box-shadow: 0 12px 26px -14px rgba(143, 204, 177, 0.6);\n}\n\n@media (hover: hover) {\n  .locmap__btn--primary:hover {\n    background: var(--snl-mint);\n    transform: translateY(-1px);\n    box-shadow: 0 16px 30px -14px rgba(143, 204, 177, 0.75);\n  }\n}\n\n.locmap__empty {\n  padding: 18px 16px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 16px;\n  background: var(--snl-surface-2);\n  color: var(--snl-fg-muted);\n  font-size: 13px;\n  line-height: 1.5;\n  text-align: center;\n}\n</style>\n","// URL builders for opening a location in Google Maps or Apple Maps.\n// Both use universal links that open the native app on mobile and the\n// web version on desktop.\n\nexport interface MapsLinkParams {\n  lat: number;\n  lng: number;\n  label?: string | null;\n}\n\nexport function googleMapsUrl(params: MapsLinkParams): string {\n  const query = `${params.lat},${params.lng}`;\n  return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(query)}`;\n}\n\nexport function appleMapsUrl(params: MapsLinkParams): string {\n  const ll = `${params.lat},${params.lng}`;\n  const search = new URLSearchParams({ ll });\n  if (params.label) search.set(\"q\", params.label);\n  return `https://maps.apple.com/?${search.toString()}`;\n}\n\n// Keyless interactive Google Maps embed for use as an <iframe src>. The\n// `output=embed` endpoint needs no API key and stays pan/zoom-interactive —\n// it's the live map hero on the assessment screen (not our cached screenshots).\n// Defaults to satellite imagery (t=k) zoomed in to z=17 so you can judge the\n// site at a glance before driving out (TEC-90/TEC-93).\nexport function googleMapsEmbedUrl(params: MapsLinkParams): string {\n  return `https://maps.google.com/maps?q=${params.lat},${params.lng}&z=17&t=k&output=embed`;\n}\n\n// Jumps straight to a Google Street View panorama at the coordinates via the\n// official maps URL scheme. Opens the native app on mobile, web on desktop.\nexport function streetViewUrl(params: MapsLinkParams): string {\n  return `https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=${params.lat},${params.lng}`;\n}\n\n// Keyless INTERACTIVE Street View embed for an <iframe src>. The classic\n// `output=svembed` endpoint needs no API key and renders a draggable panorama\n// (pan/look-around in place), unlike streetViewUrl which jumps out to the Google\n// app. cbp = camera params (zoom, heading, pitch, …); a 0 heading is a fine\n// default. Degrades to Google's \"no imagery\" tile when the coords have no pano.\nexport function streetViewEmbedUrl(params: MapsLinkParams): string {\n  return `https://maps.google.com/maps?q=&layer=c&cbll=${params.lat},${params.lng}&cbp=11,0,0,0,0&output=svembed`;\n}\n","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"locmap\" }\nconst _hoisted_2 = [\"src\"]\nconst _hoisted_3 = [\"src\"]\nconst _hoisted_4 = [\"href\"]\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = [\"href\"]\nconst _hoisted_7 = {\n  key: 1,\n  class: \"locmap__empty\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n    ($setup.hasCoords)\n      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n          _createCommentVNode(\" Live, interactive Google Maps (keyless embed). The blikvanger before\\n           driving out — NOT our cached satellite/street-view screenshots. \"),\n          _createElementVNode(\"iframe\", {\n            class: \"locmap__frame\",\n            src: $setup.embedSrc!,\n            title: \"Kaart van de locatie\",\n            loading: \"lazy\",\n            referrerpolicy: \"no-referrer-when-downgrade\",\n            allowfullscreen: \"\"\n          }, null, 8 /* PROPS */, _hoisted_2),\n          _createCommentVNode(\" Interactieve, beweegbare Street View direct ingeladen (keyless svembed)\\n           in plaats van een knop — gebruikt in het Verkennen-zijpaneel (TEC-90).\\n           In button-modus (detailpagina) blijft Street View een knop hieronder. \"),\n          ($setup.streetViewEmbedMode)\n            ? (_openBlock(), _createElementBlock(\"iframe\", {\n                key: 0,\n                class: \"locmap__frame locmap__frame--sv\",\n                src: $setup.streetViewEmbedSrc!,\n                title: \"Street View van de locatie\",\n                loading: \"lazy\",\n                referrerpolicy: \"no-referrer-when-downgrade\",\n                allowfullscreen: \"\"\n              }, null, 8 /* PROPS */, _hoisted_3))\n            : _createCommentVNode(\"v-if\", true),\n          ($setup.hasActions)\n            ? (_openBlock(), _createElementBlock(\"div\", {\n                key: 1,\n                class: _normalizeClass([\"locmap__actions\", { 'locmap__actions--single': $setup.actionsSingle }])\n              }, [\n                (!$setup.streetViewEmbedMode)\n                  ? (_openBlock(), _createElementBlock(\"a\", {\n                      key: 0,\n                      href: $setup.streetViewHref!,\n                      class: \"locmap__btn locmap__btn--primary\",\n                      target: \"_blank\",\n                      rel: \"noopener noreferrer\"\n                    }, _cache[0] || (_cache[0] = [\n                      _createElementVNode(\"svg\", {\n                        width: \"18\",\n                        height: \"18\",\n                        viewBox: \"0 0 24 24\",\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(\"circle\", {\n                          cx: \"12\",\n                          cy: \"5\",\n                          r: \"2.5\"\n                        }),\n                        _createElementVNode(\"path\", { d: \"M12 9c-2.4 0-4 1.6-4 4v3h2l1 5h2l1-5h2v-3c0-2.4-1.6-4-4-4Z\" })\n                      ], -1 /* CACHED */),\n                      _createElementVNode(\"span\", null, \"Street View\", -1 /* CACHED */)\n                    ]), 8 /* PROPS */, _hoisted_4))\n                  : _createCommentVNode(\"v-if\", true),\n                _createCommentVNode(\" Google/Apple-knoppen kunnen verborgen worden (showMapLinks=false) wanneer\\n             het adres elders al klikbaar naar Google Maps linkt — zo gebruikt in het\\n             Verkennen-zijpaneel (TEC-90), terwijl de detailpagina alle knoppen houdt. \"),\n                ($setup.mapLinksVisible)\n                  ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                      _createElementVNode(\"a\", {\n                        href: $setup.googleHref!,\n                        class: \"locmap__btn\",\n                        target: \"_blank\",\n                        rel: \"noopener noreferrer\"\n                      }, _cache[1] || (_cache[1] = [\n                        _createElementVNode(\"svg\", {\n                          width: \"18\",\n                          height: \"18\",\n                          viewBox: \"0 0 24 24\",\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: \"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\" }),\n                          _createElementVNode(\"circle\", {\n                            cx: \"12\",\n                            cy: \"10\",\n                            r: \"2.5\"\n                          })\n                        ], -1 /* CACHED */),\n                        _createElementVNode(\"span\", null, \"Google Maps\", -1 /* CACHED */)\n                      ]), 8 /* PROPS */, _hoisted_5),\n                      _createElementVNode(\"a\", {\n                        href: $setup.appleHref!,\n                        class: \"locmap__btn\",\n                        target: \"_blank\",\n                        rel: \"noopener noreferrer\"\n                      }, _cache[2] || (_cache[2] = [\n                        _createElementVNode(\"svg\", {\n                          width: \"18\",\n                          height: \"18\",\n                          viewBox: \"0 0 24 24\",\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(\"polygon\", { points: \"3 11 22 2 13 21 11 13 3 11\" })\n                        ], -1 /* CACHED */),\n                        _createElementVNode(\"span\", null, \"Apple Maps\", -1 /* CACHED */)\n                      ]), 8 /* PROPS */, _hoisted_6)\n                    ], 64 /* STABLE_FRAGMENT */))\n                  : _createCommentVNode(\"v-if\", true)\n              ], 2 /* CLASS */))\n            : _createCommentVNode(\"v-if\", true)\n        ], 64 /* STABLE_FRAGMENT */))\n      : (_openBlock(), _createElementBlock(\"div\", _hoisted_7, \" Geen coördinaten bekend voor deze locatie — een kaart kan niet getoond worden. \"))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationMap.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationMap.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationMap.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationMap.vue\";script.__scopeId = \"data-v-4c5d9041\";export default script;","<template>\n  <Teleport to=\"body\">\n    <Transition name=\"progress\">\n      <div\n        v-if=\"open\"\n        class=\"progress\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        :aria-labelledby=\"titleId\"\n      >\n        <div class=\"progress__panel\">\n          <h2 :id=\"titleId\" class=\"progress__title\">{{ heading }}</h2>\n\n          <!-- Failure state: error + close. -->\n          <template v-if=\"state === 'failed'\">\n            <p class=\"progress__error\">\n              {{ errorMessage || \"Er ging iets mis bij het starten van de analyse.\" }}\n            </p>\n            <div class=\"progress__actions\">\n              <button type=\"button\" class=\"progress__btn\" @click=\"onClose\">Sluiten</button>\n            </div>\n          </template>\n\n          <!-- Running / completed: stepped checklist. -->\n          <template v-else>\n            <p v-if=\"note\" class=\"progress__note\">{{ note }}</p>\n            <ul class=\"progress__steps\">\n              <li\n                v-for=\"(step, i) in STEPS\"\n                :key=\"step.stage\"\n                class=\"progress__step\"\n                :class=\"`progress__step--${stepStatus(i)}`\"\n              >\n                <span class=\"progress__marker\" aria-hidden=\"true\">\n                  <span v-if=\"stepStatus(i) === 'done'\" class=\"progress__check\">✓</span>\n                  <span v-else-if=\"stepStatus(i) === 'active'\" class=\"progress__spinner\"></span>\n                  <span v-else class=\"progress__dot\"></span>\n                </span>\n                <span class=\"progress__label\">{{ step.label }}</span>\n              </li>\n            </ul>\n\n            <p class=\"progress__hint\">\n              <template v-if=\"state === 'completed'\">Analyse afgerond.</template>\n              <template v-else>Dit duurt ongeveer 1-2 minuten. Je kunt dit venster sluiten, de analyse loopt gewoon door.</template>\n            </p>\n\n            <div v-if=\"state !== 'completed'\" class=\"progress__actions\">\n              <button type=\"button\" class=\"progress__btn progress__btn--ghost\" @click=\"onClose\">\n                Sluiten\n              </button>\n            </div>\n          </template>\n        </div>\n      </div>\n    </Transition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nconst props = withDefaults(\n  defineProps<{\n    open: boolean;\n    stage?: string | null;\n    state?: \"running\" | \"completed\" | \"failed\";\n    errorMessage?: string | null;\n  }>(),\n  {\n    stage: null,\n    state: \"running\",\n    errorMessage: null,\n  },\n);\n\nconst emit = defineEmits<{\n  (e: \"close\"): void;\n  (e: \"update:open\", value: boolean): void;\n}>();\n\nconst uid = Math.random().toString(36).slice(2, 9);\nconst titleId = computed(() => `progress-title-${uid}`);\n\n// Stage order matches what runAnalysis writes to WRD (observe-then-score stays\n// on running_models until completion; debate is disabled so no running_debate).\nconst STEPS = [\n  { stage: \"fetching_images\", label: \"Satellietbeelden ophalen\" },\n  { stage: \"scraping_website\", label: \"Website analyseren\" },\n  { stage: \"fetching_cadastral\", label: \"Kadastrale gegevens ophalen\" },\n  { stage: \"retrieving_feedback\", label: \"Eerdere veldrapporten zoeken\" },\n  { stage: \"running_models\", label: \"AI beoordeelt de locatie\" },\n] as const;\n\nconst heading = computed(() => {\n  if (props.state === \"failed\") return \"Analyse mislukt\";\n  if (props.state === \"completed\") return \"Analyse afgerond\";\n  return \"Analyse bezig…\";\n});\n\n// Locations already queued in a Gemini batch sit on these stages — surface a\n// distinct note since none of the per-step stages apply yet.\nconst note = computed(() => {\n  if (props.state !== \"running\") return null;\n  if (props.stage === \"batch_pending\" || props.stage === \"batch_retry_pending\") {\n    return \"In wachtrij bij de AI-service…\";\n  }\n  return null;\n});\n\n// Index of the step currently in progress. Completed → past the end (all done);\n// an unknown/empty/batch stage → 0 so the first step shows as active.\nconst activeIndex = computed(() => {\n  if (props.state === \"completed\") return STEPS.length;\n  const idx = STEPS.findIndex((s) => s.stage === props.stage);\n  return idx >= 0 ? idx : 0;\n});\n\nfunction stepStatus(i: number): \"done\" | \"active\" | \"failed\" | \"pending\" {\n  if (props.state === \"failed\" && i === activeIndex.value) return \"failed\";\n  if (i < activeIndex.value) return \"done\";\n  if (i === activeIndex.value && props.state === \"running\") return \"active\";\n  return \"pending\";\n}\n\nfunction onClose() {\n  emit(\"close\");\n  emit(\"update:open\", false);\n}\n</script>\n\n<style scoped>\n.progress {\n  position: fixed;\n  inset: 0;\n  z-index: 9999;\n  display: grid;\n  place-items: center;\n  padding: 24px;\n  background: rgba(8, 12, 14, 0.62);\n  backdrop-filter: blur(8px);\n  -webkit-backdrop-filter: blur(8px);\n}\n[data-theme=\"light\"] .progress { background: rgba(18, 23, 26, 0.32); }\n\n.progress__panel {\n  width: 100%;\n  max-width: 380px;\n  padding: 22px 22px 18px;\n  border-radius: 22px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  box-shadow: 0 32px 80px -24px rgba(0, 0, 0, 0.6),\n              0 0 0 1px rgba(255, 255, 255, 0.02);\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  text-align: left;\n  animation: progress-rise 0.22s var(--ease-spring) both;\n}\n[data-theme=\"light\"] .progress__panel {\n  box-shadow: 0 24px 64px -20px rgba(18, 23, 26, 0.35);\n}\n\n.progress__title {\n  margin: 0;\n  font-size: 18px;\n  font-weight: 700;\n  letter-spacing: -0.015em;\n  color: var(--snl-fg);\n  line-height: 1.25;\n}\n\n.progress__note {\n  margin: 0;\n  font-size: 12.5px;\n  color: var(--snl-mint);\n  font-weight: 500;\n}\n\n.progress__steps {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n.progress__step {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  font-size: 13.5px;\n  line-height: 1.3;\n  transition: color 0.2s, opacity 0.2s;\n}\n.progress__step--pending { color: var(--snl-fg-subtle); opacity: 0.7; }\n.progress__step--active { color: var(--snl-fg); font-weight: 600; }\n.progress__step--done { color: var(--snl-fg-muted); }\n.progress__step--failed { color: var(--snl-koraal); font-weight: 600; }\n\n.progress__marker {\n  flex-shrink: 0;\n  width: 22px;\n  height: 22px;\n  display: grid;\n  place-items: center;\n}\n.progress__check {\n  display: grid;\n  place-items: center;\n  width: 22px;\n  height: 22px;\n  border-radius: 99px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 13px;\n  font-weight: 700;\n}\n.progress__step--failed .progress__check { background: var(--snl-koraal); color: #fff; }\n.progress__dot {\n  width: 9px;\n  height: 9px;\n  border-radius: 99px;\n  border: 1.5px solid var(--snl-line-strong);\n}\n.progress__spinner {\n  width: 18px;\n  height: 18px;\n  border-radius: 99px;\n  border: 2px solid var(--snl-line-strong);\n  border-top-color: var(--snl-mint);\n  animation: progress-spin 0.8s linear infinite;\n}\n\n.progress__hint {\n  margin: 2px 0 0;\n  font-size: 12px;\n  line-height: 1.5;\n  color: var(--snl-fg-subtle);\n}\n\n.progress__error {\n  margin: 0;\n  padding: 12px 14px;\n  border: 1px solid rgba(243, 108, 79, 0.35);\n  border-radius: 14px;\n  background: rgba(243, 108, 79, 0.08);\n  color: #FFCFBF;\n  font-size: 13px;\n  line-height: 1.55;\n}\n\n.progress__actions {\n  display: flex;\n  gap: 8px;\n  margin-top: 4px;\n  justify-content: flex-end;\n}\n\n.progress__btn {\n  height: 42px;\n  padding: 0 18px;\n  border-radius: 12px;\n  border: 1px solid transparent;\n  font-size: 13.5px;\n  font-weight: 600;\n  cursor: pointer;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  transition: filter 0.12s, transform 0.1s var(--ease-out);\n}\n.progress__btn:active { transform: scale(0.98); }\n.progress__btn:hover { filter: brightness(1.05); }\n.progress__btn--ghost {\n  background: transparent;\n  color: var(--snl-fg-muted);\n  border-color: var(--snl-line);\n}\n.progress__btn--ghost:hover {\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  filter: none;\n}\n\n@keyframes progress-rise {\n  from { opacity: 0; transform: translateY(8px) scale(0.97); }\n  to   { opacity: 1; transform: translateY(0)   scale(1); }\n}\n@keyframes progress-spin {\n  to { transform: rotate(360deg); }\n}\n\n/* Vue <Transition name=\"progress\"> hooks */\n.progress-enter-active,\n.progress-leave-active { transition: opacity 0.18s var(--ease-out); }\n.progress-enter-from,\n.progress-leave-to    { opacity: 0; }\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, renderList as _renderList, normalizeClass as _normalizeClass, createTextVNode as _createTextVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-labelledby\"]\nconst _hoisted_2 = { class: \"progress__panel\" }\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = { class: \"progress__error\" }\nconst _hoisted_5 = {\n  key: 0,\n  class: \"progress__note\"\n}\nconst _hoisted_6 = { class: \"progress__steps\" }\nconst _hoisted_7 = {\n  class: \"progress__marker\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_8 = {\n  key: 0,\n  class: \"progress__check\"\n}\nconst _hoisted_9 = {\n  key: 1,\n  class: \"progress__spinner\"\n}\nconst _hoisted_10 = {\n  key: 2,\n  class: \"progress__dot\"\n}\nconst _hoisted_11 = { class: \"progress__label\" }\nconst _hoisted_12 = { class: \"progress__hint\" }\nconst _hoisted_13 = {\n  key: 1,\n  class: \"progress__actions\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createVNode(_Transition, { name: \"progress\" }, {\n      default: _withCtx(() => [\n        ($props.open)\n          ? (_openBlock(), _createElementBlock(\"div\", {\n              key: 0,\n              class: \"progress\",\n              role: \"dialog\",\n              \"aria-modal\": \"true\",\n              \"aria-labelledby\": $setup.titleId\n            }, [\n              _createElementVNode(\"div\", _hoisted_2, [\n                _createElementVNode(\"h2\", {\n                  id: $setup.titleId,\n                  class: \"progress__title\"\n                }, _toDisplayString($setup.heading), 9 /* TEXT, PROPS */, _hoisted_3),\n                _createCommentVNode(\" Failure state: error + close. \"),\n                ($props.state === 'failed')\n                  ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                      _createElementVNode(\"p\", _hoisted_4, _toDisplayString($props.errorMessage || \"Er ging iets mis bij het starten van de analyse.\"), 1 /* TEXT */),\n                      _createElementVNode(\"div\", { class: \"progress__actions\" }, [\n                        _createElementVNode(\"button\", {\n                          type: \"button\",\n                          class: \"progress__btn\",\n                          onClick: $setup.onClose\n                        }, \"Sluiten\")\n                      ])\n                    ], 64 /* STABLE_FRAGMENT */))\n                  : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                      _createCommentVNode(\" Running / completed: stepped checklist. \"),\n                      ($setup.note)\n                        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($setup.note), 1 /* TEXT */))\n                        : _createCommentVNode(\"v-if\", true),\n                      _createElementVNode(\"ul\", _hoisted_6, [\n                        (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.STEPS, (step, i) => {\n                          return _createElementVNode(\"li\", {\n                            key: step.stage,\n                            class: _normalizeClass([\"progress__step\", `progress__step--${$setup.stepStatus(i)}`])\n                          }, [\n                            _createElementVNode(\"span\", _hoisted_7, [\n                              ($setup.stepStatus(i) === 'done')\n                                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, \"✓\"))\n                                : ($setup.stepStatus(i) === 'active')\n                                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_9))\n                                  : (_openBlock(), _createElementBlock(\"span\", _hoisted_10))\n                            ]),\n                            _createElementVNode(\"span\", _hoisted_11, _toDisplayString(step.label), 1 /* TEXT */)\n                          ], 2 /* CLASS */)\n                        }), 64 /* STABLE_FRAGMENT */))\n                      ]),\n                      _createElementVNode(\"p\", _hoisted_12, [\n                        ($props.state === 'completed')\n                          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                              _createTextVNode(\"Analyse afgerond.\")\n                            ], 64 /* STABLE_FRAGMENT */))\n                          : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                              _createTextVNode(\"Dit duurt ongeveer 1-2 minuten. Je kunt dit venster sluiten, de analyse loopt gewoon door.\")\n                            ], 64 /* STABLE_FRAGMENT */))\n                      ]),\n                      ($props.state !== 'completed')\n                        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n                            _createElementVNode(\"button\", {\n                              type: \"button\",\n                              class: \"progress__btn progress__btn--ghost\",\n                              onClick: $setup.onClose\n                            }, \" Sluiten \")\n                          ]))\n                        : _createCommentVNode(\"v-if\", true)\n                    ], 64 /* STABLE_FRAGMENT */))\n              ])\n            ], 8 /* PROPS */, _hoisted_1))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ProgressDialog.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ProgressDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ProgressDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ProgressDialog.vue\";script.__scopeId = \"data-v-9aea554b\";export default script;","<template>\n  <span\n    class=\"rating-badge\"\n    :class=\"`rating-badge--${size}`\"\n    :style=\"{ background: scoutColor(score), color: scoutTextColor(score) }\"\n  >{{ label }}</span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { scoutColor, scoutRecommendation, scoutTextColor } from \"../lib/scoutScore\";\n\nconst props = defineProps<{\n  score: number;\n  size?: \"sm\" | \"md\";\n}>();\n\nconst size = computed(() => props.size ?? \"sm\");\n// Same traffic-light scale + label as the Verkennen map (\"Zeer geschikt\" …\n// \"Niet geschikt\"), so the detail/quick-scan pill can never disagree with the\n// map or the list views. See lib/scoutScore.ts.\nconst label = computed(() => scoutRecommendation(props.score).label);\n</script>\n\n<style scoped>\n.rating-badge {\n  display: inline-flex;\n  align-items: center;\n  border-radius: 99px;\n  border: 1px solid transparent;\n  font-weight: 700;\n  letter-spacing: -0.005em;\n  white-space: nowrap;\n}\n.rating-badge--sm {\n  padding: 3px 10px;\n  font-size: 11.5px;\n}\n.rating-badge--md {\n  padding: 6px 14px;\n  font-size: 13px;\n}\n</style>\n","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, 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([\"rating-badge\", `rating-badge--${$setup.size}`]),\n    style: _normalizeStyle({ background: $setup.scoutColor($props.score), color: $setup.scoutTextColor($props.score) })\n  }, _toDisplayString($setup.label), 7 /* TEXT, CLASS, STYLE */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RatingBadge.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RatingBadge.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RatingBadge.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RatingBadge.vue\";script.__scopeId = \"data-v-1a69bf34\";export default script;","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"quick-scan-section\" }\nconst _hoisted_2 = { class: \"quick-scan-section__header\" }\nconst _hoisted_3 = { class: \"quick-scan-section__title\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"quick-scan-section__explanation\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"quick-scan-section__explanation quick-scan-section__explanation--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(\"h3\", _hoisted_3, _toDisplayString($props.title), 1 /* TEXT */),\n      ($props.aiScore !== null)\n        ? (_openBlock(), _createBlock($setup[\"RatingBadge\"], {\n            key: 0,\n            score: $props.aiScore,\n            size: \"sm\"\n          }, null, 8 /* PROPS */, [\"score\"]))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    ($props.explanation)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($props.explanation), 1 /* TEXT */))\n      : (_openBlock(), _createElementBlock(\"p\", _hoisted_5, \"Geen AI-toelichting beschikbaar.\")),\n    _createVNode($setup[\"AgreeDisagree\"], {\n      \"model-value\": $props.agreement,\n      reason: $props.reason,\n      \"reason-error\": $props.reasonError,\n      \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (_ctx.$emit('update:agreement', $event))),\n      \"onUpdate:reason\": _cache[1] || (_cache[1] = $event => (_ctx.$emit('update:reason', $event)))\n    }, null, 8 /* PROPS */, [\"model-value\", \"reason\", \"reason-error\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/QuickScanSection.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/QuickScanSection.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/QuickScanSection.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/QuickScanSection.vue\";script.__scopeId = \"data-v-62bcb362\";export default script;","// Host-gating voor de \"Debug: random invullen\"-knop in DetailView.vue.\n//\n// De WebHare-assetpipeline kent geen build-time env-injectie (zoals NEXT_PUBLIC_),\n// dus detecteren we de omgeving puur op hostname — zelfde patroon als de\n// dev-prefill in LoginForm.vue. De knop mag verschijnen op localhost én de\n// geïsoleerde test-PWA (testsites.webwerf.nl/snl-scout/), maar NOOIT op de\n// productie-PWA (snl-scout.tech42.nl).\n\nconst DEBUG_HOSTS = new Set([\n  \"localhost\",\n  \"127.0.0.1\",\n  \"testsites.webwerf.nl\",\n]);\n\n/** True als de debug-vulknop op deze host getoond mag worden. */\nexport function isDebugFillHost(hostname: string): boolean {\n  return DEBUG_HOSTS.has(hostname);\n}\n","// Human-readable NL reasons for the observe-then-score review flags. Kept in\n// sync with the admin's REVIEW_FLAG_LABELS (app/locations/[id]/analyses/\n// [analysisId]/page.tsx) — same flag keys, same sentences — so both surfaces\n// explain a flagged analysis identically. Unknown keys fall back to a\n// de-underscored version of the key itself.\nconst REVIEW_FLAG_LABELS: Record<string, string> = {\n  snelwegcheck_niet_verifieerbaar: \"Snelweglocatie-check kon niet geverifieerd worden\",\n  shopfunctie_niet_verifieerbaar: \"Publieke shopfunctie kon niet geverifieerd worden\",\n  \"50pct_regel_niet_gehaald_of_onzeker\": \"Parkeerregel (50%-norm) niet gehaald of onzeker\",\n  alleen_10ft_passend: \"Alleen een 10ft-container past — geen 20ft\",\n  services_te_veel_onzeker: \"Te veel services onzeker om betrouwbaar te scoren\",\n  parkeertelling_onzeker: \"Resterend parkeerpercentage kon niet bepaald worden\",\n  reststrook_als_alternatief: \"Reststrook meegeteld als alternatieve plek\",\n  parkeerplaats_buiten_perceel_meegerekend: \"Aangrenzende parkeerplaats meegerekend (mogelijk buiten het perceel), controleer eigendom ter plaatse\",\n  openbaar_parkeren_meegerekend: \"Openbare/straatparkeerplekken meegeteld, controleer bruikbaarheid ter plaatse\",\n  meerdere_bedrijven_op_adres: \"Meerdere bedrijven op dit adres, controleer of het juiste bedrijf is beoordeeld\",\n  vrije_hoogte_onzeker: \"Vrije hoogte op de aanbevolen plek is onzeker\",\n  vrachtwagenbereik_onzeker: \"Onzeker of een vrachtwagen de aanbevolen plek kan bereiken\",\n  zichtbaarheid_onzeker: \"Zichtbaarheid van de aanbevolen plek vanaf de openbare weg is onzeker\",\n  terreingrens_niet_eenduidig: \"Terreingrens is niet eenduidig vast te stellen\",\n  veldfeedback_tegenspraak_aard_grootte: \"Veldfeedback sprak de AI tegen op Aard & grootte\",\n  veldfeedback_tegenspraak_extra_services: \"Veldfeedback sprak de AI tegen op Extra services\",\n  veldfeedback_tegenspraak_parkeerruimte: \"Veldfeedback sprak de AI tegen op Parkeerruimte\",\n  veldfeedback_tegenspraak_toegankelijkheid: \"Veldfeedback sprak de AI tegen op Toegankelijkheid\",\n  veldfeedback_tegenspraak_zichtbaarheid: \"Veldfeedback sprak de AI tegen op Zichtbaarheid\",\n};\n\nexport function reviewReasonLabel(flag: string): string {\n  return REVIEW_FLAG_LABELS[flag] ?? flag.replace(/_/g, \" \");\n}\n\nexport function reviewReasonLabels(flags: string[]): string[] {\n  return flags.map(reviewReasonLabel);\n}\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createBlock as _createBlock, createVNode as _createVNode, Fragment as _Fragment, renderList as _renderList, vModelText as _vModelText, withDirectives as _withDirectives, normalizeClass as _normalizeClass, withModifiers as _withModifiers, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"detail\"\n}\nconst _hoisted_2 = {\n  key: 1,\n  class: \"detail\"\n}\nconst _hoisted_3 = { class: \"detail__success\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"detail__success-hint\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"detail__success-hint\"\n}\nconst _hoisted_6 = { class: \"detail__success-actions\" }\nconst _hoisted_7 = [\"href\"]\nconst _hoisted_8 = [\"href\"]\nconst _hoisted_9 = {\n  key: 2,\n  class: \"detail\"\n}\nconst _hoisted_10 = { class: \"detail__error\" }\nconst _hoisted_11 = [\"href\"]\nconst _hoisted_12 = {\n  key: 3,\n  class: \"detail\"\n}\nconst _hoisted_13 = { class: \"detail__header\" }\nconst _hoisted_14 = [\"href\"]\nconst _hoisted_15 = { class: \"detail__header-body\" }\nconst _hoisted_16 = { class: \"detail__title\" }\nconst _hoisted_17 = { class: \"detail__header-aside\" }\nconst _hoisted_18 = { class: \"detail__intro\" }\nconst _hoisted_19 = { class: \"detail__intro-top\" }\nconst _hoisted_20 = { class: \"detail__intro-name\" }\nconst _hoisted_21 = [\"href\"]\nconst _hoisted_22 = {\n  key: 1,\n  class: \"detail__intro-address detail__intro-address--plain\"\n}\nconst _hoisted_23 = {\n  key: 2,\n  class: \"detail__intro-summary\"\n}\nconst _hoisted_24 = {\n  key: 0,\n  class: \"detail__warning\"\n}\nconst _hoisted_25 = {\n  key: 0,\n  class: \"detail__warning-text\"\n}\nconst _hoisted_26 = {\n  key: 1,\n  class: \"detail__warning-text\"\n}\nconst _hoisted_27 = {\n  key: 1,\n  class: \"detail__prefill-notice\"\n}\nconst _hoisted_28 = {\n  key: 2,\n  class: \"detail__review-banner\",\n  role: \"note\"\n}\nconst _hoisted_29 = { class: \"detail__review-banner-body\" }\nconst _hoisted_30 = { class: \"detail__review-banner-list\" }\nconst _hoisted_31 = { key: 1 }\nconst _hoisted_32 = [\"disabled\"]\nconst _hoisted_33 = {\n  key: 1,\n  class: \"detail__group-block\"\n}\nconst _hoisted_34 = {\n  key: 2,\n  class: \"detail__group-block\"\n}\nconst _hoisted_35 = { class: \"detail__card detail__sub-card\" }\nconst _hoisted_36 = { class: \"detail__rating-wrap\" }\nconst _hoisted_37 = {\n  key: 3,\n  class: \"detail__group-block\"\n}\nconst _hoisted_38 = { class: \"detail__card detail__sub-card\" }\nconst _hoisted_39 = {\n  key: 4,\n  class: \"detail__submit-error\"\n}\nconst _hoisted_40 = {\n  key: 5,\n  class: \"detail__submit-error\"\n}\nconst _hoisted_41 = { class: \"detail__submit-error-list\" }\nconst _hoisted_42 = [\"disabled\", \"aria-disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return ($setup.isLoading)\n    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, _cache[6] || (_cache[6] = [\n        _createElementVNode(\"div\", { class: \"detail__error\" }, [\n          _createElementVNode(\"p\", null, \"Laden...\")\n        ], -1 /* CACHED */)\n      ])))\n    : ($setup.isSubmitted)\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n          _createElementVNode(\"div\", _hoisted_3, [\n            _cache[9] || (_cache[9] = _createElementVNode(\"span\", {\n              class: \"detail__success-icon\",\n              \"aria-hidden\": \"true\"\n            }, \"✓\", -1 /* CACHED */)),\n            _cache[10] || (_cache[10] = _createElementVNode(\"h2\", null, \"Feedback verzonden!\", -1 /* CACHED */)),\n            _createElementVNode(\"p\", null, [\n              _cache[7] || (_cache[7] = _createTextVNode(\" Bedankt voor je beoordeling van \", -1 /* CACHED */)),\n              _createElementVNode(\"strong\", null, _toDisplayString($setup.detail?.location?.companyName), 1 /* TEXT */),\n              _cache[8] || (_cache[8] = _createTextVNode(\". \", -1 /* CACHED */))\n            ]),\n            ($setup.wasInList && $setup.nextInListId)\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, \" Doorgestreept van je lijst. De volgende staat al klaar. \"))\n              : ($setup.wasInList)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, \" Doorgestreept van je lijst. Je lijst is nu leeg. \"))\n                : _createCommentVNode(\"v-if\", true),\n            _createElementVNode(\"div\", _hoisted_6, [\n              ($setup.nextInListId)\n                ? (_openBlock(), _createElementBlock(\"a\", {\n                    key: 0,\n                    href: $setup.urlLocation($setup.nextInListId),\n                    class: \"detail__back-btn\"\n                  }, \" Volgende locatie › \", 8 /* PROPS */, _hoisted_7))\n                : _createCommentVNode(\"v-if\", true),\n              _createElementVNode(\"a\", {\n                href: $setup.homeUrl,\n                class: \"detail__back-link\"\n              }, \"Terug naar zoeken\", 8 /* PROPS */, _hoisted_8)\n            ])\n          ])\n        ]))\n      : ($setup.error || !$setup.detail?.location)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n            _createElementVNode(\"div\", _hoisted_10, [\n              _createElementVNode(\"p\", null, _toDisplayString($setup.error ?? \"Er ging iets mis\"), 1 /* TEXT */),\n              _createElementVNode(\"a\", {\n                href: $setup.homeUrl,\n                class: \"detail__back-link\"\n              }, \"Terug naar zoeken\", 8 /* PROPS */, _hoisted_11)\n            ])\n          ]))\n        : (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n            _createElementVNode(\"header\", _hoisted_13, [\n              _createElementVNode(\"a\", {\n                href: $setup.homeUrl,\n                class: \"detail__back\",\n                \"aria-label\": \"Terug\"\n              }, \"‹\", 8 /* PROPS */, _hoisted_14),\n              _createElementVNode(\"div\", _hoisted_15, [\n                _createElementVNode(\"h1\", _hoisted_16, _toDisplayString($setup.detail.location.companyName), 1 /* TEXT */)\n              ]),\n              _createElementVNode(\"div\", _hoisted_17, [\n                ($setup.locationSummary)\n                  ? (_openBlock(), _createBlock($setup[\"AddToListButton\"], {\n                      key: 0,\n                      location: $setup.locationSummary\n                    }, null, 8 /* PROPS */, [\"location\"]))\n                  : _createCommentVNode(\"v-if\", true)\n              ])\n            ]),\n            _createCommentVNode(\" Live, interactieve Google Maps-kaart als blikvanger bovenaan — het\\n         eerste wat een veldagent wil zien om in te schatten of de rit loont.\\n         Street View wordt direct als beweegbaar panorama ingeladen (net als in\\n         het Verkennen-zijpaneel), niet meer als losse knop. \"),\n            _createVNode($setup[\"LocationMap\"], {\n              location: $setup.detail.location,\n              \"street-view-mode\": \"embed\"\n            }, null, 8 /* PROPS */, [\"location\"]),\n            _createCommentVNode(\" Naam + AI-score + klikbaar adres (→ Google Maps) + korte samenvatting,\\n         netjes bij elkaar direct onder de kaart. \"),\n            _createElementVNode(\"section\", _hoisted_18, [\n              _createElementVNode(\"div\", _hoisted_19, [\n                _createElementVNode(\"h2\", _hoisted_20, _toDisplayString($setup.detail.location.companyName), 1 /* TEXT */),\n                ($setup.consensusOverall !== null)\n                  ? (_openBlock(), _createBlock($setup[\"RatingBadge\"], {\n                      key: 0,\n                      score: $setup.consensusOverall,\n                      size: \"md\"\n                    }, null, 8 /* PROPS */, [\"score\"]))\n                  : _createCommentVNode(\"v-if\", true)\n              ]),\n              ($setup.introAddressHref)\n                ? (_openBlock(), _createElementBlock(\"a\", {\n                    key: 0,\n                    href: $setup.introAddressHref,\n                    class: \"detail__intro-address\",\n                    target: \"_blank\",\n                    rel: \"noopener noreferrer\"\n                  }, [\n                    _cache[11] || (_cache[11] = _createElementVNode(\"svg\", {\n                      width: \"15\",\n                      height: \"15\",\n                      viewBox: \"0 0 24 24\",\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: \"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\" }),\n                      _createElementVNode(\"circle\", {\n                        cx: \"12\",\n                        cy: \"10\",\n                        r: \"2.5\"\n                      })\n                    ], -1 /* CACHED */)),\n                    _createElementVNode(\"span\", null, _toDisplayString($setup.introAddressText), 1 /* TEXT */)\n                  ], 8 /* PROPS */, _hoisted_21))\n                : (_openBlock(), _createElementBlock(\"p\", _hoisted_22, _toDisplayString($setup.introAddressText), 1 /* TEXT */)),\n              ($setup.consensusConclusion)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_23, _toDisplayString($setup.consensusConclusion), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true)\n            ]),\n            _createCommentVNode(\" Onze opgeslagen beelden (luchtfoto met perceelslijn + street-view-\\n         snapshots) blijven beschikbaar, maar lager dan de live kaart. \"),\n            _createVNode($setup[\"LocationInfoPanel\"], {\n              location: $setup.detail.location,\n              images: $setup.detail.images,\n              \"onUpdate:images\": $setup.handleImagesUpdated\n            }, null, 8 /* PROPS */, [\"location\", \"images\"]),\n            (!$setup.detail.latestAnalysis)\n              ? (_openBlock(), _createElementBlock(\"div\", _hoisted_24, [\n                  _createCommentVNode(\" TEC-138: onderscheid \\\"nog nooit geanalyseerd\\\" van \\\"vorige analyse\\n           mislukt\\\". De veldagent ziet bij een mislukking een duidelijke melding\\n           i.p.v. een nep-score; de rauwe (spend-limit-)foutmelding tonen we\\n           bewust niet. Zelfde startknop als bij \\\"nog geen analyse\\\". \"),\n                  ($setup.detail.failedAnalysis)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_25, \" De vorige analyse voor deze locatie is mislukt en moet opnieuw uitgevoerd worden. Start hieronder een nieuwe analyse. \"))\n                    : (_openBlock(), _createElementBlock(\"p\", _hoisted_26, \" Nog geen AI-analyse beschikbaar voor deze locatie. Feedback geven heeft pas zin nadat een analyse gedraaid is. \")),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"detail__start-analysis\",\n                    onClick: $setup.onStartButtonClick\n                  }, [\n                    ($setup.analyzing)\n                      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                          _cache[12] || (_cache[12] = _createElementVNode(\"span\", {\n                            class: \"detail__start-spinner\",\n                            \"aria-hidden\": \"true\"\n                          }, null, -1 /* CACHED */)),\n                          _cache[13] || (_cache[13] = _createTextVNode(\" Analyse bezig… (bekijk voortgang) \", -1 /* CACHED */))\n                        ], 64 /* STABLE_FRAGMENT */))\n                      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                          _cache[14] || (_cache[14] = _createElementVNode(\"svg\", {\n                            width: \"16\",\n                            height: \"16\",\n                            viewBox: \"0 0 24 24\",\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 3 14 9-14 9V3Z\" })\n                          ], -1 /* CACHED */)),\n                          _cache[15] || (_cache[15] = _createTextVNode(\" Analyse starten \", -1 /* CACHED */))\n                        ], 64 /* STABLE_FRAGMENT */))\n                  ])\n                ]))\n              : _createCommentVNode(\"v-if\", true),\n            ($setup.previousFeedbackAt && $setup.detail.latestAnalysis)\n              ? (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n                  _cache[16] || (_cache[16] = _createTextVNode(\" Je hebt deze locatie al beoordeeld\", -1 /* CACHED */)),\n                  ($setup.previousFeedbackDateLabel)\n                    ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                        _createTextVNode(\" op \" + _toDisplayString($setup.previousFeedbackDateLabel), 1 /* TEXT */)\n                      ], 64 /* STABLE_FRAGMENT */))\n                    : _createCommentVNode(\"v-if\", true),\n                  _cache[17] || (_cache[17] = _createTextVNode(\". Je eerdere antwoorden zijn ingevuld — pas ze aan en verstuur opnieuw om ze bij te werken. \", -1 /* CACHED */))\n                ]))\n              : _createCommentVNode(\"v-if\", true),\n            _createCommentVNode(\" \\\"Review nodig\\\"-banner: getoond zodra minimaal 1 model deze analyse vlagt\\n         (PublicRPC.getLocationDetail aggregeert dit op latestAnalysis). Toont de\\n         concrete redenen (reviewFlags) wanneer beschikbaar, anders algemene copy.\\n         De golden tone matcht het bestaande \\\"let-op\\\"-register van de PWA. \"),\n            ($setup.detail.latestAnalysis?.requiresHumanReview)\n              ? (_openBlock(), _createElementBlock(\"div\", _hoisted_28, [\n                  _cache[21] || (_cache[21] = _createElementVNode(\"span\", {\n                    class: \"detail__review-banner-icon\",\n                    \"aria-hidden\": \"true\"\n                  }, \"⚠\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_29, [\n                    _cache[20] || (_cache[20] = _createElementVNode(\"strong\", null, \"Review nodig\", -1 /* CACHED */)),\n                    _createCommentVNode(\" Concrete redenen wanneer de analyse ze heeft (observe-then-score);\\n             anders de algemene toelichting (oude/monolithische runs). \"),\n                    ($setup.reviewReasons.length > 0)\n                      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                          _cache[18] || (_cache[18] = _createElementVNode(\"p\", null, \"De AI was onzeker over:\", -1 /* CACHED */)),\n                          _createElementVNode(\"ul\", _hoisted_30, [\n                            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.reviewReasons, (reason) => {\n                              return (_openBlock(), _createElementBlock(\"li\", { key: reason }, _toDisplayString(reason), 1 /* TEXT */))\n                            }), 128 /* KEYED_FRAGMENT */))\n                          ]),\n                          _cache[19] || (_cache[19] = _createElementVNode(\"p\", null, \"Controleer deze locatie ter plaatse extra zorgvuldig.\", -1 /* CACHED */))\n                        ], 64 /* STABLE_FRAGMENT */))\n                      : (_openBlock(), _createElementBlock(\"p\", _hoisted_31, \" De AI was onzeker over één of meer aspecten — bijvoorbeeld de 50%-parkeerregel, een reststrook-alternatief, of niet-vaststelbare terreingrenzen. Controleer deze locatie ter plaatse extra zorgvuldig. \"))\n                  ])\n                ]))\n              : _createCommentVNode(\"v-if\", true),\n            _createElementVNode(\"form\", {\n              class: \"detail__form\",\n              onSubmit: _withModifiers($setup.handleSubmit, [\"prevent\"])\n            }, [\n              _createCommentVNode(\" Snel-pad: \\\"Eens met alles\\\". Spaart het langslopen van elke\\n           dimensie wanneer de veldagent de AI-beoordeling overal onderschrijft.\\n           Opent een bevestigingsdialog (TEC-128). \"),\n              ($setup.detail.latestAnalysis)\n                ? (_openBlock(), _createElementBlock(\"button\", {\n                    key: 0,\n                    type: \"button\",\n                    class: \"detail__agree-all\",\n                    disabled: $setup.isSubmitting,\n                    onClick: $setup.onAgreeAllClick\n                  }, _cache[22] || (_cache[22] = [\n                    _createElementVNode(\"svg\", {\n                      width: \"16\",\n                      height: \"16\",\n                      viewBox: \"0 0 24 24\",\n                      fill: \"none\",\n                      stroke: \"currentColor\",\n                      \"stroke-width\": \"2.4\",\n                      \"stroke-linecap\": \"round\",\n                      \"stroke-linejoin\": \"round\",\n                      \"aria-hidden\": \"true\"\n                    }, [\n                      _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" })\n                    ], -1 /* CACHED */),\n                    _createTextVNode(\" Eens met alles — meteen afronden \", -1 /* CACHED */)\n                  ]), 8 /* PROPS */, _hoisted_32))\n                : _createCommentVNode(\"v-if\", true),\n              _createCommentVNode(\" Quick-Scan \"),\n              ($setup.detail.latestAnalysis)\n                ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, [\n                    _cache[23] || (_cache[23] = _createElementVNode(\"h2\", { class: \"detail__group-label\" }, \"Quick-Scan\", -1 /* CACHED */)),\n                    (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.DIMENSIONS, (d) => {\n                      return _createVNode($setup[\"QuickScanSection\"], {\n                        key: d.key,\n                        title: d.label,\n                        \"ai-score\": $setup.aiScores[d.key],\n                        explanation: $setup.explanationFor(d.explanationKey),\n                        agreement: $setup.feedback[d.key],\n                        reason: $setup.reasons[d.key],\n                        \"reason-error\": $setup.reasonErrors[d.key],\n                        \"onUpdate:agreement\": $event => ($setup.setAgreement(d.key, $event)),\n                        \"onUpdate:reason\": $event => ($setup.setReason(d.key, $event))\n                      }, null, 8 /* PROPS */, [\"title\", \"ai-score\", \"explanation\", \"agreement\", \"reason\", \"reason-error\", \"onUpdate:agreement\", \"onUpdate:reason\"])\n                    }), 64 /* STABLE_FRAGMENT */))\n                  ]))\n                : _createCommentVNode(\"v-if\", true),\n              _createCommentVNode(\" Eindoordeel \"),\n              ($setup.detail.latestAnalysis && $setup.consensusOverall !== null)\n                ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [\n                    _cache[25] || (_cache[25] = _createElementVNode(\"h2\", { class: \"detail__group-label\" }, \"Eindoordeel\", -1 /* CACHED */)),\n                    _createElementVNode(\"section\", _hoisted_35, [\n                      _cache[24] || (_cache[24] = _createElementVNode(\"p\", { class: \"detail__sub-body\" }, \" Op basis van de totaalscore plaatst AI deze locatie in de groep: \", -1 /* CACHED */)),\n                      _createElementVNode(\"div\", _hoisted_36, [\n                        _createVNode($setup[\"RatingBadge\"], {\n                          score: $setup.consensusOverall!,\n                          size: \"md\"\n                        }, null, 8 /* PROPS */, [\"score\"])\n                      ]),\n                      _createVNode($setup[\"AgreeDisagree\"], {\n                        \"model-value\": $setup.feedback.OverallRating,\n                        reason: $setup.reasons.OverallRating,\n                        \"reason-error\": $setup.reasonErrors.OverallRating,\n                        \"reason-placeholder\": \"Bijv. ik vind het eerder 'slecht', niet 'voldoende'\",\n                        \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => ($setup.setAgreement('OverallRating', $event))),\n                        \"onUpdate:reason\": _cache[1] || (_cache[1] = $event => ($setup.setReason('OverallRating', $event)))\n                      }, null, 8 /* PROPS */, [\"model-value\", \"reason\", \"reason-error\"])\n                    ])\n                  ]))\n                : _createCommentVNode(\"v-if\", true),\n              _createCommentVNode(\" Opmerkingen \"),\n              ($setup.detail.latestAnalysis)\n                ? (_openBlock(), _createElementBlock(\"div\", _hoisted_37, [\n                    _cache[27] || (_cache[27] = _createElementVNode(\"h2\", { class: \"detail__group-label\" }, \"Overige opmerkingen\", -1 /* CACHED */)),\n                    _createElementVNode(\"section\", _hoisted_38, [\n                      _cache[26] || (_cache[26] = _createElementVNode(\"label\", { class: \"detail__label\" }, \"Iets wat je nog kwijt wilt?\", -1 /* CACHED */)),\n                      _withDirectives(_createElementVNode(\"textarea\", {\n                        \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.generalNotes) = $event)),\n                        rows: \"4\",\n                        maxlength: \"1500\",\n                        placeholder: \"Dingen om op te letten, observaties die de AI gemist heeft, enz.\",\n                        class: \"detail__textarea\"\n                      }, null, 512 /* NEED_PATCH */), [\n                        [_vModelText, $setup.generalNotes]\n                      ])\n                    ])\n                  ]))\n                : _createCommentVNode(\"v-if\", true),\n              ($setup.submitError)\n                ? (_openBlock(), _createElementBlock(\"div\", _hoisted_39, _toDisplayString($setup.submitError), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true),\n              ($setup.attemptedSubmit && $setup.validationErrors.length > 0)\n                ? (_openBlock(), _createElementBlock(\"div\", _hoisted_40, [\n                    _cache[28] || (_cache[28] = _createElementVNode(\"p\", { class: \"detail__submit-error-title\" }, \" Nog niet klaar om te verzenden — vul eerst het volgende in: \", -1 /* CACHED */)),\n                    _createElementVNode(\"ul\", _hoisted_41, [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.validationErrors, (msg, i) => {\n                        return (_openBlock(), _createElementBlock(\"li\", { key: i }, _toDisplayString(msg), 1 /* TEXT */))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ])\n                  ]))\n                : _createCommentVNode(\"v-if\", true),\n              ($setup.detail.latestAnalysis)\n                ? (_openBlock(), _createElementBlock(\"button\", {\n                    key: 6,\n                    type: \"submit\",\n                    class: _normalizeClass([\"detail__submit\", $setup.isFormInvalid && 'detail__submit--invalid']),\n                    disabled: $setup.isSubmitting,\n                    \"aria-disabled\": $setup.isFormInvalid\n                  }, [\n                    ($setup.isSubmitting)\n                      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                          _createTextVNode(\"Verzenden...\")\n                        ], 64 /* STABLE_FRAGMENT */))\n                      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                          _cache[29] || (_cache[29] = _createElementVNode(\"svg\", {\n                            width: \"16\",\n                            height: \"16\",\n                            viewBox: \"0 0 24 24\",\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: \"M22 2 11 13\" }),\n                            _createElementVNode(\"path\", { d: \"M22 2 15 22l-4-9-9-4Z\" })\n                          ], -1 /* CACHED */)),\n                          _cache[30] || (_cache[30] = _createTextVNode(\" Feedback verzenden \", -1 /* CACHED */))\n                        ], 64 /* STABLE_FRAGMENT */))\n                  ], 10 /* CLASS, PROPS */, _hoisted_42))\n                : _createCommentVNode(\"v-if\", true),\n              ($setup.showDebugFill && $setup.detail.latestAnalysis)\n                ? (_openBlock(), _createElementBlock(\"button\", {\n                    key: 7,\n                    type: \"button\",\n                    class: \"detail__debug-fill\",\n                    onClick: $setup.debugFillRandom\n                  }, \"🎲 Debug: random invullen\"))\n                : _createCommentVNode(\"v-if\", true)\n            ], 32 /* NEED_HYDRATION */),\n            _createVNode($setup[\"ConfirmDialog\"], {\n              open: $setup.confirmOpen,\n              \"onUpdate:open\": _cache[3] || (_cache[3] = $event => (($setup.confirmOpen) = $event)),\n              tone: \"default\",\n              title: \"AI-analyse starten?\",\n              message: \"Er wordt een nieuwe AI-analyse voor deze locatie gestart. Dit duurt ongeveer tussen de 1 en 2 minuten.\",\n              \"confirm-label\": \"Analyse starten\",\n              \"cancel-label\": \"Annuleren\",\n              onConfirm: $setup.onStartAnalysisConfirmed\n            }, {\n              icon: _withCtx(() => _cache[31] || (_cache[31] = [\n                _createElementVNode(\"svg\", {\n                  width: \"22\",\n                  height: \"22\",\n                  viewBox: \"0 0 24 24\",\n                  fill: \"none\",\n                  stroke: \"currentColor\",\n                  \"stroke-width\": \"2.2\",\n                  \"stroke-linecap\": \"round\",\n                  \"stroke-linejoin\": \"round\"\n                }, [\n                  _createElementVNode(\"path\", { d: \"m5 3 14 9-14 9V3Z\" })\n                ], -1 /* CACHED */)\n              ])),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"open\"]),\n            _createVNode($setup[\"ConfirmDialog\"], {\n              open: $setup.confirmAgreeAllOpen,\n              \"onUpdate:open\": _cache[4] || (_cache[4] = $event => (($setup.confirmAgreeAllOpen) = $event)),\n              tone: \"default\",\n              title: \"Eens met alles?\",\n              message: \"Je geeft hiermee aan dat je het op alle punten met de AI-beoordeling eens bent. De feedback wordt direct verzonden. Wat je in 'Overige opmerkingen' hebt getypt, gaat mee.\",\n              \"confirm-label\": \"Verzenden\",\n              \"cancel-label\": \"Annuleren\",\n              onConfirm: $setup.onAgreeAllConfirmed\n            }, {\n              icon: _withCtx(() => _cache[32] || (_cache[32] = [\n                _createElementVNode(\"svg\", {\n                  width: \"22\",\n                  height: \"22\",\n                  viewBox: \"0 0 24 24\",\n                  fill: \"none\",\n                  stroke: \"currentColor\",\n                  \"stroke-width\": \"2.4\",\n                  \"stroke-linecap\": \"round\",\n                  \"stroke-linejoin\": \"round\"\n                }, [\n                  _createElementVNode(\"path\", { d: \"M20 6 9 17l-5-5\" })\n                ], -1 /* CACHED */)\n              ])),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"open\"]),\n            _createVNode($setup[\"ProgressDialog\"], {\n              open: $setup.progressOpen,\n              \"onUpdate:open\": _cache[5] || (_cache[5] = $event => (($setup.progressOpen) = $event)),\n              stage: $setup.progressStage,\n              state: $setup.progressState,\n              \"error-message\": $setup.progressError,\n              onClose: $setup.onProgressClose\n            }, null, 8 /* PROPS */, [\"open\", \"stage\", \"state\", \"error-message\"])\n          ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/DetailView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/DetailView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/DetailView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/DetailView.vue\";script.__scopeId = \"data-v-a4ffdadf\";export default script;","<template>\n  <div class=\"home\">\n    <!-- ===== Greet header ===== -->\n    <header class=\"home__greet\">\n      <div class=\"home__greet-row\">\n        <span class=\"home__avatar\" aria-hidden=\"true\">{{ initials }}</span>\n        <div class=\"home__greet-text\">\n          <span class=\"home__greet-label\">Welkom terug</span>\n          <span class=\"home__greet-name\">\n            {{ greetingName }}\n            <span class=\"home__wave\" aria-hidden=\"true\">👋</span>\n          </span>\n        </div>\n      </div>\n    </header>\n\n    <p class=\"home__lede\">\n      <template v-if=\"listCount > 0\">\n        Hieronder vind je <b>jouw planning</b>. Tik om de AI-score en\n        plaatsings­potentie te bekijken.\n      </template>\n      <template v-else>\n        Begin je dag: zoek locaties of gebruik je GPS om te zien wat er\n        <b>bij je in de buurt</b> staat.\n      </template>\n    </p>\n\n    <!-- ===== Search ===== -->\n    <label class=\"home__search\">\n      <span class=\"home__search-icon\" aria-hidden=\"true\">\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n          <path d=\"m20 20-3.5-3.5\"/>\n        </svg>\n      </span>\n      <input\n        v-model=\"query\"\n        type=\"search\"\n        placeholder=\"Zoek bedrijfsnaam, stad of adres…\"\n        class=\"home__search-input\"\n        aria-label=\"Zoek locatie\"\n      />\n    </label>\n\n    <!-- ===== Zoekresultaten ===== -->\n    <section v-if=\"showSearchResults\" class=\"home__section\">\n      <header class=\"home__sec-head\">\n        <div>\n          <p class=\"home__sec-kicker\">\n            <template v-if=\"isSearching\">Aan het zoeken…</template>\n            <template v-else-if=\"searchResults.length === 0\">Geen resultaten</template>\n            <template v-else>{{ searchResults.length }} {{ searchResults.length === 1 ? \"resultaat\" : \"resultaten\" }}</template>\n          </p>\n          <h2 class=\"home__sec-title\">Zoekresultaten</h2>\n        </div>\n      </header>\n\n      <div v-if=\"!isSearching && searchResults.length === 0\" class=\"home__status home__status--empty\">\n        <p>Geen locaties gevonden voor \"{{ query }}\".</p>\n        <a :href=\"addLocationHref\" class=\"home__add-cta\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M12 5v14M5 12h14\"/>\n          </svg>\n          Niet gevonden? Locatie toevoegen\n        </a>\n      </div>\n\n      <div v-else class=\"home__stack\">\n        <div\n          v-for=\"loc in searchResults\"\n          :key=\"loc.id\"\n          class=\"home__loc home__loc--row\"\n        >\n          <a :href=\"urlLocation(loc.id)\" class=\"home__loc-link\">\n            <span class=\"home__loc-icon\" aria-hidden=\"true\">\n              <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\"/>\n                <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n              </svg>\n            </span>\n            <span class=\"home__loc-body\">\n              <span class=\"home__loc-name\">{{ loc.companyName }}</span>\n              <span class=\"home__loc-meta\">\n                <template v-if=\"ratingLabel(loc.latestScore)\">\n                  <span class=\"home__loc-live\" :style=\"{ color: scoutColor(loc.latestScore) }\">{{ ratingLabel(loc.latestScore) }}</span>\n                  <span aria-hidden=\"true\">·</span>\n                </template>\n                <span>{{ loc.city ?? loc.address }}</span>\n              </span>\n            </span>\n            <span v-if=\"loc.latestScore !== null\" class=\"home__loc-stat\">\n              <span class=\"home__loc-stat-value\" :style=\"scoreStyle(loc.latestScore)\">\n                {{ loc.latestScore }}\n              </span>\n              <span class=\"home__loc-stat-label\">AI-score</span>\n            </span>\n            <span v-else class=\"home__loc-pending\" aria-label=\"Nog niet geanalyseerd\">\n              Nog te analyseren\n            </span>\n            <span class=\"home__loc-gauge\" aria-hidden=\"true\">\n              <span\n                class=\"home__loc-gauge-fill\"\n                :style=\"gaugeStyle(loc.latestScore)\"\n              ></span>\n            </span>\n          </a>\n          <span class=\"home__loc-add\">\n            <AddToListButton :location=\"loc\" />\n          </span>\n        </div>\n      </div>\n    </section>\n\n    <!-- ===== Geo CTA ===== -->\n    <button\n      type=\"button\"\n      class=\"home__geo\"\n      :class=\"{ 'home__geo--busy': geoState.kind === 'requesting' || geoState.kind === 'loading' }\"\n      :disabled=\"geoState.kind === 'requesting' || geoState.kind === 'loading'\"\n      @click=\"requestLocation\"\n    >\n      <span class=\"home__geo-ring\" aria-hidden=\"true\"></span>\n      <span class=\"home__geo-orb\" aria-hidden=\"true\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\"/>\n          <circle cx=\"12\" cy=\"10\" r=\"2.5\" fill=\"currentColor\"/>\n        </svg>\n      </span>\n      <span class=\"home__geo-text\">\n        <span class=\"home__geo-title\">{{ geoTitle }}</span>\n        <span class=\"home__geo-sub\">{{ geoSub }}</span>\n      </span>\n      <span class=\"home__geo-arrow\" aria-hidden=\"true\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M5 12h14M13 5l7 7-7 7\"/>\n        </svg>\n      </span>\n    </button>\n\n    <div v-if=\"geoState.kind === 'error'\" class=\"home__error\">\n      <span class=\"home__error-icon\" aria-hidden=\"true\">⚠</span>\n      <p>{{ geoState.message }}</p>\n    </div>\n\n    <!-- ===== Mijn planning (preview op home) ===== -->\n    <section v-if=\"listCount > 0\" class=\"home__section\">\n      <header class=\"home__sec-head\">\n        <button\n          type=\"button\"\n          class=\"home__sec-toggle\"\n          :aria-expanded=\"isPlanningExpanded\"\n          aria-controls=\"home-planning-stack\"\n          @click=\"isPlanningExpanded = !isPlanningExpanded\"\n        >\n          <span class=\"home__sec-kicker\">\n            {{ listCount }} {{ listCount === 1 ? \"locatie\" : \"locaties\" }} · planning\n          </span>\n          <span class=\"home__sec-title\">Mijn planning</span>\n        </button>\n        <a v-show=\"isPlanningExpanded\" class=\"home__sec-link\" :href=\"urlPlanning()\">Bewerk</a>\n        <button\n          type=\"button\"\n          class=\"home__sec-chevron-btn\"\n          :aria-expanded=\"isPlanningExpanded\"\n          aria-controls=\"home-planning-stack\"\n          :aria-label=\"isPlanningExpanded ? 'Mijn planning inklappen' : 'Mijn planning uitklappen'\"\n          @click=\"isPlanningExpanded = !isPlanningExpanded\"\n        >\n          <span\n            class=\"home__sec-chevron\"\n            :class=\"{ 'home__sec-chevron--open': isPlanningExpanded }\"\n            aria-hidden=\"true\"\n          >\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M6 9l6 6 6-6\"/>\n            </svg>\n          </span>\n        </button>\n      </header>\n\n      <div\n        v-show=\"isPlanningExpanded\"\n        id=\"home-planning-stack\"\n        class=\"home__stack\"\n      >\n        <a\n          v-for=\"(item, idx) in listPreview\"\n          :key=\"item.location.id\"\n          :href=\"urlLocation(item.location.id)\"\n          class=\"home__loc\"\n          :class=\"{ 'home__loc--primary': idx === 0 }\"\n        >\n          <span class=\"home__loc-icon\" aria-hidden=\"true\">\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n              <path d=\"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\"/>\n              <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n            </svg>\n          </span>\n          <span class=\"home__loc-body\">\n            <span class=\"home__loc-name\">{{ item.location.companyName }}</span>\n            <span class=\"home__loc-meta\">\n              <template v-if=\"ratingLabel(item.location.latestScore)\">\n                <span class=\"home__loc-live\" :style=\"{ color: scoutColor(item.location.latestScore) }\">{{ ratingLabel(item.location.latestScore) }}</span>\n                <span aria-hidden=\"true\">·</span>\n              </template>\n              <span>\n                {{ item.location.city ?? item.location.address }}\n              </span>\n            </span>\n          </span>\n          <span v-if=\"item.location.latestScore !== null\" class=\"home__loc-stat\">\n            <span class=\"home__loc-stat-value\" :style=\"scoreStyle(item.location.latestScore)\">\n              {{ item.location.latestScore }}\n            </span>\n            <span class=\"home__loc-stat-label\">AI-score</span>\n          </span>\n          <span class=\"home__loc-gauge\" aria-hidden=\"true\">\n            <span\n              class=\"home__loc-gauge-fill\"\n              :style=\"gaugeStyle(item.location.latestScore)\"\n            ></span>\n          </span>\n        </a>\n\n        <a v-if=\"listCount > listPreview.length\" :href=\"urlPlanning()\" class=\"home__stack-more\">\n          Toon alles ({{ listCount }})\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M5 12h14M13 5l7 7-7 7\"/>\n          </svg>\n        </a>\n      </div>\n    </section>\n\n    <!-- ===== Locaties in de buurt (na GPS) ===== -->\n    <section v-if=\"geoState.kind === 'results'\" ref=\"nearbySectionEl\" class=\"home__section\">\n      <header class=\"home__sec-head\">\n        <div>\n          <p class=\"home__sec-kicker\">{{ geoState.results.length }} dichtstbijzijnd</p>\n          <h2 class=\"home__sec-title\">In de buurt</h2>\n        </div>\n      </header>\n\n      <div class=\"home__stack\">\n        <div\n          v-for=\"loc in geoState.results\"\n          :key=\"loc.id\"\n          class=\"home__loc home__loc--row\"\n        >\n          <a :href=\"urlLocation(loc.id)\" class=\"home__loc-link\">\n            <span class=\"home__loc-icon\" aria-hidden=\"true\">\n              <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\"/>\n                <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n              </svg>\n            </span>\n            <span class=\"home__loc-body\">\n              <span class=\"home__loc-name\">{{ loc.companyName }}</span>\n              <span class=\"home__loc-meta\">\n                <template v-if=\"ratingLabel(loc.latestScore)\">\n                  <span class=\"home__loc-live\" :style=\"{ color: scoutColor(loc.latestScore) }\">{{ ratingLabel(loc.latestScore) }}</span>\n                  <span aria-hidden=\"true\">·</span>\n                </template>\n                <span>\n                  {{ loc.city ?? loc.address\n                  }}<template v-if=\"loc.distanceMeters !== undefined\">\n                    · {{ formatDistance(loc.distanceMeters) }}\n                  </template>\n                </span>\n              </span>\n            </span>\n            <span v-if=\"loc.latestScore !== null\" class=\"home__loc-stat\">\n              <span class=\"home__loc-stat-value\" :style=\"scoreStyle(loc.latestScore)\">\n                {{ loc.latestScore }}\n              </span>\n              <span class=\"home__loc-stat-label\">AI-score</span>\n            </span>\n            <span v-else class=\"home__loc-pending\" aria-label=\"Nog niet geanalyseerd\">\n              Nog te analyseren\n            </span>\n            <span class=\"home__loc-gauge\" aria-hidden=\"true\">\n              <span\n                class=\"home__loc-gauge-fill\"\n                :style=\"gaugeStyle(loc.latestScore)\"\n              ></span>\n            </span>\n          </a>\n          <span class=\"home__loc-add\">\n            <AddToListButton :location=\"loc\" />\n          </span>\n        </div>\n      </div>\n    </section>\n\n    <p v-if=\"geoState.kind === 'empty'\" class=\"home__status\">\n      Geen locaties in de buurt gevonden. Probeer hierboven een zoekterm.\n    </p>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from \"vue\";\nimport { useRouter } from \"vue-router\";\nimport { getUserInfo } from \"../lib/runtime\";\nimport AddToListButton from \"../components/AddToListButton.vue\";\nimport { nearbyLocations, searchLocations } from \"../lib/api\";\nimport { formatDistance } from \"../lib/distance\";\nimport { usePersonalList } from \"../lib/personalList\";\nimport { urlAddLocation, urlLocation, urlPlanning } from \"../lib/urls\";\nimport { scoutBucket, scoutColor, scoutRecommendation } from \"../lib/scoutScore\";\nimport type { LocationSummary } from \"../lib/types\";\n\nconst router = useRouter();\n\ntype GeoState =\n  | { kind: \"idle\" }\n  | { kind: \"requesting\" }\n  | { kind: \"loading\" }\n  | { kind: \"results\"; results: LocationSummary[] }\n  | { kind: \"empty\" }\n  | { kind: \"error\"; message: string };\n\ntype CachedUserInfo = {\n  wrd_contact_email?: string | null;\n  wrd_firstname?: string | null;\n  wrd_lastname?: string | null;\n};\n\nconst AUTO_NAVIGATE_THRESHOLD_METERS = 50;\nconst PLANNING_PREVIEW_LIMIT = 3;\n\n// ---------------------------------------------------------------------------\n// User-greeting (voornaam-only zodat de wave-emoji ernaast lekker leest)\n// ---------------------------------------------------------------------------\nconst userInfo = computed(() => getUserInfo<CachedUserInfo>() ?? null);\n\nconst greetingName = computed(() => {\n  const info = userInfo.value;\n  if (!info) return \"Hallo\";\n  const first = (info.wrd_firstname ?? \"\").trim();\n  if (first) return `Hallo ${first}`;\n  const email = (info.wrd_contact_email ?? \"\").trim();\n  return email ? `Hallo ${email.split(\"@\")[0]}` : \"Hallo\";\n});\n\nconst initials = computed(() => {\n  const info = userInfo.value;\n  if (!info) return \"•\";\n  const first = (info.wrd_firstname ?? \"\").trim();\n  const last = (info.wrd_lastname ?? \"\").trim();\n  if (first || last) return `${first.charAt(0)}${last.charAt(0)}`.toUpperCase() || \"•\";\n  return (info.wrd_contact_email ?? \"?\").charAt(0).toUpperCase();\n});\n\n// ---------------------------------------------------------------------------\n// Personal list preview\n// ---------------------------------------------------------------------------\nconst { list, count: listCount } = usePersonalList();\nconst listPreview = computed(() => list.value.slice(0, PLANNING_PREVIEW_LIMIT));\nconst isPlanningExpanded = ref(true);\n\n// ---------------------------------------------------------------------------\n// GPS / nearby\n// ---------------------------------------------------------------------------\nconst geoState = ref<GeoState>({ kind: \"idle\" });\nconst nearbySectionEl = ref<HTMLElement | null>(null);\n\nconst geoTitle = computed(() => {\n  switch (geoState.value.kind) {\n    case \"requesting\": return \"Locatie ophalen…\";\n    case \"loading\": return \"Locaties zoeken…\";\n    case \"error\": return \"Probeer opnieuw\";\n    default: return \"Locaties bij mij in de buurt\";\n  }\n});\nconst geoSub = computed(() => {\n  switch (geoState.value.kind) {\n    case \"requesting\":\n    case \"loading\":\n      return \"Even geduld…\";\n    case \"error\":\n      return \"GPS niet beschikbaar — gebruik zoeken hierboven.\";\n    default:\n      return \"Gebruik je GPS om dichtstbijzijnde locaties te vinden\";\n  }\n});\n\nfunction requestLocation() {\n  if (!navigator.geolocation) {\n    geoState.value = {\n      kind: \"error\",\n      message: \"Je apparaat ondersteunt geen locatiebepaling. Zoek hierboven handmatig.\",\n    };\n    return;\n  }\n\n  // Klap planning in zodat de in-de-buurt-resultaten in beeld komen.\n  isPlanningExpanded.value = false;\n  geoState.value = { kind: \"requesting\" };\n\n  navigator.geolocation.getCurrentPosition(\n    async (position) => {\n      geoState.value = { kind: \"loading\" };\n      try {\n        const { locations } = await nearbyLocations(\n          position.coords.latitude,\n          position.coords.longitude,\n          5,\n        );\n\n        if (locations.length === 0) {\n          geoState.value = { kind: \"empty\" };\n          return;\n        }\n\n        const closest = locations[0];\n        if (\n          closest.distanceMeters !== undefined &&\n          closest.distanceMeters <= AUTO_NAVIGATE_THRESHOLD_METERS\n        ) {\n          router.push({ name: \"location\", params: { id: String(closest.id) } });\n          return;\n        }\n\n        geoState.value = { kind: \"results\", results: locations };\n        await nextTick();\n        nearbySectionEl.value?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      } catch (err) {\n        console.error(\"Nearby lookup failed:\", err);\n        geoState.value = {\n          kind: \"error\",\n          message: \"Er ging iets mis bij het ophalen van locaties in de buurt.\",\n        };\n      }\n    },\n    (error) => {\n      const message =\n        error.code === error.PERMISSION_DENIED\n          ? \"Locatie-toegang geweigerd. Zoek hierboven handmatig.\"\n          : error.code === error.TIMEOUT\n            ? \"Locatiebepaling duurde te lang. Probeer opnieuw of zoek handmatig.\"\n            : \"Je locatie kon niet worden bepaald. Zoek hierboven handmatig.\";\n      geoState.value = { kind: \"error\", message };\n    },\n    { enableHighAccuracy: true, timeout: 10_000, maximumAge: 30_000 },\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Tekst-zoek (debounced)\n// ---------------------------------------------------------------------------\nconst query = ref(\"\");\nconst searchResults = ref<LocationSummary[]>([]);\nconst isSearching = ref(false);\nconst hasSearched = ref(false);\n\nconst showSearchResults = computed(() => {\n  return query.value.trim().length > 0 && (isSearching.value || hasSearched.value);\n});\n\n// \"Niet gevonden? Toevoegen\" bij 0 resultaten — neemt de zoekterm mee als\n// voorgevuld adres (?q=). Onder hash-routing hangt de query ná het #-pad.\nconst addLocationHref = computed(() => {\n  const q = query.value.trim();\n  return q ? `${urlAddLocation()}?q=${encodeURIComponent(q)}` : urlAddLocation();\n});\n\nlet controller: AbortController | null = null;\nlet debounce: ReturnType<typeof setTimeout> | null = null;\n\nwatch(query, (value) => {\n  if (debounce) clearTimeout(debounce);\n  if (!value.trim()) {\n    searchResults.value = [];\n    hasSearched.value = false;\n    return;\n  }\n  debounce = setTimeout(async () => {\n    controller?.abort();\n    controller = new AbortController();\n    isSearching.value = true;\n    try {\n      const { locations } = await searchLocations(value.trim(), controller.signal);\n      searchResults.value = locations;\n      hasSearched.value = true;\n    } catch (err) {\n      if (err instanceof DOMException && err.name === \"AbortError\") return;\n      console.error(\"Search failed:\", err);\n      searchResults.value = [];\n      hasSearched.value = true;\n    } finally {\n      isSearching.value = false;\n    }\n  }, 300);\n});\n\n// ---------------------------------------------------------------------------\n// Score-helpers — color/gauge/label all come from the SINGLE scoutScore scale\n// (the same traffic-light the Verkennen map uses), so a 92 reads green here and\n// on the map. See lib/scoutScore.ts.\n// ---------------------------------------------------------------------------\nfunction ratingLabel(score: number | null): string | null {\n  // Keep the home's \"positive highlight\" feel: only surface a label for the two\n  // top buckets (green/amber). The text itself comes from scoutRecommendation so\n  // it can never drift from the map's wording.\n  const bucket = scoutBucket(score);\n  if (bucket === \"zeer-geschikt\" || bucket === \"geschikt\") {\n    return scoutRecommendation(score).badge;\n  }\n  return null;\n}\n\nfunction scoreStyle(score: number | null) {\n  return { color: scoutColor(score) };\n}\nfunction gaugeStyle(score: number | null) {\n  const pct = score === null ? 0 : Math.max(4, Math.min(100, score));\n  return { width: `${pct}%`, background: scoutColor(score) };\n}\n</script>\n\n<style scoped>\n/* ============================================================\n   Layout\n   ============================================================ */\n.home {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  padding: 0 0 24px;\n}\n\n/* ============================================================\n   Greet header — avatar + welkom-label + naam met wave\n   ============================================================ */\n.home__greet {\n  padding: 18px 22px 8px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n.home__greet-row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  min-width: 0;\n}\n.home__avatar {\n  position: relative;\n  width: 42px;\n  height: 42px;\n  border-radius: 99px;\n  display: grid;\n  place-items: center;\n  background: linear-gradient(135deg, var(--snl-mint), var(--snl-deep));\n  color: var(--snl-ink);\n  font-size: 15px;\n  font-weight: 800;\n  letter-spacing: 0;\n  flex-shrink: 0;\n  box-shadow: 0 0 0 2px rgba(143, 204, 177, 0.18);\n}\n.home__avatar::after {\n  content: \"\";\n  position: absolute;\n  right: -1px;\n  bottom: -1px;\n  width: 11px;\n  height: 11px;\n  border-radius: 99px;\n  background: var(--snl-mint);\n  border: 2px solid var(--snl-bg);\n  box-shadow: 0 0 8px var(--snl-mint);\n}\n.home__greet-text {\n  display: flex;\n  flex-direction: column;\n  line-height: 1.1;\n  min-width: 0;\n}\n.home__greet-label {\n  font-size: 11px;\n  letter-spacing: 0.16em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n}\n.home__greet-name {\n  margin-top: 2px;\n  font-size: 22px;\n  font-weight: 800;\n  letter-spacing: -0.02em;\n  color: var(--snl-fg);\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.home__wave {\n  display: inline-block;\n  transform-origin: 70% 70%;\n  animation: home-wave 2.6s ease-in-out infinite;\n}\n@keyframes home-wave {\n  0%, 60%, 100% { transform: rotate(0deg); }\n  10% { transform: rotate(14deg); }\n  20% { transform: rotate(-8deg); }\n  30% { transform: rotate(14deg); }\n  40% { transform: rotate(-4deg); }\n  50% { transform: rotate(10deg); }\n}\n\n.home__lede {\n  margin: 0 22px 18px;\n  font-size: 14.5px;\n  line-height: 1.55;\n  color: var(--snl-fg-muted);\n}\n.home__lede b { color: var(--snl-fg); font-weight: 600; }\n\n/* ============================================================\n   Search pill\n   ============================================================ */\n.home__search {\n  margin: 0 22px 14px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 18px;\n  height: 54px;\n  padding: 0 16px 0 20px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  transition: border-color 0.2s, box-shadow 0.2s;\n}\n.home__search:focus-within {\n  border-color: rgba(143, 204, 177, 0.5);\n  box-shadow: 0 0 0 4px rgba(143, 204, 177, 0.12);\n}\n.home__search-icon {\n  color: var(--snl-mint);\n  flex-shrink: 0;\n  display: inline-flex;\n}\n.home__search-input {\n  flex: 1;\n  background: transparent;\n  border: 0;\n  outline: none;\n  color: var(--snl-fg);\n  font-family: inherit;\n  font-size: 15px;\n  font-weight: 500;\n  letter-spacing: -0.005em;\n}\n.home__search-input::placeholder { color: var(--snl-fg-placeholder); }\n\n/* ============================================================\n   Geo CTA — gradient card met pulserende ring\n   ============================================================ */\n.home__geo {\n  position: relative;\n  margin: 0 22px 22px;\n  padding: 18px 18px 18px 80px;\n  border-radius: 22px;\n  background:\n    linear-gradient(135deg, rgba(243, 108, 79, 0.18) 0%, rgba(143, 204, 177, 0.14) 100%),\n    var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  text-align: left;\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  width: calc(100% - 44px);\n  color: var(--snl-fg);\n  cursor: pointer;\n  transition: transform 0.15s var(--ease-spring), box-shadow 0.15s;\n  overflow: hidden;\n}\n.home__geo:hover:not(:disabled) {\n  transform: translateY(-1px);\n  box-shadow: 0 18px 36px -18px rgba(243, 108, 79, 0.4);\n}\n.home__geo:disabled { cursor: default; opacity: 0.85; }\n.home__geo-orb {\n  position: absolute;\n  left: 18px;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 48px;\n  height: 48px;\n  border-radius: 99px;\n  display: grid;\n  place-items: center;\n  background: linear-gradient(135deg, var(--snl-koraal), #FF8E6E);\n  color: #fff;\n  box-shadow: 0 0 24px rgba(243, 108, 79, 0.5);\n  z-index: 2;\n}\n.home__geo-ring {\n  position: absolute;\n  left: 18px;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 48px;\n  height: 48px;\n  border-radius: 99px;\n  border: 2px solid rgba(243, 108, 79, 0.6);\n  animation: home-ring-pulse 2s ease-out infinite;\n  pointer-events: none;\n}\n.home__geo--busy .home__geo-ring {\n  animation-duration: 0.9s;\n  border-color: rgba(143, 204, 177, 0.7);\n}\n@keyframes home-ring-pulse {\n  0%   { transform: translateY(-50%) scale(1); opacity: 0.8; }\n  100% { transform: translateY(-50%) scale(1.8); opacity: 0; }\n}\n.home__geo-text {\n  flex: 1;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n}\n.home__geo-title {\n  font-size: 15px;\n  font-weight: 700;\n  letter-spacing: -0.015em;\n  color: var(--snl-fg);\n}\n.home__geo-sub {\n  font-size: 12.5px;\n  color: var(--snl-fg-muted);\n  margin-top: 3px;\n  line-height: 1.45;\n}\n.home__geo-arrow {\n  width: 32px;\n  height: 32px;\n  border-radius: 99px;\n  background: rgba(255, 255, 255, 0.08);\n  display: grid;\n  place-items: center;\n  color: var(--snl-fg);\n  flex-shrink: 0;\n}\n\n[data-theme=\"light\"] .home__geo-arrow { background: rgba(0, 0, 0, 0.05); }\n\n/* ============================================================\n   Errors / status\n   ============================================================ */\n.home__error {\n  margin: 0 22px 16px;\n  display: flex;\n  gap: 10px;\n  align-items: flex-start;\n  padding: 12px 14px;\n  border: 1px solid rgba(242, 180, 65, 0.35);\n  border-radius: 14px;\n  background: rgba(242, 180, 65, 0.08);\n}\n.home__error-icon {\n  flex-shrink: 0;\n  color: var(--snl-golden);\n  font-size: 15px;\n  line-height: 1.4;\n}\n.home__error p {\n  margin: 0;\n  font-size: 13px;\n  color: var(--snl-golden);\n  line-height: 1.5;\n}\n.home__status {\n  margin: 4px 22px 12px;\n  padding: 12px 14px;\n  text-align: center;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 14px;\n}\n.home__status--empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 12px;\n}\n.home__status--empty p { margin: 0; }\n.home__add-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 10px 16px;\n  border-radius: 12px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 13.5px;\n  font-weight: 700;\n  text-decoration: none;\n  transition: filter 0.15s, transform 0.08s;\n}\n.home__add-cta:hover { filter: brightness(1.06); }\n.home__add-cta:active { transform: translateY(1px); }\n\n/* ============================================================\n   Sections\n   ============================================================ */\n.home__section {\n  margin-top: 10px;\n}\n.home__sec-head {\n  padding: 0 22px;\n  margin-bottom: 10px;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n.home__sec-kicker {\n  margin: 0;\n  font-size: 11px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n}\n.home__sec-title {\n  margin: 2px 0 0;\n  font-size: 18px;\n  font-weight: 700;\n  letter-spacing: -0.015em;\n  color: var(--snl-fg);\n}\n.home__sec-link {\n  display: none;\n  font-size: 12.5px;\n  color: var(--snl-mint);\n  font-weight: 600;\n  text-decoration: none;\n  padding: 4px 0;\n}\n.home__sec-link:hover { text-decoration: underline; }\n@media (min-width: 960px) {\n  .home__sec-link { display: inline; }\n}\n\n.home__sec-toggle {\n  display: flex;\n  flex-direction: column;\n  padding: 4px 0;\n  margin: 0;\n  background: transparent;\n  border: 0;\n  color: inherit;\n  font: inherit;\n  text-align: left;\n  cursor: pointer;\n  flex: 1;\n  min-width: 0;\n}\n.home__sec-toggle:focus-visible {\n  outline: 2px solid var(--snl-mint);\n  outline-offset: 4px;\n  border-radius: 6px;\n}\n.home__sec-chevron-btn {\n  flex-shrink: 0;\n  display: inline-grid;\n  place-items: center;\n  width: 28px;\n  height: 28px;\n  padding: 0;\n  margin: 0;\n  background: transparent;\n  border: 0;\n  color: inherit;\n  cursor: pointer;\n}\n.home__sec-chevron-btn:focus-visible {\n  outline: 2px solid var(--snl-mint);\n  outline-offset: 2px;\n  border-radius: 99px;\n}\n.home__sec-chevron {\n  display: inline-grid;\n  place-items: center;\n  width: 28px;\n  height: 28px;\n  border-radius: 99px;\n  color: var(--snl-fg-muted);\n  background: rgba(255, 255, 255, 0.04);\n  transition: transform 0.25s var(--ease-spring), color 0.2s, background 0.2s;\n}\n[data-theme=\"light\"] .home__sec-chevron { background: rgba(18, 23, 26, 0.05); }\n.home__sec-chevron--open { transform: rotate(180deg); }\n@media (hover: hover) {\n  .home__sec-chevron-btn:hover .home__sec-chevron,\n  .home__sec-toggle:hover ~ .home__sec-chevron-btn .home__sec-chevron {\n    color: var(--snl-mint);\n    background: var(--snl-mint-soft);\n  }\n}\n\n/* ============================================================\n   Locatie-cards\n   ============================================================ */\n.home__stack {\n  padding: 0 22px;\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n\n.home__loc {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  padding: 14px;\n  border: 1px solid var(--snl-line);\n  border-radius: 20px;\n  background: var(--snl-surface);\n  color: var(--snl-fg);\n  text-decoration: none;\n  overflow: hidden;\n  transition: transform 0.2s var(--ease-out), border-color 0.2s, background 0.2s;\n  animation: snl-rise 0.3s var(--ease-spring) both;\n}\n.home__loc:hover {\n  transform: translateY(-1px);\n  border-color: rgba(143, 204, 177, 0.3);\n}\n\n.home__loc--primary {\n  background: linear-gradient(135deg, rgba(143, 204, 177, 0.14), rgba(143, 204, 177, 0.04)),\n              var(--snl-surface);\n  border-color: rgba(143, 204, 177, 0.35);\n}\n.home__loc--primary::before {\n  content: \"\";\n  position: absolute;\n  right: -30px;\n  top: -30px;\n  width: 120px;\n  height: 120px;\n  border-radius: 50%;\n  background: radial-gradient(circle, rgba(143, 204, 177, 0.22), transparent 70%);\n  pointer-events: none;\n}\n\n/* `--row` variant: link + add-button naast elkaar (zoekresultaten) */\n.home__loc--row { padding: 0; }\n.home__loc--row .home__loc-link {\n  display: flex;\n  flex: 1;\n  min-width: 0;\n  align-items: center;\n  gap: 14px;\n  padding: 14px;\n  text-decoration: none;\n  color: inherit;\n}\n.home__loc-add {\n  display: flex;\n  align-items: center;\n  padding: 12px 14px 12px 0;\n  flex-shrink: 0;\n}\n\n.home__loc-icon {\n  position: relative;\n  width: 50px;\n  height: 50px;\n  border-radius: 14px;\n  flex-shrink: 0;\n  display: grid;\n  place-items: center;\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n}\n.home__loc--primary .home__loc-icon {\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n}\n.home__loc-star {\n  position: absolute;\n  top: -4px;\n  right: -4px;\n  width: 18px;\n  height: 18px;\n  border-radius: 99px;\n  background: var(--snl-koraal);\n  color: #fff;\n  display: grid;\n  place-items: center;\n  border: 2px solid var(--snl-bg);\n}\n\n.home__loc-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }\n.home__loc-name {\n  font-size: 15px;\n  font-weight: 650;\n  letter-spacing: -0.01em;\n  color: var(--snl-fg);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.home__loc-meta {\n  font-size: 12px;\n  color: var(--snl-fg-muted);\n  display: flex;\n  gap: 6px;\n  align-items: center;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.home__loc-live {\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  /* color is set inline per score (scoutColor) so the dot + label match the\n     map's traffic-light tone; falls back to mint when no inline color. */\n  color: var(--snl-mint);\n  font-weight: 600;\n}\n.home__loc-live::before {\n  content: \"\";\n  width: 6px;\n  height: 6px;\n  border-radius: 99px;\n  background: currentColor;\n  box-shadow: 0 0 6px currentColor;\n  animation: home-pulse-dot 1.6s ease-in-out infinite;\n}\n@keyframes home-pulse-dot {\n  0%, 100% { opacity: 1; transform: scale(1); }\n  50%      { opacity: 0.4; transform: scale(1.4); }\n}\n\n.home__loc-stat {\n  text-align: right;\n  flex-shrink: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 0;\n}\n.home__loc-stat-value {\n  font-weight: 900;\n  font-size: 22px;\n  letter-spacing: -0.025em;\n  font-variant-numeric: tabular-nums;\n  color: var(--snl-fg);\n  line-height: 1;\n}\n.home__loc-stat-label {\n  font-size: 10.5px;\n  color: var(--snl-fg-muted);\n  letter-spacing: 0.04em;\n  margin-top: 2px;\n}\n\n.home__loc-pending {\n  flex-shrink: 0;\n  font-size: 11px;\n  font-weight: 600;\n  color: var(--snl-fg-muted);\n  padding: 4px 10px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 99px;\n  white-space: nowrap;\n}\n\n.home__loc-gauge {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 3px;\n  background: rgba(255, 255, 255, 0.04);\n}\n[data-theme=\"light\"] .home__loc-gauge { background: rgba(18, 23, 26, 0.05); }\n.home__loc-gauge-fill {\n  display: block;\n  height: 100%;\n  border-radius: 0 99px 99px 0;\n  transition: width 0.4s var(--ease-out);\n}\n\n.home__stack-more {\n  display: inline-flex;\n  align-self: flex-start;\n  align-items: center;\n  gap: 6px;\n  margin-top: 4px;\n  padding: 8px 14px;\n  border-radius: 99px;\n  border: 1px solid var(--snl-line);\n  background: var(--snl-surface);\n  color: var(--snl-fg-muted);\n  font-size: 12.5px;\n  font-weight: 600;\n  text-decoration: none;\n  transition: background 0.15s, color 0.15s, border-color 0.15s;\n}\n.home__stack-more:hover {\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n  border-color: var(--snl-mint);\n}\n\n/* Desktop verfijning — meer ademruimte links/rechts */\n@media (min-width: 960px) {\n  .home__greet { padding: 28px 0 8px; }\n  .home__lede,\n  .home__geo,\n  .home__error,\n  .home__status,\n  .home__sec-head,\n  .home__stack { margin-left: 0; margin-right: 0; padding-left: 0; padding-right: 0; }\n  /* Search pill keeps its internal padding (icon spacing) — only drop the outer margin */\n  .home__search { margin-left: 0; margin-right: 0; }\n  .home__geo { width: 100%; padding: 18px 18px 18px 80px; }\n}\n</style>\n","export function formatDistance(meters: number): string {\n  if (meters < 1_000) {\n    return `${Math.round(meters)} m`;\n  }\n  const km = meters / 1_000;\n  return `${km.toFixed(1).replace(\".\", \",\")} km`;\n}\n","import { createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, renderList as _renderList, normalizeStyle as _normalizeStyle, createVNode as _createVNode, normalizeClass as _normalizeClass, vShow as _vShow, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"home\" }\nconst _hoisted_2 = { class: \"home__greet\" }\nconst _hoisted_3 = { class: \"home__greet-row\" }\nconst _hoisted_4 = {\n  class: \"home__avatar\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_5 = { class: \"home__greet-text\" }\nconst _hoisted_6 = { class: \"home__greet-name\" }\nconst _hoisted_7 = { class: \"home__lede\" }\nconst _hoisted_8 = { class: \"home__search\" }\nconst _hoisted_9 = {\n  key: 0,\n  class: \"home__section\"\n}\nconst _hoisted_10 = { class: \"home__sec-head\" }\nconst _hoisted_11 = { class: \"home__sec-kicker\" }\nconst _hoisted_12 = {\n  key: 0,\n  class: \"home__status home__status--empty\"\n}\nconst _hoisted_13 = [\"href\"]\nconst _hoisted_14 = {\n  key: 1,\n  class: \"home__stack\"\n}\nconst _hoisted_15 = [\"href\"]\nconst _hoisted_16 = { class: \"home__loc-body\" }\nconst _hoisted_17 = { class: \"home__loc-name\" }\nconst _hoisted_18 = { class: \"home__loc-meta\" }\nconst _hoisted_19 = {\n  key: 0,\n  class: \"home__loc-stat\"\n}\nconst _hoisted_20 = {\n  key: 1,\n  class: \"home__loc-pending\",\n  \"aria-label\": \"Nog niet geanalyseerd\"\n}\nconst _hoisted_21 = {\n  class: \"home__loc-gauge\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_22 = { class: \"home__loc-add\" }\nconst _hoisted_23 = [\"disabled\"]\nconst _hoisted_24 = { class: \"home__geo-text\" }\nconst _hoisted_25 = { class: \"home__geo-title\" }\nconst _hoisted_26 = { class: \"home__geo-sub\" }\nconst _hoisted_27 = {\n  key: 1,\n  class: \"home__error\"\n}\nconst _hoisted_28 = {\n  key: 2,\n  class: \"home__section\"\n}\nconst _hoisted_29 = { class: \"home__sec-head\" }\nconst _hoisted_30 = [\"aria-expanded\"]\nconst _hoisted_31 = { class: \"home__sec-kicker\" }\nconst _hoisted_32 = [\"href\"]\nconst _hoisted_33 = [\"aria-expanded\", \"aria-label\"]\nconst _hoisted_34 = {\n  id: \"home-planning-stack\",\n  class: \"home__stack\"\n}\nconst _hoisted_35 = [\"href\"]\nconst _hoisted_36 = { class: \"home__loc-body\" }\nconst _hoisted_37 = { class: \"home__loc-name\" }\nconst _hoisted_38 = { class: \"home__loc-meta\" }\nconst _hoisted_39 = {\n  key: 0,\n  class: \"home__loc-stat\"\n}\nconst _hoisted_40 = {\n  class: \"home__loc-gauge\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_41 = [\"href\"]\nconst _hoisted_42 = {\n  key: 3,\n  ref: \"nearbySectionEl\",\n  class: \"home__section\"\n}\nconst _hoisted_43 = { class: \"home__sec-head\" }\nconst _hoisted_44 = { class: \"home__sec-kicker\" }\nconst _hoisted_45 = { class: \"home__stack\" }\nconst _hoisted_46 = [\"href\"]\nconst _hoisted_47 = { class: \"home__loc-body\" }\nconst _hoisted_48 = { class: \"home__loc-name\" }\nconst _hoisted_49 = { class: \"home__loc-meta\" }\nconst _hoisted_50 = {\n  key: 0,\n  class: \"home__loc-stat\"\n}\nconst _hoisted_51 = {\n  key: 1,\n  class: \"home__loc-pending\",\n  \"aria-label\": \"Nog niet geanalyseerd\"\n}\nconst _hoisted_52 = {\n  class: \"home__loc-gauge\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_53 = { class: \"home__loc-add\" }\nconst _hoisted_54 = {\n  key: 4,\n  class: \"home__status\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createCommentVNode(\" ===== Greet header ===== \"),\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _createElementVNode(\"span\", _hoisted_4, _toDisplayString($setup.initials), 1 /* TEXT */),\n        _createElementVNode(\"div\", _hoisted_5, [\n          _cache[4] || (_cache[4] = _createElementVNode(\"span\", { class: \"home__greet-label\" }, \"Welkom terug\", -1 /* CACHED */)),\n          _createElementVNode(\"span\", _hoisted_6, [\n            _createTextVNode(_toDisplayString($setup.greetingName) + \" \", 1 /* TEXT */),\n            _cache[3] || (_cache[3] = _createElementVNode(\"span\", {\n              class: \"home__wave\",\n              \"aria-hidden\": \"true\"\n            }, \"👋\", -1 /* CACHED */))\n          ])\n        ])\n      ])\n    ]),\n    _createElementVNode(\"p\", _hoisted_7, [\n      ($setup.listCount > 0)\n        ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n            _cache[5] || (_cache[5] = _createTextVNode(\" Hieronder vind je \", -1 /* CACHED */)),\n            _cache[6] || (_cache[6] = _createElementVNode(\"b\", null, \"jouw planning\", -1 /* CACHED */)),\n            _cache[7] || (_cache[7] = _createTextVNode(\". Tik om de AI-score en plaatsings­potentie te bekijken. \", -1 /* CACHED */))\n          ], 64 /* STABLE_FRAGMENT */))\n        : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n            _cache[8] || (_cache[8] = _createTextVNode(\" Begin je dag: zoek locaties of gebruik je GPS om te zien wat er \", -1 /* CACHED */)),\n            _cache[9] || (_cache[9] = _createElementVNode(\"b\", null, \"bij je in de buurt\", -1 /* CACHED */)),\n            _cache[10] || (_cache[10] = _createTextVNode(\" staat. \", -1 /* CACHED */))\n          ], 64 /* STABLE_FRAGMENT */))\n    ]),\n    _createCommentVNode(\" ===== Search ===== \"),\n    _createElementVNode(\"label\", _hoisted_8, [\n      _cache[11] || (_cache[11] = _createElementVNode(\"span\", {\n        class: \"home__search-icon\",\n        \"aria-hidden\": \"true\"\n      }, [\n        _createElementVNode(\"svg\", {\n          width: \"20\",\n          height: \"20\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"2.2\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\"\n        }, [\n          _createElementVNode(\"circle\", {\n            cx: \"11\",\n            cy: \"11\",\n            r: \"7\"\n          }),\n          _createElementVNode(\"path\", { d: \"m20 20-3.5-3.5\" })\n        ])\n      ], -1 /* CACHED */)),\n      _withDirectives(_createElementVNode(\"input\", {\n        \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.query) = $event)),\n        type: \"search\",\n        placeholder: \"Zoek bedrijfsnaam, stad of adres…\",\n        class: \"home__search-input\",\n        \"aria-label\": \"Zoek locatie\"\n      }, null, 512 /* NEED_PATCH */), [\n        [_vModelText, $setup.query]\n      ])\n    ]),\n    _createCommentVNode(\" ===== Zoekresultaten ===== \"),\n    ($setup.showSearchResults)\n      ? (_openBlock(), _createElementBlock(\"section\", _hoisted_9, [\n          _createElementVNode(\"header\", _hoisted_10, [\n            _createElementVNode(\"div\", null, [\n              _createElementVNode(\"p\", _hoisted_11, [\n                ($setup.isSearching)\n                  ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                      _createTextVNode(\"Aan het zoeken…\")\n                    ], 64 /* STABLE_FRAGMENT */))\n                  : ($setup.searchResults.length === 0)\n                    ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                        _createTextVNode(\"Geen resultaten\")\n                      ], 64 /* STABLE_FRAGMENT */))\n                    : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                        _createTextVNode(_toDisplayString($setup.searchResults.length) + \" \" + _toDisplayString($setup.searchResults.length === 1 ? \"resultaat\" : \"resultaten\"), 1 /* TEXT */)\n                      ], 64 /* STABLE_FRAGMENT */))\n              ]),\n              _cache[12] || (_cache[12] = _createElementVNode(\"h2\", { class: \"home__sec-title\" }, \"Zoekresultaten\", -1 /* CACHED */))\n            ])\n          ]),\n          (!$setup.isSearching && $setup.searchResults.length === 0)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n                _createElementVNode(\"p\", null, \"Geen locaties gevonden voor \\\"\" + _toDisplayString($setup.query) + \"\\\".\", 1 /* TEXT */),\n                _createElementVNode(\"a\", {\n                  href: $setup.addLocationHref,\n                  class: \"home__add-cta\"\n                }, _cache[13] || (_cache[13] = [\n                  _createElementVNode(\"svg\", {\n                    width: \"16\",\n                    height: \"16\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"2.4\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\",\n                    \"aria-hidden\": \"true\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"M12 5v14M5 12h14\" })\n                  ], -1 /* CACHED */),\n                  _createTextVNode(\" Niet gevonden? Locatie toevoegen \", -1 /* CACHED */)\n                ]), 8 /* PROPS */, _hoisted_13)\n              ]))\n            : (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.searchResults, (loc) => {\n                  return (_openBlock(), _createElementBlock(\"div\", {\n                    key: loc.id,\n                    class: \"home__loc home__loc--row\"\n                  }, [\n                    _createElementVNode(\"a\", {\n                      href: $setup.urlLocation(loc.id),\n                      class: \"home__loc-link\"\n                    }, [\n                      _cache[16] || (_cache[16] = _createElementVNode(\"span\", {\n                        class: \"home__loc-icon\",\n                        \"aria-hidden\": \"true\"\n                      }, [\n                        _createElementVNode(\"svg\", {\n                          width: \"22\",\n                          height: \"22\",\n                          viewBox: \"0 0 24 24\",\n                          fill: \"none\",\n                          stroke: \"currentColor\",\n                          \"stroke-width\": \"1.8\",\n                          \"stroke-linecap\": \"round\",\n                          \"stroke-linejoin\": \"round\"\n                        }, [\n                          _createElementVNode(\"path\", { d: \"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\" }),\n                          _createElementVNode(\"circle\", {\n                            cx: \"12\",\n                            cy: \"10\",\n                            r: \"2.5\"\n                          })\n                        ])\n                      ], -1 /* CACHED */)),\n                      _createElementVNode(\"span\", _hoisted_16, [\n                        _createElementVNode(\"span\", _hoisted_17, _toDisplayString(loc.companyName), 1 /* TEXT */),\n                        _createElementVNode(\"span\", _hoisted_18, [\n                          ($setup.ratingLabel(loc.latestScore))\n                            ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                _createElementVNode(\"span\", {\n                                  class: \"home__loc-live\",\n                                  style: _normalizeStyle({ color: $setup.scoutColor(loc.latestScore) })\n                                }, _toDisplayString($setup.ratingLabel(loc.latestScore)), 5 /* TEXT, STYLE */),\n                                _cache[14] || (_cache[14] = _createElementVNode(\"span\", { \"aria-hidden\": \"true\" }, \"·\", -1 /* CACHED */))\n                              ], 64 /* STABLE_FRAGMENT */))\n                            : _createCommentVNode(\"v-if\", true),\n                          _createElementVNode(\"span\", null, _toDisplayString(loc.city ?? loc.address), 1 /* TEXT */)\n                        ])\n                      ]),\n                      (loc.latestScore !== null)\n                        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_19, [\n                            _createElementVNode(\"span\", {\n                              class: \"home__loc-stat-value\",\n                              style: _normalizeStyle($setup.scoreStyle(loc.latestScore))\n                            }, _toDisplayString(loc.latestScore), 5 /* TEXT, STYLE */),\n                            _cache[15] || (_cache[15] = _createElementVNode(\"span\", { class: \"home__loc-stat-label\" }, \"AI-score\", -1 /* CACHED */))\n                          ]))\n                        : (_openBlock(), _createElementBlock(\"span\", _hoisted_20, \" Nog te analyseren \")),\n                      _createElementVNode(\"span\", _hoisted_21, [\n                        _createElementVNode(\"span\", {\n                          class: \"home__loc-gauge-fill\",\n                          style: _normalizeStyle($setup.gaugeStyle(loc.latestScore))\n                        }, null, 4 /* STYLE */)\n                      ])\n                    ], 8 /* PROPS */, _hoisted_15),\n                    _createElementVNode(\"span\", _hoisted_22, [\n                      _createVNode($setup[\"AddToListButton\"], { location: loc }, null, 8 /* PROPS */, [\"location\"])\n                    ])\n                  ]))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]))\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _createCommentVNode(\" ===== Geo CTA ===== \"),\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: _normalizeClass([\"home__geo\", { 'home__geo--busy': $setup.geoState.kind === 'requesting' || $setup.geoState.kind === 'loading' }]),\n      disabled: $setup.geoState.kind === 'requesting' || $setup.geoState.kind === 'loading',\n      onClick: $setup.requestLocation\n    }, [\n      _cache[17] || (_cache[17] = _createStaticVNode(\"<span class=\\\"home__geo-ring\\\" aria-hidden=\\\"true\\\" data-v-fc9ec1ab></span><span class=\\\"home__geo-orb\\\" aria-hidden=\\\"true\\\" data-v-fc9ec1ab><svg width=\\\"22\\\" height=\\\"22\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2.2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" data-v-fc9ec1ab><path d=\\\"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\\\" data-v-fc9ec1ab></path><circle cx=\\\"12\\\" cy=\\\"10\\\" r=\\\"2.5\\\" fill=\\\"currentColor\\\" data-v-fc9ec1ab></circle></svg></span>\", 2)),\n      _createElementVNode(\"span\", _hoisted_24, [\n        _createElementVNode(\"span\", _hoisted_25, _toDisplayString($setup.geoTitle), 1 /* TEXT */),\n        _createElementVNode(\"span\", _hoisted_26, _toDisplayString($setup.geoSub), 1 /* TEXT */)\n      ]),\n      _cache[18] || (_cache[18] = _createElementVNode(\"span\", {\n        class: \"home__geo-arrow\",\n        \"aria-hidden\": \"true\"\n      }, [\n        _createElementVNode(\"svg\", {\n          width: \"14\",\n          height: \"14\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"2.4\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M5 12h14M13 5l7 7-7 7\" })\n        ])\n      ], -1 /* CACHED */))\n    ], 10 /* CLASS, PROPS */, _hoisted_23),\n    ($setup.geoState.kind === 'error')\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_27, [\n          _cache[19] || (_cache[19] = _createElementVNode(\"span\", {\n            class: \"home__error-icon\",\n            \"aria-hidden\": \"true\"\n          }, \"⚠\", -1 /* CACHED */)),\n          _createElementVNode(\"p\", null, _toDisplayString($setup.geoState.message), 1 /* TEXT */)\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _createCommentVNode(\" ===== Mijn planning (preview op home) ===== \"),\n    ($setup.listCount > 0)\n      ? (_openBlock(), _createElementBlock(\"section\", _hoisted_28, [\n          _createElementVNode(\"header\", _hoisted_29, [\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"home__sec-toggle\",\n              \"aria-expanded\": $setup.isPlanningExpanded,\n              \"aria-controls\": \"home-planning-stack\",\n              onClick: _cache[1] || (_cache[1] = $event => ($setup.isPlanningExpanded = !$setup.isPlanningExpanded))\n            }, [\n              _createElementVNode(\"span\", _hoisted_31, _toDisplayString($setup.listCount) + \" \" + _toDisplayString($setup.listCount === 1 ? \"locatie\" : \"locaties\") + \" · planning \", 1 /* TEXT */),\n              _cache[20] || (_cache[20] = _createElementVNode(\"span\", { class: \"home__sec-title\" }, \"Mijn planning\", -1 /* CACHED */))\n            ], 8 /* PROPS */, _hoisted_30),\n            _withDirectives(_createElementVNode(\"a\", {\n              class: \"home__sec-link\",\n              href: $setup.urlPlanning()\n            }, \"Bewerk\", 8 /* PROPS */, _hoisted_32), [\n              [_vShow, $setup.isPlanningExpanded]\n            ]),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"home__sec-chevron-btn\",\n              \"aria-expanded\": $setup.isPlanningExpanded,\n              \"aria-controls\": \"home-planning-stack\",\n              \"aria-label\": $setup.isPlanningExpanded ? 'Mijn planning inklappen' : 'Mijn planning uitklappen',\n              onClick: _cache[2] || (_cache[2] = $event => ($setup.isPlanningExpanded = !$setup.isPlanningExpanded))\n            }, [\n              _createElementVNode(\"span\", {\n                class: _normalizeClass([\"home__sec-chevron\", { 'home__sec-chevron--open': $setup.isPlanningExpanded }]),\n                \"aria-hidden\": \"true\"\n              }, _cache[21] || (_cache[21] = [\n                _createElementVNode(\"svg\", {\n                  width: \"14\",\n                  height: \"14\",\n                  viewBox: \"0 0 24 24\",\n                  fill: \"none\",\n                  stroke: \"currentColor\",\n                  \"stroke-width\": \"2.4\",\n                  \"stroke-linecap\": \"round\",\n                  \"stroke-linejoin\": \"round\"\n                }, [\n                  _createElementVNode(\"path\", { d: \"M6 9l6 6 6-6\" })\n                ], -1 /* CACHED */)\n              ]), 2 /* CLASS */)\n            ], 8 /* PROPS */, _hoisted_33)\n          ]),\n          _withDirectives(_createElementVNode(\"div\", _hoisted_34, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.listPreview, (item, idx) => {\n              return (_openBlock(), _createElementBlock(\"a\", {\n                key: item.location.id,\n                href: $setup.urlLocation(item.location.id),\n                class: _normalizeClass([\"home__loc\", { 'home__loc--primary': idx === 0 }])\n              }, [\n                _cache[24] || (_cache[24] = _createElementVNode(\"span\", {\n                  class: \"home__loc-icon\",\n                  \"aria-hidden\": \"true\"\n                }, [\n                  _createElementVNode(\"svg\", {\n                    width: \"22\",\n                    height: \"22\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"1.8\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\" }),\n                    _createElementVNode(\"circle\", {\n                      cx: \"12\",\n                      cy: \"10\",\n                      r: \"2.5\"\n                    })\n                  ])\n                ], -1 /* CACHED */)),\n                _createElementVNode(\"span\", _hoisted_36, [\n                  _createElementVNode(\"span\", _hoisted_37, _toDisplayString(item.location.companyName), 1 /* TEXT */),\n                  _createElementVNode(\"span\", _hoisted_38, [\n                    ($setup.ratingLabel(item.location.latestScore))\n                      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                          _createElementVNode(\"span\", {\n                            class: \"home__loc-live\",\n                            style: _normalizeStyle({ color: $setup.scoutColor(item.location.latestScore) })\n                          }, _toDisplayString($setup.ratingLabel(item.location.latestScore)), 5 /* TEXT, STYLE */),\n                          _cache[22] || (_cache[22] = _createElementVNode(\"span\", { \"aria-hidden\": \"true\" }, \"·\", -1 /* CACHED */))\n                        ], 64 /* STABLE_FRAGMENT */))\n                      : _createCommentVNode(\"v-if\", true),\n                    _createElementVNode(\"span\", null, _toDisplayString(item.location.city ?? item.location.address), 1 /* TEXT */)\n                  ])\n                ]),\n                (item.location.latestScore !== null)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_39, [\n                      _createElementVNode(\"span\", {\n                        class: \"home__loc-stat-value\",\n                        style: _normalizeStyle($setup.scoreStyle(item.location.latestScore))\n                      }, _toDisplayString(item.location.latestScore), 5 /* TEXT, STYLE */),\n                      _cache[23] || (_cache[23] = _createElementVNode(\"span\", { class: \"home__loc-stat-label\" }, \"AI-score\", -1 /* CACHED */))\n                    ]))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"span\", _hoisted_40, [\n                  _createElementVNode(\"span\", {\n                    class: \"home__loc-gauge-fill\",\n                    style: _normalizeStyle($setup.gaugeStyle(item.location.latestScore))\n                  }, null, 4 /* STYLE */)\n                ])\n              ], 10 /* CLASS, PROPS */, _hoisted_35))\n            }), 128 /* KEYED_FRAGMENT */)),\n            ($setup.listCount > $setup.listPreview.length)\n              ? (_openBlock(), _createElementBlock(\"a\", {\n                  key: 0,\n                  href: $setup.urlPlanning(),\n                  class: \"home__stack-more\"\n                }, [\n                  _createTextVNode(\" Toon alles (\" + _toDisplayString($setup.listCount) + \") \", 1 /* TEXT */),\n                  _cache[25] || (_cache[25] = _createElementVNode(\"svg\", {\n                    width: \"14\",\n                    height: \"14\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"2.4\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"M5 12h14M13 5l7 7-7 7\" })\n                  ], -1 /* CACHED */))\n                ], 8 /* PROPS */, _hoisted_41))\n              : _createCommentVNode(\"v-if\", true)\n          ], 512 /* NEED_PATCH */), [\n            [_vShow, $setup.isPlanningExpanded]\n          ])\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _createCommentVNode(\" ===== Locaties in de buurt (na GPS) ===== \"),\n    ($setup.geoState.kind === 'results')\n      ? (_openBlock(), _createElementBlock(\"section\", _hoisted_42, [\n          _createElementVNode(\"header\", _hoisted_43, [\n            _createElementVNode(\"div\", null, [\n              _createElementVNode(\"p\", _hoisted_44, _toDisplayString($setup.geoState.results.length) + \" dichtstbijzijnd\", 1 /* TEXT */),\n              _cache[26] || (_cache[26] = _createElementVNode(\"h2\", { class: \"home__sec-title\" }, \"In de buurt\", -1 /* CACHED */))\n            ])\n          ]),\n          _createElementVNode(\"div\", _hoisted_45, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.geoState.results, (loc) => {\n              return (_openBlock(), _createElementBlock(\"div\", {\n                key: loc.id,\n                class: \"home__loc home__loc--row\"\n              }, [\n                _createElementVNode(\"a\", {\n                  href: $setup.urlLocation(loc.id),\n                  class: \"home__loc-link\"\n                }, [\n                  _cache[29] || (_cache[29] = _createElementVNode(\"span\", {\n                    class: \"home__loc-icon\",\n                    \"aria-hidden\": \"true\"\n                  }, [\n                    _createElementVNode(\"svg\", {\n                      width: \"22\",\n                      height: \"22\",\n                      viewBox: \"0 0 24 24\",\n                      fill: \"none\",\n                      stroke: \"currentColor\",\n                      \"stroke-width\": \"1.8\",\n                      \"stroke-linecap\": \"round\",\n                      \"stroke-linejoin\": \"round\"\n                    }, [\n                      _createElementVNode(\"path\", { d: \"M12 22s7-7 7-12a7 7 0 1 0-14 0c0 5 7 12 7 12z\" }),\n                      _createElementVNode(\"circle\", {\n                        cx: \"12\",\n                        cy: \"10\",\n                        r: \"2.5\"\n                      })\n                    ])\n                  ], -1 /* CACHED */)),\n                  _createElementVNode(\"span\", _hoisted_47, [\n                    _createElementVNode(\"span\", _hoisted_48, _toDisplayString(loc.companyName), 1 /* TEXT */),\n                    _createElementVNode(\"span\", _hoisted_49, [\n                      ($setup.ratingLabel(loc.latestScore))\n                        ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                            _createElementVNode(\"span\", {\n                              class: \"home__loc-live\",\n                              style: _normalizeStyle({ color: $setup.scoutColor(loc.latestScore) })\n                            }, _toDisplayString($setup.ratingLabel(loc.latestScore)), 5 /* TEXT, STYLE */),\n                            _cache[27] || (_cache[27] = _createElementVNode(\"span\", { \"aria-hidden\": \"true\" }, \"·\", -1 /* CACHED */))\n                          ], 64 /* STABLE_FRAGMENT */))\n                        : _createCommentVNode(\"v-if\", true),\n                      _createElementVNode(\"span\", null, [\n                        _createTextVNode(_toDisplayString(loc.city ?? loc.address), 1 /* TEXT */),\n                        (loc.distanceMeters !== undefined)\n                          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                              _createTextVNode(\" · \" + _toDisplayString($setup.formatDistance(loc.distanceMeters)), 1 /* TEXT */)\n                            ], 64 /* STABLE_FRAGMENT */))\n                          : _createCommentVNode(\"v-if\", true)\n                      ])\n                    ])\n                  ]),\n                  (loc.latestScore !== null)\n                    ? (_openBlock(), _createElementBlock(\"span\", _hoisted_50, [\n                        _createElementVNode(\"span\", {\n                          class: \"home__loc-stat-value\",\n                          style: _normalizeStyle($setup.scoreStyle(loc.latestScore))\n                        }, _toDisplayString(loc.latestScore), 5 /* TEXT, STYLE */),\n                        _cache[28] || (_cache[28] = _createElementVNode(\"span\", { class: \"home__loc-stat-label\" }, \"AI-score\", -1 /* CACHED */))\n                      ]))\n                    : (_openBlock(), _createElementBlock(\"span\", _hoisted_51, \" Nog te analyseren \")),\n                  _createElementVNode(\"span\", _hoisted_52, [\n                    _createElementVNode(\"span\", {\n                      class: \"home__loc-gauge-fill\",\n                      style: _normalizeStyle($setup.gaugeStyle(loc.latestScore))\n                    }, null, 4 /* STYLE */)\n                  ])\n                ], 8 /* PROPS */, _hoisted_46),\n                _createElementVNode(\"span\", _hoisted_53, [\n                  _createVNode($setup[\"AddToListButton\"], { location: loc }, null, 8 /* PROPS */, [\"location\"])\n                ])\n              ]))\n            }), 128 /* KEYED_FRAGMENT */))\n          ])\n        ], 512 /* NEED_PATCH */))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.geoState.kind === 'empty')\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_54, \" Geen locaties in de buurt gevonden. Probeer hierboven een zoekterm. \"))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/HomeView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/HomeView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/HomeView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/HomeView.vue\";script.__scopeId = \"data-v-fc9ec1ab\";export default script;","<template>\n  <div class=\"planning\">\n    <header class=\"planning__header\">\n      <div class=\"planning__kicker\">Mijn planning</div>\n      <h1 class=\"planning__title\">\n        <template v-if=\"count === 0\">Nog geen locaties</template>\n        <template v-else-if=\"count === 1\">1 locatie te bezoeken</template>\n        <template v-else>{{ count }} locaties te bezoeken</template>\n      </h1>\n      <p class=\"planning__subtitle\">\n        <template v-if=\"count === 0\">\n          Voeg locaties toe vanuit het zoekscherm. Daarna kun je hier je\n          route plannen en ze één voor één afwerken.\n        </template>\n        <template v-else>\n          Werk de lijst van boven naar beneden af. Na het invullen van\n          feedback verdwijnt een locatie automatisch uit je planning.\n        </template>\n      </p>\n    </header>\n\n    <div class=\"planning__body\">\n      <div v-if=\"count === 0\" class=\"planning__empty\">\n        <span class=\"planning__empty-icon\" aria-hidden=\"true\">\n          <svg width=\"36\" height=\"36\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M9 11l3 3L22 4\"/>\n            <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"/>\n          </svg>\n        </span>\n        <h2>Lijst is leeg</h2>\n        <p>Begin met locaties zoeken en tik op <strong>+ In lijst</strong>.</p>\n        <a :href=\"urlHome()\" class=\"planning__empty-cta\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n            <path d=\"M21 21l-4.3-4.3\"/>\n          </svg>\n          Locaties zoeken\n        </a>\n      </div>\n\n      <template v-else>\n        <a v-if=\"firstItem\" :href=\"urlLocation(firstItem.location.id)\" class=\"planning__next\">\n          <div class=\"planning__next-meta\">Eerstvolgende</div>\n          <div class=\"planning__next-title\">\n            {{ firstItem.location.companyName }}\n          </div>\n          <div class=\"planning__next-address\">\n            {{ firstItem.location.address\n            }}<template v-if=\"firstItem.location.city\">, {{ firstItem.location.city }}</template>\n          </div>\n          <div class=\"planning__next-cta\">\n            <span>Open locatie</span>\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M5 12h14M13 5l7 7-7 7\"/>\n            </svg>\n          </div>\n        </a>\n\n        <p class=\"planning__hint\">\n          <svg width=\"13\" height=\"13\" viewBox=\"0 0 16 10\" fill=\"currentColor\" aria-hidden=\"true\">\n            <circle cx=\"4\" cy=\"2\" r=\"1.3\" /><circle cx=\"12\" cy=\"2\" r=\"1.3\" />\n            <circle cx=\"4\" cy=\"5\" r=\"1.3\" /><circle cx=\"12\" cy=\"5\" r=\"1.3\" />\n            <circle cx=\"4\" cy=\"8\" r=\"1.3\" /><circle cx=\"12\" cy=\"8\" r=\"1.3\" />\n          </svg>\n          Sleep een locatie om de volgorde te wijzigen (houd kort ingedrukt op mobiel).\n        </p>\n\n        <TransitionGroup\n          tag=\"ol\"\n          name=\"planning-flip\"\n          class=\"planning__list\"\n          :class=\"{ 'planning__list--dragging': dragId !== null }\"\n        >\n          <li\n            v-for=\"(item, idx) in displayList\"\n            :key=\"item.location.id\"\n            class=\"planning__item\"\n            :class=\"{ 'planning__item--dragging': dragId === item.location.id }\"\n            :style=\"dragStyle(item.location.id)\"\n            @pointerdown=\"onItemPointerDown($event, item.location.id)\"\n          >\n            <span class=\"planning__handle\" aria-hidden=\"true\">\n              <span class=\"planning__item-index\">{{ idx + 1 }}</span>\n            </span>\n\n            <a\n              :href=\"urlLocation(item.location.id)\"\n              class=\"planning__item-link\"\n              draggable=\"false\"\n              @dragstart.prevent\n              @click=\"onLinkClick\"\n            >\n              <div class=\"planning__item-body\">\n                <p class=\"planning__item-title\">{{ item.location.companyName }}</p>\n                <p class=\"planning__item-meta\">\n                  {{ item.location.address\n                  }}<template v-if=\"item.location.city\">, {{ item.location.city }}</template>\n                </p>\n              </div>\n              <div class=\"planning__item-aside\">\n                <span\n                  v-if=\"item.location.requiresHumanReview\"\n                  class=\"planning__item-review\"\n                  title=\"Review nodig\"\n                  aria-label=\"Review nodig\"\n                >⚠</span>\n                <span v-if=\"item.location.latestScore !== null\" class=\"planning__item-stat\">\n                  <span class=\"planning__item-stat-value\" :style=\"scoreStyle(item.location.latestScore)\">\n                    {{ item.location.latestScore }}\n                  </span>\n                  <span class=\"planning__item-stat-label\">AI-score</span>\n                </span>\n                <span v-else class=\"planning__item-pending\" aria-label=\"Nog niet geanalyseerd\">\n                  Nog te analyseren\n                </span>\n              </div>\n            </a>\n\n            <span class=\"planning__item-gauge\" aria-hidden=\"true\">\n              <span\n                class=\"planning__item-gauge-fill\"\n                :style=\"gaugeStyle(item.location.latestScore)\"\n              ></span>\n            </span>\n\n            <div class=\"planning__item-actions\">\n              <button\n                type=\"button\"\n                class=\"planning__icon-btn\"\n                :disabled=\"idx === 0\"\n                aria-label=\"Omhoog\"\n                title=\"Omhoog\"\n                @click=\"moveUp(item.location.id)\"\n              >\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                  <path d=\"m6 15 6-6 6 6\"/>\n                </svg>\n              </button>\n              <button\n                type=\"button\"\n                class=\"planning__icon-btn\"\n                :disabled=\"idx === displayList.length - 1\"\n                aria-label=\"Omlaag\"\n                title=\"Omlaag\"\n                @click=\"moveDown(item.location.id)\"\n              >\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                  <path d=\"m6 9 6 6 6-6\"/>\n                </svg>\n              </button>\n              <button\n                type=\"button\"\n                class=\"planning__icon-btn planning__icon-btn--danger\"\n                aria-label=\"Verwijder\"\n                title=\"Uit lijst\"\n                @click=\"askRemove(item.location.id, item.location.companyName)\"\n              >\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                  <path d=\"M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/>\n                </svg>\n              </button>\n            </div>\n          </li>\n        </TransitionGroup>\n\n        <div class=\"planning__footer-actions\">\n          <a :href=\"urlHome()\" class=\"planning__add-more\">+ Meer locaties zoeken</a>\n        </div>\n      </template>\n    </div>\n\n    <ConfirmDialog\n      v-model:open=\"removeDialogOpen\"\n      title=\"Locatie verwijderen?\"\n      confirm-label=\"Verwijderen\"\n      tone=\"danger\"\n      @confirm=\"confirmRemove\"\n    >\n      Weet je zeker dat je\n      <strong>{{ pendingRemove?.name ?? \"deze locatie\" }}</strong>\n      uit je planning wilt verwijderen?\n    </ConfirmDialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from \"vue\";\nimport ConfirmDialog from \"../components/ConfirmDialog.vue\";\nimport { usePersonalList, type PersonalListItem } from \"../lib/personalList\";\nimport { urlHome, urlLocation } from \"../lib/urls\";\nimport { scoutColor } from \"../lib/scoutScore\";\n\nconst { list, count, removeFromList, moveUp, moveDown, reorder } = usePersonalList();\n\nconst firstItem = computed(() => list.value[0] ?? null);\n\n// Lokale render-kopie van de lijst. Tijdens een sleep herschikken we deze live\n// (visuele feedback) zonder de server-state al te muteren; buiten een sleep\n// spiegelt hij `list`. De `dragId`-guard voorkomt dat een binnenkomende\n// server-update de sleep onderbreekt.\nconst displayList = ref<PersonalListItem[]>([...list.value]);\nwatch(\n  list,\n  (next) => {\n    if (dragId.value === null) displayList.value = [...next];\n  },\n  { deep: true },\n);\n\n// ---- Drag-to-reorder (hele rij oppakken; werkt op muis én touch) ----------\n// Het opgepakte item volgt de vinger via een translateY, terwijl de overige\n// items live van plek wisselen in `displayList`. Vue's <TransitionGroup>\n// animeert die verschuiving (FLIP). Op pointerup committen we de nieuwe volgorde.\n//\n// Gebaar-onderscheid (de rij is óók een link in een scrollbare lijst):\n//  - muis: oppakken zodra je verder dan MOVE_THRESHOLD beweegt (de muis scrolt\n//    niet, dus een drempel volstaat); een klik zonder beweging = locatie openen.\n//  - touch: oppakken na LONGPRESS_MS vasthouden; een snelle verticale veeg\n//    scrolt gewoon, een korte tik opent de locatie.\nconst LONGPRESS_MS = 220;\nconst MOVE_THRESHOLD = 6; // px muisbeweging voordat een sleep start\nconst SCROLL_THRESHOLD = 12; // px vingerbeweging tijdens de long-press = scrollen\n\nconst dragId = ref<number | null>(null);\nconst dragTranslate = ref(0);\n\nlet startPointerX = 0;\nlet startPointerY = 0;\nlet startIndex = 0;\nlet currentIndex = 0;\nlet slotHeight = 0;\nlet activePointerId: number | null = null;\nlet pendingLocationId: number | null = null;\nlet pendingItem: HTMLElement | null = null;\nlet pendingListEl: HTMLElement | null = null;\nlet pendingPointerType = \"\";\nlet longPressTimer: ReturnType<typeof setTimeout> | null = null;\nlet dragActive = false;\nlet suppressClick = false;\n\nfunction onItemPointerDown(event: PointerEvent, locationId: number) {\n  if (event.button !== undefined && event.button > 0) return; // alleen primaire knop\n  if (displayList.value.length < 2) return; // niets te herordenen\n  // Drags die op de actieknoppen (omhoog/omlaag/verwijder) starten negeren.\n  if ((event.target as HTMLElement).closest(\".planning__item-actions\")) return;\n\n  const item = event.currentTarget as HTMLElement;\n  const listEl = item.closest<HTMLElement>(\".planning__list\");\n  if (!listEl) return;\n\n  startPointerX = event.clientX;\n  startPointerY = event.clientY;\n  activePointerId = event.pointerId;\n  pendingPointerType = event.pointerType;\n  pendingLocationId = locationId;\n  pendingItem = item;\n  pendingListEl = listEl;\n  dragActive = false;\n\n  window.addEventListener(\"pointermove\", onPendingMove);\n  window.addEventListener(\"pointerup\", onPendingEnd);\n  window.addEventListener(\"pointercancel\", onPendingCancel);\n\n  if (event.pointerType !== \"mouse\") {\n    longPressTimer = setTimeout(() => {\n      longPressTimer = null;\n      activateDrag();\n    }, LONGPRESS_MS);\n  }\n}\n\nfunction activateDrag() {\n  if (pendingLocationId === null || !pendingItem || !pendingListEl) return;\n  const lis = Array.from(pendingListEl.querySelectorAll<HTMLElement>(\".planning__item\"));\n  slotHeight =\n    lis.length >= 2\n      ? lis[1].getBoundingClientRect().top - lis[0].getBoundingClientRect().top\n      : pendingItem.getBoundingClientRect().height + 8;\n  startIndex = displayList.value.findIndex((it) => it.location.id === pendingLocationId);\n  currentIndex = startIndex;\n  dragTranslate.value = 0;\n  dragActive = true;\n  dragId.value = pendingLocationId;\n  // Capture houdt de pointer bij de rij; de touchmove-blocker hieronder voorkomt\n  // dat de lijst scrollt zolang we slepen.\n  if (activePointerId !== null) {\n    try {\n      pendingItem.setPointerCapture(activePointerId);\n    } catch {\n      /* capture optioneel */\n    }\n  }\n  window.addEventListener(\"touchmove\", preventTouchScroll, { passive: false });\n}\n\nfunction onPendingMove(event: PointerEvent) {\n  if (event.pointerId !== activePointerId) return;\n\n  if (dragActive) {\n    event.preventDefault();\n    const delta = event.clientY - startPointerY;\n    const last = displayList.value.length - 1;\n    const target = Math.max(0, Math.min(last, startIndex + Math.round(delta / slotHeight)));\n    if (target !== currentIndex) {\n      const arr = displayList.value.slice();\n      const [moved] = arr.splice(currentIndex, 1);\n      arr.splice(target, 0, moved);\n      displayList.value = arr;\n      currentIndex = target;\n    }\n    dragTranslate.value = delta - (currentIndex - startIndex) * slotHeight;\n    return;\n  }\n\n  // Nog niet opgepakt: bepalen of dit een sleep (muis) of scroll (touch) wordt.\n  const dist = Math.hypot(event.clientX - startPointerX, event.clientY - startPointerY);\n  if (pendingPointerType === \"mouse\") {\n    if (dist > MOVE_THRESHOLD) {\n      startPointerY = event.clientY; // translate vanaf hier op 0 laten beginnen\n      activateDrag();\n    }\n  } else if (longPressTimer !== null && dist > SCROLL_THRESHOLD) {\n    // Vinger beweegt vóór de long-press → gebruiker wil scrollen, sleep afblazen.\n    cancelPending();\n  }\n}\n\nfunction onPendingEnd(event: PointerEvent) {\n  if (event.pointerId !== activePointerId) return;\n  const changed = dragActive && currentIndex !== startIndex;\n  if (dragActive) {\n    suppressClick = true; // onderdruk de link-navigatie na een sleep\n    try {\n      pendingItem?.releasePointerCapture(event.pointerId);\n    } catch {\n      /* al vrijgegeven */\n    }\n    window.setTimeout(() => {\n      suppressClick = false;\n    }, 350);\n  }\n  finishDrag();\n  if (changed) void reorder(displayList.value.map((it) => it.location.id));\n}\n\nfunction onPendingCancel(event: PointerEvent) {\n  if (event.pointerId !== activePointerId) return;\n  if (dragActive) displayList.value = [...list.value]; // gesleepte volgorde terugdraaien\n  finishDrag();\n}\n\nfunction preventTouchScroll(event: TouchEvent) {\n  if (dragActive) event.preventDefault();\n}\n\nfunction cancelPending() {\n  stopPendingListeners();\n  clearLongPress();\n  resetPending();\n}\n\nfunction finishDrag() {\n  stopPendingListeners();\n  clearLongPress();\n  window.removeEventListener(\"touchmove\", preventTouchScroll);\n  dragActive = false;\n  dragId.value = null;\n  dragTranslate.value = 0;\n  resetPending();\n}\n\nfunction clearLongPress() {\n  if (longPressTimer !== null) {\n    clearTimeout(longPressTimer);\n    longPressTimer = null;\n  }\n}\n\nfunction resetPending() {\n  activePointerId = null;\n  pendingLocationId = null;\n  pendingItem = null;\n  pendingListEl = null;\n  pendingPointerType = \"\";\n}\n\nfunction stopPendingListeners() {\n  window.removeEventListener(\"pointermove\", onPendingMove);\n  window.removeEventListener(\"pointerup\", onPendingEnd);\n  window.removeEventListener(\"pointercancel\", onPendingCancel);\n}\n\nfunction onLinkClick(event: MouseEvent) {\n  // Na een sleep mag de klik die de browser nog nastuurt niet navigeren.\n  if (suppressClick) {\n    event.preventDefault();\n    event.stopPropagation();\n    suppressClick = false;\n  }\n}\n\nonBeforeUnmount(() => {\n  stopPendingListeners();\n  clearLongPress();\n  window.removeEventListener(\"touchmove\", preventTouchScroll);\n});\n\nfunction dragStyle(locationId: number) {\n  if (locationId !== dragId.value) return undefined;\n  return {\n    transform: `translateY(${dragTranslate.value}px)`,\n    transition: \"none\",\n    zIndex: 5,\n  };\n}\n\nconst removeDialogOpen = ref(false);\nconst pendingRemove = ref<{ id: number; name: string } | null>(null);\n\nfunction askRemove(id: number, name: string) {\n  pendingRemove.value = { id, name };\n  removeDialogOpen.value = true;\n}\n\nfunction confirmRemove() {\n  if (pendingRemove.value) removeFromList(pendingRemove.value.id);\n  pendingRemove.value = null;\n}\n\n// Score color comes from the single scoutScore scale (same traffic-light as the\n// Verkennen map), so the planning list never disagrees with the map. See\n// lib/scoutScore.ts.\nfunction scoreStyle(score: number | null) {\n  return { color: scoutColor(score) };\n}\n\nfunction gaugeStyle(score: number | null) {\n  const pct = score === null ? 0 : Math.max(4, Math.min(100, score));\n  return { width: `${pct}%`, background: scoutColor(score) };\n}\n</script>\n\n<style scoped>\n.planning {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n}\n\n.planning__header {\n  padding: 20px 20px 16px;\n}\n.planning__kicker {\n  font-size: 11px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n.planning__title {\n  margin: 0;\n  font-size: 28px;\n  font-weight: 700;\n  letter-spacing: -0.025em;\n  color: var(--snl-fg);\n}\n.planning__subtitle {\n  margin: 8px 0 0 0;\n  font-size: 13.5px;\n  color: var(--snl-fg-muted);\n  line-height: 1.55;\n  max-width: 52ch;\n}\n\n.planning__body {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n  padding: 0 16px 32px;\n  flex: 1;\n}\n\n/* Empty state =================================================== */\n.planning__empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  text-align: center;\n  gap: 10px;\n  padding: 40px 24px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 24px;\n  background: var(--snl-surface);\n}\n.planning__empty-icon {\n  display: grid;\n  place-items: center;\n  width: 64px;\n  height: 64px;\n  border-radius: 99px;\n  background: var(--snl-mint-soft);\n  color: var(--snl-mint);\n  margin-bottom: 4px;\n}\n.planning__empty h2 {\n  margin: 0;\n  font-size: 18px;\n  font-weight: 700;\n  letter-spacing: -0.015em;\n  color: var(--snl-fg);\n}\n.planning__empty p {\n  margin: 0;\n  font-size: 13.5px;\n  color: var(--snl-fg-muted);\n  max-width: 38ch;\n  line-height: 1.55;\n}\n.planning__empty p strong { color: var(--snl-fg); }\n.planning__empty-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 10px;\n  height: 44px;\n  padding: 0 20px;\n  border-radius: 14px;\n  background: var(--snl-koraal);\n  color: #fff;\n  font-size: 14px;\n  font-weight: 600;\n  text-decoration: none;\n  box-shadow: 0 16px 32px -10px rgba(243, 108, 79, 0.55);\n  transition: transform 0.12s var(--ease-spring);\n}\n.planning__empty-cta:hover { transform: translateY(-1px); }\n\n/* \"Volgende locatie\" CTA ========================================= */\n.planning__next {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  padding: 18px 20px 16px;\n  border-radius: 22px;\n  background: linear-gradient(140deg, var(--snl-mint), var(--snl-deep));\n  color: var(--snl-ink);\n  text-decoration: none;\n  box-shadow: 0 24px 48px -16px rgba(143, 204, 177, 0.45);\n  transition: transform 0.12s var(--ease-spring), box-shadow 0.12s;\n  animation: snl-rise 0.3s var(--ease-spring);\n}\n.planning__next:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 28px 56px -16px rgba(143, 204, 177, 0.6);\n}\n.planning__next-meta {\n  font-size: 11px;\n  letter-spacing: 0.14em;\n  text-transform: uppercase;\n  font-weight: 700;\n  opacity: 0.65;\n}\n.planning__next-title {\n  font-size: 20px;\n  font-weight: 700;\n  letter-spacing: -0.02em;\n  line-height: 1.2;\n  margin-top: 2px;\n}\n.planning__next-address {\n  font-size: 13px;\n  opacity: 0.85;\n  line-height: 1.4;\n}\n.planning__next-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 8px;\n  font-size: 13px;\n  font-weight: 700;\n}\n\n/* List =========================================================== */\n.planning__list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n.planning__item {\n  position: relative;\n  display: flex;\n  align-items: stretch;\n  gap: 8px;\n  border: 1px solid var(--snl-line);\n  border-radius: 18px;\n  background: var(--snl-surface);\n  overflow: hidden;\n  cursor: grab; /* de hele rij is oppakbaar */\n  touch-action: pan-y; /* verticaal scrollen blijft werken; sleep via long-press */\n  transition: border-color 0.12s, background 0.12s;\n  animation: snl-rise 0.3s var(--ease-spring) both;\n}\n.planning__item:hover {\n  border-color: rgba(143, 204, 177, 0.35);\n  background: var(--snl-surface-2);\n}\n\n/* Sleep-handvat (visueel: positienummer + grip-puntjes) ========== */\n.planning__handle {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 5px;\n  flex-shrink: 0;\n  padding: 14px 6px 14px 12px;\n  color: var(--snl-fg-subtle);\n  -webkit-user-select: none;\n  user-select: none;\n}\n\n/* Sleep-status =================================================== */\n.planning__item--dragging {\n  cursor: grabbing;\n  border-color: var(--snl-mint);\n  background: var(--snl-surface-2);\n  box-shadow: 0 18px 40px -14px rgba(0, 0, 0, 0.55);\n}\n[data-theme=\"light\"] .planning__item--dragging {\n  box-shadow: 0 18px 40px -14px rgba(18, 23, 26, 0.28);\n}\n.planning__list--dragging,\n.planning__list--dragging .planning__item { cursor: grabbing; }\n/* Tijdens slepen geen tekstselectie en geen per-ongeluk link-hover. */\n.planning__list--dragging {\n  -webkit-user-select: none;\n  user-select: none;\n}\n.planning__list--dragging .planning__item-link { pointer-events: none; }\n\n/* FLIP-animatie voor herordenen (zowel slepen als de knoppen) */\n.planning-flip-move { transition: transform 0.22s var(--ease-out); }\n\n/* Sleep-hint boven de lijst ===================================== */\n.planning__hint {\n  display: flex;\n  align-items: center;\n  gap: 7px;\n  margin: 0 4px -2px;\n  font-size: 12px;\n  color: var(--snl-fg-subtle);\n}\n.planning__hint svg { flex-shrink: 0; opacity: 0.8; }\n\n.planning__item-link {\n  display: flex;\n  flex: 1;\n  min-width: 0;\n  align-items: center;\n  gap: 12px;\n  padding: 14px 8px 14px 4px;\n  text-decoration: none;\n  color: var(--snl-fg);\n  transition: transform 0.12s var(--ease-out);\n}\n.planning__item-link:active { transform: scale(0.99); }\n.planning__item-index {\n  display: grid;\n  place-items: center;\n  width: 32px;\n  height: 32px;\n  border-radius: 10px;\n  background: var(--snl-bg-deep);\n  color: var(--snl-fg-muted);\n  font-size: 13px;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n  flex-shrink: 0;\n}\n.planning__item-body { min-width: 0; flex: 1; }\n.planning__item-title {\n  margin: 0;\n  font-weight: 600;\n  font-size: 15px;\n  letter-spacing: -0.01em;\n  color: var(--snl-fg);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.planning__item-meta {\n  margin: 2px 0 0 0;\n  font-size: 12px;\n  color: var(--snl-fg-muted);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.planning__item-aside {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  gap: 4px;\n  flex-shrink: 0;\n}\n.planning__item-review {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 22px;\n  height: 22px;\n  border-radius: 99px;\n  background: rgba(242, 180, 65, 0.16);\n  color: var(--snl-golden);\n  font-size: 13px;\n  border: 1px solid rgba(242, 180, 65, 0.45);\n}\n.planning__item-stat {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  line-height: 1;\n}\n.planning__item-stat-value {\n  font-weight: 900;\n  font-size: 20px;\n  letter-spacing: -0.025em;\n  font-variant-numeric: tabular-nums;\n  color: var(--snl-fg);\n  line-height: 1;\n}\n.planning__item-stat-label {\n  font-size: 10.5px;\n  color: var(--snl-fg-muted);\n  letter-spacing: 0.04em;\n  margin-top: 2px;\n}\n.planning__item-pending {\n  font-size: 10.5px;\n  font-weight: 600;\n  color: var(--snl-fg-muted);\n  padding: 3px 9px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 99px;\n  white-space: nowrap;\n}\n.planning__item-gauge {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 3px;\n  background: rgba(255, 255, 255, 0.04);\n  pointer-events: none;\n}\n[data-theme=\"light\"] .planning__item-gauge { background: rgba(18, 23, 26, 0.05); }\n.planning__item-gauge-fill {\n  display: block;\n  height: 100%;\n  border-radius: 0 99px 99px 0;\n  transition: width 0.4s var(--ease-out);\n}\n\n.planning__item-actions {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  padding: 10px 12px 10px 4px;\n  flex-shrink: 0;\n}\n.planning__icon-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 36px;\n  height: 36px;\n  border: 1px solid var(--snl-line);\n  border-radius: 10px;\n  background: var(--snl-surface);\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n  touch-action: manipulation;\n  transition: background 0.12s, color 0.12s, border-color 0.12s;\n}\n.planning__icon-btn:hover:not(:disabled) {\n  background: var(--snl-surface-2);\n  color: var(--snl-fg);\n  border-color: var(--snl-line-strong);\n}\n.planning__icon-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n.planning__icon-btn--danger:hover:not(:disabled) {\n  background: var(--snl-koraal-soft);\n  color: var(--snl-koraal);\n  border-color: var(--snl-koraal);\n}\n\n/* Footer-acties ================================================== */\n.planning__footer-actions {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: 4px;\n  padding: 12px 4px 0;\n  border-top: 1px solid var(--snl-line);\n  flex-wrap: wrap;\n  gap: 8px;\n}\n.planning__add-more {\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--snl-mint);\n  text-decoration: none;\n  padding: 6px 0;\n}\n.planning__add-more:hover { text-decoration: underline; }\n</style>\n","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, normalizeStyle as _normalizeStyle, withModifiers as _withModifiers, normalizeClass as _normalizeClass, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createVNode as _createVNode, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"planning\" }\nconst _hoisted_2 = { class: \"planning__header\" }\nconst _hoisted_3 = { class: \"planning__title\" }\nconst _hoisted_4 = { class: \"planning__subtitle\" }\nconst _hoisted_5 = { class: \"planning__body\" }\nconst _hoisted_6 = {\n  key: 0,\n  class: \"planning__empty\"\n}\nconst _hoisted_7 = [\"href\"]\nconst _hoisted_8 = [\"href\"]\nconst _hoisted_9 = { class: \"planning__next-title\" }\nconst _hoisted_10 = { class: \"planning__next-address\" }\nconst _hoisted_11 = [\"onPointerdown\"]\nconst _hoisted_12 = {\n  class: \"planning__handle\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_13 = { class: \"planning__item-index\" }\nconst _hoisted_14 = [\"href\"]\nconst _hoisted_15 = { class: \"planning__item-body\" }\nconst _hoisted_16 = { class: \"planning__item-title\" }\nconst _hoisted_17 = { class: \"planning__item-meta\" }\nconst _hoisted_18 = { class: \"planning__item-aside\" }\nconst _hoisted_19 = {\n  key: 0,\n  class: \"planning__item-review\",\n  title: \"Review nodig\",\n  \"aria-label\": \"Review nodig\"\n}\nconst _hoisted_20 = {\n  key: 1,\n  class: \"planning__item-stat\"\n}\nconst _hoisted_21 = {\n  key: 2,\n  class: \"planning__item-pending\",\n  \"aria-label\": \"Nog niet geanalyseerd\"\n}\nconst _hoisted_22 = {\n  class: \"planning__item-gauge\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_23 = { class: \"planning__item-actions\" }\nconst _hoisted_24 = [\"disabled\", \"onClick\"]\nconst _hoisted_25 = [\"disabled\", \"onClick\"]\nconst _hoisted_26 = [\"onClick\"]\nconst _hoisted_27 = { class: \"planning__footer-actions\" }\nconst _hoisted_28 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _cache[2] || (_cache[2] = _createElementVNode(\"div\", { class: \"planning__kicker\" }, \"Mijn planning\", -1 /* CACHED */)),\n      _createElementVNode(\"h1\", _hoisted_3, [\n        ($setup.count === 0)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              _createTextVNode(\"Nog geen locaties\")\n            ], 64 /* STABLE_FRAGMENT */))\n          : ($setup.count === 1)\n            ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                _createTextVNode(\"1 locatie te bezoeken\")\n              ], 64 /* STABLE_FRAGMENT */))\n            : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                _createTextVNode(_toDisplayString($setup.count) + \" locaties te bezoeken\", 1 /* TEXT */)\n              ], 64 /* STABLE_FRAGMENT */))\n      ]),\n      _createElementVNode(\"p\", _hoisted_4, [\n        ($setup.count === 0)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              _createTextVNode(\" Voeg locaties toe vanuit het zoekscherm. Daarna kun je hier je route plannen en ze één voor één afwerken. \")\n            ], 64 /* STABLE_FRAGMENT */))\n          : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n              _createTextVNode(\" Werk de lijst van boven naar beneden af. Na het invullen van feedback verdwijnt een locatie automatisch uit je planning. \")\n            ], 64 /* STABLE_FRAGMENT */))\n      ])\n    ]),\n    _createElementVNode(\"div\", _hoisted_5, [\n      ($setup.count === 0)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n            _cache[4] || (_cache[4] = _createElementVNode(\"span\", {\n              class: \"planning__empty-icon\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"svg\", {\n                width: \"36\",\n                height: \"36\",\n                viewBox: \"0 0 24 24\",\n                fill: \"none\",\n                stroke: \"currentColor\",\n                \"stroke-width\": \"1.6\",\n                \"stroke-linecap\": \"round\",\n                \"stroke-linejoin\": \"round\"\n              }, [\n                _createElementVNode(\"path\", { d: \"M9 11l3 3L22 4\" }),\n                _createElementVNode(\"path\", { d: \"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" })\n              ])\n            ], -1 /* CACHED */)),\n            _cache[5] || (_cache[5] = _createElementVNode(\"h2\", null, \"Lijst is leeg\", -1 /* CACHED */)),\n            _cache[6] || (_cache[6] = _createElementVNode(\"p\", null, [\n              _createTextVNode(\"Begin met locaties zoeken en tik op \"),\n              _createElementVNode(\"strong\", null, \"+ In lijst\"),\n              _createTextVNode(\".\")\n            ], -1 /* CACHED */)),\n            _createElementVNode(\"a\", {\n              href: $setup.urlHome(),\n              class: \"planning__empty-cta\"\n            }, _cache[3] || (_cache[3] = [\n              _createElementVNode(\"svg\", {\n                width: \"16\",\n                height: \"16\",\n                viewBox: \"0 0 24 24\",\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(\"circle\", {\n                  cx: \"11\",\n                  cy: \"11\",\n                  r: \"7\"\n                }),\n                _createElementVNode(\"path\", { d: \"M21 21l-4.3-4.3\" })\n              ], -1 /* CACHED */),\n              _createTextVNode(\" Locaties zoeken \", -1 /* CACHED */)\n            ]), 8 /* PROPS */, _hoisted_7)\n          ]))\n        : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n            ($setup.firstItem)\n              ? (_openBlock(), _createElementBlock(\"a\", {\n                  key: 0,\n                  href: $setup.urlLocation($setup.firstItem.location.id),\n                  class: \"planning__next\"\n                }, [\n                  _cache[7] || (_cache[7] = _createElementVNode(\"div\", { class: \"planning__next-meta\" }, \"Eerstvolgende\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_9, _toDisplayString($setup.firstItem.location.companyName), 1 /* TEXT */),\n                  _createElementVNode(\"div\", _hoisted_10, [\n                    _createTextVNode(_toDisplayString($setup.firstItem.location.address), 1 /* TEXT */),\n                    ($setup.firstItem.location.city)\n                      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                          _createTextVNode(\", \" + _toDisplayString($setup.firstItem.location.city), 1 /* TEXT */)\n                        ], 64 /* STABLE_FRAGMENT */))\n                      : _createCommentVNode(\"v-if\", true)\n                  ]),\n                  _cache[8] || (_cache[8] = _createElementVNode(\"div\", { class: \"planning__next-cta\" }, [\n                    _createElementVNode(\"span\", null, \"Open locatie\"),\n                    _createElementVNode(\"svg\", {\n                      width: \"18\",\n                      height: \"18\",\n                      viewBox: \"0 0 24 24\",\n                      fill: \"none\",\n                      stroke: \"currentColor\",\n                      \"stroke-width\": \"2.4\",\n                      \"stroke-linecap\": \"round\",\n                      \"stroke-linejoin\": \"round\",\n                      \"aria-hidden\": \"true\"\n                    }, [\n                      _createElementVNode(\"path\", { d: \"M5 12h14M13 5l7 7-7 7\" })\n                    ])\n                  ], -1 /* CACHED */))\n                ], 8 /* PROPS */, _hoisted_8))\n              : _createCommentVNode(\"v-if\", true),\n            _cache[13] || (_cache[13] = _createStaticVNode(\"<p class=\\\"planning__hint\\\" data-v-69fd9686><svg width=\\\"13\\\" height=\\\"13\\\" viewBox=\\\"0 0 16 10\\\" fill=\\\"currentColor\\\" aria-hidden=\\\"true\\\" data-v-69fd9686><circle cx=\\\"4\\\" cy=\\\"2\\\" r=\\\"1.3\\\" data-v-69fd9686></circle><circle cx=\\\"12\\\" cy=\\\"2\\\" r=\\\"1.3\\\" data-v-69fd9686></circle><circle cx=\\\"4\\\" cy=\\\"5\\\" r=\\\"1.3\\\" data-v-69fd9686></circle><circle cx=\\\"12\\\" cy=\\\"5\\\" r=\\\"1.3\\\" data-v-69fd9686></circle><circle cx=\\\"4\\\" cy=\\\"8\\\" r=\\\"1.3\\\" data-v-69fd9686></circle><circle cx=\\\"12\\\" cy=\\\"8\\\" r=\\\"1.3\\\" data-v-69fd9686></circle></svg> Sleep een locatie om de volgorde te wijzigen (houd kort ingedrukt op mobiel). </p>\", 1)),\n            _createVNode(_TransitionGroup, {\n              tag: \"ol\",\n              name: \"planning-flip\",\n              class: _normalizeClass([\"planning__list\", { 'planning__list--dragging': $setup.dragId !== null }])\n            }, {\n              default: _withCtx(() => [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.displayList, (item, idx) => {\n                  return (_openBlock(), _createElementBlock(\"li\", {\n                    key: item.location.id,\n                    class: _normalizeClass([\"planning__item\", { 'planning__item--dragging': $setup.dragId === item.location.id }]),\n                    style: _normalizeStyle($setup.dragStyle(item.location.id)),\n                    onPointerdown: $event => ($setup.onItemPointerDown($event, item.location.id))\n                  }, [\n                    _createElementVNode(\"span\", _hoisted_12, [\n                      _createElementVNode(\"span\", _hoisted_13, _toDisplayString(idx + 1), 1 /* TEXT */)\n                    ]),\n                    _createElementVNode(\"a\", {\n                      href: $setup.urlLocation(item.location.id),\n                      class: \"planning__item-link\",\n                      draggable: \"false\",\n                      onDragstart: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"prevent\"])),\n                      onClick: $setup.onLinkClick\n                    }, [\n                      _createElementVNode(\"div\", _hoisted_15, [\n                        _createElementVNode(\"p\", _hoisted_16, _toDisplayString(item.location.companyName), 1 /* TEXT */),\n                        _createElementVNode(\"p\", _hoisted_17, [\n                          _createTextVNode(_toDisplayString(item.location.address), 1 /* TEXT */),\n                          (item.location.city)\n                            ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                _createTextVNode(\", \" + _toDisplayString(item.location.city), 1 /* TEXT */)\n                              ], 64 /* STABLE_FRAGMENT */))\n                            : _createCommentVNode(\"v-if\", true)\n                        ])\n                      ]),\n                      _createElementVNode(\"div\", _hoisted_18, [\n                        (item.location.requiresHumanReview)\n                          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_19, \"⚠\"))\n                          : _createCommentVNode(\"v-if\", true),\n                        (item.location.latestScore !== null)\n                          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_20, [\n                              _createElementVNode(\"span\", {\n                                class: \"planning__item-stat-value\",\n                                style: _normalizeStyle($setup.scoreStyle(item.location.latestScore))\n                              }, _toDisplayString(item.location.latestScore), 5 /* TEXT, STYLE */),\n                              _cache[9] || (_cache[9] = _createElementVNode(\"span\", { class: \"planning__item-stat-label\" }, \"AI-score\", -1 /* CACHED */))\n                            ]))\n                          : (_openBlock(), _createElementBlock(\"span\", _hoisted_21, \" Nog te analyseren \"))\n                      ])\n                    ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_14),\n                    _createElementVNode(\"span\", _hoisted_22, [\n                      _createElementVNode(\"span\", {\n                        class: \"planning__item-gauge-fill\",\n                        style: _normalizeStyle($setup.gaugeStyle(item.location.latestScore))\n                      }, null, 4 /* STYLE */)\n                    ]),\n                    _createElementVNode(\"div\", _hoisted_23, [\n                      _createElementVNode(\"button\", {\n                        type: \"button\",\n                        class: \"planning__icon-btn\",\n                        disabled: idx === 0,\n                        \"aria-label\": \"Omhoog\",\n                        title: \"Omhoog\",\n                        onClick: $event => ($setup.moveUp(item.location.id))\n                      }, _cache[10] || (_cache[10] = [\n                        _createElementVNode(\"svg\", {\n                          width: \"16\",\n                          height: \"16\",\n                          viewBox: \"0 0 24 24\",\n                          fill: \"none\",\n                          stroke: \"currentColor\",\n                          \"stroke-width\": \"2\",\n                          \"stroke-linecap\": \"round\",\n                          \"stroke-linejoin\": \"round\"\n                        }, [\n                          _createElementVNode(\"path\", { d: \"m6 15 6-6 6 6\" })\n                        ], -1 /* CACHED */)\n                      ]), 8 /* PROPS */, _hoisted_24),\n                      _createElementVNode(\"button\", {\n                        type: \"button\",\n                        class: \"planning__icon-btn\",\n                        disabled: idx === $setup.displayList.length - 1,\n                        \"aria-label\": \"Omlaag\",\n                        title: \"Omlaag\",\n                        onClick: $event => ($setup.moveDown(item.location.id))\n                      }, _cache[11] || (_cache[11] = [\n                        _createElementVNode(\"svg\", {\n                          width: \"16\",\n                          height: \"16\",\n                          viewBox: \"0 0 24 24\",\n                          fill: \"none\",\n                          stroke: \"currentColor\",\n                          \"stroke-width\": \"2\",\n                          \"stroke-linecap\": \"round\",\n                          \"stroke-linejoin\": \"round\"\n                        }, [\n                          _createElementVNode(\"path\", { d: \"m6 9 6 6 6-6\" })\n                        ], -1 /* CACHED */)\n                      ]), 8 /* PROPS */, _hoisted_25),\n                      _createElementVNode(\"button\", {\n                        type: \"button\",\n                        class: \"planning__icon-btn planning__icon-btn--danger\",\n                        \"aria-label\": \"Verwijder\",\n                        title: \"Uit lijst\",\n                        onClick: $event => ($setup.askRemove(item.location.id, item.location.companyName))\n                      }, _cache[12] || (_cache[12] = [\n                        _createElementVNode(\"svg\", {\n                          width: \"16\",\n                          height: \"16\",\n                          viewBox: \"0 0 24 24\",\n                          fill: \"none\",\n                          stroke: \"currentColor\",\n                          \"stroke-width\": \"2\",\n                          \"stroke-linecap\": \"round\",\n                          \"stroke-linejoin\": \"round\"\n                        }, [\n                          _createElementVNode(\"path\", { d: \"M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" })\n                        ], -1 /* CACHED */)\n                      ]), 8 /* PROPS */, _hoisted_26)\n                    ])\n                  ], 46 /* CLASS, STYLE, PROPS, NEED_HYDRATION */, _hoisted_11))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"class\"]),\n            _createElementVNode(\"div\", _hoisted_27, [\n              _createElementVNode(\"a\", {\n                href: $setup.urlHome(),\n                class: \"planning__add-more\"\n              }, \"+ Meer locaties zoeken\", 8 /* PROPS */, _hoisted_28)\n            ])\n          ], 64 /* STABLE_FRAGMENT */))\n    ]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.removeDialogOpen,\n      \"onUpdate:open\": _cache[1] || (_cache[1] = $event => (($setup.removeDialogOpen) = $event)),\n      title: \"Locatie verwijderen?\",\n      \"confirm-label\": \"Verwijderen\",\n      tone: \"danger\",\n      onConfirm: $setup.confirmRemove\n    }, {\n      default: _withCtx(() => [\n        _cache[14] || (_cache[14] = _createTextVNode(\" Weet je zeker dat je \", -1 /* CACHED */)),\n        _createElementVNode(\"strong\", null, _toDisplayString($setup.pendingRemove?.name ?? \"deze locatie\"), 1 /* TEXT */),\n        _cache[15] || (_cache[15] = _createTextVNode(\" uit je planning wilt verwijderen? \", -1 /* CACHED */))\n      ]),\n      _: 1 /* STABLE */,\n      __: [14,15]\n    }, 8 /* PROPS */, [\"open\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/MyListView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/MyListView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/MyListView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/MyListView.vue\";script.__scopeId = \"data-v-69fd9686\";export default script;","<template>\n  <VerkennenView\n    :map-overlay=\"lightMode || !comboEnabled ? null : overlay\"\n    :map-funnel-pins=\"lightMode || !comboEnabled ? null : funnelPins\"\n    :map-radii=\"lightMode || !comboEnabled ? null : radii\"\n    :custom-filter=\"lightMode || !comboEnabled ? null : comboFilter\"\n    :filters-collapsible=\"true\"\n    :preferred-region=\"preferredRegion\"\n    @locations-loaded=\"onLocationsLoaded\"\n    @funnel-popup-open=\"onFunnelPopupOpen\"\n    @funnel-popup-close=\"onFunnelPopupClose\"\n  >\n    <!-- Desktop: alle extra filters als pills in de toolbar — uniform met de\n         standaard Regio/Soort/Geschiktheid/Feedback-pills. In light mode (mobiel)\n         niet renderen: de combo-data is dan niet geladen. Vóór de andere pills\n         staat de master-toggle: één klik zet inwoners + radius + funnel\n         tegelijk uit/aan (zonder de per-filter-voorkeuren te wissen). -->\n    <template v-if=\"!lightMode\" #subnavExtras>\n      <ComboToggleFilterPill v-model=\"comboEnabled\" :hidden-count=\"hiddenByComboCount\" />\n      <div class=\"extras-group\" :class=\"{ 'extras-group--off': !comboEnabled }\" :aria-disabled=\"!comboEnabled\">\n        <InwonersFilterPill v-model=\"minInwoners\" />\n        <RadiusFilterPill\n          v-model=\"globalRadiusM\"\n          :override-count=\"overridesM.size\"\n          @reset-overrides=\"clearAllOverrides\"\n        />\n        <FunnelLegend\n          variant=\"pill\"\n          :stages-order=\"STAGES_ORDER\"\n          :stage-colors=\"STAGE_COLORS\"\n          :counts=\"funnelCounts\"\n          :visible-stages=\"visibleStages\"\n          :filtering-stages=\"filteringStages\"\n          @toggle-visible=\"toggleVisible\"\n          @toggle-filtering=\"toggleFiltering\"\n        />\n      </div>\n    </template>\n    <!-- Mobiel: dezelfde filters als inklapbare secties in het slide-in\n         FilterPanel. Zelfde refs/handlers als de desktop-pills, dus beide\n         blijven in sync. In light mode (mobiel) niet renderen: de combo-data is\n         dan niet geladen, dus deze secties zouden niet-functioneel zijn. -->\n    <template v-if=\"!lightMode\" #filterPanelExtras>\n      <ComboToggleFilterPill\n        v-model=\"comboEnabled\"\n        :hidden-count=\"hiddenByComboCount\"\n        variant=\"section\"\n      />\n      <div class=\"extras-group\" :class=\"{ 'extras-group--off': !comboEnabled }\" :aria-disabled=\"!comboEnabled\">\n        <AccordionSection title=\"Inwoners\" :summary=\"inwonersSummary\">\n          <InwonersFilterPill v-model=\"minInwoners\" variant=\"section\" />\n        </AccordionSection>\n        <AccordionSection title=\"Radius\" :summary=\"fmtKm(globalRadiusM)\">\n          <RadiusFilterPill\n            v-model=\"globalRadiusM\"\n            :override-count=\"overridesM.size\"\n            variant=\"section\"\n            @reset-overrides=\"clearAllOverrides\"\n          />\n        </AccordionSection>\n        <AccordionSection title=\"Sales funnel\" :summary=\"funnelSummary\">\n          <FunnelLegend\n            variant=\"section\"\n            :stages-order=\"STAGES_ORDER\"\n            :stage-colors=\"STAGE_COLORS\"\n            :counts=\"funnelCounts\"\n            :visible-stages=\"visibleStages\"\n            :filtering-stages=\"filteringStages\"\n            @toggle-visible=\"toggleVisible\"\n            @toggle-filtering=\"toggleFiltering\"\n          />\n        </AccordionSection>\n      </div>\n    </template>\n  </VerkennenView>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, watch } from \"vue\";\n\n// Route-level container voor de Verkennen-pagina. VerkennenView is de\n// herbruikbare presentational shell (lijst + kaart + de standaard filters);\n// deze container bezit de extra combo-state (inwoners / sales-funnel / radius)\n// en vult VerkennenView's slots + map-lagen. Houdt VerkennenView vrij van\n// CBS/funnel-kennis.\nimport VerkennenView from \"./VerkennenView.vue\";\nimport InwonersFilterPill from \"../components/InwonersFilterPill.vue\";\nimport RadiusFilterPill from \"../components/RadiusFilterPill.vue\";\nimport FunnelLegend from \"../components/FunnelLegend.vue\";\nimport AccordionSection from \"../components/AccordionSection.vue\";\nimport ComboToggleFilterPill from \"../components/ComboToggleFilterPill.vue\";\n\nimport { getFunnelLocations, getGemeenteGrenzen, getGemeenteInwoners, getMyPreferredRegions, setFunnelRadius, setFunnelGlobalRadius } from \"../lib/api\";\nimport { buildGemeenteIndex, type FeatureCollection, type GemeenteIndex } from \"../lib/scoutGemeente\";\nimport { buildInwonersIndex, type GemeenteInwoners, type InwonersIndex } from \"../lib/scoutInwoners\";\nimport {\n  STAGE_COLORS,\n  STAGES_ORDER,\n  type FunnelEntry,\n  type FunnelStage,\n} from \"../lib/scoutFunnel\";\nimport { computeBlockedSuggestionIds } from \"../lib/filterByRadius\";\nimport { shouldUseLightMap } from \"../lib/lightMap\";\nimport { loadFunnelPrefs, saveFunnelPrefs } from \"../lib/funnelPrefs\";\nimport { loadComboEnabled, saveComboEnabled } from \"../lib/comboToggle\";\nimport type { LocationSummary } from \"../lib/types\";\nimport type { ScoutMapOverlay, ScoutMapFunnelPin, ScoutMapRadius } from \"../components/ScoutMap.vue\";\n\n// ─── Light mode (mobiel) ─────────────────────────────────────────────────────\n// Eén keer bepaald bij paginaopening (géén resize-listener). Op mobiel zijn de\n// zware combo-lagen (gemeente-dim overlay ~342 polygons + ~339 funnel-pins +\n// radius-cirkels) te veel voor de WebView → de kaart crasht. In light mode laden\n// we die data niet en geven we niets zwaars door aan VerkennenView; die toont dan\n// alleen de klikbare analyse-markers + de standaard filters.\nconst lightMode = typeof window !== \"undefined\" && shouldUseLightMap(window.innerWidth);\n\n// ─── State ──────────────────────────────────────────────────────────────────\n// VerkennenView laadt de suggestie-locaties zelf en emit ze via\n// @locations-loaded — die hergebruiken we hier voor de gemeente-lookup + radius\n// (geen tweede listLocations-call).\nconst allLocations = ref<LocationSummary[]>([]);\nconst funnel = ref<FunnelEntry[]>([]);\nconst gemeenteIndex = ref<GemeenteIndex | null>(null);\nconst inwonersIndex = ref<InwonersIndex | null>(null);\n\n// Voorkeursregio (Account-instellingen). Wordt aan VerkennenView doorgegeven,\n// die 'm bij het openen van de kaart als Regio-filter toepast (mits de URL geen\n// regio meegaf). null = geen voorkeur / niet ingelogd.\nconst preferredRegion = ref<string | null>(null);\n\n// Gemeente-filter (inwoners-drempel). Per-gebruiker UI-voorkeur — net als de\n// funnel-toggles bewaard in localStorage zodat de keuze een reload overleeft.\n// Default 40.000 (matcht het oorspronkelijke prototype).\nconst INWONERS_KEY = \"statiegeldnl:feedback:verkennen-inwoners\";\nfunction readStoredInwoners(): number {\n  try {\n    const raw = localStorage.getItem(INWONERS_KEY);\n    const n = raw === null ? NaN : parseInt(raw, 10);\n    return Number.isFinite(n) && n >= 0 ? n : 40_000;\n  } catch {\n    return 40_000;\n  }\n}\nconst minInwoners = ref(readStoredInwoners());\nwatch(minInwoners, (v) => {\n  try {\n    localStorage.setItem(INWONERS_KEY, String(v));\n  } catch {\n    /* quota/denied — silent */\n  }\n});\n\n// Funnel defaults. Radius standaard op 1 km.\nconst globalRadiusM = ref(1000);\nconst overridesM = ref<Map<string, number>>(new Map());\n\n// Stage-toggles (welke stages zichtbaar zijn + welke als radius-filter\n// meewegen) zijn per-gebruiker UI-voorkeur — bewaard in localStorage zodat de\n// keuze een reload overleeft. Init uit de opslag (valt terug op de defaults:\n// alle stages zichtbaar, alleen \"Operationeel\" filtert).\nconst initialFunnelPrefs = loadFunnelPrefs();\nconst visibleStages = ref<Set<FunnelStage>>(new Set(initialFunnelPrefs.visible));\nconst filteringStages = ref<Set<FunnelStage>>(new Set(initialFunnelPrefs.filtering));\n\n// Schrijf de toggles terug zodra ze wijzigen. De toggle-handlers reassignen de\n// Set-refs (nieuwe Set), dus deze watch vuurt zonder `deep`. Lege selectie is\n// een geldige staat (alles uit) en wordt bewust óók opgeslagen.\nwatch([visibleStages, filteringStages], ([vis, filt]) => {\n  saveFunnelPrefs({ visible: [...vis], filtering: [...filt] });\n});\n\n// Master-toggle voor de combo-effects (inwoners + radius + funnel). Default\n// = true zodat bestaande users niets merken. Bij \"uit\" worden de vier combo-\n// props naar VerkennenView op null gezet (template-ternary) — de per-filter-\n// state blijft staan, dus \"aan\" herstelt de eerdere keuzes 1-op-1.\nconst comboEnabled = ref(loadComboEnabled());\nwatch(comboEnabled, (v) => saveComboEnabled(v));\n\nfunction onLocationsLoaded(locs: LocationSummary[]): void {\n  allLocations.value = locs;\n}\n\n// ─── Locatie → gemeentecode ──────────────────────────────────────────────────\n// Herberekend wanneer de locaties (emit) óf de gemeente-index (RPC) wijzigen —\n// beide vullen één keer, dus dit draait effectief één keer.\nconst codeByLocationId = computed((): Map<number, string | null> => {\n  const map = new Map<number, string | null>();\n  const idx = gemeenteIndex.value;\n  if (!idx) return map;\n  for (const loc of allLocations.value) {\n    if (loc.latitude === null || loc.longitude === null) {\n      map.set(loc.id, null);\n      continue;\n    }\n    map.set(loc.id, idx.lookup(loc.latitude, loc.longitude));\n  }\n  return map;\n});\n\n// ─── Derived: map-overlay (gemeente-dim) ────────────────────────────────────\nconst overlay = computed((): ScoutMapOverlay | null => {\n  if (!gemeenteIndex.value || !inwonersIndex.value) return null;\n  const threshold = minInwoners.value;\n  const inw = inwonersIndex.value;\n  const outCodes = new Set<string>();\n  for (const code of gemeenteIndex.value.codes()) {\n    const count = inw.get(code);\n    if (count === null || count < threshold) outCodes.add(code);\n  }\n  return { geojson: gemeenteIndex.value.geojson, outCodes };\n});\n\n// ─── Derived: funnel pins + radii ───────────────────────────────────────────\nconst funnelPins = computed((): ScoutMapFunnelPin[] => {\n  const pins: ScoutMapFunnelPin[] = [];\n  for (const f of funnel.value) {\n    if (f.lat === null || f.lng === null) continue;\n    if (!visibleStages.value.has(f.stage)) continue;\n    const isFilter = filteringStages.value.has(f.stage);\n    pins.push({\n      id: f.id,\n      lat: f.lat,\n      lng: f.lng,\n      color: STAGE_COLORS[f.stage],\n      isFilter,\n      popupHtml: buildPopupHtml(f, isFilter),\n    });\n  }\n  return pins;\n});\n\nconst radii = computed((): ScoutMapRadius[] => {\n  const out: ScoutMapRadius[] = [];\n  for (const f of funnel.value) {\n    if (f.lat === null || f.lng === null) continue;\n    if (!filteringStages.value.has(f.stage)) continue;\n    if (!visibleStages.value.has(f.stage)) continue;\n    const r = overridesM.value.get(f.id) ?? globalRadiusM.value;\n    if (r <= 0) continue;\n    out.push({\n      id: f.id,\n      lat: f.lat,\n      lng: f.lng,\n      radiusM: r,\n      color: STAGE_COLORS[f.stage],\n      isOverride: overridesM.value.has(f.id),\n    });\n  }\n  return out;\n});\n\nconst funnelCounts = computed((): Record<string, number> => {\n  const out: Record<string, number> = {};\n  for (const f of funnel.value) out[f.stage] = (out[f.stage] ?? 0) + 1;\n  return out;\n});\n\n// ─── Samenvattingen voor de ingeklapte AccordionSection-koppen ───────────────\nconst inwonersSummary = computed(() => `≥ ${minInwoners.value.toLocaleString(\"nl-NL\")}`);\nconst funnelSummary = computed(() => `${visibleStages.value.size}/${STAGES_ORDER.length} aan`);\n\n// ─── Combo-filter: inwoners + radius toepassen op de suggesties ─────────────\nconst blockedByRadius = computed((): Set<number> =>\n  computeBlockedSuggestionIds(\n    allLocations.value.map((l) => ({\n      id: l.id,\n      latitude: l.latitude,\n      longitude: l.longitude,\n    })),\n    funnel.value,\n    {\n      globalRadiusM: globalRadiusM.value,\n      overridesM: overridesM.value,\n      filteringStages: filteringStages.value,\n    },\n  ),\n);\n\nconst comboFilter = computed((): ((loc: LocationSummary) => boolean) => {\n  const outCodes = overlay.value?.outCodes ?? null;\n  const blocked = blockedByRadius.value;\n  const codes = codeByLocationId.value;\n  return (loc: LocationSummary): boolean => {\n    // Radius-uitsluiting: te dicht bij een filterende funnel-locatie.\n    if (blocked.has(loc.id)) return false;\n    // Inwoners-drempel: alleen filteren zodra de gemeente-index geladen is\n    // (outCodes === null tot dan). Geen gemeente-koppeling → ook verbergen.\n    if (outCodes) {\n      const code = codes.get(loc.id);\n      if (!code || outCodes.has(code)) return false;\n    }\n    return true;\n  };\n});\n\n// Aantal locaties uit de geladen suggestie-lijst dat ACTIEF door de combo-\n// filters wordt verborgen. Wordt naast de master-pill getoond (\"N verborgen\")\n// zodat een actief filter zichtbaar is en niet als missende data wordt\n// gelezen. Telt vóór de basis-filters (Regio/Soort/Geschiktheid/Feedback),\n// dus is het pure combo-effect — exact wat de toggle aan/uit zou laten zien.\nconst hiddenByComboCount = computed((): number => {\n  if (!comboEnabled.value) return 0;\n  const passes = comboFilter.value;\n  let n = 0;\n  for (const loc of allLocations.value) if (!passes(loc)) n++;\n  return n;\n});\n\n// ─── Popup-HTML + wiring ────────────────────────────────────────────────────\n// Teaser-metrics voor operationele containers. Statiegeld Nederland houdt\n// inname-totaal en uptime per container bij maar heeft het niet inzichtelijk;\n// dit dashboard kán ze tonen. We hebben de echte cijfers (nog) niet, dus tonen\n// we deterministische voorbeeldwaarden — stabiel per locatie (geen geflikker)\n// en duidelijk gelabeld als voorbeeld, om het gesprek te openen.\n// Uitgecommentarieerd op verzoek — we hebben het laten zien; wordt weer\n// relevant zodra SNL ervoor wil betalen.\n// function teaserMetrics(id: string): { innameTotaal: number; uptime: string } {\n//   let h = 0;\n//   for (let i = 0; i < id.length; i++) h = (h * 31 + id.charCodeAt(i)) >>> 0;\n//   const innameTotaal = 50_000 + (h % 250_000); // ~50k–300k ingenomen stuks\n//   const uptime = (97 + ((h >> 8) % 30) / 10).toFixed(1); // 97,0%–99,9%\n//   return { innameTotaal, uptime };\n// }\n\nfunction buildPopupHtml(f: FunnelEntry, isFilter: boolean): string {\n  const lines: string[] = [];\n  if (f.relatieName) lines.push(`<strong>${escapeHtml(f.relatieName)}</strong>`);\n  const addr = [f.straatHuisnr, [f.postcode, f.plaats].filter(Boolean).join(\" \")]\n    .filter(Boolean)\n    .join(\", \");\n  if (addr) lines.push(`<div class=\"combo-popup__addr\">${escapeHtml(addr)}</div>`);\n  lines.push(\n    `<div class=\"combo-popup__stage\" style=\"--c:${STAGE_COLORS[f.stage]}\"><span></span>${escapeHtml(f.stage)}</div>`,\n  );\n  if (f.branche) lines.push(`<div class=\"combo-popup__meta\">Branche: ${escapeHtml(f.branche)}</div>`);\n  if (f.rvmType) lines.push(`<div class=\"combo-popup__meta\">RVM: ${escapeHtml(f.rvmType)}</div>`);\n  if (f.accountManager)\n    lines.push(`<div class=\"combo-popup__meta\">AM: ${escapeHtml(f.accountManager)}</div>`);\n\n  // Teaser-metrics (inname-totaal + uptime) uitgecommentarieerd op verzoek —\n  // we hebben het laten zien; wordt weer relevant zodra SNL ervoor wil betalen.\n  // if (f.stage === \"Operationeel\") {\n  //   const m = teaserMetrics(f.id);\n  //   lines.push(`\n  //     <div class=\"combo-popup__teaser\">\n  //       <div class=\"combo-popup__teaser-row\">\n  //         <span>Inname totaal</span><strong>${m.innameTotaal.toLocaleString(\"nl-NL\")} stuks</strong>\n  //       </div>\n  //       <div class=\"combo-popup__teaser-row\">\n  //         <span>Uptime</span><strong>${m.uptime.replace(\".\", \",\")}%</strong>\n  //       </div>\n  //       <div class=\"combo-popup__teaser-note\">voorbeeld — uit SNL-data</div>\n  //     </div>\n  //   `);\n  // }\n\n  if (isFilter) {\n    // Bewust GEEN overridesM/globalRadiusM hier inlezen: dat zou de funnelPins-\n    // computed laten herberekenen bij elke slider-tick → ScoutMap herbouwt de\n    // funnel-laag → de open popup verdwijnt. De radius-sectie wordt daarom leeg\n    // gerenderd en bij popup-open imperatief gevuld (zie onFunnelPopupOpen).\n    lines.push(`\n      <div class=\"combo-popup__radius\">\n        <label>\n          <span>Radius voor deze locatie</span>\n          <strong data-radius-label></strong>\n        </label>\n        <input type=\"range\" min=\"0\" max=\"20000\" step=\"500\" data-radius-input />\n        <div class=\"combo-popup__radius-meta\" data-radius-meta></div>\n      </div>\n    `);\n  }\n  return lines.join(\"\");\n}\n\nconst popupCleanup = new Map<string, () => void>();\n\n// De radius-sectie wordt imperatief beheerd (niet via de reactieve popupHtml),\n// zodat slepen geen funnelPins-recompute triggert die de popup zou slopen. We\n// lezen/schrijven overridesM hier direct vanuit DOM-handlers.\nfunction onFunnelPopupOpen(id: string, popupEl: HTMLElement): void {\n  const input = popupEl.querySelector<HTMLInputElement>(\"[data-radius-input]\");\n  const label = popupEl.querySelector<HTMLElement>(\"[data-radius-label]\");\n  const meta = popupEl.querySelector<HTMLElement>(\"[data-radius-meta]\");\n  if (!input) return; // niet-filterende pin: geen radius-sectie\n\n  const onClear = (): void => {\n    const next = new Map(overridesM.value);\n    next.delete(id);\n    overridesM.value = next;\n    void persistRadius(id, null); // wis de gedeelde override op de server\n    paint(); // reset slider + label naar globaal\n  };\n\n  // Vult de meta-regel (\"Volgt globaal\" / \"Override actief — terug naar globaal\")\n  // en (her)bindt de reset-knop. Wordt elke keer dat de override-staat kan\n  // wijzigen opnieuw gerenderd; oude listeners sterven met de oude innerHTML.\n  function renderMeta(): void {\n    if (!meta) return;\n    const isOverride = overridesM.value.has(id);\n    meta.innerHTML = isOverride\n      ? `Override actief — <button type=\"button\" data-clear-override>terug naar globaal (${fmtKm(globalRadiusM.value)})</button>`\n      : `Volgt globaal (${fmtKm(globalRadiusM.value)})`;\n    meta.querySelector<HTMLButtonElement>(\"[data-clear-override]\")?.addEventListener(\"click\", onClear);\n  }\n\n  // Volledige (her)teken: slider-waarde + label + meta vanuit de huidige staat.\n  function paint(): void {\n    const override = overridesM.value.get(id);\n    const value = override ?? globalRadiusM.value;\n    if (input) input.value = String(value);\n    if (label) label.textContent = fmtKm(value);\n    renderMeta();\n  }\n\n  const onInput = (): void => {\n    const v = parseInt(input.value, 10);\n    if (label) label.textContent = fmtKm(v);\n    const next = new Map(overridesM.value);\n    next.set(id, v);\n    overridesM.value = next;\n    renderMeta(); // flip \"Volgt globaal\" → \"Override actief\"\n    debounceSave(`radius:${id}`, () => void persistRadius(id, v)); // gedeeld opslaan\n  };\n\n  input.addEventListener(\"input\", onInput);\n  paint();\n  popupCleanup.set(id, () => {\n    input.removeEventListener(\"input\", onInput);\n  });\n}\n\nfunction onFunnelPopupClose(id: string): void {\n  popupCleanup.get(id)?.();\n  popupCleanup.delete(id);\n}\n\n// ─── Stage-toggles ──────────────────────────────────────────────────────────\nfunction toggleVisible(stage: string): void {\n  const s = stage as FunnelStage;\n  const next = new Set(visibleStages.value);\n  if (next.has(s)) next.delete(s);\n  else next.add(s);\n  visibleStages.value = next;\n}\n\nfunction toggleFiltering(stage: string): void {\n  const s = stage as FunnelStage;\n  const next = new Set(filteringStages.value);\n  if (next.has(s)) next.delete(s);\n  else next.add(s);\n  filteringStages.value = next;\n}\n\nfunction clearAllOverrides(): void {\n  // Wis alle gedeelde overrides — eerst optimistisch lokaal, dan per slug op de server.\n  const slugs = [...overridesM.value.keys()];\n  overridesM.value = new Map();\n  for (const slug of slugs) void persistRadius(slug, null);\n}\n\n// ─── Persistentie (gedeelde radius) ──────────────────────────────────────────\n// De radius is gedeelde data: per-apparaat overrides + de globale default leven\n// in WRD. We schrijven optimistisch (lokale state is al bijgewerkt) en\n// best-effort (een mislukte write logt, blokkeert niet). Globale slider en\n// per-apparaat slider zijn gedebounced zodat slepen niet elke tick een RPC doet.\nlet hydrated = false;\nconst saveTimers = new Map<string, number>();\n\nfunction debounceSave(key: string, fn: () => void, ms = 500): void {\n  const prev = saveTimers.get(key);\n  if (prev) window.clearTimeout(prev);\n  saveTimers.set(key, window.setTimeout(() => { saveTimers.delete(key); fn(); }, ms));\n}\n\nasync function persistGlobalRadius(v: number): Promise<void> {\n  try {\n    await setFunnelGlobalRadius(v);\n  } catch (err) {\n    console.error(\"VerkennenContainer: globale radius opslaan mislukt:\", err);\n  }\n}\n\nasync function persistRadius(slug: string, radiusM: number | null): Promise<void> {\n  try {\n    await setFunnelRadius(slug, radiusM);\n  } catch (err) {\n    console.error(`VerkennenContainer: radius opslaan mislukt voor '${slug}':`, err);\n  }\n}\n\n// Globale slider → gedebounced opslaan. Skip tijdens hydratatie (zie onMounted)\n// zodat het inladen van de server-waarde niet meteen teruggeschreven wordt.\nwatch(globalRadiusM, (v) => {\n  if (!hydrated) return;\n  debounceSave(\"__global__\", () => void persistGlobalRadius(v));\n});\n\n// ─── Helpers + lifecycle ────────────────────────────────────────────────────\nfunction fmtKm(meters: number): string {\n  const km = meters / 1000;\n  if (km === 0) return \"0 km\";\n  return km >= 10 ? `${km.toFixed(0)} km` : `${km.toFixed(1)} km`;\n}\n\nfunction escapeHtml(s: string): string {\n  return s\n    .replace(/&/g, \"&amp;\")\n    .replace(/</g, \"&lt;\")\n    .replace(/>/g, \"&gt;\")\n    .replace(/\"/g, \"&quot;\");\n}\n\nonMounted(async () => {\n  // Voorkeursregio ALTIJD ophalen — ook in light mode (mobiel), zodat de kaart\n  // óók daar op de ingestelde regio opent. Best-effort: bij niet-ingelogd /\n  // falen blijft preferredRegion null en wordt er niets voorgeselecteerd.\n  try {\n    const { regions } = await getMyPreferredRegions();\n    preferredRegion.value = regions.length > 0 ? regions[0] : null;\n  } catch (err) {\n    console.error(\"VerkennenContainer: voorkeursregio laden mislukt:\", err);\n  }\n\n  // Light mode (mobiel): de zware combo-data niet ophalen of indexeren. Zonder\n  // deze datasets blijven gemeenteIndex/inwonersIndex null en funnel leeg, dus de\n  // afgeleide overlay/funnelPins/radii produceren vanzelf niets (zelfde\n  // graceful-degradation als de catch hieronder). VerkennenView valt terug op de\n  // gewone markers + filters.\n  if (lightMode) return;\n  try {\n    const [fnl, grenzen, inw] = await Promise.all([\n      getFunnelLocations(),\n      getGemeenteGrenzen(),\n      getGemeenteInwoners(),\n    ]);\n    const entries = fnl.entries as FunnelEntry[];\n    funnel.value = entries;\n    // Init de gedeelde radius-state uit WRD: globale default + per-apparaat overrides.\n    globalRadiusM.value = fnl.globalRadiusM ?? 1000;\n    const overrides = new Map<string, number>();\n    for (const e of entries) {\n      if (e.radiusOverride !== null && e.radiusOverride !== undefined) overrides.set(e.id, e.radiusOverride);\n    }\n    overridesM.value = overrides;\n    gemeenteIndex.value = buildGemeenteIndex(grenzen.geojson as FeatureCollection);\n    inwonersIndex.value = buildInwonersIndex(inw.rows as GemeenteInwoners[]);\n    // Laat de globale-radius-watcher eerst leeglopen (met hydrated=false → geen\n    // write), pas daarna echte gebruikerswijzigingen persisteren.\n    await nextTick();\n    hydrated = true;\n  } catch (err) {\n    // Best-effort: zonder deze datasets valt de view terug op de gewone\n    // Verkennen-kaart (geen overlay/pins/radius) — niet blokkerend.\n    console.error(\"VerkennenContainer: combo-data laden mislukt:\", err);\n  }\n});\n</script>\n\n<!-- Scoped: alleen voor de extras-groep-wikkel in onze eigen slots. -->\n<style scoped>\n/* Groepeert de drie extra filters zodat de master-toggle ze met één class kan\n   \"uitschakelen\". `pointer-events: none` blokkeert klikken/openen van pills en\n   accordions; de waarden blijven visueel leesbaar (gedimd) en re-aan zet alles\n   1-op-1 terug — bewust GEEN harde `disabled` op de inputs zodat de\n   keuze-staat behouden blijft. Bovenliggende .subnav__extras is `display:flex;\n   flex-wrap:wrap; gap:12px` — we spiegelen die gap zodat de wrapper visueel\n   onzichtbaar is t.o.v. losse pills. */\n.extras-group {\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: 12px;\n  transition: opacity 0.2s ease;\n}\n.extras-group--off {\n  opacity: 0.5;\n  pointer-events: none;\n}\n/* Mobiel: het FilterPanel stapelt secties verticaal — laat de wrapper dat\n   gedrag overnemen. */\n@media (max-width: 959px) {\n  .extras-group {\n    flex-direction: column;\n    align-items: stretch;\n    gap: 4px;\n  }\n}\n</style>\n\n<!-- Niet scoped: Leaflet injecteert de funnel-popups buiten de scoped DOM. -->\n<style>\n.scoutmap-fnl-popup .combo-popup__addr {\n  color: var(--snl-fg-muted);\n  font-size: 12px;\n  margin-top: 2px;\n}\n.scoutmap-fnl-popup .combo-popup__stage {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  margin-top: 8px;\n  padding: 2px 8px;\n  border-radius: 999px;\n  border: 1px solid var(--c);\n  color: var(--c);\n  font-size: 11px;\n  letter-spacing: 0.02em;\n  text-transform: uppercase;\n}\n.scoutmap-fnl-popup .combo-popup__stage span {\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: var(--c);\n}\n.scoutmap-fnl-popup .combo-popup__meta {\n  color: var(--snl-fg-muted);\n  font-size: 12px;\n  margin-top: 4px;\n}\n.scoutmap-fnl-popup .combo-popup__teaser {\n  margin-top: 10px;\n  padding: 8px 10px;\n  border-radius: 8px;\n  border: 1px solid color-mix(in srgb, var(--snl-mint) 45%, transparent);\n  background: color-mix(in srgb, var(--snl-mint) 12%, transparent);\n}\n.scoutmap-fnl-popup .combo-popup__teaser-row {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: 12px;\n  font-size: 12px;\n  color: var(--snl-fg-muted);\n}\n.scoutmap-fnl-popup .combo-popup__teaser-row + .combo-popup__teaser-row {\n  margin-top: 3px;\n}\n.scoutmap-fnl-popup .combo-popup__teaser-row strong {\n  color: var(--snl-fg);\n  font-weight: 600;\n  font-variant-numeric: tabular-nums;\n}\n.scoutmap-fnl-popup .combo-popup__teaser-note {\n  margin-top: 6px;\n  font-size: 10px;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: color-mix(in srgb, var(--snl-mint) 80%, var(--snl-fg-muted));\n}\n.scoutmap-fnl-popup .combo-popup__radius {\n  margin-top: 12px;\n  padding-top: 10px;\n  border-top: 1px solid var(--snl-line);\n}\n.scoutmap-fnl-popup .combo-popup__radius label {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  font-size: 12px;\n  color: var(--snl-fg-muted);\n  margin-bottom: 6px;\n}\n.scoutmap-fnl-popup .combo-popup__radius label strong {\n  color: var(--snl-fg);\n  font-weight: 600;\n}\n.scoutmap-fnl-popup .combo-popup__radius input[type=\"range\"] {\n  width: 100%;\n  accent-color: var(--snl-mint);\n  cursor: pointer;\n}\n.scoutmap-fnl-popup .combo-popup__radius-meta {\n  margin-top: 6px;\n  font-size: 11px;\n  color: var(--snl-fg-muted);\n}\n.scoutmap-fnl-popup .combo-popup__radius-meta button {\n  background: none;\n  border: 0;\n  padding: 0;\n  color: var(--snl-mint);\n  cursor: pointer;\n  text-decoration: underline;\n  font: inherit;\n}\n</style>\n","<template>\n  <div class=\"verkennen-wrap\">\n    <!-- ===== Sub-toolbar: regio + soort + geschiktheid + feedback + count + zoeken ===== -->\n    <div class=\"subnav\">\n      <!-- Alle filter-pills in één wrappende groep. Bij krappe (maar nog niet-\n           mobiele) breedtes wrappen ze naar een tweede regel i.p.v. buiten beeld\n           te vallen. Bewust géén overflow-x:auto — dat zou overflow-y forceren\n           en de dropdown-menu's afkappen. -->\n      <div class=\"subnav__filters\">\n      <div class=\"regionmenu\" @focusout=\"onRegionBlur\">\n        <button class=\"regionmenu__btn\" type=\"button\" @click=\"regionOpen = !regionOpen\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\"/>\n            <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n          </svg>\n          <span class=\"regionmenu__lbl\">Regio</span>\n          <span class=\"regionmenu__val\">{{ region }}</span>\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"m6 9 6 6 6-6\"/>\n          </svg>\n        </button>\n        <div v-if=\"regionOpen\" class=\"regionmenu__pop\">\n          <button\n            v-for=\"r in regionOptions\"\n            :key=\"r\"\n            type=\"button\"\n            class=\"regionmenu__item\"\n            :class=\"{ 'is-on': r === region }\"\n            @mousedown.prevent=\"selectRegion(r)\"\n          >\n            {{ r }}\n            <svg v-if=\"r === region\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M5 13l4 4L19 7\"/>\n            </svg>\n          </button>\n        </div>\n      </div>\n\n      <!-- \"Soort\" filter — a single-select twin of the Regio dropdown above.\n           Reuses the regionmenu classes (identical styling) on purpose. -->\n      <div class=\"regionmenu\" @focusout=\"onCategoryBlur\">\n        <button class=\"regionmenu__btn\" type=\"button\" @click=\"categoryOpen = !categoryOpen\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M20.59 13.41 13.42 20.6a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82Z\"/>\n            <circle cx=\"7\" cy=\"7\" r=\"1.2\"/>\n          </svg>\n          <span class=\"regionmenu__lbl\">Soort</span>\n          <span class=\"regionmenu__val\">{{ categoryValueLabel }}</span>\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"m6 9 6 6 6-6\"/>\n          </svg>\n        </button>\n        <div v-if=\"categoryOpen\" class=\"regionmenu__pop\">\n          <button\n            v-for=\"c in categoryOptions\"\n            :key=\"c\"\n            type=\"button\"\n            class=\"regionmenu__item\"\n            :class=\"{ 'is-on': isCategoryOn(c) }\"\n            @mousedown.prevent=\"toggleCategory(c)\"\n          >\n            {{ typeLabel(c) }}\n            <svg v-if=\"isCategoryOn(c)\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M5 13l4 4L19 7\"/>\n            </svg>\n          </button>\n        </div>\n      </div>\n\n      <!-- \"Geschiktheid\" — multi-select on the four AI-score levels. \"Alle\n           geschiktheden\" at the top is a master that ticks/unticks all four;\n           below it the four levels toggle individually. There is no separate\n           \"Zonder analyse\" row: unticking every level (empty selection) shows the\n           without-analysis locations. -->\n      <div class=\"regionmenu\" @focusout=\"onBucketBlur\">\n        <button class=\"regionmenu__btn\" type=\"button\" @click=\"bucketOpen = !bucketOpen\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M3 3v18h18\"/><path d=\"M7 16v-5M12 16V8M17 16v-9\"/>\n          </svg>\n          <span class=\"regionmenu__lbl\">Geschiktheid</span>\n          <span class=\"regionmenu__val\">{{ bucketValueLabel }}</span>\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"m6 9 6 6 6-6\"/>\n          </svg>\n        </button>\n        <div v-if=\"bucketOpen\" class=\"regionmenu__pop\">\n          <button type=\"button\" class=\"regionmenu__item\" :class=\"{ 'is-on': isAllBucketsOn }\" @mousedown.prevent=\"toggleAllBuckets\">\n            <span class=\"regionmenu__itemlbl\">Alle geschiktheden</span>\n            <svg v-if=\"isAllBucketsOn\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M5 13l4 4L19 7\"/>\n            </svg>\n          </button>\n          <div class=\"regionmenu__sep\"></div>\n          <button\n            v-for=\"b in SCORED_BUCKET_OPTIONS\"\n            :key=\"b.id\"\n            type=\"button\"\n            class=\"regionmenu__item\"\n            :class=\"{ 'is-on': isBucketOn(b.id) }\"\n            @mousedown.prevent=\"toggleBucket(b.id)\"\n          >\n            <span class=\"regionmenu__itemlbl\">{{ b.label }}<span v-if=\"b.hint\" class=\"regionmenu__hint\">{{ b.hint }}</span></span>\n            <svg v-if=\"isBucketOn(b.id)\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M5 13l4 4L19 7\"/>\n            </svg>\n          </button>\n        </div>\n      </div>\n\n      <!-- \"Feedback\" — single-select on whether any field feedback exists for the\n           location (from any user). Replaces the two feedback chips. -->\n      <div class=\"regionmenu\" @focusout=\"onFeedbackBlur\">\n        <button class=\"regionmenu__btn\" type=\"button\" @click=\"feedbackOpen = !feedbackOpen\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M21 11.5a8.38 8.38 0 0 1-8.5 8.5 8.5 8.5 0 0 1-3.8-.9L3 21l1.9-5.7a8.5 8.5 0 0 1-.9-3.8A8.38 8.38 0 0 1 12.5 3a8.38 8.38 0 0 1 8.5 8.5Z\"/>\n          </svg>\n          <span class=\"regionmenu__lbl\">Feedback</span>\n          <span class=\"regionmenu__val\">{{ feedbackValueLabel }}</span>\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"m6 9 6 6 6-6\"/>\n          </svg>\n        </button>\n        <div v-if=\"feedbackOpen\" class=\"regionmenu__pop\">\n          <button\n            v-for=\"f in FEEDBACK_OPTIONS\"\n            :key=\"f.id\"\n            type=\"button\"\n            class=\"regionmenu__item\"\n            :class=\"{ 'is-on': feedbackFilter === f.id }\"\n            @mousedown.prevent=\"selectFeedback(f.id)\"\n          >\n            {{ f.label }}\n            <svg v-if=\"feedbackFilter === f.id\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M5 13l4 4L19 7\"/>\n            </svg>\n          </button>\n        </div>\n      </div>\n\n      <!-- Optionele extra controls (bv. radius/inwoners-pills in een combo-view).\n           Krijgen via flex-basis:100% altijd hun eigen regel ónder de standaard\n           Regio/Soort/Geschiktheid/Feedback-pills (niet pas bij krappe breedte).\n           Alleen gerenderd als de slot gevuld is, zodat de live PWA zonder extras\n           geen lege tweede regel krijgt. Op mobiel zit de subnav `display: none`,\n           dus dit is desktop-only — het mobiele equivalent zit in FilterPanel. -->\n        <div v-if=\"$slots.subnavExtras\" class=\"subnav__extras\">\n          <slot name=\"subnavExtras\" />\n        </div>\n      </div>\n\n      <div class=\"subnav__count\">\n        <b>{{ filtered.length }}</b> {{ filtered.length === 1 ? \"locatie\" : \"locaties\" }}\n      </div>\n\n      <label class=\"subnav__search\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"rgba(255,255,255,0.45)\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n          <path d=\"m20 20-3.5-3.5\"/>\n        </svg>\n        <input\n          v-model=\"query\"\n          type=\"search\"\n          placeholder=\"Zoek bedrijfsnaam, stad of adres…\"\n          aria-label=\"Zoek locatie\"\n        />\n        <button\n          v-if=\"query\"\n          type=\"button\"\n          class=\"subnav__searchclear\"\n          aria-label=\"Wis zoekterm\"\n          @click=\"query = ''\"\n        >\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M18 6 6 18M6 6l12 12\"/>\n          </svg>\n        </button>\n      </label>\n\n      <!-- Handmatig locatie toevoegen (TEC-129): staat een locatie niet in de\n           lijst, dan voegt de agent 'm hier toe. -->\n      <a :href=\"urlAddLocation()\" class=\"subnav__add\">\n        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M12 5v14M5 12h14\"/>\n        </svg>\n        Locatie toevoegen\n      </a>\n    </div>\n\n    <!-- ===== Mobile toolbar: Filters button + count =====\n         Shown only < 960px, where the inline .subnav dropdowns would overflow\n         off-screen. Opens the slide-in FilterPanel. The Lijst/Kaart toggle lives\n         in a fixed bar at the bottom (.seg, below). -->\n    <div class=\"mobilebar\">\n      <button type=\"button\" class=\"mobilebar__filters\" @click=\"filtersOpen = true\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M3 5h18M6 12h12M10 19h4\"/>\n        </svg>\n        <span>Filters</span>\n        <span v-if=\"activeCount > 0\" class=\"mobilebar__badge\">{{ activeCount }}</span>\n      </button>\n\n      <span class=\"mobilebar__count\">{{ filtered.length }} {{ filtered.length === 1 ? \"locatie\" : \"locaties\" }}</span>\n\n      <a :href=\"urlAddLocation()\" class=\"mobilebar__add\" aria-label=\"Locatie toevoegen\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M12 5v14M5 12h14\"/>\n        </svg>\n      </a>\n    </div>\n\n    <!-- ===== List + map ===== -->\n    <div class=\"verkennen\" :class=\"`verkennen--${mobileView}`\">\n      <aside class=\"vk-left\">\n        <div v-if=\"isLoading\" class=\"vk-status\">Locaties laden…</div>\n        <div v-else-if=\"error\" class=\"vk-status vk-status--error\">{{ error }}</div>\n\n        <div v-else ref=\"listEl\" class=\"vk-left__list\">\n          <button\n            v-for=\"loc in visible\"\n            :key=\"loc.id\"\n            type=\"button\"\n            class=\"loccard\"\n            :class=\"{ 'loccard--sel': selectedId === loc.id }\"\n            @click=\"select(loc.id)\"\n          >\n            <div class=\"loccard__row\">\n              <span class=\"loccard__icon\" aria-hidden=\"true\">\n                <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                  <path d=\"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\"/>\n                  <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n                </svg>\n              </span>\n              <span class=\"loccard__body\">\n                <span class=\"loccard__name\">\n                  {{ loc.companyName }}\n                  <span v-if=\"planningIds.includes(loc.id)\" class=\"loccard__chip\" title=\"In planning\" aria-hidden=\"true\">\n                    <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-ink)\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                      <path d=\"M5 13l4 4L19 7\"/>\n                    </svg>\n                  </span>\n                  <!-- \"Beoordeeld\"-chip: clipboard-met-vinkje, hetzelfde glyph als\n                       de Beoordelingen-tab, iets groter dan de planning-chip. -->\n                  <span v-if=\"loc.hasFeedback\" class=\"loccard__fbchip\" title=\"Beoordeeld\" aria-hidden=\"true\">\n                    <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-ink)\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                      <path d=\"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\"/>\n                      <rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1\"/>\n                      <path d=\"m9 14 2 2 4-4\"/>\n                    </svg>\n                  </span>\n                </span>\n                <span class=\"loccard__meta\">\n                  <span\n                    v-if=\"recommendationFor(loc).badge\"\n                    class=\"loccard__badge\"\n                    :style=\"badgeStyle(loc.latestScore)\"\n                  >{{ recommendationFor(loc).badge }}</span>\n                  <span class=\"loccard__sub\">{{ loc.city ?? loc.province ?? loc.address }}</span>\n                </span>\n              </span>\n              <span class=\"loccard__score\" :style=\"{ color: scoutColor(loc.latestScore) }\">\n                <template v-if=\"loc.latestScore === null\">\n                  <span class=\"loccard__zero\">—</span>\n                  <span class=\"loccard__num-label\">Geen analyse</span>\n                </template>\n                <template v-else>\n                  <span class=\"loccard__num\">{{ loc.latestScore }}</span>\n                  <span class=\"loccard__num-label\">AI-score</span>\n                </template>\n              </span>\n            </div>\n            <span class=\"loccard__bar\" aria-hidden=\"true\">\n              <span class=\"loccard__bar-fill\" :style=\"barStyle(loc.latestScore)\"></span>\n            </span>\n          </button>\n\n          <!-- Infinite-scroll sentinel: rendered while more results remain; an\n               IntersectionObserver on it appends the next batch as it scrolls\n               into view. -->\n          <div v-if=\"visible.length < filtered.length\" ref=\"sentinelEl\" class=\"vk-sentinel\">\n            <span class=\"vk-sentinel__dot\"></span>\n            Meer laden…\n          </div>\n\n          <div v-if=\"filtered.length === 0\" class=\"vk-empty\">\n            <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"rgba(255,255,255,0.3)\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n              <path d=\"m20 20-3.5-3.5\"/>\n            </svg>\n            <div>Geen locaties gevonden.</div>\n            <button type=\"button\" class=\"vk-linkbtn\" @click=\"resetFilters\">Filters resetten</button>\n          </div>\n        </div>\n      </aside>\n\n      <section class=\"vk-map\">\n        <ScoutMap\n          ref=\"scoutMapRef\"\n          :locations=\"filtered\"\n          :selected-id=\"selectedId\"\n          :planning-ids=\"planningIds\"\n          :overlay=\"mapOverlay ?? null\"\n          :funnel-pins=\"mapFunnelPins ?? null\"\n          :radii=\"mapRadii ?? null\"\n          @select=\"select\"\n          @funnel-popup-open=\"(id, el) => emit('funnel-popup-open', id, el)\"\n          @funnel-popup-close=\"(id) => emit('funnel-popup-close', id)\"\n        />\n        <div class=\"vk-map__legend\">\n          <div v-for=\"row in SCOUT_LEGEND\" :key=\"row.label\" class=\"vk-map__legend-row\">\n            <span class=\"vk-dot\" :style=\"{ background: row.color }\"></span>{{ row.label }}\n          </div>\n        </div>\n        <!-- Optionele floating widgets bovenop de kaart (bv. funnel-stage\n             legenda). Plaatsing is aan de slot-content. Backward-compatible —\n             leeg laten = exact het oude gedrag. -->\n        <slot name=\"mapOverlay\" />\n      </section>\n    </div>\n\n    <!-- Fixed Lijst/Kaart toggle (mobile only), pinned above the bottom tabbar.\n         Placed as a sibling of .verkennen — NOT inside it — so it lives in the\n         parent stacking context and paints above the map's z-index:1 context,\n         instead of being trapped among Leaflet's leaked z-indexes. -->\n    <div class=\"seg\" role=\"group\" aria-label=\"Kaart of lijst\">\n      <button type=\"button\" class=\"seg__btn\" :class=\"{ 'seg__btn--on': mobileView === 'map' }\" @click=\"mobileView = 'map'\">\n        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\"/>\n        </svg>\n        Kaart\n      </button>\n      <button type=\"button\" class=\"seg__btn\" :class=\"{ 'seg__btn--on': mobileView === 'list' }\" @click=\"mobileView = 'list'\">\n        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\"/>\n        </svg>\n        Lijst\n      </button>\n    </div>\n\n    <!-- Mobile slide-in filter panel (no-op on desktop: only the mobilebar\n         button opens it, and that button is hidden ≥ 960px). -->\n    <FilterPanel\n      :open=\"filtersOpen\"\n      :region=\"region\"\n      :selected-types=\"selectedTypes\"\n      :selected-buckets=\"selectedBuckets\"\n      :feedback-filter=\"feedbackFilter\"\n      v-model:query=\"query\"\n      :region-options=\"regionOptions\"\n      :category-options=\"categoryOptions\"\n      :result-count=\"filtered.length\"\n      :collapsible=\"filtersCollapsible\"\n      @select-region=\"selectRegion\"\n      @toggle-type=\"toggleCategory\"\n      @toggle-bucket=\"toggleBucket\"\n      @toggle-all-buckets=\"toggleAllBuckets\"\n      @select-feedback=\"selectFeedback\"\n      @reset=\"resetFilters\"\n      @close=\"filtersOpen = false\"\n    >\n      <!-- Mobiel-equivalent van #subnavExtras: extra filter-secties in het\n           slide-in panel. Optioneel — leeg gelaten verandert er niets aan de\n           live PWA. -->\n      <template v-if=\"$slots.filterPanelExtras\" #extras>\n        <slot name=\"filterPanelExtras\" />\n      </template>\n    </FilterPanel>\n\n    <LocationDetailPanel\n      v-if=\"selectedId !== null\"\n      :location-id=\"selectedId\"\n      @close=\"selectedId = null\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport FilterPanel from \"../components/FilterPanel.vue\";\nimport LocationDetailPanel from \"../components/LocationDetailPanel.vue\";\nimport ScoutMap from \"../components/ScoutMap.vue\";\nimport { listLocations } from \"../lib/api\";\nimport { usePersonalList } from \"../lib/personalList\";\nimport { SCOUT_LEGEND, type ScoutBucket, scoutColor, scoutRecommendation } from \"../lib/scoutScore\";\nimport type { LocationSummary } from \"../lib/types\";\nimport { activeFilterCount, ALL_SCORED_BUCKETS, DEFAULT_BUCKETS, type FeedbackFilter, filterLocations, hasStoredCriteria, loadStoredCriteria, saveCriteria, sortByScoreDesc, toggleBucketSelection, toggleTypeSelection, type VerkennenCriteria } from \"../lib/verkennenFilter\";\nimport { ALL_REGIONS, BUCKET_OPTIONS, FEEDBACK_OPTIONS, SCORED_BUCKET_OPTIONS, typeLabel } from \"../lib/verkennenOptions\";\nimport { urlAddLocation } from \"../lib/urls\";\nimport type { ScoutMapOverlay, ScoutMapFunnelPin, ScoutMapRadius } from \"../components/ScoutMap.vue\";\n\n// Alle props zijn optioneel en backward-compatible. Live VerkennenView gebruikt\n// geen enkele (default-gedrag identiek). Bedoeld als extensiepunten voor\n// hergebruik in prototypes/varianten met extra map-lagen of eigen planning-bron.\nconst props = defineProps<{\n  /** Override van de planning-ids. Weglaten = lees uit `usePersonalList()`. */\n  planningIds?: number[];\n  /** Pass-through naar ScoutMap.overlay (bv. gemeente-dim). */\n  mapOverlay?: ScoutMapOverlay | null;\n  /** Pass-through naar ScoutMap.funnelPins (bv. sales-funnel-locaties). */\n  mapFunnelPins?: ScoutMapFunnelPin[] | null;\n  /** Pass-through naar ScoutMap.radii (bv. uitsluit-cirkels). */\n  mapRadii?: ScoutMapRadius[] | null;\n  /**\n   * Extra filter bovenop de ingebouwde regio/soort/geschiktheid/feedback-\n   * filters. Geeft `false` terug om een locatie te verbergen. Wordt op zowel de\n   * lijst als de kaart toegepast (beide lezen `filtered`). Weglaten = geen\n   * extra filtering (default-gedrag identiek).\n   */\n  customFilter?: ((loc: LocationSummary) => boolean) | null;\n  /** Maakt de filtergroepen in het mobiele FilterPanel inklapbaar (accordion).\n      Default false → altijd-open, identiek aan het live-PWA-gedrag. */\n  filtersCollapsible?: boolean;\n  /**\n   * Voorkeursregio (province-string) uit de Account-instellingen, async geleverd\n   * door de container. Wordt één keer als Regio-filter toegepast bij het openen\n   * van de kaart — alleen als de URL geen `?regio=` meegaf én de gebruiker nog\n   * niet zelf wisselde. Weglaten/null = geen voorkeur (default-gedrag identiek).\n   */\n  preferredRegion?: string | null;\n}>();\n\n// Pass-through emits voor de funnel-pin popup-events. Parent kan z'n eigen\n// override-sliders en interacties wirelen zonder dat VerkennenView de logica\n// hoeft te kennen.\nconst emit = defineEmits<{\n  \"funnel-popup-open\": [id: string, el: HTMLElement];\n  \"funnel-popup-close\": [id: string];\n  // Geladen suggestie-locaties — zodat een container (VerkennenContainer) ze\n  // kan hergebruiken voor extra afgeleide filters zonder een tweede\n  // listLocations-call. Live route negeert de emit (backward-compatible).\n  \"locations-loaded\": [locations: LocationSummary[]];\n}>();\n\n// Infinite scroll: render this many cards initially and add another batch each\n// time the bottom sentinel scrolls into view. One batch comfortably overflows\n// any viewport, so the sentinel drops below the fold after each load (no\n// runaway double-fire).\nconst BATCH = 24;\n\nconst locations = ref<LocationSummary[]>([]);\nconst isLoading = ref(true);\nconst error = ref<string | null>(null);\n\n// Template-ref naar ScoutMap; gebruikt om bij een region-wissel bewust naar dat\n// gebied te springen (de kaart fit verder niet meer automatisch — zie ScoutMap).\nconst scoutMapRef = ref<{ fitToLocations: () => void } | null>(null);\n\nconst region = ref<string>(ALL_REGIONS);\nconst regionOpen = ref(false);\n// Multi-select: holds the raw locationType values (e.g. \"fuel\") that are\n// active. Empty array = no filter (= \"Alle soorten\").\nconst selectedTypes = ref<string[]>([]);\nconst categoryOpen = ref(false);\n// Multi-select score levels. Empty = show without-analysis. Default =\n// DEFAULT_BUCKETS (the three best scored levels), so both scoreless and\n// \"Niet geschikt\" locations are hidden by default; \"Alle geschiktheden\" adds the\n// fourth level.\nconst selectedBuckets = ref<ScoutBucket[]>([...DEFAULT_BUCKETS]);\nconst bucketOpen = ref(false);\nconst feedbackFilter = ref<FeedbackFilter>(\"all\");\nconst feedbackOpen = ref(false);\nconst query = ref(\"\");\nconst selectedId = ref<number | null>(null);\n// How many cards are currently rendered (grows via the infinite-scroll sentinel).\nconst renderLimit = ref(BATCH);\n// Scroll container + bottom sentinel for the IntersectionObserver.\nconst listEl = ref<HTMLElement | null>(null);\nconst sentinelEl = ref<HTMLElement | null>(null);\n// Mobiel opent op de KAART (niet de lijst): Verkennen draait om de kaart, dus\n// daar wil je beginnen. Op desktop is deze toggle verborgen (beide panes tonen),\n// dus de default raakt alleen mobiel.\nconst mobileView = ref<\"list\" | \"map\">(\"map\");\n// Mobile-only: the slide-in filter panel (the inline .subnav toolbar is hidden\n// on mobile because all its dropdowns overflowed off-screen).\nconst filtersOpen = ref(false);\n\n// Personal list blijft altijd aangeroepen — usePersonalList() valt graceful\n// terug op een lege lijst als de getMyList-RPC faalt (anon/no-auth context),\n// dus prototypes met `planningIds`-prop ondervinden er geen runtime-impact van.\nconst { list: personalList } = usePersonalList();\nconst planningIds = computed(() =>\n  props.planningIds ?? personalList.value.map((item) => item.location.id),\n);\n\n// Region options derived from the distinct provinces present in the data\n// (the WRD region-domain isn't exposed in the summary shape).\nconst regionOptions = computed(() => {\n  const provinces = new Set<string>();\n  for (const l of locations.value) if (l.province) provinces.add(l.province);\n  return [ALL_REGIONS, ...[...provinces].sort((a, b) => a.localeCompare(b, \"nl\"))];\n});\n\n// Category options derived from the distinct locationType values present in the\n// data, sorted by their NL label. New OSM categories appear automatically.\n// There is no \"Alle soorten\" master row: the menu lists only the real types and\n// they all start ticked (empty selection = all).\nconst categoryOptions = computed(() => {\n  const types = new Set<string>();\n  for (const l of locations.value) if (l.locationType) types.add(l.locationType);\n  return [...types].sort((a, b) => typeLabel(a).localeCompare(typeLabel(b), \"nl\"));\n});\nconst categoryValueLabel = computed(() => {\n  if (selectedTypes.value.length === 0) return \"Alle\";\n  if (selectedTypes.value.length === 1) return typeLabel(selectedTypes.value[0]);\n  return `${selectedTypes.value.length} soorten`;\n});\n\n// Standard \"select all\" multi-select: an empty selection means \"all\", so every\n// type renders ticked when nothing is explicitly chosen.\nfunction isCategoryOn(c: string): boolean {\n  return selectedTypes.value.length === 0 || selectedTypes.value.includes(c);\n}\n\n// Button label for the Geschiktheid dropdown, mirroring categoryValueLabel.\nconst bucketValueLabel = computed(() => {\n  if (selectedBuckets.value.length === 0) return \"Zonder analyse\";\n  if (isAllBucketsOn.value) return \"Alle\";\n  if (selectedBuckets.value.length === 1) {\n    return BUCKET_OPTIONS.find((b) => b.id === selectedBuckets.value[0])?.label ?? \"1 niveau\";\n  }\n  return `${selectedBuckets.value.length} niveaus`;\n});\n\n// \"Alle geschiktheden\" master is on when all four scored levels are selected\n// (set-based, order-independent). An empty selection = show without-analysis.\nconst isAllBucketsOn = computed(\n  () =>\n    selectedBuckets.value.length === ALL_SCORED_BUCKETS.length &&\n    ALL_SCORED_BUCKETS.every((b) => selectedBuckets.value.includes(b)),\n);\nfunction isBucketOn(id: ScoutBucket): boolean {\n  return selectedBuckets.value.includes(id);\n}\n\nconst feedbackValueLabel = computed(\n  () => FEEDBACK_OPTIONS.find((f) => f.id === feedbackFilter.value)?.label ?? \"Alle\",\n);\n\n// Single source of the active filter state, in the normalized shape the filter\n// engine AND the URL serializer both consume.\nconst currentCriteria = computed<VerkennenCriteria>(() => ({\n  region: region.value === ALL_REGIONS ? null : region.value,\n  types: selectedTypes.value,\n  buckets: selectedBuckets.value,\n  feedback: feedbackFilter.value,\n  query: query.value,\n}));\n\nconst filtered = computed(() => {\n  const base = filterLocations(locations.value, currentCriteria.value);\n  const matched = props.customFilter ? base.filter(props.customFilter) : base;\n  // Vaste sortering: hoogste AI-score eerst, locaties zonder analyse onderaan.\n  // De lijst (visible = filtered.slice(0, renderLimit)) toont zo de beste matches\n  // bovenaan; de kaart is volgorde-onafhankelijk dus de re-order raakt 'm niet.\n  return sortByScoreDesc(matched);\n});\n\n// Count of active (non-default) filter axes — badge on the mobile Filters button.\nconst activeCount = computed(() => activeFilterCount(currentCriteria.value));\n\nconst visible = computed(() => filtered.value.slice(0, renderLimit.value));\n\n// Reset the render window whenever the filtered set changes (filter/search), and\n// scroll back to the top so the user sees the best matches first.\nwatch(filtered, () => {\n  renderLimit.value = BATCH;\n  if (listEl.value) listEl.value.scrollTop = 0;\n});\n\n// Attach an IntersectionObserver to the bottom sentinel. The sentinel only\n// exists while more results remain (v-if), so this also tears down/re-attaches\n// as the list grows past the end or the filter changes.\nlet scrollObserver: IntersectionObserver | null = null;\nwatch(sentinelEl, (el) => {\n  scrollObserver?.disconnect();\n  scrollObserver = null;\n  if (!el) return;\n  scrollObserver = new IntersectionObserver(\n    (entries) => {\n      if (!entries.some((e) => e.isIntersecting)) return;\n      if (renderLimit.value >= filtered.value.length) return;\n      renderLimit.value = Math.min(renderLimit.value + BATCH, filtered.value.length);\n      // The observer only re-fires on an intersection *change*. If the sentinel\n      // is still in view after this batch (small batch / tall viewport), it would\n      // otherwise stay stuck — so re-observe to force a fresh callback and keep\n      // filling until the sentinel drops below the fold or everything is shown.\n      if (renderLimit.value < filtered.value.length) {\n        requestAnimationFrame(() => {\n          if (scrollObserver && sentinelEl.value) {\n            scrollObserver.unobserve(sentinelEl.value);\n            scrollObserver.observe(sentinelEl.value);\n          }\n        });\n      }\n    },\n    { root: listEl.value, rootMargin: \"300px 0px\" },\n  );\n  scrollObserver.observe(el);\n});\n\nonBeforeUnmount(() => {\n  scrollObserver?.disconnect();\n  scrollObserver = null;\n});\n\nfunction recommendationFor(loc: LocationSummary) {\n  return scoutRecommendation(loc.latestScore);\n}\n\nfunction badgeStyle(score: number | null) {\n  const color = scoutColor(score);\n  return { color, borderColor: color, background: \"transparent\" };\n}\n\nfunction barStyle(score: number | null) {\n  const pct = score === null ? 0 : Math.min(100, score);\n  return { width: `${pct}%`, background: scoutColor(score) };\n}\n\nfunction select(id: number) {\n  selectedId.value = id;\n}\n\nfunction selectRegion(r: string) {\n  region.value = r;\n  regionOpen.value = false;\n}\n\nfunction onRegionBlur() {\n  // Close after the click on an item has had a chance to fire.\n  setTimeout(() => { regionOpen.value = false; }, 120);\n}\n\n// Multi-select toggle. Flips a type's membership via toggleTypeSelection, which\n// treats [] as \"all\" (every type ticked) and normalizes a complete set back to\n// []. Unticking the last one returns to \"all\". The menu stays open so several\n// types can be picked in one go (it closes on blur / clicking the button again).\nfunction toggleCategory(c: string) {\n  selectedTypes.value = toggleTypeSelection(selectedTypes.value, c, categoryOptions.value);\n}\n\nfunction onCategoryBlur() {\n  setTimeout(() => { categoryOpen.value = false; }, 120);\n}\n\n// Geschiktheid multi-select. \"Alle geschiktheden\" is a master toggle: on → tick\n// all four levels, off → clear to [] (which shows the without-analysis backlog).\n// The four levels flip individually via toggleBucketSelection. Menu stays open\n// (like Soort).\nfunction toggleAllBuckets() {\n  selectedBuckets.value = isAllBucketsOn.value ? [] : [...ALL_SCORED_BUCKETS];\n}\nfunction toggleBucket(id: ScoutBucket) {\n  selectedBuckets.value = toggleBucketSelection(selectedBuckets.value, id);\n}\nfunction onBucketBlur() {\n  setTimeout(() => { bucketOpen.value = false; }, 120);\n}\n\nfunction selectFeedback(f: FeedbackFilter) {\n  feedbackFilter.value = f;\n  feedbackOpen.value = false;\n}\nfunction onFeedbackBlur() {\n  setTimeout(() => { feedbackOpen.value = false; }, 120);\n}\n\nfunction resetFilters() {\n  region.value = ALL_REGIONS;\n  selectedTypes.value = [];\n  selectedBuckets.value = [...DEFAULT_BUCKETS];\n  feedbackFilter.value = \"all\";\n  query.value = \"\";\n}\n\n// ===== Filter persistence (localStorage) =====\n// De actieve filters worden in localStorage bewaard zodat een reload ze\n// herstelt. (De oude URL/route-query-spiegeling is weg — die botste met de\n// opgeslagen state.) loadStoredCriteria/saveCriteria (getest in verkennen-filter)\n// bezitten het formaat; dit koppelt ze aan de refs.\n\nfunction applyCriteria(c: VerkennenCriteria) {\n  region.value = c.region ?? ALL_REGIONS;\n  selectedTypes.value = c.types;\n  selectedBuckets.value = c.buckets;\n  feedbackFilter.value = c.feedback;\n  query.value = c.query;\n}\n\n// Herstel de filters synchroon uit localStorage bij mount, vóór de eerste render.\napplyCriteria(loadStoredCriteria());\n\n// Waren er ooit filters opgeslagen? Zo ja, dan wint de bewaarde keuze en wordt de\n// per-gebruiker voorkeursregio NIET toegepast (zie de preferredRegion-watch\n// hieronder) — alleen een eerste bezoeker krijgt de voorkeursregio voorgeselecteerd.\nconst hadStoredPrefs = hasStoredCriteria();\n\n// Schrijf bij elke wijziging terug. `currentCriteria` levert een nieuw object\n// zodra een onderliggende ref wijzigt, dus deze watch vuurt zonder `deep`.\n// Geregistreerd ná de initiële applyCriteria zodat het herstellen zelf geen\n// overbodige write triggert.\nwatch(currentCriteria, (c) => saveCriteria(c));\n\n// Per-user voorkeursregio (uit de Account-instellingen, async geleverd door de\n// container). Pas 'm één keer toe zodra hij binnenkomt — alleen als er nog geen\n// filters bewaard waren én de gebruiker nog niet zelf wisselde (region nog op\n// ALL_REGIONS). De save-watch hierboven bewaart 'm daarna, en de auto-fit-watch\n// hieronder zoomt naar het gebied.\nwatch(\n  () => props.preferredRegion,\n  (val) => {\n    if (val && !hadStoredPrefs && region.value === ALL_REGIONS) region.value = val;\n  },\n  { immediate: true },\n);\n\n// Auto-fit bij de AANKLIKBARE (discrete) filters — regio, soort, geschiktheid,\n// feedback: één klik = één nieuwe set, dus de kaart mag dan naar het resultaat\n// springen. Bewust NIET op het zoekveld (typen) en NIET op de combo-sliders\n// (inwoners/radius, in VerkennenContainer): die wijzigen continu en zouden de\n// kaart irritant laten in-/uitzoomen tijdens het verfijnen. De sliders zitten\n// buiten VerkennenView (raken `filtered` via de customFilter-prop), dus ze\n// triggeren deze watch sowieso niet. Fit ná nextTick zodat `filtered` al\n// herberekend is.\nwatch(\n  [region, selectedTypes, selectedBuckets, feedbackFilter],\n  () => {\n    void nextTick(() => scoutMapRef.value?.fitToLocations());\n  },\n  { deep: true },\n);\n\nonMounted(async () => {\n  try {\n    const result = await listLocations();\n    locations.value = result.locations;\n    emit(\"locations-loaded\", result.locations);\n  } catch (err) {\n    console.error(\"Verkennen: locaties laden mislukt:\", err);\n    error.value = \"Kon locaties niet laden. Probeer het later opnieuw.\";\n  } finally {\n    isLoading.value = false;\n  }\n});\n</script>\n\n<style scoped>\n.verkennen-wrap {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  min-height: 0;\n  height: 100%;\n}\n\n/* ===== Mobile chrome (Filters toolbar + fixed Lijst/Kaart bar) — hidden on desktop ===== */\n.mobilebar { display: none; }\n.seg { display: none; }\n\n/* ===== Sub-toolbar ===== */\n.subnav {\n  position: relative;\n  z-index: 2; /* sit above .verkennen so the dropdown overlays the map */\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 10px 14px;\n  border-bottom: 1px solid var(--snl-line);\n  flex-shrink: 0;\n}\n/* The glass blur lives on a pseudo-element, NOT on .subnav itself. A\n   backdrop-filter ancestor pulls its absolutely-positioned descendants\n   (the .regionmenu__pop dropdown) into the filter pass, which made the\n   dropdown render see-through despite its opaque background. */\n.subnav::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  z-index: -1;\n  background: var(--snl-glass);\n  backdrop-filter: blur(12px);\n  -webkit-backdrop-filter: blur(12px);\n}\n.subnav__divider { width: 1px; height: 22px; background: var(--snl-line); flex-shrink: 0; }\n/* Wrappende groep met alle filter-pills. flex:1 vult de balk (duwt count+zoek\n   naar rechts, zoals de oude spacer); flex-wrap laat de pills naar een tweede\n   regel zakken bij krappe breedtes i.p.v. buiten beeld te vallen. min-width:0\n   zodat de groep daadwerkelijk mag krimpen onder z'n natuurlijke één-regel-\n   breedte (anders wrapt-ie nooit). */\n.subnav__filters {\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: 12px;\n  row-gap: 8px;\n  flex: 1 1 auto;\n  min-width: 0;\n}\n/* Extra combo-filters (Inwoners/Radius/Funnel) altijd op een eigen regel onder\n   de standaard-pills: flex-basis:100% past nooit naast de eerste rij, dus de\n   wrappende .subnav__filters duwt deze groep naar de volgende regel. */\n.subnav__extras {\n  flex-basis: 100%;\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  gap: 12px;\n  row-gap: 8px;\n}\n.subnav__count {\n  font-size: 11.5px;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n  white-space: nowrap;\n}\n.subnav__count b { color: var(--snl-fg); font-weight: 800; }\n.subnav__search {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  width: 320px;\n  height: 36px;\n  padding: 0 12px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 10px;\n  flex-shrink: 0;\n}\n.subnav__search:focus-within { border-color: rgba(143, 204, 177, 0.4); }\n.subnav__search input {\n  flex: 1;\n  min-width: 0;\n  background: transparent;\n  border: 0;\n  outline: 0;\n  font-family: inherit;\n  font-size: 13px;\n  color: var(--snl-fg);\n}\n.subnav__search input::placeholder { color: var(--snl-fg-placeholder); }\n.subnav__searchclear {\n  display: grid;\n  place-items: center;\n  padding: 4px;\n  background: transparent;\n  border: 0;\n  border-radius: 4px;\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n}\n.subnav__searchclear:hover { background: var(--snl-surface-2); }\n\n/* \"Locatie toevoegen\" — mint CTA rechts naast het zoekveld. */\n.subnav__add {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n  height: 36px;\n  padding: 0 14px;\n  flex-shrink: 0;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  border: 1px solid transparent;\n  border-radius: 10px;\n  font-family: inherit;\n  font-size: 13px;\n  font-weight: 700;\n  text-decoration: none;\n  white-space: nowrap;\n  cursor: pointer;\n  transition: filter 0.15s, transform 0.08s;\n}\n.subnav__add:hover { filter: brightness(1.06); }\n.subnav__add:active { transform: translateY(1px); }\n\n/* Region dropdown */\n.regionmenu { position: relative; flex-shrink: 0; }\n.regionmenu__btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  height: 36px;\n  padding: 0 12px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 10px;\n  font-family: inherit;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--snl-fg);\n  cursor: pointer;\n}\n.regionmenu__btn:hover { background: var(--snl-surface-2); border-color: var(--snl-line-strong); }\n.regionmenu__lbl { color: var(--snl-fg-muted); font-weight: 500; }\n.regionmenu__val { color: var(--snl-fg); font-weight: 700; }\n.regionmenu__pop {\n  position: absolute;\n  left: 0;\n  top: 40px;\n  z-index: 30;\n  min-width: 200px;\n  padding: 6px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line-strong);\n  border-radius: 10px;\n  box-shadow: 0 18px 40px -10px rgba(0, 0, 0, 0.6);\n}\n.regionmenu__item {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n  width: 100%;\n  padding: 7px 10px;\n  background: transparent;\n  border: 0;\n  border-radius: 7px;\n  text-align: left;\n  font-family: inherit;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n}\n.regionmenu__item:hover { background: var(--snl-surface-3); color: var(--snl-fg); }\n.regionmenu__item.is-on { color: var(--snl-mint); }\n/* Left side of a dropdown item: label + optional muted range hint (Geschiktheid). */\n.regionmenu__itemlbl { display: inline-flex; align-items: baseline; gap: 8px; }\n.regionmenu__hint { font-size: 11px; color: var(--snl-fg-placeholder); }\n/* Divider between the \"Alle geschiktheden\" master and the individual levels. */\n.regionmenu__sep { height: 1px; margin: 5px 6px; background: var(--snl-line); }\n\n/* ===== Two-pane ===== */\n.verkennen {\n  position: relative;\n  z-index: 1; /* own stacking context so Leaflet's high z-index panes stay below the toolbar dropdown */\n  flex: 1;\n  display: grid;\n  grid-template-columns: 380px 1fr;\n  gap: 14px;\n  padding: 14px;\n  min-height: 0;\n}\n\n.vk-left {\n  display: flex;\n  flex-direction: column;\n  min-height: 0;\n  padding: 12px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 22px;\n  box-shadow: var(--snl-shadow-card);\n}\n.vk-left__list {\n  flex: 1;\n  min-height: 0;\n  overflow-y: auto;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  padding: 0 2px 4px;\n  margin: 0 -2px;\n}\n\n.vk-status {\n  padding: 24px 12px;\n  text-align: center;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n}\n.vk-status--error { color: var(--snl-koraal); }\n\n/* Location card */\n.loccard {\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 0;\n  padding: 12px 12px 0;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line);\n  border-radius: 18px;\n  text-align: left;\n  overflow: hidden;\n  cursor: pointer;\n  transition: background 0.15s, border-color 0.15s, transform 0.08s;\n}\n.loccard:hover { background: var(--snl-surface-3); border-color: var(--snl-line-strong); }\n.loccard:active { transform: translateY(1px); }\n.loccard--sel { border-color: rgba(143, 204, 177, 0.4); background: var(--snl-surface-3); }\n.loccard__row {\n  display: grid;\n  grid-template-columns: 40px 1fr auto;\n  gap: 10px;\n  align-items: flex-start;\n  padding-bottom: 12px;\n}\n.loccard__icon {\n  display: grid;\n  place-items: center;\n  width: 40px;\n  height: 40px;\n  border-radius: 10px;\n  background: var(--snl-mint-soft);\n}\n.loccard__body { min-width: 0; }\n.loccard__name {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 14px;\n  font-weight: 700;\n  letter-spacing: -0.005em;\n  color: var(--snl-fg);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.loccard__chip {\n  display: grid;\n  place-items: center;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: var(--snl-mint);\n  flex-shrink: 0;\n}\n/* \"Beoordeeld\"-chip — iets groter dan de planning-chip, met het clipboard-met-\n   vinkje-glyph (zelfde symbool als de Beoordelingen-tab). */\n.loccard__fbchip {\n  display: grid;\n  place-items: center;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: var(--snl-mint);\n  flex-shrink: 0;\n}\n.loccard__meta { display: flex; align-items: center; gap: 8px; margin-top: 4px; min-width: 0; }\n.loccard__badge {\n  display: inline-flex;\n  align-items: center;\n  height: 18px;\n  padding: 0 7px;\n  border: 1px solid;\n  border-radius: 999px;\n  font-size: 10px;\n  font-weight: 700;\n  white-space: nowrap;\n  flex-shrink: 0;\n}\n.loccard__sub {\n  font-size: 11.5px;\n  color: var(--snl-fg-muted);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.loccard__score { text-align: right; line-height: 1; min-width: 44px; flex-shrink: 0; }\n.loccard__num { font-size: 22px; font-weight: 800; letter-spacing: -0.02em; }\n.loccard__zero { font-size: 22px; font-weight: 800; }\n.loccard__num-label {\n  display: block;\n  margin-top: 3px;\n  font-size: 9.5px;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  opacity: 0.8;\n  font-weight: 600;\n}\n.loccard__bar { height: 3px; margin: 0 -12px; background: rgba(255, 255, 255, 0.05); }\n[data-theme=\"light\"] .loccard__bar { background: rgba(18, 23, 26, 0.06); }\n.loccard__bar-fill { display: block; height: 100%; transition: width 0.3s; }\n\n/* Infinite-scroll loading sentinel */\n.vk-sentinel {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  padding: 14px;\n  color: var(--snl-fg-muted);\n  font-size: 12px;\n  font-weight: 600;\n}\n.vk-sentinel__dot {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: var(--snl-mint);\n  animation: vk-pulse 0.9s ease-in-out infinite;\n}\n@keyframes vk-pulse {\n  0%, 100% { opacity: 0.3; transform: scale(0.8); }\n  50% { opacity: 1; transform: scale(1); }\n}\n\n.vk-empty {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  padding: 30px 12px;\n  color: var(--snl-fg-muted);\n  font-size: 13px;\n}\n.vk-linkbtn {\n  background: transparent;\n  border: 0;\n  color: var(--snl-mint);\n  font-family: inherit;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n  text-decoration: underline;\n  text-underline-offset: 3px;\n}\n\n/* Map pane */\n.vk-map {\n  position: relative;\n  border: 1px solid var(--snl-line);\n  border-radius: 22px;\n  overflow: hidden;\n  background: var(--snl-bg-deep);\n  min-height: 0;\n}\n.vk-map__legend {\n  position: absolute;\n  right: 14px;\n  bottom: 14px;\n  z-index: 1000;\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  padding: 10px 12px;\n  background: var(--snl-glass-strong);\n  backdrop-filter: blur(10px);\n  -webkit-backdrop-filter: blur(10px);\n  border: 1px solid var(--snl-line);\n  border-radius: 12px;\n}\n.vk-map__legend-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 11.5px;\n  color: var(--snl-fg-muted);\n  font-weight: 600;\n}\n.vk-dot { width: 8px; height: 8px; border-radius: 50%; }\n\n/* ===== Mobile: single column, Filters panel + Lijst/Kaart toggle ===== */\n@media (max-width: 959px) {\n  /* The inline dropdown toolbar overflows on narrow screens — hide it and let\n     the .mobilebar + slide-in FilterPanel take over. */\n  .subnav { display: none; }\n\n  .mobilebar {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    flex-shrink: 0;\n    padding: 10px 12px;\n    border-bottom: 1px solid var(--snl-line);\n    background: var(--snl-glass);\n    backdrop-filter: blur(12px);\n    -webkit-backdrop-filter: blur(12px);\n  }\n  .mobilebar__filters {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    height: 38px;\n    padding: 0 14px;\n    background: var(--snl-surface);\n    border: 1px solid var(--snl-line);\n    border-radius: 10px;\n    font-family: inherit;\n    font-size: 13.5px;\n    font-weight: 700;\n    color: var(--snl-fg);\n    cursor: pointer;\n  }\n  .mobilebar__filters:hover { background: var(--snl-surface-2); border-color: var(--snl-line-strong); }\n  .mobilebar__badge {\n    display: inline-grid;\n    place-items: center;\n    min-width: 18px;\n    height: 18px;\n    padding: 0 5px;\n    border-radius: 99px;\n    background: var(--snl-mint);\n    color: var(--snl-ink);\n    font-size: 10.5px;\n    font-weight: 800;\n    font-variant-numeric: tabular-nums;\n  }\n  .mobilebar__count {\n    flex: 1;\n    text-align: right;\n    font-size: 12px;\n    font-weight: 600;\n    color: var(--snl-fg-muted);\n    white-space: nowrap;\n  }\n  /* Ronde mint \"+\"-knop uiterst rechts in de mobielbalk. */\n  .mobilebar__add {\n    display: inline-grid;\n    place-items: center;\n    width: 38px;\n    height: 38px;\n    flex-shrink: 0;\n    border-radius: 10px;\n    background: var(--snl-mint);\n    color: var(--snl-ink);\n    text-decoration: none;\n  }\n  .mobilebar__add:active { transform: translateY(1px); }\n  /* Lijst/Kaart toggle — a fixed pill centered above the bottom tabbar. It's a\n     sibling of .verkennen, so its z-index:50 is evaluated in the parent stacking\n     context and paints above the map's whole z-index:1 context (Leaflet's leaked\n     z-indexes stay trapped inside .verkennen). No isolation on the map needed. */\n  .seg {\n    display: inline-flex;\n    position: fixed;\n    left: 50%;\n    transform: translateX(-50%);\n    bottom: calc(94px + env(safe-area-inset-bottom));\n    z-index: 50;\n    padding: 4px;\n    background: var(--snl-glass-strong);\n    backdrop-filter: blur(20px) saturate(160%);\n    -webkit-backdrop-filter: blur(20px) saturate(160%);\n    border: 1px solid var(--snl-line);\n    border-radius: 999px;\n    box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5);\n  }\n  .seg__btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 7px;\n    height: 38px;\n    padding: 0 18px;\n    background: transparent;\n    border: 0;\n    border-radius: 999px;\n    font-family: inherit;\n    font-size: 13.5px;\n    font-weight: 700;\n    color: var(--snl-fg-muted);\n    cursor: pointer;\n  }\n  .seg__btn--on { background: var(--snl-mint); color: var(--snl-ink); }\n  .seg__btn:active { transform: translateY(1px); }\n\n  .verkennen {\n    grid-template-columns: 1fr;\n    padding: 8px;\n    gap: 8px;\n    position: relative;\n    /* GEEN height: 100% hier — `.verkennen` is een flex-kind náást de\n       `.mobilebar`. height:100% zou 100% van de wrap claimen bóvenop de\n       mobilebar → totaal > viewport → de pagina scrollt. flex:1 + min-height:0\n       (uit de desktop-basis) vult juist netjes de resthoogte. De single-column\n       grid stretcht de map-cel naar die hoogte. */\n    flex: 1;\n    min-height: 0;\n  }\n  .verkennen--list .vk-map { display: none; }\n  .verkennen--map .vk-left { display: none; }\n  .verkennen--map { padding: 0; }\n  .vk-left { border-radius: 14px; padding: 8px; }\n  /* Clear the fixed Lijst/Kaart pill (+tabbar) so the last cards are reachable. */\n  .vk-left__list { padding-bottom: 150px; }\n  .vk-map { border-radius: 0; }\n  /* Legend sits above the fixed Lijst/Kaart pill (bottom ~94px + ~46px tall) so\n     the two don't overlap in map view. */\n  .vk-map__legend { right: 10px; bottom: 150px; padding: 8px 10px; }\n}\n</style>\n","<template>\n  <Teleport to=\"body\">\n    <Transition name=\"fp\">\n      <div\n        v-if=\"open\"\n        class=\"filterpanel\"\n        role=\"dialog\"\n        aria-modal=\"true\"\n        aria-label=\"Filters\"\n        @click.self=\"emit('close')\"\n        @keydown.esc=\"emit('close')\"\n      >\n        <div class=\"filterpanel__sheet\">\n          <!-- Header -->\n          <header class=\"filterpanel__head\">\n            <h2 class=\"filterpanel__title\">Filters</h2>\n            <button type=\"button\" class=\"filterpanel__clear\" @click=\"emit('reset')\">Wis alles</button>\n            <button\n              ref=\"closeBtnEl\"\n              type=\"button\"\n              class=\"filterpanel__close\"\n              aria-label=\"Sluiten\"\n              @click=\"emit('close')\"\n            >\n              <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                <path d=\"M18 6 6 18M6 6l12 12\"/>\n              </svg>\n            </button>\n          </header>\n\n          <!-- Scrollable body -->\n          <div class=\"filterpanel__body\">\n            <!-- Search -->\n            <label class=\"filterpanel__search\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-fg-muted)\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                <circle cx=\"11\" cy=\"11\" r=\"7\"/>\n                <path d=\"m20 20-3.5-3.5\"/>\n              </svg>\n              <input\n                v-model=\"query\"\n                type=\"search\"\n                placeholder=\"Zoek bedrijfsnaam, stad of adres…\"\n                aria-label=\"Zoek locatie\"\n              />\n              <button\n                v-if=\"query\"\n                type=\"button\"\n                class=\"filterpanel__searchclear\"\n                aria-label=\"Wis zoekterm\"\n                @click=\"query = ''\"\n              >\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                  <path d=\"M18 6 6 18M6 6l12 12\"/>\n                </svg>\n              </button>\n            </label>\n\n            <!-- Regio -->\n            <AccordionSection title=\"Regio\" :summary=\"region\" :collapsible=\"collapsible\">\n              <button\n                v-for=\"r in regionOptions\"\n                :key=\"r\"\n                type=\"button\"\n                class=\"filterpanel__opt\"\n                :class=\"{ 'is-on': r === region }\"\n                @click=\"emit('selectRegion', r)\"\n              >\n                <span class=\"filterpanel__optlbl\">{{ r }}</span>\n                <svg v-if=\"r === region\" class=\"filterpanel__check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 13l4 4L19 7\"/></svg>\n              </button>\n            </AccordionSection>\n\n            <!-- Soort -->\n            <AccordionSection title=\"Soort\" :summary=\"soortSummary\" :collapsible=\"collapsible\">\n              <button\n                v-for=\"c in categoryOptions\"\n                :key=\"c\"\n                type=\"button\"\n                class=\"filterpanel__opt\"\n                :class=\"{ 'is-on': isCategoryOn(c) }\"\n                @click=\"emit('toggleType', c)\"\n              >\n                <span class=\"filterpanel__optlbl\">{{ typeLabel(c) }}</span>\n                <svg v-if=\"isCategoryOn(c)\" class=\"filterpanel__check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 13l4 4L19 7\"/></svg>\n              </button>\n            </AccordionSection>\n\n            <!-- Geschiktheid — master \"Alle geschiktheden\" + the four levels.\n                 No \"Zonder analyse\" row: untick every level to show the\n                 without-analysis backlog (empty selection). -->\n            <AccordionSection title=\"Geschiktheid\" :summary=\"geschiktheidSummary\" :collapsible=\"collapsible\">\n              <button type=\"button\" class=\"filterpanel__opt\" :class=\"{ 'is-on': isAllBucketsOn }\" @click=\"emit('toggleAllBuckets')\">\n                <span class=\"filterpanel__optlbl\">Alle geschiktheden</span>\n                <svg v-if=\"isAllBucketsOn\" class=\"filterpanel__check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 13l4 4L19 7\"/></svg>\n              </button>\n              <div class=\"filterpanel__sep\"></div>\n              <button\n                v-for=\"b in SCORED_BUCKET_OPTIONS\"\n                :key=\"b.id\"\n                type=\"button\"\n                class=\"filterpanel__opt\"\n                :class=\"{ 'is-on': isBucketOn(b.id) }\"\n                @click=\"emit('toggleBucket', b.id)\"\n              >\n                <span class=\"filterpanel__optlbl\">{{ b.label }}<span v-if=\"b.hint\" class=\"filterpanel__hint\">{{ b.hint }}</span></span>\n                <svg v-if=\"isBucketOn(b.id)\" class=\"filterpanel__check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 13l4 4L19 7\"/></svg>\n              </button>\n            </AccordionSection>\n\n            <!-- Feedback -->\n            <AccordionSection title=\"Feedback\" :summary=\"feedbackSummary\" :collapsible=\"collapsible\">\n              <button\n                v-for=\"f in FEEDBACK_OPTIONS\"\n                :key=\"f.id\"\n                type=\"button\"\n                class=\"filterpanel__opt\"\n                :class=\"{ 'is-on': feedbackFilter === f.id }\"\n                @click=\"emit('selectFeedback', f.id)\"\n              >\n                <span class=\"filterpanel__optlbl\">{{ f.label }}</span>\n                <svg v-if=\"feedbackFilter === f.id\" class=\"filterpanel__check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 13l4 4L19 7\"/></svg>\n              </button>\n            </AccordionSection>\n\n            <!-- Mobile-equivalent of the desktop #subnavExtras slot: extra\n                 filter-controls (bv. inwoners/radius in het scoutmap-combo\n                 prototype) renderen hier als panel-secties. No-op wanneer de\n                 consumer de slot niet vult → live PWA ongewijzigd. -->\n            <slot name=\"extras\" />\n          </div>\n\n          <!-- Fixed apply button -->\n          <footer class=\"filterpanel__foot\">\n            <button type=\"button\" class=\"filterpanel__apply\" @click=\"emit('close')\">\n              {{ resultCount === 1 ? \"Toon 1 locatie\" : `Toon ${resultCount} locaties` }}\n            </button>\n          </footer>\n        </div>\n      </div>\n    </Transition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref, watch } from \"vue\";\nimport AccordionSection from \"./AccordionSection.vue\";\nimport { type ScoutBucket } from \"../lib/scoutScore\";\nimport { ALL_SCORED_BUCKETS, type FeedbackFilter } from \"../lib/verkennenFilter\";\nimport { FEEDBACK_OPTIONS, SCORED_BUCKET_OPTIONS, typeLabel } from \"../lib/verkennenOptions\";\n\n// Presentational only: the panel renders the current filter state and emits the\n// user's intent. All mutation logic lives in VerkennenView's handlers (shared\n// with the desktop dropdown toolbar), so there's a single source of truth.\nconst props = defineProps<{\n  open: boolean;\n  region: string;\n  selectedTypes: string[];\n  selectedBuckets: ScoutBucket[];\n  feedbackFilter: FeedbackFilter;\n  regionOptions: string[];\n  categoryOptions: string[];\n  resultCount: number;\n  /** Maakt elke groep inklapbaar (accordion). Default false → altijd-open,\n      identiek aan het bestaande live-PWA-gedrag. */\n  collapsible?: boolean;\n}>();\n\nconst emit = defineEmits<{\n  selectRegion: [region: string];\n  toggleType: [type: string];\n  toggleBucket: [bucket: ScoutBucket];\n  toggleAllBuckets: [];\n  selectFeedback: [feedback: FeedbackFilter];\n  reset: [];\n  close: [];\n}>();\n\n// query is the one field with no transform, so a plain two-way bind is cleanest.\nconst query = defineModel<string>(\"query\", { required: true });\n\nconst closeBtnEl = ref<HTMLButtonElement | null>(null);\n\n// Read-only derivations of the checkmark state (no mutation — that goes via emit).\n// \"Select all\" multi-select: an empty selection = \"all\", so every type renders\n// ticked when nothing is explicitly chosen (mutation logic lives in the view).\nfunction isCategoryOn(c: string): boolean {\n  return props.selectedTypes.length === 0 || props.selectedTypes.includes(c);\n}\nfunction isBucketOn(id: ScoutBucket): boolean {\n  return props.selectedBuckets.includes(id);\n}\n// \"Alle geschiktheden\" master = all four scored levels selected (order-independent).\nconst isAllBucketsOn = computed(\n  () =>\n    props.selectedBuckets.length === ALL_SCORED_BUCKETS.length &&\n    ALL_SCORED_BUCKETS.every((b) => props.selectedBuckets.includes(b)),\n);\n\n// Korte samenvatting van de huidige keuze per groep — getoond in de ingeklapte\n// AccordionSection-kop (alleen relevant wanneer collapsible).\nconst soortSummary = computed(() => {\n  const n = props.selectedTypes.length;\n  if (n === 0) return \"Alle\";\n  if (n === 1) return typeLabel(props.selectedTypes[0]);\n  return `${n} soorten`;\n});\nconst geschiktheidSummary = computed(() => {\n  if (props.selectedBuckets.length === 0) return \"Zonder analyse\";\n  if (isAllBucketsOn.value) return \"Alle\";\n  const n = props.selectedBuckets.length;\n  return n === 1 ? \"1 gekozen\" : `${n} gekozen`;\n});\nconst feedbackSummary = computed(\n  () => FEEDBACK_OPTIONS.find((f) => f.id === props.feedbackFilter)?.label ?? \"\",\n);\n\n// Lock background scroll while open and move focus into the panel.\nlet lastFocus: HTMLElement | null = null;\nwatch(\n  () => props.open,\n  async (open) => {\n    document.body.style.overflow = open ? \"hidden\" : \"\";\n    if (open) {\n      lastFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n      await nextTick();\n      closeBtnEl.value?.focus();\n    } else {\n      lastFocus?.focus();\n      lastFocus = null;\n    }\n  },\n);\n</script>\n\n<style scoped>\n.filterpanel {\n  position: fixed;\n  inset: 0;\n  z-index: 9000;\n  display: flex;\n  background: rgba(8, 12, 14, 0.62);\n  backdrop-filter: blur(8px);\n  -webkit-backdrop-filter: blur(8px);\n}\n[data-theme=\"light\"] .filterpanel { background: rgba(18, 23, 26, 0.32); }\n\n.filterpanel__sheet {\n  display: flex;\n  flex-direction: column;\n  width: 95vw;\n  max-width: 420px;\n  height: 100%;\n  background: var(--snl-surface);\n  border-right: 1px solid var(--snl-line);\n  box-shadow: 0 0 60px -10px rgba(0, 0, 0, 0.6);\n  /* safe-area: panel hugs the left edge / notch */\n  padding-left: env(safe-area-inset-left);\n}\n\n/* Header */\n.filterpanel__head {\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: calc(16px + env(safe-area-inset-top)) 16px 14px;\n  border-bottom: 1px solid var(--snl-line);\n}\n.filterpanel__title {\n  margin: 0;\n  flex: 1;\n  font-size: 18px;\n  font-weight: 800;\n  letter-spacing: -0.015em;\n  color: var(--snl-fg);\n}\n.filterpanel__clear {\n  background: transparent;\n  border: 0;\n  padding: 6px 4px;\n  color: var(--snl-mint);\n  font-family: inherit;\n  font-size: 13px;\n  font-weight: 600;\n  cursor: pointer;\n}\n.filterpanel__clear:hover { text-decoration: underline; text-underline-offset: 3px; }\n.filterpanel__close {\n  display: grid;\n  place-items: center;\n  width: 36px;\n  height: 36px;\n  border-radius: 10px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line);\n  color: var(--snl-fg);\n  cursor: pointer;\n}\n.filterpanel__close:hover { background: var(--snl-surface-3); }\n\n/* Body */\n.filterpanel__body {\n  flex: 1;\n  min-height: 0;\n  overflow-y: auto;\n  padding: 14px 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n}\n\n.filterpanel__search {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  height: 42px;\n  padding: 0 12px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line);\n  border-radius: 12px;\n}\n.filterpanel__search:focus-within { border-color: rgba(143, 204, 177, 0.4); }\n.filterpanel__search input {\n  flex: 1;\n  min-width: 0;\n  background: transparent;\n  border: 0;\n  outline: 0;\n  font-family: inherit;\n  font-size: 14px;\n  color: var(--snl-fg);\n}\n.filterpanel__search input::placeholder { color: var(--snl-fg-placeholder); }\n.filterpanel__searchclear {\n  display: grid;\n  place-items: center;\n  padding: 4px;\n  background: transparent;\n  border: 0;\n  border-radius: 4px;\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n}\n.filterpanel__searchclear:hover { background: var(--snl-surface-3); }\n\n.filterpanel__group { display: flex; flex-direction: column; gap: 2px; }\n.filterpanel__grouptitle {\n  margin: 0 0 6px;\n  font-size: 11px;\n  font-weight: 800;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n}\n\n.filterpanel__opt {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 8px;\n  width: 100%;\n  min-height: 44px;\n  padding: 8px 12px;\n  background: transparent;\n  border: 0;\n  border-radius: 10px;\n  text-align: left;\n  font-family: inherit;\n  font-size: 14px;\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n}\n.filterpanel__opt:hover { background: var(--snl-surface-2); color: var(--snl-fg); }\n.filterpanel__opt.is-on { color: var(--snl-mint); background: var(--snl-mint-soft); }\n.filterpanel__optlbl { display: inline-flex; align-items: baseline; gap: 8px; }\n.filterpanel__hint { font-size: 11.5px; color: var(--snl-fg-placeholder); }\n.filterpanel__check {\n  width: 16px;\n  height: 16px;\n  flex-shrink: 0;\n  fill: none;\n  stroke: var(--snl-mint);\n  stroke-width: 2.6;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n}\n.filterpanel__sep { height: 1px; margin: 5px 8px; background: var(--snl-line); }\n\n/* Fixed footer */\n.filterpanel__foot {\n  flex-shrink: 0;\n  padding: 12px 16px calc(12px + env(safe-area-inset-bottom));\n  border-top: 1px solid var(--snl-line);\n  background: var(--snl-surface);\n}\n.filterpanel__apply {\n  width: 100%;\n  height: 50px;\n  border: 0;\n  border-radius: 14px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-family: inherit;\n  font-size: 15px;\n  font-weight: 800;\n  letter-spacing: -0.01em;\n  cursor: pointer;\n  transition: filter 0.12s, transform 0.1s var(--ease-out);\n}\n.filterpanel__apply:hover { filter: brightness(1.05); }\n.filterpanel__apply:active { transform: scale(0.99); }\n\n/* Transition: backdrop fades, sheet slides in from the left */\n.fp-enter-active,\n.fp-leave-active { transition: opacity 0.2s var(--ease-out); }\n.fp-enter-from,\n.fp-leave-to { opacity: 0; }\n.fp-enter-active .filterpanel__sheet,\n.fp-leave-active .filterpanel__sheet { transition: transform 0.24s var(--ease-spring); }\n.fp-enter-from .filterpanel__sheet,\n.fp-leave-to .filterpanel__sheet { transform: translateX(-100%); }\n</style>\n","<template>\n  <section class=\"acc\" :class=\"{ 'acc--open': isOpen }\">\n    <!-- Inklapbaar: tikbare kop met chevron + (ingeklapt) huidige keuze. -->\n    <button\n      v-if=\"collapsible\"\n      type=\"button\"\n      class=\"acc__head\"\n      :aria-expanded=\"open\"\n      @click=\"open = !open\"\n    >\n      <span class=\"acc__title\">{{ title }}</span>\n      <span v-if=\"summary && !open\" class=\"acc__summary\">{{ summary }}</span>\n      <svg class=\"acc__chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"m6 9 6 6 6-6\"/>\n      </svg>\n    </button>\n    <!-- Statisch (collapsible=false): kop als gewone, altijd-zichtbare titel.\n         Matcht de bestaande .filterpanel__grouptitle look → live PWA blijft\n         visueel gelijk. -->\n    <h3 v-else class=\"acc__statictitle\">{{ title }}</h3>\n\n    <div v-show=\"isOpen\" class=\"acc__body\" :class=\"{ 'acc__body--static': !collapsible }\">\n      <slot />\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\n\n// Inklapbare (of statische) sectie voor het FilterPanel. Bij collapsible:\n//   kop = titel + (ingeklapt) huidige keuze + chevron; body via `v-show` zodat\n//   slider-/kaart-/optie-state behouden blijft. Standaard dicht voor een compact\n//   panel. Bij collapsible=false rendert het als een gewone, altijd-open groep\n//   (de live PWA-modus).\nconst props = withDefaults(\n  defineProps<{\n    title: string;\n    summary?: string;\n    collapsible?: boolean;\n    defaultOpen?: boolean;\n  }>(),\n  { collapsible: true, defaultOpen: false },\n);\nconst open = ref(props.defaultOpen);\n// Statische modus is altijd \"open\".\nconst isOpen = computed(() => !props.collapsible || open.value);\n</script>\n\n<style scoped>\n.acc { display: flex; flex-direction: column; }\n.acc__head {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  width: 100%;\n  padding: 6px 0;\n  background: transparent;\n  border: 0;\n  cursor: pointer;\n  font-family: inherit;\n  text-align: left;\n}\n.acc__title,\n.acc__statictitle {\n  font-size: 11px;\n  font-weight: 800;\n  letter-spacing: 0.06em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n}\n.acc__title { margin-right: auto; } /* duwt summary + chevron naar rechts */\n.acc__statictitle { margin: 0 0 6px; } /* identiek aan .filterpanel__grouptitle */\n.acc__summary {\n  font-size: 12.5px;\n  font-weight: 700;\n  color: var(--snl-fg);\n  font-variant-numeric: tabular-nums;\n  white-space: nowrap;\n}\n.acc__chev {\n  flex-shrink: 0;\n  color: var(--snl-fg-muted);\n  transition: transform 0.2s var(--ease-out, ease);\n}\n.acc--open .acc__chev { transform: rotate(180deg); }\n/* Body stapelt z'n kinderen (optieknoppen óf een control) net als\n   .filterpanel__group (gap 2px). Een enkel control-kind merkt de gap niet. */\n.acc__body {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  padding-top: 8px;\n}\n/* Statisch: titel-margin (6px) + 2px = 8px tot de eerste knop, gelijk aan de\n   oude groep-spacing. */\n.acc__body--static { padding-top: 2px; }\n</style>\n","import { createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment, renderSlot as _renderSlot, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives } from \"vue\"\n\nconst _hoisted_1 = [\"aria-expanded\"]\nconst _hoisted_2 = { class: \"acc__title\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"acc__summary\"\n}\nconst _hoisted_4 = { class: \"acc__statictitle\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", {\n    class: _normalizeClass([\"acc\", { 'acc--open': $setup.isOpen }])\n  }, [\n    _createCommentVNode(\" Inklapbaar: tikbare kop met chevron + (ingeklapt) huidige keuze. \"),\n    ($props.collapsible)\n      ? (_openBlock(), _createElementBlock(\"button\", {\n          key: 0,\n          type: \"button\",\n          class: \"acc__head\",\n          \"aria-expanded\": $setup.open,\n          onClick: _cache[0] || (_cache[0] = $event => ($setup.open = !$setup.open))\n        }, [\n          _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.title), 1 /* TEXT */),\n          ($props.summary && !$setup.open)\n            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString($props.summary), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true),\n          _cache[1] || (_cache[1] = _createElementVNode(\"svg\", {\n            class: \"acc__chev\",\n            width: \"16\",\n            height: \"16\",\n            viewBox: \"0 0 24 24\",\n            fill: \"none\",\n            stroke: \"currentColor\",\n            \"stroke-width\": \"2.2\",\n            \"stroke-linecap\": \"round\",\n            \"stroke-linejoin\": \"round\",\n            \"aria-hidden\": \"true\"\n          }, [\n            _createElementVNode(\"path\", { d: \"m6 9 6 6 6-6\" })\n          ], -1 /* CACHED */))\n        ], 8 /* PROPS */, _hoisted_1))\n      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n          _createCommentVNode(\" Statisch (collapsible=false): kop als gewone, altijd-zichtbare titel.\\n         Matcht de bestaande .filterpanel__grouptitle look → live PWA blijft\\n         visueel gelijk. \"),\n          _createElementVNode(\"h3\", _hoisted_4, _toDisplayString($props.title), 1 /* TEXT */)\n        ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)),\n    _withDirectives(_createElementVNode(\"div\", {\n      class: _normalizeClass([\"acc__body\", { 'acc__body--static': !$props.collapsible }])\n    }, [\n      _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n    ], 2 /* CLASS */), [\n      [_vShow, $setup.isOpen]\n    ])\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AccordionSection.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AccordionSection.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AccordionSection.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/AccordionSection.vue\";script.__scopeId = \"data-v-56cb8b94\";export default script;","// Pure filter logic for the Verkennen tab. Extracted from VerkennenView.vue so it\n// can be unit-tested (the .vue body itself isn't type-checked or testable in this\n// stack — see the webhare-vue-stack skill). The view builds a VerkennenCriteria\n// from its reactive filter state and calls filterLocations().\n//\n// The four filter axes are deliberately independent so every combination is valid\n// — e.g. \"Zeer geschikt\" + \"Zonder feedback\" is the field agent's working list of\n// good locations nobody has reviewed yet, which the old single chip-group couldn't\n// express.\n\nimport { scoutBucket, type ScoutBucket } from \"./scoutScore\";\nimport type { LocationSummary } from \"./types\";\n\nexport type FeedbackFilter = \"all\" | \"with\" | \"without\";\n\nexport interface VerkennenCriteria {\n  // null = all regions; otherwise the province must match exactly.\n  region: string | null;\n  // Empty = all soorten; otherwise locationType must be one of these.\n  types: string[];\n  // Holds the SELECTED scored buckets (the four Geschiktheid levels). A location\n  // with a score is shown iff its bucket is in here. An EMPTY array means \"show\n  // only locations without analysis\" — the menu has no separate \"Zonder analyse\"\n  // row; you reach it by unticking every scored level. (An explicit\n  // [\"geen-analyse\"] is also accepted by the filter as the same thing, for\n  // robustness and legacy URLs.)\n  buckets: ScoutBucket[];\n  feedback: FeedbackFilter;\n  // Free-text match against company name + city + address (case-insensitive).\n  query: string;\n}\n\nexport function filterLocations(\n  locations: LocationSummary[],\n  criteria: VerkennenCriteria,\n): LocationSummary[] {\n  const { region, types, buckets, feedback, query } = criteria;\n  const q = query.trim().toLowerCase();\n  const bucketSet = buckets.length > 0 ? new Set(buckets) : null;\n\n  return locations.filter((l) => {\n    if (region !== null && l.province !== region) return false;\n    if (types.length > 0 && (l.locationType === null || !types.includes(l.locationType))) return false;\n    const bucket = scoutBucket(l.latestScore);\n    if (bucketSet) {\n      // One or more scored levels selected: show only those (without-analysis excluded).\n      if (!bucketSet.has(bucket)) return false;\n    } else {\n      // Empty selection = show only locations without analysis.\n      if (bucket !== \"geen-analyse\") return false;\n    }\n    if (feedback === \"with\" && !l.hasFeedback) return false;\n    if (feedback === \"without\" && l.hasFeedback) return false;\n    if (q && !`${l.companyName} ${l.city ?? \"\"} ${l.address}`.toLowerCase().includes(q)) return false;\n    return true;\n  });\n}\n\n// Sort by AI-score for the Verkennen list: highest score first so the most\n// suitable locations sit at the top. Locations without an analysis\n// (latestScore === null) sink to the bottom. Ties — including all the\n// without-analysis rows among themselves — break on company name (nl) for a\n// deterministic order. Returns a NEW array (does not mutate the input), so the\n// caller can sort a filtered result without side effects. Note: 0 is a real\n// completed score and ranks above null, consistent with scoutBucket().\nexport function sortByScoreDesc(locations: LocationSummary[]): LocationSummary[] {\n  return [...locations].sort((a, b) => {\n    const sa = a.latestScore;\n    const sb = b.latestScore;\n    if (sa === null && sb === null) return a.companyName.localeCompare(b.companyName, \"nl\");\n    if (sa === null) return 1; // a has no analysis → after b\n    if (sb === null) return -1; // b has no analysis → after a\n    if (sb !== sa) return sb - sa; // higher score first\n    return a.companyName.localeCompare(b.companyName, \"nl\");\n  });\n}\n\n// ---------------------------------------------------------------------------\n// Filter-state serialization. The Verkennen view persists its filter state in\n// localStorage so a reload restores it (the URL mirroring was removed — it\n// clashed with the stored state). filtersToQuery/parseCriteria produce/consume a\n// compact record of only the non-default axes; serializeCriteria/parseStoredCriteria\n// (below) wrap that record in a JSON string for storage.\n// ---------------------------------------------------------------------------\n\n// Every analyzed (scored) bucket — what the \"Alle geschiktheden\" master selects:\n// locations that have a completed analysis regardless of how they scored.\n// Distinct from DEFAULT_BUCKETS below: this is \"all analyzed\", the default is\n// \"the worthwhile ones\". The Verkennen view's master shortcut/indicator compares\n// to this set.\nexport const ALL_SCORED_BUCKETS: ScoutBucket[] = [\"zeer-geschikt\", \"geschikt\", \"mogelijk\", \"niet-geschikt\"];\n\n// Default suitability selection when the Verkennen view opens. We hide both the\n// scoreless locations AND \"Niet geschikt\" by default, so a field agent lands on\n// the locations actually worth visiting; \"Niet geschikt\" stays one tick away.\n// Owned here so the view and the URL serializer agree on what \"default\" means.\nexport const DEFAULT_BUCKETS: ScoutBucket[] = [\"zeer-geschikt\", \"geschikt\", \"mogelijk\"];\n\n// Toggle one of the four scored Geschiktheid levels. Plain multi-select: flips\n// membership of `id`. Unticking the last level yields [] — which the filter reads\n// as \"show only without-analysis\" (the menu has no separate \"Zonder analyse\"\n// row). `id` is always one of the four scored buckets; \"geen-analyse\" is never\n// passed here.\nexport function toggleBucketSelection(current: ScoutBucket[], id: ScoutBucket): ScoutBucket[] {\n  return current.includes(id) ? current.filter((b) => b !== id) : [...current, id];\n}\n\n// Toggle one Soort (locationType) in the selection. This is a standard \"select\n// all\" multi-select with a FORGIVING empty state: an empty selection means \"all\n// soorten\" (no filter, every type shown), so toggling from [] unticks a single\n// type into \"all-except-that\", and any operation that ends up covering every\n// available type is normalized back to [] (the canonical \"all\"). Consequence:\n// unticking your last explicit pick returns to \"all\" rather than an empty list —\n// unlike the Geschiktheid buckets, Soort has no meaningful \"none\"/\"without\"\n// state. `allTypes` is the full set of available locationType values (data-\n// derived), needed to expand \"all\" and to detect completeness.\nexport function toggleTypeSelection(current: string[], id: string, allTypes: string[]): string[] {\n  let next: string[];\n  if (current.length === 0) {\n    // Currently \"all\" (implicit): unticking one leaves every other type.\n    next = allTypes.filter((t) => t !== id);\n  } else if (current.includes(id)) {\n    next = current.filter((t) => t !== id);\n  } else {\n    next = [...current, id];\n  }\n  // Covering every available type == \"all\" → normalize to the canonical [].\n  return allTypes.length > 0 && allTypes.every((t) => next.includes(t)) ? [] : next;\n}\n\n// The four scored levels that can appear in `buckets`. \"geen-analyse\" is NOT here\n// — it's represented by an empty selection, not stored as a value.\nconst SCORED_BUCKETS = new Set<ScoutBucket>([\n  \"zeer-geschikt\",\n  \"geschikt\",\n  \"mogelijk\",\n  \"niet-geschikt\",\n]);\nconst VALID_FEEDBACK = new Set<FeedbackFilter>([\"all\", \"with\", \"without\"]);\n\n// Set-based comparison so the order of the bucket array doesn't matter when\n// deciding whether the selection equals the default.\nfunction sameBucketSet(a: ScoutBucket[], b: ScoutBucket[]): boolean {\n  if (a.length !== b.length) return false;\n  const setB = new Set(b);\n  return a.every((x) => setB.has(x));\n}\n\n// Number of filter axes that differ from their default — drives the badge on the\n// mobile \"Filters\" button. Buckets count as active when the selection differs\n// from DEFAULT_BUCKETS (set-based, so order doesn't matter); an empty selection\n// (\"Alle\") is itself a non-default and counts. A whitespace-only query is not\n// active (mirrors filtersToQuery, which trims).\nexport function activeFilterCount(criteria: VerkennenCriteria): number {\n  let count = 0;\n  if (criteria.region !== null) count++;\n  if (criteria.types.length > 0) count++;\n  if (!sameBucketSet(criteria.buckets, DEFAULT_BUCKETS)) count++;\n  if (criteria.feedback !== \"all\") count++;\n  if (criteria.query.trim()) count++;\n  return count;\n}\n\nfunction splitCsv(value: string | undefined): string[] {\n  if (!value) return [];\n  return value.split(\",\").map((s) => s.trim()).filter(Boolean);\n}\n\n// Build the route-query record for a criteria. Only non-default axes are\n// written. Buckets are special: the default (three best) is omitted entirely,\n// an empty selection (show without-analysis) serializes to the \"geen-analyse\"\n// sentinel, any other set to a CSV of the scored levels.\nexport function filtersToQuery(criteria: VerkennenCriteria): Record<string, string> {\n  const out: Record<string, string> = {};\n  if (criteria.region !== null) out.regio = criteria.region;\n  if (criteria.types.length > 0) out.soort = criteria.types.join(\",\");\n  if (!sameBucketSet(criteria.buckets, DEFAULT_BUCKETS)) {\n    out.score = criteria.buckets.length === 0 ? \"geen-analyse\" : criteria.buckets.join(\",\");\n  }\n  if (criteria.feedback !== \"all\") out.feedback = criteria.feedback;\n  const q = criteria.query.trim();\n  if (q) out.q = q;\n  return out;\n}\n\n// Parse a route-query record back into a criteria, falling back to defaults for\n// missing/invalid params (so a hand-edited or stale URL never breaks the view).\nexport function parseCriteria(params: Record<string, string | undefined>): VerkennenCriteria {\n  const region = params.regio?.trim() ? params.regio.trim() : null;\n  const types = splitCsv(params.soort);\n\n  let buckets: ScoutBucket[];\n  const score = params.score;\n  if (score === undefined) {\n    buckets = [...DEFAULT_BUCKETS];\n  } else {\n    const parts = splitCsv(score);\n    const scored = parts.filter((v): v is ScoutBucket => SCORED_BUCKETS.has(v as ScoutBucket));\n    if (scored.length > 0) {\n      buckets = scored;\n    } else if (parts.includes(\"geen-analyse\")) {\n      // Explicit \"show without-analysis\" (also matches a legacy [\"geen-analyse\"] URL).\n      buckets = [];\n    } else {\n      // Stale/invalid (incl. the old \"alle\" sentinel, which no longer has a meaning).\n      buckets = [...DEFAULT_BUCKETS];\n    }\n  }\n\n  const feedback = params.feedback && VALID_FEEDBACK.has(params.feedback as FeedbackFilter)\n    ? (params.feedback as FeedbackFilter)\n    : \"all\";\n  const query = params.q ?? \"\";\n\n  return { region, types, buckets, feedback, query };\n}\n\n// ---------------------------------------------------------------------------\n// localStorage persistence. serialize/parse are pure (unit-tested); the\n// load/save/has wrappers are the thin localStorage seam used by VerkennenView.\n// ---------------------------------------------------------------------------\n\nconst STORAGE_KEY = \"statiegeldnl:feedback:verkennen-filters\";\n\n/** Serialize criteria to a compact JSON string (only non-default axes). */\nexport function serializeCriteria(criteria: VerkennenCriteria): string {\n  return JSON.stringify(filtersToQuery(criteria));\n}\n\n/**\n * Parse a stored JSON string back into criteria. Absent/corrupt input (null,\n * empty, invalid JSON, non-object, non-string values) falls back to the same\n * defaults as {@link parseCriteria} on a stale URL — never throws.\n */\nexport function parseStoredCriteria(raw: string | null): VerkennenCriteria {\n  if (!raw) return parseCriteria({});\n  let data: unknown;\n  try {\n    data = JSON.parse(raw);\n  } catch {\n    return parseCriteria({});\n  }\n  if (typeof data !== \"object\" || data === null || Array.isArray(data)) return parseCriteria({});\n  // Honor only string values; everything else falls back to its per-axis default.\n  const record: Record<string, string | undefined> = {};\n  for (const [k, v] of Object.entries(data as Record<string, unknown>)) {\n    if (typeof v === \"string\") record[k] = v;\n  }\n  return parseCriteria(record);\n}\n\n/** True when filters were ever persisted (distinguishes a first visit). */\nexport function hasStoredCriteria(): boolean {\n  try {\n    return localStorage.getItem(STORAGE_KEY) !== null;\n  } catch {\n    return false;\n  }\n}\n\n/** Read criteria from localStorage, falling back to defaults. Best-effort. */\nexport function loadStoredCriteria(): VerkennenCriteria {\n  try {\n    return parseStoredCriteria(localStorage.getItem(STORAGE_KEY));\n  } catch {\n    return parseCriteria({});\n  }\n}\n\n/** Persist criteria to localStorage. Best-effort (quota/denied swallowed). */\nexport function saveCriteria(criteria: VerkennenCriteria): void {\n  try {\n    localStorage.setItem(STORAGE_KEY, serializeCriteria(criteria));\n  } catch {\n    /* quota/denied — silent */\n  }\n}\n","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode, renderSlot as _renderSlot, withModifiers as _withModifiers, withKeys as _withKeys, Transition as _Transition, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"filterpanel__sheet\" }\nconst _hoisted_2 = { class: \"filterpanel__head\" }\nconst _hoisted_3 = { class: \"filterpanel__body\" }\nconst _hoisted_4 = { class: \"filterpanel__search\" }\nconst _hoisted_5 = [\"onClick\"]\nconst _hoisted_6 = { class: \"filterpanel__optlbl\" }\nconst _hoisted_7 = {\n  key: 0,\n  class: \"filterpanel__check\",\n  viewBox: \"0 0 24 24\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_8 = [\"onClick\"]\nconst _hoisted_9 = { class: \"filterpanel__optlbl\" }\nconst _hoisted_10 = {\n  key: 0,\n  class: \"filterpanel__check\",\n  viewBox: \"0 0 24 24\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_11 = {\n  key: 0,\n  class: \"filterpanel__check\",\n  viewBox: \"0 0 24 24\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = { class: \"filterpanel__optlbl\" }\nconst _hoisted_14 = {\n  key: 0,\n  class: \"filterpanel__hint\"\n}\nconst _hoisted_15 = {\n  key: 0,\n  class: \"filterpanel__check\",\n  viewBox: \"0 0 24 24\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_16 = [\"onClick\"]\nconst _hoisted_17 = { class: \"filterpanel__optlbl\" }\nconst _hoisted_18 = {\n  key: 0,\n  class: \"filterpanel__check\",\n  viewBox: \"0 0 24 24\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_19 = { class: \"filterpanel__foot\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createVNode(_Transition, { name: \"fp\" }, {\n      default: _withCtx(() => [\n        ($props.open)\n          ? (_openBlock(), _createElementBlock(\"div\", {\n              key: 0,\n              class: \"filterpanel\",\n              role: \"dialog\",\n              \"aria-modal\": \"true\",\n              \"aria-label\": \"Filters\",\n              onClick: _cache[6] || (_cache[6] = _withModifiers($event => ($setup.emit('close')), [\"self\"])),\n              onKeydown: _cache[7] || (_cache[7] = _withKeys($event => ($setup.emit('close')), [\"esc\"]))\n            }, [\n              _createElementVNode(\"div\", _hoisted_1, [\n                _createCommentVNode(\" Header \"),\n                _createElementVNode(\"header\", _hoisted_2, [\n                  _cache[9] || (_cache[9] = _createElementVNode(\"h2\", { class: \"filterpanel__title\" }, \"Filters\", -1 /* CACHED */)),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"filterpanel__clear\",\n                    onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('reset')))\n                  }, \"Wis alles\"),\n                  _createElementVNode(\"button\", {\n                    ref: \"closeBtnEl\",\n                    type: \"button\",\n                    class: \"filterpanel__close\",\n                    \"aria-label\": \"Sluiten\",\n                    onClick: _cache[1] || (_cache[1] = $event => ($setup.emit('close')))\n                  }, _cache[8] || (_cache[8] = [\n                    _createElementVNode(\"svg\", {\n                      width: \"18\",\n                      height: \"18\",\n                      viewBox: \"0 0 24 24\",\n                      fill: \"none\",\n                      stroke: \"currentColor\",\n                      \"stroke-width\": \"2.2\",\n                      \"stroke-linecap\": \"round\",\n                      \"stroke-linejoin\": \"round\",\n                      \"aria-hidden\": \"true\"\n                    }, [\n                      _createElementVNode(\"path\", { d: \"M18 6 6 18M6 6l12 12\" })\n                    ], -1 /* CACHED */)\n                  ]), 512 /* NEED_PATCH */)\n                ]),\n                _createCommentVNode(\" Scrollable body \"),\n                _createElementVNode(\"div\", _hoisted_3, [\n                  _createCommentVNode(\" Search \"),\n                  _createElementVNode(\"label\", _hoisted_4, [\n                    _cache[11] || (_cache[11] = _createElementVNode(\"svg\", {\n                      width: \"16\",\n                      height: \"16\",\n                      viewBox: \"0 0 24 24\",\n                      fill: \"none\",\n                      stroke: \"var(--snl-fg-muted)\",\n                      \"stroke-width\": \"2.2\",\n                      \"stroke-linecap\": \"round\",\n                      \"stroke-linejoin\": \"round\",\n                      \"aria-hidden\": \"true\"\n                    }, [\n                      _createElementVNode(\"circle\", {\n                        cx: \"11\",\n                        cy: \"11\",\n                        r: \"7\"\n                      }),\n                      _createElementVNode(\"path\", { d: \"m20 20-3.5-3.5\" })\n                    ], -1 /* CACHED */)),\n                    _withDirectives(_createElementVNode(\"input\", {\n                      \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.query) = $event)),\n                      type: \"search\",\n                      placeholder: \"Zoek bedrijfsnaam, stad of adres…\",\n                      \"aria-label\": \"Zoek locatie\"\n                    }, null, 512 /* NEED_PATCH */), [\n                      [_vModelText, $setup.query]\n                    ]),\n                    ($setup.query)\n                      ? (_openBlock(), _createElementBlock(\"button\", {\n                          key: 0,\n                          type: \"button\",\n                          class: \"filterpanel__searchclear\",\n                          \"aria-label\": \"Wis zoekterm\",\n                          onClick: _cache[3] || (_cache[3] = $event => ($setup.query = ''))\n                        }, _cache[10] || (_cache[10] = [\n                          _createElementVNode(\"svg\", {\n                            width: \"12\",\n                            height: \"12\",\n                            viewBox: \"0 0 24 24\",\n                            fill: \"none\",\n                            stroke: \"currentColor\",\n                            \"stroke-width\": \"2.4\",\n                            \"stroke-linecap\": \"round\",\n                            \"stroke-linejoin\": \"round\",\n                            \"aria-hidden\": \"true\"\n                          }, [\n                            _createElementVNode(\"path\", { d: \"M18 6 6 18M6 6l12 12\" })\n                          ], -1 /* CACHED */)\n                        ])))\n                      : _createCommentVNode(\"v-if\", true)\n                  ]),\n                  _createCommentVNode(\" Regio \"),\n                  _createVNode($setup[\"AccordionSection\"], {\n                    title: \"Regio\",\n                    summary: $props.region,\n                    collapsible: $props.collapsible\n                  }, {\n                    default: _withCtx(() => [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.regionOptions, (r) => {\n                        return (_openBlock(), _createElementBlock(\"button\", {\n                          key: r,\n                          type: \"button\",\n                          class: _normalizeClass([\"filterpanel__opt\", { 'is-on': r === $props.region }]),\n                          onClick: $event => ($setup.emit('selectRegion', r))\n                        }, [\n                          _createElementVNode(\"span\", _hoisted_6, _toDisplayString(r), 1 /* TEXT */),\n                          (r === $props.region)\n                            ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_7, _cache[12] || (_cache[12] = [\n                                _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                              ])))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 10 /* CLASS, PROPS */, _hoisted_5))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ]),\n                    _: 1 /* STABLE */\n                  }, 8 /* PROPS */, [\"summary\", \"collapsible\"]),\n                  _createCommentVNode(\" Soort \"),\n                  _createVNode($setup[\"AccordionSection\"], {\n                    title: \"Soort\",\n                    summary: $setup.soortSummary,\n                    collapsible: $props.collapsible\n                  }, {\n                    default: _withCtx(() => [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.categoryOptions, (c) => {\n                        return (_openBlock(), _createElementBlock(\"button\", {\n                          key: c,\n                          type: \"button\",\n                          class: _normalizeClass([\"filterpanel__opt\", { 'is-on': $setup.isCategoryOn(c) }]),\n                          onClick: $event => ($setup.emit('toggleType', c))\n                        }, [\n                          _createElementVNode(\"span\", _hoisted_9, _toDisplayString($setup.typeLabel(c)), 1 /* TEXT */),\n                          ($setup.isCategoryOn(c))\n                            ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_10, _cache[13] || (_cache[13] = [\n                                _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                              ])))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 10 /* CLASS, PROPS */, _hoisted_8))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ]),\n                    _: 1 /* STABLE */\n                  }, 8 /* PROPS */, [\"summary\", \"collapsible\"]),\n                  _createCommentVNode(\" Geschiktheid — master \\\"Alle geschiktheden\\\" + the four levels.\\n                 No \\\"Zonder analyse\\\" row: untick every level to show the\\n                 without-analysis backlog (empty selection). \"),\n                  _createVNode($setup[\"AccordionSection\"], {\n                    title: \"Geschiktheid\",\n                    summary: $setup.geschiktheidSummary,\n                    collapsible: $props.collapsible\n                  }, {\n                    default: _withCtx(() => [\n                      _createElementVNode(\"button\", {\n                        type: \"button\",\n                        class: _normalizeClass([\"filterpanel__opt\", { 'is-on': $setup.isAllBucketsOn }]),\n                        onClick: _cache[4] || (_cache[4] = $event => ($setup.emit('toggleAllBuckets')))\n                      }, [\n                        _cache[15] || (_cache[15] = _createElementVNode(\"span\", { class: \"filterpanel__optlbl\" }, \"Alle geschiktheden\", -1 /* CACHED */)),\n                        ($setup.isAllBucketsOn)\n                          ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, _cache[14] || (_cache[14] = [\n                              _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                            ])))\n                          : _createCommentVNode(\"v-if\", true)\n                      ], 2 /* CLASS */),\n                      _cache[17] || (_cache[17] = _createElementVNode(\"div\", { class: \"filterpanel__sep\" }, null, -1 /* CACHED */)),\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.SCORED_BUCKET_OPTIONS, (b) => {\n                        return (_openBlock(), _createElementBlock(\"button\", {\n                          key: b.id,\n                          type: \"button\",\n                          class: _normalizeClass([\"filterpanel__opt\", { 'is-on': $setup.isBucketOn(b.id) }]),\n                          onClick: $event => ($setup.emit('toggleBucket', b.id))\n                        }, [\n                          _createElementVNode(\"span\", _hoisted_13, [\n                            _createTextVNode(_toDisplayString(b.label), 1 /* TEXT */),\n                            (b.hint)\n                              ? (_openBlock(), _createElementBlock(\"span\", _hoisted_14, _toDisplayString(b.hint), 1 /* TEXT */))\n                              : _createCommentVNode(\"v-if\", true)\n                          ]),\n                          ($setup.isBucketOn(b.id))\n                            ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_15, _cache[16] || (_cache[16] = [\n                                _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                              ])))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 10 /* CLASS, PROPS */, _hoisted_12))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ]),\n                    _: 1 /* STABLE */,\n                    __: [17]\n                  }, 8 /* PROPS */, [\"summary\", \"collapsible\"]),\n                  _createCommentVNode(\" Feedback \"),\n                  _createVNode($setup[\"AccordionSection\"], {\n                    title: \"Feedback\",\n                    summary: $setup.feedbackSummary,\n                    collapsible: $props.collapsible\n                  }, {\n                    default: _withCtx(() => [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.FEEDBACK_OPTIONS, (f) => {\n                        return (_openBlock(), _createElementBlock(\"button\", {\n                          key: f.id,\n                          type: \"button\",\n                          class: _normalizeClass([\"filterpanel__opt\", { 'is-on': $props.feedbackFilter === f.id }]),\n                          onClick: $event => ($setup.emit('selectFeedback', f.id))\n                        }, [\n                          _createElementVNode(\"span\", _hoisted_17, _toDisplayString(f.label), 1 /* TEXT */),\n                          ($props.feedbackFilter === f.id)\n                            ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_18, _cache[18] || (_cache[18] = [\n                                _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                              ])))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 10 /* CLASS, PROPS */, _hoisted_16))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ]),\n                    _: 1 /* STABLE */\n                  }, 8 /* PROPS */, [\"summary\", \"collapsible\"]),\n                  _createCommentVNode(\" Mobile-equivalent of the desktop #subnavExtras slot: extra\\n                 filter-controls (bv. inwoners/radius in het scoutmap-combo\\n                 prototype) renderen hier als panel-secties. No-op wanneer de\\n                 consumer de slot niet vult → live PWA ongewijzigd. \"),\n                  _renderSlot(_ctx.$slots, \"extras\", {}, undefined, true)\n                ]),\n                _createCommentVNode(\" Fixed apply button \"),\n                _createElementVNode(\"footer\", _hoisted_19, [\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"filterpanel__apply\",\n                    onClick: _cache[5] || (_cache[5] = $event => ($setup.emit('close')))\n                  }, _toDisplayString($props.resultCount === 1 ? \"Toon 1 locatie\" : `Toon ${$props.resultCount} locaties`), 1 /* TEXT */)\n                ])\n              ])\n            ], 32 /* NEED_HYDRATION */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 3 /* FORWARDED */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPanel.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPanel.vue\";script.__scopeId = \"data-v-7d3c0180\";export default script;","<template>\n  <Teleport to=\"body\">\n    <div class=\"lpanel-scrim\" @click=\"emit('close')\"></div>\n    <aside class=\"lpanel\" role=\"dialog\" aria-label=\"Locatiedetails\">\n      <button class=\"lpanel__close\" type=\"button\" aria-label=\"Sluiten\" @click=\"emit('close')\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M18 6 6 18M6 6l12 12\"/>\n        </svg>\n      </button>\n\n      <div v-if=\"isLoading\" class=\"lpanel__state\">Laden…</div>\n\n      <div v-else-if=\"!detail?.location\" class=\"lpanel__state\">\n        Locatie kon niet geladen worden.\n      </div>\n\n      <template v-else>\n        <div class=\"lpanel__body\">\n          <!-- 1. Live, interactieve Google Maps-kaart + ingeladen Street View bovenaan\n               — direct zichtbaar en beweegbaar, geen handeling nodig. Map-links\n               verborgen: het adres in het introblok hieronder is zelf de Google\n               Maps-link (TEC-90). -->\n          <LocationMap :location=\"detail.location\" :show-map-links=\"false\" street-view-mode=\"embed\" />\n\n          <!-- 2. Naam + score + klikbaar adres (→ Google Maps) + korte samenvatting\n               + compacte contactgegevens, netjes gegroepeerd onder de kaart. -->\n          <section class=\"lpanel__intro\">\n            <div class=\"lpanel__intro-top\">\n              <div class=\"lpanel__intro-head\">\n                <p v-if=\"detail.location.organizationType\" class=\"lpanel__eyebrow\">\n                  {{ detail.location.organizationType }}\n                </p>\n                <h2 class=\"lpanel__title\">{{ detail.location.companyName }}</h2>\n              </div>\n              <span\n                v-if=\"recommendation.badge\"\n                class=\"lpanel__badge\"\n                :style=\"{ color: scoreColor, borderColor: badgeBorder, background: badgeBg }\"\n              >\n                {{ recommendation.label }}<template v-if=\"overall !== null\"> · {{ overall }}</template>\n              </span>\n            </div>\n\n            <a\n              v-if=\"addressHref\"\n              :href=\"addressHref\"\n              class=\"lpanel__addr lpanel__addr--link\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                <path d=\"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\"/>\n                <circle cx=\"12\" cy=\"10\" r=\"2.5\"/>\n              </svg>\n              <span>{{ addressText }}</span>\n            </a>\n            <p v-else class=\"lpanel__addr\">{{ addressText }}</p>\n\n            <p v-if=\"summary\" class=\"lpanel__summary\">{{ summary }}</p>\n\n            <div v-if=\"hasContact\" class=\"lpanel__contact\">\n              <a\n                v-if=\"detail.location.website\"\n                :href=\"detail.location.website\"\n                class=\"lpanel__contact-link\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n              >\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                  <circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M2 12h20\"/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10Z\"/>\n                </svg>\n                <span>{{ websiteLabel }}</span>\n              </a>\n              <a\n                v-if=\"detail.location.phone\"\n                :href=\"`tel:${detail.location.phone.replace(/\\s+/g, '')}`\"\n                class=\"lpanel__contact-link\"\n              >\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                  <path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92Z\"/>\n                </svg>\n                <span>{{ detail.location.phone }}</span>\n              </a>\n            </div>\n          </section>\n\n          <!-- 3. Score per dimensie — score + balk altijd zichtbaar; klik op een rij\n               vouwt de AI-toelichting uit (TEC-90). -->\n          <section v-if=\"hasDimensionScores\" class=\"lpanel__section\">\n            <div class=\"lpanel__section-head\">\n              <h3 class=\"lpanel__section-title\">Score per dimensie</h3>\n              <button type=\"button\" class=\"lpanel__expand-all\" @click=\"toggleAllDims\">\n                {{ allDimsOpen ? \"Alles inklappen\" : \"Alles uitklappen\" }}\n              </button>\n            </div>\n            <div class=\"lpanel__dims\">\n              <div\n                v-for=\"(d, i) in dimensionRows\"\n                :key=\"d.label\"\n                class=\"lpanel__dim\"\n                :class=\"{ 'is-open': isDimOpen(i) }\"\n              >\n                <button\n                  type=\"button\"\n                  class=\"lpanel__dim-head\"\n                  :aria-expanded=\"isDimOpen(i)\"\n                  @click=\"toggleDim(i)\"\n                >\n                  <span class=\"lpanel__dim-label\">{{ d.label }}</span>\n                  <span class=\"lpanel__dim-head-right\">\n                    <span class=\"lpanel__dim-num\" :style=\"{ color: scoutColor(d.score) }\">\n                      {{ d.score ?? \"—\" }}\n                    </span>\n                    <svg class=\"lpanel__dim-chev\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                      <path d=\"m6 9 6 6 6-6\"/>\n                    </svg>\n                  </span>\n                </button>\n                <div class=\"lpanel__dim-bar\">\n                  <div\n                    class=\"lpanel__dim-bar-fill\"\n                    :style=\"{ width: `${d.score ?? 0}%`, background: scoutColor(d.score) }\"\n                  ></div>\n                </div>\n                <div v-if=\"isDimOpen(i)\" class=\"lpanel__dim-text\">\n                  <p v-if=\"d.explanation\">{{ d.explanation }}</p>\n                  <p v-else class=\"lpanel__dim-text--empty\">Geen AI-toelichting beschikbaar.</p>\n                </div>\n              </div>\n            </div>\n          </section>\n\n          <!-- 4. Beeldmateriaal — ingeklapt; klik vouwt de gebruikte foto's uit\n               (satelliet + street view). Zonder foto's de \"Haal foto's op\"-knop. -->\n          <section class=\"lpanel__section\">\n            <button\n              type=\"button\"\n              class=\"lpanel__imgtoggle\"\n              :aria-expanded=\"imagesOpen\"\n              @click=\"imagesOpen = !imagesOpen\"\n            >\n              <span class=\"lpanel__section-title\">Beeldmateriaal</span>\n              <span class=\"lpanel__imgtoggle-right\">\n                <span class=\"lpanel__imgcount\">{{ imageCountLabel }}</span>\n                <svg class=\"lpanel__dim-chev\" :class=\"{ 'is-open': imagesOpen }\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                  <path d=\"m6 9 6 6 6-6\"/>\n                </svg>\n              </span>\n            </button>\n\n            <div v-if=\"imagesOpen\" class=\"lpanel__imgbody\">\n              <PhotoCarousel v-if=\"carouselImages.length > 0\" :images=\"carouselImages\" />\n              <div v-else class=\"lpanel__no-photos\">\n                <p class=\"lpanel__no-photos-text\">\n                  Er zijn nog geen foto's opgehaald voor deze locatie.\n                </p>\n                <button\n                  type=\"button\"\n                  class=\"lpanel__fetch-btn\"\n                  :disabled=\"fetching\"\n                  @click=\"handleFetchImages\"\n                >\n                  <template v-if=\"fetching\">Bezig met ophalen…</template>\n                  <template v-else>\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                      <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\n                      <polyline points=\"7 10 12 15 17 10\"/>\n                      <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"/>\n                    </svg>\n                    Haal foto's op\n                  </template>\n                </button>\n                <p v-if=\"fetchError\" class=\"lpanel__fetch-error\">{{ fetchError }}</p>\n              </div>\n            </div>\n          </section>\n        </div>\n\n        <footer class=\"lpanel__footer\">\n          <AddToListButton v-if=\"locationSummary\" :location=\"locationSummary\" />\n          <a class=\"lpanel__review\" :href=\"urlLocation(locationId)\">\n            Beoordelen\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n              <path d=\"M5 12h14M13 5l7 7-7 7\"/>\n            </svg>\n          </a>\n        </footer>\n      </template>\n    </aside>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, reactive, ref, watch } from \"vue\";\nimport AddToListButton from \"./AddToListButton.vue\";\nimport LocationMap from \"./LocationMap.vue\";\nimport PhotoCarousel from \"./PhotoCarousel.vue\";\nimport { fetchImagesForLocation, getLocationDetail } from \"../lib/api\";\nimport { googleMapsUrl } from \"../lib/maps\";\nimport { scoutColor, scoutRecommendation } from \"../lib/scoutScore\";\nimport { urlLocation } from \"../lib/urls\";\nimport type { ConsensusExplanations, LocationDetail, LocationSummary, ModelResult } from \"../lib/types\";\n\nconst props = defineProps<{\n  locationId: number;\n}>();\n\nconst emit = defineEmits<{\n  close: [];\n}>();\n\nconst detail = ref<LocationDetail | null>(null);\nconst isLoading = ref(true);\n\nasync function load(id: number) {\n  isLoading.value = true;\n  detail.value = null;\n  imagesOpen.value = true;\n  openDims.clear();\n  fetchError.value = null;\n  try {\n    detail.value = await getLocationDetail(id);\n  } catch (err) {\n    console.error(\"Detailpaneel laden mislukt:\", err);\n    detail.value = null;\n  } finally {\n    isLoading.value = false;\n  }\n}\n\nonMounted(() => load(props.locationId));\nwatch(() => props.locationId, (id) => load(id));\n\n// ---------------------------------------------------------------------------\n// Score / recommendation (Verkennen stoplichtschaal — bewust niet RatingBadge)\n// ---------------------------------------------------------------------------\nconst overall = computed(() => detail.value?.latestAnalysis?.consensusScores.consensusOverallScore ?? null);\nconst recommendation = computed(() => scoutRecommendation(overall.value));\nconst scoreColor = computed(() => scoutColor(overall.value));\nconst badgeBorder = computed(() => (overall.value === null ? \"var(--snl-line)\" : scoreColor.value));\nconst badgeBg = computed(() => \"color-mix(in srgb, var(--snl-bg-deep) 86%, transparent)\");\n\n// ---------------------------------------------------------------------------\n// Intro: clickable address (→ Google Maps), short summary, contact\n// ---------------------------------------------------------------------------\nconst addressText = computed<string>(() => {\n  const loc = detail.value?.location;\n  if (!loc) return \"\";\n  const parts = [\n    loc.address,\n    [loc.postalCode, loc.city].filter(Boolean).join(\" \"),\n  ].filter(Boolean);\n  return parts.join(\", \");\n});\n\nconst addressHref = computed<string | null>(() => {\n  const loc = detail.value?.location;\n  if (!loc || loc.latitude === null || loc.longitude === null) return null;\n  const label = [loc.companyName, loc.address].filter(Boolean).join(\", \") || null;\n  return googleMapsUrl({ lat: loc.latitude, lng: loc.longitude, label });\n});\n\nconst summary = computed<string | null>(() => detail.value?.latestAnalysis?.consensusConclusion ?? null);\n\nconst hasContact = computed(() => Boolean(detail.value?.location?.website || detail.value?.location?.phone));\n\nfunction stripProtocol(url: string): string {\n  return url.replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\");\n}\n\n// Show only the domain in the contact row so a long path\n// (…/shop_finder/nl_detail_384.php) doesn't wrap to a second line — the href\n// still points to the full URL.\nconst websiteLabel = computed<string | null>(() => {\n  const url = detail.value?.location?.website;\n  if (!url) return null;\n  try {\n    return new URL(url.startsWith(\"http\") ? url : `https://${url}`).hostname;\n  } catch {\n    return stripProtocol(url);\n  }\n});\n\n// ---------------------------------------------------------------------------\n// Dimension scores (expandable rows; explanation from consensusExplanations)\n// ---------------------------------------------------------------------------\nconst modelResults = computed<ModelResult[]>(() => detail.value?.latestAnalysis?.modelResults ?? []);\nconst explanations = computed<ConsensusExplanations | null>(\n  () => detail.value?.latestAnalysis?.consensusExplanations ?? null,\n);\n\nfunction averageModelScore(field: keyof ModelResult): number | null {\n  const values = modelResults.value\n    .map((mr) => mr[field])\n    .filter((v): v is number => typeof v === \"number\");\n  if (values.length === 0) return null;\n  return Math.round(values.reduce((sum, s) => sum + s, 0) / values.length);\n}\n\nconst DIMENSIONS = [\n  { label: \"Locatie & omvang\", scoreField: \"scoreNatureSize\", explanationKey: \"natureSize\" },\n  { label: \"Parkeerruimte\", scoreField: \"scoreParkingSpace\", explanationKey: \"parkingSpace\" },\n  { label: \"Bereikbaarheid\", scoreField: \"scoreAccessibility\", explanationKey: \"accessibility\" },\n  { label: \"Zichtbaarheid\", scoreField: \"scoreVisibility\", explanationKey: \"visibility\" },\n  { label: \"Extra diensten\", scoreField: \"scoreExtraServices\", explanationKey: \"extraServices\" },\n] as const;\n\nconst dimensionRows = computed(() =>\n  DIMENSIONS.map((d) => ({\n    label: d.label,\n    score: averageModelScore(d.scoreField as keyof ModelResult),\n    explanation: explanations.value?.[d.explanationKey] ?? null,\n  })),\n);\n\nconst hasDimensionScores = computed(() => dimensionRows.value.some((d) => d.score !== null));\n\nconst openDims = reactive(new Set<number>());\nfunction isDimOpen(i: number): boolean {\n  return openDims.has(i);\n}\nfunction toggleDim(i: number) {\n  if (openDims.has(i)) openDims.delete(i);\n  else openDims.add(i);\n}\n\n// \"Alles uitklappen / inklappen\" — one button next to the section title that\n// opens or closes every dimension's explanation at once.\nconst allDimsOpen = computed(\n  () => dimensionRows.value.length > 0 && openDims.size >= dimensionRows.value.length,\n);\nfunction toggleAllDims() {\n  const expandAll = !allDimsOpen.value; // capture before mutating openDims\n  openDims.clear();\n  if (expandAll) dimensionRows.value.forEach((_, i) => openDims.add(i));\n}\n\n// ---------------------------------------------------------------------------\n// Beeldmateriaal (collapsible; reuses the carousel + on-demand fetch).\n// Starts EXPANDED — the field agent wants the photos in view straight away.\n// ---------------------------------------------------------------------------\nconst imagesOpen = ref(true);\nconst fetching = ref(false);\nconst fetchError = ref<string | null>(null);\n\nconst STREETVIEW_LABELS = [\"Straat — Noord\", \"Straat — Oost\", \"Straat — Zuid\", \"Straat — West\"] as const;\n\nconst carouselImages = computed(() => {\n  const out: Array<{ url: string; label: string }> = [];\n  const images = detail.value?.images;\n  if (images?.satellite) out.push({ url: images.satellite, label: \"Satelliet\" });\n  const sv = images?.streetView ?? [];\n  for (let i = 0; i < sv.length; i++) {\n    out.push({ url: sv[i], label: STREETVIEW_LABELS[i] ?? `Straat ${i + 1}` });\n  }\n  return out;\n});\n\nconst imageCountLabel = computed(() => {\n  const n = carouselImages.value.length;\n  if (n === 0) return \"Geen\";\n  return `${n} foto${n === 1 ? \"\" : \"'s\"}`;\n});\n\nasync function handleFetchImages() {\n  if (fetching.value) return;\n  fetching.value = true;\n  fetchError.value = null;\n  try {\n    const { images } = await fetchImagesForLocation(props.locationId);\n    if (!images.satellite && images.streetView.length === 0) {\n      fetchError.value = \"Geen foto's beschikbaar voor deze locatie.\";\n      return;\n    }\n    if (detail.value) detail.value.images = images;\n  } catch (err) {\n    fetchError.value = err instanceof Error ? err.message : \"Kon foto's niet ophalen\";\n  } finally {\n    fetching.value = false;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Snapshot for AddToListButton — same minimal LocationSummary DetailView builds.\n// ---------------------------------------------------------------------------\nconst locationSummary = computed<LocationSummary | null>(() => {\n  const loc = detail.value?.location;\n  if (!loc) return null;\n  return {\n    id: loc.id,\n    companyName: loc.companyName,\n    address: loc.address,\n    city: loc.city,\n    province: loc.province,\n    latitude: loc.latitude,\n    longitude: loc.longitude,\n    analysisCount: detail.value?.feedbackCount ?? 0,\n    latestScore: overall.value,\n    requiresHumanReview: detail.value?.latestAnalysis?.requiresHumanReview ?? false,\n    hasFeedback: false,\n    locationType: loc.organizationType,\n  };\n});\n</script>\n\n<style scoped>\n.lpanel-scrim {\n  position: fixed;\n  inset: 0;\n  background: rgba(0, 0, 0, 0.35);\n  z-index: 60;\n  animation: lpanel-fade 0.18s ease both;\n}\n@keyframes lpanel-fade { from { opacity: 0; } to { opacity: 1; } }\n\n.lpanel {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  width: 440px;\n  max-width: 100vw;\n  z-index: 61;\n  display: flex;\n  flex-direction: column;\n  background: var(--snl-surface);\n  border-left: 1px solid var(--snl-line);\n  box-shadow: -20px 0 60px -20px rgba(0, 0, 0, 0.6);\n  padding-top: env(safe-area-inset-top);\n  animation: lpanel-slide-in 0.25s cubic-bezier(0.22, 0.61, 0.36, 1) both;\n}\n@keyframes lpanel-slide-in { from { transform: translateX(100%); } to { transform: translateX(0); } }\n\n.lpanel__close {\n  position: absolute;\n  top: 14px;\n  right: 14px;\n  z-index: 2;\n  display: grid;\n  place-items: center;\n  width: 32px;\n  height: 32px;\n  border-radius: 9px;\n  border: 1px solid var(--snl-line);\n  background: var(--snl-surface-2);\n  color: var(--snl-fg-muted);\n  cursor: pointer;\n  transition: background 0.12s, color 0.12s;\n}\n.lpanel__close:hover { background: var(--snl-surface-3); color: var(--snl-fg); }\n\n.lpanel__state {\n  flex: 1;\n  display: grid;\n  place-items: center;\n  color: var(--snl-fg-muted);\n  font-size: 14px;\n}\n\n.lpanel__body {\n  flex: 1;\n  overflow-y: auto;\n  padding: 22px 22px 16px;\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n\n/* The map sits right at the top; trim its built-in top margin in this context. */\n.lpanel__body :deep(.locmap) { margin-top: 0; }\n\n/* ---- Intro block ---- */\n.lpanel__intro {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n.lpanel__intro-top {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 12px;\n}\n.lpanel__intro-head { min-width: 0; }\n.lpanel__eyebrow {\n  margin: 0;\n  font-size: 11px;\n  letter-spacing: 0.12em;\n  text-transform: uppercase;\n  font-weight: 600;\n  color: var(--snl-fg-muted);\n}\n.lpanel__title {\n  margin: 4px 0 0;\n  font-size: 21px;\n  font-weight: 700;\n  letter-spacing: -0.02em;\n  color: var(--snl-fg);\n}\n.lpanel__badge {\n  flex-shrink: 0;\n  display: inline-flex;\n  align-items: center;\n  height: 26px;\n  padding: 0 11px;\n  border-radius: 999px;\n  border: 1px solid transparent;\n  font-size: 11.5px;\n  font-weight: 700;\n  white-space: nowrap;\n}\n.lpanel__addr {\n  display: inline-flex;\n  align-items: center;\n  gap: 7px;\n  align-self: flex-start;\n  margin: 0;\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n}\n.lpanel__addr--link {\n  color: var(--snl-mint);\n  font-weight: 500;\n  text-decoration: none;\n  border-bottom: 1px solid rgba(143, 204, 177, 0.35);\n}\n.lpanel__addr svg { flex-shrink: 0; }\n@media (hover: hover) {\n  .lpanel__addr--link:hover { border-bottom-color: var(--snl-mint); }\n}\n.lpanel__summary {\n  position: relative;\n  margin: 2px 0 0;\n  padding: 2px 0 2px 14px;\n  border-left: 3px solid var(--snl-mint);\n  color: var(--snl-fg-muted);\n  font-size: 13px;\n  line-height: 1.6;\n}\n.lpanel__contact {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px 16px;\n  margin-top: 2px;\n}\n.lpanel__contact-link {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  min-width: 0;\n  max-width: 100%;\n  font-size: 12.5px;\n  color: var(--snl-fg-muted);\n  text-decoration: none;\n}\n.lpanel__contact-link span {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.lpanel__contact-link svg { flex-shrink: 0; color: var(--snl-fg-subtle); }\n.lpanel__contact-link:hover { color: var(--snl-mint); }\n\n/* ---- Sections ---- */\n.lpanel__section {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}\n.lpanel__section-title {\n  margin: 0;\n  font-size: 11px;\n  letter-spacing: 0.12em;\n  text-transform: uppercase;\n  font-weight: 600;\n  color: var(--snl-fg-subtle);\n}\n/* Section header row: title left, \"Alles uitklappen\"-knopje rechts uitgelijnd. */\n.lpanel__section-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n}\n.lpanel__expand-all {\n  flex-shrink: 0;\n  padding: 0;\n  border: 0;\n  background: none;\n  color: var(--snl-mint);\n  font-family: inherit;\n  font-size: 11.5px;\n  font-weight: 600;\n  cursor: pointer;\n}\n.lpanel__expand-all:hover { text-decoration: underline; text-underline-offset: 3px; }\n\n/* ---- Dimension scores (expandable) ---- */\n.lpanel__dims { display: flex; flex-direction: column; gap: 12px; }\n.lpanel__dim-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n  width: 100%;\n  margin-bottom: 6px;\n  padding: 0;\n  border: 0;\n  background: none;\n  color: inherit;\n  cursor: pointer;\n  text-align: left;\n}\n.lpanel__dim-label { font-size: 13px; color: var(--snl-fg); font-weight: 500; }\n.lpanel__dim-head-right {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  flex-shrink: 0;\n}\n.lpanel__dim-num { font-size: 13px; font-weight: 700; font-variant-numeric: tabular-nums; }\n.lpanel__dim-chev {\n  color: var(--snl-fg-subtle);\n  transition: transform 0.18s var(--ease-out);\n}\n.lpanel__dim.is-open .lpanel__dim-chev { transform: rotate(180deg); }\n.lpanel__dim-chev.is-open { transform: rotate(180deg); }\n.lpanel__dim-bar {\n  height: 4px;\n  border-radius: 4px;\n  background: var(--snl-surface-3);\n  overflow: hidden;\n}\n.lpanel__dim-bar-fill { height: 100%; border-radius: 4px; transition: width 0.3s; }\n.lpanel__dim-text {\n  margin-top: 10px;\n  padding: 12px 14px;\n  border: 1px solid var(--snl-line);\n  border-radius: 14px;\n  background: var(--snl-surface-2);\n  animation: lpanel-expand 0.2s ease both;\n}\n@keyframes lpanel-expand { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }\n.lpanel__dim-text p {\n  margin: 0;\n  font-size: 13px;\n  line-height: 1.55;\n  color: var(--snl-fg-muted);\n}\n.lpanel__dim-text--empty {\n  font-style: italic;\n  opacity: 0.6;\n}\n\n/* ---- Beeldmateriaal (collapsible) ---- */\n.lpanel__imgtoggle {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 10px;\n  width: 100%;\n  padding: 0;\n  border: 0;\n  background: none;\n  cursor: pointer;\n  text-align: left;\n}\n.lpanel__imgtoggle-right {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  flex-shrink: 0;\n}\n.lpanel__imgcount {\n  font-size: 12px;\n  font-weight: 600;\n  color: var(--snl-fg-muted);\n}\n.lpanel__imgbody { animation: lpanel-expand 0.2s ease both; }\n\n.lpanel__no-photos {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 10px;\n  padding: 18px 16px;\n  border: 1px dashed var(--snl-line-strong);\n  border-radius: 16px;\n  background: var(--snl-surface-2);\n  text-align: center;\n}\n.lpanel__no-photos-text {\n  margin: 0;\n  font-size: 13px;\n  line-height: 1.5;\n  color: var(--snl-fg-muted);\n}\n.lpanel__fetch-btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  height: 44px;\n  padding: 0 18px;\n  border: 0;\n  border-radius: 14px;\n  background: var(--snl-mint);\n  color: var(--snl-ink);\n  font-size: 13px;\n  font-weight: 600;\n  letter-spacing: -0.01em;\n  cursor: pointer;\n  transition: transform 0.12s var(--ease-spring), box-shadow 0.12s var(--ease-out), opacity 0.12s;\n}\n@media (hover: hover) {\n  .lpanel__fetch-btn:hover:not(:disabled) {\n    transform: translateY(-1px);\n    box-shadow: 0 14px 28px -10px rgba(143, 204, 177, 0.55);\n  }\n}\n.lpanel__fetch-btn:disabled { opacity: 0.6; cursor: progress; }\n.lpanel__fetch-error {\n  margin: 0;\n  font-size: 12px;\n  color: #FFCFBF;\n}\n\n/* ---- Footer ---- */\n.lpanel__footer {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 12px 22px calc(12px + env(safe-area-inset-bottom));\n  border-top: 1px solid var(--snl-line);\n  background: var(--snl-surface);\n}\n.lpanel__footer :deep(.add-list-btn) {\n  flex: 1;\n  height: 48px;\n  border-radius: 14px;\n  font-size: 13.5px;\n}\n.lpanel__review {\n  flex: 1;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  height: 48px;\n  border-radius: 14px;\n  background: var(--snl-koraal);\n  color: #fff;\n  font-size: 13.5px;\n  font-weight: 700;\n  text-decoration: none;\n  box-shadow: 0 12px 26px -12px rgba(243, 108, 79, 0.6);\n  transition: transform 0.12s, background 0.12s;\n}\n.lpanel__review:hover { transform: translateY(-1px); }\n\n/* Mobile: bottom-sheet */\n@media (max-width: 959px) {\n  .lpanel {\n    top: auto;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    width: 100%;\n    max-height: 92dvh;\n    border-left: 0;\n    border-top: 1px solid var(--snl-line-strong);\n    border-top-left-radius: 22px;\n    border-top-right-radius: 22px;\n    animation: lpanel-slide-up 0.25s cubic-bezier(0.22, 0.61, 0.36, 1) both;\n  }\n  @keyframes lpanel-slide-up { from { transform: translateY(100%); } to { transform: translateY(0); } }\n  .lpanel-scrim { background: rgba(0, 0, 0, 0.6); }\n}\n</style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, Fragment as _Fragment, normalizeStyle as _normalizeStyle, renderList as _renderList, normalizeClass as _normalizeClass, createBlock as _createBlock, Teleport as _Teleport } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"lpanel\",\n  role: \"dialog\",\n  \"aria-label\": \"Locatiedetails\"\n}\nconst _hoisted_2 = {\n  key: 0,\n  class: \"lpanel__state\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"lpanel__state\"\n}\nconst _hoisted_4 = { class: \"lpanel__body\" }\nconst _hoisted_5 = { class: \"lpanel__intro\" }\nconst _hoisted_6 = { class: \"lpanel__intro-top\" }\nconst _hoisted_7 = { class: \"lpanel__intro-head\" }\nconst _hoisted_8 = {\n  key: 0,\n  class: \"lpanel__eyebrow\"\n}\nconst _hoisted_9 = { class: \"lpanel__title\" }\nconst _hoisted_10 = [\"href\"]\nconst _hoisted_11 = {\n  key: 1,\n  class: \"lpanel__addr\"\n}\nconst _hoisted_12 = {\n  key: 2,\n  class: \"lpanel__summary\"\n}\nconst _hoisted_13 = {\n  key: 3,\n  class: \"lpanel__contact\"\n}\nconst _hoisted_14 = [\"href\"]\nconst _hoisted_15 = [\"href\"]\nconst _hoisted_16 = {\n  key: 0,\n  class: \"lpanel__section\"\n}\nconst _hoisted_17 = { class: \"lpanel__section-head\" }\nconst _hoisted_18 = { class: \"lpanel__dims\" }\nconst _hoisted_19 = [\"aria-expanded\", \"onClick\"]\nconst _hoisted_20 = { class: \"lpanel__dim-label\" }\nconst _hoisted_21 = { class: \"lpanel__dim-head-right\" }\nconst _hoisted_22 = { class: \"lpanel__dim-bar\" }\nconst _hoisted_23 = {\n  key: 0,\n  class: \"lpanel__dim-text\"\n}\nconst _hoisted_24 = { key: 0 }\nconst _hoisted_25 = {\n  key: 1,\n  class: \"lpanel__dim-text--empty\"\n}\nconst _hoisted_26 = { class: \"lpanel__section\" }\nconst _hoisted_27 = [\"aria-expanded\"]\nconst _hoisted_28 = { class: \"lpanel__imgtoggle-right\" }\nconst _hoisted_29 = { class: \"lpanel__imgcount\" }\nconst _hoisted_30 = {\n  key: 0,\n  class: \"lpanel__imgbody\"\n}\nconst _hoisted_31 = {\n  key: 1,\n  class: \"lpanel__no-photos\"\n}\nconst _hoisted_32 = [\"disabled\"]\nconst _hoisted_33 = {\n  key: 0,\n  class: \"lpanel__fetch-error\"\n}\nconst _hoisted_34 = { class: \"lpanel__footer\" }\nconst _hoisted_35 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createElementVNode(\"div\", {\n      class: \"lpanel-scrim\",\n      onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('close')))\n    }),\n    _createElementVNode(\"aside\", _hoisted_1, [\n      _createElementVNode(\"button\", {\n        class: \"lpanel__close\",\n        type: \"button\",\n        \"aria-label\": \"Sluiten\",\n        onClick: _cache[1] || (_cache[1] = $event => ($setup.emit('close')))\n      }, _cache[3] || (_cache[3] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"2.2\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M18 6 6 18M6 6l12 12\" })\n        ], -1 /* CACHED */)\n      ])),\n      ($setup.isLoading)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \"Laden…\"))\n        : (!$setup.detail?.location)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, \" Locatie kon niet geladen worden. \"))\n          : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n              _createElementVNode(\"div\", _hoisted_4, [\n                _createCommentVNode(\" 1. Live, interactieve Google Maps-kaart + ingeladen Street View bovenaan\\n               — direct zichtbaar en beweegbaar, geen handeling nodig. Map-links\\n               verborgen: het adres in het introblok hieronder is zelf de Google\\n               Maps-link (TEC-90). \"),\n                _createVNode($setup[\"LocationMap\"], {\n                  location: $setup.detail.location,\n                  \"show-map-links\": false,\n                  \"street-view-mode\": \"embed\"\n                }, null, 8 /* PROPS */, [\"location\"]),\n                _createCommentVNode(\" 2. Naam + score + klikbaar adres (→ Google Maps) + korte samenvatting\\n               + compacte contactgegevens, netjes gegroepeerd onder de kaart. \"),\n                _createElementVNode(\"section\", _hoisted_5, [\n                  _createElementVNode(\"div\", _hoisted_6, [\n                    _createElementVNode(\"div\", _hoisted_7, [\n                      ($setup.detail.location.organizationType)\n                        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, _toDisplayString($setup.detail.location.organizationType), 1 /* TEXT */))\n                        : _createCommentVNode(\"v-if\", true),\n                      _createElementVNode(\"h2\", _hoisted_9, _toDisplayString($setup.detail.location.companyName), 1 /* TEXT */)\n                    ]),\n                    ($setup.recommendation.badge)\n                      ? (_openBlock(), _createElementBlock(\"span\", {\n                          key: 0,\n                          class: \"lpanel__badge\",\n                          style: _normalizeStyle({ color: $setup.scoreColor, borderColor: $setup.badgeBorder, background: $setup.badgeBg })\n                        }, [\n                          _createTextVNode(_toDisplayString($setup.recommendation.label), 1 /* TEXT */),\n                          ($setup.overall !== null)\n                            ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                _createTextVNode(\" · \" + _toDisplayString($setup.overall), 1 /* TEXT */)\n                              ], 64 /* STABLE_FRAGMENT */))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 4 /* STYLE */))\n                      : _createCommentVNode(\"v-if\", true)\n                  ]),\n                  ($setup.addressHref)\n                    ? (_openBlock(), _createElementBlock(\"a\", {\n                        key: 0,\n                        href: $setup.addressHref,\n                        class: \"lpanel__addr lpanel__addr--link\",\n                        target: \"_blank\",\n                        rel: \"noopener noreferrer\"\n                      }, [\n                        _cache[4] || (_cache[4] = _createElementVNode(\"svg\", {\n                          width: \"15\",\n                          height: \"15\",\n                          viewBox: \"0 0 24 24\",\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: \"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\" }),\n                          _createElementVNode(\"circle\", {\n                            cx: \"12\",\n                            cy: \"10\",\n                            r: \"2.5\"\n                          })\n                        ], -1 /* CACHED */)),\n                        _createElementVNode(\"span\", null, _toDisplayString($setup.addressText), 1 /* TEXT */)\n                      ], 8 /* PROPS */, _hoisted_10))\n                    : (_openBlock(), _createElementBlock(\"p\", _hoisted_11, _toDisplayString($setup.addressText), 1 /* TEXT */)),\n                  ($setup.summary)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_12, _toDisplayString($setup.summary), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true),\n                  ($setup.hasContact)\n                    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n                        ($setup.detail.location.website)\n                          ? (_openBlock(), _createElementBlock(\"a\", {\n                              key: 0,\n                              href: $setup.detail.location.website,\n                              class: \"lpanel__contact-link\",\n                              target: \"_blank\",\n                              rel: \"noopener noreferrer\"\n                            }, [\n                              _cache[5] || (_cache[5] = _createElementVNode(\"svg\", {\n                                width: \"14\",\n                                height: \"14\",\n                                viewBox: \"0 0 24 24\",\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(\"circle\", {\n                                  cx: \"12\",\n                                  cy: \"12\",\n                                  r: \"10\"\n                                }),\n                                _createElementVNode(\"path\", { d: \"M2 12h20\" }),\n                                _createElementVNode(\"path\", { d: \"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10Z\" })\n                              ], -1 /* CACHED */)),\n                              _createElementVNode(\"span\", null, _toDisplayString($setup.websiteLabel), 1 /* TEXT */)\n                            ], 8 /* PROPS */, _hoisted_14))\n                          : _createCommentVNode(\"v-if\", true),\n                        ($setup.detail.location.phone)\n                          ? (_openBlock(), _createElementBlock(\"a\", {\n                              key: 1,\n                              href: `tel:${$setup.detail.location.phone.replace(/\\s+/g, '')}`,\n                              class: \"lpanel__contact-link\"\n                            }, [\n                              _cache[6] || (_cache[6] = _createElementVNode(\"svg\", {\n                                width: \"14\",\n                                height: \"14\",\n                                viewBox: \"0 0 24 24\",\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: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.91.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92Z\" })\n                              ], -1 /* CACHED */)),\n                              _createElementVNode(\"span\", null, _toDisplayString($setup.detail.location.phone), 1 /* TEXT */)\n                            ], 8 /* PROPS */, _hoisted_15))\n                          : _createCommentVNode(\"v-if\", true)\n                      ]))\n                    : _createCommentVNode(\"v-if\", true)\n                ]),\n                _createCommentVNode(\" 3. Score per dimensie — score + balk altijd zichtbaar; klik op een rij\\n               vouwt de AI-toelichting uit (TEC-90). \"),\n                ($setup.hasDimensionScores)\n                  ? (_openBlock(), _createElementBlock(\"section\", _hoisted_16, [\n                      _createElementVNode(\"div\", _hoisted_17, [\n                        _cache[7] || (_cache[7] = _createElementVNode(\"h3\", { class: \"lpanel__section-title\" }, \"Score per dimensie\", -1 /* CACHED */)),\n                        _createElementVNode(\"button\", {\n                          type: \"button\",\n                          class: \"lpanel__expand-all\",\n                          onClick: $setup.toggleAllDims\n                        }, _toDisplayString($setup.allDimsOpen ? \"Alles inklappen\" : \"Alles uitklappen\"), 1 /* TEXT */)\n                      ]),\n                      _createElementVNode(\"div\", _hoisted_18, [\n                        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.dimensionRows, (d, i) => {\n                          return (_openBlock(), _createElementBlock(\"div\", {\n                            key: d.label,\n                            class: _normalizeClass([\"lpanel__dim\", { 'is-open': $setup.isDimOpen(i) }])\n                          }, [\n                            _createElementVNode(\"button\", {\n                              type: \"button\",\n                              class: \"lpanel__dim-head\",\n                              \"aria-expanded\": $setup.isDimOpen(i),\n                              onClick: $event => ($setup.toggleDim(i))\n                            }, [\n                              _createElementVNode(\"span\", _hoisted_20, _toDisplayString(d.label), 1 /* TEXT */),\n                              _createElementVNode(\"span\", _hoisted_21, [\n                                _createElementVNode(\"span\", {\n                                  class: \"lpanel__dim-num\",\n                                  style: _normalizeStyle({ color: $setup.scoutColor(d.score) })\n                                }, _toDisplayString(d.score ?? \"—\"), 5 /* TEXT, STYLE */),\n                                _cache[8] || (_cache[8] = _createElementVNode(\"svg\", {\n                                  class: \"lpanel__dim-chev\",\n                                  width: \"16\",\n                                  height: \"16\",\n                                  viewBox: \"0 0 24 24\",\n                                  fill: \"none\",\n                                  stroke: \"currentColor\",\n                                  \"stroke-width\": \"2.2\",\n                                  \"stroke-linecap\": \"round\",\n                                  \"stroke-linejoin\": \"round\",\n                                  \"aria-hidden\": \"true\"\n                                }, [\n                                  _createElementVNode(\"path\", { d: \"m6 9 6 6 6-6\" })\n                                ], -1 /* CACHED */))\n                              ])\n                            ], 8 /* PROPS */, _hoisted_19),\n                            _createElementVNode(\"div\", _hoisted_22, [\n                              _createElementVNode(\"div\", {\n                                class: \"lpanel__dim-bar-fill\",\n                                style: _normalizeStyle({ width: `${d.score ?? 0}%`, background: $setup.scoutColor(d.score) })\n                              }, null, 4 /* STYLE */)\n                            ]),\n                            ($setup.isDimOpen(i))\n                              ? (_openBlock(), _createElementBlock(\"div\", _hoisted_23, [\n                                  (d.explanation)\n                                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_24, _toDisplayString(d.explanation), 1 /* TEXT */))\n                                    : (_openBlock(), _createElementBlock(\"p\", _hoisted_25, \"Geen AI-toelichting beschikbaar.\"))\n                                ]))\n                              : _createCommentVNode(\"v-if\", true)\n                          ], 2 /* CLASS */))\n                        }), 128 /* KEYED_FRAGMENT */))\n                      ])\n                    ]))\n                  : _createCommentVNode(\"v-if\", true),\n                _createCommentVNode(\" 4. Beeldmateriaal — ingeklapt; klik vouwt de gebruikte foto's uit\\n               (satelliet + street view). Zonder foto's de \\\"Haal foto's op\\\"-knop. \"),\n                _createElementVNode(\"section\", _hoisted_26, [\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"lpanel__imgtoggle\",\n                    \"aria-expanded\": $setup.imagesOpen,\n                    onClick: _cache[2] || (_cache[2] = $event => ($setup.imagesOpen = !$setup.imagesOpen))\n                  }, [\n                    _cache[10] || (_cache[10] = _createElementVNode(\"span\", { class: \"lpanel__section-title\" }, \"Beeldmateriaal\", -1 /* CACHED */)),\n                    _createElementVNode(\"span\", _hoisted_28, [\n                      _createElementVNode(\"span\", _hoisted_29, _toDisplayString($setup.imageCountLabel), 1 /* TEXT */),\n                      (_openBlock(), _createElementBlock(\"svg\", {\n                        class: _normalizeClass([\"lpanel__dim-chev\", { 'is-open': $setup.imagesOpen }]),\n                        width: \"16\",\n                        height: \"16\",\n                        viewBox: \"0 0 24 24\",\n                        fill: \"none\",\n                        stroke: \"currentColor\",\n                        \"stroke-width\": \"2.2\",\n                        \"stroke-linecap\": \"round\",\n                        \"stroke-linejoin\": \"round\",\n                        \"aria-hidden\": \"true\"\n                      }, _cache[9] || (_cache[9] = [\n                        _createElementVNode(\"path\", { d: \"m6 9 6 6 6-6\" }, null, -1 /* CACHED */)\n                      ]), 2 /* CLASS */))\n                    ])\n                  ], 8 /* PROPS */, _hoisted_27),\n                  ($setup.imagesOpen)\n                    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_30, [\n                        ($setup.carouselImages.length > 0)\n                          ? (_openBlock(), _createBlock($setup[\"PhotoCarousel\"], {\n                              key: 0,\n                              images: $setup.carouselImages\n                            }, null, 8 /* PROPS */, [\"images\"]))\n                          : (_openBlock(), _createElementBlock(\"div\", _hoisted_31, [\n                              _cache[13] || (_cache[13] = _createElementVNode(\"p\", { class: \"lpanel__no-photos-text\" }, \" Er zijn nog geen foto's opgehaald voor deze locatie. \", -1 /* CACHED */)),\n                              _createElementVNode(\"button\", {\n                                type: \"button\",\n                                class: \"lpanel__fetch-btn\",\n                                disabled: $setup.fetching,\n                                onClick: $setup.handleFetchImages\n                              }, [\n                                ($setup.fetching)\n                                  ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                      _createTextVNode(\"Bezig met ophalen…\")\n                                    ], 64 /* STABLE_FRAGMENT */))\n                                  : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                                      _cache[11] || (_cache[11] = _createElementVNode(\"svg\", {\n                                        width: \"16\",\n                                        height: \"16\",\n                                        viewBox: \"0 0 24 24\",\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: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" }),\n                                        _createElementVNode(\"polyline\", { points: \"7 10 12 15 17 10\" }),\n                                        _createElementVNode(\"line\", {\n                                          x1: \"12\",\n                                          y1: \"15\",\n                                          x2: \"12\",\n                                          y2: \"3\"\n                                        })\n                                      ], -1 /* CACHED */)),\n                                      _cache[12] || (_cache[12] = _createTextVNode(\" Haal foto's op \", -1 /* CACHED */))\n                                    ], 64 /* STABLE_FRAGMENT */))\n                              ], 8 /* PROPS */, _hoisted_32),\n                              ($setup.fetchError)\n                                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_33, _toDisplayString($setup.fetchError), 1 /* TEXT */))\n                                : _createCommentVNode(\"v-if\", true)\n                            ]))\n                      ]))\n                    : _createCommentVNode(\"v-if\", true)\n                ])\n              ]),\n              _createElementVNode(\"footer\", _hoisted_34, [\n                ($setup.locationSummary)\n                  ? (_openBlock(), _createBlock($setup[\"AddToListButton\"], {\n                      key: 0,\n                      location: $setup.locationSummary\n                    }, null, 8 /* PROPS */, [\"location\"]))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"a\", {\n                  class: \"lpanel__review\",\n                  href: $setup.urlLocation($props.locationId)\n                }, _cache[14] || (_cache[14] = [\n                  _createTextVNode(\" Beoordelen \", -1 /* CACHED */),\n                  _createElementVNode(\"svg\", {\n                    width: \"16\",\n                    height: \"16\",\n                    viewBox: \"0 0 24 24\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"2.4\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\",\n                    \"aria-hidden\": \"true\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"M5 12h14M13 5l7 7-7 7\" })\n                  ], -1 /* CACHED */)\n                ]), 8 /* PROPS */, _hoisted_35)\n              ])\n            ], 64 /* STABLE_FRAGMENT */))\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationDetailPanel.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationDetailPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationDetailPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/LocationDetailPanel.vue\";script.__scopeId = \"data-v-60dd7ebb\";export default script;","<template>\n  <div ref=\"el\" class=\"scoutmap\"></div>\n</template>\n\n<script setup lang=\"ts\">\nimport * as L from \"leaflet\";\nimport { onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport { scoutColor } from \"../lib/scoutScore\";\nimport type { LocationSummary } from \"../lib/types\";\n\n// Optionele polygon-overlay (bv. gemeentegrenzen) die als dimming-laag onder\n// de pins rendert. `outCodes` zijn de codes die \"weg-gefilterd\" zijn — die\n// krijgen een gedimde fill. Codes die er niet in staan worden volledig\n// transparant gerenderd (geen visuele ruis voor zichtbare gebieden). Bedoeld\n// als achtergrond-context bij een filter (bv. inwoneraantal per gemeente).\n// `codeKey` is de feature.properties-key die de code bevat (default \"code\").\nexport interface ScoutMapOverlay {\n  geojson: GeoJSON.FeatureCollection;\n  outCodes: Set<string>;\n  codeKey?: string;\n}\n\n// Optionele extra-laag pin (bv. sales-funnel-locaties). Bewust generiek\n// gehouden — ScoutMap weet niets over stages of override-management. De parent\n// bouwt de popup-HTML zelf en wired interactie via funnelPopupOpen/Close.\n// `isFilter` = visueel onderscheid (groter + glow) voor pins die ergens\n// \"betekenis dragen\" (bv. filteren rond zich).\nexport interface ScoutMapFunnelPin {\n  id: string;\n  lat: number;\n  lng: number;\n  color: string;\n  isFilter?: boolean;\n  popupHtml?: string;\n}\n\n// Optionele radius-cirkel rondom een punt (bv. een sales-funnel-locatie die\n// suggesties binnen `radiusM` uitsluit). Pure visualisatie — ScoutMap doet\n// niets met de cijfers, de parent berekent welke locaties verborgen worden.\nexport interface ScoutMapRadius {\n  id: string;\n  lat: number;\n  lng: number;\n  radiusM: number;\n  color: string;\n  isOverride?: boolean;\n}\n\nconst props = defineProps<{\n  locations: LocationSummary[];\n  selectedId: number | null;\n  planningIds: number[];\n  /**\n   * Optioneel: een gedimde polygon-overlay onder de pins. Backward-compatible —\n   * weglaten = exact het oude gedrag.\n   */\n  overlay?: ScoutMapOverlay | null;\n  /**\n   * Optioneel: extra pins bovenop de location-pins (sales-funnel, gepland, …).\n   * Backward-compatible — weglaten = geen extra laag.\n   */\n  funnelPins?: ScoutMapFunnelPin[] | null;\n  /**\n   * Optioneel: radius-cirkels onder de pins. Backward-compatible.\n   */\n  radii?: ScoutMapRadius[] | null;\n}>();\n\nconst emit = defineEmits<{\n  select: [id: number];\n  /** Funnel-pin opende z'n popup — parent kan elementen erin wiren. */\n  \"funnel-popup-open\": [id: string, el: HTMLElement];\n  /** Funnel-pin's popup ging dicht — parent kan listeners opruimen. */\n  \"funnel-popup-close\": [id: string];\n}>();\n\n\n// \"Beoordeeld\"-badge op de marker: het clipboard-met-vinkje, hetzelfde glyph als\n// de Beoordelingen-tab (TopNav), zodat \"beoordeeld\" overal hetzelfde symbool\n// heeft. Klein badge linksboven op de pin — los van de mint planning-dot\n// rechtsboven (scoutmap-pin__plan), zodat beide tegelijk zichtbaar kunnen zijn.\n// Module-const zodat de string niet per marker herbouwd wordt. Stroke-kleur komt\n// uit de CSS-regel (.scoutmap-pin__fb svg).\nconst FEEDBACK_BADGE_HTML = `\n  <span class=\"scoutmap-pin__fb\" aria-hidden=\"true\">\n    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n      <path d=\"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\"/>\n      <rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1\"/>\n      <path d=\"m9 14 2 2 4-4\"/>\n    </svg>\n  </span>`;\n\nconst el = ref<HTMLElement | null>(null);\nlet map: L.Map | null = null;\nlet markerLayer: L.LayerGroup | null = null;\n// One L.GeoJSON layer for the optional gemeente-overlay. Created once on first\n// non-null `overlay` prop; later prop changes only setStyle() — 342 multipolys\n// is fast but a recreate would flicker.\nlet overlayLayer: L.GeoJSON | null = null;\nlet overlayGeoJsonRef: unknown = null; // tracked to detect a different dataset\n// Extra optional layers (funnel pins + radius circles). Created lazily — when\n// the corresponding prop is absent/empty the layers are simply never built.\nlet funnelLayer: L.LayerGroup | null = null;\nlet radiusLayer: L.LayerGroup | null = null;\nlet resizeObserver: ResizeObserver | null = null;\n// De kaart fit ÉÉN keer op de data zodra die binnenkomt (initiële framing).\n// Daarna NIET meer automatisch fitten op elke props.locations-wijziging — dat\n// gaf irritant constant in-/uitzoomen tijdens het afstellen van de\n// radius-/inwoners-sliders en pande wég van een open funnel-popup. De parent\n// fit zelf expliciet bij de aanklikbare (discrete) filters via de geëxposede\n// fitToLocations (zie VerkennenView + defineExpose hieronder).\nlet hasAutoFitted = false;\n// One-shot observer that waits for the container to gain a real height before\n// the map is created (see initMap / onMounted).\nlet waitObserver: ResizeObserver | null = null;\n\n// OpenStreetMap standard tiles, muted to grey in CSS (see the .leaflet-tile-pane\n// rules below, with an inverted variant for dark theme). Replaced the CARTO\n// tiles, which now watermark every tile with \"API KEY REQUIRED\". One tile set\n// for both themes, so no swap on theme change. Light usage per the OSM policy.\nconst TILE_URL = \"https://tile.openstreetmap.org/{z}/{x}/{y}.png\";\n\nfunction withCoords(): LocationSummary[] {\n  return props.locations.filter((l) => l.latitude !== null && l.longitude !== null);\n}\n\n// Style for one polygon. Out-codes = dimmed (semi-transparent dark fill, NO\n// stroke — the white border distracted from the pins); in-codes = nothing\n// rendered at all (`stroke:false` + `fill:false`) so visible gemeenten don't\n// compete with the pins.\n//\n// IMPORTANT: both branches must specify the SAME PathOption keys. Leaflet's\n// setStyle() does Object.assign — any key omitted in one branch carries over\n// from the previous branch. The earlier bug: \"in\"-state set `opacity:0`, \"out\"\n// didn't reset it, so after a toggle out→in→out the stroke stayed invisible.\nfunction overlayStyleFor(feature: GeoJSON.Feature | undefined): L.PathOptions {\n  const o = props.overlay;\n  if (!o || !feature) return { stroke: false, fill: false };\n  const key = o.codeKey ?? \"code\";\n  const code = (feature.properties as Record<string, unknown> | null)?.[key];\n  if (typeof code === \"string\" && o.outCodes.has(code)) {\n    return {\n      stroke: false,\n      fill: true,\n      fillColor: \"#000\",\n      fillOpacity: 0.62,\n    };\n  }\n  return { stroke: false, fill: false };\n}\n\nfunction renderOverlay(): void {\n  if (!map) return;\n  const o = props.overlay;\n  if (!o) {\n    overlayLayer?.remove();\n    overlayLayer = null;\n    overlayGeoJsonRef = null;\n    return;\n  }\n  // First render, or different underlying dataset → recreate.\n  if (!overlayLayer || overlayGeoJsonRef !== o.geojson) {\n    overlayLayer?.remove();\n    overlayLayer = L.geoJSON(o.geojson, {\n      style: (f) => overlayStyleFor(f),\n      // The overlay must NOT swallow clicks — pin markers sit on top and need\n      // their click events.\n      interactive: false,\n      // Force SVG renderer for the overlay even when the map runs with\n      // `preferCanvas: true`. With canvas, rapid setStyle() calls during a\n      // slider-drag batch through rAF and can drop strokes between frames;\n      // SVG paths update synchronously per DOM-attribute change.\n      renderer: L.svg(),\n    });\n    // Insert below markers: overlay is in the SVG overlay-pane; markers in the\n    // marker-pane sit above paths by Leaflet's pane order, so no explicit\n    // bringToFront() needed (L.LayerGroup doesn't expose that method anyway).\n    overlayLayer.addTo(map);\n    overlayGeoJsonRef = o.geojson;\n    return;\n  }\n  // Same dataset, only outCodes/codeKey changed → restyle.\n  overlayLayer.setStyle((f) => overlayStyleFor(f));\n}\n\n// Radius-cirkels (bv. uitsluit-zones rond sales-funnel-pins). Wordt onder de\n// markers en de funnel-pins gerenderd. Met `interactive: false` slikken de\n// cirkels geen klikken — pin-clicks blijven werken. SVG-renderer i.p.v. canvas\n// om dezelfde reden als bij `overlayLayer`: snelle setStyle/recreate-loops\n// tijdens een slider-drag droppen anders frames in canvas-mode.\nfunction renderRadii(): void {\n  if (!map) return;\n  radiusLayer?.remove();\n  radiusLayer = null;\n  const list = props.radii;\n  if (!list || list.length === 0) return;\n  const group = L.layerGroup().addTo(map);\n  for (const r of list) {\n    if (r.radiusM <= 0) continue;\n    const override = r.isOverride === true;\n    L.circle([r.lat, r.lng], {\n      radius: r.radiusM,\n      color: r.color,\n      weight: override ? 1.5 : 1,\n      opacity: override ? 0.85 : 0.45,\n      fillColor: r.color,\n      fillOpacity: override ? 0.15 : 0.07,\n      interactive: false,\n      dashArray: override ? undefined : \"4 4\",\n      renderer: L.svg(),\n    }).addTo(group);\n  }\n  radiusLayer = group;\n  // Z-order regelt zich vanzelf: L.circle zijn SVG-paths (overlay-pane) en\n  // markers zitten in de marker-pane — Leaflet zet die per definitie boven\n  // paths. Geen bringToBack nodig (L.LayerGroup heeft die methode niet).\n}\n\nfunction renderFunnel(): void {\n  if (!map) return;\n  funnelLayer?.remove();\n  funnelLayer = null;\n  const list = props.funnelPins;\n  if (!list || list.length === 0) return;\n  const group = L.layerGroup().addTo(map);\n  for (const pin of list) {\n    const isFilter = pin.isFilter === true;\n    const html = `\n      <div class=\"scoutmap-fnl ${isFilter ? \"scoutmap-fnl--filter\" : \"\"}\" style=\"--c:${pin.color}\">\n        <span class=\"scoutmap-fnl__inner\"></span>\n      </div>`;\n    const icon = L.divIcon({\n      html,\n      className: \"scoutmap-fnl-wrap\",\n      iconSize: isFilter ? [22, 22] : [16, 16],\n      iconAnchor: isFilter ? [11, 11] : [8, 8],\n    });\n    const marker = L.marker([pin.lat, pin.lng], { icon, pane: \"funnelpins\" }).addTo(group);\n    if (pin.popupHtml) {\n      const popup = L.popup({ className: \"scoutmap-fnl-popup\", maxWidth: 280, autoPan: true });\n      popup.setContent(pin.popupHtml);\n      marker.bindPopup(popup);\n      marker.on(\"popupopen\", (ev) => {\n        const el = (ev as L.PopupEvent).popup.getElement();\n        if (el) emit(\"funnel-popup-open\", pin.id, el);\n      });\n      marker.on(\"popupclose\", () => emit(\"funnel-popup-close\", pin.id));\n    }\n  }\n  funnelLayer = group;\n  // Funnel-pins zitten in hun eigen 'funnelpins'-pane (hogere zIndex dan de\n  // marker-pane), dus ze blijven bovenop ongeacht hoe vaak de suggestion-laag\n  // herbouwt. renderFunnel hoeft daarom NIET meer mee te draaien op elke\n  // props.locations-wijziging (zie de watch hieronder) — dat sloopte anders een\n  // open funnel-popup tijdens een radius-/filter-drag.\n}\n\nfunction renderMarkers() {\n  if (!map) return;\n  markerLayer?.remove();\n  const group = L.layerGroup().addTo(map);\n\n  for (const loc of withCoords()) {\n    const color = scoutColor(loc.latestScore);\n    const selected = props.selectedId === loc.id;\n    const inPlanning = props.planningIds.includes(loc.id);\n    const html = `\n      <div class=\"scoutmap-pin ${selected ? \"scoutmap-pin--sel\" : \"\"}\" style=\"--c:${color}\">\n        <span class=\"scoutmap-pin__inner\"></span>\n        ${inPlanning ? '<span class=\"scoutmap-pin__plan\"></span>' : \"\"}\n        ${loc.hasFeedback ? FEEDBACK_BADGE_HTML : \"\"}\n      </div>`;\n    const icon = L.divIcon({\n      html,\n      className: \"scoutmap-pin-wrap\",\n      iconSize: [28, 28],\n      iconAnchor: [14, 14],\n    });\n    const marker = L.marker([loc.latitude!, loc.longitude!], { icon }).addTo(group);\n    marker.on(\"click\", () => emit(\"select\", loc.id));\n  }\n\n  markerLayer = group;\n}\n\nfunction fitToLocations() {\n  if (!map) return;\n  const coords = withCoords();\n  if (coords.length === 0) return;\n  const bounds = L.latLngBounds(coords.map((l) => [l.latitude!, l.longitude!] as [number, number]));\n  map.fitBounds(bounds, { padding: [48, 48], maxZoom: 14 });\n}\n\n// Create the Leaflet map. Only ever called once the container has a real height\n// (see onMounted) so Leaflet never caches a 0-size viewport.\nfunction initMap() {\n  if (map || !el.value) return;\n  map = L.map(el.value, {\n    center: [52.15, 5.4], // Netherlands fallback\n    zoom: 8,\n    zoomControl: false,\n    attributionControl: false,\n    preferCanvas: true,\n  });\n  L.tileLayer(TILE_URL, { maxZoom: 19 }).addTo(map);\n  L.control.zoom({ position: \"topright\" }).addTo(map);\n\n  // Eigen pane voor de funnel-pins zodat ze BOVEN de suggestion-markers blijven\n  // zonder een herbouw nodig te hebben elke keer dat de suggestion-laag opnieuw\n  // rendert. zIndex 610 = boven markerPane (600), onder tooltipPane (650) +\n  // popupPane (700) — popups blijven dus over de pins heen tekenen. Dit\n  // voorkomt dat een open funnel-popup (met radius-slider) gesloopt wordt\n  // wanneer een filter-tick props.locations wijzigt.\n  map.createPane(\"funnelpins\");\n  const funnelPane = map.getPane(\"funnelpins\");\n  if (funnelPane) funnelPane.style.zIndex = \"610\";\n\n  // Z-order: radii (onderaan) → overlay → suggestion markers → funnel pins\n  // (bovenaan). Elke render-fn corrigeert z'n eigen bringToBack/Front zodat\n  // latere prop-wijzigingen de stack niet door elkaar gooien.\n  renderRadii();\n  renderOverlay();\n  renderMarkers();\n  renderFunnel();\n  fitToLocations();\n\n  // Keep the map sized on later resizes (window resize, mobile list↔map switch).\n  resizeObserver = new ResizeObserver(() => map?.invalidateSize());\n  resizeObserver.observe(el.value);\n}\n\nonMounted(() => {\n  if (!el.value) return;\n  // CRITICAL: initialize Leaflet only when the container actually has a height.\n  // Intermittently the grid/flex cell is 0px tall at mount (a layout race), and\n  // on mobile the map pane is display:none while the list is shown — in both\n  // cases creating the map would cache size 0 and the map stays permanently\n  // tile-less (the \"full-height empty pane\" bug). If already sized, init now;\n  // otherwise observe until the first non-zero height, then init once.\n  if (el.value.offsetHeight > 0) {\n    initMap();\n    return;\n  }\n  waitObserver = new ResizeObserver(() => {\n    if (el.value && !map && el.value.offsetHeight > 0) {\n      waitObserver?.disconnect();\n      waitObserver = null;\n      initMap();\n    }\n  });\n  waitObserver.observe(el.value);\n});\n\nonBeforeUnmount(() => {\n  waitObserver?.disconnect();\n  waitObserver = null;\n  resizeObserver?.disconnect();\n  resizeObserver = null;\n  overlayLayer?.remove();\n  overlayLayer = null;\n  funnelLayer?.remove();\n  funnelLayer = null;\n  radiusLayer?.remove();\n  radiusLayer = null;\n  map?.remove();\n  map = null;\n});\n\n// React to overlay prop changes (dataset OR outCodes-Set OR codeKey).\nwatch(\n  () => props.overlay,\n  () => renderOverlay(),\n);\n\n// Funnel pins + radii — beide optioneel; bij omit/null doet de render-fn niets.\n// Geen `deep: true` op de array — de parent geeft een nieuwe array door bij\n// wijzigingen (Map/Set patroon zoals in snl-sales-funnel App.vue).\nwatch(\n  () => props.funnelPins,\n  () => renderFunnel(),\n);\nwatch(\n  () => props.radii,\n  () => renderRadii(),\n);\n\n// Rebuild markers when the data, the selection ring, or planning dots change.\n// Funnel-pins NIET mee-herbouwen: ze leven in een eigen pane ('funnelpins')\n// met hogere zIndex en blijven dus vanzelf bovenop. Een open funnel-popup\n// (radius-slider) zou anders gesloopt worden zodra een filter-tick\n// props.locations wijzigt.\nwatch(\n  () => [props.locations, props.selectedId, props.planningIds],\n  () => {\n    renderMarkers();\n  },\n  { deep: true },\n);\n\n// Fit ÉÉN keer zodra de eerste locaties met coördinaten binnen zijn (initiële\n// framing). Daarna niet meer auto-fitten — sliden/zoeken laat de kaart staan\n// waar de gebruiker 'm heeft. De aanklikbare filters fitten expliciet via\n// VerkennenView (zie defineExpose).\nwatch(\n  () => props.locations,\n  () => {\n    if (hasAutoFitted) return;\n    if (withCoords().length === 0) return;\n    hasAutoFitted = true;\n    fitToLocations();\n  },\n  { deep: true },\n);\n\n// Center the selected marker (pan/zoom-to like the mockup).\nwatch(\n  () => props.selectedId,\n  (id) => {\n    if (id === null || !map) return;\n    const loc = props.locations.find((l) => l.id === id);\n    if (!loc || loc.latitude === null || loc.longitude === null) return;\n    map.flyTo([loc.latitude, loc.longitude], Math.max(13, map.getZoom()), { duration: 0.6 });\n  },\n);\n\n// Stelt de parent in staat de kaart bewust op de huidige (gefilterde) locaties\n// te centreren — bv. bij een region-wissel. Zo blijft auto-fit uit terwijl een\n// expliciete \"spring naar regio\" wél kan.\ndefineExpose({ fitToLocations });\n</script>\n\n<!-- Not scoped: Leaflet injects markers/controls outside the component's\n     scoped DOM, so pin + control styles must be global. Class names are\n     namespaced (scoutmap-*) to avoid collisions. -->\n<style>\n.scoutmap {\n  position: absolute;\n  inset: 0;\n  background: var(--snl-bg-deep);\n}\n.leaflet-container {\n  background: var(--snl-bg-deep);\n  font-family: inherit;\n}\n/* OSM tiles are colorful: grey them out so the pins carry the only color. Dark\n   theme inverts the same tiles and lifts them to a muted grey, so the black\n   gemeente-dimming mask (fillOpacity 0.62) still reads against the base. The\n   filter sits on the tile pane, never on the container or an ancestor (that\n   gives black tiles on mobile, see the ScoutMap notes in CLAUDE.md). */\n.scoutmap .leaflet-tile-pane {\n  filter: grayscale(1) contrast(0.9) brightness(1.04);\n}\nhtml:not([data-theme=\"light\"]) .scoutmap .leaflet-tile-pane {\n  filter: grayscale(1) invert(0.92) brightness(1.7);\n}\n.scoutmap .leaflet-control-zoom a {\n  background: var(--snl-surface) !important;\n  color: var(--snl-fg) !important;\n  border: 1px solid var(--snl-line) !important;\n  width: 30px !important;\n  height: 30px !important;\n  line-height: 28px !important;\n  font-size: 18px !important;\n}\n.scoutmap .leaflet-control-zoom a:hover { background: var(--snl-surface-2) !important; }\n.scoutmap .leaflet-bar { border: 0 !important; box-shadow: none !important; }\n\n.scoutmap-pin-wrap { background: transparent !important; border: 0 !important; }\n.scoutmap-pin {\n  width: 28px;\n  height: 28px;\n  border-radius: 50%;\n  background: var(--snl-bg-deep);\n  border: 2px solid var(--c);\n  display: grid;\n  place-items: center;\n  box-shadow: 0 0 0 4px rgba(10, 22, 19, 0.4);\n  cursor: pointer;\n  transition: transform 0.15s, box-shadow 0.15s;\n  position: relative;\n}\n.scoutmap-pin:hover { transform: scale(1.12); }\n.scoutmap-pin__inner {\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  background: var(--c);\n}\n.scoutmap-pin--sel {\n  box-shadow: 0 0 0 6px rgba(143, 204, 177, 0.25), 0 0 0 2px var(--c);\n  transform: scale(1.18);\n}\n.scoutmap-pin__plan {\n  position: absolute;\n  top: -4px;\n  right: -4px;\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n  background: var(--snl-mint);\n  border: 2px solid var(--snl-bg-deep);\n}\n/* \"Beoordeeld\"-badge (clipboard-met-vinkje) linksboven op de pin. Mint met\n   donkere ink-glyph zodat het leest op de donkere pin; positie links + de\n   icoon-vorm onderscheidt 'm van de planning-dot rechtsboven. */\n.scoutmap-pin__fb {\n  position: absolute;\n  top: -6px;\n  left: -6px;\n  width: 15px;\n  height: 15px;\n  border-radius: 50%;\n  background: var(--snl-mint);\n  border: 2px solid var(--snl-bg-deep);\n  display: grid;\n  place-items: center;\n}\n.scoutmap-pin__fb svg {\n  width: 9px;\n  height: 9px;\n  stroke: var(--snl-ink);\n}\n\n/* Funnel-pin — vierkant met afgeronde hoeken, in de stage-kleur. Filterende\n   pin = rond + groter + glow. Bewust visueel anders dan de scoutmap-pin\n   (suggesties) zodat de twee lagen leesbaar blijven naast elkaar. */\n.scoutmap-fnl-wrap { background: transparent !important; border: 0 !important; }\n.scoutmap-fnl {\n  width: 16px;\n  height: 16px;\n  border-radius: 4px;\n  background: var(--c);\n  border: 2px solid rgba(10, 22, 19, 0.9);\n  box-shadow: 0 0 0 1px var(--c), 0 2px 6px rgba(0, 0, 0, 0.35);\n  cursor: pointer;\n  transition: transform 0.15s;\n  display: grid;\n  place-items: center;\n}\n.scoutmap-fnl:hover { transform: scale(1.18); }\n.scoutmap-fnl--filter {\n  width: 22px;\n  height: 22px;\n  border-radius: 50%;\n  box-shadow:\n    0 0 0 1px var(--c),\n    0 0 0 5px color-mix(in srgb, var(--c) 22%, transparent),\n    0 2px 8px rgba(0, 0, 0, 0.4);\n}\n.scoutmap-fnl__inner {\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: rgba(10, 22, 19, 0.85);\n}\n.scoutmap-fnl--filter .scoutmap-fnl__inner {\n  background: var(--snl-bg-deep);\n  width: 8px;\n  height: 8px;\n}\n\n/* Popup-styling — matchen met SNL surface-tokens (zelfde als funnelmap-popup\n   uit het snl-sales-funnel prototype). */\n.scoutmap-fnl-popup .leaflet-popup-content-wrapper {\n  background: var(--snl-surface);\n  color: var(--snl-fg);\n  border: 1px solid var(--snl-line);\n  border-radius: 10px;\n  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);\n}\n.scoutmap-fnl-popup .leaflet-popup-tip {\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n}\n.scoutmap-fnl-popup .leaflet-popup-content {\n  margin: 12px 14px;\n  font-size: 13px;\n  line-height: 1.45;\n}\n</style>\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  ref: \"el\",\n  class: \"scoutmap\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, null, 512 /* NEED_PATCH */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ScoutMap.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ScoutMap.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ScoutMap.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ScoutMap.vue\";export default script;","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass, renderSlot as _renderSlot, vModelText as _vModelText, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle, createVNode as _createVNode, withCtx as _withCtx, createSlots as _createSlots, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"verkennen-wrap\" }\nconst _hoisted_2 = { class: \"subnav\" }\nconst _hoisted_3 = { class: \"subnav__filters\" }\nconst _hoisted_4 = { class: \"regionmenu__val\" }\nconst _hoisted_5 = {\n  key: 0,\n  class: \"regionmenu__pop\"\n}\nconst _hoisted_6 = [\"onMousedown\"]\nconst _hoisted_7 = {\n  key: 0,\n  width: \"14\",\n  height: \"14\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"var(--snl-mint)\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_8 = { class: \"regionmenu__val\" }\nconst _hoisted_9 = {\n  key: 0,\n  class: \"regionmenu__pop\"\n}\nconst _hoisted_10 = [\"onMousedown\"]\nconst _hoisted_11 = {\n  key: 0,\n  width: \"14\",\n  height: \"14\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"var(--snl-mint)\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = { class: \"regionmenu__val\" }\nconst _hoisted_13 = {\n  key: 0,\n  class: \"regionmenu__pop\"\n}\nconst _hoisted_14 = {\n  key: 0,\n  width: \"14\",\n  height: \"14\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"var(--snl-mint)\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_15 = [\"onMousedown\"]\nconst _hoisted_16 = { class: \"regionmenu__itemlbl\" }\nconst _hoisted_17 = {\n  key: 0,\n  class: \"regionmenu__hint\"\n}\nconst _hoisted_18 = {\n  key: 0,\n  width: \"14\",\n  height: \"14\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"var(--snl-mint)\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_19 = { class: \"regionmenu__val\" }\nconst _hoisted_20 = {\n  key: 0,\n  class: \"regionmenu__pop\"\n}\nconst _hoisted_21 = [\"onMousedown\"]\nconst _hoisted_22 = {\n  key: 0,\n  width: \"14\",\n  height: \"14\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"var(--snl-mint)\",\n  \"stroke-width\": \"2.4\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_23 = {\n  key: 0,\n  class: \"subnav__extras\"\n}\nconst _hoisted_24 = { class: \"subnav__count\" }\nconst _hoisted_25 = { class: \"subnav__search\" }\nconst _hoisted_26 = [\"href\"]\nconst _hoisted_27 = { class: \"mobilebar\" }\nconst _hoisted_28 = {\n  key: 0,\n  class: \"mobilebar__badge\"\n}\nconst _hoisted_29 = { class: \"mobilebar__count\" }\nconst _hoisted_30 = [\"href\"]\nconst _hoisted_31 = { class: \"vk-left\" }\nconst _hoisted_32 = {\n  key: 0,\n  class: \"vk-status\"\n}\nconst _hoisted_33 = {\n  key: 1,\n  class: \"vk-status vk-status--error\"\n}\nconst _hoisted_34 = {\n  key: 2,\n  ref: \"listEl\",\n  class: \"vk-left__list\"\n}\nconst _hoisted_35 = [\"onClick\"]\nconst _hoisted_36 = { class: \"loccard__row\" }\nconst _hoisted_37 = { class: \"loccard__body\" }\nconst _hoisted_38 = { class: \"loccard__name\" }\nconst _hoisted_39 = {\n  key: 0,\n  class: \"loccard__chip\",\n  title: \"In planning\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_40 = {\n  key: 1,\n  class: \"loccard__fbchip\",\n  title: \"Beoordeeld\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_41 = { class: \"loccard__meta\" }\nconst _hoisted_42 = { class: \"loccard__sub\" }\nconst _hoisted_43 = { class: \"loccard__num\" }\nconst _hoisted_44 = {\n  class: \"loccard__bar\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_45 = {\n  key: 0,\n  ref: \"sentinelEl\",\n  class: \"vk-sentinel\"\n}\nconst _hoisted_46 = {\n  key: 1,\n  class: \"vk-empty\"\n}\nconst _hoisted_47 = { class: \"vk-map\" }\nconst _hoisted_48 = { class: \"vk-map__legend\" }\nconst _hoisted_49 = {\n  class: \"seg\",\n  role: \"group\",\n  \"aria-label\": \"Kaart of lijst\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createCommentVNode(\" ===== Sub-toolbar: regio + soort + geschiktheid + feedback + count + zoeken ===== \"),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createCommentVNode(\" Alle filter-pills in één wrappende groep. Bij krappe (maar nog niet-\\n           mobiele) breedtes wrappen ze naar een tweede regel i.p.v. buiten beeld\\n           te vallen. Bewust géén overflow-x:auto — dat zou overflow-y forceren\\n           en de dropdown-menu's afkappen. \"),\n      _createElementVNode(\"div\", _hoisted_3, [\n        _createElementVNode(\"div\", {\n          class: \"regionmenu\",\n          onFocusout: $setup.onRegionBlur\n        }, [\n          _createElementVNode(\"button\", {\n            class: \"regionmenu__btn\",\n            type: \"button\",\n            onClick: _cache[0] || (_cache[0] = $event => ($setup.regionOpen = !$setup.regionOpen))\n          }, [\n            _cache[14] || (_cache[14] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"var(--snl-mint)\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\" }),\n              _createElementVNode(\"circle\", {\n                cx: \"12\",\n                cy: \"10\",\n                r: \"2.5\"\n              })\n            ], -1 /* CACHED */)),\n            _cache[15] || (_cache[15] = _createElementVNode(\"span\", { class: \"regionmenu__lbl\" }, \"Regio\", -1 /* CACHED */)),\n            _createElementVNode(\"span\", _hoisted_4, _toDisplayString($setup.region), 1 /* TEXT */),\n            _cache[16] || (_cache[16] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\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: \"m6 9 6 6 6-6\" })\n            ], -1 /* CACHED */))\n          ]),\n          ($setup.regionOpen)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.regionOptions, (r) => {\n                  return (_openBlock(), _createElementBlock(\"button\", {\n                    key: r,\n                    type: \"button\",\n                    class: _normalizeClass([\"regionmenu__item\", { 'is-on': r === $setup.region }]),\n                    onMousedown: _withModifiers($event => ($setup.selectRegion(r)), [\"prevent\"])\n                  }, [\n                    _createTextVNode(_toDisplayString(r) + \" \", 1 /* TEXT */),\n                    (r === $setup.region)\n                      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_7, _cache[17] || (_cache[17] = [\n                          _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                        ])))\n                      : _createCommentVNode(\"v-if\", true)\n                  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_6))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 32 /* NEED_HYDRATION */),\n        _createCommentVNode(\" \\\"Soort\\\" filter — a single-select twin of the Regio dropdown above.\\n           Reuses the regionmenu classes (identical styling) on purpose. \"),\n        _createElementVNode(\"div\", {\n          class: \"regionmenu\",\n          onFocusout: $setup.onCategoryBlur\n        }, [\n          _createElementVNode(\"button\", {\n            class: \"regionmenu__btn\",\n            type: \"button\",\n            onClick: _cache[1] || (_cache[1] = $event => ($setup.categoryOpen = !$setup.categoryOpen))\n          }, [\n            _cache[18] || (_cache[18] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"var(--snl-mint)\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M20.59 13.41 13.42 20.6a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82Z\" }),\n              _createElementVNode(\"circle\", {\n                cx: \"7\",\n                cy: \"7\",\n                r: \"1.2\"\n              })\n            ], -1 /* CACHED */)),\n            _cache[19] || (_cache[19] = _createElementVNode(\"span\", { class: \"regionmenu__lbl\" }, \"Soort\", -1 /* CACHED */)),\n            _createElementVNode(\"span\", _hoisted_8, _toDisplayString($setup.categoryValueLabel), 1 /* TEXT */),\n            _cache[20] || (_cache[20] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\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: \"m6 9 6 6 6-6\" })\n            ], -1 /* CACHED */))\n          ]),\n          ($setup.categoryOpen)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.categoryOptions, (c) => {\n                  return (_openBlock(), _createElementBlock(\"button\", {\n                    key: c,\n                    type: \"button\",\n                    class: _normalizeClass([\"regionmenu__item\", { 'is-on': $setup.isCategoryOn(c) }]),\n                    onMousedown: _withModifiers($event => ($setup.toggleCategory(c)), [\"prevent\"])\n                  }, [\n                    _createTextVNode(_toDisplayString($setup.typeLabel(c)) + \" \", 1 /* TEXT */),\n                    ($setup.isCategoryOn(c))\n                      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, _cache[21] || (_cache[21] = [\n                          _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                        ])))\n                      : _createCommentVNode(\"v-if\", true)\n                  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_10))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 32 /* NEED_HYDRATION */),\n        _createCommentVNode(\" \\\"Geschiktheid\\\" — multi-select on the four AI-score levels. \\\"Alle\\n           geschiktheden\\\" at the top is a master that ticks/unticks all four;\\n           below it the four levels toggle individually. There is no separate\\n           \\\"Zonder analyse\\\" row: unticking every level (empty selection) shows the\\n           without-analysis locations. \"),\n        _createElementVNode(\"div\", {\n          class: \"regionmenu\",\n          onFocusout: $setup.onBucketBlur\n        }, [\n          _createElementVNode(\"button\", {\n            class: \"regionmenu__btn\",\n            type: \"button\",\n            onClick: _cache[2] || (_cache[2] = $event => ($setup.bucketOpen = !$setup.bucketOpen))\n          }, [\n            _cache[22] || (_cache[22] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"var(--snl-mint)\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M3 3v18h18\" }),\n              _createElementVNode(\"path\", { d: \"M7 16v-5M12 16V8M17 16v-9\" })\n            ], -1 /* CACHED */)),\n            _cache[23] || (_cache[23] = _createElementVNode(\"span\", { class: \"regionmenu__lbl\" }, \"Geschiktheid\", -1 /* CACHED */)),\n            _createElementVNode(\"span\", _hoisted_12, _toDisplayString($setup.bucketValueLabel), 1 /* TEXT */),\n            _cache[24] || (_cache[24] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\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: \"m6 9 6 6 6-6\" })\n            ], -1 /* CACHED */))\n          ]),\n          ($setup.bucketOpen)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: _normalizeClass([\"regionmenu__item\", { 'is-on': $setup.isAllBucketsOn }]),\n                  onMousedown: _withModifiers($setup.toggleAllBuckets, [\"prevent\"])\n                }, [\n                  _cache[26] || (_cache[26] = _createElementVNode(\"span\", { class: \"regionmenu__itemlbl\" }, \"Alle geschiktheden\", -1 /* CACHED */)),\n                  ($setup.isAllBucketsOn)\n                    ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_14, _cache[25] || (_cache[25] = [\n                        _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                      ])))\n                    : _createCommentVNode(\"v-if\", true)\n                ], 34 /* CLASS, NEED_HYDRATION */),\n                _cache[28] || (_cache[28] = _createElementVNode(\"div\", { class: \"regionmenu__sep\" }, null, -1 /* CACHED */)),\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.SCORED_BUCKET_OPTIONS, (b) => {\n                  return (_openBlock(), _createElementBlock(\"button\", {\n                    key: b.id,\n                    type: \"button\",\n                    class: _normalizeClass([\"regionmenu__item\", { 'is-on': $setup.isBucketOn(b.id) }]),\n                    onMousedown: _withModifiers($event => ($setup.toggleBucket(b.id)), [\"prevent\"])\n                  }, [\n                    _createElementVNode(\"span\", _hoisted_16, [\n                      _createTextVNode(_toDisplayString(b.label), 1 /* TEXT */),\n                      (b.hint)\n                        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_17, _toDisplayString(b.hint), 1 /* TEXT */))\n                        : _createCommentVNode(\"v-if\", true)\n                    ]),\n                    ($setup.isBucketOn(b.id))\n                      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_18, _cache[27] || (_cache[27] = [\n                          _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                        ])))\n                      : _createCommentVNode(\"v-if\", true)\n                  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_15))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 32 /* NEED_HYDRATION */),\n        _createCommentVNode(\" \\\"Feedback\\\" — single-select on whether any field feedback exists for the\\n           location (from any user). Replaces the two feedback chips. \"),\n        _createElementVNode(\"div\", {\n          class: \"regionmenu\",\n          onFocusout: $setup.onFeedbackBlur\n        }, [\n          _createElementVNode(\"button\", {\n            class: \"regionmenu__btn\",\n            type: \"button\",\n            onClick: _cache[3] || (_cache[3] = $event => ($setup.feedbackOpen = !$setup.feedbackOpen))\n          }, [\n            _cache[29] || (_cache[29] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"var(--snl-mint)\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M21 11.5a8.38 8.38 0 0 1-8.5 8.5 8.5 8.5 0 0 1-3.8-.9L3 21l1.9-5.7a8.5 8.5 0 0 1-.9-3.8A8.38 8.38 0 0 1 12.5 3a8.38 8.38 0 0 1 8.5 8.5Z\" })\n            ], -1 /* CACHED */)),\n            _cache[30] || (_cache[30] = _createElementVNode(\"span\", { class: \"regionmenu__lbl\" }, \"Feedback\", -1 /* CACHED */)),\n            _createElementVNode(\"span\", _hoisted_19, _toDisplayString($setup.feedbackValueLabel), 1 /* TEXT */),\n            _cache[31] || (_cache[31] = _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\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: \"m6 9 6 6 6-6\" })\n            ], -1 /* CACHED */))\n          ]),\n          ($setup.feedbackOpen)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_20, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.FEEDBACK_OPTIONS, (f) => {\n                  return (_openBlock(), _createElementBlock(\"button\", {\n                    key: f.id,\n                    type: \"button\",\n                    class: _normalizeClass([\"regionmenu__item\", { 'is-on': $setup.feedbackFilter === f.id }]),\n                    onMousedown: _withModifiers($event => ($setup.selectFeedback(f.id)), [\"prevent\"])\n                  }, [\n                    _createTextVNode(_toDisplayString(f.label) + \" \", 1 /* TEXT */),\n                    ($setup.feedbackFilter === f.id)\n                      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_22, _cache[32] || (_cache[32] = [\n                          _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" }, null, -1 /* CACHED */)\n                        ])))\n                      : _createCommentVNode(\"v-if\", true)\n                  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_21))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 32 /* NEED_HYDRATION */),\n        _createCommentVNode(\" Optionele extra controls (bv. radius/inwoners-pills in een combo-view).\\n           Krijgen via flex-basis:100% altijd hun eigen regel ónder de standaard\\n           Regio/Soort/Geschiktheid/Feedback-pills (niet pas bij krappe breedte).\\n           Alleen gerenderd als de slot gevuld is, zodat de live PWA zonder extras\\n           geen lege tweede regel krijgt. Op mobiel zit de subnav `display: none`,\\n           dus dit is desktop-only — het mobiele equivalent zit in FilterPanel. \"),\n        (_ctx.$slots.subnavExtras)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_23, [\n              _renderSlot(_ctx.$slots, \"subnavExtras\", {}, undefined, true)\n            ]))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _createElementVNode(\"div\", _hoisted_24, [\n        _createElementVNode(\"b\", null, _toDisplayString($setup.filtered.length), 1 /* TEXT */),\n        _createTextVNode(\" \" + _toDisplayString($setup.filtered.length === 1 ? \"locatie\" : \"locaties\"), 1 /* TEXT */)\n      ]),\n      _createElementVNode(\"label\", _hoisted_25, [\n        _cache[34] || (_cache[34] = _createElementVNode(\"svg\", {\n          width: \"16\",\n          height: \"16\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"rgba(255,255,255,0.45)\",\n          \"stroke-width\": \"2.2\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"circle\", {\n            cx: \"11\",\n            cy: \"11\",\n            r: \"7\"\n          }),\n          _createElementVNode(\"path\", { d: \"m20 20-3.5-3.5\" })\n        ], -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"input\", {\n          \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => (($setup.query) = $event)),\n          type: \"search\",\n          placeholder: \"Zoek bedrijfsnaam, stad of adres…\",\n          \"aria-label\": \"Zoek locatie\"\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelText, $setup.query]\n        ]),\n        ($setup.query)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 0,\n              type: \"button\",\n              class: \"subnav__searchclear\",\n              \"aria-label\": \"Wis zoekterm\",\n              onClick: _cache[5] || (_cache[5] = $event => ($setup.query = ''))\n            }, _cache[33] || (_cache[33] = [\n              _createElementVNode(\"svg\", {\n                width: \"12\",\n                height: \"12\",\n                viewBox: \"0 0 24 24\",\n                fill: \"none\",\n                stroke: \"currentColor\",\n                \"stroke-width\": \"2.4\",\n                \"stroke-linecap\": \"round\",\n                \"stroke-linejoin\": \"round\",\n                \"aria-hidden\": \"true\"\n              }, [\n                _createElementVNode(\"path\", { d: \"M18 6 6 18M6 6l12 12\" })\n              ], -1 /* CACHED */)\n            ])))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _createCommentVNode(\" Handmatig locatie toevoegen (TEC-129): staat een locatie niet in de\\n           lijst, dan voegt de agent 'm hier toe. \"),\n      _createElementVNode(\"a\", {\n        href: $setup.urlAddLocation(),\n        class: \"subnav__add\"\n      }, _cache[35] || (_cache[35] = [\n        _createElementVNode(\"svg\", {\n          width: \"15\",\n          height: \"15\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"2.4\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M12 5v14M5 12h14\" })\n        ], -1 /* CACHED */),\n        _createTextVNode(\" Locatie toevoegen \", -1 /* CACHED */)\n      ]), 8 /* PROPS */, _hoisted_26)\n    ]),\n    _createCommentVNode(\" ===== Mobile toolbar: Filters button + count =====\\n         Shown only < 960px, where the inline .subnav dropdowns would overflow\\n         off-screen. Opens the slide-in FilterPanel. The Lijst/Kaart toggle lives\\n         in a fixed bar at the bottom (.seg, below). \"),\n    _createElementVNode(\"div\", _hoisted_27, [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"mobilebar__filters\",\n        onClick: _cache[6] || (_cache[6] = $event => ($setup.filtersOpen = true))\n      }, [\n        _cache[36] || (_cache[36] = _createElementVNode(\"svg\", {\n          width: \"16\",\n          height: \"16\",\n          viewBox: \"0 0 24 24\",\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: \"M3 5h18M6 12h12M10 19h4\" })\n        ], -1 /* CACHED */)),\n        _cache[37] || (_cache[37] = _createElementVNode(\"span\", null, \"Filters\", -1 /* CACHED */)),\n        ($setup.activeCount > 0)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_28, _toDisplayString($setup.activeCount), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _createElementVNode(\"span\", _hoisted_29, _toDisplayString($setup.filtered.length) + \" \" + _toDisplayString($setup.filtered.length === 1 ? \"locatie\" : \"locaties\"), 1 /* TEXT */),\n      _createElementVNode(\"a\", {\n        href: $setup.urlAddLocation(),\n        class: \"mobilebar__add\",\n        \"aria-label\": \"Locatie toevoegen\"\n      }, _cache[38] || (_cache[38] = [\n        _createElementVNode(\"svg\", {\n          width: \"16\",\n          height: \"16\",\n          viewBox: \"0 0 24 24\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"2.4\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M12 5v14M5 12h14\" })\n        ], -1 /* CACHED */)\n      ]), 8 /* PROPS */, _hoisted_30)\n    ]),\n    _createCommentVNode(\" ===== List + map ===== \"),\n    _createElementVNode(\"div\", {\n      class: _normalizeClass([\"verkennen\", `verkennen--${$setup.mobileView}`])\n    }, [\n      _createElementVNode(\"aside\", _hoisted_31, [\n        ($setup.isLoading)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_32, \"Locaties laden…\"))\n          : ($setup.error)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_33, _toDisplayString($setup.error), 1 /* TEXT */))\n            : (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.visible, (loc) => {\n                  return (_openBlock(), _createElementBlock(\"button\", {\n                    key: loc.id,\n                    type: \"button\",\n                    class: _normalizeClass([\"loccard\", { 'loccard--sel': $setup.selectedId === loc.id }]),\n                    onClick: $event => ($setup.select(loc.id))\n                  }, [\n                    _createElementVNode(\"div\", _hoisted_36, [\n                      _cache[44] || (_cache[44] = _createElementVNode(\"span\", {\n                        class: \"loccard__icon\",\n                        \"aria-hidden\": \"true\"\n                      }, [\n                        _createElementVNode(\"svg\", {\n                          width: \"20\",\n                          height: \"20\",\n                          viewBox: \"0 0 24 24\",\n                          fill: \"none\",\n                          stroke: \"var(--snl-mint)\",\n                          \"stroke-width\": \"1.8\",\n                          \"stroke-linecap\": \"round\",\n                          \"stroke-linejoin\": \"round\"\n                        }, [\n                          _createElementVNode(\"path\", { d: \"M12 22s7-6.5 7-12a7 7 0 1 0-14 0c0 5.5 7 12 7 12Z\" }),\n                          _createElementVNode(\"circle\", {\n                            cx: \"12\",\n                            cy: \"10\",\n                            r: \"2.5\"\n                          })\n                        ])\n                      ], -1 /* CACHED */)),\n                      _createElementVNode(\"span\", _hoisted_37, [\n                        _createElementVNode(\"span\", _hoisted_38, [\n                          _createTextVNode(_toDisplayString(loc.companyName) + \" \", 1 /* TEXT */),\n                          ($setup.planningIds.includes(loc.id))\n                            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_39, _cache[39] || (_cache[39] = [\n                                _createElementVNode(\"svg\", {\n                                  width: \"10\",\n                                  height: \"10\",\n                                  viewBox: \"0 0 24 24\",\n                                  fill: \"none\",\n                                  stroke: \"var(--snl-ink)\",\n                                  \"stroke-width\": \"3\",\n                                  \"stroke-linecap\": \"round\",\n                                  \"stroke-linejoin\": \"round\"\n                                }, [\n                                  _createElementVNode(\"path\", { d: \"M5 13l4 4L19 7\" })\n                                ], -1 /* CACHED */)\n                              ])))\n                            : _createCommentVNode(\"v-if\", true),\n                          _createCommentVNode(\" \\\"Beoordeeld\\\"-chip: clipboard-met-vinkje, hetzelfde glyph als\\n                       de Beoordelingen-tab, iets groter dan de planning-chip. \"),\n                          (loc.hasFeedback)\n                            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_40, _cache[40] || (_cache[40] = [\n                                _createElementVNode(\"svg\", {\n                                  width: \"11\",\n                                  height: \"11\",\n                                  viewBox: \"0 0 24 24\",\n                                  fill: \"none\",\n                                  stroke: \"var(--snl-ink)\",\n                                  \"stroke-width\": \"2.2\",\n                                  \"stroke-linecap\": \"round\",\n                                  \"stroke-linejoin\": \"round\"\n                                }, [\n                                  _createElementVNode(\"path\", { d: \"M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2\" }),\n                                  _createElementVNode(\"rect\", {\n                                    x: \"9\",\n                                    y: \"3\",\n                                    width: \"6\",\n                                    height: \"4\",\n                                    rx: \"1\"\n                                  }),\n                                  _createElementVNode(\"path\", { d: \"m9 14 2 2 4-4\" })\n                                ], -1 /* CACHED */)\n                              ])))\n                            : _createCommentVNode(\"v-if\", true)\n                        ]),\n                        _createElementVNode(\"span\", _hoisted_41, [\n                          ($setup.recommendationFor(loc).badge)\n                            ? (_openBlock(), _createElementBlock(\"span\", {\n                                key: 0,\n                                class: \"loccard__badge\",\n                                style: _normalizeStyle($setup.badgeStyle(loc.latestScore))\n                              }, _toDisplayString($setup.recommendationFor(loc).badge), 5 /* TEXT, STYLE */))\n                            : _createCommentVNode(\"v-if\", true),\n                          _createElementVNode(\"span\", _hoisted_42, _toDisplayString(loc.city ?? loc.province ?? loc.address), 1 /* TEXT */)\n                        ])\n                      ]),\n                      _createElementVNode(\"span\", {\n                        class: \"loccard__score\",\n                        style: _normalizeStyle({ color: $setup.scoutColor(loc.latestScore) })\n                      }, [\n                        (loc.latestScore === null)\n                          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                              _cache[41] || (_cache[41] = _createElementVNode(\"span\", { class: \"loccard__zero\" }, \"—\", -1 /* CACHED */)),\n                              _cache[42] || (_cache[42] = _createElementVNode(\"span\", { class: \"loccard__num-label\" }, \"Geen analyse\", -1 /* CACHED */))\n                            ], 64 /* STABLE_FRAGMENT */))\n                          : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                              _createElementVNode(\"span\", _hoisted_43, _toDisplayString(loc.latestScore), 1 /* TEXT */),\n                              _cache[43] || (_cache[43] = _createElementVNode(\"span\", { class: \"loccard__num-label\" }, \"AI-score\", -1 /* CACHED */))\n                            ], 64 /* STABLE_FRAGMENT */))\n                      ], 4 /* STYLE */)\n                    ]),\n                    _createElementVNode(\"span\", _hoisted_44, [\n                      _createElementVNode(\"span\", {\n                        class: \"loccard__bar-fill\",\n                        style: _normalizeStyle($setup.barStyle(loc.latestScore))\n                      }, null, 4 /* STYLE */)\n                    ])\n                  ], 10 /* CLASS, PROPS */, _hoisted_35))\n                }), 128 /* KEYED_FRAGMENT */)),\n                _createCommentVNode(\" Infinite-scroll sentinel: rendered while more results remain; an\\n               IntersectionObserver on it appends the next batch as it scrolls\\n               into view. \"),\n                ($setup.visible.length < $setup.filtered.length)\n                  ? (_openBlock(), _createElementBlock(\"div\", _hoisted_45, _cache[45] || (_cache[45] = [\n                      _createElementVNode(\"span\", { class: \"vk-sentinel__dot\" }, null, -1 /* CACHED */),\n                      _createTextVNode(\" Meer laden… \", -1 /* CACHED */)\n                    ]), 512 /* NEED_PATCH */))\n                  : _createCommentVNode(\"v-if\", true),\n                ($setup.filtered.length === 0)\n                  ? (_openBlock(), _createElementBlock(\"div\", _hoisted_46, [\n                      _cache[46] || (_cache[46] = _createElementVNode(\"svg\", {\n                        width: \"28\",\n                        height: \"28\",\n                        viewBox: \"0 0 24 24\",\n                        fill: \"none\",\n                        stroke: \"rgba(255,255,255,0.3)\",\n                        \"stroke-width\": \"1.8\",\n                        \"stroke-linecap\": \"round\",\n                        \"stroke-linejoin\": \"round\",\n                        \"aria-hidden\": \"true\"\n                      }, [\n                        _createElementVNode(\"circle\", {\n                          cx: \"11\",\n                          cy: \"11\",\n                          r: \"7\"\n                        }),\n                        _createElementVNode(\"path\", { d: \"m20 20-3.5-3.5\" })\n                      ], -1 /* CACHED */)),\n                      _cache[47] || (_cache[47] = _createElementVNode(\"div\", null, \"Geen locaties gevonden.\", -1 /* CACHED */)),\n                      _createElementVNode(\"button\", {\n                        type: \"button\",\n                        class: \"vk-linkbtn\",\n                        onClick: $setup.resetFilters\n                      }, \"Filters resetten\")\n                    ]))\n                  : _createCommentVNode(\"v-if\", true)\n              ], 512 /* NEED_PATCH */))\n      ]),\n      _createElementVNode(\"section\", _hoisted_47, [\n        _createVNode($setup[\"ScoutMap\"], {\n          ref: \"scoutMapRef\",\n          locations: $setup.filtered,\n          \"selected-id\": $setup.selectedId,\n          \"planning-ids\": $setup.planningIds,\n          overlay: $props.mapOverlay ?? null,\n          \"funnel-pins\": $props.mapFunnelPins ?? null,\n          radii: $props.mapRadii ?? null,\n          onSelect: $setup.select,\n          onFunnelPopupOpen: _cache[7] || (_cache[7] = (id, el) => $setup.emit('funnel-popup-open', id, el)),\n          onFunnelPopupClose: _cache[8] || (_cache[8] = (id) => $setup.emit('funnel-popup-close', id))\n        }, null, 8 /* PROPS */, [\"locations\", \"selected-id\", \"planning-ids\", \"overlay\", \"funnel-pins\", \"radii\"]),\n        _createElementVNode(\"div\", _hoisted_48, [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.SCOUT_LEGEND, (row) => {\n            return (_openBlock(), _createElementBlock(\"div\", {\n              key: row.label,\n              class: \"vk-map__legend-row\"\n            }, [\n              _createElementVNode(\"span\", {\n                class: \"vk-dot\",\n                style: _normalizeStyle({ background: row.color })\n              }, null, 4 /* STYLE */),\n              _createTextVNode(_toDisplayString(row.label), 1 /* TEXT */)\n            ]))\n          }), 128 /* KEYED_FRAGMENT */))\n        ]),\n        _createCommentVNode(\" Optionele floating widgets bovenop de kaart (bv. funnel-stage\\n             legenda). Plaatsing is aan de slot-content. Backward-compatible —\\n             leeg laten = exact het oude gedrag. \"),\n        _renderSlot(_ctx.$slots, \"mapOverlay\", {}, undefined, true)\n      ])\n    ], 2 /* CLASS */),\n    _createCommentVNode(\" Fixed Lijst/Kaart toggle (mobile only), pinned above the bottom tabbar.\\n         Placed as a sibling of .verkennen — NOT inside it — so it lives in the\\n         parent stacking context and paints above the map's z-index:1 context,\\n         instead of being trapped among Leaflet's leaked z-indexes. \"),\n    _createElementVNode(\"div\", _hoisted_49, [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass([\"seg__btn\", { 'seg__btn--on': $setup.mobileView === 'map' }]),\n        onClick: _cache[9] || (_cache[9] = $event => ($setup.mobileView = 'map'))\n      }, _cache[48] || (_cache[48] = [\n        _createElementVNode(\"svg\", {\n          width: \"15\",\n          height: \"15\",\n          viewBox: \"0 0 24 24\",\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: \"m9 4-6 2v14l6-2 6 2 6-2V4l-6 2-6-2zM9 4v14M15 6v14\" })\n        ], -1 /* CACHED */),\n        _createTextVNode(\" Kaart \", -1 /* CACHED */)\n      ]), 2 /* CLASS */),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass([\"seg__btn\", { 'seg__btn--on': $setup.mobileView === 'list' }]),\n        onClick: _cache[10] || (_cache[10] = $event => ($setup.mobileView = 'list'))\n      }, _cache[49] || (_cache[49] = [\n        _createElementVNode(\"svg\", {\n          width: \"15\",\n          height: \"15\",\n          viewBox: \"0 0 24 24\",\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: \"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\" })\n        ], -1 /* CACHED */),\n        _createTextVNode(\" Lijst \", -1 /* CACHED */)\n      ]), 2 /* CLASS */)\n    ]),\n    _createCommentVNode(\" Mobile slide-in filter panel (no-op on desktop: only the mobilebar\\n         button opens it, and that button is hidden ≥ 960px). \"),\n    _createVNode($setup[\"FilterPanel\"], {\n      open: $setup.filtersOpen,\n      region: $setup.region,\n      \"selected-types\": $setup.selectedTypes,\n      \"selected-buckets\": $setup.selectedBuckets,\n      \"feedback-filter\": $setup.feedbackFilter,\n      query: $setup.query,\n      \"onUpdate:query\": _cache[11] || (_cache[11] = $event => (($setup.query) = $event)),\n      \"region-options\": $setup.regionOptions,\n      \"category-options\": $setup.categoryOptions,\n      \"result-count\": $setup.filtered.length,\n      collapsible: $props.filtersCollapsible,\n      onSelectRegion: $setup.selectRegion,\n      onToggleType: $setup.toggleCategory,\n      onToggleBucket: $setup.toggleBucket,\n      onToggleAllBuckets: $setup.toggleAllBuckets,\n      onSelectFeedback: $setup.selectFeedback,\n      onReset: $setup.resetFilters,\n      onClose: _cache[12] || (_cache[12] = $event => ($setup.filtersOpen = false))\n    }, _createSlots({ _: 2 /* DYNAMIC */ }, [\n      (_ctx.$slots.filterPanelExtras)\n        ? {\n            name: \"extras\",\n            fn: _withCtx(() => [\n              _renderSlot(_ctx.$slots, \"filterPanelExtras\", {}, undefined, true)\n            ]),\n            key: \"0\"\n          }\n        : undefined\n    ]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"open\", \"region\", \"selected-types\", \"selected-buckets\", \"feedback-filter\", \"query\", \"region-options\", \"category-options\", \"result-count\", \"collapsible\"]),\n    ($setup.selectedId !== null)\n      ? (_openBlock(), _createBlock($setup[\"LocationDetailPanel\"], {\n          key: 0,\n          \"location-id\": $setup.selectedId,\n          onClose: _cache[13] || (_cache[13] = $event => ($setup.selectedId = null))\n        }, null, 8 /* PROPS */, [\"location-id\"]))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenView.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenView.vue\";script.__scopeId = \"data-v-c69a4057\";export default script;","<template>\n  <!-- Desktop: pill+popover in de toolbar. -->\n  <FilterPill v-if=\"variant === 'pill'\" :label=\"'Inwoners'\" :value=\"valueLabel\">\n    <template #icon>\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"/>\n        <circle cx=\"9\" cy=\"7\" r=\"4\"/>\n        <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"/>\n        <path d=\"M16 3.13a4 4 0 0 1 0 7.75\"/>\n      </svg>\n    </template>\n    <div class=\"inw\">\n      <InwonersSlider :model-value=\"modelValue\" @update:model-value=\"$emit('update:modelValue', $event)\" />\n      <p class=\"inw__hint\">\n        Gemeenten kleiner dan deze drempel worden gedimd op de kaart en hun\n        locaties verborgen.\n      </p>\n    </div>\n  </FilterPill>\n\n  <!-- Mobiel: body-only voor in een AccordionSection (die levert de kop +\n       huidige waarde). De slider toont z'n eigen \"Minimaal X inwoners\". -->\n  <div v-else class=\"inw\">\n    <InwonersSlider :model-value=\"modelValue\" @update:model-value=\"$emit('update:modelValue', $event)\" />\n    <p class=\"inw__hint\">\n      Gemeenten kleiner dan deze drempel worden gedimd op de kaart en hun\n      locaties verborgen.\n    </p>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport FilterPill from \"./FilterPill.vue\";\nimport InwonersSlider from \"./InwonersSlider.vue\";\n\n// `variant` bepaalt de weergave: \"pill\" (default) = toolbar-dropdown op desktop;\n// \"section\" = platte sectie binnen het mobiele FilterPanel. Eén component, één\n// v-model, twee renderings — geen duplicatie van state.\nconst props = withDefaults(\n  defineProps<{ modelValue: number; variant?: \"pill\" | \"section\" }>(),\n  { variant: \"pill\" },\n);\ndefineEmits<{ \"update:modelValue\": [value: number] }>();\n\nconst valueLabel = computed(() => `≥ ${props.modelValue.toLocaleString(\"nl-NL\")}`);\n</script>\n\n<style scoped>\n/* min-width 0: in de pill-popover geeft FilterPill zelf de breedte; in de\n   accordion-body moet de slider gewoon meeschalen met het panel. */\n.inw { display: flex; flex-direction: column; gap: 8px; min-width: 0; }\n.inw__hint {\n  margin: 0;\n  font-size: 11px;\n  line-height: 1.5;\n  color: var(--snl-fg-muted);\n}\n</style>\n","<template>\n  <div class=\"pill\" @focusout=\"onBlur\">\n    <button class=\"pill__btn\" type=\"button\" @click=\"open = !open\" :aria-expanded=\"open\">\n      <slot name=\"icon\" />\n      <span class=\"pill__lbl\">{{ label }}</span>\n      <span class=\"pill__val\">{{ value }}</span>\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"m6 9 6 6 6-6\"/>\n      </svg>\n    </button>\n    <div v-if=\"open\" class=\"pill__pop\">\n      <slot />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n\n// Generieke pill+popup-dropdown die de regionmenu-stijl van VerkennenView\n// matcht. Gebruikt door InwonersFilterPill en RadiusFilterPill. Visueel\n// identiek aan de Regio/Soort/Geschiktheid/Feedback-pills, alleen met een\n// custom slot in plaats van een vaste optie-lijst.\n//\n// Hergebruikt opzettelijk de --snl-* tokens (geen eigen kleuren) zodat het\n// 1-op-1 in de PWA-look past — vereist door prototypes/CLAUDE.md.\n\ndefineProps<{\n  /** Klein gemuted label vóór de waarde (matcht \"Regio\"/\"Soort\"-pills). */\n  label: string;\n  /** Korte zichtbare waarde rechts van het label (bv. \"≥ 40.000 inw.\"). */\n  value: string;\n}>();\n\nconst open = ref(false);\n\n// Sluit het popup-menu wanneer de focus de pill volledig verlaat. Cruciaal:\n// `focusout` bubbelt óók wanneer de focus van de knop naar een focusbaar\n// element ín het menu verschuift (bv. de range-slider). Zonder de\n// relatedTarget-check zou het menu dan mid-sleep sluiten. Verschuift de focus\n// binnen de pill → niets doen; verlaat hij de pill → sluiten (met klein delay\n// zodat een klik op een knop in het menu nog kan vuren).\nfunction onBlur(e: FocusEvent): void {\n  const pill = e.currentTarget as HTMLElement;\n  const next = e.relatedTarget as Node | null;\n  if (next && pill.contains(next)) return;\n  setTimeout(() => { open.value = false; }, 140);\n}\n</script>\n\n<style scoped>\n.pill { position: relative; flex-shrink: 0; }\n.pill__btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  height: 36px;\n  padding: 0 12px;\n  background: var(--snl-surface);\n  border: 1px solid var(--snl-line);\n  border-radius: 10px;\n  font-family: inherit;\n  font-size: 13px;\n  font-weight: 600;\n  color: var(--snl-fg);\n  cursor: pointer;\n}\n.pill__btn:hover { background: var(--snl-surface-2); border-color: var(--snl-line-strong); }\n.pill__lbl { color: var(--snl-fg-muted); font-weight: 500; }\n.pill__val { color: var(--snl-fg); font-weight: 700; }\n.pill__pop {\n  position: absolute;\n  left: 0;\n  top: 40px;\n  z-index: 30;\n  min-width: 260px;\n  padding: 12px;\n  background: var(--snl-surface-2);\n  border: 1px solid var(--snl-line-strong);\n  border-radius: 10px;\n  box-shadow: 0 18px 40px -10px rgba(0, 0, 0, 0.6);\n}\n</style>\n","import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-expanded\"]\nconst _hoisted_2 = { class: \"pill__lbl\" }\nconst _hoisted_3 = { class: \"pill__val\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"pill__pop\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: \"pill\",\n    onFocusout: $setup.onBlur\n  }, [\n    _createElementVNode(\"button\", {\n      class: \"pill__btn\",\n      type: \"button\",\n      onClick: _cache[0] || (_cache[0] = $event => ($setup.open = !$setup.open)),\n      \"aria-expanded\": $setup.open\n    }, [\n      _renderSlot(_ctx.$slots, \"icon\", {}, undefined, true),\n      _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.label), 1 /* TEXT */),\n      _createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.value), 1 /* TEXT */),\n      _cache[1] || (_cache[1] = _createElementVNode(\"svg\", {\n        width: \"14\",\n        height: \"14\",\n        viewBox: \"0 0 24 24\",\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: \"m6 9 6 6 6-6\" })\n      ], -1 /* CACHED */))\n    ], 8 /* PROPS */, _hoisted_1),\n    ($setup.open)\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n          _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n        ]))\n      : _createCommentVNode(\"v-if\", true)\n  ], 32 /* NEED_HYDRATION */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPill.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPill.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPill.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FilterPill.vue\";script.__scopeId = \"data-v-8221918a\";export default script;","<template>\n  <div class=\"slider\">\n    <label class=\"slider__label\" for=\"inwoners-slider\">\n      Minimaal <strong>{{ formatted }}</strong> inwoners\n    </label>\n    <input\n      id=\"inwoners-slider\"\n      type=\"range\"\n      class=\"slider__input\"\n      min=\"0\"\n      :max=\"STEPS\"\n      step=\"1\"\n      :value=\"sliderPos\"\n      @input=\"onInput\"\n    />\n    <div class=\"slider__ticks\" aria-hidden=\"true\">\n      <span>1k</span>\n      <span>10k</span>\n      <span>100k</span>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\n// Log-scale 1k → 100k inwoners. Boven 100k zitten in NL nog ~32 gemeenten —\n// genoeg om de max-stand een betekenis te geven (\"alleen middelgrote+ steden\"),\n// terwijl je niet langer balk-ruimte verspilt aan 250k-1M (waar het in NL\n// vrijwel leeg is). De kleinste NL-gemeente (Schiermonnikoog, 971 inw.) valt\n// onder het minimum, dus die is altijd verborgen.\n//\n// Met dit bereik staan de log-ticks 1k/10k/100k op fractie 0/½/1 — exact\n// matchend met `display:flex; justify-content:space-between` op 3 items.\nconst STEPS = 1000;\nconst MIN_INWONERS = 1_000;\nconst MAX_INWONERS = 100_000;\nconst LOG_MIN = Math.log10(MIN_INWONERS); // 3\nconst LOG_MAX = Math.log10(MAX_INWONERS); // 5\nconst LOG_RANGE = LOG_MAX - LOG_MIN;      // 2\n\nconst props = defineProps<{ modelValue: number }>();\nconst emit = defineEmits<{ \"update:modelValue\": [value: number] }>();\n\nconst sliderPos = computed((): number => {\n  const clamped = Math.min(Math.max(props.modelValue, MIN_INWONERS), MAX_INWONERS);\n  return Math.round(((Math.log10(clamped) - LOG_MIN) / LOG_RANGE) * STEPS);\n});\n\nconst formatted = computed((): string => props.modelValue.toLocaleString(\"nl-NL\"));\n\nfunction onInput(e: Event): void {\n  const pos = Number((e.target as HTMLInputElement).value);\n  const raw = Math.pow(10, (pos / STEPS) * LOG_RANGE + LOG_MIN);\n  emit(\"update:modelValue\", roundNice(raw));\n}\n\n// Rond de log-output af op \"leesbare\" stappen zodat de slider niet \"27.834\n// inwoners\" toont maar \"28.000\". Stapgrootte schaalt met de orde van grootte.\nfunction roundNice(n: number): number {\n  if (n < 10_000) return Math.round(n / 100) * 100;\n  if (n < 100_000) return Math.round(n / 1_000) * 1_000;\n  return Math.round(n / 10_000) * 10_000;\n}\n</script>\n\n<style scoped>\n.slider {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n.slider__label {\n  font-size: 13px;\n  color: var(--snl-fg-muted);\n}\n.slider__label strong {\n  color: var(--snl-fg);\n  font-weight: 600;\n  font-variant-numeric: tabular-nums;\n}\n.slider__input {\n  width: 100%;\n  accent-color: var(--snl-mint, #8fccb1);\n  cursor: pointer;\n}\n.slider__ticks {\n  display: flex;\n  justify-content: space-between;\n  font-size: 10px;\n  color: var(--snl-fg-subtle, rgba(255, 255, 255, 0.4));\n  font-variant-numeric: tabular-nums;\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"slider\" }\nconst _hoisted_2 = {\n  class: \"slider__label\",\n  for: \"inwoners-slider\"\n}\nconst _hoisted_3 = [\"value\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"label\", _hoisted_2, [\n      _cache[0] || (_cache[0] = _createTextVNode(\" Minimaal \", -1 /* CACHED */)),\n      _createElementVNode(\"strong\", null, _toDisplayString($setup.formatted), 1 /* TEXT */),\n      _cache[1] || (_cache[1] = _createTextVNode(\" inwoners \", -1 /* CACHED */))\n    ]),\n    _createElementVNode(\"input\", {\n      id: \"inwoners-slider\",\n      type: \"range\",\n      class: \"slider__input\",\n      min: \"0\",\n      max: $setup.STEPS,\n      step: \"1\",\n      value: $setup.sliderPos,\n      onInput: $setup.onInput\n    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_3),\n    _cache[2] || (_cache[2] = _createElementVNode(\"div\", {\n      class: \"slider__ticks\",\n      \"aria-hidden\": \"true\"\n    }, [\n      _createElementVNode(\"span\", null, \"1k\"),\n      _createElementVNode(\"span\", null, \"10k\"),\n      _createElementVNode(\"span\", null, \"100k\")\n    ], -1 /* CACHED */))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersSlider.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersSlider.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersSlider.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersSlider.vue\";script.__scopeId = \"data-v-2674d604\";export default script;","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"inw\" }\nconst _hoisted_2 = { class: \"inw\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Desktop: pill+popover in de toolbar. \"),\n    ($props.variant === 'pill')\n      ? (_openBlock(), _createBlock($setup[\"FilterPill\"], {\n          key: 0,\n          label: 'Inwoners',\n          value: $setup.valueLabel\n        }, {\n          icon: _withCtx(() => _cache[2] || (_cache[2] = [\n            _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"var(--snl-mint)\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" }),\n              _createElementVNode(\"circle\", {\n                cx: \"9\",\n                cy: \"7\",\n                r: \"4\"\n              }),\n              _createElementVNode(\"path\", { d: \"M23 21v-2a4 4 0 0 0-3-3.87\" }),\n              _createElementVNode(\"path\", { d: \"M16 3.13a4 4 0 0 1 0 7.75\" })\n            ], -1 /* CACHED */)\n          ])),\n          default: _withCtx(() => [\n            _createElementVNode(\"div\", _hoisted_1, [\n              _createVNode($setup[\"InwonersSlider\"], {\n                \"model-value\": $props.modelValue,\n                \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (_ctx.$emit('update:modelValue', $event)))\n              }, null, 8 /* PROPS */, [\"model-value\"]),\n              _cache[3] || (_cache[3] = _createElementVNode(\"p\", { class: \"inw__hint\" }, \" Gemeenten kleiner dan deze drempel worden gedimd op de kaart en hun locaties verborgen. \", -1 /* CACHED */))\n            ])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"value\"]))\n      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n          _createCommentVNode(\" Mobiel: body-only voor in een AccordionSection (die levert de kop +\\n       huidige waarde). De slider toont z'n eigen \\\"Minimaal X inwoners\\\". \"),\n          _createElementVNode(\"div\", _hoisted_2, [\n            _createVNode($setup[\"InwonersSlider\"], {\n              \"model-value\": $props.modelValue,\n              \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (_ctx.$emit('update:modelValue', $event)))\n            }, null, 8 /* PROPS */, [\"model-value\"]),\n            _cache[4] || (_cache[4] = _createElementVNode(\"p\", { class: \"inw__hint\" }, \" Gemeenten kleiner dan deze drempel worden gedimd op de kaart en hun locaties verborgen. \", -1 /* CACHED */))\n          ])\n        ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersFilterPill.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersFilterPill.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersFilterPill.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/InwonersFilterPill.vue\";script.__scopeId = \"data-v-bf9786b8\";export default script;","<template>\n  <!-- Desktop: pill+popover in de toolbar. -->\n  <FilterPill v-if=\"variant === 'pill'\" :label=\"'Radius'\" :value=\"valueLabel\">\n    <template #icon>\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <circle cx=\"12\" cy=\"12\" r=\"9\"/>\n        <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n      </svg>\n    </template>\n    <div class=\"rad\">\n      <RadiusBody\n        :model-value=\"modelValue\"\n        :override-count=\"overrideCount\"\n        :max=\"max\"\n        :step=\"step\"\n        @update:model-value=\"$emit('update:modelValue', $event)\"\n        @reset-overrides=\"$emit('reset-overrides')\"\n      />\n    </div>\n  </FilterPill>\n\n  <!-- Mobiel: body-only voor in een AccordionSection (die levert de kop +\n       huidige waarde). De slider-body toont z'n eigen km-waarde. -->\n  <div v-else class=\"rad\">\n    <RadiusBody\n      :model-value=\"modelValue\"\n      :override-count=\"overrideCount\"\n      :max=\"max\"\n      :step=\"step\"\n      @update:model-value=\"$emit('update:modelValue', $event)\"\n      @reset-overrides=\"$emit('reset-overrides')\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport FilterPill from \"./FilterPill.vue\";\nimport RadiusBody from \"./RadiusBody.vue\";\n\n// `variant`: \"pill\" (default) = toolbar-dropdown op desktop; \"section\" = platte\n// sectie binnen het mobiele FilterPanel. De slider-body zelf zit in RadiusBody\n// zodat beide varianten 'm delen zonder duplicatie.\nconst props = withDefaults(\n  defineProps<{\n    /** Huidige radius in meters. */\n    modelValue: number;\n    /** Aantal pins met eigen override-radius (toont reset-knop wanneer > 0). */\n    overrideCount?: number;\n    /** Slider-max in meters. Default 10000 (= 10 km). */\n    max?: number;\n    /** Slider-step in meters. Default 250. */\n    step?: number;\n    /** Weergavevariant. */\n    variant?: \"pill\" | \"section\";\n  }>(),\n  { overrideCount: 0, max: 10000, step: 250, variant: \"pill\" },\n);\n\ndefineEmits<{\n  \"update:modelValue\": [value: number];\n  \"reset-overrides\": [];\n}>();\n\nconst valueLabel = computed(() => fmtKm(props.modelValue));\n\nfunction fmtKm(meters: number): string {\n  const km = meters / 1000;\n  if (km === 0) return \"0 km\";\n  return km >= 10 ? `${km.toFixed(0)} km` : `${km.toFixed(1)} km`;\n}\n</script>\n\n<style scoped>\n/* min-width 0: pill-popover krijgt z'n breedte van FilterPill; in de\n   accordion-body schaalt de slider mee met het panel. */\n.rad { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n</style>\n","<template>\n  <label class=\"rad__label\">\n    <span>Globale radius rondom filterende funnel-locaties</span>\n    <strong>{{ fmtKm(modelValue) }}</strong>\n  </label>\n  <input\n    type=\"range\"\n    :min=\"0\"\n    :max=\"max\"\n    :step=\"step\"\n    :value=\"modelValue\"\n    class=\"rad__input\"\n    @input=\"onInput\"\n  />\n  <div class=\"rad__ticks\">\n    <span>0 km</span><span>{{ fmtKm(max / 4) }}</span><span>{{ fmtKm(max / 2) }}</span><span>{{ fmtKm((max * 3) / 4) }}</span><span>{{ fmtKm(max) }}</span>\n  </div>\n  <p v-if=\"overrideCount > 0\" class=\"rad__overrides\">\n    {{ overrideCount }} locatie(s) met eigen radius —\n    <button type=\"button\" @click=\"$emit('reset-overrides')\" class=\"rad__link\">\n      reset alles\n    </button>\n  </p>\n  <p v-else class=\"rad__hint\">\n    Suggesties binnen deze straal van een filterende funnel-locatie worden\n    verborgen. Klik een funnel-pin voor een eigen radius per locatie.\n  </p>\n</template>\n\n<script setup lang=\"ts\">\n// Gedeelde slider-body van RadiusFilterPill — identiek in de pill- (desktop)\n// en sectie-variant (mobiel FilterPanel), zodat de markup niet dubbel leeft.\n\nconst props = withDefaults(\n  defineProps<{\n    modelValue: number;\n    overrideCount?: number;\n    max?: number;\n    step?: number;\n  }>(),\n  { overrideCount: 0, max: 10000, step: 250 },\n);\n\nconst emit = defineEmits<{\n  \"update:modelValue\": [value: number];\n  \"reset-overrides\": [];\n}>();\n\nfunction fmtKm(meters: number): string {\n  const km = meters / 1000;\n  if (km === 0) return \"0 km\";\n  return km >= 10 ? `${km.toFixed(0)} km` : `${km.toFixed(1)} km`;\n}\n\nfunction onInput(e: Event): void {\n  const v = parseInt((e.target as HTMLInputElement).value, 10);\n  emit(\"update:modelValue\", v);\n}\n</script>\n\n<style scoped>\n.rad__label {\n  display: flex;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: 8px;\n  font-size: 12px;\n  color: var(--snl-fg-muted);\n}\n.rad__label strong {\n  color: var(--snl-fg);\n  font-size: 14px;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n}\n.rad__input {\n  width: 100%;\n  accent-color: var(--snl-mint);\n  cursor: pointer;\n}\n.rad__ticks {\n  display: flex;\n  justify-content: space-between;\n  font-size: 10px;\n  color: var(--snl-fg-subtle, var(--snl-fg-muted));\n  letter-spacing: 0.02em;\n}\n.rad__overrides {\n  margin: 4px 0 0;\n  font-size: 11.5px;\n  color: var(--snl-fg-muted);\n}\n.rad__link {\n  background: none;\n  border: 0;\n  padding: 0;\n  color: var(--snl-mint);\n  cursor: pointer;\n  text-decoration: underline;\n  font: inherit;\n}\n.rad__hint {\n  margin: 4px 0 0;\n  font-size: 11px;\n  line-height: 1.5;\n  color: var(--snl-fg-muted);\n}\n</style>\n","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"rad__label\" }\nconst _hoisted_2 = [\"max\", \"step\", \"value\"]\nconst _hoisted_3 = { class: \"rad__ticks\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"rad__overrides\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"rad__hint\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"label\", _hoisted_1, [\n      _cache[1] || (_cache[1] = _createElementVNode(\"span\", null, \"Globale radius rondom filterende funnel-locaties\", -1 /* CACHED */)),\n      _createElementVNode(\"strong\", null, _toDisplayString($setup.fmtKm($props.modelValue)), 1 /* TEXT */)\n    ]),\n    _createElementVNode(\"input\", {\n      type: \"range\",\n      min: 0,\n      max: $props.max,\n      step: $props.step,\n      value: $props.modelValue,\n      class: \"rad__input\",\n      onInput: $setup.onInput\n    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_2),\n    _createElementVNode(\"div\", _hoisted_3, [\n      _cache[2] || (_cache[2] = _createElementVNode(\"span\", null, \"0 km\", -1 /* CACHED */)),\n      _createElementVNode(\"span\", null, _toDisplayString($setup.fmtKm($props.max / 4)), 1 /* TEXT */),\n      _createElementVNode(\"span\", null, _toDisplayString($setup.fmtKm($props.max / 2)), 1 /* TEXT */),\n      _createElementVNode(\"span\", null, _toDisplayString($setup.fmtKm(($props.max * 3) / 4)), 1 /* TEXT */),\n      _createElementVNode(\"span\", null, _toDisplayString($setup.fmtKm($props.max)), 1 /* TEXT */)\n    ]),\n    ($props.overrideCount > 0)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, [\n          _createTextVNode(_toDisplayString($props.overrideCount) + \" locatie(s) met eigen radius — \", 1 /* TEXT */),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            onClick: _cache[0] || (_cache[0] = $event => (_ctx.$emit('reset-overrides'))),\n            class: \"rad__link\"\n          }, \" reset alles \")\n        ]))\n      : (_openBlock(), _createElementBlock(\"p\", _hoisted_5, \" Suggesties binnen deze straal van een filterende funnel-locatie worden verborgen. Klik een funnel-pin voor een eigen radius per locatie. \"))\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusBody.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusBody.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusBody.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusBody.vue\";script.__scopeId = \"data-v-d233f5c3\";export default script;","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"rad\" }\nconst _hoisted_2 = { class: \"rad\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Desktop: pill+popover in de toolbar. \"),\n    ($props.variant === 'pill')\n      ? (_openBlock(), _createBlock($setup[\"FilterPill\"], {\n          key: 0,\n          label: 'Radius',\n          value: $setup.valueLabel\n        }, {\n          icon: _withCtx(() => _cache[4] || (_cache[4] = [\n            _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"var(--snl-mint)\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"circle\", {\n                cx: \"12\",\n                cy: \"12\",\n                r: \"9\"\n              }),\n              _createElementVNode(\"circle\", {\n                cx: \"12\",\n                cy: \"12\",\n                r: \"3\"\n              })\n            ], -1 /* CACHED */)\n          ])),\n          default: _withCtx(() => [\n            _createElementVNode(\"div\", _hoisted_1, [\n              _createVNode($setup[\"RadiusBody\"], {\n                \"model-value\": $props.modelValue,\n                \"override-count\": $props.overrideCount,\n                max: $props.max,\n                step: $props.step,\n                \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (_ctx.$emit('update:modelValue', $event))),\n                onResetOverrides: _cache[1] || (_cache[1] = $event => (_ctx.$emit('reset-overrides')))\n              }, null, 8 /* PROPS */, [\"model-value\", \"override-count\", \"max\", \"step\"])\n            ])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"value\"]))\n      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n          _createCommentVNode(\" Mobiel: body-only voor in een AccordionSection (die levert de kop +\\n       huidige waarde). De slider-body toont z'n eigen km-waarde. \"),\n          _createElementVNode(\"div\", _hoisted_2, [\n            _createVNode($setup[\"RadiusBody\"], {\n              \"model-value\": $props.modelValue,\n              \"override-count\": $props.overrideCount,\n              max: $props.max,\n              step: $props.step,\n              \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (_ctx.$emit('update:modelValue', $event))),\n              onResetOverrides: _cache[3] || (_cache[3] = $event => (_ctx.$emit('reset-overrides')))\n            }, null, 8 /* PROPS */, [\"model-value\", \"override-count\", \"max\", \"step\"])\n          ])\n        ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusFilterPill.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusFilterPill.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusFilterPill.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/RadiusFilterPill.vue\";script.__scopeId = \"data-v-8c3618b9\";export default script;","<template>\n  <!-- Desktop: pill+popover in de toolbar — uniform met de andere filters. -->\n  <FilterPill v-if=\"variant === 'pill'\" :label=\"'Funnel'\" :value=\"valueLabel\">\n    <template #icon>\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--snl-mint)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"M3 4h18l-7 8v6l-4 2v-8z\"/>\n      </svg>\n    </template>\n    <div class=\"fnl-pop\">\n      <FunnelChips v-bind=\"chipProps\" @toggle-visible=\"$emit('toggle-visible', $event)\" @toggle-filtering=\"$emit('toggle-filtering', $event)\" />\n      <p class=\"fnl-pop__hint\">\n        Klik een stage om z'n pins te verbergen; klik ◯ om die stage ook als\n        radius-filter te laten meewegen.\n      </p>\n    </div>\n  </FilterPill>\n\n  <!-- Mobiel: body-only voor in een AccordionSection (die levert de kop). -->\n  <FunnelChips v-else-if=\"variant === 'section'\" v-bind=\"chipProps\" @toggle-visible=\"$emit('toggle-visible', $event)\" @toggle-filtering=\"$emit('toggle-filtering', $event)\" />\n\n  <!-- Floating glass-widget op de kaart (legacy/fallback). -->\n  <div v-else class=\"fnl\">\n    <div class=\"fnl__title\">Sales funnel</div>\n    <FunnelChips v-bind=\"chipProps\" @toggle-visible=\"$emit('toggle-visible', $event)\" @toggle-filtering=\"$emit('toggle-filtering', $event)\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport FilterPill from \"./FilterPill.vue\";\nimport FunnelChips from \"./FunnelChips.vue\";\n\n// Generieke funnel-legenda + bediening. `variant` bepaalt de verpakking:\n//   • \"pill\"     — toolbar-dropdown op desktop (uniform met de andere filters)\n//   • \"section\"  — platte sectie in het mobiele FilterPanel\n//   • \"floating\" — zwevend glass-widget op de kaart (oude weergave)\n// De chips zelf zitten in FunnelChips zodat alle drie ze delen.\nconst props = withDefaults(\n  defineProps<{\n    stagesOrder: string[];\n    stageColors: Record<string, string>;\n    counts: Record<string, number>;\n    visibleStages: Set<string>;\n    filteringStages: Set<string>;\n    variant?: \"pill\" | \"section\" | \"floating\";\n  }>(),\n  { variant: \"floating\" },\n);\n\ndefineEmits<{\n  \"toggle-visible\": [stage: string];\n  \"toggle-filtering\": [stage: string];\n}>();\n\n// Doorgeefluik naar FunnelChips — alleen de chip-relevante props.\nconst chipProps = computed(() => ({\n  stagesOrder: props.stagesOrder,\n  stageColors: props.stageColors,\n  counts: props.counts,\n  visibleStages: props.visibleStages,\n  filteringStages: props.filteringStages,\n}));\n\n// Pill-waarde: aantal zichtbare stages t.o.v. totaal (compacte status).\nconst valueLabel = computed(() => `${props.visibleStages.size}/${props.stagesOrder.length}`);\n</script>\n\n<style scoped>\n/* Pill-popover content. */\n.fnl-pop { display: flex; flex-direction: column; gap: 10px; min-width: 240px; max-width: 320px; }\n.fnl-pop__hint {\n  margin: 0;\n  font-size: 11px;\n  line-height: 1.5;\n  color: var(--snl-fg-muted);\n}\n\n/* Floating widget bovenop de kaart (legacy). Glass-look van .vk-map__legend. */\n.fnl {\n  position: absolute;\n  left: 14px;\n  top: 14px;\n  z-index: 1000;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  padding: 10px 12px;\n  max-width: 320px;\n  background: var(--snl-glass-strong);\n  backdrop-filter: blur(10px);\n  -webkit-backdrop-filter: blur(10px);\n  border: 1px solid var(--snl-line);\n  border-radius: 12px;\n}\n.fnl__title {\n  font-size: 10.5px;\n  font-weight: 700;\n  letter-spacing: 0.08em;\n  text-transform: uppercase;\n  color: var(--snl-fg-muted);\n}\n</style>\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"fnl__chips\" }\nconst _hoisted_2 = [\"title\", \"onClick\"]\nconst _hoisted_3 = { class: \"fnl__lbl\" }\nconst _hoisted_4 = [\"title\", \"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.stagesOrder, (stage) => {\n      return (_openBlock(), _createElementBlock(\"button\", {\n        key: stage,\n        type: \"button\",\n        class: _normalizeClass([\"fnl__chip\", { 'fnl__chip--off': !$props.visibleStages.has(stage) }]),\n        style: _normalizeStyle({ '--c': $props.stageColors[stage] }),\n        title: $props.visibleStages.has(stage) ? `Klik om ${stage} te verbergen` : `Klik om ${stage} te tonen`,\n        onClick: $event => (_ctx.$emit('toggle-visible', stage))\n      }, [\n        _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"fnl__dot\" }, null, -1 /* CACHED */)),\n        _createElementVNode(\"span\", _hoisted_3, _toDisplayString(stage), 1 /* TEXT */),\n        _createElementVNode(\"small\", null, _toDisplayString($props.counts[stage] ?? 0), 1 /* TEXT */),\n        _createElementVNode(\"span\", {\n          class: _normalizeClass([\"fnl__filter\", { 'fnl__filter--on': $props.filteringStages.has(stage) }]),\n          title: $props.filteringStages.has(stage) ? `Radius-filter aan voor ${stage}` : `Klik om ${stage} ook radius-filter te geven`,\n          onClick: _withModifiers($event => (_ctx.$emit('toggle-filtering', stage)), [\"stop\"])\n        }, \"◯\", 10 /* CLASS, PROPS */, _hoisted_4)\n      ], 14 /* CLASS, STYLE, PROPS */, _hoisted_2))\n    }), 128 /* KEYED_FRAGMENT */))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelChips.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelChips.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelChips.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelChips.vue\";script.__scopeId = \"data-v-2d5d655b\";export default script;","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, mergeProps as _mergeProps, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"fnl-pop\" }\nconst _hoisted_2 = { class: \"fnl\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Desktop: pill+popover in de toolbar — uniform met de andere filters. \"),\n    ($props.variant === 'pill')\n      ? (_openBlock(), _createBlock($setup[\"FilterPill\"], {\n          key: 0,\n          label: 'Funnel',\n          value: $setup.valueLabel\n        }, {\n          icon: _withCtx(() => _cache[6] || (_cache[6] = [\n            _createElementVNode(\"svg\", {\n              width: \"14\",\n              height: \"14\",\n              viewBox: \"0 0 24 24\",\n              fill: \"none\",\n              stroke: \"var(--snl-mint)\",\n              \"stroke-width\": \"2\",\n              \"stroke-linecap\": \"round\",\n              \"stroke-linejoin\": \"round\",\n              \"aria-hidden\": \"true\"\n            }, [\n              _createElementVNode(\"path\", { d: \"M3 4h18l-7 8v6l-4 2v-8z\" })\n            ], -1 /* CACHED */)\n          ])),\n          default: _withCtx(() => [\n            _createElementVNode(\"div\", _hoisted_1, [\n              _createVNode($setup[\"FunnelChips\"], _mergeProps($setup.chipProps, {\n                onToggleVisible: _cache[0] || (_cache[0] = $event => (_ctx.$emit('toggle-visible', $event))),\n                onToggleFiltering: _cache[1] || (_cache[1] = $event => (_ctx.$emit('toggle-filtering', $event)))\n              }), null, 16 /* FULL_PROPS */),\n              _cache[7] || (_cache[7] = _createElementVNode(\"p\", { class: \"fnl-pop__hint\" }, \" Klik een stage om z'n pins te verbergen; klik ◯ om die stage ook als radius-filter te laten meewegen. \", -1 /* CACHED */))\n            ])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"value\"]))\n      : ($props.variant === 'section')\n        ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n            _createCommentVNode(\" Mobiel: body-only voor in een AccordionSection (die levert de kop). \"),\n            _createVNode($setup[\"FunnelChips\"], _mergeProps($setup.chipProps, {\n              onToggleVisible: _cache[2] || (_cache[2] = $event => (_ctx.$emit('toggle-visible', $event))),\n              onToggleFiltering: _cache[3] || (_cache[3] = $event => (_ctx.$emit('toggle-filtering', $event)))\n            }), null, 16 /* FULL_PROPS */)\n          ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n        : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n            _createCommentVNode(\" Floating glass-widget op de kaart (legacy/fallback). \"),\n            _createElementVNode(\"div\", _hoisted_2, [\n              _cache[8] || (_cache[8] = _createElementVNode(\"div\", { class: \"fnl__title\" }, \"Sales funnel\", -1 /* CACHED */)),\n              _createVNode($setup[\"FunnelChips\"], _mergeProps($setup.chipProps, {\n                onToggleVisible: _cache[4] || (_cache[4] = $event => (_ctx.$emit('toggle-visible', $event))),\n                onToggleFiltering: _cache[5] || (_cache[5] = $event => (_ctx.$emit('toggle-filtering', $event)))\n              }), null, 16 /* FULL_PROPS */)\n            ])\n          ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelLegend.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelLegend.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelLegend.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/FunnelLegend.vue\";script.__scopeId = \"data-v-cd7ad735\";export default script;","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, Fragment as _Fragment, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"combo-pill\"\n}\nconst _hoisted_2 = [\"aria-pressed\"]\nconst _hoisted_3 = { class: \"combo-pill__val\" }\nconst _hoisted_4 = { class: \"combo-row\" }\nconst _hoisted_5 = [\"aria-pressed\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Desktop: master-pill in de extras-rij. Klik = flip. Geen popover (in\\n       tegenstelling tot de andere pills) — er valt niets te kiezen, alleen\\n       aan/uit. Optionele \\\"N verborgen\\\"-chip rechts ernaast wanneer er actief\\n       gefilterd wordt en er locaties verborgen zijn; klik op de chip = uit. \"),\n    ($props.variant === 'pill')\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: _normalizeClass([\"combo-pill__btn\", { 'combo-pill__btn--off': !$props.modelValue }]),\n            \"aria-pressed\": $props.modelValue,\n            onClick: _cache[0] || (_cache[0] = $event => (_ctx.$emit('update:modelValue', !$props.modelValue)))\n          }, [\n            _cache[4] || (_cache[4] = _createStaticVNode(\"<svg width=\\\"14\\\" height=\\\"14\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"var(--snl-mint)\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" aria-hidden=\\\"true\\\" data-v-f0c2969a><line x1=\\\"4\\\" y1=\\\"6\\\" x2=\\\"20\\\" y2=\\\"6\\\" data-v-f0c2969a></line><line x1=\\\"4\\\" y1=\\\"12\\\" x2=\\\"20\\\" y2=\\\"12\\\" data-v-f0c2969a></line><line x1=\\\"4\\\" y1=\\\"18\\\" x2=\\\"20\\\" y2=\\\"18\\\" data-v-f0c2969a></line><circle cx=\\\"9\\\" cy=\\\"6\\\" r=\\\"2.2\\\" fill=\\\"var(--snl-surface)\\\" data-v-f0c2969a></circle><circle cx=\\\"15\\\" cy=\\\"12\\\" r=\\\"2.2\\\" fill=\\\"var(--snl-surface)\\\" data-v-f0c2969a></circle><circle cx=\\\"9\\\" cy=\\\"18\\\" r=\\\"2.2\\\" fill=\\\"var(--snl-surface)\\\" data-v-f0c2969a></circle></svg><span class=\\\"combo-pill__lbl\\\" data-v-f0c2969a>Extra filters</span>\", 2)),\n            _createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.modelValue ? \"Aan\" : \"Uit\"), 1 /* TEXT */)\n          ], 10 /* CLASS, PROPS */, _hoisted_2),\n          ($props.modelValue && $props.hiddenCount > 0)\n            ? (_openBlock(), _createElementBlock(\"button\", {\n                key: 0,\n                type: \"button\",\n                class: \"combo-pill__chip\",\n                title: `Klik om alle extra filters tijdelijk uit te zetten en de volledige set te zien`,\n                onClick: _cache[1] || (_cache[1] = $event => (_ctx.$emit('update:modelValue', false)))\n              }, _toDisplayString($props.hiddenCount) + \" verborgen \", 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true)\n        ]))\n      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n          _createCommentVNode(\" Mobiel: simpele rij binnen het FilterPanel — geen accordion-clutter\\n       (er is geen body om in te klappen). De \\\"N verborgen\\\"-tekst zit ernaast.\\n       Klik op de rij = flip; klik op de chip = expliciet uit. \"),\n          _createElementVNode(\"div\", _hoisted_4, [\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"combo-row__btn\",\n              \"aria-pressed\": $props.modelValue,\n              onClick: _cache[2] || (_cache[2] = $event => (_ctx.$emit('update:modelValue', !$props.modelValue)))\n            }, [\n              _cache[5] || (_cache[5] = _createElementVNode(\"span\", { class: \"combo-row__title\" }, \"Extra filters\", -1 /* CACHED */)),\n              _createElementVNode(\"span\", {\n                class: _normalizeClass([\"combo-row__state\", { 'combo-row__state--off': !$props.modelValue }])\n              }, _toDisplayString($props.modelValue ? \"Aan\" : \"Uit\"), 3 /* TEXT, CLASS */)\n            ], 8 /* PROPS */, _hoisted_5),\n            ($props.modelValue && $props.hiddenCount > 0)\n              ? (_openBlock(), _createElementBlock(\"button\", {\n                  key: 0,\n                  type: \"button\",\n                  class: \"combo-row__chip\",\n                  onClick: _cache[3] || (_cache[3] = $event => (_ctx.$emit('update:modelValue', false)))\n                }, _toDisplayString($props.hiddenCount) + \" verborgen — toon alles \", 1 /* TEXT */))\n              : _createCommentVNode(\"v-if\", true)\n          ])\n        ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ComboToggleFilterPill.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ComboToggleFilterPill.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ComboToggleFilterPill.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/components/ComboToggleFilterPill.vue\";script.__scopeId = \"data-v-f0c2969a\";export default script;","// Locatie (lat/lng) → gemeentecode lookup via point-in-polygon op de PDOK\n// Bestuurlijke-Gebieden-GeoJSON. Pure browser-code; geen runtime API-call en\n// geen externe dependency (de point-in-polygon is hand-rolled ray-casting —\n// turf hoort niet in de gedeelde mod::vue, en het is maar één call).\n//\n// Performance: 342 multipolygons × N locaties zonder pre-filter is sloom\n// (point-in-polygon is O(vertices) per call). We doen daarom een goedkope\n// **bbox pre-check** per gemeente — de meeste locaties vallen binnen 1-3\n// bboxes, en alleen die polygonen krijgen de echte point-in-polygon test.\n//\n// Coords: GeoJSON staat in lng,lat-volgorde (CRS84/EPSG:4326). Onze locaties\n// uit @webhare/rpc geven `latitude`/`longitude` als losse velden — we bouwen\n// er intern een [lng, lat]-tuple van.\n\ninterface GemeenteProps {\n  code: string;\n  naam: string;\n  provincie: string | null;\n}\n\ninterface PolygonGeometry {\n  type: \"Polygon\" | \"MultiPolygon\";\n  coordinates: number[][][] | number[][][][];\n}\n\ninterface PolygonFeature {\n  type: \"Feature\";\n  properties: GemeenteProps;\n  geometry: PolygonGeometry;\n}\n\nexport interface FeatureCollection {\n  type: \"FeatureCollection\";\n  features: PolygonFeature[];\n}\n\ninterface IndexEntry {\n  feature: PolygonFeature;\n  bbox: [number, number, number, number]; // [minLng, minLat, maxLng, maxLat]\n}\n\nexport interface GemeenteIndex {\n  /** Snel ophalen: lat+lng → gemeentecode of null. */\n  lookup(lat: number, lng: number): string | null;\n  /** Naam + provincie ophalen voor een gemeentecode. */\n  meta(code: string): GemeenteProps | null;\n  /** Aantal geladen gemeenten (debug). */\n  size: number;\n  /** De raw FeatureCollection — bv. voor een overlay-prop op de kaart. */\n  geojson: FeatureCollection;\n  /** Iterate alle gemeentecodes (handig voor \"uit-set\" berekeningen). */\n  codes(): string[];\n}\n\n// Ray-casting point-in-polygon op één ring. `ring` is een lijst [lng, lat]-paren.\nfunction pointInRing(lng: number, lat: number, ring: number[][]): boolean {\n  let inside = false;\n  for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n    const xi = ring[i][0], yi = ring[i][1];\n    const xj = ring[j][0], yj = ring[j][1];\n    const intersect =\n      yi > lat !== yj > lat && lng < ((xj - xi) * (lat - yi)) / (yj - yi) + xi;\n    if (intersect) inside = !inside;\n  }\n  return inside;\n}\n\n// Eén polygon = buitenring (rings[0]) minus gaten (rings[1..]). Punt zit binnen\n// als het in de buitenring valt én in geen enkel gat.\nfunction pointInPolygonRings(lng: number, lat: number, rings: number[][][]): boolean {\n  if (rings.length === 0 || !pointInRing(lng, lat, rings[0])) return false;\n  for (let i = 1; i < rings.length; i++) {\n    if (pointInRing(lng, lat, rings[i])) return false; // in een gat\n  }\n  return true;\n}\n\n/**\n * Pure point-in-polygon op een GeoJSON Polygon/MultiPolygon-geometrie.\n * `lat`/`lng` in graden; de geometrie in GeoJSON [lng, lat]-volgorde.\n * Vervangt @turf/boolean-point-in-polygon (geen externe dep nodig).\n */\nexport function pointInPolygon(lat: number, lng: number, geometry: PolygonGeometry): boolean {\n  if (geometry.type === \"Polygon\") {\n    return pointInPolygonRings(lng, lat, geometry.coordinates as number[][][]);\n  }\n  for (const poly of geometry.coordinates as number[][][][]) {\n    if (pointInPolygonRings(lng, lat, poly)) return true;\n  }\n  return false;\n}\n\n/**\n * Bouwt een lookup-index uit een reeds-geladen GeoJSON FeatureCollection.\n * (Het ophalen zelf gebeurt via de RPC-laag — deze functie is puur en\n * unit-testbaar.)\n */\nexport function buildGemeenteIndex(geo: FeatureCollection): GemeenteIndex {\n  const entries: IndexEntry[] = geo.features.map((feature) => ({\n    feature,\n    bbox: computeBbox(feature),\n  }));\n  const metaByCode = new Map<string, GemeenteProps>();\n  for (const e of entries) metaByCode.set(e.feature.properties.code, e.feature.properties);\n\n  return {\n    size: entries.length,\n    geojson: geo,\n    codes: () => Array.from(metaByCode.keys()),\n    meta: (code) => metaByCode.get(code) ?? null,\n    lookup(lat, lng) {\n      for (const e of entries) {\n        const [minLng, minLat, maxLng, maxLat] = e.bbox;\n        if (lng < minLng || lng > maxLng || lat < minLat || lat > maxLat) continue;\n        if (pointInPolygon(lat, lng, e.feature.geometry)) {\n          return e.feature.properties.code;\n        }\n      }\n      return null;\n    },\n  };\n}\n\nfunction computeBbox(feature: PolygonFeature): [number, number, number, number] {\n  let minLng = Infinity;\n  let minLat = Infinity;\n  let maxLng = -Infinity;\n  let maxLat = -Infinity;\n  const eat = ([lng, lat]: number[]): void => {\n    if (lng < minLng) minLng = lng;\n    if (lat < minLat) minLat = lat;\n    if (lng > maxLng) maxLng = lng;\n    if (lat > maxLat) maxLat = lat;\n  };\n  if (feature.geometry.type === \"Polygon\") {\n    for (const ring of feature.geometry.coordinates as number[][][]) for (const c of ring) eat(c);\n  } else {\n    for (const poly of feature.geometry.coordinates as number[][][][])\n      for (const ring of poly) for (const c of ring) eat(c);\n  }\n  return [minLng, minLat, maxLng, maxLat];\n}\n","// Inwoner-index per gemeentecode. De ruwe rows komen via de RPC-laag\n// (getGemeenteInwoners); deze builder is puur en unit-testbaar.\n\nexport interface GemeenteInwoners {\n  code: string;\n  naam: string;\n  inwoners: number;\n}\n\nexport interface InwonersIndex {\n  /** Inwoneraantal voor een gemeentecode, of null als de code ontbreekt. */\n  get(code: string): number | null;\n  /** Het volledige record (incl. naam) voor een gemeentecode. */\n  record(code: string): GemeenteInwoners | null;\n  /** Alle records (handig voor debug-overlays). */\n  all(): GemeenteInwoners[];\n  /** Hoogste inwonertal in de set — handig voor slider-max. */\n  max: number;\n}\n\nexport function buildInwonersIndex(rows: GemeenteInwoners[]): InwonersIndex {\n  const byCode = new Map<string, GemeenteInwoners>();\n  let max = 0;\n  for (const r of rows) {\n    byCode.set(r.code, r);\n    if (r.inwoners > max) max = r.inwoners;\n  }\n\n  return {\n    max,\n    get: (code) => byCode.get(code)?.inwoners ?? null,\n    record: (code) => byCode.get(code) ?? null,\n    all: () => rows.slice(),\n  };\n}\n","// Funnel-locatie types + stage-constanten. De data komt via de RPC-laag\n// (getFunnelLocations) — dit bestand bevat alleen de types + kleur/volgorde-\n// constanten + een kleine helper die null-coords wegfiltert.\n\nexport type FunnelStage =\n  | \"Operationeel\"\n  | \"In gesprek\"\n  | \"In planning\"\n  | \"Deal in afronding\"\n  | \"On hold\";\n\nexport interface FunnelEntry {\n  id: string;\n  stage: FunnelStage;\n  relatieName: string | null;\n  accountManager: string | null;\n  straatHuisnr: string | null;\n  postcode: string | null;\n  plaats: string | null;\n  branche: string | null;\n  rvmType: string | null;\n  installatieDatum: string | null;\n  lat: number | null;\n  lng: number | null;\n  geocodeSource: string;\n  /** Per-apparaat radius (meters); null = volgt de globale radius. */\n  radiusOverride?: number | null;\n}\n\n// Kleur per stage. Bewust mint voor 'Operationeel' (de belangrijkste stage)\n// zodat hij meteen leest als \"actief\". De rest gebruikt complementaire tones.\nexport const STAGE_COLORS: Record<FunnelStage, string> = {\n  \"Operationeel\": \"#8FCCB1\", // mint (matcht --snl-mint)\n  \"Deal in afronding\": \"#F2B441\", // golden\n  \"In planning\": \"#5BB6E0\", // sky-blue\n  \"In gesprek\": \"#C19BFF\", // soft purple\n  \"On hold\": \"#9BA3AA\", // muted gray\n};\n\n/** De stages in de volgorde van het sales-proces (links → rechts in legenda). */\nexport const STAGES_ORDER: FunnelStage[] = [\n  \"In gesprek\",\n  \"In planning\",\n  \"Deal in afronding\",\n  \"Operationeel\",\n  \"On hold\",\n];\n\n/** Houd alleen funnel-entries met geldige coördinaten over. */\nexport function withFunnelCoords(entries: FunnelEntry[]): FunnelEntry[] {\n  return entries.filter((e) => e.lat !== null && e.lng !== null);\n}\n","// Filter suggesties uit op afstand tot funnel-locaties in geselecteerde stages.\n//\n// Per filterende pin geldt: alles binnen `radiusM` meter is \"te dichtbij\" en\n// wordt verborgen. De radius kan per pin overriden worden via `overridesM`;\n// anders telt de `globalRadiusM`. Welke stages meedoen wordt geregeld door\n// `filteringStages` (default in de UI: alleen Operationeel; Deal in afronding\n// etc. opt-in).\n//\n// Performance: O(N suggesties × M filterende pins). 1500 × 200 = ~300k\n// Haversine-calls, ~70ms in JS — prima voor een live slider.\n\nimport type { FunnelEntry, FunnelStage } from \"./scoutFunnel\";\n\nconst EARTH_RADIUS_M = 6_371_000;\n\nexport function haversineMeters(\n  aLat: number,\n  aLng: number,\n  bLat: number,\n  bLng: number,\n): number {\n  const toRad = (d: number): number => (d * Math.PI) / 180;\n  const dLat = toRad(bLat - aLat);\n  const dLng = toRad(bLng - aLng);\n  const lat1 = toRad(aLat);\n  const lat2 = toRad(bLat);\n  const a = Math.sin(dLat / 2) ** 2 + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLng / 2) ** 2;\n  return 2 * EARTH_RADIUS_M * Math.asin(Math.sqrt(a));\n}\n\nexport interface RadiusInput {\n  globalRadiusM: number;\n  /** Per funnel-id een eigen radius. Ontbreken = globalRadiusM. */\n  overridesM: Map<string, number>;\n  /** Welke stages mee mogen tellen voor de radius-uitsluiting. */\n  filteringStages: Set<FunnelStage>;\n}\n\ninterface Suggestion {\n  id: number;\n  latitude: number | null;\n  longitude: number | null;\n}\n\n/**\n * Geeft een Set van suggestion-ids terug die NIET zichtbaar moeten zijn omdat\n * ze binnen de radius van minstens één filterende funnel-locatie vallen.\n *\n * Pure function — geen reactivity, makkelijk te testen.\n */\nexport function computeBlockedSuggestionIds(\n  suggestions: Suggestion[],\n  funnelEntries: FunnelEntry[],\n  { globalRadiusM, overridesM, filteringStages }: RadiusInput,\n): Set<number> {\n  const blocked = new Set<number>();\n  if (filteringStages.size === 0) return blocked;\n  const filteringPins = funnelEntries.filter(\n    (e) => filteringStages.has(e.stage) && e.lat !== null && e.lng !== null,\n  );\n  if (filteringPins.length === 0 || globalRadiusM <= 0) return blocked;\n\n  for (const s of suggestions) {\n    if (s.latitude === null || s.longitude === null) continue;\n    for (const pin of filteringPins) {\n      const r = overridesM.get(pin.id) ?? globalRadiusM;\n      if (r <= 0) continue;\n      const d = haversineMeters(s.latitude, s.longitude, pin.lat!, pin.lng!);\n      if (d <= r) {\n        blocked.add(s.id);\n        break;\n      }\n    }\n  }\n  return blocked;\n}\n","// \"Light mode\" voor de Verkennen-kaart: op mobiel laat de kaart de zware combo-\n// lagen (gemeente-dim overlay ~342 polygons + ~339 funnel-pins + radius-cirkels)\n// weg en toont alleen de klikbare analyse-markers + de standaard filters. Anders\n// crasht de Leaflet-kaart in de mobiele WebView.\n//\n// De beslissing valt ÉÉN keer bij paginaopening (geen resize-listener). De drempel\n// spiegelt de CSS-mobielgrens in VerkennenView (@media max-width: 959px), zodat 959\n// nog mobiel/light is en 960 desktop.\nexport const MOBILE_MAX_WIDTH = 959;\n\nexport function shouldUseLightMap(viewportWidth: number): boolean {\n  return viewportWidth <= MOBILE_MAX_WIDTH;\n}\n","// Persist the Funnel-dropdown toggles (which stages' pins are visible + which\n// stages also count as a radius-filter) in localStorage, so a field agent's\n// choices survive a reload. The parse/serialize/default functions are pure (no\n// Vue, no @webhare/* runtime imports) so they're unit-testable via `wh runtest`;\n// the load/save wrappers are the thin localStorage seam used by the container.\nimport { STAGES_ORDER, type FunnelStage } from \"./scoutFunnel\";\n\nconst STORAGE_KEY = \"statiegeldnl:feedback:funnel-prefs\";\n\nconst VALID_STAGES = new Set<string>(STAGES_ORDER);\n\nexport interface FunnelPrefs {\n  /** Stages whose pins are shown on the map. */\n  visible: FunnelStage[];\n  /** Stages that also count as a radius-filter (the ◯ toggle). */\n  filtering: FunnelStage[];\n}\n\n/**\n * Defaults when nothing is stored: every stage visible, only \"Operationeel\"\n * acting as a radius-filter (matches the original VerkennenContainer state).\n */\nexport function defaultFunnelPrefs(): FunnelPrefs {\n  return { visible: [...STAGES_ORDER], filtering: [\"Operationeel\"] };\n}\n\n// Keep only valid FunnelStage strings, in input order, deduped. Returns null\n// when the value isn't an array at all (treated as corrupt by the caller).\nfunction sanitizeStages(value: unknown): FunnelStage[] | null {\n  if (!Array.isArray(value)) return null;\n  const out: FunnelStage[] = [];\n  for (const v of value) {\n    if (typeof v === \"string\" && VALID_STAGES.has(v) && !out.includes(v as FunnelStage)) {\n      out.push(v as FunnelStage);\n    }\n  }\n  return out;\n}\n\n/**\n * Parse a stored JSON string into prefs. Returns null on absent/corrupt input\n * (missing key, non-object, invalid JSON, non-array value) so the caller falls\n * back to {@link defaultFunnelPrefs}. An empty array is a VALID state (the agent\n * turned everything off) and is preserved — not reset to the default.\n */\nexport function parseFunnelPrefs(raw: string | null): FunnelPrefs | null {\n  if (!raw) return null;\n  let data: unknown;\n  try {\n    data = JSON.parse(raw);\n  } catch {\n    return null;\n  }\n  if (typeof data !== \"object\" || data === null) return null;\n  const visible = sanitizeStages((data as Record<string, unknown>).visible);\n  const filtering = sanitizeStages((data as Record<string, unknown>).filtering);\n  if (visible === null || filtering === null) return null;\n  return { visible, filtering };\n}\n\nexport function serializeFunnelPrefs(prefs: FunnelPrefs): string {\n  return JSON.stringify({ visible: prefs.visible, filtering: prefs.filtering });\n}\n\n/** Read prefs from localStorage, falling back to defaults. Best-effort. */\nexport function loadFunnelPrefs(): FunnelPrefs {\n  try {\n    return parseFunnelPrefs(localStorage.getItem(STORAGE_KEY)) ?? defaultFunnelPrefs();\n  } catch {\n    return defaultFunnelPrefs();\n  }\n}\n\n/** Persist prefs to localStorage. Best-effort (quota/denied is swallowed). */\nexport function saveFunnelPrefs(prefs: FunnelPrefs): void {\n  try {\n    localStorage.setItem(STORAGE_KEY, serializeFunnelPrefs(prefs));\n  } catch {\n    /* quota/denied — silent */\n  }\n}\n","// Persist the global combo-filter master toggle (Verkennen \"Extra filters\"\n// Aan/Uit) in localStorage. When OFF, the container short-circuits the inwoners\n// / radius / funnel combo-effects without resetting the per-filter prefs — so\n// flipping back ON restores the agent's previous choices intact. Pattern mirrors\n// funnelPrefs.ts: the parse/serialize/default functions are pure (no Vue, no\n// @webhare/* runtime imports) so they're unit-testable via `wh runtest`; the\n// load/save wrappers are the thin localStorage seam used by the container.\n\nconst STORAGE_KEY = \"statiegeldnl:feedback:verkennen-combo-enabled\";\n\n/**\n * Default = enabled. Existing users keep the current behavior until they flip\n * the toggle themselves.\n */\nexport function defaultComboEnabled(): boolean {\n  return true;\n}\n\n/**\n * Parse a stored value. Returns null on absent/corrupt input so the caller\n * falls back to {@link defaultComboEnabled}. Accepts the canonical \"1\"/\"0\" form\n * we serialize, plus the JS booleans-as-string form (\"true\"/\"false\") for\n * tolerance against hand-edited storage.\n */\nexport function parseComboEnabled(raw: string | null): boolean | null {\n  if (raw === null) return null;\n  if (raw === \"1\" || raw === \"true\") return true;\n  if (raw === \"0\" || raw === \"false\") return false;\n  return null;\n}\n\nexport function serializeComboEnabled(enabled: boolean): string {\n  return enabled ? \"1\" : \"0\";\n}\n\nexport function loadComboEnabled(): boolean {\n  try {\n    return parseComboEnabled(localStorage.getItem(STORAGE_KEY)) ?? defaultComboEnabled();\n  } catch {\n    return defaultComboEnabled();\n  }\n}\n\nexport function saveComboEnabled(enabled: boolean): void {\n  try {\n    localStorage.setItem(STORAGE_KEY, serializeComboEnabled(enabled));\n  } catch {\n    /* quota/denied — silent */\n  }\n}\n","import { createCommentVNode as _createCommentVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withCtx as _withCtx, createSlots as _createSlots, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-disabled\"]\nconst _hoisted_2 = [\"aria-disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"VerkennenView\"], {\n    \"map-overlay\": $setup.lightMode || !$setup.comboEnabled ? null : $setup.overlay,\n    \"map-funnel-pins\": $setup.lightMode || !$setup.comboEnabled ? null : $setup.funnelPins,\n    \"map-radii\": $setup.lightMode || !$setup.comboEnabled ? null : $setup.radii,\n    \"custom-filter\": $setup.lightMode || !$setup.comboEnabled ? null : $setup.comboFilter,\n    \"filters-collapsible\": true,\n    \"preferred-region\": $setup.preferredRegion,\n    onLocationsLoaded: $setup.onLocationsLoaded,\n    onFunnelPopupOpen: $setup.onFunnelPopupOpen,\n    onFunnelPopupClose: $setup.onFunnelPopupClose\n  }, _createSlots({ _: 2 /* DYNAMIC */ }, [\n    (!$setup.lightMode)\n      ? {\n          name: \"subnavExtras\",\n          fn: _withCtx(() => [\n            _createVNode($setup[\"ComboToggleFilterPill\"], {\n              modelValue: $setup.comboEnabled,\n              \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.comboEnabled) = $event)),\n              \"hidden-count\": $setup.hiddenByComboCount\n            }, null, 8 /* PROPS */, [\"modelValue\", \"hidden-count\"]),\n            _createElementVNode(\"div\", {\n              class: _normalizeClass([\"extras-group\", { 'extras-group--off': !$setup.comboEnabled }]),\n              \"aria-disabled\": !$setup.comboEnabled\n            }, [\n              _createVNode($setup[\"InwonersFilterPill\"], {\n                modelValue: $setup.minInwoners,\n                \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.minInwoners) = $event))\n              }, null, 8 /* PROPS */, [\"modelValue\"]),\n              _createVNode($setup[\"RadiusFilterPill\"], {\n                modelValue: $setup.globalRadiusM,\n                \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.globalRadiusM) = $event)),\n                \"override-count\": $setup.overridesM.size,\n                onResetOverrides: $setup.clearAllOverrides\n              }, null, 8 /* PROPS */, [\"modelValue\", \"override-count\"]),\n              _createVNode($setup[\"FunnelLegend\"], {\n                variant: \"pill\",\n                \"stages-order\": $setup.STAGES_ORDER,\n                \"stage-colors\": $setup.STAGE_COLORS,\n                counts: $setup.funnelCounts,\n                \"visible-stages\": $setup.visibleStages,\n                \"filtering-stages\": $setup.filteringStages,\n                onToggleVisible: $setup.toggleVisible,\n                onToggleFiltering: $setup.toggleFiltering\n              }, null, 8 /* PROPS */, [\"stages-order\", \"stage-colors\", \"counts\", \"visible-stages\", \"filtering-stages\"])\n            ], 10 /* CLASS, PROPS */, _hoisted_1)\n          ]),\n          key: \"0\"\n        }\n      : undefined,\n    (!$setup.lightMode)\n      ? {\n          name: \"filterPanelExtras\",\n          fn: _withCtx(() => [\n            _createVNode($setup[\"ComboToggleFilterPill\"], {\n              modelValue: $setup.comboEnabled,\n              \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.comboEnabled) = $event)),\n              \"hidden-count\": $setup.hiddenByComboCount,\n              variant: \"section\"\n            }, null, 8 /* PROPS */, [\"modelValue\", \"hidden-count\"]),\n            _createElementVNode(\"div\", {\n              class: _normalizeClass([\"extras-group\", { 'extras-group--off': !$setup.comboEnabled }]),\n              \"aria-disabled\": !$setup.comboEnabled\n            }, [\n              _createVNode($setup[\"AccordionSection\"], {\n                title: \"Inwoners\",\n                summary: $setup.inwonersSummary\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"InwonersFilterPill\"], {\n                    modelValue: $setup.minInwoners,\n                    \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => (($setup.minInwoners) = $event)),\n                    variant: \"section\"\n                  }, null, 8 /* PROPS */, [\"modelValue\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"summary\"]),\n              _createVNode($setup[\"AccordionSection\"], {\n                title: \"Radius\",\n                summary: $setup.fmtKm($setup.globalRadiusM)\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"RadiusFilterPill\"], {\n                    modelValue: $setup.globalRadiusM,\n                    \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => (($setup.globalRadiusM) = $event)),\n                    \"override-count\": $setup.overridesM.size,\n                    variant: \"section\",\n                    onResetOverrides: $setup.clearAllOverrides\n                  }, null, 8 /* PROPS */, [\"modelValue\", \"override-count\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"summary\"]),\n              _createVNode($setup[\"AccordionSection\"], {\n                title: \"Sales funnel\",\n                summary: $setup.funnelSummary\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"FunnelLegend\"], {\n                    variant: \"section\",\n                    \"stages-order\": $setup.STAGES_ORDER,\n                    \"stage-colors\": $setup.STAGE_COLORS,\n                    counts: $setup.funnelCounts,\n                    \"visible-stages\": $setup.visibleStages,\n                    \"filtering-stages\": $setup.filteringStages,\n                    onToggleVisible: $setup.toggleVisible,\n                    onToggleFiltering: $setup.toggleFiltering\n                  }, null, 8 /* PROPS */, [\"stages-order\", \"stage-colors\", \"counts\", \"visible-stages\", \"filtering-stages\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"summary\"])\n            ], 10 /* CLASS, PROPS */, _hoisted_2)\n          ]),\n          key: \"1\"\n        }\n      : undefined\n  ]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"map-overlay\", \"map-funnel-pins\", \"map-radii\", \"custom-filter\", \"preferred-region\"]))\n}","import script from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenContainer.vue?type=script\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenContainer.vue?type=style&index=0\";import \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenContainer.vue?type=style&index=1\";import { render } from \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenContainer.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/views/VerkennenContainer.vue\";script.__scopeId = \"data-v-c7c874fb\";export default script;","// PWA-install support voor de SNL Scout-app.\n//\n// We injecteren runtime een `manifest.webmanifest` (als Blob-URL) plus de\n// Apple-specifieke `apple-touch-icon` + favicon + Safari `mask-icon` links.\n// Dit gebeurt runtime omdat de asset-pack hash-gebaseerde URLs uitspuugt\n// voor de icons en de site-root pas via frontend-data bekend is — beide\n// kun je niet hardcoden in `frontend.witty`.\n//\n// Icons komen één-op-één van statiegeldnederland.nl (zie /icons/* op de\n// publieke site) zodat de installable PWA dezelfde brand-identiteit heeft.\n//\n// Browser-compat:\n//   - Chrome/Edge/Firefox lezen de manifest via Blob-URL en gebruiken de\n//     192/512 PNG-icons.\n//   - iOS Safari leest de manifest niet maar wel `apple-touch-icon` →\n//     180×180 PNG plus de Apple meta-tags in de witty-head\n//     (`apple-mobile-web-app-*`).\n//   - Safari (desktop) leest `mask-icon` voor pinned-tabs.\n//\n// Voor installable PWA's heeft Chrome sinds 2024 geen service-worker meer\n// verplicht; een geldige manifest + HTTPS is genoeg.\n\nimport { siteRoot } from \"./urls\";\n\n// Asset-pack-imports → file-loader produceert stabiele URLs (zie\n// platform/js/assetpacks/compiletask.ts).\nimport icon192Url from \"../assets/pwa/android-chrome-192x192.png\";\nimport icon512Url from \"../assets/pwa/android-chrome-512x512.png\";\nimport appleTouchIconUrl from \"../assets/pwa/apple-touch-icon.png\";\nimport favicon32Url from \"../assets/pwa/favicon-32x32.png\";\nimport favicon16Url from \"../assets/pwa/favicon-16x16.png\";\nimport safariPinnedTabUrl from \"../assets/pwa/safari-pinned-tab.svg\";\n\nconst APP_NAME = \"SNL Scout — Statiegeld NL\";\nconst APP_SHORT_NAME = \"SNL Scout\";\nconst APP_DESCRIPTION = \"SNL Scout-app voor Statiegeld NL — beoordeel locaties en stuur feedback in.\";\nconst THEME_COLOR_DARK = \"#06100D\";    // matches --snl-bg in dark theme\nconst BACKGROUND_COLOR = \"#06100D\";    // splash-screen background\nconst SAFARI_PIN_COLOR = \"#382852\";    // brand-purple van het officiële glyph\n\ninterface Manifest {\n  name: string;\n  short_name: string;\n  description: string;\n  start_url: string;\n  scope: string;\n  display: \"standalone\" | \"fullscreen\" | \"minimal-ui\" | \"browser\";\n  orientation: \"any\" | \"portrait\" | \"landscape\";\n  theme_color: string;\n  background_color: string;\n  lang: string;\n  dir: \"ltr\" | \"rtl\";\n  icons: Array<{\n    src: string;\n    sizes: string;\n    type: string;\n    purpose?: \"any\" | \"maskable\" | \"monochrome\" | \"any maskable\";\n  }>;\n}\n\nfunction abs(url: string): string {\n  // De manifest wordt als blob:-URL geladen; blob-URLs hebben geen path-\n  // component, dus relatieve `src`-paden kunnen door de browser niet\n  // worden geresolved. Maak elke icon-URL absoluut tegenover de huidige\n  // pagina, dan klopt het altijd ongeacht waar de manifest leeft.\n  return new URL(url, document.baseURI).href;\n}\n\nfunction buildManifest(): Manifest {\n  const root = siteRoot();\n  return {\n    name: APP_NAME,\n    short_name: APP_SHORT_NAME,\n    description: APP_DESCRIPTION,\n    // Open op de home-view (hash route #/) zodat de PWA niet midden in een\n    // detail-pagina land tijdens cold start.\n    start_url: `${root}#/`,\n    scope: root,\n    display: \"standalone\",\n    orientation: \"portrait\",\n    theme_color: THEME_COLOR_DARK,\n    background_color: BACKGROUND_COLOR,\n    lang: \"nl\",\n    dir: \"ltr\",\n    icons: [\n      // De officiële android-chrome PNGs hebben witte achtergrond + paars\n      // glyph; ze werken prima als \"any\" purpose. Bewust geen \"maskable\":\n      // de glyph vult > 80% van de canvas zodat Android's mask de top/\n      // bottom zou bijsnijden. Zonder maskable-claim plakt Android zelf een\n      // ronde mask op de \"any\" icon met de witte bg er omheen — netter.\n      { src: abs(icon192Url), sizes: \"192x192\", type: \"image/png\", purpose: \"any\" },\n      { src: abs(icon512Url), sizes: \"512x512\", type: \"image/png\", purpose: \"any\" },\n    ],\n  };\n}\n\nfunction ensureLink(id: string): HTMLLinkElement {\n  const existing = document.getElementById(id);\n  if (existing instanceof HTMLLinkElement) return existing;\n  const link = document.createElement(\"link\");\n  link.id = id;\n  document.head.appendChild(link);\n  return link;\n}\n\nlet manifestBlobUrl: string | null = null;\n\nexport function installPwa(): void {\n  // De publisher injecteert zélf een `<title>` vóór onze witty-head, dus\n  // de pagina krijgt twee titels en browsers verschillen in welke ze\n  // tonen. Setten we hem expliciet vanuit JS, dan winnen we altijd.\n  document.title = APP_NAME;\n\n  // Manifest als Blob-URL injecteren. Browsers cachen de manifest na de\n  // eerste install-prompt, dus dit hoeft maar één keer per page-load.\n  const manifest = buildManifest();\n  const json = JSON.stringify(manifest);\n\n  // Oude blob-URL opruimen als we hot-reloaden (dev only — productie\n  // bouwt fresh JS bij elke deploy).\n  if (manifestBlobUrl) {\n    URL.revokeObjectURL(manifestBlobUrl);\n    manifestBlobUrl = null;\n  }\n  const blob = new Blob([json], { type: \"application/manifest+json\" });\n  manifestBlobUrl = URL.createObjectURL(blob);\n\n  const manifestLink = ensureLink(\"pwa-manifest\");\n  manifestLink.rel = \"manifest\";\n  manifestLink.href = manifestBlobUrl;\n\n  // Apple touch-icon (iOS leest manifest icons niet).\n  const apple = ensureLink(\"pwa-apple-touch\");\n  apple.rel = \"apple-touch-icon\";\n  apple.setAttribute(\"sizes\", \"180x180\");\n  apple.href = appleTouchIconUrl;\n\n  // PNG-favicon 32x32 — primary voor moderne browsers.\n  const icon32 = ensureLink(\"pwa-icon-32\");\n  icon32.rel = \"icon\";\n  icon32.type = \"image/png\";\n  icon32.setAttribute(\"sizes\", \"32x32\");\n  icon32.href = favicon32Url;\n\n  // PNG-favicon 16x16 — voor kleine tab-icons / oudere browsers.\n  const icon16 = ensureLink(\"pwa-icon-16\");\n  icon16.rel = \"icon\";\n  icon16.type = \"image/png\";\n  icon16.setAttribute(\"sizes\", \"16x16\");\n  icon16.href = favicon16Url;\n\n  // Safari pinned-tab — monochroom SVG dat Safari met de color-attribuut\n  // tint. Niet voor installs, alleen voor de tabbar in macOS Safari.\n  const maskIcon = ensureLink(\"pwa-mask-icon\");\n  maskIcon.rel = \"mask-icon\";\n  maskIcon.href = safariPinnedTabUrl;\n  maskIcon.setAttribute(\"color\", SAFARI_PIN_COLOR);\n}\n","import \"@webhare/frontend/src/init\";import \"/opt/wh/whtree/modules/publisher/js/internal/polyfills/all\";\nimport \"/opt/whdata/installedmodules/statiegeldnl.20261030T102947.191Z/webdesigns/feedback/frontend/frontend\";const aps = globalThis.whAssetPacks ||= {}; aps[\"statiegeldnl:feedback\"]=\"2026-10-30T10:29:55.044Z\";"],"mappings":"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AAE,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,KAAK,EAAE,OAAO,GA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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","temp","result","normalize","aPath","path","isAbsolute","parts","start","i","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","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","i","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","require_vue_router_prod","__commonJSMin","exports","vue","isBrowser","isRouteComponent","component","isESModule","obj","assign","applyToParams","fn","params","newParams","key","value","isArray","noop","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","text","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","decode","TRAILING_SLASH_RE","removeTrailingSlash","path","parseURL","parseQuery","location","currentLocation","query","searchString","hash","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery","stripBase","pathname","base","isSameRouteLocation","a","b","aLastIndex","bLastIndex","isSameRouteRecord","isSameRouteLocationParams","isSameRouteLocationParamsValue","isEquivalentArray","to","from","fromSegments","toSegments","lastToSegment","position","toPosition","segment","START_LOCATION_NORMALIZED","NavigationType","NavigationDirection","START","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","el","offset","docRect","elRect","computeScrollPosition","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","delta","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","scroll","createBaseLocation","createCurrentLocation","search","slicePos","pathFromHash","useHistoryListeners","historyState","replace","listeners","teardowns","pauseState","popStateHandler","state","fromState","listener","pauseListeners","listen","callback","teardown","index","beforeUnloadListener","history","destroy","buildState","back","current","forward","replaced","computeScroll","useHistoryStateNavigation","changeLocation","hashIndex","url","err","data","push","currentState","createWebHistory","historyNavigation","historyListeners","go","triggerListeners","routerHistory","createMemoryHistory","queue","setLocation","direction","info","shouldTrigger","createWebHashHistory","isRouteLocation","route","isRouteName","name","NavigationFailureSymbol","NavigationFailureType","ErrorTypeMessages","stringifyRoute","createRouterError","type","isNavigationFailure","error","propertiesToLog","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","REGEX_CHARS_RE","tokensToParser","segments","extraOptions","options","score","pattern","keys","segmentScores","tokenIndex","token","subSegmentScore","repeatable","optional","regexp","re","subPattern","i","parse","match","stringify","avoidDuplicatedSlash","param","compareScoreArray","diff","comparePathParserScore","aScore","bScore","comp","isLastScoreNegative","last","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","message","buffer","previousState","tokens","finalizeSegment","char","customRe","consumeBuffer","addCharToBuffer","createRouteRecordMatcher","record","parent","parser","matcher","createRouterMatcher","routes","globalOptions","matchers","matcherMap","mergeOptions","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","alias","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","isMatchable","insertMatcher","children","matcherRef","getRoutes","findInsertionIndex","resolve","paramsFromLocation","k","m","matched","parentMatcher","mergeMetaFields","clearRoutes","normalized","normalizeRecordProps","propsObject","props","meta","defaults","partialOptions","lower","upper","mid","insertionAncestor","getInsertionAncestor","ancestor","searchParams","searchParam","eqPos","currentValue","v","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerKey","routeLocationKey","routerViewLocationKey","useCallbacks","handlers","add","handler","reset","registerGuard","guard","removeFromList","onBeforeRouteLeave","leaveGuard","activeRecord","onBeforeRouteUpdate","updateGuard","guardToPromiseFn","runWithContext","enterCallbackArray","reject","next","valid","guardReturn","guardCall","extractComponentsGuards","guardType","guards","rawComponent","componentPromise","resolved","resolvedComponent","loadRouteLocation","promises","useLink","router","currentRoute","activeRecordIndex","length","routeMatched","currentMatched","parentRecordPath","getOriginalPath","isActive","includesParams","isExactActive","navigate","e","guardEvent","p","preferSingleVNode","vnodes","RouterLinkImpl","slots","link","elClass","getLinkClass","RouterLink","target","outer","inner","innerValue","outerValue","propClass","globalClass","defaultClass","RouterViewImpl","attrs","injectedRoute","routeToDisplay","injectedDepth","depth","initialDepth","matchedRoute","matchedRouteRef","viewRef","instance","oldInstance","oldName","currentName","ViewComponent","normalizeSlot","routePropsOption","routeProps","onVnodeUnmounted","vnode","slot","slotContent","RouterView","createRouter","parseQuery$1","stringifyQuery$1","beforeGuards","beforeResolveGuards","afterGuards","pendingLocation","normalizeParams","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","href","matcherLocation","targetParams","fullPath","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","redirect","newTargetLocation","redirectedFrom","targetLocation","force","shouldRedirect","toLocation","failure","handleScroll","markAsReady","triggerError","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","app","installedApps","leavingRecords","updatingRecords","enteringRecords","extractChangingRecords","canceledNavigationCheck","runGuardQueue","beforeEnter","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","readyHandlers","errorListeners","ready","list","isReady","scrollBehavior","started","reactiveRoute","unmountApp","promise","len","recordFrom","recordTo","useRouter","useRoute","_name","require_vue_router","__commonJSMin","exports","module","isObject","subject","Object","prototype","toString","call","isRecord","Array","isArray","canUseDOM","window","document","createElement","areOptionsEqual","optionsA","optionsB","optionsAKeys","keys","optionsBKeys","length","breakpointsA","JSON","stringify","breakpoints","breakpointsB","every","key","valueA","valueB","sortAndMapPluginToOptions","plugins","concat","sort","a","b","name","map","plugin","options","arePluginsEqual","pluginsA","pluginsB","optionA","index","optionB","isNumber","subject","isString","isBoolean","isObject","Object","prototype","toString","call","mathAbs","n","Math","abs","mathSign","sign","deltaAbs","valueB","valueA","factorAbs","diff","roundToTwoDecimals","num","round","arrayKeys","array","objectKeys","map","Number","arrayLast","arrayLastIndex","max","length","arrayIsLastIndex","index","arrayFromNumber","startAt","Array","from","_","i","object","keys","objectsMergeDeep","objectA","objectB","reduce","mergedObjects","currentObject","forEach","key","areObjects","isMouseEvent","evt","ownerWindow","MouseEvent","Alignment","align","viewSize","predefined","start","center","end","measure","EventStore","listeners","add","node","type","handler","options","passive","removeListener","addEventListener","removeEventListener","legacyMediaQueryList","addListener","push","self","clear","filter","remove","Animations","ownerDocument","update","render","documentVisibleHandler","fixedTimeStep","lastTimeStamp","accumulatedTime","animationId","init","hidden","reset","destroy","stop","animate","timeStamp","timeElapsed","alpha","requestAnimationFrame","cancelAnimationFrame","Axis","axis","contentDirection","isRightToLeft","isVertical","scroll","cross","startEdge","getStartEdge","endEdge","getEndEdge","measureSize","nodeRect","height","width","direction","Limit","min","reachedMin","reachedMax","reachedAny","constrain","removeOffset","ceil","Counter","loop","loopEnd","counter","withinLimit","get","set","clone","DragHandler","rootNode","target","dragTracker","location","animation","scrollTo","scrollBody","scrollTarget","eventHandler","percentOfView","dragFree","dragThreshold","skipSnaps","baseFriction","watchDrag","crossAxis","focusNodes","nonPassiveEvent","initEvents","dragEvents","goToNextThreshold","snapForceBoost","mouse","touch","freeForceBoost","baseSpeed","isMoving","startScroll","startCross","pointerIsDown","preventScroll","preventClick","isMouse","emblaApi","downIfAllowed","down","preventDefault","up","click","addDragEvents","move","isFocusNode","nodeName","includes","forceBoost","allowedForce","force","targetChanged","next","baseForce","byDistance","distance","byIndex","isMouseEvt","buttons","button","pointerDown","useFriction","useDuration","readPoint","emit","touches","lastScroll","lastCross","diffScroll","diffCross","cancelable","pointerMove","rawForce","pointerUp","forceFactor","speed","friction","stopPropagation","DragTracker","startEvent","lastEvent","readTime","evtAxis","coord","expired","logInterval","diffDrag","diffTime","NodeRects","offsetTop","offsetLeft","offsetWidth","offsetHeight","top","right","bottom","left","PercentOfView","ResizeHandler","container","slides","watchResize","nodeRects","observeNodes","concat","resizeObserver","containerSize","slideSizes","destroyed","readSize","defaultCallback","entries","entry","isContainer","slideIndex","indexOf","lastSize","newSize","reInit","ResizeObserver","observe","disconnect","ScrollBody","offsetLocation","previousLocation","baseDuration","scrollVelocity","scrollDirection","scrollDuration","scrollFriction","rawLocation","rawLocationPrevious","seek","displacement","isInstant","scrollDistance","settled","duration","velocity","useBaseDuration","useBaseFriction","ScrollBounds","limit","pullBackThreshold","edgeOffsetTolerance","frictionLimit","disabled","shouldConstrain","edge","diffToEdge","diffToTarget","subtract","toggleActive","active","ScrollContain","contentSize","snapsAligned","containScroll","pixelTolerance","scrollBounds","snapsBounded","measureBounded","scrollContainLimit","findScrollContainLimit","snapsContained","measureContained","usePixelTolerance","bound","snap","startSnap","endSnap","lastIndexOf","snapAligned","isFirst","isLast","scrollBound","parseFloat","toFixed","slice","ScrollLimit","scrollSnaps","ScrollLooper","vectors","jointSafety","shouldLoop","loopDistance","v","ScrollProgress","currentLocation","ScrollSnaps","alignment","containerRect","slideRects","slidesToScroll","groupSlides","alignments","measureSizes","snaps","measureUnaligned","measureAligned","rects","rect","g","SlideRegistry","containSnaps","slideIndexes","slideRegistry","createSlideRegistry","groupedSlideIndexes","doNotContain","group","groups","range","ScrollTarget","targetVector","minDistance","distances","sort","a","b","findTargetSnap","ascDiffsToSnaps","shortcut","d1","d2","targets","matchingTargets","t","diffToSnap","targetSnapDistance","reachedBound","snapDistance","ScrollTo","indexCurrent","indexPrevious","distanceDiff","indexDiff","targetIndex","SlideFocus","root","eventStore","watchFocus","focusListenerOptions","capture","lastTabPressTime","Date","getTime","scrollLeft","findIndex","document","registerTabPress","slide","event","code","Vector1D","initialValue","value","normalizeInput","Translate","translate","x","y","containerStyle","style","previousTarget","to","newTarget","transform","getAttribute","removeAttribute","SlideLooper","slideSizesWithGaps","ascItems","descItems","reverse","loopPoints","startPoints","endPoints","removeSlideSizes","indexes","slidesInGap","gap","findSlideBounds","offset","roundingSafety","findLoopPoints","isEndEdge","slideBounds","initial","altered","boundEdge","loopPoint","slideLocation","canLoop","every","otherIndexes","shiftLocation","SlidesHandler","watchSlides","mutationObserver","mutations","mutation","MutationObserver","childList","SlidesInView","threshold","intersectionEntryMap","inViewCache","notInViewCache","intersectionObserver","IntersectionObserver","parentElement","createInViewList","inView","list","parseInt","isIntersecting","SlideSizes","readEdgeGap","withEdgeGap","startGap","measureStartGap","endGap","measureEndGap","measureWithGaps","slideRect","getComputedStyle","getPropertyValue","SlidesToScroll","groupByNumber","byNumber","groupSize","bySize","rectB","rectA","edgeA","edgeB","gapA","gapB","chunkSize","currentSize","previousSize","Engine","scrollAxis","startIndex","inViewThreshold","dragHandler","scrollLooper","slideLooper","shouldSettle","withinBounds","hasSettled","hasSettledAndIdle","interpolatedLocation","engine","startLocation","scrollProgress","slidesInView","slideFocus","resizeHandler","scrollSnapList","slidesHandler","EventHandler","api","getListeners","e","on","cb","off","defaultOptions","breakpoints","OptionsHandler","mergeOptions","optionsA","optionsB","optionsAtMedia","matchedMediaOptions","media","matchMedia","matches","mediaOption","optionsMediaQueries","optionsList","acc","mediaQueries","PluginsHandler","optionsHandler","activePlugins","plugins","plugin","assign","name","EmblaCarousel","userOptions","userPlugins","defaultView","pluginsHandler","mediaHandlers","reActivate","optionsBase","globalOptions","pluginList","pluginApis","storeElements","userContainer","userSlides","querySelector","children","customSlides","querySelectorAll","createEngine","optionsWithoutLoop","activate","withOptions","withPlugins","query","offsetParent","selectedScrollSnap","deActivate","jump","scrollNext","scrollPrev","prev","canScrollNext","canScrollPrev","previousScrollSnap","slidesNotInView","internalEngine","containerNode","slideNodes","setTimeout","undefined","emblaCarouselVue","options","plugins","isRefOptions","isRef","isRefPlugins","storedOptions","value","storedPlugins","emblaNode","shallowRef","emblaApi","reInit","onMounted","canUseDOM","EmblaCarousel","globalOptions","onBeforeUnmount","destroy","watch","newOptions","areOptionsEqual","newPlugins","arePluginsEqual","undefined","extend","dest","i","j","len","src","create","F","proto","bind","fn","obj","slice","args","lastId","stamp","throttle","time","context","lock","wrapperFn","later","wrapNum","x","range","includeMax","max","min","d","falseFn","formatNum","num","precision","pow","trim","str","splitWords","setOptions","options","getParamString","existingUrl","uppercase","params","templateRe","template","data","key","value","isArray","indexOf","array","el","emptyImageUrl","getPrefixed","name","lastTime","timeoutDefer","timeToCall","requestFn","cancelFn","id","requestAnimFrame","immediate","cancelAnimFrame","Class","props","NewClass","Util.setOptions","parentProto","Util.create","Util.extend","checkDeprecatedMixinEvents","parentOptions","init","includes","Util.isArray","Events","types","type","Util.splitWords","removeAll","_once","newListener","listeners","Util.falseFn","index","listener","propagate","event","l","_fn","Util.stamp","e","Evented","Point","y","round","trunc","v","point","toPoint","Bounds","a","b","points","min2","max2","toBounds","bounds","xIntersects","yIntersects","xOverlaps","yOverlaps","bufferRatio","heightBuffer","widthBuffer","LatLngBounds","corner1","corner2","latlngs","sw","ne","sw2","ne2","LatLng","toLatLng","toLatLngBounds","latIntersects","lngIntersects","latOverlaps","lngOverlaps","maxMargin","lat","lng","alt","margin","Util.formatNum","other","Earth","sizeInMeters","latAccuracy","lngAccuracy","c","CRS","latlng","zoom","projectedPoint","scale","untransformedPoint","s","Util.wrapNum","center","newCenter","latShift","lngShift","newSw","newNe","latlng1","latlng2","rad","lat1","lat2","sinDLat","sinDLon","earthRadius","SphericalMercator","sin","Transformation","toTransformation","EPSG3857","EPSG900913","svgCreate","pointsToPath","rings","closed","len2","p","Browser","style","ie","ielt9","edge","webkit","userAgentContains","android","android23","webkitVer","androidStock","opera","chrome","gecko","safari","phantom","opera12","win","ie3d","webkit3d","gecko3d","any3d","mobile","mobileWebkit","mobileWebkit3d","msPointer","pointer","touchNative","touch","mobileOpera","mobileGecko","retina","passiveEvents","supportsPassiveOption","opts","canvas","svg","inlineSvg","div","vml","shape","mac","linux","POINTER_DOWN","POINTER_MOVE","POINTER_UP","POINTER_CANCEL","pEvent","handle","_onPointerStart","_handlePointer","_pointers","_pointerDocListener","addPointerListener","handler","_addPointerDocListener","removePointerListener","_globalPointerDown","_globalPointerMove","_globalPointerUp","DomEvent.preventDefault","makeDblclick","newEvent","prop","delay","addDoubleTapListener","last","detail","simDblclick","path","DomEvent.getPropagationPath","now","removeDoubleTapListener","handlers","TRANSFORM","testProp","TRANSITION","TRANSITION_END","get","getStyle","css","tagName","className","container","remove","parent","empty","toFront","toBack","hasClass","getClass","addClass","classes","setClass","removeClass","Util.trim","setOpacity","_setOpacityIE","filter","filterName","setTransform","offset","pos","setPosition","getPosition","disableTextSelection","enableTextSelection","_userSelect","DomEvent.on","DomEvent.off","userSelectProperty","disableImageDrag","enableImageDrag","_outlineElement","_outlineStyle","preventOutline","element","restoreOutline","getSizedParentNode","getScale","rect","on","addOne","eventsKey","off","batchRemove","removeOne","Util.indexOf","filterFn","mouseSubst","originalHandler","isExternalTarget","stopPropagation","disableScrollPropagation","disableClickPropagation","preventDefault","stop","getPropagationPath","ev","getMousePosition","wheelPxFactor","getWheelDelta","related","PosAnimation","newPos","duration","easeLinearity","DomUtil.getPosition","Util.requestAnimFrame","elapsed","progress","DomUtil.setPosition","Util.cancelAnimFrame","t","Map","Util.bind","DomUtil.TRANSITION","DomUtil.TRANSITION_END","moved","delta","viewHalf","containerPoint","centerOffset","paddingTL","paddingBR","paddingOffset","swPoint","nePoint","target","DomUtil.addClass","targetCenter","targetZoom","from","to","size","startZoom","w0","w1","u1","rho","rho2","r","s1","s2","t1","b1","sq","log","sinh","n","cosh","tanh","r0","w","u","easeOut","start","S","frame","oldZoom","pixelCenter","pixelPoint","pixelBounds","paddedBounds","paddedSize","oldSize","newSize","oldCenter","onResponse","onError","error","message","HandlerClass","DomUtil.remove","pane","DomUtil.create","inside","padding","nw","se","boundsSize","snap","scalex","scaley","topLeftPoint","toZoom","fromZoom","crs","layerPoint","DomEvent.getMousePosition","DomUtil.get","position","DomUtil.getStyle","panes","noMoveStart","loading","zoomChanged","supressEvent","onOff","targets","isHover","dragging","DomEvent.isExternalTarget","DomUtil.preventOutline","canvasTargets","synth","filtered","isMarker","callback","pixelOrigin","topLeft","latLngBounds","centerPoint","viewBounds","newBounds","pxBounds","maxBounds","projectedMaxBounds","minOffset","maxOffset","dx","dy","left","right","DomUtil.removeClass","proxy","DomUtil.TRANSFORM","transform","DomUtil.setTransform","z","startAnim","noUpdate","createMap","Control","map","corner","control","corners","createCorner","vSide","hSide","Layers","layerA","layerB","nameA","nameB","baseLayers","overlays","layer","acceptableHeight","collapsed","DomEvent.disableClickPropagation","DomEvent.disableScrollPropagation","section","link","overlay","DomUtil.empty","baseLayersPresent","overlaysPresent","baseLayersCount","checked","radioHtml","radioFragment","label","input","holder","inputs","addedLayers","removedLayers","that","layers","Zoom","zoomName","html","title","DomEvent.stop","Scale","maxMeters","meters","maxFeet","maxMiles","miles","feet","text","ratio","pow10","ukrainianFlag","Attribution","prefix","attribs","prefixAndAttribs","attribution","Handler","Mixin","START","Draggable","dragStartTarget","DomUtil.hasClass","DomUtil.disableImageDrag","DomUtil.disableTextSelection","first","sizedParent","DomUtil.getSizedParentNode","DomUtil.getScale","mouseevent","noInertia","DomUtil.enableImageDrag","DomUtil.enableTextSelection","fireDragend","clipPolygon","clippedPoints","edges","k","LineUtil._getBitCode","LineUtil._getEdgeIntersection","polygonCenter","p1","p2","f","area","LineUtil.isFlat","centroidLatLng","areaBounds","centroid","latlngCenter","coords","latSum","lngSum","simplify","tolerance","sqTolerance","_reducePoints","_simplifyDP","pointToSegmentDistance","_sqClosestPointOnSegment","closestPointOnSegment","ArrayConstructor","markers","_simplifyDPStep","newPoints","maxSqDist","sqDist","reducedPoints","prev","_sqDist","_lastCode","clipSegment","useLastCode","codeA","_getBitCode","codeB","codeOut","newCode","_getEdgeIntersection","code","dot","isFlat","_flat","polylineCenter","halfDist","segDist","dist","LonLat","Mercator","tmp","con","ts","phi","dphi","EPSG3395","EPSG4326","Simple","Layer","targetEl","events","method","minZoom","maxZoom","oldZoomSpan","LayerGroup","layerId","methodName","zIndex","layerGroup","FeatureGroup","featureGroup","Icon","oldIcon","img","sizeOption","anchor","icon","IconDefault","strip","re","idx","match","MarkerDrag","marker","speed","iconPos","origin","panBounds","movement","shadow","Marker","latLng","oldLatLng","classToAdd","addIcon","newShadow","addShadow","opt","draggable","opacity","DomUtil.setOpacity","iconOpts","Path","CircleMarker","radius","r2","circleMarker","Circle","legacyOptions","half","latR","top","bottom","lngR","circle","Polyline","minDistance","minPoint","closest","LineUtil._sqClosestPointOnSegment","jLen","LineUtil.polylineCenter","result","flat","projectedBounds","ring","parts","segment","LineUtil.clipSegment","LineUtil.simplify","part","LineUtil.pointToSegmentDistance","polyline","LineUtil._flat","Polygon","PolyUtil.polygonCenter","clipped","PolyUtil.clipPolygon","polygon","GeoJSON","geojson","features","feature","geometryToLayer","asFeature","geometry","pointToLayer","_coordsToLatLng","coordsToLatLng","_pointToLayer","coordsToLatLngs","geoLayer","featureLayer","pointToLayerFn","levelsDeep","latLngToCoords","latLngsToCoords","getFeature","newGeometry","PointToGeoJSON","multi","holes","isGeometryCollection","jsons","json","geoJSON","geoJson","ImageOverlay","url","styleOpts","DomUtil.toFront","DomUtil.toBack","wasElementSupplied","image","errorUrl","imageOverlay","VideoOverlay","vid","sourceElements","sources","source","videoOverlay","video","SVGOverlay","svgOverlay","DivOverlay","content","node","OverlayClass","old","Popup","DomEvent.stopPropagation","wrapper","closeButton","width","height","maxHeight","scrolledClass","marginBottom","containerHeight","containerWidth","layerPos","containerPos","popup","Tooltip","subX","subY","tooltipPoint","direction","tooltipWidth","tooltipHeight","tooltip","DivIcon","bgPos","divIcon","GridLayer","tileZoom","Util.throttle","compare","edgeZIndex","nextFrame","willPrune","tile","fade","level","x2","y2","z2","coords2","animating","noPrune","tileZoomChanged","translate","tileSize","mapZoom","halfSize","tileRange","tileCenter","queue","noPruneRange","fragment","tileBounds","nwPoint","sePoint","bp","tilePos","err","newCoords","gridLayer","TileLayer","noRedraw","done","invertedY","Util.template","zoomReverse","zoomOffset","tilePoint","Util.emptyImageUrl","tileLayer","TileLayerWMS","wmsParams","realRetina","projectionKey","bbox","tileLayerWMS","Renderer","currentCenterPoint","topLeftOffset","Canvas","order","next","dashArray","dashValue","ctx","clickedLayer","candidateHoveredLayer","vmlCreate","vmlMixin","stroke","fill","SVG","arc","renderer","Rectangle","rectangle","BoxZoom","DoubleClickZoom","Drag","pxCenter","pxWorldCenter","threshold","limit","worldWidth","halfWidth","newX1","newX2","newX","ease","speedVector","limitedSpeed","limitedSpeedVector","decelerationDuration","Keyboard","body","docEl","panDelta","keys","codes","zoomDelta","newLatLng","ScrollWheelZoom","DomEvent.getWheelDelta","debounce","d2","d3","d4","tapHoldDelay","TapHold","cancelClickPrevent","simulatedEvent","TouchZoom","moveFn","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","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","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","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","getUserInfo","getLoginTweaks","tweaks","getLang","urlvars","cookieName","result","rpc","getBrowser","postRenderChecks","log","logtext","onDomReady","import_vue","import_vue_router","import_vue","import_vue_router","import_vue","STORAGE_KEY","ATTR","readStored","v","prefersDark","resolveInitialTheme","apply","theme","initTheme","useTheme","setTheme","next","toggleTheme","mq","onSystemChange","theme","toggleTheme","useTheme","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","args","_createCommentVNode","_createStaticVNode","_Fragment","_createElementVNode","ThemeToggle_default","render","import_vue","props","__props","emit","__emit","cells","inputs","rootEl","onFocusOut","event","next","setRef","el","i","val","digits","_","commit","value","focusCell","onInput","target","digit","onKeydown","onFocus","onPaste","firstEmpty","c","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_Fragment","_renderList","cell","i","el","$event","CodeInput_default","render","import_vue","props","__props","emit","__emit","inputEl","onInput","event","toggle","__expose","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","PasswordInput_default","render","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_renderSlot","FieldError_default","render","api","rpc","searchLocations","query","_signal","listLocations","nearbyLocations","lat","lng","limit","getLocationDetail","id","fetchImagesForLocation","locationId","startLocationAnalysis","getAnalysisStatus","analysisId","getMyFeedbackForLocation","createManualLocation","payload","requestPasswordReset","email","resetPassword","checkResetCode","code","getMyFeedback","getAllFeedback","getFeedbackDetail","submitFeedback","getFunnelLocations","setFunnelRadius","slug","radiusM","setFunnelGlobalRadius","getGemeenteGrenzen","getGemeenteInwoners","getMyList","addToMyListServer","removeFromMyListServer","reorderMyListServer","orderedLocationIds","getMyPreferredRegions","setMyPreferredRegions","regions","getProvinces","LABELS","scorePassword","password","classes","long","score","MIN_LOGIN_BUSY_MS","LOGIN_SAFETY_MS","EMAIL_KEY","REMEMBER_ME_KEY","route","router","mode","errorMessage","loginNotice","loggingIn","loginSubmittedAt","failTimer","safetyTimer","isDev","prefill","readStoredEmail","email","value","loginInput","loginPassword","loginPasswordVisible","readRememberMe","rememberMe","on","code","newPassword","newPassword2","busy","flowError","flowNotice","devCode","newPasswordRef","showPassword","showPassword2","strength","scorePassword","fieldErrors","codeValid","lastCheckedCode","m","checkCode","valid","checkResetCode","onCodeComplete","onCodeBlur","goForgot","clearLoginTimers","goLogin","onRequestCode","target","res","requestPasswordReset","onResetPassword","enteredCode","resetPassword","msg","onLoginSubmit","onLoginFailed","evt","message","wait","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_createCommentVNode","_withDirectives","_toDisplayString","_createBlock","_withCtx","_createTextVNode","$event","_vModelText","_vModelCheckbox","_vShow","_withModifiers","_Fragment","_renderList","n","_normalizeClass","LoginForm_default","render","import_vue","import_vue","STORAGE_PREFIX","storageKey","email","getUserInfo","loadInitial","raw","parsed","it","items","serverLoaded","next","err","event","findIndex","locationId","loadFromServer","serverItems","getMyList","s","reloadPersonalListFromServer","usePersonalList","list","count","isInList","addToList","location","snapshot","id","addToMyListServer","removeFromList","idx","removeFromMyListServer","moveUp","persistOrder","moveDown","reorder","orderedLocationIds","byId","reorderMyListServer","clear","ids","nextLocationId","afterId","root","raw","getFrontendData","urlHome","urlVerkennen","urlPlanning","urlBeoordelingen","urlAccount","root","urlLocation","id","urlAddLocation","siteRoot","count","usePersonalList","info","getUserInfo","displayName","initials","first","last","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","_createCommentVNode","_createElementVNode","_createStaticVNode","_normalizeClass","_toDisplayString","TopNav_default","render","import_vue","LOGGED_IN_CLASS","useWrdAuthState","isLoggedIn","observer","read","isLoggedIn","useWrdAuthState","listCount","usePersonalList","route","router","loggedIn","name","view","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","render","_ctx","_cache","$props","$setup","$data","$options","_component_router_view","_resolveComponent","_openBlock","_createElementBlock","_createVNode","_createElementVNode","_normalizeClass","_toDisplayString","_createCommentVNode","_createBlock","App_default","render","import_vue_router","import_vue","ALL_REGIONS","BUCKET_OPTIONS","SCORED_BUCKET_OPTIONS","b","FEEDBACK_OPTIONS","TYPE_LABELS","typeLabel","t","MANUAL_LOCATION_TYPES","import_vue","props","__props","emit","__emit","timer","clearTimer","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createCommentVNode","Toast_default","render","import_vue","props","__props","emit","__emit","uid","titleId","messageId","confirmBtnEl","cancelBtnEl","lastFocus","open","onCancel","onConfirm","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_withModifiers","_withKeys","_createElementVNode","_normalizeClass","_renderSlot","_toDisplayString","_createTextVNode","_createCommentVNode","ConfirmDialog_default","render","buildUserbackUserData","info","email","name","part","ACCESS_TOKEN","WIDGET_SRC","scriptInjected","installUserback","userData","buildUserbackUserData","getUserInfo","script","openUserbackFeedback","info","getUserInfo","displayName","email","initials","first","last","logoutDialogOpen","handleLogout","logout","err","regionOptions","ALL_REGIONS","selectedRegion","regionOpen","regionLoading","toastOpen","toastMessage","toastTone","showToast","message","tone","provincesRes","prefRes","getProvinces","getMyPreferredRegions","selectRegion","r","previous","setMyPreferredRegions","onRegionBlur","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","_createCommentVNode","_createVNode","$event","_Fragment","_renderList","r","_normalizeClass","_withModifiers","_createTextVNode","args","_withCtx","AccountView_default","render","import_vue","import_vue_router","route","router","prefill","address","companyName","locationType","isSaving","errorMessage","duplicates","formatMeters","m","onEdit","create","force","result","createManualLocation","err","onSubmit","onForceSubmit","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_withModifiers","_createTextVNode","_withDirectives","$event","_vModelText","_Fragment","_renderList","t","_toDisplayString","_vModelSelect","_createCommentVNode","d","AddLocationView_default","render","import_vue","import_vue_router","parseScope","raw","scopeToQuery","scope","firstNameOf","submittedBy","trimmed","reactionLabel","first","overallVerdictLabel","SCOUT_TONE_COLORS","scoutBucket","score","scoutRecommendation","scoutColor","scoutTextColor","SCOUT_LEGEND","props","__props","route","router","detail","isLoading","CRITERIA","dimensionRows","c","dim","d","hasAttention","scoreStyle","score","scoutColor","scoutTextColor","reactionBoxLabel","reactionLabel","overallVerdictBoxLabel","overallVerdictLabel","initDetail","feedback","getFeedbackDetail","err","goBack","scopeToQuery","parseScope","goToLocation","id","verdictLabel","rating","verdictClass","dateFmt","formatDate","iso","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_createCommentVNode","_toDisplayString","_normalizeStyle","_normalizeClass","_createTextVNode","_renderList","row","BeoordelingDetailView_default","render","import_vue","import_vue_router","route","router","items","isLoading","scope","parseScope","kicker","CRITERIA","loadFeedback","feedback","getAllFeedback","getMyFeedback","err","next","scopeToQuery","openDetail","item","criteriaDots","c","hasAttention","v","attentionCount","fullyAgreedCount","critClass","value","critTitle","dateFmt","formatDate","iso","d","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createTextVNode","_createCommentVNode","_Fragment","_normalizeClass","$event","_createStaticVNode","_renderList","item","c","BeoordelingenView_default","render","import_vue","import_vue","props","__props","isInList","addToList","removeFromList","usePersonalList","inList","confirmOpen","onClick","confirmRemove","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_normalizeClass","_withModifiers","_toDisplayString","_createVNode","$event","_withCtx","_createTextVNode","AddToListButton_default","render","import_vue","props","__props","emit","__emit","toggle","value","reasonId","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","$event","_createTextVNode","_toDisplayString","_createCommentVNode","AgreeDisagree_default","render","import_vue","import_vue","import_embla_carousel_vue","SWIPE_THRESHOLD_PX","props","__props","viewportRef","emblaApi","emblaCarouselVue","selectedIndex","canScrollPrev","canScrollNext","onSelect","api","scrollTo","idx","scrollPrev","scrollNext","lightboxOpen","lightboxIndex","touchStartX","touchStartY","openLightbox","closeLightbox","goPrev","goNext","onTouchStart","e","onTouchEnd","t","dx","dy","onTouchCancel","onKeydown","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","_Fragment","_renderList","img","idx","$event","_toDisplayString","_createStaticVNode","_normalizeClass","_createCommentVNode","_","_createBlock","_Teleport","_withModifiers","PhotoCarousel_default","render","props","__props","emit","__emit","localImages","fetching","fetchError","effectiveImages","STREETVIEW_LABELS","carouselImages","out","sv","i","handleFetchImages","images","fetchImagesForLocation","err","fullAddress","parts","hasDetails","stripProtocol","url","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","_createBlock","_Fragment","_createTextVNode","_toDisplayString","_createCommentVNode","LocationInfoPanel_default","render","import_vue","googleMapsUrl","params","query","appleMapsUrl","ll","search","googleMapsEmbedUrl","streetViewUrl","streetViewEmbedUrl","props","__props","mapLinksVisible","streetViewEmbedMode","hasActions","actionsSingle","hasCoords","coords","label","parts","embedSrc","googleMapsEmbedUrl","streetViewEmbedSrc","streetViewEmbedUrl","streetViewHref","streetViewUrl","googleHref","googleMapsUrl","appleHref","appleMapsUrl","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createElementVNode","_normalizeClass","LocationMap_default","render","import_vue","props","__props","emit","__emit","uid","titleId","STEPS","heading","note","activeIndex","idx","s","stepStatus","i","onClose","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","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_Fragment","_renderList","step","i","_normalizeClass","_createTextVNode","ProgressDialog_default","render","import_vue","props","__props","size","label","scoutRecommendation","import_vue","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_normalizeStyle","_toDisplayString","RatingBadge_default","render","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createBlock","_createCommentVNode","_createVNode","$event","QuickScanSection_default","render","DEBUG_HOSTS","isDebugFillHost","hostname","REVIEW_FLAG_LABELS","reviewReasonLabel","flag","reviewReasonLabels","flags","POLL_INTERVAL_MS","MAX_POLL_FAILURES","props","__props","homeUrl","urlHome","DIMENSIONS","REASONED_KEYS","detail","error","isLoading","feedback","reasons","generalNotes","gpsCoords","attemptedSubmit","isSubmitting","isSubmitted","submitError","confirmAgreeAllOpen","personalList","usePersonalList","wasInList","nextInListId","locationSummary","loc","consensusOverall","previousFeedbackAt","previousFeedbackDateLabel","d","modelResults","consensus","consensusExplanations","consensusConclusion","introAddressText","introAddressHref","label","googleMapsUrl","reviewReasons","reviewReasonLabels","averageModelScore","field","values","mr","v","sum","s","aiScores","out","explanationFor","key","reasonErrors","errs","SECTION_LABELS","validationErrors","agreement","isFormInvalid","showDebugFill","isDebugFillHost","DEBUG_REASONS","DEBUG_GENERAL_NOTES","pickOne","arr","debugFillRandom","setAgreement","value","setReason","onAgreeAllClick","onAgreeAllConfirmed","handleSubmit","handleImagesUpdated","images","reasonOrUndef","submitFeedback","id","err","toAgreement","prefillFromPreviousFeedback","row","loadDetail","result","getLocationDetail","confirmOpen","progressOpen","analyzing","progressState","progressStage","progressError","pollTimer","pollFailures","imagesRefreshedDuringRun","stopPoll","schedulePoll","analysisId","pollOnce","beginPolling","maybeRefreshImagesDuringRun","stage","status","getAnalysisStatus","onStartButtonClick","onStartAnalysisConfirmed","startLocationAnalysis","onProgressClose","initLocation","previousResult","getMyFeedbackForLocation","loaded","runningId","position","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createTextVNode","_toDisplayString","_createCommentVNode","_createBlock","_createVNode","_Fragment","_renderList","reason","_withModifiers","d","$event","_withDirectives","_vModelText","msg","i","_normalizeClass","_withCtx","DetailView_default","render","import_vue","import_vue_router","formatDistance","meters","AUTO_NAVIGATE_THRESHOLD_METERS","PLANNING_PREVIEW_LIMIT","router","userInfo","getUserInfo","greetingName","info","first","email","initials","last","list","listCount","usePersonalList","listPreview","isPlanningExpanded","geoState","nearbySectionEl","geoTitle","geoSub","requestLocation","position","locations","nearbyLocations","closest","err","error","message","query","searchResults","isSearching","hasSearched","showSearchResults","addLocationHref","q","urlAddLocation","controller","debounce","value","searchLocations","ratingLabel","score","bucket","scoutBucket","scoutRecommendation","scoreStyle","scoutColor","gaugeStyle","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","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createCommentVNode","_createElementVNode","_toDisplayString","_createTextVNode","_Fragment","_withDirectives","$event","_vModelText","_renderList","loc","_normalizeStyle","_createVNode","_normalizeClass","_createStaticVNode","_vShow","item","idx","HomeView_default","render","import_vue","LONGPRESS_MS","MOVE_THRESHOLD","SCROLL_THRESHOLD","list","count","removeFromList","moveUp","moveDown","reorder","usePersonalList","firstItem","displayList","next","dragId","dragTranslate","startPointerX","startPointerY","startIndex","currentIndex","slotHeight","activePointerId","pendingLocationId","pendingItem","pendingListEl","pendingPointerType","longPressTimer","dragActive","suppressClick","onItemPointerDown","event","locationId","item","listEl","onPendingMove","onPendingEnd","onPendingCancel","activateDrag","lis","it","preventTouchScroll","delta","last","target","arr","moved","dist","cancelPending","changed","finishDrag","stopPendingListeners","clearLongPress","resetPending","onLinkClick","dragStyle","removeDialogOpen","pendingRemove","askRemove","id","name","confirmRemove","scoreStyle","score","scoutColor","gaugeStyle","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_createTextVNode","_toDisplayString","_createCommentVNode","_createStaticVNode","_createVNode","_TransitionGroup","_normalizeClass","_withCtx","_renderList","item","idx","_normalizeStyle","$event","_withModifiers","MyListView_default","render","import_vue","import_vue","import_vue","import_vue","props","__props","open","isOpen","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createCommentVNode","$event","_createElementVNode","_toDisplayString","_Fragment","_withDirectives","_renderSlot","_vShow","AccordionSection_default","render","filterLocations","locations","criteria","region","types","buckets","feedback","query","q","bucketSet","l","bucket","scoutBucket","sortByScoreDesc","a","b","sa","sb","ALL_SCORED_BUCKETS","DEFAULT_BUCKETS","toggleBucketSelection","current","id","toggleTypeSelection","allTypes","next","t","SCORED_BUCKETS","VALID_FEEDBACK","sameBucketSet","setB","x","activeFilterCount","count","splitCsv","value","s","filtersToQuery","out","parseCriteria","params","score","parts","scored","v","STORAGE_KEY","serializeCriteria","parseStoredCriteria","raw","data","record","k","hasStoredCriteria","loadStoredCriteria","saveCriteria","props","__props","emit","__emit","query","_useModel","closeBtnEl","isCategoryOn","c","isBucketOn","id","isAllBucketsOn","ALL_SCORED_BUCKETS","b","soortSummary","n","typeLabel","geschiktheidSummary","feedbackSummary","FEEDBACK_OPTIONS","f","lastFocus","open","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","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_withModifiers","$event","_withKeys","_createElementVNode","_createCommentVNode","_withDirectives","_vModelText","_Fragment","_renderList","r","_normalizeClass","_toDisplayString","c","b","_createTextVNode","f","_renderSlot","FilterPanel_default","render","import_vue","props","__props","emit","__emit","detail","isLoading","load","id","imagesOpen","openDims","fetchError","getLocationDetail","err","overall","recommendation","scoutRecommendation","scoreColor","scoutColor","badgeBorder","badgeBg","addressText","loc","addressHref","label","googleMapsUrl","summary","hasContact","stripProtocol","url","websiteLabel","modelResults","explanations","averageModelScore","field","values","mr","v","sum","s","DIMENSIONS","dimensionRows","d","hasDimensionScores","isDimOpen","i","toggleDim","allDimsOpen","toggleAllDims","expandAll","_","fetching","STREETVIEW_LABELS","carouselImages","out","images","sv","imageCountLabel","n","handleFetchImages","fetchImagesForLocation","locationSummary","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createElementVNode","$event","_createElementBlock","_Fragment","_createCommentVNode","_createVNode","_toDisplayString","_normalizeStyle","_createTextVNode","_renderList","d","i","_normalizeClass","LocationDetailPanel_default","render","L","import_vue","FEEDBACK_BADGE_HTML","TILE_URL","props","__props","emit","__emit","el","map","markerLayer","overlayLayer","overlayGeoJsonRef","funnelLayer","radiusLayer","resizeObserver","hasAutoFitted","waitObserver","withCoords","l","overlayStyleFor","feature","o","key","code","renderOverlay","f","renderRadii","list","group","r","override","renderFunnel","pin","isFilter","html","icon","marker","popup","ev","renderMarkers","loc","color","scoutColor","selected","inPlanning","fitToLocations","coords","bounds","initMap","funnelPane","id","__expose","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","ScoutMap_default","render","BATCH","props","__props","emit","__emit","locations","isLoading","error","scoutMapRef","region","ALL_REGIONS","regionOpen","selectedTypes","categoryOpen","selectedBuckets","DEFAULT_BUCKETS","bucketOpen","feedbackFilter","feedbackOpen","query","selectedId","renderLimit","listEl","sentinelEl","mobileView","filtersOpen","personalList","usePersonalList","planningIds","item","regionOptions","provinces","l","a","b","categoryOptions","types","typeLabel","categoryValueLabel","isCategoryOn","c","bucketValueLabel","isAllBucketsOn","BUCKET_OPTIONS","ALL_SCORED_BUCKETS","isBucketOn","id","feedbackValueLabel","FEEDBACK_OPTIONS","f","currentCriteria","filtered","base","filterLocations","matched","sortByScoreDesc","activeCount","activeFilterCount","visible","scrollObserver","el","entries","e","recommendationFor","loc","scoutRecommendation","badgeStyle","score","color","scoutColor","barStyle","select","selectRegion","r","onRegionBlur","toggleCategory","toggleTypeSelection","onCategoryBlur","toggleAllBuckets","toggleBucket","toggleBucketSelection","onBucketBlur","selectFeedback","onFeedbackBlur","resetFilters","applyCriteria","loadStoredCriteria","hadStoredPrefs","hasStoredCriteria","saveCriteria","val","result","listLocations","err","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","_createCommentVNode","_createElementVNode","$event","_toDisplayString","_Fragment","_renderList","r","_normalizeClass","_withModifiers","_createTextVNode","c","b","f","_renderSlot","_withDirectives","_vModelText","loc","_normalizeStyle","_createVNode","id","el","row","_createSlots","_withCtx","_createBlock","VerkennenView_default","render","import_vue","import_vue","open","onBlur","e","pill","next","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","$event","_renderSlot","_toDisplayString","_createCommentVNode","FilterPill_default","render","import_vue","STEPS","MIN_INWONERS","MAX_INWONERS","LOG_MIN","LOG_MAX","LOG_RANGE","props","__props","emit","__emit","sliderPos","clamped","formatted","onInput","e","pos","raw","roundNice","n","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createTextVNode","_toDisplayString","InwonersSlider_default","render","props","__props","valueLabel","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createBlock","_withCtx","_createElementVNode","_createVNode","$event","InwonersFilterPill_default","render","import_vue","props","__props","emit","__emit","fmtKm","meters","km","onInput","e","v","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_toDisplayString","_createTextVNode","$event","RadiusBody_default","render","props","__props","valueLabel","fmtKm","meters","km","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createBlock","_withCtx","_createElementVNode","_createVNode","$event","RadiusFilterPill_default","render","import_vue","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_renderList","stage","_normalizeClass","_normalizeStyle","$event","_createElementVNode","_toDisplayString","_withModifiers","FunnelChips_default","render","props","__props","chipProps","valueLabel","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createBlock","_withCtx","_createElementVNode","_createVNode","_mergeProps","$event","FunnelLegend_default","render","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createElementVNode","_normalizeClass","$event","_createStaticVNode","_toDisplayString","ComboToggleFilterPill_default","render","pointInRing","lng","lat","ring","inside","i","j","xi","yi","xj","yj","pointInPolygonRings","rings","pointInPolygon","geometry","poly","buildGemeenteIndex","geo","entries","feature","computeBbox","metaByCode","e","code","minLng","minLat","maxLng","maxLat","eat","c","buildInwonersIndex","rows","byCode","max","r","code","STAGE_COLORS","STAGES_ORDER","haversineMeters","aLat","aLng","bLat","bLng","toRad","d","dLat","dLng","lat1","lat2","a","computeBlockedSuggestionIds","suggestions","funnelEntries","globalRadiusM","overridesM","filteringStages","blocked","filteringPins","e","s","pin","r","shouldUseLightMap","viewportWidth","STORAGE_KEY","VALID_STAGES","STAGES_ORDER","defaultFunnelPrefs","sanitizeStages","value","out","v","parseFunnelPrefs","raw","data","visible","filtering","serializeFunnelPrefs","prefs","loadFunnelPrefs","saveFunnelPrefs","STORAGE_KEY","defaultComboEnabled","parseComboEnabled","raw","serializeComboEnabled","enabled","loadComboEnabled","saveComboEnabled","INWONERS_KEY","lightMode","shouldUseLightMap","allLocations","funnel","gemeenteIndex","inwonersIndex","preferredRegion","readStoredInwoners","raw","n","minInwoners","v","globalRadiusM","overridesM","initialFunnelPrefs","loadFunnelPrefs","visibleStages","filteringStages","vis","filt","saveFunnelPrefs","comboEnabled","loadComboEnabled","saveComboEnabled","onLocationsLoaded","locs","codeByLocationId","map","idx","loc","overlay","threshold","inw","outCodes","code","count","funnelPins","pins","f","isFilter","STAGE_COLORS","buildPopupHtml","radii","out","r","funnelCounts","inwonersSummary","funnelSummary","STAGES_ORDER","blockedByRadius","computeBlockedSuggestionIds","l","comboFilter","blocked","codes","hiddenByComboCount","passes","lines","escapeHtml","addr","popupCleanup","onFunnelPopupOpen","id","popupEl","input","label","meta","onClear","next","persistRadius","paint","renderMeta","isOverride","fmtKm","value","onInput","debounceSave","onFunnelPopupClose","toggleVisible","stage","s","toggleFiltering","clearAllOverrides","slugs","slug","hydrated","saveTimers","key","fn","ms","prev","persistGlobalRadius","setFunnelGlobalRadius","err","radiusM","setFunnelRadius","meters","km","regions","getMyPreferredRegions","fnl","grenzen","getFunnelLocations","getGemeenteGrenzen","getGemeenteInwoners","entries","overrides","e","buildGemeenteIndex","buildInwonersIndex","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_createSlots","_withCtx","_createVNode","$event","_createElementVNode","_normalizeClass","VerkennenContainer_default","render","routes","HomeView_default","VerkennenContainer_default","AddLocationView_default","MyListView_default","BeoordelingenView_default","BeoordelingDetailView_default","route","AccountView_default","DetailView_default","router","APP_NAME","APP_SHORT_NAME","APP_DESCRIPTION","THEME_COLOR_DARK","BACKGROUND_COLOR","SAFARI_PIN_COLOR","abs","url","buildManifest","root","siteRoot","android_chrome_192x192_default","android_chrome_512x512_default","ensureLink","id","existing","link","manifestBlobUrl","installPwa","manifest","json","blob","manifestLink","apple","apple_touch_icon_default","icon32","favicon_32x32_default","icon16","favicon_16x16_default","maskIcon","safari_pinned_tab_default","LOGGED_IN_CLASS","initTheme","onDomReady","installPwa","app","App_default","router","setupWRDAuth","reloadPersonalListFromServer","installUserback","aps"]}