{
  "version": 3,
  "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/algoliasearch/dist/algoliasearch-lite.umd.js", "../../../node_modules/@algolia/events/events.js", "../../../node_modules/algoliasearch-helper/src/functions/inherits.js", "../../../node_modules/algoliasearch-helper/src/DerivedHelper/index.js", "../../../node_modules/algoliasearch-helper/src/functions/escapeFacetValue.js", "../../../node_modules/algoliasearch-helper/src/functions/merge.js", "../../../node_modules/algoliasearch-helper/src/functions/objectHasKeys.js", "../../../node_modules/algoliasearch-helper/src/functions/omit.js", "../../../node_modules/algoliasearch-helper/src/RecommendParameters/index.js", "../../../node_modules/algoliasearch-helper/src/RecommendResults/index.js", "../../../node_modules/algoliasearch-helper/src/requestBuilder.js", "../../../node_modules/algoliasearch-helper/src/functions/defaultsPure.js", "../../../node_modules/algoliasearch-helper/src/functions/find.js", "../../../node_modules/algoliasearch-helper/src/functions/intersection.js", "../../../node_modules/algoliasearch-helper/src/functions/valToNumber.js", "../../../node_modules/algoliasearch-helper/src/utils/isValidUserToken.js", "../../../node_modules/algoliasearch-helper/src/SearchParameters/RefinementList.js", "../../../node_modules/algoliasearch-helper/src/SearchParameters/index.js", "../../../node_modules/algoliasearch-helper/src/functions/compact.js", "../../../node_modules/algoliasearch-helper/src/functions/findIndex.js", "../../../node_modules/algoliasearch-helper/src/functions/formatSort.js", "../../../node_modules/algoliasearch-helper/src/functions/orderBy.js", "../../../node_modules/algoliasearch-helper/src/SearchResults/generate-hierarchical-tree.js", "../../../node_modules/algoliasearch-helper/src/SearchResults/index.js", "../../../node_modules/algoliasearch-helper/src/functions/flat.js", "../../../node_modules/algoliasearch-helper/src/utils/sortAndMergeRecommendations.js", "../../../node_modules/algoliasearch-helper/src/version.js", "../../../node_modules/algoliasearch-helper/src/algoliasearch.helper.js", "../../../node_modules/algoliasearch-helper/index.js", "../../../node_modules/qs/lib/formats.js", "../../../node_modules/qs/lib/utils.js", "../../../node_modules/qs/lib/stringify.js", "../../../node_modules/qs/lib/parse.js", "../../../node_modules/qs/lib/index.js", "../../../node_modules/hogan.js/lib/compiler.js", "../../../node_modules/hogan.js/lib/template.js", "../../../node_modules/hogan.js/lib/hogan.js", "../../../node_modules/flatpickr/dist/l10n/fr.js", "../../../node_modules/@stripe/stripe-js/dist/pure.js", "../../../node_modules/@stripe/stripe-js/pure/index.js", "../../../node_modules/namespace-emitter/index.js", "../../../node_modules/lodash/isObject.js", "../../../node_modules/lodash/_freeGlobal.js", "../../../node_modules/lodash/_root.js", "../../../node_modules/lodash/now.js", "../../../node_modules/lodash/_trimmedEndIndex.js", "../../../node_modules/lodash/_baseTrim.js", "../../../node_modules/lodash/_Symbol.js", "../../../node_modules/lodash/_getRawTag.js", "../../../node_modules/lodash/_objectToString.js", "../../../node_modules/lodash/_baseGetTag.js", "../../../node_modules/lodash/isObjectLike.js", "../../../node_modules/lodash/isSymbol.js", "../../../node_modules/lodash/toNumber.js", "../../../node_modules/lodash/debounce.js", "../../../node_modules/lodash/throttle.js", "../../../node_modules/@transloadit/prettier-bytes/src/prettierBytes.ts", "../../../node_modules/wildcard/index.js", "../../../node_modules/mime-match/index.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/utils.js", "../../javascript/controllers/bridge_controller.js", "../../javascript/controllers/element_controller.js", "../../javascript/controllers/flow_controller.js", "../../javascript/controllers/hello_controller.js", "../../../node_modules/@josefarias/hotwire_combobox/app/assets/javascripts/hotwire_combobox.esm.js", "../../javascript/controllers/submittable_controller.js", "../../javascript/controllers/form_controller.js", "../../javascript/controllers/ongoing_invoice_controller.js", "../../javascript/controllers/index.js", "../../components/action_card_component/action_card_component.js", "../../components/admin/button_group_component/button_group_component.js", "../../components/admin/customer_switch_component/customer_switch_component.js", "../../components/admin/list/item_component/item_component.js", "../../components/admin/list_component/list_component.js", "../../components/admin/product_glimpse_component/product_glimpse_component.js", "../../components/admin/search/algolia_component/algolia_component.js", "../../../node_modules/instantsearch.js/es/lib/suit.js", "../../../node_modules/instantsearch.js/es/lib/utils/capitalize.js", "../../../node_modules/instantsearch.js/es/lib/utils/noop.js", "../../../node_modules/instantsearch.js/es/lib/utils/logger.js", "../../../node_modules/instantsearch.js/es/lib/utils/getObjectType.js", "../../../node_modules/instantsearch.js/es/lib/utils/checkRendering.js", "../../../node_modules/instantsearch.js/es/lib/utils/escape-html.js", "../../../node_modules/instantsearch.js/es/lib/utils/isPlainObject.js", "../../../node_modules/instantsearch.js/es/lib/utils/escape-highlight.js", "../../../node_modules/instantsearch.js/es/lib/utils/concatHighlightedParts.js", "../../../node_modules/instantsearch.js/es/lib/utils/createConcurrentSafePromise.js", "../../../node_modules/instantsearch.js/es/lib/utils/isFacetRefined.js", "../../../node_modules/instantsearch.js/es/lib/utils/createSendEventForFacet.js", "../../../node_modules/instantsearch.js/es/lib/utils/serializer.js", "../../../node_modules/instantsearch.js/es/lib/utils/createSendEventForHits.js", "../../../node_modules/instantsearch.js/es/lib/utils/isIndexWidget.js", "../../../node_modules/instantsearch.js/es/lib/utils/setIndexHelperState.js", "../../../node_modules/instantsearch.js/es/lib/utils/debounce.js", "../../../node_modules/instantsearch.js/es/lib/utils/defer.js", "../../../node_modules/instantsearch.js/es/lib/utils/documentation.js", "../../../node_modules/instantsearch.js/es/lib/utils/escapeFacetValue.js", "../../../node_modules/instantsearch.js/es/lib/utils/find.js", "../../../node_modules/instantsearch.js/es/lib/utils/findIndex.js", "../../../node_modules/instantsearch.js/es/lib/utils/getAppIdAndApiKey.js", "../../../node_modules/instantsearch.js/es/lib/utils/isDomElement.js", "../../../node_modules/instantsearch.js/es/lib/utils/getContainerNode.js", "../../../node_modules/instantsearch.js/es/lib/utils/getHighlightedParts.js", "../../../node_modules/instantsearch.js/es/lib/utils/getHighlightFromSiblings.js", "../../../node_modules/instantsearch.js/es/lib/utils/getPropertyByPath.js", "../../../node_modules/instantsearch.js/es/lib/utils/getRefinements.js", "../../../node_modules/instantsearch.js/es/lib/utils/getWidgetAttribute.js", "../../../node_modules/instantsearch.js/es/lib/utils/hits-absolute-position.js", "../../../node_modules/instantsearch.js/es/lib/utils/hits-query-id.js", "../../../node_modules/instantsearch.js/es/lib/utils/hydrateSearchClient.js", "../../../node_modules/instantsearch.js/es/lib/utils/isEqual.js", "../../../node_modules/instantsearch.js/es/lib/utils/isSpecialClick.js", "../../../node_modules/instantsearch.js/es/lib/utils/walkIndex.js", "../../../node_modules/instantsearch.js/es/lib/utils/uniq.js", "../../../node_modules/instantsearch.js/es/lib/utils/mergeSearchParameters.js", "../../../node_modules/instantsearch.js/es/lib/utils/omit.js", "../../../node_modules/instantsearch.js/es/lib/utils/render-args.js", "../../../node_modules/instantsearch.js/es/lib/utils/resolveSearchParameters.js", "../../../node_modules/instantsearch.js/es/lib/utils/reverseHighlightedParts.js", "../../../node_modules/instantsearch.js/es/lib/utils/safelyRunOnBrowser.js", "../../../node_modules/instantsearch.js/es/lib/utils/toArray.js", "../../../node_modules/instantsearch.js/es/helpers/highlight.js", "../../../node_modules/instantsearch.js/es/helpers/reverseHighlight.js", "../../../node_modules/instantsearch.js/es/helpers/snippet.js", "../../../node_modules/instantsearch.js/es/helpers/reverseSnippet.js", "../../../node_modules/instantsearch.js/es/helpers/insights.js", "../../../node_modules/instantsearch.js/es/helpers/get-insights-anonymous-user-token.js", "../../../node_modules/instantsearch.js/es/lib/infiniteHitsCache/sessionStorage.js", "../../../node_modules/instantsearch.js/es/lib/InstantSearch.js", "../../../node_modules/instantsearch.js/es/middlewares/createInsightsMiddleware.js", "../../../node_modules/instantsearch.js/es/middlewares/createMetadataMiddleware.js", "../../../node_modules/instantsearch.js/es/lib/routers/history.js", "../../../node_modules/instantsearch.js/es/lib/stateMappings/simple.js", "../../../node_modules/instantsearch.js/es/middlewares/createRouterMiddleware.js", "../../../node_modules/instantsearch.js/es/widgets/index/index.js", "../../../node_modules/instantsearch.js/es/lib/utils/addWidgetId.js", "../../../node_modules/instantsearch.js/es/lib/formatNumber.js", "../../../node_modules/instantsearch.js/es/lib/createHelpers.js", "../../../node_modules/instantsearch.js/es/lib/version.js", "../../../node_modules/instantsearch.js/es/index.js", "../../../node_modules/@babel/runtime/helpers/esm/extends.js", "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js", "../../../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js", "../../../node_modules/instantsearch-ui-components/dist/es/lib/cx.js", "../../../node_modules/instantsearch-ui-components/dist/es/components/Highlight.js", "../../../node_modules/preact/src/constants.js", "../../../node_modules/preact/src/util.js", "../../../node_modules/preact/src/options.js", "../../../node_modules/preact/src/create-element.js", "../../../node_modules/preact/src/component.js", "../../../node_modules/preact/src/diff/props.js", "../../../node_modules/preact/src/create-context.js", "../../../node_modules/preact/src/diff/children.js", "../../../node_modules/preact/src/diff/index.js", "../../../node_modules/preact/src/render.js", "../../../node_modules/preact/src/clone-element.js", "../../../node_modules/preact/src/diff/catch-error.js", "../../../node_modules/instantsearch.js/es/lib/templating/prepareTemplateProps.js", "../../../node_modules/instantsearch.js/es/lib/templating/renderTemplate.js", "../../../node_modules/htm/dist/htm.module.js", "../../../node_modules/htm/preact/index.module.js", "../../../node_modules/instantsearch.js/es/components/InternalHighlight/InternalHighlight.js", "../../../node_modules/instantsearch.js/es/components/Highlight/Highlight.js", "../../../node_modules/instantsearch.js/es/helpers/components/Highlight.js", "../../../node_modules/instantsearch.js/es/components/ReverseHighlight/ReverseHighlight.js", "../../../node_modules/instantsearch.js/es/helpers/components/ReverseHighlight.js", "../../../node_modules/instantsearch.js/es/components/ReverseSnippet/ReverseSnippet.js", "../../../node_modules/instantsearch.js/es/helpers/components/ReverseSnippet.js", "../../../node_modules/instantsearch.js/es/components/Snippet/Snippet.js", "../../../node_modules/instantsearch.js/es/helpers/components/Snippet.js", "../../../node_modules/instantsearch.js/es/components/Template/Template.js", "../../../node_modules/instantsearch.js/es/components/Answers/Answers.js", "../../../node_modules/instantsearch.js/es/connectors/answers/connectAnswers.js", "../../../node_modules/instantsearch.js/es/widgets/answers/defaultTemplates.js", "../../../node_modules/instantsearch.js/es/widgets/answers/answers.js", "../../../node_modules/instantsearch.js/es/connectors/dynamic-widgets/connectDynamicWidgets.js", "../../../node_modules/instantsearch.js/es/widgets/dynamic-widgets/dynamic-widgets.js", "../../../node_modules/instantsearch.js/es/components/CurrentRefinements/CurrentRefinements.js", "../../../node_modules/instantsearch.js/es/connectors/current-refinements/connectCurrentRefinements.js", "../../../node_modules/instantsearch.js/es/widgets/current-refinements/current-refinements.js", "../../../node_modules/instantsearch.js/es/components/SearchBox/SearchBox.js", "../../../node_modules/instantsearch.js/es/components/RefinementList/RefinementListItem.js", "../../../node_modules/instantsearch.js/es/components/RefinementList/RefinementList.js", "../../../node_modules/instantsearch.js/es/lib/insights/client.js", "../../../node_modules/instantsearch.js/es/lib/insights/listener.js", "../../../node_modules/instantsearch.js/es/components/InfiniteHits/InfiniteHits.js", "../../../node_modules/instantsearch.js/es/connectors/infinite-hits/connectInfiniteHits.js", "../../../node_modules/instantsearch.js/es/widgets/infinite-hits/defaultTemplates.js", "../../../node_modules/instantsearch.js/es/widgets/infinite-hits/infinite-hits.js", "../../../node_modules/instantsearch.js/es/connectors/menu/connectMenu.js", "../../../node_modules/instantsearch.js/es/widgets/menu/defaultTemplates.js", "../../../node_modules/instantsearch.js/es/widgets/menu/menu.js", "../../../node_modules/preact/hooks/src/index.js", "../../../node_modules/instantsearch.js/es/components/Panel/Panel.js", "../../../node_modules/instantsearch.js/es/widgets/panel/panel.js", "../../../node_modules/instantsearch.js/es/connectors/refinement-list/connectRefinementList.js", "../../../node_modules/instantsearch.js/es/widgets/search-box/defaultTemplates.js", "../../../node_modules/instantsearch.js/es/widgets/refinement-list/defaultTemplates.js", "../../../node_modules/instantsearch.js/es/widgets/refinement-list/refinement-list.js", "../../../node_modules/instantsearch.js/es/connectors/search-box/connectSearchBox.js", "../../../node_modules/instantsearch.js/es/widgets/search-box/search-box.js", "../../../node_modules/instantsearch.js/es/widgets/index.js", "../../components/admin/search/filters_component/config.js", "../../components/admin/search/hits_component/config.js", "../../components/admin/search/box_component/config.js", "../../components/admin/search/refinements_component/config.js", "../../components/admin/search/box_component/box_component.js", "../../components/admin/search/filters_component/filters_component.js", "../../components/admin/search/hits_component/hits_component.js", "../../components/admin/search/refinements_component/refinements_component.js", "../../components/admin/spinner_component/spinner_component.js", "../../components/avatar_component/avatar_component.js", "../../components/banner_component/banner_component.js", "../../components/bouncer_component/bouncer_component.js", "../../components/button_component/button_component.js", "../../components/calendar_component/calendar_component.js", "../../../node_modules/flatpickr/dist/esm/types/options.js", "../../../node_modules/flatpickr/dist/esm/l10n/default.js", "../../../node_modules/flatpickr/dist/esm/utils/index.js", "../../../node_modules/flatpickr/dist/esm/utils/dom.js", "../../../node_modules/flatpickr/dist/esm/utils/formatting.js", "../../../node_modules/flatpickr/dist/esm/utils/dates.js", "../../../node_modules/flatpickr/dist/esm/utils/polyfills.js", "../../../node_modules/flatpickr/dist/esm/index.js", "../../components/card_component/card_component.js", "../../components/carousel_component/carousel_component.js", "../../../node_modules/swiper/shared/ssr-window.esm.mjs", "../../../node_modules/swiper/shared/utils.mjs", "../../../node_modules/swiper/shared/swiper-core.mjs", "../../../node_modules/swiper/modules/virtual.mjs", "../../../node_modules/swiper/modules/keyboard.mjs", "../../../node_modules/swiper/modules/mousewheel.mjs", "../../../node_modules/swiper/shared/create-element-if-not-defined.mjs", "../../../node_modules/swiper/modules/navigation.mjs", "../../../node_modules/swiper/shared/classes-to-selector.mjs", "../../../node_modules/swiper/modules/pagination.mjs", "../../../node_modules/swiper/modules/scrollbar.mjs", "../../../node_modules/swiper/modules/parallax.mjs", "../../../node_modules/swiper/modules/zoom.mjs", "../../../node_modules/swiper/modules/controller.mjs", "../../../node_modules/swiper/modules/a11y.mjs", "../../../node_modules/swiper/modules/history.mjs", "../../../node_modules/swiper/modules/hash-navigation.mjs", "../../../node_modules/swiper/modules/autoplay.mjs", "../../../node_modules/swiper/modules/thumbs.mjs", "../../../node_modules/swiper/modules/free-mode.mjs", "../../../node_modules/swiper/modules/grid.mjs", "../../../node_modules/swiper/modules/manipulation.mjs", "../../../node_modules/swiper/shared/effect-init.mjs", "../../../node_modules/swiper/shared/effect-target.mjs", "../../../node_modules/swiper/shared/effect-virtual-transition-end.mjs", "../../../node_modules/swiper/modules/effect-fade.mjs", "../../../node_modules/swiper/modules/effect-cube.mjs", "../../../node_modules/swiper/shared/create-shadow.mjs", "../../../node_modules/swiper/modules/effect-flip.mjs", "../../../node_modules/swiper/modules/effect-coverflow.mjs", "../../../node_modules/swiper/modules/effect-creative.mjs", "../../../node_modules/swiper/modules/effect-cards.mjs", "../../../node_modules/swiper/swiper-bundle.mjs", "../../components/cart_line_component/cart_line_component.js", "../../components/cart_lines_component/cart_lines_component.js", "../../components/chip_component/chip_component.js", "../../components/collapse_button_component/collapse_button_component.js", "../../components/comment_component/comment_component.js", "../../components/container_component/container_component.js", "../../components/customer_card_component/customer_card_component.js", "../../components/customer_cards_component/customer_cards_component.js", "../../components/drawer_component/drawer_component.js", "../../components/feature_table_component/feature_table_component.js", "../../components/footer_component/footer_component.js", "../../components/form/enum_radio_buttons_component/enum_radio_buttons_component.js", "../../components/form/export_component/export_component.js", "../../components/form/fieldset_component/fieldset_component.js", "../../components/form/footer_component/footer_component.js", "../../components/form/group_component/group_component.js", "../../components/form/password_field_component/password_field_component.js", "../../components/form/payment_setup_component/payment_setup_component.js", "../../components/form/uppy_component/uppy_component.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/Translator.js", "../../../node_modules/@uppy/core/lib/Uppy.js", "../../../node_modules/@uppy/core/node_modules/nanoid/non-secure/index.js", "../../../node_modules/@uppy/core/node_modules/@uppy/store-default/lib/index.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/getFileNameAndExtension.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/mimeTypes.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/getFileType.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/generateFileID.js", "../../../node_modules/@uppy/core/lib/supportsUploadProgress.js", "../../../node_modules/@uppy/core/lib/getFileName.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/getTimeStamp.js", "../../../node_modules/@uppy/core/lib/loggers.js", "../../../node_modules/@uppy/core/lib/Restricter.js", "../../../node_modules/@uppy/core/lib/locale.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/isDOMElement.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/findDOMElement.js", "../../../node_modules/@uppy/core/node_modules/@uppy/utils/lib/getTextDirection.js", "../../../node_modules/@uppy/core/lib/BasePlugin.js", "../../../node_modules/@uppy/core/lib/UIPlugin.js", "../../../node_modules/@uppy/locales/lib/fr_FR.js", "../../../node_modules/@uppy/drag-drop/node_modules/@uppy/utils/lib/toArray.js", "../../../node_modules/@uppy/drag-drop/node_modules/@uppy/utils/lib/isDragDropSupported.js", "../../../node_modules/@uppy/drag-drop/node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js", "../../../node_modules/@uppy/drag-drop/node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js", "../../../node_modules/@uppy/drag-drop/node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js", "../../../node_modules/@uppy/drag-drop/node_modules/@uppy/utils/lib/getDroppedFiles/index.js", "../../../node_modules/@uppy/drag-drop/lib/locale.js", "../../../node_modules/@uppy/drag-drop/lib/DragDrop.js", "../../../node_modules/@uppy/core/lib/EventManager.js", "../../../node_modules/@uppy/xhr-upload/node_modules/@uppy/utils/lib/RateLimitedQueue.js", "../../../node_modules/@uppy/xhr-upload/node_modules/@uppy/utils/lib/NetworkError.js", "../../../node_modules/@uppy/xhr-upload/node_modules/@uppy/utils/lib/isNetworkError.js", "../../../node_modules/@uppy/xhr-upload/node_modules/@uppy/utils/lib/ProgressTimeout.js", "../../../node_modules/@uppy/xhr-upload/node_modules/@uppy/utils/lib/fetcher.js", "../../../node_modules/@uppy/xhr-upload/node_modules/@uppy/utils/lib/fileFilters.js", "../../../node_modules/@uppy/xhr-upload/node_modules/@uppy/utils/lib/getAllowedMetaFields.js", "../../../node_modules/@uppy/xhr-upload/lib/locale.js", "../../../node_modules/@uppy/xhr-upload/lib/index.js", "../../components/form/vintage_year_selector_component/vintage_year_selector_component.js", "../../components/gate_component/gate_component.js", "../../components/graph_chart_component/graph_chart_component.js", "../../../node_modules/d3-array/src/ascending.js", "../../../node_modules/d3-array/src/descending.js", "../../../node_modules/d3-array/src/bisector.js", "../../../node_modules/d3-array/src/number.js", "../../../node_modules/d3-array/src/bisect.js", "../../../node_modules/d3-array/src/extent.js", "../../../node_modules/d3-array/src/ticks.js", "../../../node_modules/d3-array/src/max.js", "../../../node_modules/d3-array/src/min.js", "../../../node_modules/d3-axis/src/identity.js", "../../../node_modules/d3-axis/src/axis.js", "../../../node_modules/d3-dispatch/src/dispatch.js", "../../../node_modules/d3-selection/src/namespaces.js", "../../../node_modules/d3-selection/src/namespace.js", "../../../node_modules/d3-selection/src/creator.js", "../../../node_modules/d3-selection/src/selector.js", "../../../node_modules/d3-selection/src/selection/select.js", "../../../node_modules/d3-selection/src/array.js", "../../../node_modules/d3-selection/src/selectorAll.js", "../../../node_modules/d3-selection/src/selection/selectAll.js", "../../../node_modules/d3-selection/src/matcher.js", "../../../node_modules/d3-selection/src/selection/selectChild.js", "../../../node_modules/d3-selection/src/selection/selectChildren.js", "../../../node_modules/d3-selection/src/selection/filter.js", "../../../node_modules/d3-selection/src/selection/sparse.js", "../../../node_modules/d3-selection/src/selection/enter.js", "../../../node_modules/d3-selection/src/constant.js", "../../../node_modules/d3-selection/src/selection/data.js", "../../../node_modules/d3-selection/src/selection/exit.js", "../../../node_modules/d3-selection/src/selection/join.js", "../../../node_modules/d3-selection/src/selection/merge.js", "../../../node_modules/d3-selection/src/selection/order.js", "../../../node_modules/d3-selection/src/selection/sort.js", "../../../node_modules/d3-selection/src/selection/call.js", "../../../node_modules/d3-selection/src/selection/nodes.js", "../../../node_modules/d3-selection/src/selection/node.js", "../../../node_modules/d3-selection/src/selection/size.js", "../../../node_modules/d3-selection/src/selection/empty.js", "../../../node_modules/d3-selection/src/selection/each.js", "../../../node_modules/d3-selection/src/selection/attr.js", "../../../node_modules/d3-selection/src/window.js", "../../../node_modules/d3-selection/src/selection/style.js", "../../../node_modules/d3-selection/src/selection/property.js", "../../../node_modules/d3-selection/src/selection/classed.js", "../../../node_modules/d3-selection/src/selection/text.js", "../../../node_modules/d3-selection/src/selection/html.js", "../../../node_modules/d3-selection/src/selection/raise.js", "../../../node_modules/d3-selection/src/selection/lower.js", "../../../node_modules/d3-selection/src/selection/append.js", "../../../node_modules/d3-selection/src/selection/insert.js", "../../../node_modules/d3-selection/src/selection/remove.js", "../../../node_modules/d3-selection/src/selection/clone.js", "../../../node_modules/d3-selection/src/selection/datum.js", "../../../node_modules/d3-selection/src/selection/on.js", "../../../node_modules/d3-selection/src/selection/dispatch.js", "../../../node_modules/d3-selection/src/selection/iterator.js", "../../../node_modules/d3-selection/src/selection/index.js", "../../../node_modules/d3-selection/src/select.js", "../../../node_modules/d3-color/src/define.js", "../../../node_modules/d3-color/src/color.js", "../../../node_modules/d3-interpolate/src/basis.js", "../../../node_modules/d3-interpolate/src/basisClosed.js", "../../../node_modules/d3-interpolate/src/constant.js", "../../../node_modules/d3-interpolate/src/color.js", "../../../node_modules/d3-interpolate/src/rgb.js", "../../../node_modules/d3-interpolate/src/numberArray.js", "../../../node_modules/d3-interpolate/src/array.js", "../../../node_modules/d3-interpolate/src/date.js", "../../../node_modules/d3-interpolate/src/number.js", "../../../node_modules/d3-interpolate/src/object.js", "../../../node_modules/d3-interpolate/src/string.js", "../../../node_modules/d3-interpolate/src/value.js", "../../../node_modules/d3-interpolate/src/round.js", "../../../node_modules/d3-interpolate/src/transform/decompose.js", "../../../node_modules/d3-interpolate/src/transform/parse.js", "../../../node_modules/d3-interpolate/src/transform/index.js", "../../../node_modules/d3-timer/src/timer.js", "../../../node_modules/d3-timer/src/timeout.js", "../../../node_modules/d3-transition/src/transition/schedule.js", "../../../node_modules/d3-transition/src/interrupt.js", "../../../node_modules/d3-transition/src/selection/interrupt.js", "../../../node_modules/d3-transition/src/transition/tween.js", "../../../node_modules/d3-transition/src/transition/interpolate.js", "../../../node_modules/d3-transition/src/transition/attr.js", "../../../node_modules/d3-transition/src/transition/attrTween.js", "../../../node_modules/d3-transition/src/transition/delay.js", "../../../node_modules/d3-transition/src/transition/duration.js", "../../../node_modules/d3-transition/src/transition/ease.js", "../../../node_modules/d3-transition/src/transition/easeVarying.js", "../../../node_modules/d3-transition/src/transition/filter.js", "../../../node_modules/d3-transition/src/transition/merge.js", "../../../node_modules/d3-transition/src/transition/on.js", "../../../node_modules/d3-transition/src/transition/remove.js", "../../../node_modules/d3-transition/src/transition/select.js", "../../../node_modules/d3-transition/src/transition/selectAll.js", "../../../node_modules/d3-transition/src/transition/selection.js", "../../../node_modules/d3-transition/src/transition/style.js", "../../../node_modules/d3-transition/src/transition/styleTween.js", "../../../node_modules/d3-transition/src/transition/text.js", "../../../node_modules/d3-transition/src/transition/textTween.js", "../../../node_modules/d3-transition/src/transition/transition.js", "../../../node_modules/d3-transition/src/transition/end.js", "../../../node_modules/d3-transition/src/transition/index.js", "../../../node_modules/d3-ease/src/cubic.js", "../../../node_modules/d3-transition/src/selection/transition.js", "../../../node_modules/d3-transition/src/selection/index.js", "../../../node_modules/d3-brush/src/brush.js", "../../../node_modules/d3-path/src/path.js", "../../../node_modules/d3-format/src/formatDecimal.js", "../../../node_modules/d3-format/src/exponent.js", "../../../node_modules/d3-format/src/formatGroup.js", "../../../node_modules/d3-format/src/formatNumerals.js", "../../../node_modules/d3-format/src/formatSpecifier.js", "../../../node_modules/d3-format/src/formatTrim.js", "../../../node_modules/d3-format/src/formatPrefixAuto.js", "../../../node_modules/d3-format/src/formatRounded.js", "../../../node_modules/d3-format/src/formatTypes.js", "../../../node_modules/d3-format/src/identity.js", "../../../node_modules/d3-format/src/locale.js", "../../../node_modules/d3-format/src/defaultLocale.js", "../../../node_modules/d3-format/src/precisionFixed.js", "../../../node_modules/d3-format/src/precisionPrefix.js", "../../../node_modules/d3-format/src/precisionRound.js", "../../../node_modules/d3-scale/src/init.js", "../../../node_modules/d3-scale/src/constant.js", "../../../node_modules/d3-scale/src/number.js", "../../../node_modules/d3-scale/src/continuous.js", "../../../node_modules/d3-scale/src/tickFormat.js", "../../../node_modules/d3-scale/src/linear.js", "../../../node_modules/d3-scale/src/nice.js", "../../../node_modules/d3-scale/src/log.js", "../../../node_modules/d3-time/src/interval.js", "../../../node_modules/d3-time/src/millisecond.js", "../../../node_modules/d3-time/src/second.js", "../../../node_modules/d3-time/src/minute.js", "../../../node_modules/d3-time/src/hour.js", "../../../node_modules/d3-time/src/day.js", "../../../node_modules/d3-time/src/week.js", "../../../node_modules/d3-time/src/month.js", "../../../node_modules/d3-time/src/year.js", "../../../node_modules/d3-time/src/ticks.js", "../../../node_modules/d3-time-format/src/locale.js", "../../../node_modules/d3-time-format/src/defaultLocale.js", "../../../node_modules/d3-scale/src/time.js", "../../../node_modules/d3-scale/src/utcTime.js", "../../../node_modules/d3-shape/src/constant.js", "../../../node_modules/d3-shape/src/path.js", "../../../node_modules/d3-shape/src/array.js", "../../../node_modules/d3-shape/src/curve/linear.js", "../../../node_modules/d3-shape/src/point.js", "../../../node_modules/d3-shape/src/line.js", "../../../node_modules/d3-shape/src/curve/monotone.js", "../../../node_modules/d3-zoom/src/transform.js", "../../components/graph_component/graph_component.js", "../../components/graph_line_component/graph_line_component.js", "../../components/header_component/header_component.js", "../../components/help_link_component/help_link_component.js", "../../components/icon_component/icon_component.js", "../../components/identity_page_component/identity_page_component.js", "../../components/interstitial_component/interstitial_component.js", "../../components/layout/stack_component/stack_component.js", "../../components/list/item_component/item_component.js", "../../components/list_cards_component/list_cards_component.js", "../../components/list_component/list_component.js", "../../components/logo_component/logo_component.js", "../../components/menu_component/menu_component.js", "../../components/nav_component/nav_component.js", "../../components/nav_item_component/nav_item_component.js", "../../components/pairings/card_component/card_component.js", "../../components/pairings_component/pairings_component.js", "../../components/pill_component/pill_component.js", "../../components/pricing_table_component/pricing_table_component.js", "../../components/progress_bar_component/progress_bar_component.js", "../../components/properties_component/properties_component.js", "../../components/search/algolia_component/algolia_component.js", "../../components/search/filters_component/config.js", "../../components/search/hits_component/config.js", "../../components/search/box_component/config.js", "../../components/search/refinements_component/config.js", "../../components/search/box_component/box_component.js", "../../components/search/filters_component/filters_component.js", "../../components/search/hits_component/hits_component.js", "../../components/search/refinements_component/refinements_component.js", "../../components/search_box_component/search_box_component.js", "../../components/section_component/section_component.js", "../../components/static_buttons_component/static_buttons_component.js", "../../components/stock_card_component/stock_card_component.js", "../../components/tasting_zone_component/tasting_zone_component.js", "../../components/tile_component/tile_component.js", "../../components/tiles_component/tiles_component.js", "../../components/timeline_component/timeline_component.js", "../../components/toast_component/toast_component.js", "../../components/trek/form/group_component/group_component.js", "../../components/trek/table_component/table_component.js", "rails:/home/lockwine/lockwine/app/components/**/*_component.js", "../../components/index.js"],
  "sourcesContent": ["export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "/*! algoliasearch-lite.umd.js | 4.24.0 | \u00A9 Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).algoliasearch=t()}(this,(function(){\"use strict\";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?t(Object(o),!0).forEach((function(t){e(r,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}))}return r}function n(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e)))return;var r=[],n=!0,o=!1,a=void 0;try{for(var u,i=e[Symbol.iterator]();!(n=(u=i.next()).done)&&(r.push(u.value),!t||r.length!==t);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(o)throw a}}return r}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function a(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}()}function u(e){var t,r=\"algoliasearch-client-js-\".concat(e.key),n=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},a=function(){return JSON.parse(n().getItem(r)||\"{}\")},u=function(e){n().setItem(r,JSON.stringify(e))},i=function(){var t=e.timeToLive?1e3*e.timeToLive:null,r=a(),n=Object.fromEntries(Object.entries(r).filter((function(e){return void 0!==o(e,2)[1].timestamp})));if(u(n),t){var i=Object.fromEntries(Object.entries(n).filter((function(e){var r=o(e,2)[1],n=(new Date).getTime();return!(r.timestamp+t<n)})));u(i)}};return{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){i();var t=JSON.stringify(e);return a()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=o(e,2),n=t[0],a=t[1];return Promise.all([n,a||r.miss(n)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var o=a();return o[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(o)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=a();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function i(e){var t=a(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},n=t();return n.then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return o(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,o).catch((function(){return i({caches:t}).get(e,n,o)}))},set:function(e,n){return r.set(e,n).catch((function(){return i({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return i({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return i({caches:t}).clear()}))}}}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},a=JSON.stringify(r);if(a in t)return Promise.resolve(e.serializable?JSON.parse(t[a]):t[a]);var u=n(),i=o&&o.miss||function(){return Promise.resolve()};return u.then((function(e){return i(e)})).then((function(){return u}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function c(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function l(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var o=0;return e.replace(/%s/g,(function(){return encodeURIComponent(r[o++])}))}var h={WithinQueryParameters:0,WithinHeaders:1};function m(e,t){var r=e||{},n=r.data||{};return Object.keys(r).forEach((function(e){-1===[\"timeout\",\"headers\",\"queryParameters\",\"data\",\"cacheable\"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function b(e){return\"string\"==typeof e?{protocol:\"https\",url:e,accept:d.Any}:{protocol:e.protocol||\"https\",url:e.url,accept:e.accept||d.Any}}var O=\"GET\",P=\"POST\";function q(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),o=[].concat(a(r),a(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:o.length>0?o.map((function(e){return b(e)})):t}}))}function j(e,t,n,o){var u=[],i=function(e,t){if(e.method===O||void 0===e.data&&void 0===t.data)return;var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}(n,o),s=function(e,t){var n=r(r({},e.headers),t.headers),o={};return Object.keys(n).forEach((function(e){var t=n[e];o[e.toLowerCase()]=t})),o}(e,o),c=n.method,l=n.method!==O?{}:r(r({},n.data),o.data),f=r(r(r({\"x-algolia-agent\":e.userAgent.value},e.queryParameters),l),o.queryParameters),h=0,m=function t(r,a){var l=r.pop();if(void 0===l)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support .\",transporterStackTrace:A(u)};var m={data:i,headers:s,method:c,url:S(l,n.path,f),connectTimeout:a(h,e.timeouts.connect),responseTimeout:a(h,o.timeout)},d=function(e){var t={request:m,response:e,host:l,triesLeft:r.length};return u.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:\"DeserializationError\",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var o=d(n);return n.isTimedOut&&h++,Promise.all([e.logger.info(\"Retryable failure\",x(o)),e.hostsCache.set(l,y(l,n.isTimedOut?g:v))]).then((function(){return t(r,a)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,o=r;try{o=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:\"ApiError\",message:e,status:t,transporterStackTrace:r}}(o,n,t)}(e,A(u))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return q(e.hostsCache,t).then((function(e){return m(a(e.statelessHosts).reverse(),e.getTimeout)}))}function w(e){var t={value:\"Algolia for JavaScript (\".concat(e,\")\"),add:function(e){var r=\"; \".concat(e.segment).concat(void 0!==e.version?\" (\".concat(e.version,\")\"):\"\");return-1===t.value.indexOf(r)&&(t.value=\"\".concat(t.value).concat(r)),t}};return t}function S(e,t,r){var n=T(r),o=\"\".concat(e.protocol,\"://\").concat(e.url,\"/\").concat(\"/\"===t.charAt(0)?t.substr(1):t);return n.length&&(o+=\"?\".concat(n)),o}function T(e){return Object.keys(e).map((function(t){return f(\"%s=%s\",t,(r=e[t],\"[object Object]\"===Object.prototype.toString.call(r)||\"[object Array]\"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join(\"&\")}function A(e){return e.map((function(e){return x(e)}))}function x(e){var t=e.request.headers[\"x-algolia-api-key\"]?{\"x-algolia-api-key\":\"*****\"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var N=function(e){var t=e.appId,n=function(e,t,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":t};return{headers:function(){return e===h.WithinHeaders?n:{}},queryParameters:function(){return e===h.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:h.WithinHeaders,t,e.apiKey),a=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,a=e.requestsCache,u=e.responsesCache,i=e.timeouts,s=e.userAgent,c=e.hosts,l=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:a,responsesCache:u,timeouts:i,userAgent:s,headers:e.headers,queryParameters:l,hosts:c.map((function(e){return b(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var a={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(a,(function(){return f.requestsCache.get(a,(function(){return f.requestsCache.set(a,n()).then((function(e){return Promise.all([f.requestsCache.delete(a),e])}),(function(e){return Promise.all([f.requestsCache.delete(a),Promise.reject(e)])})).then((function(e){var t=o(e,2);t[0];return t[1]}))}))}),{miss:function(e){return f.responsesCache.set(a,e)}})},write:function(e,t){return j(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:\"\".concat(t,\"-dsn.algolia.net\"),accept:d.Read},{url:\"\".concat(t,\".algolia.net\"),accept:d.Write}].concat(c([{url:\"\".concat(t,\"-1.algolianet.com\")},{url:\"\".concat(t,\"-2.algolianet.com\")},{url:\"\".concat(t,\"-3.algolianet.com\")}]))},e),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/x-www-form-urlencoded\"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return l({transporter:a,appId:t,addAlgoliaAgent:function(e,t){a.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([a.requestsCache.clear(),a.responsesCache.clear()]).then((function(){}))}},e.methods)},C=function(e){return function(t,r){return t.method===O?e.transporter.read(t,r):e.transporter.write(t,r)}},E=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={transporter:e.transporter,appId:e.appId,indexName:t};return l(n,r.methods)}},J=function(e){return function(t,n){var o=t.map((function(e){return r(r({},e),{},{params:T(e.params||{})})}));return e.transporter.read({method:P,path:\"1/indexes/*/queries\",data:{requests:o},cacheable:!0},n)}},k=function(e){return function(t,o){return Promise.all(t.map((function(t){var a=t.params,u=a.facetName,i=a.facetQuery,s=n(a,[\"facetName\",\"facetQuery\"]);return E(e)(t.indexName,{methods:{searchForFacetValues:F}}).searchForFacetValues(u,i,r(r({},o),s))})))}},I=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f(\"1/answers/%s/prediction\",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},R=function(e){return function(t,r){return e.transporter.read({method:P,path:f(\"1/indexes/%s/query\",e.indexName),data:{query:t},cacheable:!0},r)}},F=function(e){return function(t,r,n){return e.transporter.read({method:P,path:f(\"1/indexes/%s/facets/%s/query\",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,W=2,H=3;var Q=function(e){return function(t,n){var o=t.map((function(e){return r(r({},e),{},{threshold:e.threshold||0})}));return e.transporter.read({method:P,path:\"1/indexes/*/recommendations\",data:{requests:o},cacheable:!0},n)}};function L(e,t,n){var o,a={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,o=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},a=o(e.connectTimeout,\"Connection timeout\");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(a),n=o(e.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(a),clearTimeout(n),t({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(a),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(o=H,{debug:function(e,t){return D>=o&&console.debug(e,t),Promise.resolve()},info:function(e,t){return W>=o&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:s(),requestsCache:s({serializable:!1}),hostsCache:i({caches:[u({key:\"\".concat(\"4.24.0\",\"-\").concat(e)}),s()]}),userAgent:w(\"4.24.0\").add({segment:\"Browser\",version:\"lite\"}),authMode:h.WithinQueryParameters};return N(r(r(r({},a),n),{},{methods:{search:J,searchForFacetValues:k,multipleQueries:J,multipleSearchForFacetValues:k,customRequest:C,initIndex:function(e){return function(t){return E(e)(t,{methods:{search:R,searchForFacetValues:F,findAnswers:I}})}},getRecommendations:Q}}))}return L.version=\"4.24.0\",L}));\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\n// EventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      } else {\n        // At least give some kind of context to the user\n        var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n        err.context = er;\n        throw err;\n      }\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        args = Array.prototype.slice.call(arguments, 1);\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    args = Array.prototype.slice.call(arguments, 1);\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else if (listeners) {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n  if (this._events) {\n    var evlistener = this._events[type];\n\n    if (isFunction(evlistener))\n      return 1;\n    else if (evlistener)\n      return evlistener.length;\n  }\n  return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n", "'use strict';\n\nfunction inherits(ctor, superCtor) {\n  ctor.prototype = Object.create(superCtor.prototype, {\n    constructor: {\n      value: ctor,\n      enumerable: false,\n      writable: true,\n      configurable: true,\n    },\n  });\n}\n\nmodule.exports = inherits;\n", "'use strict';\n\nvar EventEmitter = require('@algolia/events');\n\nvar inherits = require('../functions/inherits');\n\n/**\n * A DerivedHelper is a way to create sub requests to\n * Algolia from a main helper.\n * @class\n * @classdesc The DerivedHelper provides an event based interface for search callbacks:\n *  - search: when a search is triggered using the `search()` method.\n *  - result: when the response is retrieved from Algolia and is processed.\n *    This event contains a {@link SearchResults} object and the\n *    {@link SearchParameters} corresponding to this answer.\n * @param {AlgoliaSearchHelper} mainHelper the main helper\n * @param {function} fn the function to create the derived state for search\n * @param {function} recommendFn the function to create the derived state for recommendations\n */\nfunction DerivedHelper(mainHelper, fn, recommendFn) {\n  this.main = mainHelper;\n  this.fn = fn;\n  this.recommendFn = recommendFn;\n  this.lastResults = null;\n  this.lastRecommendResults = null;\n}\n\ninherits(DerivedHelper, EventEmitter);\n\n/**\n * Detach this helper from the main helper\n * @return {undefined}\n * @throws Error if the derived helper is already detached\n */\nDerivedHelper.prototype.detach = function () {\n  this.removeAllListeners();\n  this.main.detachDerivedHelper(this);\n};\n\nDerivedHelper.prototype.getModifiedState = function (parameters) {\n  return this.fn(parameters);\n};\n\nDerivedHelper.prototype.getModifiedRecommendState = function (parameters) {\n  return this.recommendFn(parameters);\n};\n\nmodule.exports = DerivedHelper;\n", "'use strict';\n\n/**\n * Replaces a leading - with \\-\n * @private\n * @param {any} value the facet value to replace\n * @returns {any} the escaped facet value or the value if it was not a string\n */\nfunction escapeFacetValue(value) {\n  if (typeof value !== 'string') return value;\n\n  return String(value).replace(/^-/, '\\\\-');\n}\n\n/**\n * Replaces a leading \\- with -\n * @private\n * @param {any} value the escaped facet value\n * @returns {any} the unescaped facet value or the value if it was not a string\n */\nfunction unescapeFacetValue(value) {\n  if (typeof value !== 'string') return value;\n\n  return value.replace(/^\\\\-/, '-');\n}\n\nmodule.exports = {\n  escapeFacetValue: escapeFacetValue,\n  unescapeFacetValue: unescapeFacetValue,\n};\n", "'use strict';\n\nfunction clone(value) {\n  if (typeof value === 'object' && value !== null) {\n    return _merge(Array.isArray(value) ? [] : {}, value);\n  }\n  return value;\n}\n\nfunction isObjectOrArrayOrFunction(value) {\n  return (\n    typeof value === 'function' ||\n    Array.isArray(value) ||\n    Object.prototype.toString.call(value) === '[object Object]'\n  );\n}\n\nfunction _merge(target, source) {\n  if (target === source) {\n    return target;\n  }\n\n  // eslint-disable-next-line no-restricted-syntax\n  for (var key in source) {\n    if (\n      !Object.prototype.hasOwnProperty.call(source, key) ||\n      key === '__proto__' ||\n      key === 'constructor'\n    ) {\n      // eslint-disable-next-line no-continue\n      continue;\n    }\n\n    var sourceVal = source[key];\n    var targetVal = target[key];\n\n    if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n      // eslint-disable-next-line no-continue\n      continue;\n    }\n\n    if (\n      isObjectOrArrayOrFunction(targetVal) &&\n      isObjectOrArrayOrFunction(sourceVal)\n    ) {\n      target[key] = _merge(targetVal, sourceVal);\n    } else {\n      target[key] = clone(sourceVal);\n    }\n  }\n  return target;\n}\n\n/**\n * This method is like Object.assign, but recursively merges own and inherited\n * enumerable keyed properties of source objects into the destination object.\n *\n * NOTE: this behaves like lodash/merge, but:\n * - does mutate functions if they are a source\n * - treats non-plain objects as plain\n * - does not work for circular objects\n * - treats sparse arrays as sparse\n * - does not convert Array-like objects (Arguments, NodeLists, etc.) to arrays\n *\n * @param {Object} target The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n */\nfunction merge(target) {\n  if (!isObjectOrArrayOrFunction(target)) {\n    target = {};\n  }\n\n  for (var i = 1, l = arguments.length; i < l; i++) {\n    var source = arguments[i];\n\n    if (isObjectOrArrayOrFunction(source)) {\n      _merge(target, source);\n    }\n  }\n  return target;\n}\n\nmodule.exports = merge;\n", "'use strict';\n\nfunction objectHasKeys(obj) {\n  return obj && Object.keys(obj).length > 0;\n}\n\nmodule.exports = objectHasKeys;\n", "'use strict';\n\n// https://github.com/babel/babel/blob/3aaafae053fa75febb3aa45d45b6f00646e30ba4/packages/babel-helpers/src/helpers.js#L604-L620\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source === null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key;\n  var i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    // eslint-disable-next-line no-continue\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\n", "'use strict';\n\n/**\n * RecommendParameters is the data structure that contains all the information\n * usable for getting recommendations from the Algolia API. It doesn't do the\n * search itself, nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It\n * will be provided when needed.\n * @constructor\n * @classdesc contains all the parameters for recommendations\n * @param {RecommendParametersOptions} opts the options to create the object\n */\nfunction RecommendParameters(opts) {\n  opts = opts || {};\n  this.params = opts.params || [];\n}\n\nRecommendParameters.prototype = {\n  constructor: RecommendParameters,\n\n  addParams: function (params) {\n    var newParams = this.params.slice();\n\n    newParams.push(params);\n\n    return new RecommendParameters({ params: newParams });\n  },\n\n  removeParams: function (id) {\n    return new RecommendParameters({\n      params: this.params.filter(function (param) {\n        return param.$$id !== id;\n      }),\n    });\n  },\n\n  addFrequentlyBoughtTogether: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'bought-together' })\n    );\n  },\n\n  addRelatedProducts: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'related-products' })\n    );\n  },\n\n  addTrendingItems: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'trending-items' })\n    );\n  },\n\n  addTrendingFacets: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'trending-facets' })\n    );\n  },\n\n  addLookingSimilar: function (params) {\n    return this.addParams(\n      Object.assign({}, params, { model: 'looking-similar' })\n    );\n  },\n\n  _buildQueries: function (indexName, cache) {\n    return this.params\n      .filter(function (params) {\n        return cache[params.$$id] === undefined;\n      })\n      .map(function (params) {\n        var query = Object.assign({}, params, { indexName: indexName });\n        delete query.$$id;\n\n        return query;\n      });\n  },\n};\n\nmodule.exports = RecommendParameters;\n", "'use strict';\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {RecommendParameters} state state that led to the response\n * @param {Record<string,RecommendResultItem>} results the results from algolia client\n **/\nfunction RecommendResults(state, results) {\n  this._state = state;\n  this._rawResults = results;\n\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  state.params.forEach(function (param) {\n    var id = param.$$id;\n    self[id] = results[id];\n  });\n}\n\nRecommendResults.prototype = {\n  constructor: RecommendResults,\n};\n\nmodule.exports = RecommendResults;\n", "'use strict';\n\nvar merge = require('./functions/merge');\n\nfunction sortObject(obj) {\n  return Object.keys(obj)\n    .sort()\n    .reduce(function (acc, curr) {\n      acc[curr] = obj[curr];\n      return acc;\n    }, {});\n}\n\nvar requestBuilder = {\n  /**\n   * Get all the queries to send to the client, those queries can used directly\n   * with the Algolia client.\n   * @private\n   * @param  {string} index The name of the index\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @return {object[]} The queries\n   */\n  _getQueries: function getQueries(index, state) {\n    var queries = [];\n\n    // One query for the hits\n    queries.push({\n      indexName: index,\n      params: requestBuilder._getHitsSearchParams(state),\n    });\n\n    // One for each disjunctive facets\n    state.getRefinedDisjunctiveFacets().forEach(function (refinedFacet) {\n      queries.push({\n        indexName: index,\n        params: requestBuilder._getDisjunctiveFacetSearchParams(\n          state,\n          refinedFacet\n        ),\n      });\n    });\n\n    // More to get the parent levels of the hierarchical facets when refined\n    state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n      var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n      var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n      var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n      // If we are deeper than level 0 (starting from `beer > IPA`)\n      // we want to get all parent values\n      if (\n        currentRefinement.length > 0 &&\n        currentRefinement[0].split(separator).length > 1\n      ) {\n        // We generate a map of the filters we will use for our facet values queries\n        var filtersMap = currentRefinement[0]\n          .split(separator)\n          .slice(0, -1)\n          .reduce(function createFiltersMap(map, segment, level) {\n            return map.concat({\n              attribute: hierarchicalFacet.attributes[level],\n              value:\n                level === 0\n                  ? segment\n                  : [map[map.length - 1].value, segment].join(separator),\n            });\n          }, []);\n\n        filtersMap.forEach(function (filter, level) {\n          var params = requestBuilder._getDisjunctiveFacetSearchParams(\n            state,\n            filter.attribute,\n            level === 0\n          );\n\n          // Keep facet filters unrelated to current hierarchical attributes\n          function hasHierarchicalFacetFilter(value) {\n            return hierarchicalFacet.attributes.some(function (attribute) {\n              return attribute === value.split(':')[0];\n            });\n          }\n\n          var filteredFacetFilters = (params.facetFilters || []).reduce(\n            function (acc, facetFilter) {\n              if (Array.isArray(facetFilter)) {\n                var filtered = facetFilter.filter(function (filterValue) {\n                  return !hasHierarchicalFacetFilter(filterValue);\n                });\n\n                if (filtered.length > 0) {\n                  acc.push(filtered);\n                }\n              }\n\n              if (\n                typeof facetFilter === 'string' &&\n                !hasHierarchicalFacetFilter(facetFilter)\n              ) {\n                acc.push(facetFilter);\n              }\n\n              return acc;\n            },\n            []\n          );\n\n          var parent = filtersMap[level - 1];\n          if (level > 0) {\n            params.facetFilters = filteredFacetFilters.concat(\n              parent.attribute + ':' + parent.value\n            );\n          } else {\n            params.facetFilters =\n              filteredFacetFilters.length > 0\n                ? filteredFacetFilters\n                : undefined;\n          }\n\n          queries.push({ indexName: index, params: params });\n        });\n      }\n    });\n\n    return queries;\n  },\n\n  /**\n   * Build search parameters used to fetch hits\n   * @private\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @return {object.<string, any>} The search parameters for hits\n   */\n  _getHitsSearchParams: function (state) {\n    var facets = state.facets\n      .concat(state.disjunctiveFacets)\n      .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state))\n      .sort();\n\n    var facetFilters = requestBuilder._getFacetFilters(state);\n    var numericFilters = requestBuilder._getNumericFilters(state);\n    var tagFilters = requestBuilder._getTagFilters(state);\n    var additionalParams = {\n      facets: facets.indexOf('*') > -1 ? ['*'] : facets,\n      tagFilters: tagFilters,\n    };\n\n    if (facetFilters.length > 0) {\n      additionalParams.facetFilters = facetFilters;\n    }\n\n    if (numericFilters.length > 0) {\n      additionalParams.numericFilters = numericFilters;\n    }\n\n    return sortObject(merge({}, state.getQueryParams(), additionalParams));\n  },\n\n  /**\n   * Build search parameters used to fetch a disjunctive facet\n   * @private\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @param  {string} facet the associated facet name\n   * @param  {boolean} hierarchicalRootLevel ?? FIXME\n   * @return {object} The search parameters for a disjunctive facet\n   */\n  _getDisjunctiveFacetSearchParams: function (\n    state,\n    facet,\n    hierarchicalRootLevel\n  ) {\n    var facetFilters = requestBuilder._getFacetFilters(\n      state,\n      facet,\n      hierarchicalRootLevel\n    );\n    var numericFilters = requestBuilder._getNumericFilters(state, facet);\n    var tagFilters = requestBuilder._getTagFilters(state);\n    var additionalParams = {\n      hitsPerPage: 0,\n      page: 0,\n      analytics: false,\n      clickAnalytics: false,\n    };\n\n    if (tagFilters.length > 0) {\n      additionalParams.tagFilters = tagFilters;\n    }\n\n    var hierarchicalFacet = state.getHierarchicalFacetByName(facet);\n\n    if (hierarchicalFacet) {\n      additionalParams.facets =\n        requestBuilder._getDisjunctiveHierarchicalFacetAttribute(\n          state,\n          hierarchicalFacet,\n          hierarchicalRootLevel\n        );\n    } else {\n      additionalParams.facets = facet;\n    }\n\n    if (numericFilters.length > 0) {\n      additionalParams.numericFilters = numericFilters;\n    }\n\n    if (facetFilters.length > 0) {\n      additionalParams.facetFilters = facetFilters;\n    }\n\n    return sortObject(merge({}, state.getQueryParams(), additionalParams));\n  },\n\n  /**\n   * Return the numeric filters in an algolia request fashion\n   * @private\n   * @param {SearchParameters} state the state from which to get the filters\n   * @param {string} [facetName] the name of the attribute for which the filters should be excluded\n   * @return {string[]} the numeric filters in the algolia format\n   */\n  _getNumericFilters: function (state, facetName) {\n    if (state.numericFilters) {\n      return state.numericFilters;\n    }\n\n    var numericFilters = [];\n\n    Object.keys(state.numericRefinements).forEach(function (attribute) {\n      var operators = state.numericRefinements[attribute] || {};\n      Object.keys(operators).forEach(function (operator) {\n        var values = operators[operator] || [];\n        if (facetName !== attribute) {\n          values.forEach(function (value) {\n            if (Array.isArray(value)) {\n              var vs = value.map(function (v) {\n                return attribute + operator + v;\n              });\n              numericFilters.push(vs);\n            } else {\n              numericFilters.push(attribute + operator + value);\n            }\n          });\n        }\n      });\n    });\n\n    return numericFilters;\n  },\n\n  /**\n   * Return the tags filters depending on which format is used, either tagFilters or tagRefinements\n   * @private\n   * @param {SearchParameters} state the state from which to get the filters\n   * @return {string} Tag filters in a single string\n   */\n  _getTagFilters: function (state) {\n    if (state.tagFilters) {\n      return state.tagFilters;\n    }\n\n    return state.tagRefinements.join(',');\n  },\n\n  /**\n   * Build facetFilters parameter based on current refinements. The array returned\n   * contains strings representing the facet filters in the algolia format.\n   * @private\n   * @param  {SearchParameters} state The state from which to get the queries\n   * @param  {string} [facet] if set, the current disjunctive facet\n   * @param  {boolean} [hierarchicalRootLevel] ?? FIXME\n   * @return {array.<string>} The facet filters in the algolia format\n   */\n  _getFacetFilters: function (state, facet, hierarchicalRootLevel) {\n    var facetFilters = [];\n\n    var facetsRefinements = state.facetsRefinements || {};\n    Object.keys(facetsRefinements)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = facetsRefinements[facetName] || [];\n        facetValues\n          .slice()\n          .sort()\n          .forEach(function (facetValue) {\n            facetFilters.push(facetName + ':' + facetValue);\n          });\n      });\n\n    var facetsExcludes = state.facetsExcludes || {};\n    Object.keys(facetsExcludes)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = facetsExcludes[facetName] || [];\n        facetValues.sort().forEach(function (facetValue) {\n          facetFilters.push(facetName + ':-' + facetValue);\n        });\n      });\n\n    var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n    Object.keys(disjunctiveFacetsRefinements)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = disjunctiveFacetsRefinements[facetName] || [];\n        if (facetName === facet || !facetValues || facetValues.length === 0) {\n          return;\n        }\n        var orFilters = [];\n\n        facetValues\n          .slice()\n          .sort()\n          .forEach(function (facetValue) {\n            orFilters.push(facetName + ':' + facetValue);\n          });\n\n        facetFilters.push(orFilters);\n      });\n\n    var hierarchicalFacetsRefinements =\n      state.hierarchicalFacetsRefinements || {};\n    Object.keys(hierarchicalFacetsRefinements)\n      .sort()\n      .forEach(function (facetName) {\n        var facetValues = hierarchicalFacetsRefinements[facetName] || [];\n        var facetValue = facetValues[0];\n\n        if (facetValue === undefined) {\n          return;\n        }\n\n        var hierarchicalFacet = state.getHierarchicalFacetByName(facetName);\n        var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n        var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n        var attributeToRefine;\n        var attributesIndex;\n\n        // we ask for parent facet values only when the `facet` is the current hierarchical facet\n        if (facet === facetName) {\n          // if we are at the root level already, no need to ask for facet values, we get them from\n          // the hits query\n          if (\n            facetValue.indexOf(separator) === -1 ||\n            (!rootPath && hierarchicalRootLevel === true) ||\n            (rootPath &&\n              rootPath.split(separator).length ===\n                facetValue.split(separator).length)\n          ) {\n            return;\n          }\n\n          if (!rootPath) {\n            attributesIndex = facetValue.split(separator).length - 2;\n            facetValue = facetValue.slice(0, facetValue.lastIndexOf(separator));\n          } else {\n            attributesIndex = rootPath.split(separator).length - 1;\n            facetValue = rootPath;\n          }\n\n          attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n        } else {\n          attributesIndex = facetValue.split(separator).length - 1;\n\n          attributeToRefine = hierarchicalFacet.attributes[attributesIndex];\n        }\n\n        if (attributeToRefine) {\n          facetFilters.push([attributeToRefine + ':' + facetValue]);\n        }\n      });\n\n    return facetFilters;\n  },\n\n  _getHitsHierarchicalFacetsAttributes: function (state) {\n    var out = [];\n\n    return state.hierarchicalFacets.reduce(\n      // ask for as much levels as there's hierarchical refinements\n      function getHitsAttributesForHierarchicalFacet(\n        allAttributes,\n        hierarchicalFacet\n      ) {\n        var hierarchicalRefinement = state.getHierarchicalRefinement(\n          hierarchicalFacet.name\n        )[0];\n\n        // if no refinement, ask for root level\n        if (!hierarchicalRefinement) {\n          allAttributes.push(hierarchicalFacet.attributes[0]);\n          return allAttributes;\n        }\n\n        var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n        var level = hierarchicalRefinement.split(separator).length;\n        var newAttributes = hierarchicalFacet.attributes.slice(0, level + 1);\n\n        return allAttributes.concat(newAttributes);\n      },\n      out\n    );\n  },\n\n  _getDisjunctiveHierarchicalFacetAttribute: function (\n    state,\n    hierarchicalFacet,\n    rootLevel\n  ) {\n    var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n    if (rootLevel === true) {\n      var rootPath = state._getHierarchicalRootPath(hierarchicalFacet);\n      var attributeIndex = 0;\n\n      if (rootPath) {\n        attributeIndex = rootPath.split(separator).length;\n      }\n      return [hierarchicalFacet.attributes[attributeIndex]];\n    }\n\n    var hierarchicalRefinement =\n      state.getHierarchicalRefinement(hierarchicalFacet.name)[0] || '';\n    // if refinement is 'beers > IPA > Flying dog',\n    // then we want `facets: ['beers > IPA']` as disjunctive facet (parent level values)\n\n    var parentLevel = hierarchicalRefinement.split(separator).length - 1;\n    return hierarchicalFacet.attributes.slice(0, parentLevel + 1);\n  },\n\n  getSearchForFacetQuery: function (facetName, query, maxFacetHits, state) {\n    var stateForSearchForFacetValues = state.isDisjunctiveFacet(facetName)\n      ? state.clearRefinements(facetName)\n      : state;\n    var searchForFacetSearchParameters = {\n      facetQuery: query,\n      facetName: facetName,\n    };\n    if (typeof maxFacetHits === 'number') {\n      searchForFacetSearchParameters.maxFacetHits = maxFacetHits;\n    }\n    return sortObject(\n      merge(\n        {},\n        requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n        searchForFacetSearchParameters\n      )\n    );\n  },\n};\n\nmodule.exports = requestBuilder;\n", "'use strict';\n\n// NOTE: this behaves like lodash/defaults, but doesn't mutate the target\n// it also preserve keys order\nmodule.exports = function defaultsPure() {\n  var sources = Array.prototype.slice.call(arguments);\n\n  return sources.reduceRight(function (acc, source) {\n    Object.keys(Object(source)).forEach(function (key) {\n      if (source[key] === undefined) {\n        return;\n      }\n      if (acc[key] !== undefined) {\n        // remove if already added, so that we can add it in correct order\n        delete acc[key];\n      }\n      acc[key] = source[key];\n    });\n    return acc;\n  }, {});\n};\n", "'use strict';\n\n// @MAJOR can be replaced by native Array#find when we change support\nmodule.exports = function find(array, comparator) {\n  if (!Array.isArray(array)) {\n    return undefined;\n  }\n\n  for (var i = 0; i < array.length; i++) {\n    if (comparator(array[i])) {\n      return array[i];\n    }\n  }\n\n  return undefined;\n};\n", "'use strict';\n\nfunction intersection(arr1, arr2) {\n  return arr1.filter(function (value, index) {\n    return (\n      arr2.indexOf(value) > -1 &&\n      arr1.indexOf(value) === index /* skips duplicates */\n    );\n  });\n}\n\nmodule.exports = intersection;\n", "'use strict';\n\nfunction valToNumber(v) {\n  if (typeof v === 'number') {\n    return v;\n  } else if (typeof v === 'string') {\n    return parseFloat(v);\n  } else if (Array.isArray(v)) {\n    return v.map(valToNumber);\n  }\n\n  throw new Error(\n    'The value should be a number, a parsable string or an array of those.'\n  );\n}\n\nmodule.exports = valToNumber;\n", "'use strict';\n\nmodule.exports = function isValidUserToken(userToken) {\n  if (userToken === null) {\n    return false;\n  }\n  return /^[a-zA-Z0-9_-]{1,64}$/.test(userToken);\n};\n", "'use strict';\n\n/**\n * Functions to manipulate refinement lists\n *\n * The RefinementList is not formally defined through a prototype but is based\n * on a specific structure.\n *\n * @module SearchParameters.refinementList\n *\n * @typedef {string[]} SearchParameters.refinementList.Refinements\n * @typedef {Object.<string, SearchParameters.refinementList.Refinements>} SearchParameters.refinementList.RefinementList\n */\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\n\nvar lib = {\n  /**\n   * Adds a refinement to a RefinementList\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} attribute the attribute to refine\n   * @param {string} value the value of the refinement, if the value is not a string it will be converted\n   * @return {RefinementList} a new and updated refinement list\n   */\n  addRefinement: function addRefinement(refinementList, attribute, value) {\n    if (lib.isRefined(refinementList, attribute, value)) {\n      return refinementList;\n    }\n\n    var valueAsString = '' + value;\n\n    var facetRefinement = !refinementList[attribute]\n      ? [valueAsString]\n      : refinementList[attribute].concat(valueAsString);\n\n    var mod = {};\n\n    mod[attribute] = facetRefinement;\n\n    return defaultsPure({}, mod, refinementList);\n  },\n  /**\n   * Removes refinement(s) for an attribute:\n   *  - if the value is specified removes the refinement for the value on the attribute\n   *  - if no value is specified removes all the refinements for this attribute\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} attribute the attribute to refine\n   * @param {string} [value] the value of the refinement\n   * @return {RefinementList} a new and updated refinement lst\n   */\n  removeRefinement: function removeRefinement(\n    refinementList,\n    attribute,\n    value\n  ) {\n    if (value === undefined) {\n      // we use the \"filter\" form of clearRefinement, since it leaves empty values as-is\n      // the form with a string will remove the attribute completely\n      return lib.clearRefinement(refinementList, function (v, f) {\n        return attribute === f;\n      });\n    }\n\n    var valueAsString = '' + value;\n\n    return lib.clearRefinement(refinementList, function (v, f) {\n      return attribute === f && valueAsString === v;\n    });\n  },\n  /**\n   * Toggles the refinement value for an attribute.\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} attribute the attribute to refine\n   * @param {string} value the value of the refinement\n   * @return {RefinementList} a new and updated list\n   */\n  toggleRefinement: function toggleRefinement(\n    refinementList,\n    attribute,\n    value\n  ) {\n    if (value === undefined)\n      throw new Error('toggleRefinement should be used with a value');\n\n    if (lib.isRefined(refinementList, attribute, value)) {\n      return lib.removeRefinement(refinementList, attribute, value);\n    }\n\n    return lib.addRefinement(refinementList, attribute, value);\n  },\n  /**\n   * Clear all or parts of a RefinementList. Depending on the arguments, three\n   * kinds of behavior can happen:\n   *  - if no attribute is provided: clears the whole list\n   *  - if an attribute is provided as a string: clears the list for the specific attribute\n   *  - if an attribute is provided as a function: discards the elements for which the function returns true\n   * @param {RefinementList} refinementList the initial list\n   * @param {string} [attribute] the attribute or function to discard\n   * @param {string} [refinementType] optional parameter to give more context to the attribute function\n   * @return {RefinementList} a new and updated refinement list\n   */\n  clearRefinement: function clearRefinement(\n    refinementList,\n    attribute,\n    refinementType\n  ) {\n    if (attribute === undefined) {\n      // return the same object if the list is already empty\n      // this is mainly for tests, as it doesn't have much impact on performance\n      if (!objectHasKeys(refinementList)) {\n        return refinementList;\n      }\n      return {};\n    } else if (typeof attribute === 'string') {\n      return omit(refinementList, [attribute]);\n    } else if (typeof attribute === 'function') {\n      var hasChanged = false;\n\n      var newRefinementList = Object.keys(refinementList).reduce(function (\n        memo,\n        key\n      ) {\n        var values = refinementList[key] || [];\n        var facetList = values.filter(function (value) {\n          return !attribute(value, key, refinementType);\n        });\n\n        if (facetList.length !== values.length) {\n          hasChanged = true;\n        }\n\n        memo[key] = facetList;\n\n        return memo;\n      },\n      {});\n\n      if (hasChanged) return newRefinementList;\n      return refinementList;\n    }\n\n    // We return nothing if the attribute is not undefined, a string or a function,\n    // as it is not a valid value for a refinement\n    return undefined;\n  },\n  /**\n   * Test if the refinement value is used for the attribute. If no refinement value\n   * is provided, test if the refinementList contains any refinement for the\n   * given attribute.\n   * @param {RefinementList} refinementList the list of refinement\n   * @param {string} attribute name of the attribute\n   * @param {string} [refinementValue] value of the filter/refinement\n   * @return {boolean} true if the attribute is refined, false otherwise\n   */\n  isRefined: function isRefined(refinementList, attribute, refinementValue) {\n    var containsRefinements =\n      Boolean(refinementList[attribute]) &&\n      refinementList[attribute].length > 0;\n\n    if (refinementValue === undefined || !containsRefinements) {\n      return containsRefinements;\n    }\n\n    var refinementValueAsString = '' + refinementValue;\n\n    return refinementList[attribute].indexOf(refinementValueAsString) !== -1;\n  },\n};\n\nmodule.exports = lib;\n", "'use strict';\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar find = require('../functions/find');\nvar intersection = require('../functions/intersection');\nvar merge = require('../functions/merge');\nvar objectHasKeys = require('../functions/objectHasKeys');\nvar omit = require('../functions/omit');\nvar valToNumber = require('../functions/valToNumber');\nvar isValidUserToken = require('../utils/isValidUserToken');\n\nvar RefinementList = require('./RefinementList');\n\n/**\n * isEqual, but only for numeric refinement values, possible values:\n * - 5\n * - [5]\n * - [[5]]\n * - [[5,5],[4]]\n * @param {any} a numeric refinement value\n * @param {any} b numeric refinement value\n * @return {boolean} true if the values are equal\n */\nfunction isEqualNumericRefinement(a, b) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    return (\n      a.length === b.length &&\n      a.every(function (el, i) {\n        return isEqualNumericRefinement(b[i], el);\n      })\n    );\n  }\n  return a === b;\n}\n\n/**\n * like _.find but using deep equality to be able to use it\n * to find arrays.\n * @private\n * @param {any[]} array array to search into (elements are base or array of base)\n * @param {any} searchedValue the value we're looking for (base or array of base)\n * @return {any} the searched value or undefined\n */\nfunction findArray(array, searchedValue) {\n  return find(array, function (currentValue) {\n    return isEqualNumericRefinement(currentValue, searchedValue);\n  });\n}\n\n/**\n * The facet list is the structure used to store the list of values used to\n * filter a single attribute.\n * @typedef {string[]} SearchParameters.FacetList\n */\n\n/**\n * Structure to store numeric filters with the operator as the key. The supported operators\n * are `=`, `>`, `<`, `>=`, `<=` and `!=`.\n * @typedef {Object.<string, Array.<number|number[]>>} SearchParameters.OperatorList\n */\n\n/**\n * SearchParameters is the data structure that contains all the information\n * usable for making a search to Algolia API. It doesn't do the search itself,\n * nor does it contains logic about the parameters.\n * It is an immutable object, therefore it has been created in a way that each\n * changes does not change the object itself but returns a copy with the\n * modification.\n * This object should probably not be instantiated outside of the helper. It will\n * be provided when needed. This object is documented for reference as you'll\n * get it from events generated by the {@link AlgoliaSearchHelper}.\n * If need be, instantiate the Helper from the factory function {@link SearchParameters.make}\n * @constructor\n * @classdesc contains all the parameters of a search\n * @param {object|SearchParameters} newParameters existing parameters or partial object\n * for the properties of a new SearchParameters\n * @see SearchParameters.make\n * @example <caption>SearchParameters of the first query in\n *   <a href=\"http://demos.algolia.com/instant-search-demo/\">the instant search demo</a></caption>\n{\n   \"query\": \"\",\n   \"disjunctiveFacets\": [\n      \"customerReviewCount\",\n      \"category\",\n      \"salePrice_range\",\n      \"manufacturer\"\n  ],\n   \"maxValuesPerFacet\": 30,\n   \"page\": 0,\n   \"hitsPerPage\": 10,\n   \"facets\": [\n      \"type\",\n      \"shipping\"\n  ]\n}\n */\nfunction SearchParameters(newParameters) {\n  var params = newParameters\n    ? SearchParameters._parseNumbers(newParameters)\n    : {};\n\n  if (params.userToken !== undefined && !isValidUserToken(params.userToken)) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      '[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\\n  - Format: [a-zA-Z0-9_-]{1,64}'\n    );\n  }\n  /**\n   * This attribute contains the list of all the conjunctive facets\n   * used. This list will be added to requested facets in the\n   * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n   * @member {string[]}\n   */\n  this.facets = params.facets || [];\n  /**\n   * This attribute contains the list of all the disjunctive facets\n   * used. This list will be added to requested facets in the\n   * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n   * @member {string[]}\n   */\n  this.disjunctiveFacets = params.disjunctiveFacets || [];\n  /**\n   * This attribute contains the list of all the hierarchical facets\n   * used. This list will be added to requested facets in the\n   * [facets attribute](https://www.algolia.com/doc/rest-api/search#param-facets) sent to algolia.\n   * Hierarchical facets are a sub type of disjunctive facets that\n   * let you filter faceted attributes hierarchically.\n   * @member {string[]|object[]}\n   */\n  this.hierarchicalFacets = params.hierarchicalFacets || [];\n\n  // Refinements\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the conjunctive facets. Each facet must be properly\n   * defined in the `facets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters selected for the associated facet name.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.facetsRefinements = params.facetsRefinements || {};\n  /**\n   * This attribute contains all the filters that need to be\n   * excluded from the conjunctive facets. Each facet must be properly\n   * defined in the `facets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters excluded for the associated facet name.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.facetsExcludes = params.facetsExcludes || {};\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the disjunctive facets. Each facet must be properly\n   * defined in the `disjunctiveFacets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters selected for the associated facet name.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.disjunctiveFacetsRefinements = params.disjunctiveFacetsRefinements || {};\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the numeric attributes.\n   *\n   * The key is the name of the attribute, and the value is the\n   * filters to apply to this attribute.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `numericFilters` attribute.\n   * @member {Object.<string, SearchParameters.OperatorList>}\n   */\n  this.numericRefinements = params.numericRefinements || {};\n  /**\n   * This attribute contains all the tags used to refine the query.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `tagFilters` attribute.\n   * @member {string[]}\n   */\n  this.tagRefinements = params.tagRefinements || [];\n  /**\n   * This attribute contains all the filters that need to be\n   * applied on the hierarchical facets. Each facet must be properly\n   * defined in the `hierarchicalFacets` attribute.\n   *\n   * The key is the name of the facet, and the `FacetList` contains all\n   * filters selected for the associated facet name. The FacetList values\n   * are structured as a string that contain the values for each level\n   * separated by the configured separator.\n   *\n   * When querying algolia, the values stored in this attribute will\n   * be translated into the `facetFilters` attribute.\n   * @member {Object.<string, SearchParameters.FacetList>}\n   */\n  this.hierarchicalFacetsRefinements =\n    params.hierarchicalFacetsRefinements || {};\n\n  // eslint-disable-next-line consistent-this\n  var self = this;\n  Object.keys(params).forEach(function (paramName) {\n    var isKeyKnown = SearchParameters.PARAMETERS.indexOf(paramName) !== -1;\n    var isValueDefined = params[paramName] !== undefined;\n\n    if (!isKeyKnown && isValueDefined) {\n      self[paramName] = params[paramName];\n    }\n  });\n}\n\n/**\n * List all the properties in SearchParameters and therefore all the known Algolia properties\n * This doesn't contain any beta/hidden features.\n * @private\n */\nSearchParameters.PARAMETERS = Object.keys(new SearchParameters());\n\n/**\n * @private\n * @param {object} partialState full or part of a state\n * @return {object} a new object with the number keys as number\n */\nSearchParameters._parseNumbers = function (partialState) {\n  // Do not parse numbers again in SearchParameters, they ought to be parsed already\n  if (partialState instanceof SearchParameters) return partialState;\n\n  var numbers = {};\n\n  var numberKeys = [\n    'aroundPrecision',\n    'aroundRadius',\n    'getRankingInfo',\n    'minWordSizefor2Typos',\n    'minWordSizefor1Typo',\n    'page',\n    'maxValuesPerFacet',\n    'distinct',\n    'minimumAroundRadius',\n    'hitsPerPage',\n    'minProximity',\n  ];\n\n  numberKeys.forEach(function (k) {\n    var value = partialState[k];\n    if (typeof value === 'string') {\n      var parsedValue = parseFloat(value);\n      // global isNaN is ok to use here, value is only number or NaN\n      numbers[k] = isNaN(parsedValue) ? value : parsedValue;\n    }\n  });\n\n  // there's two formats of insideBoundingBox, we need to parse\n  // the one which is an array of float geo rectangles\n  if (Array.isArray(partialState.insideBoundingBox)) {\n    numbers.insideBoundingBox = partialState.insideBoundingBox.map(function (\n      geoRect\n    ) {\n      if (Array.isArray(geoRect)) {\n        return geoRect.map(function (value) {\n          return parseFloat(value);\n        });\n      }\n      return geoRect;\n    });\n  }\n\n  if (partialState.numericRefinements) {\n    var numericRefinements = {};\n    Object.keys(partialState.numericRefinements).forEach(function (attribute) {\n      var operators = partialState.numericRefinements[attribute] || {};\n      numericRefinements[attribute] = {};\n      Object.keys(operators).forEach(function (operator) {\n        var values = operators[operator];\n        var parsedValues = values.map(function (v) {\n          if (Array.isArray(v)) {\n            return v.map(function (vPrime) {\n              if (typeof vPrime === 'string') {\n                return parseFloat(vPrime);\n              }\n              return vPrime;\n            });\n          } else if (typeof v === 'string') {\n            return parseFloat(v);\n          }\n          return v;\n        });\n        numericRefinements[attribute][operator] = parsedValues;\n      });\n    });\n    numbers.numericRefinements = numericRefinements;\n  }\n\n  return merge(partialState, numbers);\n};\n\n/**\n * Factory for SearchParameters\n * @param {object|SearchParameters} newParameters existing parameters or partial\n * object for the properties of a new SearchParameters\n * @return {SearchParameters} frozen instance of SearchParameters\n */\nSearchParameters.make = function makeSearchParameters(newParameters) {\n  var instance = new SearchParameters(newParameters);\n\n  var hierarchicalFacets = newParameters.hierarchicalFacets || [];\n  hierarchicalFacets.forEach(function (facet) {\n    if (facet.rootPath) {\n      var currentRefinement = instance.getHierarchicalRefinement(facet.name);\n\n      if (\n        currentRefinement.length > 0 &&\n        currentRefinement[0].indexOf(facet.rootPath) !== 0\n      ) {\n        instance = instance.clearRefinements(facet.name);\n      }\n\n      // get it again in case it has been cleared\n      currentRefinement = instance.getHierarchicalRefinement(facet.name);\n      if (currentRefinement.length === 0) {\n        instance = instance.toggleHierarchicalFacetRefinement(\n          facet.name,\n          facet.rootPath\n        );\n      }\n    }\n  });\n\n  return instance;\n};\n\n/**\n * Validates the new parameters based on the previous state\n * @param {SearchParameters} currentState the current state\n * @param {object|SearchParameters} parameters the new parameters to set\n * @return {Error|null} Error if the modification is invalid, null otherwise\n */\nSearchParameters.validate = function (currentState, parameters) {\n  var params = parameters || {};\n\n  if (\n    currentState.tagFilters &&\n    params.tagRefinements &&\n    params.tagRefinements.length > 0\n  ) {\n    return new Error(\n      '[Tags] Cannot switch from the managed tag API to the advanced API. It is probably ' +\n        'an error, if it is really what you want, you should first clear the tags with clearTags method.'\n    );\n  }\n\n  if (currentState.tagRefinements.length > 0 && params.tagFilters) {\n    return new Error(\n      '[Tags] Cannot switch from the advanced tag API to the managed API. It is probably ' +\n        'an error, if it is not, you should first clear the tags with clearTags method.'\n    );\n  }\n\n  if (\n    currentState.numericFilters &&\n    params.numericRefinements &&\n    objectHasKeys(params.numericRefinements)\n  ) {\n    return new Error(\n      \"[Numeric filters] Can't switch from the advanced to the managed API. It\" +\n        ' is probably an error, if this is really what you want, you have to first' +\n        ' clear the numeric filters.'\n    );\n  }\n\n  if (objectHasKeys(currentState.numericRefinements) && params.numericFilters) {\n    return new Error(\n      \"[Numeric filters] Can't switch from the managed API to the advanced. It\" +\n        ' is probably an error, if this is really what you want, you have to first' +\n        ' clear the numeric filters.'\n    );\n  }\n\n  return null;\n};\n\nSearchParameters.prototype = {\n  constructor: SearchParameters,\n\n  /**\n   * Remove all refinements (disjunctive + conjunctive + excludes + numeric filters)\n   * @method\n   * @param {undefined|string|SearchParameters.clearCallback} [attribute] optional string or function\n   * - If not given, means to clear all the filters.\n   * - If `string`, means to clear all refinements for the `attribute` named filter.\n   * - If `function`, means to clear all the refinements that return truthy values.\n   * @return {SearchParameters} new instance with filters cleared\n   */\n  clearRefinements: function clearRefinements(attribute) {\n    var patch = {\n      numericRefinements: this._clearNumericRefinements(attribute),\n      facetsRefinements: RefinementList.clearRefinement(\n        this.facetsRefinements,\n        attribute,\n        'conjunctiveFacet'\n      ),\n      facetsExcludes: RefinementList.clearRefinement(\n        this.facetsExcludes,\n        attribute,\n        'exclude'\n      ),\n      disjunctiveFacetsRefinements: RefinementList.clearRefinement(\n        this.disjunctiveFacetsRefinements,\n        attribute,\n        'disjunctiveFacet'\n      ),\n      hierarchicalFacetsRefinements: RefinementList.clearRefinement(\n        this.hierarchicalFacetsRefinements,\n        attribute,\n        'hierarchicalFacet'\n      ),\n    };\n    if (\n      patch.numericRefinements === this.numericRefinements &&\n      patch.facetsRefinements === this.facetsRefinements &&\n      patch.facetsExcludes === this.facetsExcludes &&\n      patch.disjunctiveFacetsRefinements ===\n        this.disjunctiveFacetsRefinements &&\n      patch.hierarchicalFacetsRefinements === this.hierarchicalFacetsRefinements\n    ) {\n      return this;\n    }\n    return this.setQueryParameters(patch);\n  },\n  /**\n   * Remove all the refined tags from the SearchParameters\n   * @method\n   * @return {SearchParameters} new instance with tags cleared\n   */\n  clearTags: function clearTags() {\n    if (this.tagFilters === undefined && this.tagRefinements.length === 0)\n      return this;\n\n    return this.setQueryParameters({\n      tagFilters: undefined,\n      tagRefinements: [],\n    });\n  },\n  /**\n   * Set the index.\n   * @method\n   * @param {string} index the index name\n   * @return {SearchParameters} new instance\n   */\n  setIndex: function setIndex(index) {\n    if (index === this.index) return this;\n\n    return this.setQueryParameters({\n      index: index,\n    });\n  },\n  /**\n   * Query setter\n   * @method\n   * @param {string} newQuery value for the new query\n   * @return {SearchParameters} new instance\n   */\n  setQuery: function setQuery(newQuery) {\n    if (newQuery === this.query) return this;\n\n    return this.setQueryParameters({\n      query: newQuery,\n    });\n  },\n  /**\n   * Page setter\n   * @method\n   * @param {number} newPage new page number\n   * @return {SearchParameters} new instance\n   */\n  setPage: function setPage(newPage) {\n    if (newPage === this.page) return this;\n\n    return this.setQueryParameters({\n      page: newPage,\n    });\n  },\n  /**\n   * Facets setter\n   * The facets are the simple facets, used for conjunctive (and) faceting.\n   * @method\n   * @param {string[]} facets all the attributes of the algolia records used for conjunctive faceting\n   * @return {SearchParameters} new instance\n   */\n  setFacets: function setFacets(facets) {\n    return this.setQueryParameters({\n      facets: facets,\n    });\n  },\n  /**\n   * Disjunctive facets setter\n   * Change the list of disjunctive (or) facets the helper chan handle.\n   * @method\n   * @param {string[]} facets all the attributes of the algolia records used for disjunctive faceting\n   * @return {SearchParameters} new instance\n   */\n  setDisjunctiveFacets: function setDisjunctiveFacets(facets) {\n    return this.setQueryParameters({\n      disjunctiveFacets: facets,\n    });\n  },\n  /**\n   * HitsPerPage setter\n   * Hits per page represents the number of hits retrieved for this query\n   * @method\n   * @param {number} n number of hits retrieved per page of results\n   * @return {SearchParameters} new instance\n   */\n  setHitsPerPage: function setHitsPerPage(n) {\n    if (this.hitsPerPage === n) return this;\n\n    return this.setQueryParameters({\n      hitsPerPage: n,\n    });\n  },\n  /**\n   * typoTolerance setter\n   * Set the value of typoTolerance\n   * @method\n   * @param {string} typoTolerance new value of typoTolerance (\"true\", \"false\", \"min\" or \"strict\")\n   * @return {SearchParameters} new instance\n   */\n  setTypoTolerance: function setTypoTolerance(typoTolerance) {\n    if (this.typoTolerance === typoTolerance) return this;\n\n    return this.setQueryParameters({\n      typoTolerance: typoTolerance,\n    });\n  },\n  /**\n   * Add a numeric filter for a given attribute\n   * When value is an array, they are combined with OR\n   * When value is a single value, it will combined with AND\n   * @method\n   * @param {string} attribute attribute to set the filter on\n   * @param {string} operator operator of the filter (possible values: =, >, >=, <, <=, !=)\n   * @param {number | number[]} value value of the filter\n   * @return {SearchParameters} new instance\n   * @example\n   * // for price = 50 or 40\n   * state.addNumericRefinement('price', '=', [50, 40]);\n   * @example\n   * // for size = 38 and 40\n   * state.addNumericRefinement('size', '=', 38);\n   * state.addNumericRefinement('size', '=', 40);\n   */\n  addNumericRefinement: function (attribute, operator, value) {\n    var val = valToNumber(value);\n\n    if (this.isNumericRefined(attribute, operator, val)) return this;\n\n    var mod = merge({}, this.numericRefinements);\n\n    mod[attribute] = merge({}, mod[attribute]);\n\n    if (mod[attribute][operator]) {\n      // Array copy\n      mod[attribute][operator] = mod[attribute][operator].slice();\n      // Add the element. Concat can't be used here because value can be an array.\n      mod[attribute][operator].push(val);\n    } else {\n      mod[attribute][operator] = [val];\n    }\n\n    return this.setQueryParameters({\n      numericRefinements: mod,\n    });\n  },\n  /**\n   * Get the list of conjunctive refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getConjunctiveRefinements: function (facetName) {\n    if (!this.isConjunctiveFacet(facetName)) {\n      return [];\n    }\n    return this.facetsRefinements[facetName] || [];\n  },\n  /**\n   * Get the list of disjunctive refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getDisjunctiveRefinements: function (facetName) {\n    if (!this.isDisjunctiveFacet(facetName)) {\n      return [];\n    }\n    return this.disjunctiveFacetsRefinements[facetName] || [];\n  },\n  /**\n   * Get the list of hierarchical refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getHierarchicalRefinement: function (facetName) {\n    // we send an array but we currently do not support multiple\n    // hierarchicalRefinements for a hierarchicalFacet\n    return this.hierarchicalFacetsRefinements[facetName] || [];\n  },\n  /**\n   * Get the list of exclude refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {string[]} list of refinements\n   */\n  getExcludeRefinements: function (facetName) {\n    if (!this.isConjunctiveFacet(facetName)) {\n      return [];\n    }\n    return this.facetsExcludes[facetName] || [];\n  },\n\n  /**\n   * Remove all the numeric filter for a given (attribute, operator)\n   * @method\n   * @param {string} attribute attribute to set the filter on\n   * @param {string} [operator] operator of the filter (possible values: =, >, >=, <, <=, !=)\n   * @param {number} [number] the value to be removed\n   * @return {SearchParameters} new instance\n   */\n  removeNumericRefinement: function (attribute, operator, number) {\n    var paramValue = number;\n    if (paramValue !== undefined) {\n      if (!this.isNumericRefined(attribute, operator, paramValue)) {\n        return this;\n      }\n      return this.setQueryParameters({\n        numericRefinements: this._clearNumericRefinements(function (\n          value,\n          key\n        ) {\n          return (\n            key === attribute &&\n            value.op === operator &&\n            isEqualNumericRefinement(value.val, valToNumber(paramValue))\n          );\n        }),\n      });\n    } else if (operator !== undefined) {\n      if (!this.isNumericRefined(attribute, operator)) return this;\n      return this.setQueryParameters({\n        numericRefinements: this._clearNumericRefinements(function (\n          value,\n          key\n        ) {\n          return key === attribute && value.op === operator;\n        }),\n      });\n    }\n\n    if (!this.isNumericRefined(attribute)) return this;\n    return this.setQueryParameters({\n      numericRefinements: this._clearNumericRefinements(function (value, key) {\n        return key === attribute;\n      }),\n    });\n  },\n  /**\n   * Get the list of numeric refinements for a single facet\n   * @param {string} facetName name of the attribute used for faceting\n   * @return {SearchParameters.OperatorList} list of refinements\n   */\n  getNumericRefinements: function (facetName) {\n    return this.numericRefinements[facetName] || {};\n  },\n  /**\n   * Return the current refinement for the (attribute, operator)\n   * @param {string} attribute attribute in the record\n   * @param {string} operator operator applied on the refined values\n   * @return {Array.<number|number[]>} refined values\n   */\n  getNumericRefinement: function (attribute, operator) {\n    return (\n      this.numericRefinements[attribute] &&\n      this.numericRefinements[attribute][operator]\n    );\n  },\n  /**\n   * Clear numeric filters.\n   * @method\n   * @private\n   * @param {string|SearchParameters.clearCallback} [attribute] optional string or function\n   * - If not given, means to clear all the filters.\n   * - If `string`, means to clear all refinements for the `attribute` named filter.\n   * - If `function`, means to clear all the refinements that return truthy values.\n   * @return {Object.<string, OperatorList>} new numeric refinements\n   */\n  _clearNumericRefinements: function _clearNumericRefinements(attribute) {\n    if (attribute === undefined) {\n      if (!objectHasKeys(this.numericRefinements)) {\n        return this.numericRefinements;\n      }\n      return {};\n    } else if (typeof attribute === 'string') {\n      return omit(this.numericRefinements, [attribute]);\n    } else if (typeof attribute === 'function') {\n      var hasChanged = false;\n      var numericRefinements = this.numericRefinements;\n      var newNumericRefinements = Object.keys(numericRefinements).reduce(\n        function (memo, key) {\n          var operators = numericRefinements[key];\n          var operatorList = {};\n\n          operators = operators || {};\n          Object.keys(operators).forEach(function (operator) {\n            var values = operators[operator] || [];\n            var outValues = [];\n            values.forEach(function (value) {\n              var predicateResult = attribute(\n                { val: value, op: operator },\n                key,\n                'numeric'\n              );\n              if (!predicateResult) outValues.push(value);\n            });\n            if (outValues.length !== values.length) {\n              hasChanged = true;\n            }\n            operatorList[operator] = outValues;\n          });\n\n          memo[key] = operatorList;\n\n          return memo;\n        },\n        {}\n      );\n\n      if (hasChanged) return newNumericRefinements;\n      return this.numericRefinements;\n    }\n\n    // We return nothing if the attribute is not undefined, a string or a function,\n    // as it is not a valid value for a refinement\n    return undefined;\n  },\n  /**\n   * Add a facet to the facets attribute of the helper configuration, if it\n   * isn't already present.\n   * @method\n   * @param {string} facet facet name to add\n   * @return {SearchParameters} new instance\n   */\n  addFacet: function addFacet(facet) {\n    if (this.isConjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.setQueryParameters({\n      facets: this.facets.concat([facet]),\n    });\n  },\n  /**\n   * Add a disjunctive facet to the disjunctiveFacets attribute of the helper\n   * configuration, if it isn't already present.\n   * @method\n   * @param {string} facet disjunctive facet name to add\n   * @return {SearchParameters} new instance\n   */\n  addDisjunctiveFacet: function addDisjunctiveFacet(facet) {\n    if (this.isDisjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.setQueryParameters({\n      disjunctiveFacets: this.disjunctiveFacets.concat([facet]),\n    });\n  },\n  /**\n   * Add a hierarchical facet to the hierarchicalFacets attribute of the helper\n   * configuration.\n   * @method\n   * @param {object} hierarchicalFacet hierarchical facet to add\n   * @return {SearchParameters} new instance\n   * @throws will throw an error if a hierarchical facet with the same name was already declared\n   */\n  addHierarchicalFacet: function addHierarchicalFacet(hierarchicalFacet) {\n    if (this.isHierarchicalFacet(hierarchicalFacet.name)) {\n      throw new Error(\n        'Cannot declare two hierarchical facets with the same name: `' +\n          hierarchicalFacet.name +\n          '`'\n      );\n    }\n\n    return this.setQueryParameters({\n      hierarchicalFacets: this.hierarchicalFacets.concat([hierarchicalFacet]),\n    });\n  },\n  /**\n   * Add a refinement on a \"normal\" facet\n   * @method\n   * @param {string} facet attribute to apply the faceting on\n   * @param {string} value value of the attribute (will be converted to string)\n   * @return {SearchParameters} new instance\n   */\n  addFacetRefinement: function addFacetRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (RefinementList.isRefined(this.facetsRefinements, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsRefinements: RefinementList.addRefinement(\n        this.facetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Exclude a value from a \"normal\" facet\n   * @method\n   * @param {string} facet attribute to apply the exclusion on\n   * @param {string} value value of the attribute (will be converted to string)\n   * @return {SearchParameters} new instance\n   */\n  addExcludeRefinement: function addExcludeRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (RefinementList.isRefined(this.facetsExcludes, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsExcludes: RefinementList.addRefinement(\n        this.facetsExcludes,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Adds a refinement on a disjunctive facet.\n   * @method\n   * @param {string} facet attribute to apply the faceting on\n   * @param {string} value value of the attribute (will be converted to string)\n   * @return {SearchParameters} new instance\n   */\n  addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n      );\n    }\n\n    if (\n      RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n    )\n      return this;\n\n    return this.setQueryParameters({\n      disjunctiveFacetsRefinements: RefinementList.addRefinement(\n        this.disjunctiveFacetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * addTagRefinement adds a tag to the list used to filter the results\n   * @param {string} tag tag to be added\n   * @return {SearchParameters} new instance\n   */\n  addTagRefinement: function addTagRefinement(tag) {\n    if (this.isTagRefined(tag)) return this;\n\n    var modification = {\n      tagRefinements: this.tagRefinements.concat(tag),\n    };\n\n    return this.setQueryParameters(modification);\n  },\n  /**\n   * Remove a facet from the facets attribute of the helper configuration, if it\n   * is present.\n   * @method\n   * @param {string} facet facet name to remove\n   * @return {SearchParameters} new instance\n   */\n  removeFacet: function removeFacet(facet) {\n    if (!this.isConjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.clearRefinements(facet).setQueryParameters({\n      facets: this.facets.filter(function (f) {\n        return f !== facet;\n      }),\n    });\n  },\n  /**\n   * Remove a disjunctive facet from the disjunctiveFacets attribute of the\n   * helper configuration, if it is present.\n   * @method\n   * @param {string} facet disjunctive facet name to remove\n   * @return {SearchParameters} new instance\n   */\n  removeDisjunctiveFacet: function removeDisjunctiveFacet(facet) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      return this;\n    }\n\n    return this.clearRefinements(facet).setQueryParameters({\n      disjunctiveFacets: this.disjunctiveFacets.filter(function (f) {\n        return f !== facet;\n      }),\n    });\n  },\n  /**\n   * Remove a hierarchical facet from the hierarchicalFacets attribute of the\n   * helper configuration, if it is present.\n   * @method\n   * @param {string} facet hierarchical facet name to remove\n   * @return {SearchParameters} new instance\n   */\n  removeHierarchicalFacet: function removeHierarchicalFacet(facet) {\n    if (!this.isHierarchicalFacet(facet)) {\n      return this;\n    }\n\n    return this.clearRefinements(facet).setQueryParameters({\n      hierarchicalFacets: this.hierarchicalFacets.filter(function (f) {\n        return f.name !== facet;\n      }),\n    });\n  },\n  /**\n   * Remove a refinement set on facet. If a value is provided, it will clear the\n   * refinement for the given value, otherwise it will clear all the refinement\n   * values for the faceted attribute.\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {string} [value] value used to filter\n   * @return {SearchParameters} new instance\n   */\n  removeFacetRefinement: function removeFacetRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (!RefinementList.isRefined(this.facetsRefinements, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsRefinements: RefinementList.removeRefinement(\n        this.facetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Remove a negative refinement on a facet\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {string} value value used to filter\n   * @return {SearchParameters} new instance\n   */\n  removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n    if (!RefinementList.isRefined(this.facetsExcludes, facet, value))\n      return this;\n\n    return this.setQueryParameters({\n      facetsExcludes: RefinementList.removeRefinement(\n        this.facetsExcludes,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Remove a refinement on a disjunctive facet\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {string} value value used to filter\n   * @return {SearchParameters} new instance\n   */\n  removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n      );\n    }\n    if (\n      !RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)\n    )\n      return this;\n\n    return this.setQueryParameters({\n      disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n        this.disjunctiveFacetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Remove a tag from the list of tag refinements\n   * @method\n   * @param {string} tag the tag to remove\n   * @return {SearchParameters} new instance\n   */\n  removeTagRefinement: function removeTagRefinement(tag) {\n    if (!this.isTagRefined(tag)) return this;\n\n    var modification = {\n      tagRefinements: this.tagRefinements.filter(function (t) {\n        return t !== tag;\n      }),\n    };\n\n    return this.setQueryParameters(modification);\n  },\n  /**\n   * Generic toggle refinement method to use with facet, disjunctive facets\n   * and hierarchical facets\n   * @param  {string} facet the facet to refine\n   * @param  {string} value the associated value\n   * @return {SearchParameters} new instance\n   * @throws will throw an error if the facet is not declared in the settings of the helper\n   * @deprecated since version 2.19.0, see {@link SearchParameters#toggleFacetRefinement}\n   */\n  toggleRefinement: function toggleRefinement(facet, value) {\n    return this.toggleFacetRefinement(facet, value);\n  },\n  /**\n   * Generic toggle refinement method to use with facet, disjunctive facets\n   * and hierarchical facets\n   * @param  {string} facet the facet to refine\n   * @param  {string} value the associated value\n   * @return {SearchParameters} new instance\n   * @throws will throw an error if the facet is not declared in the settings of the helper\n   */\n  toggleFacetRefinement: function toggleFacetRefinement(facet, value) {\n    if (this.isHierarchicalFacet(facet)) {\n      return this.toggleHierarchicalFacetRefinement(facet, value);\n    } else if (this.isConjunctiveFacet(facet)) {\n      return this.toggleConjunctiveFacetRefinement(facet, value);\n    } else if (this.isDisjunctiveFacet(facet)) {\n      return this.toggleDisjunctiveFacetRefinement(facet, value);\n    }\n\n    throw new Error(\n      'Cannot refine the undeclared facet ' +\n        facet +\n        '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets'\n    );\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n\n    return this.setQueryParameters({\n      facetsRefinements: RefinementList.toggleRefinement(\n        this.facetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isConjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the facets attribute of the helper configuration'\n      );\n    }\n\n    return this.setQueryParameters({\n      facetsExcludes: RefinementList.toggleRefinement(\n        this.facetsExcludes,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the disjunctiveFacets attribute of the helper configuration'\n      );\n    }\n\n    return this.setQueryParameters({\n      disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n        this.disjunctiveFacetsRefinements,\n        facet,\n        value\n      ),\n    });\n  },\n  /**\n   * Switch the refinement applied over a facet/value\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {SearchParameters} new instance\n   */\n  toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(\n    facet,\n    value\n  ) {\n    if (!this.isHierarchicalFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the hierarchicalFacets attribute of the helper configuration'\n      );\n    }\n\n    var separator = this._getHierarchicalFacetSeparator(\n      this.getHierarchicalFacetByName(facet)\n    );\n\n    var mod = {};\n\n    var upOneOrMultipleLevel =\n      this.hierarchicalFacetsRefinements[facet] !== undefined &&\n      this.hierarchicalFacetsRefinements[facet].length > 0 &&\n      // remove current refinement:\n      // refinement was 'beer > IPA', call is toggleRefine('beer > IPA'), refinement should be `beer`\n      (this.hierarchicalFacetsRefinements[facet][0] === value ||\n        // remove a parent refinement of the current refinement:\n        //  - refinement was 'beer > IPA > Flying dog'\n        //  - call is toggleRefine('beer > IPA')\n        //  - refinement should be `beer`\n        this.hierarchicalFacetsRefinements[facet][0].indexOf(\n          value + separator\n        ) === 0);\n\n    if (upOneOrMultipleLevel) {\n      if (value.indexOf(separator) === -1) {\n        // go back to root level\n        mod[facet] = [];\n      } else {\n        mod[facet] = [value.slice(0, value.lastIndexOf(separator))];\n      }\n    } else {\n      mod[facet] = [value];\n    }\n\n    return this.setQueryParameters({\n      hierarchicalFacetsRefinements: defaultsPure(\n        {},\n        mod,\n        this.hierarchicalFacetsRefinements\n      ),\n    });\n  },\n\n  /**\n   * Adds a refinement on a hierarchical facet.\n   * @param {string} facet the facet name\n   * @param {string} path the hierarchical facet path\n   * @return {SearchParameter} the new state\n   * @throws Error if the facet is not defined or if the facet is refined\n   */\n  addHierarchicalFacetRefinement: function (facet, path) {\n    if (this.isHierarchicalFacetRefined(facet)) {\n      throw new Error(facet + ' is already refined.');\n    }\n    if (!this.isHierarchicalFacet(facet)) {\n      throw new Error(\n        facet +\n          ' is not defined in the hierarchicalFacets attribute of the helper configuration.'\n      );\n    }\n    var mod = {};\n    mod[facet] = [path];\n    return this.setQueryParameters({\n      hierarchicalFacetsRefinements: defaultsPure(\n        {},\n        mod,\n        this.hierarchicalFacetsRefinements\n      ),\n    });\n  },\n\n  /**\n   * Removes the refinement set on a hierarchical facet.\n   * @param {string} facet the facet name\n   * @return {SearchParameter} the new state\n   * @throws Error if the facet is not defined or if the facet is not refined\n   */\n  removeHierarchicalFacetRefinement: function (facet) {\n    if (!this.isHierarchicalFacetRefined(facet)) {\n      return this;\n    }\n    var mod = {};\n    mod[facet] = [];\n    return this.setQueryParameters({\n      hierarchicalFacetsRefinements: defaultsPure(\n        {},\n        mod,\n        this.hierarchicalFacetsRefinements\n      ),\n    });\n  },\n  /**\n   * Switch the tag refinement\n   * @method\n   * @param {string} tag the tag to remove or add\n   * @return {SearchParameters} new instance\n   */\n  toggleTagRefinement: function toggleTagRefinement(tag) {\n    if (this.isTagRefined(tag)) {\n      return this.removeTagRefinement(tag);\n    }\n\n    return this.addTagRefinement(tag);\n  },\n  /**\n   * Test if the facet name is from one of the disjunctive facets\n   * @method\n   * @param {string} facet facet name to test\n   * @return {boolean} true if facet is a disjunctive facet\n   */\n  isDisjunctiveFacet: function (facet) {\n    return this.disjunctiveFacets.indexOf(facet) > -1;\n  },\n  /**\n   * Test if the facet name is from one of the hierarchical facets\n   * @method\n   * @param {string} facetName facet name to test\n   * @return {boolean} true if facetName is a hierarchical facet\n   */\n  isHierarchicalFacet: function (facetName) {\n    return this.getHierarchicalFacetByName(facetName) !== undefined;\n  },\n  /**\n   * Test if the facet name is from one of the conjunctive/normal facets\n   * @method\n   * @param {string} facet facet name to test\n   * @return {boolean} true if facet is a conjunctive facet\n   */\n  isConjunctiveFacet: function (facet) {\n    return this.facets.indexOf(facet) > -1;\n  },\n  /**\n   * Returns true if the facet is refined, either for a specific value or in\n   * general.\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} value, optional value. If passed will test that this value\n   * is filtering the given facet.\n   * @return {boolean} returns true if refined\n   */\n  isFacetRefined: function isFacetRefined(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      return false;\n    }\n    return RefinementList.isRefined(this.facetsRefinements, facet, value);\n  },\n  /**\n   * Returns true if the facet contains exclusions or if a specific value is\n   * excluded.\n   *\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} [value] optional value. If passed will test that this value\n   * is filtering the given facet.\n   * @return {boolean} returns true if refined\n   */\n  isExcludeRefined: function isExcludeRefined(facet, value) {\n    if (!this.isConjunctiveFacet(facet)) {\n      return false;\n    }\n    return RefinementList.isRefined(this.facetsExcludes, facet, value);\n  },\n  /**\n   * Returns true if the facet contains a refinement, or if a value passed is a\n   * refinement for the facet.\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} value optional, will test if the value is used for refinement\n   * if there is one, otherwise will test if the facet contains any refinement\n   * @return {boolean} true if the facet is refined\n   */\n  isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n    if (!this.isDisjunctiveFacet(facet)) {\n      return false;\n    }\n    return RefinementList.isRefined(\n      this.disjunctiveFacetsRefinements,\n      facet,\n      value\n    );\n  },\n  /**\n   * Returns true if the facet contains a refinement, or if a value passed is a\n   * refinement for the facet.\n   * @method\n   * @param {string} facet name of the attribute for used for faceting\n   * @param {string} value optional, will test if the value is used for refinement\n   * if there is one, otherwise will test if the facet contains any refinement\n   * @return {boolean} true if the facet is refined\n   */\n  isHierarchicalFacetRefined: function isHierarchicalFacetRefined(\n    facet,\n    value\n  ) {\n    if (!this.isHierarchicalFacet(facet)) {\n      return false;\n    }\n\n    var refinements = this.getHierarchicalRefinement(facet);\n\n    if (!value) {\n      return refinements.length > 0;\n    }\n\n    return refinements.indexOf(value) !== -1;\n  },\n  /**\n   * Test if the triple (attribute, operator, value) is already refined.\n   * If only the attribute and the operator are provided, it tests if the\n   * contains any refinement value.\n   * @method\n   * @param {string} attribute attribute for which the refinement is applied\n   * @param {string} [operator] operator of the refinement\n   * @param {string} [value] value of the refinement\n   * @return {boolean} true if it is refined\n   */\n  isNumericRefined: function isNumericRefined(attribute, operator, value) {\n    if (value === undefined && operator === undefined) {\n      return Boolean(this.numericRefinements[attribute]);\n    }\n\n    var isOperatorDefined =\n      this.numericRefinements[attribute] &&\n      this.numericRefinements[attribute][operator] !== undefined;\n\n    if (value === undefined || !isOperatorDefined) {\n      return isOperatorDefined;\n    }\n\n    var parsedValue = valToNumber(value);\n    var isAttributeValueDefined =\n      findArray(this.numericRefinements[attribute][operator], parsedValue) !==\n      undefined;\n\n    return isOperatorDefined && isAttributeValueDefined;\n  },\n  /**\n   * Returns true if the tag refined, false otherwise\n   * @method\n   * @param {string} tag the tag to check\n   * @return {boolean} true if tag is refined\n   */\n  isTagRefined: function isTagRefined(tag) {\n    return this.tagRefinements.indexOf(tag) !== -1;\n  },\n  /**\n   * Returns the list of all disjunctive facets refined\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {string[]} returns the list of refinements\n   */\n  getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\n    // eslint-disable-next-line consistent-this\n    var self = this;\n\n    // attributes used for numeric filter can also be disjunctive\n    var disjunctiveNumericRefinedFacets = intersection(\n      Object.keys(this.numericRefinements).filter(function (facet) {\n        return Object.keys(self.numericRefinements[facet]).length > 0;\n      }),\n      this.disjunctiveFacets\n    );\n\n    return Object.keys(this.disjunctiveFacetsRefinements)\n      .filter(function (facet) {\n        return self.disjunctiveFacetsRefinements[facet].length > 0;\n      })\n      .concat(disjunctiveNumericRefinedFacets)\n      .concat(this.getRefinedHierarchicalFacets())\n      .sort();\n  },\n  /**\n   * Returns the list of all disjunctive facets refined\n   * @method\n   * @param {string} facet name of the attribute used for faceting\n   * @param {value} value value used for filtering\n   * @return {string[]} returns the list of refinements\n   */\n  getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\n    // eslint-disable-next-line consistent-this\n    var self = this;\n    return intersection(\n      // enforce the order between the two arrays,\n      // so that refinement name index === hierarchical facet index\n      this.hierarchicalFacets.map(function (facet) {\n        return facet.name;\n      }),\n      Object.keys(this.hierarchicalFacetsRefinements).filter(function (facet) {\n        return self.hierarchicalFacetsRefinements[facet].length > 0;\n      })\n    ).sort();\n  },\n  /**\n   * Returned the list of all disjunctive facets not refined\n   * @method\n   * @return {string[]} returns the list of facets that are not refined\n   */\n  getUnrefinedDisjunctiveFacets: function () {\n    var refinedFacets = this.getRefinedDisjunctiveFacets();\n\n    return this.disjunctiveFacets.filter(function (f) {\n      return refinedFacets.indexOf(f) === -1;\n    });\n  },\n\n  managedParameters: [\n    'index',\n\n    'facets',\n    'disjunctiveFacets',\n    'facetsRefinements',\n    'hierarchicalFacets',\n    'facetsExcludes',\n\n    'disjunctiveFacetsRefinements',\n    'numericRefinements',\n    'tagRefinements',\n    'hierarchicalFacetsRefinements',\n  ],\n\n  getQueryParams: function getQueryParams() {\n    var managedParameters = this.managedParameters;\n\n    var queryParams = {};\n\n    // eslint-disable-next-line consistent-this\n    var self = this;\n    Object.keys(this).forEach(function (paramName) {\n      var paramValue = self[paramName];\n      if (\n        managedParameters.indexOf(paramName) === -1 &&\n        paramValue !== undefined\n      ) {\n        queryParams[paramName] = paramValue;\n      }\n    });\n\n    return queryParams;\n  },\n  /**\n   * Let the user set a specific value for a given parameter. Will return the\n   * same instance if the parameter is invalid or if the value is the same as the\n   * previous one.\n   * @method\n   * @param {string} parameter the parameter name\n   * @param {any} value the value to be set, must be compliant with the definition\n   * of the attribute on the object\n   * @return {SearchParameters} the updated state\n   */\n  setQueryParameter: function setParameter(parameter, value) {\n    if (this[parameter] === value) return this;\n\n    var modification = {};\n\n    modification[parameter] = value;\n\n    return this.setQueryParameters(modification);\n  },\n  /**\n   * Let the user set any of the parameters with a plain object.\n   * @method\n   * @param {object} params all the keys and the values to be updated\n   * @return {SearchParameters} a new updated instance\n   */\n  setQueryParameters: function setQueryParameters(params) {\n    if (!params) return this;\n\n    var error = SearchParameters.validate(this, params);\n\n    if (error) {\n      throw error;\n    }\n\n    // eslint-disable-next-line consistent-this\n    var self = this;\n    var nextWithNumbers = SearchParameters._parseNumbers(params);\n    var previousPlainObject = Object.keys(this).reduce(function (acc, key) {\n      acc[key] = self[key];\n      return acc;\n    }, {});\n\n    var nextPlainObject = Object.keys(nextWithNumbers).reduce(function (\n      previous,\n      key\n    ) {\n      var isPreviousValueDefined = previous[key] !== undefined;\n      var isNextValueDefined = nextWithNumbers[key] !== undefined;\n\n      if (isPreviousValueDefined && !isNextValueDefined) {\n        return omit(previous, [key]);\n      }\n\n      if (isNextValueDefined) {\n        previous[key] = nextWithNumbers[key];\n      }\n\n      return previous;\n    },\n    previousPlainObject);\n\n    return new this.constructor(nextPlainObject);\n  },\n\n  /**\n   * Returns a new instance with the page reset. Two scenarios possible:\n   * the page is omitted -> return the given instance\n   * the page is set -> return a new instance with a page of 0\n   * @return {SearchParameters} a new updated instance\n   */\n  resetPage: function () {\n    if (this.page === undefined) {\n      return this;\n    }\n\n    return this.setPage(0);\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.separator or `>` as default\n   */\n  _getHierarchicalFacetSortBy: function (hierarchicalFacet) {\n    return hierarchicalFacet.sortBy || ['isRefined:desc', 'name:asc'];\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet separator or the default one (`>`)\n   * @private\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.separator or `>` as default\n   */\n  _getHierarchicalFacetSeparator: function (hierarchicalFacet) {\n    return hierarchicalFacet.separator || ' > ';\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet prefix path or null\n   * @private\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.rootPath or null as default\n   */\n  _getHierarchicalRootPath: function (hierarchicalFacet) {\n    return hierarchicalFacet.rootPath || null;\n  },\n\n  /**\n   * Helper function to check if we show the parent level of the hierarchicalFacet\n   * @private\n   * @param  {object} hierarchicalFacet the hierarchicalFacet object\n   * @return {string} returns the hierarchicalFacet.showParentLevel or true as default\n   */\n  _getHierarchicalShowParentLevel: function (hierarchicalFacet) {\n    if (typeof hierarchicalFacet.showParentLevel === 'boolean') {\n      return hierarchicalFacet.showParentLevel;\n    }\n    return true;\n  },\n\n  /**\n   * Helper function to get the hierarchicalFacet by it's name\n   * @param  {string} hierarchicalFacetName the hierarchicalFacet name\n   * @return {object} a hierarchicalFacet\n   */\n  getHierarchicalFacetByName: function (hierarchicalFacetName) {\n    return find(this.hierarchicalFacets, function (f) {\n      return f.name === hierarchicalFacetName;\n    });\n  },\n\n  /**\n   * Get the current breadcrumb for a hierarchical facet, as an array\n   * @param  {string} facetName Hierarchical facet name\n   * @return {array.<string>} the path as an array of string\n   */\n  getHierarchicalFacetBreadcrumb: function (facetName) {\n    if (!this.isHierarchicalFacet(facetName)) {\n      return [];\n    }\n\n    var refinement = this.getHierarchicalRefinement(facetName)[0];\n    if (!refinement) return [];\n\n    var separator = this._getHierarchicalFacetSeparator(\n      this.getHierarchicalFacetByName(facetName)\n    );\n    var path = refinement.split(separator);\n    return path.map(function (part) {\n      return part.trim();\n    });\n  },\n\n  toString: function () {\n    return JSON.stringify(this, null, 2);\n  },\n};\n\n/**\n * Callback used for clearRefinement method\n * @callback SearchParameters.clearCallback\n * @param {OperatorList|FacetList} value the value of the filter\n * @param {string} key the current attribute name\n * @param {string} type `numeric`, `disjunctiveFacet`, `conjunctiveFacet`, `hierarchicalFacet` or `exclude`\n * depending on the type of facet\n * @return {boolean} `true` if the element should be removed. `false` otherwise.\n */\nmodule.exports = SearchParameters;\n", "'use strict';\n\nmodule.exports = function compact(array) {\n  if (!Array.isArray(array)) {\n    return [];\n  }\n\n  return array.filter(Boolean);\n};\n", "'use strict';\n\n// @MAJOR can be replaced by native Array#findIndex when we change support\nmodule.exports = function find(array, comparator) {\n  if (!Array.isArray(array)) {\n    return -1;\n  }\n\n  for (var i = 0; i < array.length; i++) {\n    if (comparator(array[i])) {\n      return i;\n    }\n  }\n  return -1;\n};\n", "'use strict';\n\nvar find = require('./find');\n\n/**\n * Transform sort format from user friendly notation to lodash format\n * @param {string[]} sortBy array of predicate of the form \"attribute:order\"\n * @param {string[]} [defaults] array of predicate of the form \"attribute:order\"\n * @return {array.<string[]>} array containing 2 elements : attributes, orders\n */\nmodule.exports = function formatSort(sortBy, defaults) {\n  var defaultInstructions = (defaults || []).map(function (sort) {\n    return sort.split(':');\n  });\n\n  return sortBy.reduce(\n    function preparePredicate(out, sort) {\n      var sortInstruction = sort.split(':');\n\n      var matchingDefault = find(\n        defaultInstructions,\n        function (defaultInstruction) {\n          return defaultInstruction[0] === sortInstruction[0];\n        }\n      );\n\n      if (sortInstruction.length > 1 || !matchingDefault) {\n        out[0].push(sortInstruction[0]);\n        out[1].push(sortInstruction[1]);\n        return out;\n      }\n\n      out[0].push(matchingDefault[0]);\n      out[1].push(matchingDefault[1]);\n      return out;\n    },\n    [[], []]\n  );\n};\n", "'use strict';\n\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined;\n    var valIsNull = value === null;\n\n    var othIsDefined = other !== undefined;\n    var othIsNull = other === null;\n\n    if (\n      (!othIsNull && value > other) ||\n      (valIsNull && othIsDefined) ||\n      !valIsDefined\n    ) {\n      return 1;\n    }\n    if (\n      (!valIsNull && value < other) ||\n      (othIsNull && valIsDefined) ||\n      !othIsDefined\n    ) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\n/**\n * @param {Array<object>} collection object with keys in attributes\n * @param {Array<string>} iteratees attributes\n * @param {Array<string>} orders asc | desc\n * @return {Array<object>} sorted collection\n */\nfunction orderBy(collection, iteratees, orders) {\n  if (!Array.isArray(collection)) {\n    return [];\n  }\n\n  if (!Array.isArray(orders)) {\n    orders = [];\n  }\n\n  var result = collection.map(function (value, index) {\n    return {\n      criteria: iteratees.map(function (iteratee) {\n        return value[iteratee];\n      }),\n      index: index,\n      value: value,\n    };\n  });\n\n  result.sort(function comparer(object, other) {\n    var index = -1;\n\n    while (++index < object.criteria.length) {\n      var res = compareAscending(object.criteria[index], other.criteria[index]);\n      if (res) {\n        if (index >= orders.length) {\n          return res;\n        }\n        if (orders[index] === 'desc') {\n          return -res;\n        }\n        return res;\n      }\n    }\n\n    // This ensures a stable sort in V8 and other engines.\n    // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n    return object.index - other.index;\n  });\n\n  return result.map(function (res) {\n    return res.value;\n  });\n}\n\nmodule.exports = orderBy;\n", "'use strict';\n\nmodule.exports = generateTrees;\n\nvar fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar prepareHierarchicalFacetSortBy = require('../functions/formatSort');\nvar orderBy = require('../functions/orderBy');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nfunction generateTrees(state) {\n  return function generate(hierarchicalFacetResult, hierarchicalFacetIndex) {\n    var hierarchicalFacet = state.hierarchicalFacets[hierarchicalFacetIndex];\n    var hierarchicalFacetRefinement =\n      (state.hierarchicalFacetsRefinements[hierarchicalFacet.name] &&\n        state.hierarchicalFacetsRefinements[hierarchicalFacet.name][0]) ||\n      '';\n    var hierarchicalSeparator =\n      state._getHierarchicalFacetSeparator(hierarchicalFacet);\n    var hierarchicalRootPath =\n      state._getHierarchicalRootPath(hierarchicalFacet);\n    var hierarchicalShowParentLevel =\n      state._getHierarchicalShowParentLevel(hierarchicalFacet);\n    var sortBy = prepareHierarchicalFacetSortBy(\n      state._getHierarchicalFacetSortBy(hierarchicalFacet)\n    );\n\n    var rootExhaustive = hierarchicalFacetResult.every(function (facetResult) {\n      return facetResult.exhaustive;\n    });\n\n    var generateTreeFn = generateHierarchicalTree(\n      sortBy,\n      hierarchicalSeparator,\n      hierarchicalRootPath,\n      hierarchicalShowParentLevel,\n      hierarchicalFacetRefinement\n    );\n\n    var results = hierarchicalFacetResult;\n\n    if (hierarchicalRootPath) {\n      results = hierarchicalFacetResult.slice(\n        hierarchicalRootPath.split(hierarchicalSeparator).length\n      );\n    }\n\n    return results.reduce(generateTreeFn, {\n      name: state.hierarchicalFacets[hierarchicalFacetIndex].name,\n      count: null, // root level, no count\n      isRefined: true, // root level, always refined\n      path: null, // root level, no path\n      escapedValue: null,\n      exhaustive: rootExhaustive,\n      data: null,\n    });\n  };\n}\n\nfunction generateHierarchicalTree(\n  sortBy,\n  hierarchicalSeparator,\n  hierarchicalRootPath,\n  hierarchicalShowParentLevel,\n  currentRefinement\n) {\n  return function generateTree(\n    hierarchicalTree,\n    hierarchicalFacetResult,\n    currentHierarchicalLevel\n  ) {\n    var parent = hierarchicalTree;\n\n    if (currentHierarchicalLevel > 0) {\n      var level = 0;\n\n      parent = hierarchicalTree;\n\n      while (level < currentHierarchicalLevel) {\n        /**\n         * @type {object[]]} hierarchical data\n         */\n        var data = parent && Array.isArray(parent.data) ? parent.data : [];\n        parent = find(data, function (subtree) {\n          return subtree.isRefined;\n        });\n        level++;\n      }\n    }\n\n    // we found a refined parent, let's add current level data under it\n    if (parent) {\n      // filter values in case an object has multiple categories:\n      //   {\n      //     categories: {\n      //       level0: ['beers', 'bi\u00E8res'],\n      //       level1: ['beers > IPA', 'bi\u00E8res > Belges']\n      //     }\n      //   }\n      //\n      // If parent refinement is `beers`, then we do not want to have `bi\u00E8res > Belges`\n      // showing up\n\n      var picked = Object.keys(hierarchicalFacetResult.data)\n        .map(function (facetValue) {\n          return [facetValue, hierarchicalFacetResult.data[facetValue]];\n        })\n        .filter(function (tuple) {\n          var facetValue = tuple[0];\n          return onlyMatchingTree(\n            facetValue,\n            parent.path || hierarchicalRootPath,\n            currentRefinement,\n            hierarchicalSeparator,\n            hierarchicalRootPath,\n            hierarchicalShowParentLevel\n          );\n        });\n\n      parent.data = orderBy(\n        picked.map(function (tuple) {\n          var facetValue = tuple[0];\n          var facetCount = tuple[1];\n\n          return format(\n            facetCount,\n            facetValue,\n            hierarchicalSeparator,\n            unescapeFacetValue(currentRefinement),\n            hierarchicalFacetResult.exhaustive\n          );\n        }),\n        sortBy[0],\n        sortBy[1]\n      );\n    }\n\n    return hierarchicalTree;\n  };\n}\n\n// eslint-disable-next-line max-params\nfunction onlyMatchingTree(\n  facetValue,\n  parentPath,\n  currentRefinement,\n  hierarchicalSeparator,\n  hierarchicalRootPath,\n  hierarchicalShowParentLevel\n) {\n  // we want the facetValue is a child of hierarchicalRootPath\n  if (\n    hierarchicalRootPath &&\n    (facetValue.indexOf(hierarchicalRootPath) !== 0 ||\n      hierarchicalRootPath === facetValue)\n  ) {\n    return false;\n  }\n\n  // we always want root levels (only when there is no prefix path)\n  return (\n    (!hierarchicalRootPath &&\n      facetValue.indexOf(hierarchicalSeparator) === -1) ||\n    // if there is a rootPath, being root level mean 1 level under rootPath\n    (hierarchicalRootPath &&\n      facetValue.split(hierarchicalSeparator).length -\n        hierarchicalRootPath.split(hierarchicalSeparator).length ===\n        1) ||\n    // if current refinement is a root level and current facetValue is a root level,\n    // keep the facetValue\n    (facetValue.indexOf(hierarchicalSeparator) === -1 &&\n      currentRefinement.indexOf(hierarchicalSeparator) === -1) ||\n    // currentRefinement is a child of the facet value\n    currentRefinement.indexOf(facetValue) === 0 ||\n    // facetValue is a child of the current parent, add it\n    (facetValue.indexOf(parentPath + hierarchicalSeparator) === 0 &&\n      (hierarchicalShowParentLevel ||\n        facetValue.indexOf(currentRefinement) === 0))\n  );\n}\n\nfunction format(\n  facetCount,\n  facetValue,\n  hierarchicalSeparator,\n  currentRefinement,\n  exhaustive\n) {\n  var parts = facetValue.split(hierarchicalSeparator);\n  return {\n    name: parts[parts.length - 1].trim(),\n    path: facetValue,\n    escapedValue: escapeFacetValue(facetValue),\n    count: facetCount,\n    isRefined:\n      currentRefinement === facetValue ||\n      currentRefinement.indexOf(facetValue + hierarchicalSeparator) === 0,\n    exhaustive: exhaustive,\n    data: null,\n  };\n}\n", "'use strict';\n\nvar compact = require('../functions/compact');\nvar defaultsPure = require('../functions/defaultsPure');\nvar fv = require('../functions/escapeFacetValue');\nvar find = require('../functions/find');\nvar findIndex = require('../functions/findIndex');\nvar formatSort = require('../functions/formatSort');\nvar merge = require('../functions/merge');\nvar orderBy = require('../functions/orderBy');\nvar escapeFacetValue = fv.escapeFacetValue;\nvar unescapeFacetValue = fv.unescapeFacetValue;\n\nvar generateHierarchicalTree = require('./generate-hierarchical-tree');\n\n/**\n * @typedef SearchResults.Facet\n * @type {object}\n * @property {string} name name of the attribute in the record\n * @property {object} data the faceting data: value, number of entries\n * @property {object} stats undefined unless facet_stats is retrieved from algolia\n */\n\n/**\n * @typedef SearchResults.HierarchicalFacet\n * @type {object}\n * @property {string} name name of the current value given the hierarchical level, trimmed.\n * If root node, you get the facet name\n * @property {number} count number of objects matching this hierarchical value\n * @property {string} path the current hierarchical value full path\n * @property {boolean} isRefined `true` if the current value was refined, `false` otherwise\n * @property {HierarchicalFacet[]} data sub values for the current level\n */\n\n/**\n * @typedef SearchResults.FacetValue\n * @type {object}\n * @property {string} name the facet value itself\n * @property {number} count times this facet appears in the results\n * @property {boolean} isRefined is the facet currently selected\n * @property {boolean} isExcluded is the facet currently excluded (only for conjunctive facets)\n */\n\n/**\n * @typedef Refinement\n * @type {object}\n * @property {string} type the type of filter used:\n * `numeric`, `facet`, `exclude`, `disjunctive`, `hierarchical`\n * @property {string} attributeName name of the attribute used for filtering\n * @property {string} name the value of the filter\n * @property {number} numericValue the value as a number. Only for numeric filters.\n * @property {string} operator the operator used. Only for numeric filters.\n * @property {number} count the number of computed hits for this filter. Only on facets.\n * @property {boolean} exhaustive if the count is exhaustive\n */\n\n/**\n * Turn an array of attributes in an object of attributes with their position in the array as value\n * @param {string[]} attributes the list of attributes in the record\n * @return {object} the list of attributes indexed by attribute name\n */\nfunction getIndices(attributes) {\n  var indices = {};\n\n  attributes.forEach(function (val, idx) {\n    indices[val] = idx;\n  });\n\n  return indices;\n}\n\nfunction assignFacetStats(dest, facetStats, key) {\n  if (facetStats && facetStats[key]) {\n    dest.stats = facetStats[key];\n  }\n}\n\n/**\n * @typedef {Object} HierarchicalFacet\n * @property {string} name\n * @property {string[]} attributes\n */\n\n/**\n * @param {HierarchicalFacet[]} hierarchicalFacets All hierarchical facets\n * @param {string} hierarchicalAttributeName The name of the hierarchical attribute\n * @return {HierarchicalFacet} The hierarchical facet matching the attribute name\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n  hierarchicalFacets,\n  hierarchicalAttributeName\n) {\n  return find(\n    hierarchicalFacets,\n    function facetKeyMatchesAttribute(hierarchicalFacet) {\n      var facetNames = hierarchicalFacet.attributes || [];\n      return facetNames.indexOf(hierarchicalAttributeName) > -1;\n    }\n  );\n}\n\n/**\n * Constructor for SearchResults\n * @class\n * @classdesc SearchResults contains the results of a query to Algolia using the\n * {@link AlgoliaSearchHelper}.\n * @param {SearchParameters} state state that led to the response\n * @param {array.<object>} results the results from algolia client\n * @param {object} options options to control results content\n * @example <caption>SearchResults of the first query in\n * <a href=\"http://demos.algolia.com/instant-search-demo\">the instant search demo</a></caption>\n{\n   \"hitsPerPage\": 10,\n   \"processingTimeMS\": 2,\n   \"facets\": [\n      {\n         \"name\": \"type\",\n         \"data\": {\n            \"HardGood\": 6627,\n            \"BlackTie\": 550,\n            \"Music\": 665,\n            \"Software\": 131,\n            \"Game\": 456,\n            \"Movie\": 1571\n         },\n         \"exhaustive\": false\n      },\n      {\n         \"exhaustive\": false,\n         \"data\": {\n            \"Free shipping\": 5507\n         },\n         \"name\": \"shipping\"\n      }\n  ],\n   \"hits\": [\n      {\n         \"thumbnailImage\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_54x108_s.gif\",\n         \"_highlightResult\": {\n            \"shortDescription\": {\n               \"matchLevel\": \"none\",\n               \"value\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n               \"matchedWords\": []\n            },\n            \"category\": {\n               \"matchLevel\": \"none\",\n               \"value\": \"Computer Security Software\",\n               \"matchedWords\": []\n            },\n            \"manufacturer\": {\n               \"matchedWords\": [],\n               \"value\": \"Webroot\",\n               \"matchLevel\": \"none\"\n            },\n            \"name\": {\n               \"value\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n               \"matchedWords\": [],\n               \"matchLevel\": \"none\"\n            }\n         },\n         \"image\": \"http://img.bbystatic.com/BestBuy_US/images/products/1688/1688832_105x210_sc.jpg\",\n         \"shipping\": \"Free shipping\",\n         \"bestSellingRank\": 4,\n         \"shortDescription\": \"Safeguard your PC, Mac, Android and iOS devices with comprehensive Internet protection\",\n         \"url\": \"http://www.bestbuy.com/site/webroot-secureanywhere-internet-security-3-devi\u2026d=1219060687969&skuId=1688832&cmp=RMX&ky=2d3GfEmNIzjA0vkzveHdZEBgpPCyMnLTJ\",\n         \"name\": \"Webroot SecureAnywhere Internet Security (3-Device) (1-Year Subscription) - Mac/Windows\",\n         \"category\": \"Computer Security Software\",\n         \"salePrice_range\": \"1 - 50\",\n         \"objectID\": \"1688832\",\n         \"type\": \"Software\",\n         \"customerReviewCount\": 5980,\n         \"salePrice\": 49.99,\n         \"manufacturer\": \"Webroot\"\n      },\n      ....\n  ],\n   \"nbHits\": 10000,\n   \"disjunctiveFacets\": [\n      {\n         \"exhaustive\": false,\n         \"data\": {\n            \"5\": 183,\n            \"12\": 112,\n            \"7\": 149,\n            ...\n         },\n         \"name\": \"customerReviewCount\",\n         \"stats\": {\n            \"max\": 7461,\n            \"avg\": 157.939,\n            \"min\": 1\n         }\n      },\n      {\n         \"data\": {\n            \"Printer Ink\": 142,\n            \"Wireless Speakers\": 60,\n            \"Point & Shoot Cameras\": 48,\n            ...\n         },\n         \"name\": \"category\",\n         \"exhaustive\": false\n      },\n      {\n         \"exhaustive\": false,\n         \"data\": {\n            \"> 5000\": 2,\n            \"1 - 50\": 6524,\n            \"501 - 2000\": 566,\n            \"201 - 500\": 1501,\n            \"101 - 200\": 1360,\n            \"2001 - 5000\": 47\n         },\n         \"name\": \"salePrice_range\"\n      },\n      {\n         \"data\": {\n            \"Dynex\u2122\": 202,\n            \"Insignia\u2122\": 230,\n            \"PNY\": 72,\n            ...\n         },\n         \"name\": \"manufacturer\",\n         \"exhaustive\": false\n      }\n  ],\n   \"query\": \"\",\n   \"nbPages\": 100,\n   \"page\": 0,\n   \"index\": \"bestbuy\"\n}\n **/\nfunction SearchResults(state, results, options) {\n  var mainSubResponse = results[0];\n\n  this._rawResults = results;\n\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  // https://www.algolia.com/doc/api-reference/api-methods/search/#response\n  Object.keys(mainSubResponse).forEach(function (key) {\n    self[key] = mainSubResponse[key];\n  });\n\n  // Make every key of the result options reachable from the instance\n  var opts = merge(\n    {\n      persistHierarchicalRootCount: false,\n    },\n    options\n  );\n  Object.keys(opts).forEach(function (key) {\n    self[key] = opts[key];\n  });\n\n  /**\n   * query used to generate the results\n   * @name query\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * The query as parsed by the engine given all the rules.\n   * @name parsedQuery\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * all the records that match the search parameters. Each record is\n   * augmented with a new attribute `_highlightResult`\n   * which is an object keyed by attribute and with the following properties:\n   * - `value` : the value of the facet highlighted (html)\n   * - `matchLevel`: `full`, `partial` or `none`, depending on how the query terms match\n   * @name hits\n   * @member {object[]}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * index where the results come from\n   * @name index\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * number of hits per page requested\n   * @name hitsPerPage\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * total number of hits of this query on the index\n   * @name nbHits\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * total number of pages with respect to the number of hits per page and the total number of hits\n   * @name nbPages\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * current page\n   * @name page\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * The position if the position was guessed by IP.\n   * @name aroundLatLng\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   * @example \"48.8637,2.3615\",\n   */\n  /**\n   * The radius computed by Algolia.\n   * @name automaticRadius\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   * @example \"126792922\",\n   */\n  /**\n   * String identifying the server used to serve this request.\n   *\n   * getRankingInfo needs to be set to `true` for this to be returned\n   *\n   * @name serverUsed\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   * @example \"c7-use-2.algolia.net\",\n   */\n  /**\n   * Boolean that indicates if the computation of the counts did time out.\n   * @deprecated\n   * @name timeoutCounts\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * Boolean that indicates if the computation of the hits did time out.\n   * @deprecated\n   * @name timeoutHits\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * True if the counts of the facets is exhaustive\n   * @name exhaustiveFacetsCount\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * True if the number of hits is exhaustive\n   * @name exhaustiveNbHits\n   * @member {boolean}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * Contains the userData if they are set by a [query rule](https://www.algolia.com/doc/guides/query-rules/query-rules-overview/).\n   * @name userData\n   * @member {object[]}\n   * @memberof SearchResults\n   * @instance\n   */\n  /**\n   * queryID is the unique identifier of the query used to generate the current search results.\n   * This value is only available if the `clickAnalytics` search parameter is set to `true`.\n   * @name queryID\n   * @member {string}\n   * @memberof SearchResults\n   * @instance\n   */\n\n  /**\n   * sum of the processing time of all the queries\n   * @name processingTimeMS\n   * @member {number}\n   * @memberof SearchResults\n   * @instance\n   */\n  this.processingTimeMS = results.reduce(function (sum, result) {\n    return result.processingTimeMS === undefined\n      ? sum\n      : sum + result.processingTimeMS;\n  }, 0);\n\n  /**\n   * disjunctive facets results\n   * @member {SearchResults.Facet[]}\n   */\n  this.disjunctiveFacets = [];\n  /**\n   * disjunctive facets results\n   * @member {SearchResults.HierarchicalFacet[]}\n   */\n  this.hierarchicalFacets = state.hierarchicalFacets.map(\n    function initFutureTree() {\n      return [];\n    }\n  );\n  /**\n   * other facets results\n   * @member {SearchResults.Facet[]}\n   */\n  this.facets = [];\n\n  var disjunctiveFacets = state.getRefinedDisjunctiveFacets();\n\n  var facetsIndices = getIndices(state.facets);\n  var disjunctiveFacetsIndices = getIndices(state.disjunctiveFacets);\n  var nextDisjunctiveResult = 1;\n\n  // Since we send request only for disjunctive facets that have been refined,\n  // we get the facets information from the first, general, response.\n\n  var mainFacets = mainSubResponse.facets || {};\n\n  Object.keys(mainFacets).forEach(function (facetKey) {\n    var facetValueObject = mainFacets[facetKey];\n\n    var hierarchicalFacet = findMatchingHierarchicalFacetFromAttributeName(\n      state.hierarchicalFacets,\n      facetKey\n    );\n\n    if (hierarchicalFacet) {\n      // Place the hierarchicalFacet data at the correct index depending on\n      // the attributes order that was defined at the helper initialization\n      var facetIndex = hierarchicalFacet.attributes.indexOf(facetKey);\n      var idxAttributeName = findIndex(state.hierarchicalFacets, function (f) {\n        return f.name === hierarchicalFacet.name;\n      });\n      self.hierarchicalFacets[idxAttributeName][facetIndex] = {\n        attribute: facetKey,\n        data: facetValueObject,\n        exhaustive: mainSubResponse.exhaustiveFacetsCount,\n      };\n    } else {\n      var isFacetDisjunctive = state.disjunctiveFacets.indexOf(facetKey) !== -1;\n      var isFacetConjunctive = state.facets.indexOf(facetKey) !== -1;\n      var position;\n\n      if (isFacetDisjunctive) {\n        position = disjunctiveFacetsIndices[facetKey];\n        self.disjunctiveFacets[position] = {\n          name: facetKey,\n          data: facetValueObject,\n          exhaustive: mainSubResponse.exhaustiveFacetsCount,\n        };\n        assignFacetStats(\n          self.disjunctiveFacets[position],\n          mainSubResponse.facets_stats,\n          facetKey\n        );\n      }\n      if (isFacetConjunctive) {\n        position = facetsIndices[facetKey];\n        self.facets[position] = {\n          name: facetKey,\n          data: facetValueObject,\n          exhaustive: mainSubResponse.exhaustiveFacetsCount,\n        };\n        assignFacetStats(\n          self.facets[position],\n          mainSubResponse.facets_stats,\n          facetKey\n        );\n      }\n    }\n  });\n\n  // Make sure we do not keep holes within the hierarchical facets\n  this.hierarchicalFacets = compact(this.hierarchicalFacets);\n\n  // aggregate the refined disjunctive facets\n  disjunctiveFacets.forEach(function (disjunctiveFacet) {\n    var result = results[nextDisjunctiveResult];\n    var facets = result && result.facets ? result.facets : {};\n    var hierarchicalFacet = state.getHierarchicalFacetByName(disjunctiveFacet);\n\n    // There should be only item in facets.\n    Object.keys(facets).forEach(function (dfacet) {\n      var facetResults = facets[dfacet];\n\n      var position;\n\n      if (hierarchicalFacet) {\n        position = findIndex(state.hierarchicalFacets, function (f) {\n          return f.name === hierarchicalFacet.name;\n        });\n        var attributeIndex = findIndex(\n          self.hierarchicalFacets[position],\n          function (f) {\n            return f.attribute === dfacet;\n          }\n        );\n\n        // previous refinements and no results so not able to find it\n        if (attributeIndex === -1) {\n          return;\n        }\n\n        self.hierarchicalFacets[position][attributeIndex].data = merge(\n          {},\n          self.hierarchicalFacets[position][attributeIndex].data,\n          facetResults\n        );\n      } else {\n        position = disjunctiveFacetsIndices[dfacet];\n\n        var dataFromMainRequest =\n          (mainSubResponse.facets && mainSubResponse.facets[dfacet]) || {};\n\n        self.disjunctiveFacets[position] = {\n          name: dfacet,\n          data: defaultsPure({}, facetResults, dataFromMainRequest),\n          exhaustive: result.exhaustiveFacetsCount,\n        };\n        assignFacetStats(\n          self.disjunctiveFacets[position],\n          result.facets_stats,\n          dfacet\n        );\n\n        if (state.disjunctiveFacetsRefinements[dfacet]) {\n          state.disjunctiveFacetsRefinements[dfacet].forEach(function (\n            refinementValue\n          ) {\n            // add the disjunctive refinements if it is no more retrieved\n            if (\n              !self.disjunctiveFacets[position].data[refinementValue] &&\n              state.disjunctiveFacetsRefinements[dfacet].indexOf(\n                unescapeFacetValue(refinementValue)\n              ) > -1\n            ) {\n              self.disjunctiveFacets[position].data[refinementValue] = 0;\n            }\n          });\n        }\n      }\n    });\n    nextDisjunctiveResult++;\n  });\n\n  // if we have some parent level values for hierarchical facets, merge them\n  state.getRefinedHierarchicalFacets().forEach(function (refinedFacet) {\n    var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n    var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n\n    var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n    // if we are already at a root refinement (or no refinement at all), there is no\n    // root level values request\n    if (\n      currentRefinement.length === 0 ||\n      currentRefinement[0].split(separator).length < 2\n    ) {\n      return;\n    }\n\n    results.slice(nextDisjunctiveResult).forEach(function (result) {\n      var facets = result && result.facets ? result.facets : {};\n\n      Object.keys(facets).forEach(function (dfacet) {\n        var facetResults = facets[dfacet];\n        var position = findIndex(state.hierarchicalFacets, function (f) {\n          return f.name === hierarchicalFacet.name;\n        });\n        var attributeIndex = findIndex(\n          self.hierarchicalFacets[position],\n          function (f) {\n            return f.attribute === dfacet;\n          }\n        );\n\n        // previous refinements and no results so not able to find it\n        if (attributeIndex === -1) {\n          return;\n        }\n\n        // when we always get root levels, if the hits refinement is `beers > IPA` (count: 5),\n        // then the disjunctive values will be `beers` (count: 100),\n        // but we do not want to display\n        //   | beers (100)\n        //     > IPA (5)\n        // We want\n        //   | beers (5)\n        //     > IPA (5)\n        // @MAJOR: remove this legacy behaviour in next major version\n        var defaultData = {};\n\n        if (\n          currentRefinement.length > 0 &&\n          !self.persistHierarchicalRootCount\n        ) {\n          var root = currentRefinement[0].split(separator)[0];\n          defaultData[root] =\n            self.hierarchicalFacets[position][attributeIndex].data[root];\n        }\n\n        self.hierarchicalFacets[position][attributeIndex].data = defaultsPure(\n          defaultData,\n          facetResults,\n          self.hierarchicalFacets[position][attributeIndex].data\n        );\n      });\n\n      nextDisjunctiveResult++;\n    });\n  });\n\n  // add the excludes\n  Object.keys(state.facetsExcludes).forEach(function (facetName) {\n    var excludes = state.facetsExcludes[facetName];\n    var position = facetsIndices[facetName];\n\n    self.facets[position] = {\n      name: facetName,\n      data: mainFacets[facetName],\n      exhaustive: mainSubResponse.exhaustiveFacetsCount,\n    };\n    excludes.forEach(function (facetValue) {\n      self.facets[position] = self.facets[position] || { name: facetName };\n      self.facets[position].data = self.facets[position].data || {};\n      self.facets[position].data[facetValue] = 0;\n    });\n  });\n\n  /**\n   * @type {Array}\n   */\n  this.hierarchicalFacets = this.hierarchicalFacets.map(\n    generateHierarchicalTree(state)\n  );\n\n  /**\n   * @type {Array}\n   */\n  this.facets = compact(this.facets);\n  /**\n   * @type {Array}\n   */\n  this.disjunctiveFacets = compact(this.disjunctiveFacets);\n\n  this._state = state;\n}\n\n/**\n * Get a facet object with its name\n * @deprecated\n * @param {string} name name of the faceted attribute\n * @return {SearchResults.Facet} the facet object\n */\nSearchResults.prototype.getFacetByName = function (name) {\n  function predicate(facet) {\n    return facet.name === name;\n  }\n\n  return (\n    find(this.facets, predicate) ||\n    find(this.disjunctiveFacets, predicate) ||\n    find(this.hierarchicalFacets, predicate)\n  );\n};\n\n/**\n * Get the facet values of a specified attribute from a SearchResults object.\n * @private\n * @param {SearchResults} results the search results to search in\n * @param {string} attribute name of the faceted attribute to search for\n * @return {array|object} facet values. For the hierarchical facets it is an object.\n */\nfunction extractNormalizedFacetValues(results, attribute) {\n  function predicate(facet) {\n    return facet.name === attribute;\n  }\n\n  if (results._state.isConjunctiveFacet(attribute)) {\n    var facet = find(results.facets, predicate);\n    if (!facet) return [];\n\n    return Object.keys(facet.data).map(function (name) {\n      var value = escapeFacetValue(name);\n      return {\n        name: name,\n        escapedValue: value,\n        count: facet.data[name],\n        isRefined: results._state.isFacetRefined(attribute, value),\n        isExcluded: results._state.isExcludeRefined(attribute, name),\n      };\n    });\n  } else if (results._state.isDisjunctiveFacet(attribute)) {\n    var disjunctiveFacet = find(results.disjunctiveFacets, predicate);\n    if (!disjunctiveFacet) return [];\n\n    return Object.keys(disjunctiveFacet.data).map(function (name) {\n      var value = escapeFacetValue(name);\n      return {\n        name: name,\n        escapedValue: value,\n        count: disjunctiveFacet.data[name],\n        isRefined: results._state.isDisjunctiveFacetRefined(attribute, value),\n      };\n    });\n  } else if (results._state.isHierarchicalFacet(attribute)) {\n    var hierarchicalFacetValues = find(results.hierarchicalFacets, predicate);\n    if (!hierarchicalFacetValues) return hierarchicalFacetValues;\n\n    var hierarchicalFacet =\n      results._state.getHierarchicalFacetByName(attribute);\n    var separator =\n      results._state._getHierarchicalFacetSeparator(hierarchicalFacet);\n    var currentRefinement = unescapeFacetValue(\n      results._state.getHierarchicalRefinement(attribute)[0] || ''\n    );\n\n    if (currentRefinement.indexOf(hierarchicalFacet.rootPath) === 0) {\n      currentRefinement = currentRefinement.replace(\n        hierarchicalFacet.rootPath + separator,\n        ''\n      );\n    }\n\n    var currentRefinementSplit = currentRefinement.split(separator);\n    currentRefinementSplit.unshift(attribute);\n\n    setIsRefined(hierarchicalFacetValues, currentRefinementSplit, 0);\n\n    return hierarchicalFacetValues;\n  }\n\n  return undefined;\n}\n\n/**\n * Set the isRefined of a hierarchical facet result based on the current state.\n * @param {SearchResults.HierarchicalFacet} item Hierarchical facet to fix\n * @param {string[]} currentRefinement array of parts of the current hierarchical refinement\n * @param {number} depth recursion depth in the currentRefinement\n * @return {undefined} function mutates the item\n */\nfunction setIsRefined(item, currentRefinement, depth) {\n  item.isRefined =\n    item.name === (currentRefinement[depth] && currentRefinement[depth].trim());\n  if (item.data) {\n    item.data.forEach(function (child) {\n      setIsRefined(child, currentRefinement, depth + 1);\n    });\n  }\n}\n\n/**\n * Sort nodes of a hierarchical or disjunctive facet results\n * @private\n * @param {function} sortFn sort function to apply\n * @param {HierarchicalFacet|Array} node node upon which we want to apply the sort\n * @param {string[]} names attribute names\n * @param {number} [level=0] current index in the names array\n * @return {HierarchicalFacet|Array} sorted node\n */\nfunction recSort(sortFn, node, names, level) {\n  level = level || 0;\n\n  if (Array.isArray(node)) {\n    return sortFn(node, names[level]);\n  }\n\n  if (!node.data || node.data.length === 0) {\n    return node;\n  }\n\n  var children = node.data.map(function (childNode) {\n    return recSort(sortFn, childNode, names, level + 1);\n  });\n  var sortedChildren = sortFn(children, names[level]);\n  var newNode = defaultsPure({ data: sortedChildren }, node);\n  return newNode;\n}\n\nSearchResults.DEFAULT_SORT = ['isRefined:desc', 'count:desc', 'name:asc'];\n\nfunction vanillaSortFn(order, data) {\n  return data.sort(order);\n}\n\n/**\n * @typedef FacetOrdering\n * @type {Object}\n * @property {string[]} [order]\n * @property {'count' | 'alpha' | 'hidden'} [sortRemainingBy]\n */\n\n/**\n * Sorts facet arrays via their facet ordering\n * @param {Array} facetValues the values\n * @param {FacetOrdering} facetOrdering the ordering\n * @returns {Array} the sorted facet values\n */\nfunction sortViaFacetOrdering(facetValues, facetOrdering) {\n  var orderedFacets = [];\n  var remainingFacets = [];\n\n  var order = facetOrdering.order || [];\n  /**\n   * an object with the keys being the values in order, the values their index:\n   * ['one', 'two'] -> { one: 0, two: 1 }\n   */\n  var reverseOrder = order.reduce(function (acc, name, i) {\n    acc[name] = i;\n    return acc;\n  }, {});\n\n  facetValues.forEach(function (item) {\n    // hierarchical facets get sorted using their raw name\n    var name = item.path || item.name;\n    if (reverseOrder[name] !== undefined) {\n      orderedFacets[reverseOrder[name]] = item;\n    } else {\n      remainingFacets.push(item);\n    }\n  });\n\n  orderedFacets = orderedFacets.filter(function (facet) {\n    return facet;\n  });\n\n  var sortRemainingBy = facetOrdering.sortRemainingBy;\n  var ordering;\n  if (sortRemainingBy === 'hidden') {\n    return orderedFacets;\n  } else if (sortRemainingBy === 'alpha') {\n    ordering = [\n      ['path', 'name'],\n      ['asc', 'asc'],\n    ];\n  } else {\n    ordering = [['count'], ['desc']];\n  }\n\n  return orderedFacets.concat(\n    orderBy(remainingFacets, ordering[0], ordering[1])\n  );\n}\n\n/**\n * @param {SearchResults} results the search results class\n * @param {string} attribute the attribute to retrieve ordering of\n * @returns {FacetOrdering | undefined} the facet ordering\n */\nfunction getFacetOrdering(results, attribute) {\n  return (\n    results.renderingContent &&\n    results.renderingContent.facetOrdering &&\n    results.renderingContent.facetOrdering.values &&\n    results.renderingContent.facetOrdering.values[attribute]\n  );\n}\n\n/**\n * Get a the list of values for a given facet attribute. Those values are sorted\n * refinement first, descending count (bigger value on top), and name ascending\n * (alphabetical order). The sort formula can overridden using either string based\n * predicates or a function.\n *\n * This method will return all the values returned by the Algolia engine plus all\n * the values already refined. This means that it can happen that the\n * `maxValuesPerFacet` [configuration](https://www.algolia.com/doc/rest-api/search#param-maxValuesPerFacet)\n * might not be respected if you have facet values that are already refined.\n * @param {string} attribute attribute name\n * @param {object} opts configuration options.\n * @param {boolean} [opts.facetOrdering]\n * Force the use of facetOrdering from the result if a sortBy is present. If\n * sortBy isn't present, facetOrdering will be used automatically.\n * @param {Array.<string> | function} opts.sortBy\n * When using strings, it consists of\n * the name of the [FacetValue](#SearchResults.FacetValue) or the\n * [HierarchicalFacet](#SearchResults.HierarchicalFacet) attributes with the\n * order (`asc` or `desc`). For example to order the value by count, the\n * argument would be `['count:asc']`.\n *\n * If only the attribute name is specified, the ordering defaults to the one\n * specified in the default value for this attribute.\n *\n * When not specified, the order is\n * ascending.  This parameter can also be a function which takes two facet\n * values and should return a number, 0 if equal, 1 if the first argument is\n * bigger or -1 otherwise.\n *\n * The default value for this attribute `['isRefined:desc', 'count:desc', 'name:asc']`\n * @return {FacetValue[]|HierarchicalFacet|undefined} depending on the type of facet of\n * the attribute requested (hierarchical, disjunctive or conjunctive)\n * @example\n * helper.on('result', function(event){\n *   //get values ordered only by name ascending using the string predicate\n *   event.results.getFacetValues('city', {sortBy: ['name:asc']});\n *   //get values  ordered only by count ascending using a function\n *   event.results.getFacetValues('city', {\n *     // this is equivalent to ['count:asc']\n *     sortBy: function(a, b) {\n *       if (a.count === b.count) return 0;\n *       if (a.count > b.count)   return 1;\n *       if (b.count > a.count)   return -1;\n *     }\n *   });\n * });\n */\nSearchResults.prototype.getFacetValues = function (attribute, opts) {\n  var facetValues = extractNormalizedFacetValues(this, attribute);\n  if (!facetValues) {\n    return undefined;\n  }\n\n  var options = defaultsPure({}, opts, {\n    sortBy: SearchResults.DEFAULT_SORT,\n    // if no sortBy is given, attempt to sort based on facetOrdering\n    // if it is given, we still allow to sort via facet ordering first\n    facetOrdering: !(opts && opts.sortBy),\n  });\n\n  // eslint-disable-next-line consistent-this\n  var results = this;\n  var attributes;\n  if (Array.isArray(facetValues)) {\n    attributes = [attribute];\n  } else {\n    var config = results._state.getHierarchicalFacetByName(facetValues.name);\n    attributes = config.attributes;\n  }\n\n  return recSort(\n    function (data, facetName) {\n      if (options.facetOrdering) {\n        var facetOrdering = getFacetOrdering(results, facetName);\n        if (facetOrdering) {\n          return sortViaFacetOrdering(data, facetOrdering);\n        }\n      }\n\n      if (Array.isArray(options.sortBy)) {\n        var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);\n        return orderBy(data, order[0], order[1]);\n      } else if (typeof options.sortBy === 'function') {\n        return vanillaSortFn(options.sortBy, data);\n      }\n      throw new Error(\n        'options.sortBy is optional but if defined it must be ' +\n          'either an array of string (predicates) or a sorting function'\n      );\n    },\n    facetValues,\n    attributes\n  );\n};\n\n/**\n * Returns the facet stats if attribute is defined and the facet contains some.\n * Otherwise returns undefined.\n * @param {string} attribute name of the faceted attribute\n * @return {object} The stats of the facet\n */\nSearchResults.prototype.getFacetStats = function (attribute) {\n  if (this._state.isConjunctiveFacet(attribute)) {\n    return getFacetStatsIfAvailable(this.facets, attribute);\n  } else if (this._state.isDisjunctiveFacet(attribute)) {\n    return getFacetStatsIfAvailable(this.disjunctiveFacets, attribute);\n  }\n\n  return undefined;\n};\n\n/**\n * @typedef {Object} FacetListItem\n * @property {string} name\n */\n\n/**\n * @param {FacetListItem[]} facetList (has more items, but enough for here)\n * @param {string} facetName The attribute to look for\n * @return {object|undefined} The stats of the facet\n */\nfunction getFacetStatsIfAvailable(facetList, facetName) {\n  var data = find(facetList, function (facet) {\n    return facet.name === facetName;\n  });\n  return data && data.stats;\n}\n\n/**\n * Returns all refinements for all filters + tags. It also provides\n * additional information: count and exhaustiveness for each filter.\n *\n * See the [refinement type](#Refinement) for an exhaustive view of the available\n * data.\n *\n * Note that for a numeric refinement, results are grouped per operator, this\n * means that it will return responses for operators which are empty.\n *\n * @return {Array.<Refinement>} all the refinements\n */\nSearchResults.prototype.getRefinements = function () {\n  var state = this._state;\n  // eslint-disable-next-line consistent-this\n  var results = this;\n  var res = [];\n\n  Object.keys(state.facetsRefinements).forEach(function (attributeName) {\n    state.facetsRefinements[attributeName].forEach(function (name) {\n      res.push(\n        getRefinement(state, 'facet', attributeName, name, results.facets)\n      );\n    });\n  });\n\n  Object.keys(state.facetsExcludes).forEach(function (attributeName) {\n    state.facetsExcludes[attributeName].forEach(function (name) {\n      res.push(\n        getRefinement(state, 'exclude', attributeName, name, results.facets)\n      );\n    });\n  });\n\n  Object.keys(state.disjunctiveFacetsRefinements).forEach(function (\n    attributeName\n  ) {\n    state.disjunctiveFacetsRefinements[attributeName].forEach(function (name) {\n      res.push(\n        getRefinement(\n          state,\n          'disjunctive',\n          attributeName,\n          name,\n          results.disjunctiveFacets\n        )\n      );\n    });\n  });\n\n  Object.keys(state.hierarchicalFacetsRefinements).forEach(function (\n    attributeName\n  ) {\n    state.hierarchicalFacetsRefinements[attributeName].forEach(function (name) {\n      res.push(\n        getHierarchicalRefinement(\n          state,\n          attributeName,\n          name,\n          results.hierarchicalFacets\n        )\n      );\n    });\n  });\n\n  Object.keys(state.numericRefinements).forEach(function (attributeName) {\n    var operators = state.numericRefinements[attributeName];\n    Object.keys(operators).forEach(function (operator) {\n      operators[operator].forEach(function (value) {\n        res.push({\n          type: 'numeric',\n          attributeName: attributeName,\n          name: value,\n          numericValue: value,\n          operator: operator,\n        });\n      });\n    });\n  });\n\n  state.tagRefinements.forEach(function (name) {\n    res.push({ type: 'tag', attributeName: '_tags', name: name });\n  });\n\n  return res;\n};\n\n/**\n * @typedef {Object} Facet\n * @property {string} name\n * @property {Object} data\n * @property {boolean} exhaustive\n */\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} type the type of the refinement\n * @param {string} attributeName The attribute of the facet\n * @param {*} name The name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {Refinement} the refinement\n */\nfunction getRefinement(state, type, attributeName, name, resultsFacets) {\n  var facet = find(resultsFacets, function (f) {\n    return f.name === attributeName;\n  });\n  var count = facet && facet.data && facet.data[name] ? facet.data[name] : 0;\n  var exhaustive = (facet && facet.exhaustive) || false;\n\n  return {\n    type: type,\n    attributeName: attributeName,\n    name: name,\n    count: count,\n    exhaustive: exhaustive,\n  };\n}\n\n/**\n * @param {SearchParameters} state the current state\n * @param {string} attributeName the attribute of the hierarchical facet\n * @param {string} name the name of the facet\n * @param {Facet[]} resultsFacets facets from the results\n * @return {HierarchicalFacet} the hierarchical facet\n */\nfunction getHierarchicalRefinement(state, attributeName, name, resultsFacets) {\n  var facetDeclaration = state.getHierarchicalFacetByName(attributeName);\n  var separator = state._getHierarchicalFacetSeparator(facetDeclaration);\n  var split = name.split(separator);\n  var rootFacet = find(resultsFacets, function (facet) {\n    return facet.name === attributeName;\n  });\n\n  var facet = split.reduce(function (intermediateFacet, part) {\n    var newFacet =\n      intermediateFacet &&\n      find(intermediateFacet.data, function (f) {\n        return f.name === part;\n      });\n    return newFacet !== undefined ? newFacet : intermediateFacet;\n  }, rootFacet);\n\n  var count = (facet && facet.count) || 0;\n  var exhaustive = (facet && facet.exhaustive) || false;\n  var path = (facet && facet.path) || '';\n\n  return {\n    type: 'hierarchical',\n    attributeName: attributeName,\n    name: path,\n    count: count,\n    exhaustive: exhaustive,\n  };\n}\n\nmodule.exports = SearchResults;\n", "// @MAJOR: remove this function and use Array.prototype.flat\nmodule.exports = function flat(arr) {\n  return arr.reduce(function (acc, val) {\n    return acc.concat(val);\n  }, []);\n};\n", "'use strict';\n\nvar find = require('../functions/find');\nvar flat = require('../functions/flat');\n\nfunction getAverageIndices(indexTracker, nrOfObjs) {\n  var avgIndices = [];\n\n  Object.keys(indexTracker).forEach(function (key) {\n    if (indexTracker[key].count < 2) {\n      indexTracker[key].indexSum += 100;\n    }\n    avgIndices.push({\n      objectID: key,\n      avgOfIndices: indexTracker[key].indexSum / nrOfObjs,\n    });\n  });\n\n  return avgIndices.sort(function (a, b) {\n    return a.avgOfIndices > b.avgOfIndices ? 1 : -1;\n  });\n}\n\nfunction sortAndMergeRecommendations(results) {\n  var indexTracker = {};\n\n  results.forEach(function (hits) {\n    hits.forEach(function (hit, index) {\n      if (!indexTracker[hit.objectID]) {\n        indexTracker[hit.objectID] = { indexSum: index, count: 1 };\n      } else {\n        indexTracker[hit.objectID] = {\n          indexSum: indexTracker[hit.objectID].indexSum + index,\n          count: indexTracker[hit.objectID].count + 1,\n        };\n      }\n    });\n  });\n\n  var sortedAverageIndices = getAverageIndices(indexTracker, results.length);\n\n  var finalOrder = sortedAverageIndices.reduce(function (\n    orderedHits,\n    avgIndexRef\n  ) {\n    var result = find(flat(results), function (hit) {\n      return hit.objectID === avgIndexRef.objectID;\n    });\n    return result ? orderedHits.concat(result) : orderedHits;\n  },\n  []);\n\n  return finalOrder;\n}\n\nmodule.exports = sortAndMergeRecommendations;\n", "'use strict';\n\nmodule.exports = '3.20.0';\n", "'use strict';\n\nvar EventEmitter = require('@algolia/events');\n\nvar DerivedHelper = require('./DerivedHelper');\nvar escapeFacetValue = require('./functions/escapeFacetValue').escapeFacetValue;\nvar inherits = require('./functions/inherits');\nvar merge = require('./functions/merge');\nvar objectHasKeys = require('./functions/objectHasKeys');\nvar omit = require('./functions/omit');\nvar RecommendParameters = require('./RecommendParameters');\nvar RecommendResults = require('./RecommendResults');\nvar requestBuilder = require('./requestBuilder');\nvar SearchParameters = require('./SearchParameters');\nvar SearchResults = require('./SearchResults');\nvar sortAndMergeRecommendations = require('./utils/sortAndMergeRecommendations');\nvar version = require('./version');\n\n/**\n * Event triggered when a parameter is set or updated\n * @event AlgoliaSearchHelper#event:change\n * @property {object} event\n * @property {SearchParameters} event.state the current parameters with the latest changes applied\n * @property {SearchResults} event.results the previous results received from Algolia. `null` before the first request\n * @example\n * helper.on('change', function(event) {\n *   console.log('The parameters have changed');\n * });\n */\n\n/**\n * Event triggered when a main search is sent to Algolia\n * @event AlgoliaSearchHelper#event:search\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search\n * @property {SearchResults} event.results the results from the previous search. `null` if it is the first search.\n * @example\n * helper.on('search', function(event) {\n *   console.log('Search sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchForFacetValues` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchForFacetValues\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @property {string} event.facet the facet searched into\n * @property {string} event.query the query used to search in the facets\n * @example\n * helper.on('searchForFacetValues', function(event) {\n *   console.log('searchForFacetValues sent');\n * });\n */\n\n/**\n * Event triggered when a search using `searchOnce` is sent to Algolia\n * @event AlgoliaSearchHelper#event:searchOnce\n * @property {object} event\n * @property {SearchParameters} event.state the parameters used for this search it is the first search.\n * @example\n * helper.on('searchOnce', function(event) {\n *   console.log('searchOnce sent');\n * });\n */\n\n/**\n * Event triggered when the results are retrieved from Algolia\n * @event AlgoliaSearchHelper#event:result\n * @property {object} event\n * @property {SearchResults} event.results the results received from Algolia\n * @property {SearchParameters} event.state the parameters used to query Algolia. Those might be different from the one in the helper instance (for example if the network is unreliable).\n * @example\n * helper.on('result', function(event) {\n *   console.log('Search results received');\n * });\n */\n\n/**\n * Event triggered when Algolia sends back an error. For example, if an unknown parameter is\n * used, the error can be caught using this event.\n * @event AlgoliaSearchHelper#event:error\n * @property {object} event\n * @property {Error} event.error the error returned by the Algolia.\n * @example\n * helper.on('error', function(event) {\n *   console.log('Houston we got a problem.');\n * });\n */\n\n/**\n * Event triggered when the queue of queries have been depleted (with any result or outdated queries)\n * @event AlgoliaSearchHelper#event:searchQueueEmpty\n * @example\n * helper.on('searchQueueEmpty', function() {\n *   console.log('No more search pending');\n *   // This is received before the result event if we're not expecting new results\n * });\n *\n * helper.search();\n */\n\n/**\n * Initialize a new AlgoliaSearchHelper\n * @class\n * @classdesc The AlgoliaSearchHelper is a class that ease the management of the\n * search. It provides an event based interface for search callbacks:\n *  - change: when the internal search state is changed.\n *    This event contains a {@link SearchParameters} object and the\n *    {@link SearchResults} of the last result if any.\n *  - search: when a search is triggered using the `search()` method.\n *  - result: when the response is retrieved from Algolia and is processed.\n *    This event contains a {@link SearchResults} object and the\n *    {@link SearchParameters} corresponding to this answer.\n *  - error: when the response is an error. This event contains the error returned by the server.\n * @param  {AlgoliaSearch} client an AlgoliaSearch client\n * @param  {string} index the index name to query\n * @param  {SearchParameters | object} options an object defining the initial\n * config of the search. It doesn't have to be a {SearchParameters},\n * just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n */\nfunction AlgoliaSearchHelper(client, index, options, searchResultsOptions) {\n  if (typeof client.addAlgoliaAgent === 'function') {\n    client.addAlgoliaAgent('JS Helper (' + version + ')');\n  }\n\n  this.setClient(client);\n  var opts = options || {};\n  opts.index = index;\n  this.state = SearchParameters.make(opts);\n  this.recommendState = new RecommendParameters({\n    params: opts.recommendState,\n  });\n  this.lastResults = null;\n  this.lastRecommendResults = null;\n  this._queryId = 0;\n  this._recommendQueryId = 0;\n  this._lastQueryIdReceived = -1;\n  this._lastRecommendQueryIdReceived = -1;\n  this.derivedHelpers = [];\n  this._currentNbQueries = 0;\n  this._currentNbRecommendQueries = 0;\n  this._searchResultsOptions = searchResultsOptions;\n  this.recommendCache = {};\n}\n\ninherits(AlgoliaSearchHelper, EventEmitter);\n\n/**\n * Start the search with the parameters set in the state. When the\n * method is called, it triggers a `search` event. The results will\n * be available through the `result` event. If an error occurs, an\n * `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires search\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.search = function () {\n  this._search({ onlyWithDerivedHelpers: false });\n  return this;\n};\n\nAlgoliaSearchHelper.prototype.searchOnlyWithDerivedHelpers = function () {\n  this._search({ onlyWithDerivedHelpers: true });\n  return this;\n};\n\n/**\n * Sends the recommendation queries set in the state. When the method is\n * called, it triggers a `fetch` event. The results will be available through\n * the `result` event. If an error occurs, an `error` will be fired instead.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires fetch\n * @fires result\n * @fires error\n * @chainable\n */\nAlgoliaSearchHelper.prototype.recommend = function () {\n  this._recommend();\n  return this;\n};\n\n/**\n * Gets the search query parameters that would be sent to the Algolia Client\n * for the hits\n * @return {object} Query Parameters\n */\nAlgoliaSearchHelper.prototype.getQuery = function () {\n  var state = this.state;\n  return requestBuilder._getHitsSearchParams(state);\n};\n\n/**\n * Start a search using a modified version of the current state. This method does\n * not trigger the helper lifecycle and does not modify the state kept internally\n * by the helper. This second aspect means that the next search call will be the\n * same as a search call before calling searchOnce.\n * @param {object} options can contain all the parameters that can be set to SearchParameters\n * plus the index\n * @param {function} [cb] optional callback executed when the response from the\n * server is back.\n * @return {promise|undefined} if a callback is passed the method returns undefined\n * otherwise it returns a promise containing an object with two keys :\n *  - content with a SearchResults\n *  - state with the state used for the query as a SearchParameters\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the callback API\n * var state = helper.searchOnce({hitsPerPage: 1},\n *   function(error, content, state) {\n *     // if an error occurred it will be passed in error, otherwise its value is null\n *     // content contains the results formatted as a SearchResults\n *     // state is the instance of SearchParameters used for this search\n *   });\n * @example\n * // Changing the number of records returned per page to 1\n * // This example uses the promise API\n * var state1 = helper.searchOnce({hitsPerPage: 1})\n *                 .then(promiseHandler);\n *\n * function promiseHandler(res) {\n *   // res contains\n *   // {\n *   //   content : SearchResults\n *   //   state   : SearchParameters (the one used for this specific search)\n *   // }\n * }\n */\nAlgoliaSearchHelper.prototype.searchOnce = function (options, cb) {\n  var tempState = !options\n    ? this.state\n    : this.state.setQueryParameters(options);\n  var queries = requestBuilder._getQueries(tempState.index, tempState);\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  this._currentNbQueries++;\n\n  this.emit('searchOnce', {\n    state: tempState,\n  });\n\n  if (cb) {\n    this.client\n      .search(queries)\n      .then(function (content) {\n        self._currentNbQueries--;\n        if (self._currentNbQueries === 0) {\n          self.emit('searchQueueEmpty');\n        }\n\n        cb(null, new SearchResults(tempState, content.results), tempState);\n      })\n      .catch(function (err) {\n        self._currentNbQueries--;\n        if (self._currentNbQueries === 0) {\n          self.emit('searchQueueEmpty');\n        }\n\n        cb(err, null, tempState);\n      });\n\n    return undefined;\n  }\n\n  return this.client.search(queries).then(\n    function (content) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n      return {\n        content: new SearchResults(tempState, content.results),\n        state: tempState,\n        _originalResponse: content,\n      };\n    },\n    function (e) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n      throw e;\n    }\n  );\n};\n\n/**\n * Start the search for answers with the parameters set in the state.\n * This method returns a promise.\n * @param {Object} options - the options for answers API call\n * @param {string[]} options.attributesForPrediction - Attributes to use for predictions. If empty, `searchableAttributes` is used instead.\n * @param {string[]} options.queryLanguages - The languages in the query. Currently only supports ['en'].\n * @param {number} options.nbHits - Maximum number of answers to retrieve from the Answers Engine. Cannot be greater than 1000.\n *\n * @return {promise} the answer results\n * @deprecated answers is deprecated and will be replaced with new initiatives\n */\nAlgoliaSearchHelper.prototype.findAnswers = function (options) {\n  // eslint-disable-next-line no-console\n  console.warn('[algoliasearch-helper] answers is no longer supported');\n  var state = this.state;\n  var derivedHelper = this.derivedHelpers[0];\n  if (!derivedHelper) {\n    return Promise.resolve([]);\n  }\n  var derivedState = derivedHelper.getModifiedState(state);\n  var data = merge(\n    {\n      attributesForPrediction: options.attributesForPrediction,\n      nbHits: options.nbHits,\n    },\n    {\n      params: omit(requestBuilder._getHitsSearchParams(derivedState), [\n        'attributesToSnippet',\n        'hitsPerPage',\n        'restrictSearchableAttributes',\n        'snippetEllipsisText',\n      ]),\n    }\n  );\n\n  var errorMessage =\n    'search for answers was called, but this client does not have a function client.initIndex(index).findAnswers';\n  if (typeof this.client.initIndex !== 'function') {\n    throw new Error(errorMessage);\n  }\n  var index = this.client.initIndex(derivedState.index);\n  if (typeof index.findAnswers !== 'function') {\n    throw new Error(errorMessage);\n  }\n  return index.findAnswers(derivedState.query, options.queryLanguages, data);\n};\n\n/**\n * Structure of each result when using\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * @typedef FacetSearchHit\n * @type {object}\n * @property {string} value the facet value\n * @property {string} highlighted the facet value highlighted with the query string\n * @property {number} count number of occurrence of this facet value\n * @property {boolean} isRefined true if the value is already refined\n */\n\n/**\n * Structure of the data resolved by the\n * [`searchForFacetValues()`](reference.html#AlgoliaSearchHelper#searchForFacetValues)\n * promise.\n * @typedef FacetSearchResult\n * @type {object}\n * @property {FacetSearchHit} facetHits the results for this search for facet values\n * @property {number} processingTimeMS time taken by the query inside the engine\n */\n\n/**\n * Search for facet values based on an query and the name of a faceted attribute. This\n * triggers a search and will return a promise. On top of using the query, it also sends\n * the parameters from the state so that the search is narrowed down to only the possible values.\n *\n * See the description of [FacetSearchResult](reference.html#FacetSearchResult)\n * @param {string} facet the name of the faceted attribute\n * @param {string} query the string query for the search\n * @param {number} [maxFacetHits] the maximum number values returned. Should be > 0 and <= 100\n * @param {object} [userState] the set of custom parameters to use on top of the current state. Setting a property to `undefined` removes\n * it in the generated query.\n * @return {promise.<FacetSearchResult>} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForFacetValues = function (\n  facet,\n  query,\n  maxFacetHits,\n  userState\n) {\n  var clientHasSFFV = typeof this.client.searchForFacetValues === 'function';\n  var clientHasInitIndex = typeof this.client.initIndex === 'function';\n  if (\n    !clientHasSFFV &&\n    !clientHasInitIndex &&\n    typeof this.client.search !== 'function'\n  ) {\n    throw new Error(\n      'search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues'\n    );\n  }\n\n  var state = this.state.setQueryParameters(userState || {});\n  var isDisjunctive = state.isDisjunctiveFacet(facet);\n  var algoliaQuery = requestBuilder.getSearchForFacetQuery(\n    facet,\n    query,\n    maxFacetHits,\n    state\n  );\n\n  this._currentNbQueries++;\n  // eslint-disable-next-line consistent-this\n  var self = this;\n  var searchForFacetValuesPromise;\n  // newer algoliasearch ^3.27.1 - ~4.0.0\n  if (clientHasSFFV) {\n    searchForFacetValuesPromise = this.client.searchForFacetValues([\n      { indexName: state.index, params: algoliaQuery },\n    ]);\n    // algoliasearch < 3.27.1\n  } else if (clientHasInitIndex) {\n    searchForFacetValuesPromise = this.client\n      .initIndex(state.index)\n      .searchForFacetValues(algoliaQuery);\n    // algoliasearch ~5.0.0\n  } else {\n    // @MAJOR only use client.search\n    delete algoliaQuery.facetName;\n    searchForFacetValuesPromise = this.client\n      .search([\n        {\n          type: 'facet',\n          facet: facet,\n          indexName: state.index,\n          params: algoliaQuery,\n        },\n      ])\n      .then(function processResponse(response) {\n        return response.results[0];\n      });\n  }\n\n  this.emit('searchForFacetValues', {\n    state: state,\n    facet: facet,\n    query: query,\n  });\n\n  return searchForFacetValuesPromise.then(\n    function addIsRefined(content) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n\n      content = Array.isArray(content) ? content[0] : content;\n\n      content.facetHits.forEach(function (f) {\n        f.escapedValue = escapeFacetValue(f.value);\n        f.isRefined = isDisjunctive\n          ? state.isDisjunctiveFacetRefined(facet, f.escapedValue)\n          : state.isFacetRefined(facet, f.escapedValue);\n      });\n\n      return content;\n    },\n    function (e) {\n      self._currentNbQueries--;\n      if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n      throw e;\n    }\n  );\n};\n\n/**\n * Sets the text query used for the search.\n *\n * This method resets the current page to 0.\n * @param  {string} q the user query\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setQuery = function (q) {\n  this._change({\n    state: this.state.resetPage().setQuery(q),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Remove all the types of refinements except tags. A string can be provided to remove\n * only the refinements of a specific attribute. For more advanced use case, you can\n * provide a function instead. This function should follow the\n * [clearCallback definition](#SearchParameters.clearCallback).\n *\n * This method resets the current page to 0.\n * @param {string} [name] optional name of the facet / attribute on which we want to remove all refinements\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * // Removing all the refinements\n * helper.clearRefinements().search();\n * @example\n * // Removing all the filters on a the category attribute.\n * helper.clearRefinements('category').search();\n * @example\n * // Removing only the exclude filters on the category facet.\n * helper.clearRefinements(function(value, attribute, type) {\n *   return type === 'exclude' && attribute === 'category';\n * }).search();\n */\nAlgoliaSearchHelper.prototype.clearRefinements = function (name) {\n  this._change({\n    state: this.state.resetPage().clearRefinements(name),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Remove all the tag filters.\n *\n * This method resets the current page to 0.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.clearTags = function () {\n  this._change({\n    state: this.state.resetPage().clearTags(),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function (\n  facet,\n  value\n) {\n  this._change({\n    state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveRefine = function () {\n  return this.addDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a refinement on a hierarchical facet. It will throw\n * an exception if the facet is not defined or if the facet\n * is already refined.\n *\n * This method resets the current page to 0.\n * @param {string} facet the facet name\n * @param {string} path the hierarchical facet path\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is refined\n * @chainable\n * @fires change\n */\nAlgoliaSearchHelper.prototype.addHierarchicalFacetRefinement = function (\n  facet,\n  path\n) {\n  this._change({\n    state: this.state.resetPage().addHierarchicalFacetRefinement(facet, path),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} attribute the attribute on which the numeric filter applies\n * @param  {string} operator the operator of the filter\n * @param  {number} value the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function (\n  attribute,\n  operator,\n  value\n) {\n  this._change({\n    state: this.state\n      .resetPage()\n      .addNumericRefinement(attribute, operator, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetRefinement = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().addFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.addRefine = function () {\n  return this.addFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds a an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value (will be converted to string)\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFacetExclusion = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().addExcludeRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#addFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.addExclude = function () {\n  return this.addFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds a tag filter with the `tag` provided. If the\n * filter is already set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag the tag to add to the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTag = function (tag) {\n  this._change({\n    state: this.state.resetPage().addTagRefinement(tag),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"frequently bought together\" recommendation query.\n *\n * @param {FrequentlyBoughtTogetherQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addFrequentlyBoughtTogether = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addFrequentlyBoughtTogether(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"related products\" recommendation query.\n *\n * @param {RelatedProductsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addRelatedProducts = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addRelatedProducts(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"trending items\" recommendation query.\n *\n * @param {TrendingItemsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingItems = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addTrendingItems(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"trending facets\" recommendation query.\n *\n * @param {TrendingFacetsQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addTrendingFacets = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addTrendingFacets(params),\n  });\n\n  return this;\n};\n\n/**\n * Adds a \"looking similar\" recommendation query.\n *\n * @param {LookingSimilarQuery} params the parameters for the recommendation\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addLookingSimilar = function (params) {\n  this._recommendChange({\n    state: this.recommendState.addLookingSimilar(params),\n  });\n\n  return this;\n};\n\n/**\n * Removes an numeric filter to an attribute with the `operator` and `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * Some parameters are optional, triggering different behavior:\n *  - if the value is not provided, then all the numeric value will be removed for the\n *  specified attribute/operator couple.\n *  - if the operator is not provided either, then all the numeric filter on this attribute\n *  will be removed.\n *\n * This method resets the current page to 0.\n * @param  {string} attribute the attribute on which the numeric filter applies\n * @param  {string} [operator] the operator of the filter\n * @param  {number} [value] the value of the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function (\n  attribute,\n  operator,\n  value\n) {\n  this._change({\n    state: this.state\n      .resetPage()\n      .removeNumericRefinement(attribute, operator, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Removes a disjunctive filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function (\n  facet,\n  value\n) {\n  this._change({\n    state: this.state\n      .resetPage()\n      .removeDisjunctiveFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeDisjunctiveFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveRefine = function () {\n  return this.removeDisjunctiveFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes the refinement set on a hierarchical facet.\n * @param {string} facet the facet name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error if the facet is not defined or if the facet is not refined\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeHierarchicalFacetRefinement = function (\n  facet\n) {\n  this._change({\n    state: this.state.resetPage().removeHierarchicalFacetRefinement(facet),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Removes a filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetRefinement = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().removeFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.removeRefine = function () {\n  return this.removeFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Removes an exclusion filter to a faceted attribute with the `value` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * If the value is omitted, then this method will remove all the filters for the\n * attribute.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} [value] the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFacetExclusion = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().removeExcludeRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#removeFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.removeExclude = function () {\n  return this.removeFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Removes a tag filter with the `tag` provided. If the\n * filter is not set, it doesn't change the filters.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove from the filter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTag = function (tag) {\n  this._change({\n    state: this.state.resetPage().removeTagRefinement(tag),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"frequently bought together\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeFrequentlyBoughtTogether = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"related products\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeRelatedProducts = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"trending items\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingItems = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"trending facets\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeTrendingFacets = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Removes a \"looking similar\" recommendation query.\n *\n * @param {number} id identifier of the recommendation widget\n * @returns {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeLookingSimilar = function (id) {\n  this._recommendChange({\n    state: this.recommendState.removeParams(id),\n  });\n\n  return this;\n};\n\n/**\n * Adds or removes an exclusion filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetExclusion = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().toggleExcludeFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetExclusion}\n */\nAlgoliaSearchHelper.prototype.toggleExclude = function () {\n  return this.toggleFacetExclusion.apply(this, arguments);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n * @deprecated since version 2.19.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefinement = function (facet, value) {\n  return this.toggleFacetRefinement(facet, value);\n};\n\n/**\n * Adds or removes a filter to a faceted attribute with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method can be used for conjunctive, disjunctive and hierarchical filters.\n *\n * This method resets the current page to 0.\n * @param  {string} facet the facet to refine\n * @param  {string} value the associated value\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @throws Error will throw an error if the facet is not declared in the settings of the helper\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleFacetRefinement = function (facet, value) {\n  this._change({\n    state: this.state.resetPage().toggleFacetRefinement(facet, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since version 2.4.0, see {@link AlgoliaSearchHelper#toggleFacetRefinement}\n */\nAlgoliaSearchHelper.prototype.toggleRefine = function () {\n  return this.toggleFacetRefinement.apply(this, arguments);\n};\n\n/**\n * Adds or removes a tag filter with the `value` provided. If\n * the value is set then it removes it, otherwise it adds the filter.\n *\n * This method resets the current page to 0.\n * @param {string} tag tag to remove or add\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.toggleTag = function (tag) {\n  this._change({\n    state: this.state.resetPage().toggleTagRefinement(tag),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Increments the page number by one.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setPage(0).nextPage().getPage();\n * // returns 1\n */\nAlgoliaSearchHelper.prototype.nextPage = function () {\n  var page = this.state.page || 0;\n  return this.setPage(page + 1);\n};\n\n/**\n * Decrements the page number by one.\n * @fires change\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @example\n * helper.setPage(1).previousPage().getPage();\n * // returns 0\n */\nAlgoliaSearchHelper.prototype.previousPage = function () {\n  var page = this.state.page || 0;\n  return this.setPage(page - 1);\n};\n\n/**\n * @private\n * @param {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @chainable\n * @fires change\n */\nfunction setCurrentPage(page) {\n  if (page < 0) throw new Error('Page requested below 0.');\n\n  this._change({\n    state: this.state.setPage(page),\n    isPageReset: false,\n  });\n\n  return this;\n}\n\n/**\n * Change the current page\n * @deprecated\n * @param  {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setCurrentPage = setCurrentPage;\n\n/**\n * Updates the current page.\n * @function\n * @param  {number} page The page number\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setPage = setCurrentPage;\n\n/**\n * Updates the name of the index that will be targeted by the query.\n *\n * This method resets the current page to 0.\n * @param {string} name the index name\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setIndex = function (name) {\n  this._change({\n    state: this.state.resetPage().setIndex(name),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Update a parameter of the search. This method reset the page\n *\n * The complete list of parameters is available on the\n * [Algolia website](https://www.algolia.com/doc/rest#query-an-index).\n * The most commonly used parameters have their own [shortcuts](#query-parameters-shortcuts)\n * or benefit from higher-level APIs (all the kind of filters and facets have their own API)\n *\n * This method resets the current page to 0.\n * @param {string} parameter name of the parameter to update\n * @param {any} value new value of the parameter\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n * @example\n * helper.setQueryParameter('hitsPerPage', 20).search();\n */\nAlgoliaSearchHelper.prototype.setQueryParameter = function (parameter, value) {\n  this._change({\n    state: this.state.resetPage().setQueryParameter(parameter, value),\n    isPageReset: true,\n  });\n\n  return this;\n};\n\n/**\n * Set the whole state (warning: will erase previous state)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.setState = function (newState) {\n  this._change({\n    state: SearchParameters.make(newState),\n    isPageReset: false,\n  });\n\n  return this;\n};\n\n/**\n * Override the current state without triggering a change event.\n * Do not use this method unless you know what you are doing. (see the example\n * for a legit use case)\n * @param {SearchParameters} newState the whole new state\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n * @example\n *  helper.on('change', function(state){\n *    // In this function you might want to find a way to store the state in the url/history\n *    updateYourURL(state)\n *  })\n *  window.onpopstate = function(event){\n *    // This is naive though as you should check if the state is really defined etc.\n *    helper.overrideStateWithoutTriggeringChangeEvent(event.state).search()\n *  }\n * @chainable\n */\nAlgoliaSearchHelper.prototype.overrideStateWithoutTriggeringChangeEvent =\n  function (newState) {\n    this.state = new SearchParameters(newState);\n    return this;\n  };\n\n/**\n * Check if an attribute has any numeric, conjunctive, disjunctive or hierarchical filters.\n * @param {string} attribute the name of the attribute\n * @return {boolean} true if the attribute is filtered by at least one value\n * @example\n * // hasRefinements works with numeric, conjunctive, disjunctive and hierarchical filters\n * helper.hasRefinements('price'); // false\n * helper.addNumericRefinement('price', '>', 100);\n * helper.hasRefinements('price'); // true\n *\n * helper.hasRefinements('color'); // false\n * helper.addFacetRefinement('color', 'blue');\n * helper.hasRefinements('color'); // true\n *\n * helper.hasRefinements('material'); // false\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * helper.hasRefinements('material'); // true\n *\n * helper.hasRefinements('categories'); // false\n * helper.toggleFacetRefinement('categories', 'kitchen > knife');\n * helper.hasRefinements('categories'); // true\n *\n */\nAlgoliaSearchHelper.prototype.hasRefinements = function (attribute) {\n  if (objectHasKeys(this.state.getNumericRefinements(attribute))) {\n    return true;\n  } else if (this.state.isConjunctiveFacet(attribute)) {\n    return this.state.isFacetRefined(attribute);\n  } else if (this.state.isDisjunctiveFacet(attribute)) {\n    return this.state.isDisjunctiveFacetRefined(attribute);\n  } else if (this.state.isHierarchicalFacet(attribute)) {\n    return this.state.isHierarchicalFacetRefined(attribute);\n  }\n\n  // there's currently no way to know that the user did call `addNumericRefinement` at some point\n  // thus we cannot distinguish if there once was a numeric refinement that was cleared\n  // so we will return false in every other situations to be consistent\n  // while what we should do here is throw because we did not find the attribute in any type\n  // of refinement\n  return false;\n};\n\n/**\n * Check if a value is excluded for a specific faceted attribute. If the value\n * is omitted then the function checks if there is any excluding refinements.\n *\n * @param  {string}  facet name of the attribute for used for faceting\n * @param  {string}  [value] optional value. If passed will test that this value\n * is filtering the given facet.\n * @return {boolean} true if refined\n * @example\n * helper.isExcludeRefined('color'); // false\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // false\n *\n * helper.addFacetExclusion('color', 'red');\n *\n * helper.isExcludeRefined('color'); // true\n * helper.isExcludeRefined('color', 'blue') // false\n * helper.isExcludeRefined('color', 'red') // true\n */\nAlgoliaSearchHelper.prototype.isExcluded = function (facet, value) {\n  return this.state.isExcludeRefined(facet, value);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasRefinements}\n */\nAlgoliaSearchHelper.prototype.isDisjunctiveRefined = function (facet, value) {\n  return this.state.isDisjunctiveFacetRefined(facet, value);\n};\n\n/**\n * Check if the string is a currently filtering tag.\n * @param {string} tag tag to check\n * @return {boolean} true if the tag is currently refined\n */\nAlgoliaSearchHelper.prototype.hasTag = function (tag) {\n  return this.state.isTagRefined(tag);\n};\n\n// eslint-disable-next-line valid-jsdoc\n/**\n * @deprecated since 2.4.0, see {@link AlgoliaSearchHelper#hasTag}\n */\nAlgoliaSearchHelper.prototype.isTagRefined = function () {\n  return this.hasTagRefinements.apply(this, arguments);\n};\n\n/**\n * Get the name of the currently used index.\n * @return {string} name of the index\n * @example\n * helper.setIndex('highestPrice_products').getIndex();\n * // returns 'highestPrice_products'\n */\nAlgoliaSearchHelper.prototype.getIndex = function () {\n  return this.state.index;\n};\n\nfunction getCurrentPage() {\n  return this.state.page;\n}\n\n/**\n * Get the currently selected page\n * @deprecated\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getCurrentPage = getCurrentPage;\n/**\n * Get the currently selected page\n * @function\n * @return {number} the current page\n */\nAlgoliaSearchHelper.prototype.getPage = getCurrentPage;\n\n/**\n * Get all the tags currently set to filters the results.\n *\n * @return {string[]} The list of tags currently set.\n */\nAlgoliaSearchHelper.prototype.getTags = function () {\n  return this.state.tagRefinements;\n};\n\n/**\n * Get the list of refinements for a given attribute. This method works with\n * conjunctive, disjunctive, excluding and numerical filters.\n *\n * See also SearchResults#getRefinements\n *\n * @param {string} facetName attribute name used for faceting\n * @return {Array.<FacetRefinement|NumericRefinement>} All Refinement are objects that contain a value, and\n * a type. Numeric also contains an operator.\n * @example\n * helper.addNumericRefinement('price', '>', 100);\n * helper.getRefinements('price');\n * // [\n * //   {\n * //     \"value\": [\n * //       100\n * //     ],\n * //     \"operator\": \">\",\n * //     \"type\": \"numeric\"\n * //   }\n * // ]\n * @example\n * helper.addFacetRefinement('color', 'blue');\n * helper.addFacetExclusion('color', 'red');\n * helper.getRefinements('color');\n * // [\n * //   {\n * //     \"value\": \"blue\",\n * //     \"type\": \"conjunctive\"\n * //   },\n * //   {\n * //     \"value\": \"red\",\n * //     \"type\": \"exclude\"\n * //   }\n * // ]\n * @example\n * helper.addDisjunctiveFacetRefinement('material', 'plastic');\n * // [\n * //   {\n * //     \"value\": \"plastic\",\n * //     \"type\": \"disjunctive\"\n * //   }\n * // ]\n */\nAlgoliaSearchHelper.prototype.getRefinements = function (facetName) {\n  var refinements = [];\n\n  if (this.state.isConjunctiveFacet(facetName)) {\n    var conjRefinements = this.state.getConjunctiveRefinements(facetName);\n\n    conjRefinements.forEach(function (r) {\n      refinements.push({\n        value: r,\n        type: 'conjunctive',\n      });\n    });\n\n    var excludeRefinements = this.state.getExcludeRefinements(facetName);\n\n    excludeRefinements.forEach(function (r) {\n      refinements.push({\n        value: r,\n        type: 'exclude',\n      });\n    });\n  } else if (this.state.isDisjunctiveFacet(facetName)) {\n    var disjunctiveRefinements =\n      this.state.getDisjunctiveRefinements(facetName);\n\n    disjunctiveRefinements.forEach(function (r) {\n      refinements.push({\n        value: r,\n        type: 'disjunctive',\n      });\n    });\n  }\n\n  var numericRefinements = this.state.getNumericRefinements(facetName);\n\n  Object.keys(numericRefinements).forEach(function (operator) {\n    var value = numericRefinements[operator];\n\n    refinements.push({\n      value: value,\n      operator: operator,\n      type: 'numeric',\n    });\n  });\n\n  return refinements;\n};\n\n/**\n * Return the current refinement for the (attribute, operator)\n * @param {string} attribute attribute in the record\n * @param {string} operator operator applied on the refined values\n * @return {Array.<number|number[]>} refined values\n */\nAlgoliaSearchHelper.prototype.getNumericRefinement = function (\n  attribute,\n  operator\n) {\n  return this.state.getNumericRefinement(attribute, operator);\n};\n\n/**\n * Get the current breadcrumb for a hierarchical facet, as an array\n * @param  {string} facetName Hierarchical facet name\n * @return {array.<string>} the path as an array of string\n */\nAlgoliaSearchHelper.prototype.getHierarchicalFacetBreadcrumb = function (\n  facetName\n) {\n  return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @param {object} options options for the query\n * @param {boolean} [options.onlyWithDerivedHelpers=false] if true, only the derived helpers will be queried\n * @return {undefined} does not return anything\n * @fires search\n * @fires result\n * @fires error\n */\nAlgoliaSearchHelper.prototype._search = function (options) {\n  var state = this.state;\n  var states = [];\n  var mainQueries = [];\n\n  if (!options.onlyWithDerivedHelpers) {\n    mainQueries = requestBuilder._getQueries(state.index, state);\n\n    states.push({\n      state: state,\n      queriesCount: mainQueries.length,\n      helper: this,\n    });\n\n    this.emit('search', {\n      state: state,\n      results: this.lastResults,\n    });\n  }\n\n  var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n    var derivedState = derivedHelper.getModifiedState(state);\n    var derivedStateQueries = derivedState.index\n      ? requestBuilder._getQueries(derivedState.index, derivedState)\n      : [];\n\n    states.push({\n      state: derivedState,\n      queriesCount: derivedStateQueries.length,\n      helper: derivedHelper,\n    });\n\n    derivedHelper.emit('search', {\n      state: derivedState,\n      results: derivedHelper.lastResults,\n    });\n\n    return derivedStateQueries;\n  });\n\n  var queries = Array.prototype.concat.apply(mainQueries, derivedQueries);\n\n  var queryId = this._queryId++;\n  this._currentNbQueries++;\n\n  if (!queries.length) {\n    return Promise.resolve({ results: [] }).then(\n      this._dispatchAlgoliaResponse.bind(this, states, queryId)\n    );\n  }\n\n  try {\n    this.client\n      .search(queries)\n      .then(this._dispatchAlgoliaResponse.bind(this, states, queryId))\n      .catch(this._dispatchAlgoliaError.bind(this, queryId));\n  } catch (error) {\n    // If we reach this part, we're in an internal error state\n    this.emit('error', {\n      error: error,\n    });\n  }\n\n  return undefined;\n};\n\nAlgoliaSearchHelper.prototype._recommend = function () {\n  var searchState = this.state;\n  var recommendState = this.recommendState;\n  var index = this.getIndex();\n  var states = [{ state: recommendState, index: index, helper: this }];\n  var ids = recommendState.params.map(function (param) {\n    return param.$$id;\n  });\n\n  this.emit('fetch', {\n    recommend: {\n      state: recommendState,\n      results: this.lastRecommendResults,\n    },\n  });\n\n  var cache = this.recommendCache;\n\n  var derivedQueries = this.derivedHelpers.map(function (derivedHelper) {\n    var derivedIndex = derivedHelper.getModifiedState(searchState).index;\n    if (!derivedIndex) {\n      return [];\n    }\n\n    // Contrary to what is done when deriving the search state, we don't want to\n    // provide the current recommend state to the derived helper, as it would\n    // inherit unwanted queries. We instead provide an empty recommend state.\n    var derivedState = derivedHelper.getModifiedRecommendState(\n      new RecommendParameters()\n    );\n    states.push({\n      state: derivedState,\n      index: derivedIndex,\n      helper: derivedHelper,\n    });\n\n    ids = Array.prototype.concat.apply(\n      ids,\n      derivedState.params.map(function (param) {\n        return param.$$id;\n      })\n    );\n\n    derivedHelper.emit('fetch', {\n      recommend: {\n        state: derivedState,\n        results: derivedHelper.lastRecommendResults,\n      },\n    });\n\n    return derivedState._buildQueries(derivedIndex, cache);\n  });\n\n  var queries = Array.prototype.concat.apply(\n    this.recommendState._buildQueries(index, cache),\n    derivedQueries\n  );\n\n  if (queries.length === 0) {\n    return;\n  }\n\n  if (\n    queries.length > 0 &&\n    typeof this.client.getRecommendations === 'undefined'\n  ) {\n    // eslint-disable-next-line no-console\n    console.warn(\n      'Please update algoliasearch/lite to the latest version in order to use recommend widgets.'\n    );\n    return;\n  }\n\n  var queryId = this._recommendQueryId++;\n  this._currentNbRecommendQueries++;\n\n  try {\n    this.client\n      .getRecommendations(queries)\n      .then(this._dispatchRecommendResponse.bind(this, queryId, states, ids))\n      .catch(this._dispatchRecommendError.bind(this, queryId));\n  } catch (error) {\n    // If we reach this part, we're in an internal error state\n    this.emit('error', {\n      error: error,\n    });\n  }\n\n  return;\n};\n\n/**\n * Transform the responses as sent by the server and transform them into a user\n * usable object that merge the results of all the batch requests. It will dispatch\n * over the different helper + derived helpers (when there are some).\n * @private\n * @param {array.<{SearchParameters, AlgoliaQueries, AlgoliaSearchHelper}>} states state used to generate the request\n * @param {number} queryId id of the current request\n * @param {object} content content of the response\n * @return {undefined}\n */\nAlgoliaSearchHelper.prototype._dispatchAlgoliaResponse = function (\n  states,\n  queryId,\n  content\n) {\n  // eslint-disable-next-line consistent-this\n  var self = this;\n\n  // @TODO remove the number of outdated queries discarded instead of just one\n\n  if (queryId < this._lastQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n  this._lastQueryIdReceived = queryId;\n\n  if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n\n  var results = content.results.slice();\n\n  states.forEach(function (s) {\n    var state = s.state;\n    var queriesCount = s.queriesCount;\n    var helper = s.helper;\n    var specificResults = results.splice(0, queriesCount);\n\n    if (!state.index) {\n      helper.emit('result', {\n        results: null,\n        state: state,\n      });\n      return;\n    }\n\n    helper.lastResults = new SearchResults(\n      state,\n      specificResults,\n      self._searchResultsOptions\n    );\n\n    helper.emit('result', {\n      results: helper.lastResults,\n      state: state,\n    });\n  });\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendResponse = function (\n  queryId,\n  states,\n  ids,\n  content\n) {\n  // @TODO remove the number of outdated queries discarded instead of just one\n\n  if (queryId < this._lastRecommendQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbRecommendQueries -=\n    queryId - this._lastRecommendQueryIdReceived;\n  this._lastRecommendQueryIdReceived = queryId;\n\n  if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n\n  var cache = this.recommendCache;\n\n  var idsMap = {};\n  ids\n    .filter(function (id) {\n      return cache[id] === undefined;\n    })\n    .forEach(function (id, index) {\n      if (!idsMap[id]) idsMap[id] = [];\n\n      idsMap[id].push(index);\n    });\n\n  Object.keys(idsMap).forEach(function (id) {\n    var indices = idsMap[id];\n    var firstResult = content.results[indices[0]];\n    if (indices.length === 1) {\n      cache[id] = firstResult;\n      return;\n    }\n    cache[id] = Object.assign({}, firstResult, {\n      hits: sortAndMergeRecommendations(\n        indices.map(function (idx) {\n          return content.results[idx].hits;\n        })\n      ),\n    });\n  });\n\n  var results = {};\n  ids.forEach(function (id) {\n    results[id] = cache[id];\n  });\n\n  states.forEach(function (s) {\n    var state = s.state;\n    var helper = s.helper;\n\n    if (!s.index) {\n      // eslint-disable-next-line no-warning-comments\n      // TODO: emit \"result\" event when events for Recommend are implemented\n      helper.emit('recommend:result', {\n        results: null,\n        state: state,\n      });\n      return;\n    }\n\n    helper.lastRecommendResults = new RecommendResults(state, results);\n\n    // eslint-disable-next-line no-warning-comments\n    // TODO: emit \"result\" event when events for Recommend are implemented\n    helper.emit('recommend:result', {\n      recommend: {\n        results: helper.lastRecommendResults,\n        state: state,\n      },\n    });\n  });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function (\n  queryId,\n  error\n) {\n  if (queryId < this._lastQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbQueries -= queryId - this._lastQueryIdReceived;\n  this._lastQueryIdReceived = queryId;\n\n  this.emit('error', {\n    error: error,\n  });\n\n  if (this._currentNbQueries === 0) this.emit('searchQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype._dispatchRecommendError = function (\n  queryId,\n  error\n) {\n  if (queryId < this._lastRecommendQueryIdReceived) {\n    // Outdated answer\n    return;\n  }\n\n  this._currentNbRecommendQueries -=\n    queryId - this._lastRecommendQueryIdReceived;\n  this._lastRecommendQueryIdReceived = queryId;\n\n  this.emit('error', {\n    error: error,\n  });\n\n  if (this._currentNbRecommendQueries === 0) this.emit('recommendQueueEmpty');\n};\n\nAlgoliaSearchHelper.prototype.containsRefinement = function (\n  query,\n  facetFilters,\n  numericFilters,\n  tagFilters\n) {\n  return (\n    query ||\n    facetFilters.length !== 0 ||\n    numericFilters.length !== 0 ||\n    tagFilters.length !== 0\n  );\n};\n\n/**\n * Test if there are some disjunctive refinements on the facet\n * @private\n * @param {string} facet the attribute to test\n * @return {boolean} true if there are refinements on this attribute\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function (facet) {\n  return (\n    this.state.disjunctiveRefinements[facet] &&\n    this.state.disjunctiveRefinements[facet].length > 0\n  );\n};\n\nAlgoliaSearchHelper.prototype._change = function (event) {\n  var state = event.state;\n  var isPageReset = event.isPageReset;\n\n  if (state !== this.state) {\n    this.state = state;\n\n    this.emit('change', {\n      state: this.state,\n      results: this.lastResults,\n      isPageReset: isPageReset,\n    });\n  }\n};\n\nAlgoliaSearchHelper.prototype._recommendChange = function (event) {\n  var state = event.state;\n\n  if (state !== this.recommendState) {\n    this.recommendState = state;\n\n    // eslint-disable-next-line no-warning-comments\n    // TODO: emit \"change\" event when events for Recommend are implemented\n    this.emit('recommend:change', {\n      search: {\n        results: this.lastResults,\n        state: this.state,\n      },\n      recommend: {\n        results: this.lastRecommendResults,\n        state: this.recommendState,\n      },\n    });\n  }\n};\n\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.clearCache = function () {\n  if (this.client.clearCache) this.client.clearCache();\n  return this;\n};\n\n/**\n * Updates the internal client instance. If the reference of the clients\n * are equal then no update is actually done.\n * @param  {AlgoliaSearch} newClient an AlgoliaSearch client\n * @return {AlgoliaSearchHelper} Method is chainable, it returns itself\n */\nAlgoliaSearchHelper.prototype.setClient = function (newClient) {\n  if (this.client === newClient) return this;\n\n  if (typeof newClient.addAlgoliaAgent === 'function') {\n    newClient.addAlgoliaAgent('JS Helper (' + version + ')');\n  }\n  this.client = newClient;\n\n  return this;\n};\n\n/**\n * Gets the instance of the currently used client.\n * @return {AlgoliaSearch} the currently used client\n */\nAlgoliaSearchHelper.prototype.getClient = function () {\n  return this.client;\n};\n\n/**\n * Creates an derived instance of the Helper. A derived helper\n * is a way to request other indices synchronised with the lifecycle\n * of the main Helper. This mechanism uses the multiqueries feature\n * of Algolia to aggregate all the requests in a single network call.\n *\n * This method takes a function that is used to create a new SearchParameter\n * that will be used to create requests to Algolia. Those new requests\n * are created just before the `search` event. The signature of the function\n * is `SearchParameters -> SearchParameters`.\n *\n * This method returns a new DerivedHelper which is an EventEmitter\n * that fires the same `search`, `result` and `error` events. Those\n * events, however, will receive data specific to this DerivedHelper\n * and the SearchParameters that is returned by the call of the\n * parameter function.\n * @param {function} fn SearchParameters -> SearchParameters\n * @param {function} recommendFn RecommendParameters -> RecommendParameters\n * @return {DerivedHelper} a new DerivedHelper\n */\nAlgoliaSearchHelper.prototype.derive = function (fn, recommendFn) {\n  var derivedHelper = new DerivedHelper(this, fn, recommendFn);\n  this.derivedHelpers.push(derivedHelper);\n  return derivedHelper;\n};\n\n/**\n * This method detaches a derived Helper from the main one. Prefer using the one from the\n * derived helper itself, to remove the event listeners too.\n * @private\n * @param  {DerivedHelper} derivedHelper the derived helper to detach\n * @return {undefined} nothing is returned\n * @throws Error\n */\nAlgoliaSearchHelper.prototype.detachDerivedHelper = function (derivedHelper) {\n  var pos = this.derivedHelpers.indexOf(derivedHelper);\n  if (pos === -1) throw new Error('Derived helper already detached');\n  this.derivedHelpers.splice(pos, 1);\n};\n\n/**\n * This method returns true if there is currently at least one on-going search.\n * @return {boolean} true if there is a search pending\n */\nAlgoliaSearchHelper.prototype.hasPendingRequests = function () {\n  return this._currentNbQueries > 0;\n};\n\n/**\n * @typedef AlgoliaSearchHelper.NumericRefinement\n * @type {object}\n * @property {number[]} value the numbers that are used for filtering this attribute with\n * the operator specified.\n * @property {string} operator the faceting data: value, number of entries\n * @property {string} type will be 'numeric'\n */\n\n/**\n * @typedef AlgoliaSearchHelper.FacetRefinement\n * @type {object}\n * @property {string} value the string use to filter the attribute\n * @property {string} type the type of filter: 'conjunctive', 'disjunctive', 'exclude'\n */\n\nmodule.exports = AlgoliaSearchHelper;\n", "'use strict';\n\nvar AlgoliaSearchHelper = require('./src/algoliasearch.helper');\nvar RecommendParameters = require('./src/RecommendParameters');\nvar SearchParameters = require('./src/SearchParameters');\nvar SearchResults = require('./src/SearchResults');\n\n/**\n * The algoliasearchHelper module is the function that will let its\n * contains everything needed to use the Algoliasearch\n * Helper. It is a also a function that instanciate the helper.\n * To use the helper, you also need the Algolia JS client v3.\n * @example\n * //using the UMD build\n * var client = algoliasearch('latency', '6be0576ff61c053d5f9a3225e2a90f76');\n * var helper = algoliasearchHelper(client, 'bestbuy', {\n *   facets: ['shipping'],\n *   disjunctiveFacets: ['category']\n * });\n * helper.on('result', function(event) {\n *   console.log(event.results);\n * });\n * helper\n *   .toggleFacetRefinement('category', 'Movies & TV Shows')\n *   .toggleFacetRefinement('shipping', 'Free shipping')\n *   .search();\n * @example\n * // The helper is an event emitter using the node API\n * helper.on('result', updateTheResults);\n * helper.once('result', updateTheResults);\n * helper.removeListener('result', updateTheResults);\n * helper.removeAllListeners('result');\n * @module algoliasearchHelper\n * @param  {AlgoliaSearch} client an AlgoliaSearch client\n * @param  {string} index the name of the index to query\n * @param  {SearchParameters|object} opts an object defining the initial config of the search. It doesn't have to be a {SearchParameters}, just an object containing the properties you need from it.\n * @param {SearchResultsOptions|object} searchResultsOptions an object defining the options to use when creating the search results.\n * @return {AlgoliaSearchHelper} The helper instance\n */\nfunction algoliasearchHelper(client, index, opts, searchResultsOptions) {\n  return new AlgoliaSearchHelper(client, index, opts, searchResultsOptions);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version');\n\n/**\n * Constructor for the Helper.\n * @member module:algoliasearchHelper.AlgoliaSearchHelper\n * @type {AlgoliaSearchHelper}\n */\nalgoliasearchHelper.AlgoliaSearchHelper = AlgoliaSearchHelper;\n\n/**\n * Constructor for the object containing all the parameters of the search.\n * @member module:algoliasearchHelper.SearchParameters\n * @type {SearchParameters}\n */\nalgoliasearchHelper.SearchParameters = SearchParameters;\n\n/**\n * Constructor for the object containing all the parameters for Recommend.\n * @member module:algoliasearchHelper.RecommendParameters\n * @type {RecommendParameters}\n */\nalgoliasearchHelper.RecommendParameters = RecommendParameters;\n\n/**\n * Constructor for the object containing the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\nmodule.exports = algoliasearchHelper;\n", "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n", "'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var i = 0; i < string.length; ++i) {\n        var c = string.charCodeAt(i);\n\n        if (\n            c === 0x2D // -\n            || c === 0x2E // .\n            || c === 0x5F // _\n            || c === 0x7E // ~\n            || (c >= 0x30 && c <= 0x39) // 0-9\n            || (c >= 0x41 && c <= 0x5A) // a-z\n            || (c >= 0x61 && c <= 0x7A) // A-Z\n            || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n        ) {\n            out += string.charAt(i);\n            continue;\n        }\n\n        if (c < 0x80) {\n            out = out + hexTable[c];\n            continue;\n        }\n\n        if (c < 0x800) {\n            out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        if (c < 0xD800 || c >= 0xE000) {\n            out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n            continue;\n        }\n\n        i += 1;\n        c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n        /* eslint operator-linebreak: [2, \"before\"] */\n        out += hexTable[0xF0 | (c >> 18)]\n            + hexTable[0x80 | ((c >> 12) & 0x3F)]\n            + hexTable[0x80 | ((c >> 6) & 0x3F)]\n            + hexTable[0x80 | (c & 0x3F)];\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    maybeMap: maybeMap,\n    merge: merge\n};\n", "'use strict';\n\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar split = String.prototype.split;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    strictNullHandling,\n    skipNulls,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset\n) {\n    var obj = object;\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            if (generateArrayPrefix === 'comma' && encodeValuesOnly) {\n                var valuesArray = split.call(String(obj), ',');\n                var valuesJoined = '';\n                for (var i = 0; i < valuesArray.length; ++i) {\n                    valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format));\n                }\n                return [formatter(keyValue) + '=' + valuesJoined];\n            }\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(prefix, key) : prefix\n            : prefix + (allowDots ? '.' + key : '[' + key + ']');\n\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            strictNullHandling,\n            skipNulls,\n            encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var arrayFormat;\n    if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if (opts && 'indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = 'indices';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('\u2713')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n", "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowPrototypes: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the \u2713 character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the \u2713 character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('\u2713')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = {};\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n            val = utils.maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        if (has.call(obj, key)) {\n            obj[key] = utils.combine(obj[key], val);\n        } else {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var index = parseInt(cleanRoot, 10);\n            if (!options.parseArrays && cleanRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== cleanRoot\n                && String(index) === cleanRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (cleanRoot !== '__proto__') {\n                obj[cleanRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    return {\n        allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    return utils.compact(obj);\n};\n", "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n", "/*\n *  Copyright 2011 Twitter, Inc.\n *  Licensed under the Apache License, Version 2.0 (the \"License\");\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *  http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\n(function (Hogan) {\n  // Setup regex  assignments\n  // remove whitespace according to Mustache spec\n  var rIsWhitespace = /\\S/,\n      rQuot = /\\\"/g,\n      rNewline =  /\\n/g,\n      rCr = /\\r/g,\n      rSlash = /\\\\/g,\n      rLineSep = /\\u2028/,\n      rParagraphSep = /\\u2029/;\n\n  Hogan.tags = {\n    '#': 1, '^': 2, '<': 3, '$': 4,\n    '/': 5, '!': 6, '>': 7, '=': 8, '_v': 9,\n    '{': 10, '&': 11, '_t': 12\n  };\n\n  Hogan.scan = function scan(text, delimiters) {\n    var len = text.length,\n        IN_TEXT = 0,\n        IN_TAG_TYPE = 1,\n        IN_TAG = 2,\n        state = IN_TEXT,\n        tagType = null,\n        tag = null,\n        buf = '',\n        tokens = [],\n        seenTag = false,\n        i = 0,\n        lineStart = 0,\n        otag = '{{',\n        ctag = '}}';\n\n    function addBuf() {\n      if (buf.length > 0) {\n        tokens.push({tag: '_t', text: new String(buf)});\n        buf = '';\n      }\n    }\n\n    function lineIsWhitespace() {\n      var isAllWhitespace = true;\n      for (var j = lineStart; j < tokens.length; j++) {\n        isAllWhitespace =\n          (Hogan.tags[tokens[j].tag] < Hogan.tags['_v']) ||\n          (tokens[j].tag == '_t' && tokens[j].text.match(rIsWhitespace) === null);\n        if (!isAllWhitespace) {\n          return false;\n        }\n      }\n\n      return isAllWhitespace;\n    }\n\n    function filterLine(haveSeenTag, noNewLine) {\n      addBuf();\n\n      if (haveSeenTag && lineIsWhitespace()) {\n        for (var j = lineStart, next; j < tokens.length; j++) {\n          if (tokens[j].text) {\n            if ((next = tokens[j+1]) && next.tag == '>') {\n              // set indent to token value\n              next.indent = tokens[j].text.toString()\n            }\n            tokens.splice(j, 1);\n          }\n        }\n      } else if (!noNewLine) {\n        tokens.push({tag:'\\n'});\n      }\n\n      seenTag = false;\n      lineStart = tokens.length;\n    }\n\n    function changeDelimiters(text, index) {\n      var close = '=' + ctag,\n          closeIndex = text.indexOf(close, index),\n          delimiters = trim(\n            text.substring(text.indexOf('=', index) + 1, closeIndex)\n          ).split(' ');\n\n      otag = delimiters[0];\n      ctag = delimiters[delimiters.length - 1];\n\n      return closeIndex + close.length - 1;\n    }\n\n    if (delimiters) {\n      delimiters = delimiters.split(' ');\n      otag = delimiters[0];\n      ctag = delimiters[1];\n    }\n\n    for (i = 0; i < len; i++) {\n      if (state == IN_TEXT) {\n        if (tagChange(otag, text, i)) {\n          --i;\n          addBuf();\n          state = IN_TAG_TYPE;\n        } else {\n          if (text.charAt(i) == '\\n') {\n            filterLine(seenTag);\n          } else {\n            buf += text.charAt(i);\n          }\n        }\n      } else if (state == IN_TAG_TYPE) {\n        i += otag.length - 1;\n        tag = Hogan.tags[text.charAt(i + 1)];\n        tagType = tag ? text.charAt(i + 1) : '_v';\n        if (tagType == '=') {\n          i = changeDelimiters(text, i);\n          state = IN_TEXT;\n        } else {\n          if (tag) {\n            i++;\n          }\n          state = IN_TAG;\n        }\n        seenTag = i;\n      } else {\n        if (tagChange(ctag, text, i)) {\n          tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag,\n                       i: (tagType == '/') ? seenTag - otag.length : i + ctag.length});\n          buf = '';\n          i += ctag.length - 1;\n          state = IN_TEXT;\n          if (tagType == '{') {\n            if (ctag == '}}') {\n              i++;\n            } else {\n              cleanTripleStache(tokens[tokens.length - 1]);\n            }\n          }\n        } else {\n          buf += text.charAt(i);\n        }\n      }\n    }\n\n    filterLine(seenTag, true);\n\n    return tokens;\n  }\n\n  function cleanTripleStache(token) {\n    if (token.n.substr(token.n.length - 1) === '}') {\n      token.n = token.n.substring(0, token.n.length - 1);\n    }\n  }\n\n  function trim(s) {\n    if (s.trim) {\n      return s.trim();\n    }\n\n    return s.replace(/^\\s*|\\s*$/g, '');\n  }\n\n  function tagChange(tag, text, index) {\n    if (text.charAt(index) != tag.charAt(0)) {\n      return false;\n    }\n\n    for (var i = 1, l = tag.length; i < l; i++) {\n      if (text.charAt(index + i) != tag.charAt(i)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  // the tags allowed inside super templates\n  var allowedInSuper = {'_t': true, '\\n': true, '$': true, '/': true};\n\n  function buildTree(tokens, kind, stack, customTags) {\n    var instructions = [],\n        opener = null,\n        tail = null,\n        token = null;\n\n    tail = stack[stack.length - 1];\n\n    while (tokens.length > 0) {\n      token = tokens.shift();\n\n      if (tail && tail.tag == '<' && !(token.tag in allowedInSuper)) {\n        throw new Error('Illegal content in < super tag.');\n      }\n\n      if (Hogan.tags[token.tag] <= Hogan.tags['$'] || isOpener(token, customTags)) {\n        stack.push(token);\n        token.nodes = buildTree(tokens, token.tag, stack, customTags);\n      } else if (token.tag == '/') {\n        if (stack.length === 0) {\n          throw new Error('Closing tag without opener: /' + token.n);\n        }\n        opener = stack.pop();\n        if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) {\n          throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n);\n        }\n        opener.end = token.i;\n        return instructions;\n      } else if (token.tag == '\\n') {\n        token.last = (tokens.length == 0) || (tokens[0].tag == '\\n');\n      }\n\n      instructions.push(token);\n    }\n\n    if (stack.length > 0) {\n      throw new Error('missing closing tag: ' + stack.pop().n);\n    }\n\n    return instructions;\n  }\n\n  function isOpener(token, tags) {\n    for (var i = 0, l = tags.length; i < l; i++) {\n      if (tags[i].o == token.n) {\n        token.tag = '#';\n        return true;\n      }\n    }\n  }\n\n  function isCloser(close, open, tags) {\n    for (var i = 0, l = tags.length; i < l; i++) {\n      if (tags[i].c == close && tags[i].o == open) {\n        return true;\n      }\n    }\n  }\n\n  function stringifySubstitutions(obj) {\n    var items = [];\n    for (var key in obj) {\n      items.push('\"' + esc(key) + '\": function(c,p,t,i) {' + obj[key] + '}');\n    }\n    return \"{ \" + items.join(\",\") + \" }\";\n  }\n\n  function stringifyPartials(codeObj) {\n    var partials = [];\n    for (var key in codeObj.partials) {\n      partials.push('\"' + esc(key) + '\":{name:\"' + esc(codeObj.partials[key].name) + '\", ' + stringifyPartials(codeObj.partials[key]) + \"}\");\n    }\n    return \"partials: {\" + partials.join(\",\") + \"}, subs: \" + stringifySubstitutions(codeObj.subs);\n  }\n\n  Hogan.stringify = function(codeObj, text, options) {\n    return \"{code: function (c,p,i) { \" + Hogan.wrapMain(codeObj.code) + \" },\" + stringifyPartials(codeObj) +  \"}\";\n  }\n\n  var serialNo = 0;\n  Hogan.generate = function(tree, text, options) {\n    serialNo = 0;\n    var context = { code: '', subs: {}, partials: {} };\n    Hogan.walk(tree, context);\n\n    if (options.asString) {\n      return this.stringify(context, text, options);\n    }\n\n    return this.makeTemplate(context, text, options);\n  }\n\n  Hogan.wrapMain = function(code) {\n    return 'var t=this;t.b(i=i||\"\");' + code + 'return t.fl();';\n  }\n\n  Hogan.template = Hogan.Template;\n\n  Hogan.makeTemplate = function(codeObj, text, options) {\n    var template = this.makePartials(codeObj);\n    template.code = new Function('c', 'p', 'i', this.wrapMain(codeObj.code));\n    return new this.template(template, text, this, options);\n  }\n\n  Hogan.makePartials = function(codeObj) {\n    var key, template = {subs: {}, partials: codeObj.partials, name: codeObj.name};\n    for (key in template.partials) {\n      template.partials[key] = this.makePartials(template.partials[key]);\n    }\n    for (key in codeObj.subs) {\n      template.subs[key] = new Function('c', 'p', 't', 'i', codeObj.subs[key]);\n    }\n    return template;\n  }\n\n  function esc(s) {\n    return s.replace(rSlash, '\\\\\\\\')\n            .replace(rQuot, '\\\\\\\"')\n            .replace(rNewline, '\\\\n')\n            .replace(rCr, '\\\\r')\n            .replace(rLineSep, '\\\\u2028')\n            .replace(rParagraphSep, '\\\\u2029');\n  }\n\n  function chooseMethod(s) {\n    return (~s.indexOf('.')) ? 'd' : 'f';\n  }\n\n  function createPartial(node, context) {\n    var prefix = \"<\" + (context.prefix || \"\");\n    var sym = prefix + node.n + serialNo++;\n    context.partials[sym] = {name: node.n, partials: {}};\n    context.code += 't.b(t.rp(\"' +  esc(sym) + '\",c,p,\"' + (node.indent || '') + '\"));';\n    return sym;\n  }\n\n  Hogan.codegen = {\n    '#': function(node, context) {\n      context.code += 'if(t.s(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,1),' +\n                      'c,p,0,' + node.i + ',' + node.end + ',\"' + node.otag + \" \" + node.ctag + '\")){' +\n                      't.rs(c,p,' + 'function(c,p,t){';\n      Hogan.walk(node.nodes, context);\n      context.code += '});c.pop();}';\n    },\n\n    '^': function(node, context) {\n      context.code += 'if(!t.s(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,1),c,p,1,0,0,\"\")){';\n      Hogan.walk(node.nodes, context);\n      context.code += '};';\n    },\n\n    '>': createPartial,\n    '<': function(node, context) {\n      var ctx = {partials: {}, code: '', subs: {}, inPartial: true};\n      Hogan.walk(node.nodes, ctx);\n      var template = context.partials[createPartial(node, context)];\n      template.subs = ctx.subs;\n      template.partials = ctx.partials;\n    },\n\n    '$': function(node, context) {\n      var ctx = {subs: {}, code: '', partials: context.partials, prefix: node.n};\n      Hogan.walk(node.nodes, ctx);\n      context.subs[node.n] = ctx.code;\n      if (!context.inPartial) {\n        context.code += 't.sub(\"' + esc(node.n) + '\",c,p,i);';\n      }\n    },\n\n    '\\n': function(node, context) {\n      context.code += write('\"\\\\n\"' + (node.last ? '' : ' + i'));\n    },\n\n    '_v': function(node, context) {\n      context.code += 't.b(t.v(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,0)));';\n    },\n\n    '_t': function(node, context) {\n      context.code += write('\"' + esc(node.text) + '\"');\n    },\n\n    '{': tripleStache,\n\n    '&': tripleStache\n  }\n\n  function tripleStache(node, context) {\n    context.code += 't.b(t.t(t.' + chooseMethod(node.n) + '(\"' + esc(node.n) + '\",c,p,0)));';\n  }\n\n  function write(s) {\n    return 't.b(' + s + ');';\n  }\n\n  Hogan.walk = function(nodelist, context) {\n    var func;\n    for (var i = 0, l = nodelist.length; i < l; i++) {\n      func = Hogan.codegen[nodelist[i].tag];\n      func && func(nodelist[i], context);\n    }\n    return context;\n  }\n\n  Hogan.parse = function(tokens, text, options) {\n    options = options || {};\n    return buildTree(tokens, '', [], options.sectionTags || []);\n  }\n\n  Hogan.cache = {};\n\n  Hogan.cacheKey = function(text, options) {\n    return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join('||');\n  }\n\n  Hogan.compile = function(text, options) {\n    options = options || {};\n    var key = Hogan.cacheKey(text, options);\n    var template = this.cache[key];\n\n    if (template) {\n      var partials = template.partials;\n      for (var name in partials) {\n        delete partials[name].instance;\n      }\n      return template;\n    }\n\n    template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options);\n    return this.cache[key] = template;\n  }\n})(typeof exports !== 'undefined' ? exports : Hogan);\n", "/*\n *  Copyright 2011 Twitter, Inc.\n *  Licensed under the Apache License, Version 2.0 (the \"License\");\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *  http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\nvar Hogan = {};\n\n(function (Hogan) {\n  Hogan.Template = function (codeObj, text, compiler, options) {\n    codeObj = codeObj || {};\n    this.r = codeObj.code || this.r;\n    this.c = compiler;\n    this.options = options || {};\n    this.text = text || '';\n    this.partials = codeObj.partials || {};\n    this.subs = codeObj.subs || {};\n    this.buf = '';\n  }\n\n  Hogan.Template.prototype = {\n    // render: replaced by generated code.\n    r: function (context, partials, indent) { return ''; },\n\n    // variable escaping\n    v: hoganEscape,\n\n    // triple stache\n    t: coerceToString,\n\n    render: function render(context, partials, indent) {\n      return this.ri([context], partials || {}, indent);\n    },\n\n    // render internal -- a hook for overrides that catches partials too\n    ri: function (context, partials, indent) {\n      return this.r(context, partials, indent);\n    },\n\n    // ensurePartial\n    ep: function(symbol, partials) {\n      var partial = this.partials[symbol];\n\n      // check to see that if we've instantiated this partial before\n      var template = partials[partial.name];\n      if (partial.instance && partial.base == template) {\n        return partial.instance;\n      }\n\n      if (typeof template == 'string') {\n        if (!this.c) {\n          throw new Error(\"No compiler available.\");\n        }\n        template = this.c.compile(template, this.options);\n      }\n\n      if (!template) {\n        return null;\n      }\n\n      // We use this to check whether the partials dictionary has changed\n      this.partials[symbol].base = template;\n\n      if (partial.subs) {\n        // Make sure we consider parent template now\n        if (!partials.stackText) partials.stackText = {};\n        for (key in partial.subs) {\n          if (!partials.stackText[key]) {\n            partials.stackText[key] = (this.activeSub !== undefined && partials.stackText[this.activeSub]) ? partials.stackText[this.activeSub] : this.text;\n          }\n        }\n        template = createSpecializedPartial(template, partial.subs, partial.partials,\n          this.stackSubs, this.stackPartials, partials.stackText);\n      }\n      this.partials[symbol].instance = template;\n\n      return template;\n    },\n\n    // tries to find a partial in the current scope and render it\n    rp: function(symbol, context, partials, indent) {\n      var partial = this.ep(symbol, partials);\n      if (!partial) {\n        return '';\n      }\n\n      return partial.ri(context, partials, indent);\n    },\n\n    // render a section\n    rs: function(context, partials, section) {\n      var tail = context[context.length - 1];\n\n      if (!isArray(tail)) {\n        section(context, partials, this);\n        return;\n      }\n\n      for (var i = 0; i < tail.length; i++) {\n        context.push(tail[i]);\n        section(context, partials, this);\n        context.pop();\n      }\n    },\n\n    // maybe start a section\n    s: function(val, ctx, partials, inverted, start, end, tags) {\n      var pass;\n\n      if (isArray(val) && val.length === 0) {\n        return false;\n      }\n\n      if (typeof val == 'function') {\n        val = this.ms(val, ctx, partials, inverted, start, end, tags);\n      }\n\n      pass = !!val;\n\n      if (!inverted && pass && ctx) {\n        ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]);\n      }\n\n      return pass;\n    },\n\n    // find values with dotted names\n    d: function(key, ctx, partials, returnFound) {\n      var found,\n          names = key.split('.'),\n          val = this.f(names[0], ctx, partials, returnFound),\n          doModelGet = this.options.modelGet,\n          cx = null;\n\n      if (key === '.' && isArray(ctx[ctx.length - 2])) {\n        val = ctx[ctx.length - 1];\n      } else {\n        for (var i = 1; i < names.length; i++) {\n          found = findInScope(names[i], val, doModelGet);\n          if (found !== undefined) {\n            cx = val;\n            val = found;\n          } else {\n            val = '';\n          }\n        }\n      }\n\n      if (returnFound && !val) {\n        return false;\n      }\n\n      if (!returnFound && typeof val == 'function') {\n        ctx.push(cx);\n        val = this.mv(val, ctx, partials);\n        ctx.pop();\n      }\n\n      return val;\n    },\n\n    // find values with normal names\n    f: function(key, ctx, partials, returnFound) {\n      var val = false,\n          v = null,\n          found = false,\n          doModelGet = this.options.modelGet;\n\n      for (var i = ctx.length - 1; i >= 0; i--) {\n        v = ctx[i];\n        val = findInScope(key, v, doModelGet);\n        if (val !== undefined) {\n          found = true;\n          break;\n        }\n      }\n\n      if (!found) {\n        return (returnFound) ? false : \"\";\n      }\n\n      if (!returnFound && typeof val == 'function') {\n        val = this.mv(val, ctx, partials);\n      }\n\n      return val;\n    },\n\n    // higher order templates\n    ls: function(func, cx, partials, text, tags) {\n      var oldTags = this.options.delimiters;\n\n      this.options.delimiters = tags;\n      this.b(this.ct(coerceToString(func.call(cx, text)), cx, partials));\n      this.options.delimiters = oldTags;\n\n      return false;\n    },\n\n    // compile text\n    ct: function(text, cx, partials) {\n      if (this.options.disableLambda) {\n        throw new Error('Lambda features disabled.');\n      }\n      return this.c.compile(text, this.options).render(cx, partials);\n    },\n\n    // template result buffering\n    b: function(s) { this.buf += s; },\n\n    fl: function() { var r = this.buf; this.buf = ''; return r; },\n\n    // method replace section\n    ms: function(func, ctx, partials, inverted, start, end, tags) {\n      var textSource,\n          cx = ctx[ctx.length - 1],\n          result = func.call(cx);\n\n      if (typeof result == 'function') {\n        if (inverted) {\n          return true;\n        } else {\n          textSource = (this.activeSub && this.subsText && this.subsText[this.activeSub]) ? this.subsText[this.activeSub] : this.text;\n          return this.ls(result, cx, partials, textSource.substring(start, end), tags);\n        }\n      }\n\n      return result;\n    },\n\n    // method replace variable\n    mv: function(func, ctx, partials) {\n      var cx = ctx[ctx.length - 1];\n      var result = func.call(cx);\n\n      if (typeof result == 'function') {\n        return this.ct(coerceToString(result.call(cx)), cx, partials);\n      }\n\n      return result;\n    },\n\n    sub: function(name, context, partials, indent) {\n      var f = this.subs[name];\n      if (f) {\n        this.activeSub = name;\n        f(context, partials, this, indent);\n        this.activeSub = false;\n      }\n    }\n\n  };\n\n  //Find a key in an object\n  function findInScope(key, scope, doModelGet) {\n    var val;\n\n    if (scope && typeof scope == 'object') {\n\n      if (scope[key] !== undefined) {\n        val = scope[key];\n\n      // try lookup with get for backbone or similar model data\n      } else if (doModelGet && scope.get && typeof scope.get == 'function') {\n        val = scope.get(key);\n      }\n    }\n\n    return val;\n  }\n\n  function createSpecializedPartial(instance, subs, partials, stackSubs, stackPartials, stackText) {\n    function PartialTemplate() {};\n    PartialTemplate.prototype = instance;\n    function Substitutions() {};\n    Substitutions.prototype = instance.subs;\n    var key;\n    var partial = new PartialTemplate();\n    partial.subs = new Substitutions();\n    partial.subsText = {};  //hehe. substext.\n    partial.buf = '';\n\n    stackSubs = stackSubs || {};\n    partial.stackSubs = stackSubs;\n    partial.subsText = stackText;\n    for (key in subs) {\n      if (!stackSubs[key]) stackSubs[key] = subs[key];\n    }\n    for (key in stackSubs) {\n      partial.subs[key] = stackSubs[key];\n    }\n\n    stackPartials = stackPartials || {};\n    partial.stackPartials = stackPartials;\n    for (key in partials) {\n      if (!stackPartials[key]) stackPartials[key] = partials[key];\n    }\n    for (key in stackPartials) {\n      partial.partials[key] = stackPartials[key];\n    }\n\n    return partial;\n  }\n\n  var rAmp = /&/g,\n      rLt = /</g,\n      rGt = />/g,\n      rApos = /\\'/g,\n      rQuot = /\\\"/g,\n      hChars = /[&<>\\\"\\']/;\n\n  function coerceToString(val) {\n    return String((val === null || val === undefined) ? '' : val);\n  }\n\n  function hoganEscape(str) {\n    str = coerceToString(str);\n    return hChars.test(str) ?\n      str\n        .replace(rAmp, '&amp;')\n        .replace(rLt, '&lt;')\n        .replace(rGt, '&gt;')\n        .replace(rApos, '&#39;')\n        .replace(rQuot, '&quot;') :\n      str;\n  }\n\n  var isArray = Array.isArray || function(a) {\n    return Object.prototype.toString.call(a) === '[object Array]';\n  };\n\n})(typeof exports !== 'undefined' ? exports : Hogan);\n", "/*\n *  Copyright 2011 Twitter, Inc.\n *  Licensed under the Apache License, Version 2.0 (the \"License\");\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *  http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n */\n\n// This file is for use with Node.js. See dist/ for browser files.\n\nvar Hogan = require('./compiler');\nHogan.Template = require('./template').Template;\nHogan.template = Hogan.Template;\nmodule.exports = Hogan;\n", "(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.fr = {}));\n}(this, (function (exports) { 'use strict';\n\n  var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n      ? window.flatpickr\n      : {\n          l10ns: {},\n      };\n  var French = {\n      firstDayOfWeek: 1,\n      weekdays: {\n          shorthand: [\"dim\", \"lun\", \"mar\", \"mer\", \"jeu\", \"ven\", \"sam\"],\n          longhand: [\n              \"dimanche\",\n              \"lundi\",\n              \"mardi\",\n              \"mercredi\",\n              \"jeudi\",\n              \"vendredi\",\n              \"samedi\",\n          ],\n      },\n      months: {\n          shorthand: [\n              \"janv\",\n              \"f\u00E9vr\",\n              \"mars\",\n              \"avr\",\n              \"mai\",\n              \"juin\",\n              \"juil\",\n              \"ao\u00FBt\",\n              \"sept\",\n              \"oct\",\n              \"nov\",\n              \"d\u00E9c\",\n          ],\n          longhand: [\n              \"janvier\",\n              \"f\u00E9vrier\",\n              \"mars\",\n              \"avril\",\n              \"mai\",\n              \"juin\",\n              \"juillet\",\n              \"ao\u00FBt\",\n              \"septembre\",\n              \"octobre\",\n              \"novembre\",\n              \"d\u00E9cembre\",\n          ],\n      },\n      ordinal: function (nth) {\n          if (nth > 1)\n              return \"\";\n          return \"er\";\n      },\n      rangeSeparator: \" au \",\n      weekAbbreviation: \"Sem\",\n      scrollTitle: \"D\u00E9filer pour augmenter la valeur\",\n      toggleTitle: \"Cliquer pour basculer\",\n      time_24hr: true,\n  };\n  fp.l10ns.fr = French;\n  var fr = fp.l10ns;\n\n  exports.French = French;\n  exports.default = fr;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\nvar V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n  var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n  for (var i = 0; i < scripts.length; i++) {\n    var script = scripts[i];\n\n    if (!V3_URL_REGEX.test(script.src)) {\n      continue;\n    }\n\n    return script;\n  }\n\n  return null;\n};\n\nvar injectScript = function injectScript(params) {\n  var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n  var script = document.createElement('script');\n  script.src = \"\".concat(V3_URL).concat(queryString);\n  var headOrBody = document.head || document.body;\n\n  if (!headOrBody) {\n    throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n  }\n\n  headOrBody.appendChild(script);\n  return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n  if (!stripe || !stripe._registerWrapper) {\n    return;\n  }\n\n  stripe._registerWrapper({\n    name: 'stripe-js',\n    version: \"3.4.0\",\n    startTime: startTime\n  });\n};\n\nvar stripePromise = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n  return function () {\n    reject(new Error('Failed to load Stripe.js'));\n  };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n  return function () {\n    if (window.Stripe) {\n      resolve(window.Stripe);\n    } else {\n      reject(new Error('Stripe.js not available'));\n    }\n  };\n};\n\nvar loadScript = function loadScript(params) {\n  // Ensure that we only attempt to load Stripe.js at most once\n  if (stripePromise !== null) {\n    return stripePromise;\n  }\n\n  stripePromise = new Promise(function (resolve, reject) {\n    if (typeof window === 'undefined' || typeof document === 'undefined') {\n      // Resolve to null when imported server side. This makes the module\n      // safe to import in an isomorphic code base.\n      resolve(null);\n      return;\n    }\n\n    if (window.Stripe && params) {\n      console.warn(EXISTING_SCRIPT_MESSAGE);\n    }\n\n    if (window.Stripe) {\n      resolve(window.Stripe);\n      return;\n    }\n\n    try {\n      var script = findScript();\n\n      if (script && params) {\n        console.warn(EXISTING_SCRIPT_MESSAGE);\n      } else if (!script) {\n        script = injectScript(params);\n      } else if (script && onLoadListener !== null && onErrorListener !== null) {\n        var _script$parentNode;\n\n        // remove event listeners\n        script.removeEventListener('load', onLoadListener);\n        script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n        // reload script to trigger 'load' event\n\n        (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n        script = injectScript(params);\n      }\n\n      onLoadListener = onLoad(resolve, reject);\n      onErrorListener = onError(reject);\n      script.addEventListener('load', onLoadListener);\n      script.addEventListener('error', onErrorListener);\n    } catch (error) {\n      reject(error);\n      return;\n    }\n  }); // Resets stripePromise on error\n\n  return stripePromise[\"catch\"](function (error) {\n    stripePromise = null;\n    return Promise.reject(error);\n  });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n  if (maybeStripe === null) {\n    return null;\n  }\n\n  var stripe = maybeStripe.apply(undefined, args);\n  registerWrapper(stripe, startTime);\n  return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar validateLoadParams = function validateLoadParams(params) {\n  var errorMessage = \"invalid load parameters; expected object of shape\\n\\n    {advancedFraudSignals: boolean}\\n\\nbut received\\n\\n    \".concat(JSON.stringify(params), \"\\n\");\n\n  if (params === null || _typeof(params) !== 'object') {\n    throw new Error(errorMessage);\n  }\n\n  if (Object.keys(params).length === 1 && typeof params.advancedFraudSignals === 'boolean') {\n    return params;\n  }\n\n  throw new Error(errorMessage);\n};\n\nvar loadParams;\nvar loadStripeCalled = false;\nvar loadStripe = function loadStripe() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  loadStripeCalled = true;\n  var startTime = Date.now();\n  return loadScript(loadParams).then(function (maybeStripe) {\n    return initStripe(maybeStripe, args, startTime);\n  });\n};\n\nloadStripe.setLoadParameters = function (params) {\n  // we won't throw an error if setLoadParameters is called with the same values as before\n  if (loadStripeCalled && loadParams) {\n    var validatedParams = validateLoadParams(params);\n    var parameterKeys = Object.keys(validatedParams);\n    var sameParameters = parameterKeys.reduce(function (previousValue, currentValue) {\n      var _loadParams;\n\n      return previousValue && params[currentValue] === ((_loadParams = loadParams) === null || _loadParams === void 0 ? void 0 : _loadParams[currentValue]);\n    }, true);\n\n    if (sameParameters) {\n      return;\n    }\n  }\n\n  if (loadStripeCalled) {\n    throw new Error('You cannot change load parameters after calling loadStripe');\n  }\n\n  loadParams = validateLoadParams(params);\n};\n\nexports.loadStripe = loadStripe;\n", "module.exports = require('../dist/pure');\n", "/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n*   console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n*   console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n  var emitter = {}\n  var _fns = emitter._fns = {}\n\n  /**\n  * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`\n  * @name emit\n  * @param {String} event \u2013 the name of the event, with optional namespace\n  * @param {...*} data \u2013 up to 6 arguments that are passed to the event listener\n  * @example\n  * emitter.emit('example')\n  * emitter.emit('demo:test')\n  * emitter.emit('data', { example: true}, 'a string', 1)\n  */\n  emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {\n    var toEmit = getListeners(event)\n\n    if (toEmit.length) {\n      emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])\n    }\n  }\n\n  /**\n  * Create en event listener.\n  * @name on\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.on('example', function () {})\n  * emitter.on('demo', function () {})\n  */\n  emitter.on = function on (event, fn) {\n    if (!_fns[event]) {\n      _fns[event] = []\n    }\n\n    _fns[event].push(fn)\n  }\n\n  /**\n  * Create en event listener that fires once.\n  * @name once\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.once('example', function () {})\n  * emitter.once('demo', function () {})\n  */\n  emitter.once = function once (event, fn) {\n    function one () {\n      fn.apply(this, arguments)\n      emitter.off(event, one)\n    }\n    this.on(event, one)\n  }\n\n  /**\n  * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n  * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,\n  * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n  * @name off\n  * @param {String} event\n  * @param {Function} [fn] \u2013 the specific handler\n  * @example\n  * emitter.off('example')\n  * emitter.off('demo', function () {})\n  */\n  emitter.off = function off (event, fn) {\n    var keep = []\n\n    if (event && fn) {\n      var fns = this._fns[event]\n      var i = 0\n      var l = fns ? fns.length : 0\n\n      for (i; i < l; i++) {\n        if (fns[i] !== fn) {\n          keep.push(fns[i])\n        }\n      }\n    }\n\n    keep.length ? this._fns[event] = keep : delete this._fns[event]\n  }\n\n  function getListeners (e) {\n    var out = _fns[e] ? _fns[e] : []\n    var idx = e.indexOf(':')\n    var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]\n\n    var keys = Object.keys(_fns)\n    var i = 0\n    var l = keys.length\n\n    for (i; i < l; i++) {\n      var key = keys[i]\n      if (key === '*') {\n        out = out.concat(_fns[key])\n      }\n\n      if (args.length === 2 && args[0] === key) {\n        out = out.concat(_fns[key])\n        break\n      }\n    }\n\n    return out\n  }\n\n  function emitAll (e, fns, args) {\n    var i = 0\n    var l = fns.length\n\n    for (i; i < l; i++) {\n      if (!fns[i]) break\n      fns[i].event = e\n      fns[i].apply(fns[i], args)\n    }\n  }\n\n  return emitter\n}\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n", "var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", "var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        timeWaiting = wait - timeSinceLastCall;\n\n    return maxing\n      ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n      : timeWaiting;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\nmodule.exports = debounce;\n", "var debounce = require('./debounce'),\n    isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n *  Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n  var leading = true,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  if (isObject(options)) {\n    leading = 'leading' in options ? !!options.leading : leading;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n  return debounce(func, wait, {\n    'leading': leading,\n    'maxWait': wait,\n    'trailing': trailing\n  });\n}\n\nmodule.exports = throttle;\n", "// Adapted from https://github.com/Flet/prettier-bytes/\n// Changing 1000 bytes to 1024, so we can keep uppercase KB vs kB\n// ISC License (c) Dan Flettre https://github.com/Flet/prettier-bytes/blob/master/LICENSE\nexport = function prettierBytes(num: number): string {\n  if (typeof num !== 'number' || Number.isNaN(num)) {\n    throw new TypeError(`Expected a number, got ${typeof num}`)\n  }\n\n  const neg = num < 0\n  const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n  if (neg) {\n    num = -num\n  }\n\n  if (num < 1) {\n    return `${(neg ? '-' : '') + num} B`\n  }\n\n  const exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n  num = Number(num / 1024 ** exponent)\n  const unit = units[exponent]\n\n  if (num >= 10 || num % 1 === 0) {\n    // Do not show decimals when the number is two-digit, or if the number has no\n    // decimal component.\n    return `${(neg ? '-' : '') + num.toFixed(0)} ${unit}`\n  }\n\n  return `${(neg ? '-' : '') + num.toFixed(1)} ${unit}`\n}\n", "/* jshint node: true */\n'use strict';\n\n/**\n  # wildcard\n\n  Very simple wildcard matching, which is designed to provide the same\n  functionality that is found in the\n  [eve](https://github.com/adobe-webplatform/eve) eventing library.\n\n  ## Usage\n\n  It works with strings:\n\n  <<< examples/strings.js\n\n  Arrays:\n\n  <<< examples/arrays.js\n\n  Objects (matching against keys):\n\n  <<< examples/objects.js\n\n  While the library works in Node, if you are are looking for file-based\n  wildcard matching then you should have a look at:\n\n  <https://github.com/isaacs/node-glob>\n**/\n\nfunction WildcardMatcher(text, separator) {\n  this.text = text = text || '';\n  this.hasWild = ~text.indexOf('*');\n  this.separator = separator;\n  this.parts = text.split(separator);\n}\n\nWildcardMatcher.prototype.match = function(input) {\n  var matches = true;\n  var parts = this.parts;\n  var ii;\n  var partsCount = parts.length;\n  var testParts;\n\n  if (typeof input == 'string' || input instanceof String) {\n    if (!this.hasWild && this.text != input) {\n      matches = false;\n    } else {\n      testParts = (input || '').split(this.separator);\n      for (ii = 0; matches && ii < partsCount; ii++) {\n        if (parts[ii] === '*')  {\n          continue;\n        } else if (ii < testParts.length) {\n          matches = parts[ii] === testParts[ii];\n        } else {\n          matches = false;\n        }\n      }\n\n      // If matches, then return the component parts\n      matches = matches && testParts;\n    }\n  }\n  else if (typeof input.splice == 'function') {\n    matches = [];\n\n    for (ii = input.length; ii--; ) {\n      if (this.match(input[ii])) {\n        matches[matches.length] = input[ii];\n      }\n    }\n  }\n  else if (typeof input == 'object') {\n    matches = {};\n\n    for (var key in input) {\n      if (this.match(key)) {\n        matches[key] = input[key];\n      }\n    }\n  }\n\n  return matches;\n};\n\nmodule.exports = function(text, test, separator) {\n  var matcher = new WildcardMatcher(text, separator || /[\\/\\.]/);\n  if (typeof test != 'undefined') {\n    return matcher.match(test);\n  }\n\n  return matcher;\n};\n", "var wildcard = require('wildcard');\nvar reMimePartSplit = /[\\/\\+\\.]/;\n\n/**\n  # mime-match\n\n  A simple function to checker whether a target mime type matches a mime-type\n  pattern (e.g. image/jpeg matches image/jpeg OR image/*).\n\n  ## Example Usage\n\n  <<< example.js\n\n**/\nmodule.exports = function(target, pattern) {\n  function test(pattern) {\n    var result = wildcard(pattern, target, reMimePartSplit);\n\n    // ensure that we have a valid mime type (should have two parts)\n    return result && result.length >= 2;\n  }\n\n  return pattern ? test(pattern.split(';')[0]) : test;\n};\n", "/*!\nTurbo 8.0.12\nCopyright \u00A9 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function (submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form ||\n      raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n  const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  const candidate = element ? element.closest(\"input, button\") : null;\n  return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n\n(function () {\n  if (\"submitter\" in Event.prototype) return\n\n  let prototype = window.Event.prototype;\n  // Certain versions of Safari 15 have a bug where they won't\n  // populate the submitter. This hurts TurboDrive's enable/disable detection.\n  // See https://bugs.webkit.org/show_bug.cgi?id=229660\n  if (\"SubmitEvent\" in window) {\n    const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n    if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n      prototype = prototypeOfSubmitEvent;\n    } else {\n      return // polyfill not needed\n    }\n  }\n\n  addEventListener(\"click\", clickCaptured, true);\n\n  Object.defineProperty(prototype, \"submitter\", {\n    get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target)\n      }\n    }\n  });\n})();\n\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 15).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return nativeFetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n\n  async #allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.#resolveRequestPromise\n      },\n      target: this.target\n    });\n    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n  #prefetchTimeout = null\n  #prefetched = null\n\n  get(url) {\n    if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n      return this.#prefetched.request\n    }\n  }\n\n  setLater(url, request, ttl) {\n    this.clear();\n\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.set(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, PREFETCH_DELAY);\n  }\n\n  set(url, request, ttl) {\n    this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n  }\n\n  clear() {\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n    this.#prefetched = null;\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\n  }\n\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\n\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : undefined\n    }\n  }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.scrollToElement(element);\n      this.focusElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (event.target && event.target.isContentEditable) ||\n      event.defaultPrevented ||\n      event.which > 1 ||\n      event.altKey ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.shiftKey\n    )\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element\n}\n\nclass Renderer {\n  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\n  constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n        //=============================================================================\n        // AND NOW IT BEGINS...\n        //=============================================================================\n        let EMPTY_SET = new Set();\n\n        // default configuration values, updatable by users now\n        let defaults = {\n            morphStyle: \"outerHTML\",\n            callbacks : {\n                beforeNodeAdded: noOp,\n                afterNodeAdded: noOp,\n                beforeNodeMorphed: noOp,\n                afterNodeMorphed: noOp,\n                beforeNodeRemoved: noOp,\n                afterNodeRemoved: noOp,\n                beforeAttributeUpdated: noOp,\n\n            },\n            head: {\n                style: 'merge',\n                shouldPreserve: function (elt) {\n                    return elt.getAttribute(\"im-preserve\") === \"true\";\n                },\n                shouldReAppend: function (elt) {\n                    return elt.getAttribute(\"im-re-append\") === \"true\";\n                },\n                shouldRemove: noOp,\n                afterHeadMorphed: noOp,\n            }\n        };\n\n        //=============================================================================\n        // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n        //=============================================================================\n        function morph(oldNode, newContent, config = {}) {\n\n            if (oldNode instanceof Document) {\n                oldNode = oldNode.documentElement;\n            }\n\n            if (typeof newContent === 'string') {\n                newContent = parseContent(newContent);\n            }\n\n            let normalizedContent = normalizeContent(newContent);\n\n            let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n            return morphNormalizedContent(oldNode, normalizedContent, ctx);\n        }\n\n        function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n            if (ctx.head.block) {\n                let oldHead = oldNode.querySelector('head');\n                let newHead = normalizedNewContent.querySelector('head');\n                if (oldHead && newHead) {\n                    let promises = handleHeadElement(newHead, oldHead, ctx);\n                    // when head promises resolve, call morph again, ignoring the head tag\n                    Promise.all(promises).then(function () {\n                        morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n                            head: {\n                                block: false,\n                                ignore: true\n                            }\n                        }));\n                    });\n                    return;\n                }\n            }\n\n            if (ctx.morphStyle === \"innerHTML\") {\n\n                // innerHTML, so we are only updating the children\n                morphChildren(normalizedNewContent, oldNode, ctx);\n                return oldNode.children;\n\n            } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n                // otherwise find the best element match in the new content, morph that, and merge its siblings\n                // into either side of the best match\n                let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n                // stash the siblings that will need to be inserted on either side of the best match\n                let previousSibling = bestMatch?.previousSibling;\n                let nextSibling = bestMatch?.nextSibling;\n\n                // morph it\n                let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n                if (bestMatch) {\n                    // if there was a best match, merge the siblings in too and return the\n                    // whole bunch\n                    return insertSiblings(previousSibling, morphedNode, nextSibling);\n                } else {\n                    // otherwise nothing was added to the DOM\n                    return []\n                }\n            } else {\n                throw \"Do not understand how to morph style \" + ctx.morphStyle;\n            }\n        }\n\n\n        /**\n         * @param possibleActiveElement\n         * @param ctx\n         * @returns {boolean}\n         */\n        function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n            return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n        }\n\n        /**\n         * @param oldNode root node to merge content into\n         * @param newContent new content to merge\n         * @param ctx the merge context\n         * @returns {Element} the element that ended up in the DOM\n         */\n        function morphOldNodeTo(oldNode, newContent, ctx) {\n            if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n                oldNode.remove();\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return null;\n            } else if (!isSoftMatch(oldNode, newContent)) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n                if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n                oldNode.parentElement.replaceChild(newContent, oldNode);\n                ctx.callbacks.afterNodeAdded(newContent);\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return newContent;\n            } else {\n                if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n                if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n                    handleHeadElement(newContent, oldNode, ctx);\n                } else {\n                    syncNodeFrom(newContent, oldNode, ctx);\n                    if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n                        morphChildren(newContent, oldNode, ctx);\n                    }\n                }\n                ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n                return oldNode;\n            }\n        }\n\n        /**\n         * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n         * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n         * by using id sets, we are able to better match up with content deeper in the DOM.\n         *\n         * Basic algorithm is, for each node in the new content:\n         *\n         * - if we have reached the end of the old parent, append the new content\n         * - if the new content has an id set match with the current insertion point, morph\n         * - search for an id set match\n         * - if id set match found, morph\n         * - otherwise search for a \"soft\" match\n         * - if a soft match is found, morph\n         * - otherwise, prepend the new node before the current insertion point\n         *\n         * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n         * with the current node.  See findIdSetMatch() and findSoftMatch() for details.\n         *\n         * @param {Element} newParent the parent element of the new content\n         * @param {Element } oldParent the old content that we are merging the new content into\n         * @param ctx the merge context\n         */\n        function morphChildren(newParent, oldParent, ctx) {\n\n            let nextNewChild = newParent.firstChild;\n            let insertionPoint = oldParent.firstChild;\n            let newChild;\n\n            // run through all the new content\n            while (nextNewChild) {\n\n                newChild = nextNewChild;\n                nextNewChild = newChild.nextSibling;\n\n                // if we are at the end of the exiting parent's children, just append\n                if (insertionPoint == null) {\n                    if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                    oldParent.appendChild(newChild);\n                    ctx.callbacks.afterNodeAdded(newChild);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // if the current node has an id set match then morph\n                if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n                    morphOldNodeTo(insertionPoint, newChild, ctx);\n                    insertionPoint = insertionPoint.nextSibling;\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // otherwise search forward in the existing old children for an id set match\n                let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a potential match, remove the nodes until that point and morph\n                if (idSetMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n                    morphOldNodeTo(idSetMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // no id set match found, so scan forward for a soft match for the current node\n                let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a soft match for the current node, morph\n                if (softMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n                    morphOldNodeTo(softMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // abandon all hope of morphing, just insert the new child before the insertion point\n                // and move on\n                if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                oldParent.insertBefore(newChild, insertionPoint);\n                ctx.callbacks.afterNodeAdded(newChild);\n                removeIdsFromConsideration(ctx, newChild);\n            }\n\n            // remove any remaining old nodes that didn't match up with new content\n            while (insertionPoint !== null) {\n\n                let tempNode = insertionPoint;\n                insertionPoint = insertionPoint.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n        }\n\n        //=============================================================================\n        // Attribute Syncing Code\n        //=============================================================================\n\n        /**\n         * @param attr {String} the attribute to be mutated\n         * @param to {Element} the element that is going to be updated\n         * @param updateType {(\"update\"|\"remove\")}\n         * @param ctx the merge context\n         * @returns {boolean} true if the attribute should be ignored, false otherwise\n         */\n        function ignoreAttribute(attr, to, updateType, ctx) {\n            if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n                return true;\n            }\n            return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n        }\n\n        /**\n         * syncs a given node with another node, copying over all attributes and\n         * inner element state from the 'from' node to the 'to' node\n         *\n         * @param {Element} from the element to copy attributes & state from\n         * @param {Element} to the element to copy attributes & state to\n         * @param ctx the merge context\n         */\n        function syncNodeFrom(from, to, ctx) {\n            let type = from.nodeType;\n\n            // if is an element type, sync the attributes from the\n            // new node into the new node\n            if (type === 1 /* element type */) {\n                const fromAttributes = from.attributes;\n                const toAttributes = to.attributes;\n                for (const fromAttribute of fromAttributes) {\n                    if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n                        continue;\n                    }\n                    if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n                        to.setAttribute(fromAttribute.name, fromAttribute.value);\n                    }\n                }\n                // iterate backwards to avoid skipping over items when a delete occurs\n                for (let i = toAttributes.length - 1; 0 <= i; i--) {\n                    const toAttribute = toAttributes[i];\n                    if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n                        continue;\n                    }\n                    if (!from.hasAttribute(toAttribute.name)) {\n                        to.removeAttribute(toAttribute.name);\n                    }\n                }\n            }\n\n            // sync text nodes\n            if (type === 8 /* comment */ || type === 3 /* text */) {\n                if (to.nodeValue !== from.nodeValue) {\n                    to.nodeValue = from.nodeValue;\n                }\n            }\n\n            if (!ignoreValueOfActiveElement(to, ctx)) {\n                // sync input values\n                syncInputValue(from, to, ctx);\n            }\n        }\n\n        /**\n         * @param from {Element} element to sync the value from\n         * @param to {Element} element to sync the value to\n         * @param attributeName {String} the attribute name\n         * @param ctx the merge context\n         */\n        function syncBooleanAttribute(from, to, attributeName, ctx) {\n            if (from[attributeName] !== to[attributeName]) {\n                let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n                if (!ignoreUpdate) {\n                    to[attributeName] = from[attributeName];\n                }\n                if (from[attributeName]) {\n                    if (!ignoreUpdate) {\n                        to.setAttribute(attributeName, from[attributeName]);\n                    }\n                } else {\n                    if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n                        to.removeAttribute(attributeName);\n                    }\n                }\n            }\n        }\n\n        /**\n         * NB: many bothans died to bring us information:\n         *\n         *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n         *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n         *\n         * @param from {Element} the element to sync the input value from\n         * @param to {Element} the element to sync the input value to\n         * @param ctx the merge context\n         */\n        function syncInputValue(from, to, ctx) {\n            if (from instanceof HTMLInputElement &&\n                to instanceof HTMLInputElement &&\n                from.type !== 'file') {\n\n                let fromValue = from.value;\n                let toValue = to.value;\n\n                // sync boolean attributes\n                syncBooleanAttribute(from, to, 'checked', ctx);\n                syncBooleanAttribute(from, to, 'disabled', ctx);\n\n                if (!from.hasAttribute('value')) {\n                    if (!ignoreAttribute('value', to, 'remove', ctx)) {\n                        to.value = '';\n                        to.removeAttribute('value');\n                    }\n                } else if (fromValue !== toValue) {\n                    if (!ignoreAttribute('value', to, 'update', ctx)) {\n                        to.setAttribute('value', fromValue);\n                        to.value = fromValue;\n                    }\n                }\n            } else if (from instanceof HTMLOptionElement) {\n                syncBooleanAttribute(from, to, 'selected', ctx);\n            } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n                let fromValue = from.value;\n                let toValue = to.value;\n                if (ignoreAttribute('value', to, 'update', ctx)) {\n                    return;\n                }\n                if (fromValue !== toValue) {\n                    to.value = fromValue;\n                }\n                if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n                    to.firstChild.nodeValue = fromValue;\n                }\n            }\n        }\n\n        //=============================================================================\n        // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n        //=============================================================================\n        function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n            let added = [];\n            let removed = [];\n            let preserved = [];\n            let nodesToAppend = [];\n\n            let headMergeStyle = ctx.head.style;\n\n            // put all new head elements into a Map, by their outerHTML\n            let srcToNewHeadNodes = new Map();\n            for (const newHeadChild of newHeadTag.children) {\n                srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n            }\n\n            // for each elt in the current head\n            for (const currentHeadElt of currentHead.children) {\n\n                // If the current head element is in the map\n                let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n                let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n                let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n                if (inNewContent || isPreserved) {\n                    if (isReAppended) {\n                        // remove the current version and let the new version replace it and re-execute\n                        removed.push(currentHeadElt);\n                    } else {\n                        // this element already exists and should not be re-appended, so remove it from\n                        // the new content map, preserving it in the DOM\n                        srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n                        preserved.push(currentHeadElt);\n                    }\n                } else {\n                    if (headMergeStyle === \"append\") {\n                        // we are appending and this existing element is not new content\n                        // so if and only if it is marked for re-append do we do anything\n                        if (isReAppended) {\n                            removed.push(currentHeadElt);\n                            nodesToAppend.push(currentHeadElt);\n                        }\n                    } else {\n                        // if this is a merge, we remove this content since it is not in the new head\n                        if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n                            removed.push(currentHeadElt);\n                        }\n                    }\n                }\n            }\n\n            // Push the remaining new head elements in the Map into the\n            // nodes to append to the head tag\n            nodesToAppend.push(...srcToNewHeadNodes.values());\n\n            let promises = [];\n            for (const newNode of nodesToAppend) {\n                let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n                if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n                    if (newElt.href || newElt.src) {\n                        let resolve = null;\n                        let promise = new Promise(function (_resolve) {\n                            resolve = _resolve;\n                        });\n                        newElt.addEventListener('load', function () {\n                            resolve();\n                        });\n                        promises.push(promise);\n                    }\n                    currentHead.appendChild(newElt);\n                    ctx.callbacks.afterNodeAdded(newElt);\n                    added.push(newElt);\n                }\n            }\n\n            // remove all removed elements, after we have appended the new elements to avoid\n            // additional network requests for things like style sheets\n            for (const removedElement of removed) {\n                if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n                    currentHead.removeChild(removedElement);\n                    ctx.callbacks.afterNodeRemoved(removedElement);\n                }\n            }\n\n            ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n            return promises;\n        }\n\n        function noOp() {\n        }\n\n        /*\n          Deep merges the config object and the Idiomoroph.defaults object to\n          produce a final configuration object\n         */\n        function mergeDefaults(config) {\n            let finalConfig = {};\n            // copy top level stuff into final config\n            Object.assign(finalConfig, defaults);\n            Object.assign(finalConfig, config);\n\n            // copy callbacks into final config (do this to deep merge the callbacks)\n            finalConfig.callbacks = {};\n            Object.assign(finalConfig.callbacks, defaults.callbacks);\n            Object.assign(finalConfig.callbacks, config.callbacks);\n\n            // copy head config into final config  (do this to deep merge the head)\n            finalConfig.head = {};\n            Object.assign(finalConfig.head, defaults.head);\n            Object.assign(finalConfig.head, config.head);\n            return finalConfig;\n        }\n\n        function createMorphContext(oldNode, newContent, config) {\n            config = mergeDefaults(config);\n            return {\n                target: oldNode,\n                newContent: newContent,\n                config: config,\n                morphStyle: config.morphStyle,\n                ignoreActive: config.ignoreActive,\n                ignoreActiveValue: config.ignoreActiveValue,\n                idMap: createIdMap(oldNode, newContent),\n                deadIds: new Set(),\n                callbacks: config.callbacks,\n                head: config.head\n            }\n        }\n\n        function isIdSetMatch(node1, node2, ctx) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n                if (node1.id !== \"\" && node1.id === node2.id) {\n                    return true;\n                } else {\n                    return getIdIntersectionCount(ctx, node1, node2) > 0;\n                }\n            }\n            return false;\n        }\n\n        function isSoftMatch(node1, node2) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n        }\n\n        function removeNodesBetween(startInclusive, endExclusive, ctx) {\n            while (startInclusive !== endExclusive) {\n                let tempNode = startInclusive;\n                startInclusive = startInclusive.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n            removeIdsFromConsideration(ctx, endExclusive);\n            return endExclusive.nextSibling;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential id match\n        // for the newChild.  We stop if we find a potential id match for the new child OR\n        // if the number of potential id matches we are discarding is greater than the\n        // potential id matches for the new child\n        //=============================================================================\n        function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            // max id matches we are willing to discard in our search\n            let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n            let potentialMatch = null;\n\n            // only search forward if there is a possibility of an id match\n            if (newChildPotentialIdCount > 0) {\n                let potentialMatch = insertionPoint;\n                // if there is a possibility of an id match, scan forward\n                // keep track of the potential id match count we are discarding (the\n                // newChildPotentialIdCount must be greater than this to make it likely\n                // worth it)\n                let otherMatchCount = 0;\n                while (potentialMatch != null) {\n\n                    // If we have an id match, return the current potential match\n                    if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n                        return potentialMatch;\n                    }\n\n                    // computer the other potential matches of this new content\n                    otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n                    if (otherMatchCount > newChildPotentialIdCount) {\n                        // if we have more potential id matches in _other_ content, we\n                        // do not have a good candidate for an id match, so return null\n                        return null;\n                    }\n\n                    // advanced to the next old content child\n                    potentialMatch = potentialMatch.nextSibling;\n                }\n            }\n            return potentialMatch;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n        // for the newChild.  We stop if we find a potential soft match for the new child OR\n        // if we find a potential id match in the old parents children OR if we find two\n        // potential soft matches for the next two pieces of new content\n        //=============================================================================\n        function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            let potentialSoftMatch = insertionPoint;\n            let nextSibling = newChild.nextSibling;\n            let siblingSoftMatchCount = 0;\n\n            while (potentialSoftMatch != null) {\n\n                if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n                    // the current potential soft match has a potential id set match with the remaining new\n                    // content so bail out of looking\n                    return null;\n                }\n\n                // if we have a soft match with the current node, return it\n                if (isSoftMatch(newChild, potentialSoftMatch)) {\n                    return potentialSoftMatch;\n                }\n\n                if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n                    // the next new node has a soft match with this node, so\n                    // increment the count of future soft matches\n                    siblingSoftMatchCount++;\n                    nextSibling = nextSibling.nextSibling;\n\n                    // If there are two future soft matches, bail to allow the siblings to soft match\n                    // so that we don't consume future soft matches for the sake of the current node\n                    if (siblingSoftMatchCount >= 2) {\n                        return null;\n                    }\n                }\n\n                // advanced to the next old content child\n                potentialSoftMatch = potentialSoftMatch.nextSibling;\n            }\n\n            return potentialSoftMatch;\n        }\n\n        function parseContent(newContent) {\n            let parser = new DOMParser();\n\n            // remove svgs to avoid false-positive matches on head, etc.\n            let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n            // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n            if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n                let content = parser.parseFromString(newContent, \"text/html\");\n                // if it is a full HTML document, return the document itself as the parent container\n                if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n                    content.generatedByIdiomorph = true;\n                    return content;\n                } else {\n                    // otherwise return the html element as the parent container\n                    let htmlElement = content.firstChild;\n                    if (htmlElement) {\n                        htmlElement.generatedByIdiomorph = true;\n                        return htmlElement;\n                    } else {\n                        return null;\n                    }\n                }\n            } else {\n                // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n                // deal with touchy tags like tr, tbody, etc.\n                let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n                let content = responseDoc.body.querySelector('template').content;\n                content.generatedByIdiomorph = true;\n                return content\n            }\n        }\n\n        function normalizeContent(newContent) {\n            if (newContent == null) {\n                // noinspection UnnecessaryLocalVariableJS\n                const dummyParent = document.createElement('div');\n                return dummyParent;\n            } else if (newContent.generatedByIdiomorph) {\n                // the template tag created by idiomorph parsing can serve as a dummy parent\n                return newContent;\n            } else if (newContent instanceof Node) {\n                // a single node is added as a child to a dummy parent\n                const dummyParent = document.createElement('div');\n                dummyParent.append(newContent);\n                return dummyParent;\n            } else {\n                // all nodes in the array or HTMLElement collection are consolidated under\n                // a single dummy parent element\n                const dummyParent = document.createElement('div');\n                for (const elt of [...newContent]) {\n                    dummyParent.append(elt);\n                }\n                return dummyParent;\n            }\n        }\n\n        function insertSiblings(previousSibling, morphedNode, nextSibling) {\n            let stack = [];\n            let added = [];\n            while (previousSibling != null) {\n                stack.push(previousSibling);\n                previousSibling = previousSibling.previousSibling;\n            }\n            while (stack.length > 0) {\n                let node = stack.pop();\n                added.push(node); // push added preceding siblings on in order and insert\n                morphedNode.parentElement.insertBefore(node, morphedNode);\n            }\n            added.push(morphedNode);\n            while (nextSibling != null) {\n                stack.push(nextSibling);\n                added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n                nextSibling = nextSibling.nextSibling;\n            }\n            while (stack.length > 0) {\n                morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n            }\n            return added;\n        }\n\n        function findBestNodeMatch(newContent, oldNode, ctx) {\n            let currentElement;\n            currentElement = newContent.firstChild;\n            let bestElement = currentElement;\n            let score = 0;\n            while (currentElement) {\n                let newScore = scoreElement(currentElement, oldNode, ctx);\n                if (newScore > score) {\n                    bestElement = currentElement;\n                    score = newScore;\n                }\n                currentElement = currentElement.nextSibling;\n            }\n            return bestElement;\n        }\n\n        function scoreElement(node1, node2, ctx) {\n            if (isSoftMatch(node1, node2)) {\n                return .5 + getIdIntersectionCount(ctx, node1, node2);\n            }\n            return 0;\n        }\n\n        function removeNode(tempNode, ctx) {\n            removeIdsFromConsideration(ctx, tempNode);\n            if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n            tempNode.remove();\n            ctx.callbacks.afterNodeRemoved(tempNode);\n        }\n\n        //=============================================================================\n        // ID Set Functions\n        //=============================================================================\n\n        function isIdInConsideration(ctx, id) {\n            return !ctx.deadIds.has(id);\n        }\n\n        function idIsWithinNode(ctx, id, targetNode) {\n            let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n            return idSet.has(id);\n        }\n\n        function removeIdsFromConsideration(ctx, node) {\n            let idSet = ctx.idMap.get(node) || EMPTY_SET;\n            for (const id of idSet) {\n                ctx.deadIds.add(id);\n            }\n        }\n\n        function getIdIntersectionCount(ctx, node1, node2) {\n            let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n            let matchCount = 0;\n            for (const id of sourceSet) {\n                // a potential match is an id in the source and potentialIdsSet, but\n                // that has not already been merged into the DOM\n                if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n                    ++matchCount;\n                }\n            }\n            return matchCount;\n        }\n\n        /**\n         * A bottom up algorithm that finds all elements with ids inside of the node\n         * argument and populates id sets for those nodes and all their parents, generating\n         * a set of ids contained within all nodes for the entire hierarchy in the DOM\n         *\n         * @param node {Element}\n         * @param {Map<Node, Set<String>>} idMap\n         */\n        function populateIdMapForNode(node, idMap) {\n            let nodeParent = node.parentElement;\n            // find all elements with an id property\n            let idElements = node.querySelectorAll('[id]');\n            for (const elt of idElements) {\n                let current = elt;\n                // walk up the parent hierarchy of that element, adding the id\n                // of element to the parent's id set\n                while (current !== nodeParent && current != null) {\n                    let idSet = idMap.get(current);\n                    // if the id set doesn't exist, create it and insert it in the  map\n                    if (idSet == null) {\n                        idSet = new Set();\n                        idMap.set(current, idSet);\n                    }\n                    idSet.add(elt.id);\n                    current = current.parentElement;\n                }\n            }\n        }\n\n        /**\n         * This function computes a map of nodes to all ids contained within that node (inclusive of the\n         * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n         * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n         * to contribute to a parent nodes matching.\n         *\n         * @param {Element} oldContent  the old content that will be morphed\n         * @param {Element} newContent  the new content to morph to\n         * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n         */\n        function createIdMap(oldContent, newContent) {\n            let idMap = new Map();\n            populateIdMapForNode(oldContent, idMap);\n            populateIdMapForNode(newContent, idMap);\n            return idMap;\n        }\n\n        //=============================================================================\n        // This is what ends up becoming the Idiomorph global object\n        //=============================================================================\n        return {\n            morph,\n            defaults\n        }\n    })();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\nfunction morphChildren(currentElement, newElement) {\n  morphElements(currentElement, newElement.children, {\n    morphStyle: \"innerHTML\"\n  });\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement);\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n  }\n\n  get shouldMorphPage() {\n    return this.getSetting(\"refresh-method\") === \"morph\"\n  }\n\n  get shouldPreserveScrollPosition() {\n    return this.getSetting(\"refresh-scroll\") === \"preserve\"\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  get silent() {\n    return this.isSamePage\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isSamePage || this.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render(async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      });\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n      if (this.isSamePage) {\n        this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  getHistoryMethodForAction(action) {\n    switch (action) {\n      case \"replace\":\n        return history.replaceState\n      case \"advance\":\n      case \"restore\":\n        return history.pushState\n    }\n  }\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n    visit.goToSamePageAnchor();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = this.location?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n  deprecatedSelector = \"[data-turbo-cache=false]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n  }\n\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n\n    if (elements.length) {\n      console.warn(\n        `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n      );\n    }\n\n    return [...elements]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  pageLoaded = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      addEventListener(\"load\", this.onPageLoad, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      removeEventListener(\"load\", this.onPageLoad, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    if (this.shouldHandlePopState()) {\n      const { turbo } = event.state || {};\n      if (turbo) {\n        this.location = new URL(window.location.href);\n        const { restorationIdentifier, restorationIndex } = turbo;\n        this.restorationIdentifier = restorationIdentifier;\n        const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n        this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n        this.currentIndex = restorationIndex;\n      }\n    }\n  }\n\n  onPageLoad = async (_event) => {\n    await nextMicrotask();\n    this.pageLoaded = true;\n  }\n\n  // Private\n\n  shouldHandlePopState() {\n    // Safari dispatches a popstate event after window's load event, ignore it\n    return this.pageIsLoaded()\n  }\n\n  pageIsLoaded() {\n    return this.pageLoaded || document.readyState == \"complete\"\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url.toString());\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if(!snapshot.shouldPreserveScrollPosition) {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    const anchor = getAnchor(location);\n    const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n    const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n    return (\n      action !== \"replace\" &&\n      getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n      (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n    )\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.activateNewBodyScriptElements();\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: element => !canRefreshFrame(element)\n      }\n    });\n\n    for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n      if (canRefreshFrame(frame)) frame.reload();\n    }\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nfunction canRefreshFrame(frame) {\n  return frame instanceof FrameElement &&\n    frame.src &&\n    frame.refresh === \"morph\" &&\n    !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n  keys = []\n  snapshots = {}\n\n  constructor(size) {\n    this.size = size;\n  }\n\n  has(location) {\n    return toCacheKey(location) in this.snapshots\n  }\n\n  get(location) {\n    if (this.has(location)) {\n      const snapshot = this.read(location);\n      this.touch(location);\n      return snapshot\n    }\n  }\n\n  put(location, snapshot) {\n    this.write(location, snapshot);\n    this.touch(location);\n    return snapshot\n  }\n\n  clear() {\n    this.snapshots = {};\n  }\n\n  // Private\n\n  read(location) {\n    return this.snapshots[toCacheKey(location)]\n  }\n\n  write(location, snapshot) {\n    this.snapshots[toCacheKey(location)] = snapshot;\n  }\n\n  touch(location) {\n    const key = toCacheKey(location);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      delete this.snapshots[key];\n    }\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, requestId) {\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    if (!isRecentRequest && !this.navigator.currentVisit) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n        locationIsVisitable(location, this.snapshot.rootLocation)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    if (!visit.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n    }\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    return this.navigator.locationWithActionIsSamePage(location, action)\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    if (!this.navigator.currentVisit?.silent) {\n      this.notifyApplicationBeforeCachingSnapshot();\n    }\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(\n      new HashChangeEvent(\"hashchange\", {\n        oldURL: oldURL.toString(),\n        newURL: newURL.toString()\n      })\n    );\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n  console.warn(\n    \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  clearCache: clearCache,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const { fetchRequest } = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    request.headers[\"Turbo-Frame\"] = this.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    return getFrameElementById(id) ?? this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get enabled() {\n    return !this.element.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n}\n\nfunction getFrameElementById(id) {\n  if (id != null) {\n    const element = document.getElementById(id);\n    if (element instanceof FrameElement) {\n      return element\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    session.refresh(this.baseURI, this.requestId);\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\n   */\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction\n      }\n      this.#raise(\"unknown action\");\n    }\n    this.#raise(\"action attribute is missing\");\n  }\n\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  let element = document.currentScript;\n  if (!element) return\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  element = element.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `,\n        element.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n    this.subscriptionDisconnected()\n  }\n\n  attributeChangedCallback() {\n    if (this.subscription) {\n      this.disconnectedCallback()\n      this.connectedCallback()\n    }\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\";\n\nconst application = Application.start();\n\n// Configure Stimulus development experience\napplication.debug = false;\nwindow.Stimulus = application;\n\nexport { application };\n", "/**\n *\n * @param {Blob} blob\n * @returns Promise<string> a Base64 encoded string\n */\nexport function blobToBase64(blob) {\n  console.debug(\"blobToBase64\", blob);\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onloadend = () => {\n      const base64data = reader.result.split(\",\")[1];\n      resolve(base64data);\n    };\n    reader.onerror = reject;\n    reader.readAsDataURL(blob);\n  });\n}\n", "import { Controller } from \"@hotwired/stimulus\";\nimport { blobToBase64 } from \"../utils\";\nexport default class extends Controller {\n  static values = {\n    fallback: String,\n    accept: String,\n  };\n  connect() {\n    console.debug(\"[Bridge] connected\");\n\n    if (!window.FlutterBridge) {\n      return;\n    }\n  }\n\n  // Events\n  /**\n   * Override onSubmit event for Flutter Bridge\n   * @param {SubmitEvent} e\n   * @returns {boolean}\n   */\n  onSubmit(e) {\n    if (window.FlutterBridge) {\n      console.debug(\"[Bridge] onSubmit\", e);\n\n      e.preventDefault();\n      this.downloadAsFormSubmit(e);\n      return false;\n    }\n  }\n\n  // Actions\n  /**\n   * Downloads the file from the href of the currentTarget\n   * @param {Event} e\n   * @returns {boolean}\n   */\n  async download(e) {\n    if (!window.FlutterBridge) {\n      return;\n    }\n    e.preventDefault();\n    console.debug(\"[Bridge] download\", e.currentTarget);\n\n    // Get the file extension from event.currentTarget.href\n    const filenameExtension = e.currentTarget.href.split(\".\").pop();\n    const fallbackFilename =\n      this.fallbackValue ?? `download.${filenameExtension}`;\n\n    const response = await fetch(e.currentTarget.href);\n    if (!response.ok) {\n      console.error(\"[Bridge] download failed\", e.currentTarget.href, response);\n      return false;\n    }\n\n    const blob = await response.blob();\n    const filename = this.getFilename(response, fallbackFilename);\n    console.debug(\"[Bridge] Retrieved blob\", filename);\n\n    blobToBase64(blob).then((base64) => {\n      window.flutter_inappwebview.callHandler(\n        \"downloadBase64\",\n        filename,\n        base64\n      );\n    });\n    return false;\n  }\n\n  /**\n   * Creates a request based on a form and returns the file\n   * @param {SubmitEvent} e\n   */\n  async downloadAsFormSubmit(e) {\n    e.preventDefault();\n    console.debug(\"[Bridge] downloadAsFormSubmit\", e);\n    let headers = {};\n    if (this.acceptValue) {\n      headers = {\n        Accept: this.acceptValue,\n      };\n    }\n\n    const response = await fetch(e.target.action, {\n      method: e.target.method ?? \"POST\",\n      body: new URLSearchParams(new FormData(e.target)),\n      headers: headers,\n    });\n\n    if (!response.ok) {\n      console.error(\"[Bridge] download failed\", e.target.action, response);\n      return false;\n    }\n    const blob = await response.blob();\n\n    const filename = this.getFilename(response);\n    console.debug(\"[Bridge] Retrieved blob\", filename);\n\n    blobToBase64(blob).then((base64) => {\n      window.flutter_inappwebview.callHandler(\n        \"downloadBase64\",\n        filename,\n        base64\n      );\n    });\n  }\n\n  // Utilities\n  /**\n   * Returns the filename from either the Content-Disposition header or the fallback name\n   * @param {Response} response\n   * @param {String} fallback\n   * @returns String\n   */\n  getFilename(response, fallback = \"download\") {\n    const header = response.headers.get(\"Content-Disposition\");\n    const match = header?.match(/filename=\"?([^\"]+)\"?/);\n    return match ? match[1] : fallback;\n  }\n}\n", "import { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport default class extends BaseController {\n  static targets = [\"click\"];\n\n  click() {\n    if (!this.hasClickTarget)\n      console.error(\"element controller: no click target found\");\n\n    this.clickTargets.forEach((target) => target.click());\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"flow\"\nexport default class extends Controller {\n  static targets = [\"conditionalFrame\", \"conditionalRadio\", \"submitButton\"];\n\n  connect() {\n    const selectedRadio = this._isSelectedRadio();\n    if (selectedRadio) this.enableConditionalFrame(selectedRadio.value);\n\n    this._updateSubmitState();\n  }\n\n  submit(e) {\n    this.enableConditionalFrame(e.target.value);\n    this._updateSubmitState();\n  }\n\n  refresh() {}\n\n  enableConditionalFrame(value) {\n    this.conditionalFrameTargets.forEach((frame) => {\n      if (frame.dataset.flowConditionValue == value) {\n        frame.disabled = false;\n        frame.reload();\n      } else {\n        frame.innerHTML = \"\";\n        frame.disabled = true;\n      }\n    });\n  }\n\n  _updateSubmitState() {\n    const selectedRadio = this._isSelectedRadio();\n\n    if (this.hasSubmitButtonTarget) {\n      this.submitButtonTarget.disabled = !selectedRadio;\n    }\n  }\n\n  _isSelectedRadio() {\n    const selectedRadio = this.conditionalRadioTargets.find(\n      (radio) => radio.checked\n    );\n\n    return selectedRadio;\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n    this.element.textContent = \"Hello World!\";\n  }\n}\n", "/*!\nHotwireCombobox 0.3.2\n*/\nimport { Controller } from '@hotwired/stimulus';\n\nconst Combobox = {};\n\nCombobox.Actors = Base => class extends Base {\n  _initializeActors() {\n    this._actingListbox = this.listboxTarget;\n    this._actingCombobox = this.comboboxTarget;\n  }\n\n  _forAllComboboxes(callback) {\n    this._allComboboxes.forEach(callback);\n  }\n\n  get _actingListbox() {\n    return this.actingListbox\n  }\n\n  set _actingListbox(listbox) {\n    this.actingListbox = listbox;\n  }\n\n  get _actingCombobox() {\n    return this.actingCombobox\n  }\n\n  set _actingCombobox(combobox) {\n    this.actingCombobox = combobox;\n  }\n\n  get _allComboboxes() {\n    return [ this.comboboxTarget, this.dialogComboboxTarget ]\n  }\n};\n\nCombobox.Announcements = Base => class extends Base {\n  _announceToScreenReader(display, action) {\n    this.announcerTarget.innerText = `${display} ${action}`;\n  }\n};\n\nCombobox.AsyncLoading = Base => class extends Base {\n  get _isAsync() {\n    return this.hasAsyncSrcValue\n  }\n\n  get _isSync() {\n    return !this._isAsync\n  }\n};\n\nfunction Concerns(Base, ...mixins) {\n  return mixins.reduce((accumulator, current) => current(accumulator), Base)\n}\n\nfunction visible(target) {\n  return !(target.hidden || target.closest(\"[hidden]\"))\n}\n\nfunction wrapAroundAccess(array, index) {\n  const first = 0;\n  const last = array.length - 1;\n\n  if (index < first) return array[last]\n  if (index > last) return array[first]\n  return array[index]\n}\n\nfunction applyFilter(query, { matching }) {\n  return (target) => {\n    if (query) {\n      const value = target.getAttribute(matching) || \"\";\n      const match = value.toLowerCase().includes(query.toLowerCase());\n\n      target.hidden = !match;\n    } else {\n      target.hidden = false;\n    }\n  }\n}\n\nfunction cancel(event) {\n  event.stopPropagation();\n  event.preventDefault();\n}\n\nfunction startsWith(string, substring) {\n  return string.toLowerCase().startsWith(substring.toLowerCase())\n}\n\nfunction debounce(fn, delay = 150) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nfunction isDeleteEvent(event) {\n  return event.inputType === \"deleteContentBackward\" || event.inputType === \"deleteWordBackward\"\n}\n\nfunction sleep(ms) {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction unselectedPortion(element) {\n  if (element.selectionStart === element.selectionEnd) {\n    return element.value\n  } else {\n    return element.value.substring(0, element.selectionStart)\n  }\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nCombobox.Autocomplete = Base => class extends Base {\n  _connectListAutocomplete() {\n    if (!this._autocompletesList) {\n      this._visuallyHideListbox();\n    }\n  }\n\n  _replaceFullQueryWithAutocompletedValue(option) {\n    const autocompletedValue = option.getAttribute(this.autocompletableAttributeValue);\n\n    this._fullQuery = autocompletedValue;\n    this._actingCombobox.setSelectionRange(autocompletedValue.length, autocompletedValue.length);\n  }\n\n  _autocompleteMissingPortion(option) {\n    const typedValue = this._typedQuery;\n    const autocompletedValue = option.getAttribute(this.autocompletableAttributeValue);\n\n    if (this._autocompletesInline && startsWith(autocompletedValue, typedValue)) {\n      this._fullQuery = autocompletedValue;\n      this._actingCombobox.setSelectionRange(typedValue.length, autocompletedValue.length);\n    }\n  }\n\n  // +visuallyHideListbox+ hides the listbox from the user,\n  // but makes it still searchable by JS.\n  _visuallyHideListbox() {\n    this.listboxTarget.style.display = \"none\";\n  }\n\n  get _isExactAutocompleteMatch() {\n    return this._immediatelyAutocompletableValue === this._fullQuery\n  }\n\n  // All `_isExactAutocompleteMatch` matches are `_isPartialAutocompleteMatch` matches\n  // but not all `_isPartialAutocompleteMatch` matches are `_isExactAutocompleteMatch` matches.\n  get _isPartialAutocompleteMatch() {\n    return !!this._immediatelyAutocompletableValue &&\n      startsWith(this._immediatelyAutocompletableValue, this._fullQuery)\n  }\n\n  get _autocompletesList() {\n    return this.autocompleteValue === \"both\" || this.autocompleteValue === \"list\"\n  }\n\n  get _autocompletesInline() {\n    return this.autocompleteValue === \"both\" || this.autocompleteValue === \"inline\"\n  }\n\n  get _immediatelyAutocompletableValue() {\n    return this._ensurableOption?.getAttribute(this.autocompletableAttributeValue)\n  }\n};\n\nconst MAX_CALLBACK_ATTEMPTS = 3;\n\nCombobox.Callbacks = Base => class extends Base {\n  _initializeCallbacks() {\n    this.callbackQueue = [];\n    this.callbackExecutionAttempts = {};\n  }\n\n  _enqueueCallback() {\n    const callbackId = crypto.randomUUID();\n    this.callbackQueue.push(callbackId);\n    return callbackId\n  }\n\n  _isNextCallback(callbackId) {\n    return this._nextCallback === callbackId\n  }\n\n  _callbackAttemptsExceeded(callbackId) {\n    return this._callbackAttempts(callbackId) > MAX_CALLBACK_ATTEMPTS\n  }\n\n  _callbackAttempts(callbackId) {\n    return this.callbackExecutionAttempts[callbackId] || 0\n  }\n\n  _recordCallbackAttempt(callbackId) {\n    this.callbackExecutionAttempts[callbackId] = this._callbackAttempts(callbackId) + 1;\n  }\n\n  _dequeueCallback(callbackId) {\n    this.callbackQueue = this.callbackQueue.filter(id => id !== callbackId);\n    this._forgetCallbackExecutionAttempts(callbackId);\n  }\n\n  _forgetCallbackExecutionAttempts(callbackId) {\n    delete this.callbackExecutionAttempts[callbackId];\n  }\n\n  get _nextCallback() {\n    return this.callbackQueue[0]\n  }\n};\n\nCombobox.Dialog = Base => class extends Base {\n  rerouteListboxStreamToDialog({ detail: { newStream } }) {\n    if (newStream.target == this.listboxTarget.id && this._dialogIsOpen) {\n      newStream.setAttribute(\"target\", this.dialogListboxTarget.id);\n    }\n  }\n\n  _connectDialog() {\n    if (window.visualViewport) {\n      window.visualViewport.addEventListener(\"resize\", this._resizeDialog);\n    }\n  }\n\n  _disconnectDialog() {\n    if (window.visualViewport) {\n      window.visualViewport.removeEventListener(\"resize\", this._resizeDialog);\n    }\n  }\n\n  _moveArtifactsToDialog() {\n    this.dialogComboboxTarget.value = this._fullQuery;\n\n    this._actingCombobox = this.dialogComboboxTarget;\n    this._actingListbox = this.dialogListboxTarget;\n\n    this.dialogListboxTarget.append(...this.listboxTarget.children);\n  }\n\n  _moveArtifactsInline() {\n    this.comboboxTarget.value = this._fullQuery;\n\n    this._actingCombobox = this.comboboxTarget;\n    this._actingListbox = this.listboxTarget;\n\n    this.listboxTarget.append(...this.dialogListboxTarget.children);\n  }\n\n  _resizeDialog = () => {\n    if (window.visualViewport) {\n      this.dialogTarget.style.setProperty(\n        \"--hw-visual-viewport-height\",\n        `${window.visualViewport.height}px`\n      );\n    }\n  }\n\n  // After closing a dialog, focus returns to the last focused element.\n  // +preventFocusingComboboxAfterClosingDialog+ focuses a placeholder element before opening\n  // the dialog, so that the combobox is not focused again after closing, which would reopen.\n  _preventFocusingComboboxAfterClosingDialog() {\n    this.dialogFocusTrapTarget.focus();\n  }\n\n  get _isSmallViewport() {\n    return window.matchMedia(`(max-width: ${this.smallViewportMaxWidthValue})`).matches\n  }\n\n  get _dialogIsOpen() {\n    return this.dialogTarget.open\n  }\n};\n\nCombobox.Events = Base => class extends Base {\n  _dispatchPreselectionEvent({ isNewAndAllowed, previousValue }) {\n    if (previousValue === this._incomingFieldValueString) return\n\n    dispatch(\"hw-combobox:preselection\", {\n      target: this.element,\n      detail: { ...this._eventableDetails, isNewAndAllowed, previousValue }\n    });\n  }\n\n  _dispatchSelectionEvent() {\n    dispatch(\"hw-combobox:selection\", {\n      target: this.element,\n      detail: this._eventableDetails\n    });\n  }\n\n  _dispatchRemovalEvent({ removedDisplay, removedValue }) {\n    dispatch(\"hw-combobox:removal\", {\n      target: this.element,\n      detail: { ...this._eventableDetails, removedDisplay, removedValue }\n    });\n  }\n\n  get _eventableDetails() {\n    return {\n      value: this._incomingFieldValueString,\n      display: this._fullQuery,\n      query: this._typedQuery,\n      fieldName: this._fieldName,\n      isValid: this._valueIsValid\n    }\n  }\n};\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n  get statusCode() {\n    return this.response.status;\n  }\n  get redirected() {\n    return this.response.redirected;\n  }\n  get ok() {\n    return this.response.ok;\n  }\n  get unauthenticated() {\n    return this.statusCode === 401;\n  }\n  get unprocessableEntity() {\n    return this.statusCode === 422;\n  }\n  get authenticationURL() {\n    return this.response.headers.get(\"WWW-Authenticate\");\n  }\n  get contentType() {\n    const contentType = this.response.headers.get(\"Content-Type\") || \"\";\n    return contentType.replace(/;.*$/, \"\");\n  }\n  get headers() {\n    return this.response.headers;\n  }\n  get html() {\n    if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n      return this.text;\n    }\n    return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`));\n  }\n  get json() {\n    if (this.contentType.match(/^application\\/.*json$/)) {\n      return this.responseJson || (this.responseJson = this.response.json());\n    }\n    return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`));\n  }\n  get text() {\n    return this.responseText || (this.responseText = this.response.text());\n  }\n  get isTurboStream() {\n    return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/);\n  }\n  async renderTurboStream() {\n    if (this.isTurboStream) {\n      if (window.Turbo) {\n        await window.Turbo.renderStreamMessage(await this.text);\n      } else {\n        console.warn(\"You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js\");\n      }\n    } else {\n      return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`));\n    }\n  }\n}\n\nclass RequestInterceptor {\n  static register(interceptor) {\n    this.interceptor = interceptor;\n  }\n  static get() {\n    return this.interceptor;\n  }\n  static reset() {\n    this.interceptor = undefined;\n  }\n}\n\nfunction getCookie(name) {\n  const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n  const prefix = `${encodeURIComponent(name)}=`;\n  const cookie = cookies.find((cookie => cookie.startsWith(prefix)));\n  if (cookie) {\n    const value = cookie.split(\"=\").slice(1).join(\"=\");\n    if (value) {\n      return decodeURIComponent(value);\n    }\n  }\n}\n\nfunction compact(object) {\n  const result = {};\n  for (const key in object) {\n    const value = object[key];\n    if (value !== undefined) {\n      result[key] = value;\n    }\n  }\n  return result;\n}\n\nfunction metaContent(name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`);\n  return element && element.content;\n}\n\nfunction stringEntriesFromFormData(formData) {\n  return [ ...formData ].reduce(((entries, [name, value]) => entries.concat(typeof value === \"string\" ? [ [ name, value ] ] : [])), []);\n}\n\nfunction mergeEntries(searchParams, entries) {\n  for (const [name, value] of entries) {\n    if (value instanceof window.File) continue;\n    if (searchParams.has(name) && !name.includes(\"[]\")) {\n      searchParams.delete(name);\n      searchParams.set(name, value);\n    } else {\n      searchParams.append(name, value);\n    }\n  }\n}\n\nclass FetchRequest {\n  constructor(method, url, options = {}) {\n    this.method = method;\n    this.options = options;\n    this.originalUrl = url.toString();\n  }\n  async perform() {\n    try {\n      const requestInterceptor = RequestInterceptor.get();\n      if (requestInterceptor) {\n        await requestInterceptor(this);\n      }\n    } catch (error) {\n      console.error(error);\n    }\n    const response = new FetchResponse(await window.fetch(this.url, this.fetchOptions));\n    if (response.unauthenticated && response.authenticationURL) {\n      return Promise.reject(window.location.href = response.authenticationURL);\n    }\n    const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity;\n    if (responseStatusIsTurboStreamable && response.isTurboStream) {\n      await response.renderTurboStream();\n    }\n    return response;\n  }\n  addHeader(key, value) {\n    const headers = this.additionalHeaders;\n    headers[key] = value;\n    this.options.headers = headers;\n  }\n  sameHostname() {\n    if (!this.originalUrl.startsWith(\"http:\")) {\n      return true;\n    }\n    try {\n      return new URL(this.originalUrl).hostname === window.location.hostname;\n    } catch (_) {\n      return true;\n    }\n  }\n  get fetchOptions() {\n    return {\n      method: this.method.toUpperCase(),\n      headers: this.headers,\n      body: this.formattedBody,\n      signal: this.signal,\n      credentials: this.credentials,\n      redirect: this.redirect\n    };\n  }\n  get headers() {\n    const baseHeaders = {\n      \"X-Requested-With\": \"XMLHttpRequest\",\n      \"Content-Type\": this.contentType,\n      Accept: this.accept\n    };\n    if (this.sameHostname()) {\n      baseHeaders[\"X-CSRF-Token\"] = this.csrfToken;\n    }\n    return compact(Object.assign(baseHeaders, this.additionalHeaders));\n  }\n  get csrfToken() {\n    return getCookie(metaContent(\"csrf-param\")) || metaContent(\"csrf-token\");\n  }\n  get contentType() {\n    if (this.options.contentType) {\n      return this.options.contentType;\n    } else if (this.body == null || this.body instanceof window.FormData) {\n      return undefined;\n    } else if (this.body instanceof window.File) {\n      return this.body.type;\n    }\n    return \"application/json\";\n  }\n  get accept() {\n    switch (this.responseKind) {\n     case \"html\":\n      return \"text/html, application/xhtml+xml\";\n\n     case \"turbo-stream\":\n      return \"text/vnd.turbo-stream.html, text/html, application/xhtml+xml\";\n\n     case \"json\":\n      return \"application/json, application/vnd.api+json\";\n\n     default:\n      return \"*/*\";\n    }\n  }\n  get body() {\n    return this.options.body;\n  }\n  get query() {\n    const originalQuery = (this.originalUrl.split(\"?\")[1] || \"\").split(\"#\")[0];\n    const params = new URLSearchParams(originalQuery);\n    let requestQuery = this.options.query;\n    if (requestQuery instanceof window.FormData) {\n      requestQuery = stringEntriesFromFormData(requestQuery);\n    } else if (requestQuery instanceof window.URLSearchParams) {\n      requestQuery = requestQuery.entries();\n    } else {\n      requestQuery = Object.entries(requestQuery || {});\n    }\n    mergeEntries(params, requestQuery);\n    const query = params.toString();\n    return query.length > 0 ? `?${query}` : \"\";\n  }\n  get url() {\n    return this.originalUrl.split(\"?\")[0].split(\"#\")[0] + this.query;\n  }\n  get responseKind() {\n    return this.options.responseKind || \"html\";\n  }\n  get signal() {\n    return this.options.signal;\n  }\n  get redirect() {\n    return this.options.redirect || \"follow\";\n  }\n  get credentials() {\n    return this.options.credentials || \"same-origin\";\n  }\n  get additionalHeaders() {\n    return this.options.headers || {};\n  }\n  get formattedBody() {\n    const bodyIsAString = Object.prototype.toString.call(this.body) === \"[object String]\";\n    const contentTypeIsJson = this.headers[\"Content-Type\"] === \"application/json\";\n    if (contentTypeIsJson && !bodyIsAString) {\n      return JSON.stringify(this.body);\n    }\n    return this.body;\n  }\n}\n\nasync function get(url, options) {\n  const request = new FetchRequest(\"get\", url, options);\n  return request.perform();\n}\n\nasync function post(url, options) {\n  const request = new FetchRequest(\"post\", url, options);\n  return request.perform();\n}\n\n// Copyright (c) 2021 Marcelo Lauxen\n\n// Permission is hereby granted, free of charge, to any person obtaining\n// a copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to\n// the following conditions:\n\n// The above copyright notice and this permission notice shall be\n// included in all copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nCombobox.Filtering = Base => class extends Base {\n  filterAndSelect({ inputType }) {\n    this._filter(inputType);\n\n    if (this._isSync) {\n      this._selectOnQuery(inputType);\n    }\n  }\n\n  clear(event) {\n    this._clearQuery();\n    this.chipDismisserTargets.forEach(el => el.click());\n    if (event && !event.defaultPrevented) event.target.focus();\n  }\n\n  _initializeFiltering() {\n    this._debouncedFilterAsync = debounce(this._debouncedFilterAsync.bind(this));\n  }\n\n  _filter(inputType) {\n    if (this._isAsync) {\n      this._debouncedFilterAsync(inputType);\n    } else {\n      this._filterSync();\n    }\n\n    this._markQueried();\n  }\n\n  _debouncedFilterAsync(inputType) {\n    this._filterAsync(inputType);\n  }\n\n  async _filterAsync(inputType) {\n    const query = {\n      q: this._fullQuery,\n      input_type: inputType,\n      for_id: this.element.dataset.asyncId,\n      callback_id: this._enqueueCallback()\n    };\n\n    await get(this.asyncSrcValue, { responseKind: \"turbo-stream\", query });\n  }\n\n  _filterSync() {\n    this._allFilterableOptionElements.forEach(\n      applyFilter(\n        this._fullQuery,\n        { matching: this.filterableAttributeValue }\n      )\n    );\n  }\n\n  _clearQuery() {\n    this._fullQuery = \"\";\n    this.filterAndSelect({ inputType: \"deleteContentBackward\" });\n  }\n\n  _markQueried() {\n    this._forAllComboboxes(el => el.toggleAttribute(\"data-queried\", this._isQueried));\n  }\n\n  get _isQueried() {\n    return this._fullQuery.length > 0\n  }\n\n  get _fullQuery() {\n    return this._actingCombobox.value\n  }\n\n  set _fullQuery(value) {\n    this._actingCombobox.value = value;\n  }\n\n  get _typedQuery() {\n    return unselectedPortion(this._actingCombobox)\n  }\n};\n\nCombobox.FormField = Base => class extends Base {\n  get _fieldValue() {\n    if (this._isMultiselect) {\n      const currentValue = this.hiddenFieldTarget.value;\n      const arrayFromValue = currentValue ? currentValue.split(\",\") : [];\n\n      return new Set(arrayFromValue)\n    } else {\n      return this.hiddenFieldTarget.value\n    }\n  }\n\n  get _fieldValueString() {\n    if (this._isMultiselect) {\n      return this._fieldValueArray.join(\",\")\n    } else {\n      return this.hiddenFieldTarget.value\n    }\n  }\n\n  get _incomingFieldValueString() {\n    if (this._isMultiselect) {\n      const array = this._fieldValueArray;\n\n      if (this.hiddenFieldTarget.dataset.valueForMultiselect) {\n        array.push(this.hiddenFieldTarget.dataset.valueForMultiselect);\n      }\n\n      return array.join(\",\")\n    } else {\n      return this.hiddenFieldTarget.value\n    }\n  }\n\n  get _fieldValueArray() {\n    if (this._isMultiselect) {\n      return Array.from(this._fieldValue)\n    } else {\n      return [ this.hiddenFieldTarget.value ]\n    }\n  }\n\n  set _fieldValue(value) {\n    if (this._isMultiselect) {\n      this.hiddenFieldTarget.dataset.valueForMultiselect = value?.replace(/,/g, \"\");\n      this.hiddenFieldTarget.dataset.displayForMultiselect = this._fullQuery;\n    } else {\n      this.hiddenFieldTarget.value = value;\n    }\n  }\n\n  get _hasEmptyFieldValue() {\n    if (this._isMultiselect) {\n      return this.hiddenFieldTarget.dataset.valueForMultiselect == \"\" ||\n        this.hiddenFieldTarget.dataset.valueForMultiselect == \"undefined\"\n    } else {\n      return this.hiddenFieldTarget.value === \"\"\n    }\n  }\n\n  get _hasFieldValue() {\n    return !this._hasEmptyFieldValue\n  }\n\n  get _fieldName() {\n    return this.hiddenFieldTarget.name\n  }\n\n  set _fieldName(value) {\n    this.hiddenFieldTarget.name = value;\n  }\n};\n\nCombobox.Multiselect = Base => class extends Base {\n  navigateChip(event) {\n    this._chipKeyHandlers[event.key]?.call(this, event);\n  }\n\n  removeChip({ currentTarget, params }) {\n    let display;\n    const option = this._optionElementWithValue(params.value);\n\n    if (option) {\n      display = option.getAttribute(this.autocompletableAttributeValue);\n      this._markNotSelected(option);\n      this._markNotMultiselected(option);\n    } else {\n      display = params.value; // for new options\n    }\n\n    this._removeFromFieldValue(params.value);\n    this._filter(\"hw:multiselectSync\");\n\n    currentTarget.closest(\"[data-hw-combobox-chip]\").remove();\n\n    if (!this._isSmallViewport) {\n      this.openByFocusing();\n    }\n\n    this._announceToScreenReader(display, \"removed\");\n    this._dispatchRemovalEvent({ removedDisplay: display, removedValue: params.value });\n  }\n\n  hideChipsForCache() {\n    this.element.querySelectorAll(\"[data-hw-combobox-chip]\").forEach(chip => chip.hidden = true);\n  }\n\n  _chipKeyHandlers = {\n    Backspace: (event) => {\n      this.removeChip(event);\n      cancel(event);\n    },\n    Enter: (event) => {\n      this.removeChip(event);\n      cancel(event);\n    },\n    Space: (event) => {\n      this.removeChip(event);\n      cancel(event);\n    },\n    Escape: (event) => {\n      this.openByFocusing();\n      cancel(event);\n    }\n  }\n\n  _connectMultiselect() {\n    if (!this._isMultiPreselected) {\n      this._preselectMultiple();\n      this._markMultiPreselected();\n    }\n  }\n\n  async _createChip(shouldReopen) {\n    if (!this._isMultiselect) return\n\n    this._beforeClearingMultiselectQuery(async (display, value) => {\n      this._fullQuery = \"\";\n      this._filter(\"hw:multiselectSync\");\n      this._requestChips(value);\n      this._addToFieldValue(value);\n      if (shouldReopen) {\n        await nextRepaint();\n        this.openByFocusing();\n      }\n      this._announceToScreenReader(display, \"multi-selected. Press Shift + Tab, then Enter to remove.\");\n    });\n  }\n\n  async _requestChips(values) {\n    await post(this.selectionChipSrcValue, {\n      responseKind: \"turbo-stream\",\n      query: {\n        for_id: this.element.dataset.asyncId,\n        combobox_values: values\n      }\n    });\n  }\n\n  _beforeClearingMultiselectQuery(callback) {\n    const display = this.hiddenFieldTarget.dataset.displayForMultiselect;\n    const value = this.hiddenFieldTarget.dataset.valueForMultiselect;\n\n    if (value && !this._fieldValue.has(value)) {\n      callback(display, value);\n    }\n\n    this.hiddenFieldTarget.dataset.displayForMultiselect = \"\";\n    this.hiddenFieldTarget.dataset.valueForMultiselect = \"\";\n  }\n\n  _resetMultiselectionMarks() {\n    if (!this._isMultiselect) return\n\n    this._fieldValueArray.forEach(value => {\n      const option = this._optionElementWithValue(value);\n\n      if (option) {\n        option.setAttribute(\"data-multiselected\", \"\");\n        option.hidden = true;\n      }\n    });\n  }\n\n  _markNotMultiselected(option) {\n    if (!this._isMultiselect) return\n\n    option.removeAttribute(\"data-multiselected\");\n    option.hidden = false;\n  }\n\n  _addToFieldValue(value) {\n    const newValue = this._fieldValue;\n\n    newValue.add(String(value));\n    this.hiddenFieldTarget.value = Array.from(newValue).join(\",\");\n\n    if (this._isSync) this._resetMultiselectionMarks();\n  }\n\n  _removeFromFieldValue(value) {\n    const newValue = this._fieldValue;\n\n    newValue.delete(String(value));\n    this.hiddenFieldTarget.value = Array.from(newValue).join(\",\");\n\n    if (this._isSync) this._resetMultiselectionMarks();\n  }\n\n  _focusLastChipDismisser() {\n    this.chipDismisserTargets[this.chipDismisserTargets.length - 1]?.focus();\n  }\n\n  _markMultiPreselected() {\n    this.element.dataset.multiPreselected = \"\";\n  }\n\n  get _isMultiselect() {\n    return this.hasSelectionChipSrcValue\n  }\n\n  get _isSingleSelect() {\n    return !this._isMultiselect\n  }\n\n  get _isMultiPreselected() {\n    return this.element.hasAttribute(\"data-multi-preselected\")\n  }\n};\n\nCombobox.Navigation = Base => class extends Base {\n  navigate(event) {\n    if (this._autocompletesList) {\n      this._navigationKeyHandlers[event.key]?.call(this, event);\n    }\n  }\n\n  _navigationKeyHandlers = {\n    ArrowUp: (event) => {\n      this._selectIndex(this._selectedOptionIndex - 1);\n      cancel(event);\n    },\n    ArrowDown: (event) => {\n      this._selectIndex(this._selectedOptionIndex + 1);\n\n      if (this._selectedOptionIndex === 0) {\n        this._actingListbox.scrollTop = 0;\n      }\n\n      cancel(event);\n    },\n    Home: (event) => {\n      this._selectIndex(0);\n      cancel(event);\n    },\n    End: (event) => {\n      this._selectIndex(this._visibleOptionElements.length - 1);\n      cancel(event);\n    },\n    Enter: (event) => {\n      this._closeAndBlur(\"hw:keyHandler:enter\");\n      cancel(event);\n    },\n    Escape: (event) => {\n      this._closeAndBlur(\"hw:keyHandler:escape\");\n      cancel(event);\n    },\n    Backspace: (event) => {\n      if (this._isMultiselect && !this._fullQuery) {\n        this._focusLastChipDismisser();\n        cancel(event);\n      }\n    }\n  }\n};\n\nCombobox.NewOptions = Base => class extends Base {\n  _shouldTreatAsNewOptionForFiltering(queryIsBeingRefined) {\n    if (queryIsBeingRefined) {\n      return this._isNewOptionWithNoPotentialMatches\n    } else {\n      return this._isNewOptionWithPotentialMatches\n    }\n  }\n\n  // If the user is going to keep refining the query, we can't be sure whether\n  // the option will end up being new or not unless there are no potential matches.\n  // +_isNewOptionWithNoPotentialMatches+ allows us to make our best guess\n  // while the state of the combobox is still in flux.\n  //\n  // It's okay for the combobox to say it's not new even if it will be eventually,\n  // as only the final state matters for submission purposes. This method exists\n  // as a best effort to keep the state accurate as often as we can.\n  //\n  // Note that the first visible option is automatically selected as you type.\n  // So if there's a partial match, it's not a new option at this point.\n  //\n  // The final state is locked-in upon closing the combobox via `_isNewOptionWithPotentialMatches`.\n  get _isNewOptionWithNoPotentialMatches() {\n    return this._isNewOptionWithPotentialMatches && !this._isPartialAutocompleteMatch\n  }\n\n  // If the query is finalized, we don't care that there are potential matches\n  // because new options can be substrings of existing options.\n  //\n  // We can't use `_isNewOptionWithNoPotentialMatches` because that would\n  // rule out new options that are partial matches.\n  get _isNewOptionWithPotentialMatches() {\n    return this._isQueried && this._allowNew && !this._isExactAutocompleteMatch\n  }\n};\n\nCombobox.Options = Base => class extends Base {\n  _resetOptionsSilently() {\n    this._resetOptions(this._deselect.bind(this));\n  }\n\n  _resetOptionsAndNotify() {\n    this._resetOptions(this._deselectAndNotify.bind(this));\n  }\n\n  _resetOptions(deselectionStrategy) {\n    this._fieldName = this.originalNameValue;\n    deselectionStrategy();\n  }\n\n  _optionElementWithValue(value) {\n    return this._actingListbox.querySelector(`[${this.filterableAttributeValue}][data-value='${value}']`)\n  }\n\n  _displayForOptionElement(element) {\n    return element.getAttribute(this.autocompletableAttributeValue)\n  }\n\n  get _allowNew() {\n    return !!this.nameWhenNewValue\n  }\n\n  get _allOptions() {\n    return Array.from(this._allFilterableOptionElements)\n  }\n\n  get _allFilterableOptionElements() {\n    return this._actingListbox.querySelectorAll(`[${this.filterableAttributeValue}]:not([data-multiselected])`)\n  }\n\n  get _visibleOptionElements() {\n    return [ ...this._allFilterableOptionElements ].filter(visible)\n  }\n\n  get _selectedOptionElement() {\n    return this._actingListbox.querySelector(\"[role=option][aria-selected=true]:not([data-multiselected])\")\n  }\n\n  get _multiselectedOptionElements() {\n    return this._actingListbox.querySelectorAll(\"[role=option][data-multiselected]\")\n  }\n\n  get _selectedOptionIndex() {\n    return [ ...this._visibleOptionElements ].indexOf(this._selectedOptionElement)\n  }\n\n  get _isUnjustifiablyBlank() {\n    const valueIsMissing = this._hasEmptyFieldValue;\n    const noBlankOptionSelected = !this._selectedOptionElement;\n\n    return valueIsMissing && noBlankOptionSelected\n  }\n};\n\nCombobox.Selection = Base => class extends Base {\n  selectOnClick({ currentTarget, inputType }) {\n    this._forceSelectionAndFilter(currentTarget, inputType);\n    this._closeAndBlur(\"hw:optionRoleClick\");\n  }\n\n  _connectSelection() {\n    if (this.hasPrefilledDisplayValue) {\n      this._fullQuery = this.prefilledDisplayValue;\n      this._markQueried();\n    }\n  }\n\n  _selectOnQuery(inputType) {\n    if (this._shouldTreatAsNewOptionForFiltering(!isDeleteEvent({ inputType: inputType }))) {\n      this._selectNew();\n    } else if (isDeleteEvent({ inputType: inputType })) {\n      this._deselect();\n    } else if (inputType === \"hw:lockInSelection\" && this._ensurableOption) {\n      this._selectAndAutocompleteMissingPortion(this._ensurableOption);\n    } else if (this._isOpen && this._visibleOptionElements[0]) {\n      this._selectAndAutocompleteMissingPortion(this._visibleOptionElements[0]);\n    } else if (this._isOpen) {\n      this._resetOptionsAndNotify();\n      this._markInvalid();\n    } else ;\n  }\n\n  _select(option, autocompleteStrategy) {\n    const previousValue = this._fieldValueString;\n\n    this._resetOptionsSilently();\n\n    autocompleteStrategy(option);\n\n    this._fieldValue = option.dataset.value;\n    this._markSelected(option);\n    this._markValid();\n    this._dispatchPreselectionEvent({ isNewAndAllowed: false, previousValue: previousValue });\n\n    option.scrollIntoView({ block: \"nearest\" });\n  }\n\n  _selectNew() {\n    const previousValue = this._fieldValueString;\n\n    this._resetOptionsSilently();\n    this._fieldValue = this._fullQuery;\n    this._fieldName = this.nameWhenNewValue;\n    this._markValid();\n    this._dispatchPreselectionEvent({ isNewAndAllowed: true, previousValue: previousValue });\n  }\n\n  _deselect() {\n    const previousValue = this._fieldValueString;\n\n    if (this._selectedOptionElement) {\n      this._markNotSelected(this._selectedOptionElement);\n    }\n\n    this._fieldValue = \"\";\n    this._setActiveDescendant(\"\");\n\n    return previousValue\n  }\n\n  _deselectAndNotify() {\n    const previousValue = this._deselect();\n    this._dispatchPreselectionEvent({ isNewAndAllowed: false, previousValue: previousValue });\n  }\n\n  _selectIndex(index) {\n    const option = wrapAroundAccess(this._visibleOptionElements, index);\n    this._forceSelectionWithoutFiltering(option);\n  }\n\n  _preselectSingle() {\n    if (this._isSingleSelect && this._hasValueButNoSelection && this._allOptions.length < 100) {\n      const option = this._optionElementWithValue(this._fieldValue);\n      if (option) this._markSelected(option);\n    }\n  }\n\n  _preselectMultiple() {\n    if (this._isMultiselect && this._hasValueButNoSelection) {\n      this._requestChips(this._fieldValueString);\n      this._resetMultiselectionMarks();\n    }\n  }\n\n  _selectAndAutocompleteMissingPortion(option) {\n    this._select(option, this._autocompleteMissingPortion.bind(this));\n  }\n\n  _selectAndAutocompleteFullQuery(option) {\n    this._select(option, this._replaceFullQueryWithAutocompletedValue.bind(this));\n  }\n\n  _forceSelectionAndFilter(option, inputType) {\n    this._forceSelectionWithoutFiltering(option);\n    this._filter(inputType);\n  }\n\n  _forceSelectionWithoutFiltering(option) {\n    this._selectAndAutocompleteFullQuery(option);\n  }\n\n  _lockInSelection() {\n    if (this._shouldLockInSelection) {\n      this._forceSelectionAndFilter(this._ensurableOption, \"hw:lockInSelection\");\n    }\n  }\n\n  _markSelected(option) {\n    if (this.hasSelectedClass) option.classList.add(this.selectedClass);\n    option.setAttribute(\"aria-selected\", true);\n    this._setActiveDescendant(option.id);\n  }\n\n  _markNotSelected(option) {\n    if (this.hasSelectedClass) option.classList.remove(this.selectedClass);\n    option.removeAttribute(\"aria-selected\");\n    this._removeActiveDescendant();\n  }\n\n  _setActiveDescendant(id) {\n    this._forAllComboboxes(el => el.setAttribute(\"aria-activedescendant\", id));\n  }\n\n  _removeActiveDescendant() {\n    this._setActiveDescendant(\"\");\n  }\n\n  get _hasValueButNoSelection() {\n    return this._hasFieldValue && !this._hasSelection\n  }\n\n  get _hasSelection() {\n    if (this._isSingleSelect) {\n      this._selectedOptionElement;\n    } else {\n      this._multiselectedOptionElements.length > 0;\n    }\n  }\n\n  get _shouldLockInSelection() {\n    return this._isQueried && !!this._ensurableOption && !this._isNewOptionWithPotentialMatches\n  }\n\n  get _ensurableOption() {\n    return this._selectedOptionElement || this._visibleOptionElements[0]\n  }\n};\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n  var passiveTestOptions = {\n    get passive() {\n      hasPassiveEvents = true;\n      return undefined;\n    }\n  };\n  window.addEventListener('testPassive', null, passiveTestOptions);\n  window.removeEventListener('testPassive', null, passiveTestOptions);\n}\n\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPosition = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n  return locks.some(function (lock) {\n    if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n      return true;\n    }\n\n    return false;\n  });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n  var e = rawEvent || window.event;\n\n  // For the case whereby consumers adds a touchmove event listener to document.\n  // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n  // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n  // the touchmove event on document will break.\n  if (allowTouchMove(e.target)) {\n    return true;\n  }\n\n  // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n  if (e.touches.length > 1) return true;\n\n  if (e.preventDefault) e.preventDefault();\n\n  return false;\n};\n\nvar setOverflowHidden = function setOverflowHidden(options) {\n  // If previousBodyPaddingRight is already set, don't set it again.\n  if (previousBodyPaddingRight === undefined) {\n    var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n    var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n    if (_reserveScrollBarGap && scrollBarGap > 0) {\n      var computedBodyPaddingRight = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'), 10);\n      previousBodyPaddingRight = document.body.style.paddingRight;\n      document.body.style.paddingRight = computedBodyPaddingRight + scrollBarGap + 'px';\n    }\n  }\n\n  // If previousBodyOverflowSetting is already set, don't set it again.\n  if (previousBodyOverflowSetting === undefined) {\n    previousBodyOverflowSetting = document.body.style.overflow;\n    document.body.style.overflow = 'hidden';\n  }\n};\n\nvar restoreOverflowSetting = function restoreOverflowSetting() {\n  if (previousBodyPaddingRight !== undefined) {\n    document.body.style.paddingRight = previousBodyPaddingRight;\n\n    // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n    // can be set again.\n    previousBodyPaddingRight = undefined;\n  }\n\n  if (previousBodyOverflowSetting !== undefined) {\n    document.body.style.overflow = previousBodyOverflowSetting;\n\n    // Restore previousBodyOverflowSetting to undefined\n    // so setOverflowHidden knows it can be set again.\n    previousBodyOverflowSetting = undefined;\n  }\n};\n\nvar setPositionFixed = function setPositionFixed() {\n  return window.requestAnimationFrame(function () {\n    // If previousBodyPosition is already set, don't set it again.\n    if (previousBodyPosition === undefined) {\n      previousBodyPosition = {\n        position: document.body.style.position,\n        top: document.body.style.top,\n        left: document.body.style.left\n      };\n\n      // Update the dom inside an animation frame\n      var _window = window,\n          scrollY = _window.scrollY,\n          scrollX = _window.scrollX,\n          innerHeight = _window.innerHeight;\n\n      document.body.style.position = 'fixed';\n      document.body.style.top = -scrollY + 'px';\n      document.body.style.left = -scrollX + 'px';\n\n      setTimeout(function () {\n        return window.requestAnimationFrame(function () {\n          // Attempt to check if the bottom bar appeared due to the position change\n          var bottomBarHeight = innerHeight - window.innerHeight;\n          if (bottomBarHeight && scrollY >= innerHeight) {\n            // Move the content further up so that the bottom bar doesn't hide it\n            document.body.style.top = -(scrollY + bottomBarHeight);\n          }\n        });\n      }, 300);\n    }\n  });\n};\n\nvar restorePositionSetting = function restorePositionSetting() {\n  if (previousBodyPosition !== undefined) {\n    // Convert the position from \"px\" to Int\n    var y = -parseInt(document.body.style.top, 10);\n    var x = -parseInt(document.body.style.left, 10);\n\n    // Restore styles\n    document.body.style.position = previousBodyPosition.position;\n    document.body.style.top = previousBodyPosition.top;\n    document.body.style.left = previousBodyPosition.left;\n\n    // Restore scroll\n    window.scrollTo(x, y);\n\n    previousBodyPosition = undefined;\n  }\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n  return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n  var clientY = event.targetTouches[0].clientY - initialClientY;\n\n  if (allowTouchMove(event.target)) {\n    return false;\n  }\n\n  if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n    // element is at the top of its scroll.\n    return preventDefault(event);\n  }\n\n  if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n    // element is at the bottom of its scroll.\n    return preventDefault(event);\n  }\n\n  event.stopPropagation();\n  return true;\n};\n\nvar disableBodyScroll = function disableBodyScroll(targetElement, options) {\n  // targetElement must be provided\n  if (!targetElement) {\n    // eslint-disable-next-line no-console\n    console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n    return;\n  }\n\n  // disableBodyScroll must not have been called on this targetElement before\n  if (locks.some(function (lock) {\n    return lock.targetElement === targetElement;\n  })) {\n    return;\n  }\n\n  var lock = {\n    targetElement: targetElement,\n    options: options || {}\n  };\n\n  locks = [].concat(_toConsumableArray(locks), [lock]);\n\n  if (isIosDevice) {\n    setPositionFixed();\n  } else {\n    setOverflowHidden(options);\n  }\n\n  if (isIosDevice) {\n    targetElement.ontouchstart = function (event) {\n      if (event.targetTouches.length === 1) {\n        // detect single touch.\n        initialClientY = event.targetTouches[0].clientY;\n      }\n    };\n    targetElement.ontouchmove = function (event) {\n      if (event.targetTouches.length === 1) {\n        // detect single touch.\n        handleScroll(event, targetElement);\n      }\n    };\n\n    if (!documentListenerAdded) {\n      document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n      documentListenerAdded = true;\n    }\n  }\n};\n\nvar enableBodyScroll = function enableBodyScroll(targetElement) {\n  if (!targetElement) {\n    // eslint-disable-next-line no-console\n    console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n    return;\n  }\n\n  locks = locks.filter(function (lock) {\n    return lock.targetElement !== targetElement;\n  });\n\n  if (isIosDevice) {\n    targetElement.ontouchstart = null;\n    targetElement.ontouchmove = null;\n\n    if (documentListenerAdded && locks.length === 0) {\n      document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n      documentListenerAdded = false;\n    }\n  }\n\n  if (isIosDevice) {\n    restorePositionSetting();\n  } else {\n    restoreOverflowSetting();\n  }\n};\n\n// MIT License\n\n// Copyright (c) 2018 Will Po\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nCombobox.Toggle = Base => class extends Base {\n  open() {\n    this.expandedValue = true;\n  }\n\n  openByFocusing() {\n    this._actingCombobox.focus();\n  }\n\n  close(inputType) {\n    if (this._isOpen) {\n      const shouldReopen = this._isMultiselect &&\n        this._isSync &&\n        !this._isSmallViewport &&\n        inputType != \"hw:clickOutside\" &&\n        inputType != \"hw:focusOutside\" &&\n        inputType != \"hw:asyncCloser\";\n\n      this._lockInSelection();\n      this._clearInvalidQuery();\n\n      this.expandedValue = false;\n\n      this._dispatchSelectionEvent();\n\n      if (inputType != \"hw:keyHandler:escape\") {\n        this._createChip(shouldReopen);\n      }\n\n      if (this._isSingleSelect && this._selectedOptionElement) {\n        this._announceToScreenReader(this._displayForOptionElement(this._selectedOptionElement), \"selected\");\n      }\n    }\n  }\n\n  toggle() {\n    if (this.expandedValue) {\n      this._closeAndBlur(\"hw:toggle\");\n    } else {\n      this.openByFocusing();\n    }\n  }\n\n  closeOnClickOutside(event) {\n    const target = event.target;\n\n    if (!this._isOpen) return\n    if (this.mainWrapperTarget.contains(target) && !this._isDialogDismisser(target)) return\n    if (this._withinElementBounds(event)) return\n\n    this._closeAndBlur(\"hw:clickOutside\");\n  }\n\n  closeOnFocusOutside({ target }) {\n    if (!this._isOpen) return\n    if (this.element.contains(target)) return\n\n    this._closeAndBlur(\"hw:focusOutside\");\n  }\n\n  clearOrToggleOnHandleClick() {\n    if (this._isQueried) {\n      this._clearQuery();\n      this._actingCombobox.focus();\n    } else {\n      this.toggle();\n    }\n  }\n\n  _closeAndBlur(inputType) {\n    this.close(inputType);\n    this._actingCombobox.blur();\n  }\n\n  // Some browser extensions like 1Password overlay elements on top of the combobox.\n  // Hovering over these elements emits a click event for some reason.\n  // These events don't contain any telling information, so we use `_withinElementBounds`\n  // as an alternative to check whether the click is legitimate.\n  _withinElementBounds(event) {\n    const { left, right, top, bottom } = this.mainWrapperTarget.getBoundingClientRect();\n    const { clientX, clientY } = event;\n\n    return clientX >= left && clientX <= right && clientY >= top && clientY <= bottom\n  }\n\n  _isDialogDismisser(target) {\n    return target.closest(\"dialog\") && target.role != \"combobox\"\n  }\n\n  _expand() {\n    if (this._isSync) {\n      this._preselectSingle();\n    }\n\n    if (this._autocompletesList && this._isSmallViewport) {\n      this._openInDialog();\n    } else {\n      this._openInline();\n    }\n\n    this._actingCombobox.setAttribute(\"aria-expanded\", true); // needs to happen after setting acting combobox\n  }\n\n  // +._collapse()+ differs from `.close()` in that it might be called by stimulus on connect because\n  // it interprets a change in `expandedValue`\u00A0\u2014 whereas `.close()` is only called internally by us.\n  _collapse() {\n    this._actingCombobox.setAttribute(\"aria-expanded\", false); // needs to happen before resetting acting combobox\n\n    if (this._dialogIsOpen) {\n      this._closeInDialog();\n    } else {\n      this._closeInline();\n    }\n  }\n\n  _openInDialog() {\n    this._moveArtifactsToDialog();\n    this._preventFocusingComboboxAfterClosingDialog();\n    this._preventBodyScroll();\n    this.dialogTarget.showModal();\n  }\n\n  _openInline() {\n    this.listboxTarget.hidden = false;\n  }\n\n  _closeInDialog() {\n    this._moveArtifactsInline();\n    this.dialogTarget.close();\n    this._restoreBodyScroll();\n    this._actingCombobox.scrollIntoView({ block: \"center\" });\n  }\n\n  _closeInline() {\n    this.listboxTarget.hidden = true;\n  }\n\n  _preventBodyScroll() {\n    disableBodyScroll(this.dialogListboxTarget);\n  }\n\n  _restoreBodyScroll() {\n    enableBodyScroll(this.dialogListboxTarget);\n  }\n\n  _clearInvalidQuery() {\n    if (this._isUnjustifiablyBlank) {\n      this._deselect();\n      this._clearQuery();\n    }\n  }\n\n  get _isOpen() {\n    return this.expandedValue\n  }\n};\n\nCombobox.Validity = Base => class extends Base {\n  _markValid() {\n    if (this._valueIsInvalid) return\n\n    this._forAllComboboxes(combobox => {\n      if (this.hasInvalidClass) {\n        combobox.classList.remove(this.invalidClass);\n      }\n\n      combobox.removeAttribute(\"aria-invalid\");\n      combobox.removeAttribute(\"aria-errormessage\");\n    });\n  }\n\n  _markInvalid() {\n    if (this._valueIsValid) return\n\n    this._forAllComboboxes(combobox => {\n      if (this.hasInvalidClass) {\n        combobox.classList.add(this.invalidClass);\n      }\n\n      combobox.setAttribute(\"aria-invalid\", true);\n      combobox.setAttribute(\"aria-errormessage\", `Please select a valid option for ${combobox.name}`);\n    });\n  }\n\n  get _valueIsValid() {\n    return !this._valueIsInvalid\n  }\n\n  // +_valueIsInvalid+ only checks if `comboboxTarget` (and not `_actingCombobox`) is required\n  // because the `required` attribute is only forwarded to the `comboboxTarget` element\n  get _valueIsInvalid() {\n    const isRequiredAndEmpty = this.comboboxTarget.required && this._hasEmptyFieldValue;\n    return isRequiredAndEmpty\n  }\n};\n\nwindow.HOTWIRE_COMBOBOX_STREAM_DELAY = 0; // ms, for testing purposes\n\nconst concerns = [\n  Controller,\n  Combobox.Actors,\n  Combobox.Announcements,\n  Combobox.AsyncLoading,\n  Combobox.Autocomplete,\n  Combobox.Callbacks,\n  Combobox.Dialog,\n  Combobox.Events,\n  Combobox.Filtering,\n  Combobox.FormField,\n  Combobox.Multiselect,\n  Combobox.Navigation,\n  Combobox.NewOptions,\n  Combobox.Options,\n  Combobox.Selection,\n  Combobox.Toggle,\n  Combobox.Validity\n];\n\nclass HwComboboxController extends Concerns(...concerns) {\n  static classes = [\n    \"invalid\",\n    \"selected\"\n  ]\n\n  static targets = [\n    \"announcer\",\n    \"combobox\",\n    \"chipDismisser\",\n    \"closer\",\n    \"dialog\",\n    \"dialogCombobox\",\n    \"dialogFocusTrap\",\n    \"dialogListbox\",\n    \"endOfOptionsStream\",\n    \"handle\",\n    \"hiddenField\",\n    \"listbox\",\n    \"mainWrapper\"\n  ]\n\n  static values = {\n    asyncSrc: String,\n    autocompletableAttribute: String,\n    autocomplete: String,\n    expanded: Boolean,\n    filterableAttribute: String,\n    nameWhenNew: String,\n    originalName: String,\n    prefilledDisplay: String,\n    selectionChipSrc: String,\n    smallViewportMaxWidth: String\n  }\n\n  initialize() {\n    this._initializeActors();\n    this._initializeFiltering();\n    this._initializeCallbacks();\n  }\n\n  connect() {\n    this.idempotentConnect();\n  }\n\n  idempotentConnect() {\n    this._connectSelection();\n    this._connectMultiselect();\n    this._connectListAutocomplete();\n    this._connectDialog();\n  }\n\n  disconnect() {\n    this._disconnectDialog();\n  }\n\n  expandedValueChanged() {\n    if (this.expandedValue) {\n      this._expand();\n    } else {\n      this._collapse();\n    }\n  }\n\n  async endOfOptionsStreamTargetConnected(element) {\n    if (element.dataset.callbackId) {\n      this._runCallback(element);\n    } else {\n      this._preselectSingle();\n    }\n  }\n\n  async _runCallback(element) {\n    const callbackId = element.dataset.callbackId;\n\n    if (this._callbackAttemptsExceeded(callbackId)) {\n      this._dequeueCallback(callbackId);\n      return\n    } else {\n      this._recordCallbackAttempt(callbackId);\n    }\n\n    if (this._isNextCallback(callbackId)) {\n      const inputType = element.dataset.inputType;\n      const delay = window.HOTWIRE_COMBOBOX_STREAM_DELAY;\n\n      if (delay) await sleep(delay);\n      this._dequeueCallback(callbackId);\n      this._resetMultiselectionMarks();\n\n      if (inputType === \"hw:multiselectSync\") {\n        this.openByFocusing();\n      } else if (inputType !== \"hw:lockInSelection\") {\n        this._selectOnQuery(inputType);\n      }\n    } else {\n      await nextRepaint();\n      this._runCallback(element);\n    }\n  }\n\n  closerTargetConnected() {\n    this._closeAndBlur(\"hw:asyncCloser\");\n  }\n\n  // Use +_printStack+ for debugging purposes\n  _printStack() {\n    const err = new Error();\n    console.log(err.stack || err.stacktrace);\n  }\n}\n\nexport { HwComboboxController as default };\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [\"button\", \"delegate\"];\n  static values = { delegateIdentifier: String };\n\n  connect() {\n    if (this.hasContent()) {\n      this.submit();\n    }\n  }\n\n  maybeDelegate(e) {\n    if (this.hasDelegateTarget) {\n      e.preventDefault();\n      this.disable();\n      this.submitDelegate(e);\n      this.enable();\n    }\n  }\n\n  submit() {\n    if (this.hasButtonTarget) this.buttonTarget.click();\n  }\n\n  refresh() {\n    if (this.firstActiveFieldset) {\n      this.firstActiveFieldset.scrollIntoView({ behavior: \"smooth\" });\n      if (this.nextField) this.nextField.focus();\n    }\n  }\n\n  submitDelegate(e) {\n    if (!this.hasDelegateIdentifierValue) {\n      console.error(\"Missing delegateIdentifier value\");\n      return;\n    }\n\n    const delegate = this.application.getControllerForElementAndIdentifier(\n      this.delegateTarget,\n      this.delegateIdentifierValue\n    );\n    delegate.submit(e);\n  }\n\n  enable() {\n    if (this.hasButtonTarget) this.buttonTarget.disabled = false;\n  }\n\n  disable() {\n    if (this.hasButtonTarget) this.buttonTarget.disabled = true;\n  }\n\n  hasContent() {\n    return this.element.querySelector(\n      \"input:not([type=hidden]):not([type=submit]):not([type=button]):not([type=image]), textarea, select\"\n    );\n  }\n\n  // TODO: remove when `BaseFormWithFieldsets` is removed\n  get firstActiveFieldset() {\n    return document.querySelector(\n      \"fieldset:not(.c-form--fieldset-is-complete):not([inert]):not(:first-child)\"\n    );\n  }\n\n  // TODO: remove when `BaseFormWithFieldsets` is removed\n  get nextField() {\n    return Array.from(\n      this.firstActiveFieldset.querySelectorAll(\n        \"input:not([type=hidden]):not([type=submit]):not([type=button]):not([type=image]), textarea, select\"\n      )\n    ).find((field) => !field.value);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nconst SUBMIT_DELAY = 1000;\n\nexport default class extends Controller {\n  connect() {\n    const inputElement = this.element.querySelector(\"input\");\n    inputElement.focus();\n\n    // cursor goes to end\n    const value = inputElement.value;\n    inputElement.value = \"\";\n    inputElement.value = value;\n  }\n\n  submit() {\n    clearTimeout(this.timeout);\n    this.timeout = setTimeout(() => {\n      this.element.requestSubmit();\n    }, SUBMIT_DELAY);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static values = { customerCode: String };\n\n  connect() {\n    // D\u00E8s que le controller est connect\u00E9, le turbo_stream_from est pr\u00EAt\n    // On attend juste un tick pour \u00EAtre s\u00FBr que l'abonnement est \u00E9tabli\n    setTimeout(() => this.triggerJob(), 100);\n  }\n\n  triggerJob() {\n    fetch(\n      `/admin/customers/${this.customerCodeValue}/trigger_invoice_preview`,\n      {\n        method: \"POST\",\n        headers: {\n          \"X-CSRF-Token\": document.querySelector('[name=\"csrf-token\"]').content,\n          Accept: \"application/json\",\n        },\n      }\n    );\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\";\n\nimport BridgeController from \"./bridge_controller\";\napplication.register(\"bridge\", BridgeController);\n\nimport ElementController from \"./element_controller\";\napplication.register(\"element\", ElementController);\n\nimport FlowController from \"./flow_controller\";\napplication.register(\"flow\", FlowController);\n\nimport HelloController from \"./hello_controller\";\napplication.register(\"hello\", HelloController);\n\nimport HwComboboxController from \"@josefarias/hotwire_combobox\";\napplication.register(\"hw-combobox\", HwComboboxController);\n\nimport SubmittableController from \"./submittable_controller\";\napplication.register(\"submittable\", SubmittableController);\n\nimport FormController from \"./form_controller\";\napplication.register(\"form\", FormController);\n\nimport OngoingInvoiceController from \"./ongoing_invoice_controller\";\napplication.register(\"ongoing-invoice\", OngoingInvoiceController);\n", "import \"./action_card_component.css\";\n", "import \"./button_group_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./customer_switch_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"form\", \"input\", \"results\"];\n\n  reset(e) {\n    e.preventDefault();\n    this.formTarget.reset();\n    this.formTarget.requestSubmit();\n    this.inputTarget.focus();\n  }\n\n  enterFirst(e) {\n    e.preventDefault();\n    if (this.hasResultsTarget) {\n      this.resultsTarget.querySelector(\"a\").click();\n    }\n  }\n}\n", "import \"./item_component.css\";\n", "import \"./list_component.css\";\nimport \"../list/item_component/item_component.js\";\n", "import \"./product_glimpse_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import algoliasearch from \"algoliasearch/lite\";\nimport instantsearch from \"instantsearch.js\";\nimport { history } from \"instantsearch.js/es/lib/routers\";\nimport {\n  currentRefinements,\n  infiniteHits,\n  panel,\n  searchBox,\n} from \"instantsearch.js/es/widgets\";\nimport filtersConfig from \"../filters_component/config\";\nimport hitsConfig from \"../hits_component/config\";\nimport searchBoxConfig from \"../box_component/config\";\nimport refinementsConfig from \"../refinements_component/config\";\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"hits\", \"originalHits\", \"refinements\", \"searchBox\"];\n  static values = {\n    apiKey: String,\n    applicationId: String,\n    filters: Array,\n    index: String,\n  };\n\n  connect() {\n    this.search = instantsearch(this.instantsearchConfig);\n    this.connectWidgets();\n    this.connectFilters();\n    this.search.start();\n    this.search.on(\"render\", () => {\n      this.hitsTarget.parentNode.classList.toggle(\n        \"c-admin--search--hits-searching\",\n        this.isSearching\n      );\n    });\n  }\n\n  disconnect() {\n    if (this.search) this.search.dispose();\n  }\n\n  connectWidgets() {\n    let widgets = [];\n\n    if (this.hasRefinementsTarget) {\n      widgets.push(\n        currentRefinements({\n          container: this.refinementsTarget,\n          ...refinementsConfig,\n        })\n      );\n    }\n\n    if (this.hasHitsTarget) {\n      widgets.push(\n        infiniteHits({\n          container: this.hitsTarget,\n          ...hitsConfig,\n        })\n      );\n    }\n\n    if (this.hasSearchBoxTarget) {\n      widgets.push(\n        searchBox({\n          container: this.searchBoxTarget,\n          ...searchBoxConfig,\n        })\n      );\n    }\n\n    this.search.addWidgets(widgets);\n  }\n\n  connectFilters() {\n    if (!this.hasFiltersElement || !this.hasFiltersValue) return;\n\n    let filtersWidgets = [];\n    this.filtersValue.forEach((filter) => {\n      if (!filtersConfig[filter]) {\n        console.error(`Filter not defined in config: ${filter}`);\n        return;\n      }\n\n      const { widget, title, options } = filtersConfig[filter];\n      const filterEl = document.createRange().createContextualFragment(`\n        <div class=\"c-admin--search--filters-filter\"></div>\n      `);\n      const container = filterEl.querySelector(\n        \".c-admin--search--filters-filter\"\n      );\n      this.filtersElement.appendChild(filterEl);\n      options[\"container\"] = container;\n\n      const panelWidget = panel({\n        hidden(options) {\n          return options.canRefine === false;\n        },\n        cssClasses: {\n          header: \"c-admin--search--filters-title\",\n        },\n        templates: {\n          header(data, { html }) {\n            return html`${title}`;\n          },\n        },\n      })(widget);\n\n      filtersWidgets.push(panelWidget(options));\n    });\n\n    this.search.addWidgets(filtersWidgets);\n  }\n\n  get searchClient() {\n    return algoliasearch(this.applicationIdValue, this.apiKeyValue);\n  }\n\n  get instantsearchConfig() {\n    return {\n      indexName: this.indexValue,\n      routing: {\n        router: history({\n          cleanUrlOnDispose: false,\n          push: (url) => {\n            window.history.pushState({}, null, url);\n            Turbo.navigator.history.push(url);\n          },\n        }),\n      },\n      searchClient: this.searchClient,\n      future: {\n        preserveSharedStateOnUnmount: true,\n      },\n    };\n  }\n\n  get isSearching() {\n    const state = this.search.renderState[this.indexValue];\n    return (\n      state.searchBox.query !== \"\" ||\n      state.currentRefinements.items.length !== 0\n    );\n  }\n\n  get filtersElement() {\n    return document.querySelector(\n      \"[data-admin--search--algolia-target='filters']\"\n    );\n  }\n\n  get hasFiltersElement() {\n    return this.filtersElement !== null;\n  }\n}\n", "var NAMESPACE = 'ais';\nexport var component = function component(componentName) {\n  return function () {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      descendantName = _ref.descendantName,\n      modifierName = _ref.modifierName;\n    var descendent = descendantName ? \"-\".concat(descendantName) : '';\n    var modifier = modifierName ? \"--\".concat(modifierName) : '';\n    return \"\".concat(NAMESPACE, \"-\").concat(componentName).concat(descendent).concat(modifier);\n  };\n};", "export function capitalize(text) {\n  return text.toString().charAt(0).toUpperCase() + text.toString().slice(1);\n}", "export function noop() {}", "import { noop } from \"./noop.js\";\n/**\n * Logs a warning when this function is called, in development environment only.\n */\nvar deprecate = function deprecate(fn, message) {\n  return fn;\n};\n\n/**\n * Logs a warning\n * This is used to log issues in development environment only.\n */\nvar warn = noop;\n\n/**\n * Logs a warning if the condition is not met.\n * This is used to log issues in development environment only.\n */\nvar _warning = noop;\nif (process.env.NODE_ENV === 'development') {\n  warn = function warn(message) {\n    // eslint-disable-next-line no-console\n    console.warn(\"[InstantSearch.js]: \".concat(message.trim()));\n  };\n  deprecate = function deprecate(fn, message) {\n    var hasAlreadyPrinted = false;\n    return function () {\n      if (!hasAlreadyPrinted) {\n        hasAlreadyPrinted = true;\n        process.env.NODE_ENV === 'development' ? warn(message) : void 0;\n      }\n      return fn.apply(void 0, arguments);\n    };\n  };\n  _warning = function warning(condition, message) {\n    if (condition) {\n      return;\n    }\n    var hasAlreadyPrinted = _warning.cache[message];\n    if (!hasAlreadyPrinted) {\n      _warning.cache[message] = true;\n      process.env.NODE_ENV === 'development' ? warn(message) : void 0;\n    }\n  };\n  _warning.cache = {};\n}\nexport { warn, deprecate, _warning as warning };", "export function getObjectType(object) {\n  return Object.prototype.toString.call(object).slice(8, -1);\n}", "import { getObjectType } from \"./getObjectType.js\";\nexport function checkRendering(rendering, usage) {\n  if (rendering === undefined || typeof rendering !== 'function') {\n    throw new Error(\"The render function is not valid (received type \".concat(getObjectType(rendering), \").\\n\\n\").concat(usage));\n  }\n}", "/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/escape.js\n */\n\n// Used to map characters to HTML entities.\nvar htmlEntities = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;'\n};\n\n// Used to match HTML entities and HTML characters.\nvar regexUnescapedHtml = /[&<>\"']/g;\nvar regexHasUnescapedHtml = RegExp(regexUnescapedHtml.source);\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n */\nexport function escape(value) {\n  return value && regexHasUnescapedHtml.test(value) ? value.replace(regexUnescapedHtml, function (character) {\n    return htmlEntities[character];\n  }) : value;\n}\n\n/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/unescape.js\n */\n\n// Used to map HTML entities to characters.\nvar htmlCharacters = {\n  '&amp;': '&',\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&#39;': \"'\"\n};\n\n// Used to match HTML entities and HTML characters.\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\n\n/**\n * Converts the HTML entities \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * characters.\n */\nexport function unescape(value) {\n  return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function (character) {\n    return htmlCharacters[character];\n  }) : value;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/master/isPlainObject.js\n */\n\nfunction getTag(value) {\n  if (value === null) {\n    return value === undefined ? '[object Undefined]' : '[object Null]';\n  }\n  return Object.prototype.toString.call(value);\n}\nfunction isObjectLike(value) {\n  return _typeof(value) === 'object' && value !== null;\n}\n\n/**\n * Checks if `value` is a plain object.\n *\n * A plain object is an object created by the `Object`\n * constructor or with a `[[Prototype]]` of `null`.\n */\nexport function isPlainObject(value) {\n  if (!isObjectLike(value) || getTag(value) !== '[object Object]') {\n    return false;\n  }\n  if (Object.getPrototypeOf(value) === null) {\n    return true;\n  }\n  var proto = value;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(value) === proto;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError(\"Cannot destructure \" + obj); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { escape } from \"./escape-html.js\";\nimport { isPlainObject } from \"./isPlainObject.js\";\nexport var TAG_PLACEHOLDER = {\n  highlightPreTag: '__ais-highlight__',\n  highlightPostTag: '__/ais-highlight__'\n};\nexport var TAG_REPLACEMENT = {\n  highlightPreTag: '<mark>',\n  highlightPostTag: '</mark>'\n};\n\n// @MAJOR: in the future, this should only escape, not replace\nfunction replaceTagsAndEscape(value) {\n  return escape(value).replace(new RegExp(TAG_PLACEHOLDER.highlightPreTag, 'g'), TAG_REPLACEMENT.highlightPreTag).replace(new RegExp(TAG_PLACEHOLDER.highlightPostTag, 'g'), TAG_REPLACEMENT.highlightPostTag);\n}\nfunction recursiveEscape(input) {\n  if (isPlainObject(input) && typeof input.value !== 'string') {\n    return Object.keys(input).reduce(function (acc, key) {\n      return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, recursiveEscape(input[key])));\n    }, {});\n  }\n  if (Array.isArray(input)) {\n    return input.map(recursiveEscape);\n  }\n  return _objectSpread(_objectSpread({}, input), {}, {\n    value: replaceTagsAndEscape(input.value)\n  });\n}\nexport function escapeHits(hits) {\n  if (hits.__escaped === undefined) {\n    // We don't override the value on hit because it will mutate the raw results\n    // instead we make a shallow copy and we assign the escaped values on it.\n    hits = hits.map(function (_ref) {\n      var hit = _extends({}, (_objectDestructuringEmpty(_ref), _ref));\n      if (hit._highlightResult) {\n        hit._highlightResult = recursiveEscape(hit._highlightResult);\n      }\n      if (hit._snippetResult) {\n        hit._snippetResult = recursiveEscape(hit._snippetResult);\n      }\n      return hit;\n    });\n    hits.__escaped = true;\n  }\n  return hits;\n}\nexport function escapeFacets(facetHits) {\n  return facetHits.map(function (h) {\n    return _objectSpread(_objectSpread({}, h), {}, {\n      highlighted: replaceTagsAndEscape(h.highlighted)\n    });\n  });\n}", "import { TAG_REPLACEMENT } from \"./escape-highlight.js\";\nexport function concatHighlightedParts(parts) {\n  var highlightPreTag = TAG_REPLACEMENT.highlightPreTag,\n    highlightPostTag = TAG_REPLACEMENT.highlightPostTag;\n  return parts.map(function (part) {\n    return part.isHighlighted ? highlightPreTag + part.value + highlightPostTag : part.value;\n  }).join('');\n}", "// copied from\n// https://github.com/algolia/autocomplete.js/blob/307a7acc4283e10a19cb7d067f04f1bea79dc56f/packages/autocomplete-core/src/utils/createConcurrentSafePromise.ts#L1:L1\n/**\n * Creates a runner that executes promises in a concurrent-safe way.\n *\n * This is useful to prevent older promises to resolve after a newer promise,\n * otherwise resulting in stale resolved values.\n */\nexport function createConcurrentSafePromise() {\n  var basePromiseId = -1;\n  var latestResolvedId = -1;\n  var latestResolvedValue = undefined;\n  return function runConcurrentSafePromise(promise) {\n    var currentPromiseId = ++basePromiseId;\n    return Promise.resolve(promise).then(function (x) {\n      // The promise might take too long to resolve and get outdated. This would\n      // result in resolving stale values.\n      // When this happens, we ignore the promise value and return the one\n      // coming from the latest resolved value.\n      //\n      // +----------------------------------+\n      // |        100ms                     |\n      // | run(1) +--->  R1                 |\n      // |        300ms                     |\n      // | run(2) +-------------> R2 (SKIP) |\n      // |        200ms                     |\n      // | run(3) +--------> R3             |\n      // +----------------------------------+\n      if (latestResolvedValue && currentPromiseId < latestResolvedId) {\n        return latestResolvedValue;\n      }\n      latestResolvedId = currentPromiseId;\n      latestResolvedValue = x;\n      return x;\n    });\n  };\n}", "export function isFacetRefined(helper, facet, value) {\n  if (helper.state.isHierarchicalFacet(facet)) {\n    return helper.state.isHierarchicalFacetRefined(facet, value);\n  } else if (helper.state.isConjunctiveFacet(facet)) {\n    return helper.state.isFacetRefined(facet, value);\n  } else {\n    return helper.state.isDisjunctiveFacetRefined(facet, value);\n  }\n}", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nimport { isFacetRefined } from \"./isFacetRefined.js\";\nexport function createSendEventForFacet(_ref) {\n  var instantSearchInstance = _ref.instantSearchInstance,\n    helper = _ref.helper,\n    attr = _ref.attribute,\n    widgetType = _ref.widgetType;\n  var sendEventForFacet = function sendEventForFacet() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    var facetValue = args[1],\n      _args$ = args[2],\n      eventName = _args$ === void 0 ? 'Filter Applied' : _args$,\n      _args$2 = args[3],\n      additionalData = _args$2 === void 0 ? {} : _args$2;\n    var _args$0$split = args[0].split(':'),\n      _args$0$split2 = _slicedToArray(_args$0$split, 2),\n      eventType = _args$0$split2[0],\n      eventModifier = _args$0$split2[1];\n    var attribute = typeof attr === 'string' ? attr : attr(facetValue);\n    if (args.length === 1 && _typeof(args[0]) === 'object') {\n      instantSearchInstance.sendEventToInsights(args[0]);\n    } else if (eventType === 'click' && args.length >= 2 && args.length <= 4) {\n      if (!isFacetRefined(helper, attribute, facetValue)) {\n        // send event only when the facet is being checked \"ON\"\n        instantSearchInstance.sendEventToInsights({\n          insightsMethod: 'clickedFilters',\n          widgetType: widgetType,\n          eventType: eventType,\n          eventModifier: eventModifier,\n          payload: _objectSpread({\n            eventName: eventName,\n            index: helper.getIndex(),\n            filters: [\"\".concat(attribute, \":\").concat(facetValue)]\n          }, additionalData),\n          attribute: attribute\n        });\n      }\n    } else if (process.env.NODE_ENV === 'development') {\n      throw new Error(\"You need to pass between two and four arguments like:\\n  sendEvent('click', facetValue, eventName?, additionalData?);\\n\\nIf you want to send a custom payload, you can pass one object: sendEvent(customPayload);\\n\");\n    }\n  };\n  return sendEventForFacet;\n}", "export function serializePayload(payload) {\n  return btoa(encodeURIComponent(JSON.stringify(payload)));\n}\nexport function deserializePayload(serialized) {\n  return JSON.parse(decodeURIComponent(atob(serialized)));\n}", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { serializePayload } from \"./serializer.js\";\nfunction chunk(arr) {\n  var chunkSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 20;\n  var chunks = [];\n  for (var i = 0; i < Math.ceil(arr.length / chunkSize); i++) {\n    chunks.push(arr.slice(i * chunkSize, (i + 1) * chunkSize));\n  }\n  return chunks;\n}\nexport function _buildEventPayloadsForHits(_ref) {\n  var getIndex = _ref.getIndex,\n    widgetType = _ref.widgetType,\n    methodName = _ref.methodName,\n    args = _ref.args,\n    instantSearchInstance = _ref.instantSearchInstance;\n  // when there's only one argument, that means it's custom\n  if (args.length === 1 && _typeof(args[0]) === 'object') {\n    return [args[0]];\n  }\n  var _args$0$split = args[0].split(':'),\n    _args$0$split2 = _slicedToArray(_args$0$split, 2),\n    eventType = _args$0$split2[0],\n    eventModifier = _args$0$split2[1];\n  var hits = args[1];\n  var eventName = args[2];\n  var additionalData = args[3] || {};\n  if (!hits) {\n    if (process.env.NODE_ENV === 'development') {\n      throw new Error(\"You need to pass hit or hits as the second argument like:\\n  \".concat(methodName, \"(eventType, hit);\\n  \"));\n    } else {\n      return [];\n    }\n  }\n  if ((eventType === 'click' || eventType === 'conversion') && !eventName) {\n    if (process.env.NODE_ENV === 'development') {\n      throw new Error(\"You need to pass eventName as the third argument for 'click' or 'conversion' events like:\\n  \".concat(methodName, \"('click', hit, 'Product Purchased');\\n\\n  To learn more about event naming: https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/in-depth/clicks-conversions-best-practices/\\n  \"));\n    } else {\n      return [];\n    }\n  }\n  var hitsArray = Array.isArray(hits) ? hits : [hits];\n  if (hitsArray.length === 0) {\n    return [];\n  }\n  var queryID = hitsArray[0].__queryID;\n  var hitsChunks = chunk(hitsArray);\n  var objectIDsByChunk = hitsChunks.map(function (batch) {\n    return batch.map(function (hit) {\n      return hit.objectID;\n    });\n  });\n  var positionsByChunk = hitsChunks.map(function (batch) {\n    return batch.map(function (hit) {\n      return hit.__position;\n    });\n  });\n  if (eventType === 'view') {\n    if (instantSearchInstance.status !== 'idle') {\n      return [];\n    }\n    return hitsChunks.map(function (batch, i) {\n      return {\n        insightsMethod: 'viewedObjectIDs',\n        widgetType: widgetType,\n        eventType: eventType,\n        payload: _objectSpread({\n          eventName: eventName || 'Hits Viewed',\n          index: getIndex(),\n          objectIDs: objectIDsByChunk[i]\n        }, additionalData),\n        hits: batch,\n        eventModifier: eventModifier\n      };\n    });\n  } else if (eventType === 'click') {\n    return hitsChunks.map(function (batch, i) {\n      return {\n        insightsMethod: 'clickedObjectIDsAfterSearch',\n        widgetType: widgetType,\n        eventType: eventType,\n        payload: _objectSpread({\n          eventName: eventName || 'Hit Clicked',\n          index: getIndex(),\n          queryID: queryID,\n          objectIDs: objectIDsByChunk[i],\n          positions: positionsByChunk[i]\n        }, additionalData),\n        hits: batch,\n        eventModifier: eventModifier\n      };\n    });\n  } else if (eventType === 'conversion') {\n    return hitsChunks.map(function (batch, i) {\n      return {\n        insightsMethod: 'convertedObjectIDsAfterSearch',\n        widgetType: widgetType,\n        eventType: eventType,\n        payload: _objectSpread({\n          eventName: eventName || 'Hit Converted',\n          index: getIndex(),\n          queryID: queryID,\n          objectIDs: objectIDsByChunk[i]\n        }, additionalData),\n        hits: batch,\n        eventModifier: eventModifier\n      };\n    });\n  } else if (process.env.NODE_ENV === 'development') {\n    throw new Error(\"eventType(\\\"\".concat(eventType, \"\\\") is not supported.\\n    If you want to send a custom payload, you can pass one object: \").concat(methodName, \"(customPayload);\\n    \"));\n  } else {\n    return [];\n  }\n}\nexport function createSendEventForHits(_ref2) {\n  var instantSearchInstance = _ref2.instantSearchInstance,\n    getIndex = _ref2.getIndex,\n    widgetType = _ref2.widgetType;\n  var sentEvents = {};\n  var timer = undefined;\n  var sendEventForHits = function sendEventForHits() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    var payloads = _buildEventPayloadsForHits({\n      widgetType: widgetType,\n      getIndex: getIndex,\n      methodName: 'sendEvent',\n      args: args,\n      instantSearchInstance: instantSearchInstance\n    });\n    payloads.forEach(function (payload) {\n      if (payload.eventType === 'click' && payload.eventModifier === 'internal' && sentEvents[payload.eventType]) {\n        return;\n      }\n      sentEvents[payload.eventType] = true;\n      instantSearchInstance.sendEventToInsights(payload);\n    });\n    clearTimeout(timer);\n    timer = setTimeout(function () {\n      sentEvents = {};\n    }, 0);\n  };\n  return sendEventForHits;\n}\nexport function createBindEventForHits(_ref3) {\n  var getIndex = _ref3.getIndex,\n    widgetType = _ref3.widgetType,\n    instantSearchInstance = _ref3.instantSearchInstance;\n  var bindEventForHits = function bindEventForHits() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    var payloads = _buildEventPayloadsForHits({\n      widgetType: widgetType,\n      getIndex: getIndex,\n      methodName: 'bindEvent',\n      args: args,\n      instantSearchInstance: instantSearchInstance\n    });\n    return payloads.length ? \"data-insights-event=\".concat(serializePayload(payloads)) : '';\n  };\n  return bindEventForHits;\n}", "export function isIndexWidget(widget) {\n  return widget.$$type === 'ais.index';\n}", "import { checkIndexUiState } from \"./checkIndexUiState.js\";\nimport { isIndexWidget } from \"./isIndexWidget.js\";\nexport function setIndexHelperState(finalUiState, indexWidget) {\n  var nextIndexUiState = finalUiState[indexWidget.getIndexId()] || {};\n  if (process.env.NODE_ENV === 'development') {\n    checkIndexUiState({\n      index: indexWidget,\n      indexUiState: nextIndexUiState\n    });\n  }\n  indexWidget.getHelper().setState(indexWidget.getWidgetSearchParameters(indexWidget.getHelper().state, {\n    uiState: nextIndexUiState\n  }));\n  indexWidget.getWidgets().filter(isIndexWidget).forEach(function (widget) {\n    return setIndexHelperState(finalUiState, widget);\n  });\n}", "// Debounce a function call to the trailing edge.\n// The debounced function returns a promise.\nexport function debounce(func, wait) {\n  var lastTimeout = null;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return new Promise(function (resolve, reject) {\n      if (lastTimeout) {\n        clearTimeout(lastTimeout);\n      }\n      lastTimeout = setTimeout(function () {\n        lastTimeout = null;\n        Promise.resolve(func.apply(void 0, args)).then(resolve).catch(reject);\n      }, wait);\n    });\n  };\n}", "var nextMicroTask = Promise.resolve();\nexport function defer(callback) {\n  var progress = null;\n  var cancelled = false;\n  var fn = function fn() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (progress !== null) {\n      return;\n    }\n    progress = nextMicroTask.then(function () {\n      progress = null;\n      if (cancelled) {\n        cancelled = false;\n        return;\n      }\n      callback.apply(void 0, args);\n    });\n  };\n  fn.wait = function () {\n    if (progress === null) {\n      throw new Error('The deferred function should be called before calling `wait()`');\n    }\n    return progress;\n  };\n  fn.cancel = function () {\n    if (progress === null) {\n      return;\n    }\n    cancelled = true;\n  };\n  return fn;\n}", "export function createDocumentationLink(_ref) {\n  var name = _ref.name,\n    _ref$connector = _ref.connector,\n    connector = _ref$connector === void 0 ? false : _ref$connector;\n  return ['https://www.algolia.com/doc/api-reference/widgets/', name, '/js/', connector ? '#connector' : ''].join('');\n}\nexport function createDocumentationMessageGenerator() {\n  for (var _len = arguments.length, widgets = new Array(_len), _key = 0; _key < _len; _key++) {\n    widgets[_key] = arguments[_key];\n  }\n  var links = widgets.map(function (widget) {\n    return createDocumentationLink(widget);\n  }).join(', ');\n  return function (message) {\n    return [message, \"See documentation: \".concat(links)].filter(Boolean).join('\\n\\n');\n  };\n}", "export function unescapeFacetValue(value) {\n  if (typeof value === 'string') {\n    return value.replace(/^\\\\-/, '-');\n  }\n  return value;\n}\nexport function escapeFacetValue(value) {\n  if (typeof value === 'number' && value < 0 || typeof value === 'string') {\n    return String(value).replace(/^-/, '\\\\-');\n  }\n  return value;\n}", "// We aren't using the native `Array.prototype.find` because the refactor away from Lodash is not\n// published as a major version.\n// Relying on the `find` polyfill on user-land, which before was only required for niche use-cases,\n// was decided as too risky.\n// @MAJOR Replace with the native `Array.prototype.find` method\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\nexport function find(items, predicate) {\n  var value;\n  for (var i = 0; i < items.length; i++) {\n    value = items[i];\n    // inlined for performance: if (Call(predicate, thisArg, [value, i, list])) {\n    if (predicate(value, i, items)) {\n      return value;\n    }\n  }\n  return undefined;\n}", "// We aren't using the native `Array.prototype.findIndex` because the refactor away from Lodash is not\n// published as a major version.\n// Relying on the `findIndex` polyfill on user-land, which before was only required for niche use-cases,\n// was decided as too risky.\n// @MAJOR Replace with the native `Array.prototype.findIndex` method\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex\nexport function findIndex(array, comparator) {\n  if (!Array.isArray(array)) {\n    return -1;\n  }\n  for (var i = 0; i < array.length; i++) {\n    if (comparator(array[i])) {\n      return i;\n    }\n  }\n  return -1;\n}", "// typed as any, since it accepts the _real_ js clients, not the interface we otherwise expect\nexport function getAppIdAndApiKey(searchClient) {\n  if (searchClient.transporter) {\n    // searchClient v4\n    var _searchClient$transpo = searchClient.transporter,\n      headers = _searchClient$transpo.headers,\n      queryParameters = _searchClient$transpo.queryParameters;\n    var APP_ID = 'x-algolia-application-id';\n    var API_KEY = 'x-algolia-api-key';\n    var appId = headers[APP_ID] || queryParameters[APP_ID];\n    var apiKey = headers[API_KEY] || queryParameters[API_KEY];\n    return [appId, apiKey];\n  } else {\n    // searchClient v3\n    return [searchClient.applicationID, searchClient.apiKey];\n  }\n}", "export function isDomElement(object) {\n  return object instanceof HTMLElement || Boolean(object) && object.nodeType > 0;\n}", "import { isDomElement } from \"./isDomElement.js\";\n\n/**\n * Return the container. If it's a string, it is considered a\n * css selector and retrieves the first matching element. Otherwise\n * test if it validates that it's a correct DOMElement.\n *\n * @param {string|HTMLElement} selectorOrHTMLElement CSS Selector or container node.\n * @return {HTMLElement} Container node\n * @throws Error when the type is not correct\n */\nexport function getContainerNode(selectorOrHTMLElement) {\n  var isSelectorString = typeof selectorOrHTMLElement === 'string';\n  var domElement = isSelectorString ? document.querySelector(selectorOrHTMLElement) : selectorOrHTMLElement;\n  if (!isDomElement(domElement)) {\n    var errorMessage = 'Container must be `string` or `HTMLElement`.';\n    if (isSelectorString) {\n      errorMessage += \" Unable to find \".concat(selectorOrHTMLElement);\n    }\n    throw new Error(errorMessage);\n  }\n  return domElement;\n}", "import { TAG_REPLACEMENT } from \"./escape-highlight.js\";\nexport function getHighlightedParts(highlightedValue) {\n  // @MAJOR: this should use TAG_PLACEHOLDER\n  var highlightPostTag = TAG_REPLACEMENT.highlightPostTag,\n    highlightPreTag = TAG_REPLACEMENT.highlightPreTag;\n  var splitByPreTag = highlightedValue.split(highlightPreTag);\n  var firstValue = splitByPreTag.shift();\n  var elements = !firstValue ? [] : [{\n    value: firstValue,\n    isHighlighted: false\n  }];\n  splitByPreTag.forEach(function (split) {\n    var splitByPostTag = split.split(highlightPostTag);\n    elements.push({\n      value: splitByPostTag[0],\n      isHighlighted: true\n    });\n    if (splitByPostTag[1] !== '') {\n      elements.push({\n        value: splitByPostTag[1],\n        isHighlighted: false\n      });\n    }\n  });\n  return elements;\n}", "import { unescape } from \"./escape-html.js\";\nvar hasAlphanumeric = new RegExp(/\\w/i);\nexport function getHighlightFromSiblings(parts, i) {\n  var _parts, _parts2;\n  var current = parts[i];\n  var isNextHighlighted = ((_parts = parts[i + 1]) === null || _parts === void 0 ? void 0 : _parts.isHighlighted) || true;\n  var isPreviousHighlighted = ((_parts2 = parts[i - 1]) === null || _parts2 === void 0 ? void 0 : _parts2.isHighlighted) || true;\n  if (!hasAlphanumeric.test(unescape(current.value)) && isPreviousHighlighted === isNextHighlighted) {\n    return isPreviousHighlighted;\n  }\n  return current.isHighlighted;\n}", "export function getPropertyByPath(object, path) {\n  var parts = Array.isArray(path) ? path : path.split('.');\n  return parts.reduce(function (current, key) {\n    return current && current[key];\n  }, object);\n}", "import { unescapeFacetValue, escapeFacetValue } from \"./escapeFacetValue.js\";\nimport { find } from \"./find.js\";\nfunction getRefinement(state, type, attribute, name) {\n  var resultsFacets = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n  var res = {\n    type: type,\n    attribute: attribute,\n    name: name,\n    escapedValue: escapeFacetValue(name)\n  };\n  var facet = find(resultsFacets, function (resultsFacet) {\n    return resultsFacet.name === attribute;\n  });\n  var count;\n  if (type === 'hierarchical') {\n    var facetDeclaration = state.getHierarchicalFacetByName(attribute);\n    var nameParts = name.split(facetDeclaration.separator);\n    var getFacetRefinement = function getFacetRefinement(facetData) {\n      return function (refinementKey) {\n        return facetData[refinementKey];\n      };\n    };\n    var _loop = function _loop(i) {\n      facet = facet && facet.data && find(Object.keys(facet.data).map(getFacetRefinement(facet.data)), function (refinement) {\n        return refinement.name === nameParts[i];\n      });\n    };\n    for (var i = 0; facet !== undefined && i < nameParts.length; ++i) {\n      _loop(i);\n    }\n    count = facet && facet.count;\n  } else {\n    count = facet && facet.data && facet.data[res.name];\n  }\n  if (count !== undefined) {\n    res.count = count;\n  }\n  if (facet && facet.exhaustive !== undefined) {\n    res.exhaustive = facet.exhaustive;\n  }\n  return res;\n}\nexport function getRefinements(results, state) {\n  var includesQuery = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var refinements = [];\n  var _state$facetsRefineme = state.facetsRefinements,\n    facetsRefinements = _state$facetsRefineme === void 0 ? {} : _state$facetsRefineme,\n    _state$facetsExcludes = state.facetsExcludes,\n    facetsExcludes = _state$facetsExcludes === void 0 ? {} : _state$facetsExcludes,\n    _state$disjunctiveFac = state.disjunctiveFacetsRefinements,\n    disjunctiveFacetsRefinements = _state$disjunctiveFac === void 0 ? {} : _state$disjunctiveFac,\n    _state$hierarchicalFa = state.hierarchicalFacetsRefinements,\n    hierarchicalFacetsRefinements = _state$hierarchicalFa === void 0 ? {} : _state$hierarchicalFa,\n    _state$numericRefinem = state.numericRefinements,\n    numericRefinements = _state$numericRefinem === void 0 ? {} : _state$numericRefinem,\n    _state$tagRefinements = state.tagRefinements,\n    tagRefinements = _state$tagRefinements === void 0 ? [] : _state$tagRefinements;\n  Object.keys(facetsRefinements).forEach(function (attribute) {\n    var refinementNames = facetsRefinements[attribute];\n    refinementNames.forEach(function (refinementName) {\n      refinements.push(getRefinement(state, 'facet', attribute, refinementName, results.facets));\n    });\n  });\n  Object.keys(facetsExcludes).forEach(function (attribute) {\n    var refinementNames = facetsExcludes[attribute];\n    refinementNames.forEach(function (refinementName) {\n      refinements.push({\n        type: 'exclude',\n        attribute: attribute,\n        name: refinementName,\n        exclude: true\n      });\n    });\n  });\n  Object.keys(disjunctiveFacetsRefinements).forEach(function (attribute) {\n    var refinementNames = disjunctiveFacetsRefinements[attribute];\n    refinementNames.forEach(function (refinementName) {\n      refinements.push(getRefinement(state, 'disjunctive', attribute,\n      // We unescape any disjunctive refined values with `unescapeFacetValue` because\n      // they can be escaped on negative numeric values with `escapeFacetValue`.\n      unescapeFacetValue(refinementName), results.disjunctiveFacets));\n    });\n  });\n  Object.keys(hierarchicalFacetsRefinements).forEach(function (attribute) {\n    var refinementNames = hierarchicalFacetsRefinements[attribute];\n    refinementNames.forEach(function (refinement) {\n      refinements.push(getRefinement(state, 'hierarchical', attribute, refinement, results.hierarchicalFacets));\n    });\n  });\n  Object.keys(numericRefinements).forEach(function (attribute) {\n    var operators = numericRefinements[attribute];\n    Object.keys(operators).forEach(function (operatorOriginal) {\n      var operator = operatorOriginal;\n      var valueOrValues = operators[operator];\n      var refinementNames = Array.isArray(valueOrValues) ? valueOrValues : [valueOrValues];\n      refinementNames.forEach(function (refinementName) {\n        refinements.push({\n          type: 'numeric',\n          attribute: attribute,\n          name: \"\".concat(refinementName),\n          numericValue: refinementName,\n          operator: operator\n        });\n      });\n    });\n  });\n  tagRefinements.forEach(function (refinementName) {\n    refinements.push({\n      type: 'tag',\n      attribute: '_tags',\n      name: refinementName\n    });\n  });\n  if (includesQuery && state.query && state.query.trim()) {\n    refinements.push({\n      attribute: 'query',\n      type: 'query',\n      name: state.query,\n      query: state.query\n    });\n  }\n  return refinements;\n}", "export function getWidgetAttribute(widget, initOptions) {\n  var _widget$getWidgetRend;\n  var renderState = (_widget$getWidgetRend = widget.getWidgetRenderState) === null || _widget$getWidgetRend === void 0 ? void 0 : _widget$getWidgetRend.call(widget, initOptions);\n  var attribute = null;\n  if (renderState && renderState.widgetParams) {\n    // casting as widgetParams is checked just before\n    var widgetParams = renderState.widgetParams;\n    if (widgetParams.attribute) {\n      attribute = widgetParams.attribute;\n    } else if (Array.isArray(widgetParams.attributes)) {\n      attribute = widgetParams.attributes[0];\n    }\n  }\n  if (typeof attribute !== 'string') {\n    throw new Error(\"Could not find the attribute of the widget:\\n\\n\".concat(JSON.stringify(widget), \"\\n\\nPlease check whether the widget's getWidgetRenderState returns widgetParams.attribute correctly.\"));\n  }\n  return attribute;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function addAbsolutePosition(hits, page, hitsPerPage) {\n  return hits.map(function (hit, idx) {\n    return _objectSpread(_objectSpread({}, hit), {}, {\n      __position: hitsPerPage * page + idx + 1\n    });\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function addQueryID(hits, queryID) {\n  if (!queryID) {\n    return hits;\n  }\n  return hits.map(function (hit) {\n    return _objectSpread(_objectSpread({}, hit), {}, {\n      __queryID: queryID\n    });\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nexport function hydrateSearchClient(client, results) {\n  if (!results) {\n    return;\n  }\n\n  // Disable cache hydration on:\n  // - Algoliasearch API Client < v4 with cache disabled\n  // - Third party clients (detected by the `addAlgoliaAgent` function missing)\n\n  if ((!('transporter' in client) || client._cacheHydrated) && (!client._useCache || typeof client.addAlgoliaAgent !== 'function')) {\n    return;\n  }\n  var cachedRequest = Object.keys(results).map(function (key) {\n    var _results$key = results[key],\n      state = _results$key.state,\n      requestParams = _results$key.requestParams,\n      serverResults = _results$key.results;\n    return serverResults.map(function (result) {\n      return _objectSpread({\n        indexName: state.index || result.index\n      }, requestParams || result.params ? {\n        params: serializeQueryParameters(requestParams || deserializeQueryParameters(result.params))\n      } : {});\n    });\n  });\n  var cachedResults = Object.keys(results).reduce(function (acc, key) {\n    return acc.concat(results[key].results);\n  }, []);\n\n  // Algoliasearch API Client >= v4\n  // To hydrate the client we need to populate the cache with the data from\n  // the server (done in `hydrateSearchClientWithMultiIndexRequest` or\n  // `hydrateSearchClientWithSingleIndexRequest`). But since there is no way\n  // for us to compute the key the same way as `algoliasearch-client` we need\n  // to populate it on a custom key and override the `search` method to\n  // search on it first.\n  if ('transporter' in client && !client._cacheHydrated) {\n    client._cacheHydrated = true;\n    var baseMethod = client.search;\n    // @ts-ignore wanting type checks for v3 on this would make this too complex\n    client.search = function (requests) {\n      for (var _len = arguments.length, methodArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        methodArgs[_key - 1] = arguments[_key];\n      }\n      var requestsWithSerializedParams = requests.map(function (request) {\n        return _objectSpread(_objectSpread({}, request), {}, {\n          params: serializeQueryParameters(request.params)\n        });\n      });\n      return client.transporter.responsesCache.get({\n        method: 'search',\n        args: [requestsWithSerializedParams].concat(methodArgs)\n      }, function () {\n        return baseMethod.apply(void 0, [requests].concat(methodArgs));\n      });\n    };\n    client.transporter.responsesCache.set({\n      method: 'search',\n      args: cachedRequest\n    }, {\n      results: cachedResults\n    });\n  }\n\n  // Algoliasearch API Client < v4\n  // Prior to client v4 we didn't have a proper API to hydrate the client\n  // cache from the outside. The following code populates the cache with\n  // a single-index result. You can find more information about the\n  // computation of the key inside the client (see link below).\n  // https://github.com/algolia/algoliasearch-client-javascript/blob/c27e89ff92b2a854ae6f40dc524bffe0f0cbc169/src/AlgoliaSearchCore.js#L232-L240\n  if (!('transporter' in client)) {\n    var cacheKey = \"/1/indexes/*/queries_body_\".concat(JSON.stringify({\n      requests: cachedRequest\n    }));\n    client.cache = _objectSpread(_objectSpread({}, client.cache), {}, _defineProperty({}, cacheKey, JSON.stringify({\n      results: Object.keys(results).map(function (key) {\n        return results[key].results;\n      })\n    })));\n  }\n}\nfunction deserializeQueryParameters(parameters) {\n  return parameters.split('&').reduce(function (acc, parameter) {\n    var _parameter$split = parameter.split('='),\n      _parameter$split2 = _slicedToArray(_parameter$split, 2),\n      key = _parameter$split2[0],\n      value = _parameter$split2[1];\n    acc[key] = value ? decodeURIComponent(value) : '';\n    return acc;\n  }, {});\n}\n\n// This function is copied from the algoliasearch v4 API Client. If modified,\n// consider updating it also in `serializeQueryParameters` from `@algolia/transporter`.\nfunction serializeQueryParameters(parameters) {\n  var isObjectOrArray = function isObjectOrArray(value) {\n    return Object.prototype.toString.call(value) === '[object Object]' || Object.prototype.toString.call(value) === '[object Array]';\n  };\n  var encode = function encode(format) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    var i = 0;\n    return format.replace(/%s/g, function () {\n      return encodeURIComponent(args[i++]);\n    });\n  };\n  return Object.keys(parameters).map(function (key) {\n    return encode('%s=%s', key, isObjectOrArray(parameters[key]) ? JSON.stringify(parameters[key]) : parameters[key]);\n  }).join('&');\n}", "function isPrimitive(obj) {\n  return obj !== Object(obj);\n}\nexport function isEqual(first, second) {\n  if (first === second) {\n    return true;\n  }\n  if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n    return first === second;\n  }\n  if (Object.keys(first).length !== Object.keys(second).length) {\n    return false;\n  }\n\n  // @TODO avoid for..of because of the large polyfill\n  // eslint-disable-next-line no-restricted-syntax\n  for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n    var key = _Object$keys[_i];\n    if (!(key in second)) {\n      return false;\n    }\n    if (!isEqual(first[key], second[key])) {\n      return false;\n    }\n  }\n  return true;\n}", "export function isSpecialClick(event) {\n  var isMiddleClick = event.button === 1;\n  return isMiddleClick || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n}", "import { isIndexWidget } from \"./isIndexWidget.js\";\n/**\n * Recurse over all child indices\n */\nexport function walkIndex(indexWidget, callback) {\n  callback(indexWidget);\n  indexWidget.getWidgets().forEach(function (widget) {\n    if (isIndexWidget(widget)) {\n      walkIndex(widget, callback);\n    }\n  });\n}", "export function uniq(array) {\n  return array.filter(function (value, index, self) {\n    return self.indexOf(value) === index;\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"facets\", \"disjunctiveFacets\", \"facetsRefinements\", \"facetsExcludes\", \"disjunctiveFacetsRefinements\", \"numericRefinements\", \"tagRefinements\", \"hierarchicalFacets\", \"hierarchicalFacetsRefinements\", \"ruleContexts\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { findIndex } from \"./findIndex.js\";\nimport { uniq } from \"./uniq.js\";\nvar mergeWithRest = function mergeWithRest(left, right) {\n  var facets = right.facets,\n    disjunctiveFacets = right.disjunctiveFacets,\n    facetsRefinements = right.facetsRefinements,\n    facetsExcludes = right.facetsExcludes,\n    disjunctiveFacetsRefinements = right.disjunctiveFacetsRefinements,\n    numericRefinements = right.numericRefinements,\n    tagRefinements = right.tagRefinements,\n    hierarchicalFacets = right.hierarchicalFacets,\n    hierarchicalFacetsRefinements = right.hierarchicalFacetsRefinements,\n    ruleContexts = right.ruleContexts,\n    rest = _objectWithoutProperties(right, _excluded);\n  return left.setQueryParameters(rest);\n};\n\n// Merge facets\nvar mergeFacets = function mergeFacets(left, right) {\n  return right.facets.reduce(function (_, name) {\n    return _.addFacet(name);\n  }, left);\n};\nvar mergeDisjunctiveFacets = function mergeDisjunctiveFacets(left, right) {\n  return right.disjunctiveFacets.reduce(function (_, name) {\n    return _.addDisjunctiveFacet(name);\n  }, left);\n};\nvar mergeHierarchicalFacets = function mergeHierarchicalFacets(left, right) {\n  return left.setQueryParameters({\n    hierarchicalFacets: right.hierarchicalFacets.reduce(function (facets, facet) {\n      var index = findIndex(facets, function (_) {\n        return _.name === facet.name;\n      });\n      if (index === -1) {\n        return facets.concat(facet);\n      }\n      var nextFacets = facets.slice();\n      nextFacets.splice(index, 1, facet);\n      return nextFacets;\n    }, left.hierarchicalFacets)\n  });\n};\n\n// Merge facet refinements\nvar mergeTagRefinements = function mergeTagRefinements(left, right) {\n  return right.tagRefinements.reduce(function (_, value) {\n    return _.addTagRefinement(value);\n  }, left);\n};\nvar mergeFacetRefinements = function mergeFacetRefinements(left, right) {\n  return left.setQueryParameters({\n    facetsRefinements: _objectSpread(_objectSpread({}, left.facetsRefinements), right.facetsRefinements)\n  });\n};\nvar mergeFacetsExcludes = function mergeFacetsExcludes(left, right) {\n  return left.setQueryParameters({\n    facetsExcludes: _objectSpread(_objectSpread({}, left.facetsExcludes), right.facetsExcludes)\n  });\n};\nvar mergeDisjunctiveFacetsRefinements = function mergeDisjunctiveFacetsRefinements(left, right) {\n  return left.setQueryParameters({\n    disjunctiveFacetsRefinements: _objectSpread(_objectSpread({}, left.disjunctiveFacetsRefinements), right.disjunctiveFacetsRefinements)\n  });\n};\nvar mergeNumericRefinements = function mergeNumericRefinements(left, right) {\n  return left.setQueryParameters({\n    numericRefinements: _objectSpread(_objectSpread({}, left.numericRefinements), right.numericRefinements)\n  });\n};\nvar mergeHierarchicalFacetsRefinements = function mergeHierarchicalFacetsRefinements(left, right) {\n  return left.setQueryParameters({\n    hierarchicalFacetsRefinements: _objectSpread(_objectSpread({}, left.hierarchicalFacetsRefinements), right.hierarchicalFacetsRefinements)\n  });\n};\nvar mergeRuleContexts = function mergeRuleContexts(left, right) {\n  var ruleContexts = uniq([].concat(left.ruleContexts).concat(right.ruleContexts).filter(Boolean));\n  if (ruleContexts.length > 0) {\n    return left.setQueryParameters({\n      ruleContexts: ruleContexts\n    });\n  }\n  return left;\n};\nexport var mergeSearchParameters = function mergeSearchParameters() {\n  for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {\n    parameters[_key] = arguments[_key];\n  }\n  return parameters.reduce(function (left, right) {\n    var hierarchicalFacetsRefinementsMerged = mergeHierarchicalFacetsRefinements(left, right);\n    var hierarchicalFacetsMerged = mergeHierarchicalFacets(hierarchicalFacetsRefinementsMerged, right);\n    var tagRefinementsMerged = mergeTagRefinements(hierarchicalFacetsMerged, right);\n    var numericRefinementsMerged = mergeNumericRefinements(tagRefinementsMerged, right);\n    var disjunctiveFacetsRefinementsMerged = mergeDisjunctiveFacetsRefinements(numericRefinementsMerged, right);\n    var facetsExcludesMerged = mergeFacetsExcludes(disjunctiveFacetsRefinementsMerged, right);\n    var facetRefinementsMerged = mergeFacetRefinements(facetsExcludesMerged, right);\n    var disjunctiveFacetsMerged = mergeDisjunctiveFacets(facetRefinementsMerged, right);\n    var ruleContextsMerged = mergeRuleContexts(disjunctiveFacetsMerged, right);\n    var facetsMerged = mergeFacets(ruleContextsMerged, right);\n    return mergeWithRest(facetsMerged, right);\n  });\n};", "/**\n * Creates a new object with the same keys as the original object, but without the excluded keys.\n * @param source original object\n * @param excluded keys to remove from the original object\n * @returns the new object\n */\nexport function omit(source, excluded) {\n  if (source === null || source === undefined) {\n    return source;\n  }\n  return Object.keys(source).reduce(function (target, key) {\n    if (excluded.indexOf(key) >= 0) {\n      return target;\n    }\n    var validKey = key;\n    target[validKey] = source[validKey];\n    return target;\n  }, {});\n}", "export function createInitArgs(instantSearchInstance, parent, uiState) {\n  var helper = parent.getHelper();\n  return {\n    uiState: uiState,\n    helper: helper,\n    parent: parent,\n    instantSearchInstance: instantSearchInstance,\n    state: helper.state,\n    renderState: instantSearchInstance.renderState,\n    templatesConfig: instantSearchInstance.templatesConfig,\n    createURL: parent.createURL,\n    scopedResults: [],\n    searchMetadata: {\n      isSearchStalled: instantSearchInstance.status === 'stalled'\n    },\n    status: instantSearchInstance.status,\n    error: instantSearchInstance.error\n  };\n}\nexport function createRenderArgs(instantSearchInstance, parent, widget) {\n  var results = parent.getResultsForWidget(widget);\n  var helper = parent.getHelper();\n  return {\n    helper: helper,\n    parent: parent,\n    instantSearchInstance: instantSearchInstance,\n    results: results,\n    scopedResults: parent.getScopedResults(),\n    state: results && '_state' in results ? results._state : helper.state,\n    renderState: instantSearchInstance.renderState,\n    templatesConfig: instantSearchInstance.templatesConfig,\n    createURL: parent.createURL,\n    searchMetadata: {\n      isSearchStalled: instantSearchInstance.status === 'stalled'\n    },\n    status: instantSearchInstance.status,\n    error: instantSearchInstance.error\n  };\n}", "export function resolveSearchParameters(current) {\n  var parent = current.getParent();\n  var states = [current.getHelper().state];\n  while (parent !== null) {\n    states = [parent.getHelper().state].concat(states);\n    parent = parent.getParent();\n  }\n  return states;\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getHighlightFromSiblings } from \"./getHighlightFromSiblings.js\";\nexport function reverseHighlightedParts(parts) {\n  if (!parts.some(function (part) {\n    return part.isHighlighted;\n  })) {\n    return parts.map(function (part) {\n      return _objectSpread(_objectSpread({}, part), {}, {\n        isHighlighted: false\n      });\n    });\n  }\n  return parts.map(function (part, i) {\n    return _objectSpread(_objectSpread({}, part), {}, {\n      isHighlighted: !getHighlightFromSiblings(parts, i)\n    });\n  });\n}", "// eslint-disable-next-line no-restricted-globals\n\n/**\n * Runs code on browser environments safely.\n */\nexport function safelyRunOnBrowser(callback) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      fallback: function fallback() {\n        return undefined;\n      }\n    },\n    fallback = _ref.fallback;\n  // eslint-disable-next-line no-restricted-globals\n  if (typeof window === 'undefined') {\n    return fallback();\n  }\n\n  // eslint-disable-next-line no-restricted-globals\n  return callback({\n    window: window\n  });\n}", "export function toArray(value) {\n  return Array.isArray(value) ? value : [value];\n}", "import { component } from \"../lib/suit.js\";\nimport { getPropertyByPath, TAG_REPLACEMENT, warning } from \"../lib/utils/index.js\";\nvar suit = component('Highlight');\n\n/**\n * @deprecated use html tagged templates and the Highlight component instead\n */\nexport default function highlight(_ref) {\n  var attribute = _ref.attribute,\n    _ref$highlightedTagNa = _ref.highlightedTagName,\n    highlightedTagName = _ref$highlightedTagNa === void 0 ? 'mark' : _ref$highlightedTagNa,\n    hit = _ref.hit,\n    _ref$cssClasses = _ref.cssClasses,\n    cssClasses = _ref$cssClasses === void 0 ? {} : _ref$cssClasses;\n  process.env.NODE_ENV === 'development' ? warning(false, \"`instantsearch.highlight` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `Highlight` component.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/?client=html+tagged+templates#upgrade-templates\") : void 0;\n  var highlightAttributeResult = getPropertyByPath(hit._highlightResult, attribute);\n\n  // @MAJOR fallback to attribute value if highlight is not found\n  process.env.NODE_ENV === 'development' ? warning(highlightAttributeResult, \"Could not enable highlight for \\\"\".concat(attribute, \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is either searchable or specified in `attributesToHighlight`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var _ref2 = highlightAttributeResult || {},\n    _ref2$value = _ref2.value,\n    attributeValue = _ref2$value === void 0 ? '' : _ref2$value;\n\n  // cx is not used, since it would be bundled as a dependency for Vue & Angular\n  var className = suit({\n    descendantName: 'highlighted'\n  }) + (cssClasses.highlighted ? \" \".concat(cssClasses.highlighted) : '');\n  return attributeValue.replace(new RegExp(TAG_REPLACEMENT.highlightPreTag, 'g'), \"<\".concat(highlightedTagName, \" class=\\\"\").concat(className, \"\\\">\")).replace(new RegExp(TAG_REPLACEMENT.highlightPostTag, 'g'), \"</\".concat(highlightedTagName, \">\"));\n}", "import { component } from \"../lib/suit.js\";\nimport { TAG_REPLACEMENT, getPropertyByPath, getHighlightedParts, reverseHighlightedParts, concatHighlightedParts, warning } from \"../lib/utils/index.js\";\nvar suit = component('ReverseHighlight');\n\n/**\n * @deprecated use html tagged templates and the ReverseHighlight component instead\n */\nexport default function reverseHighlight(_ref) {\n  var attribute = _ref.attribute,\n    _ref$highlightedTagNa = _ref.highlightedTagName,\n    highlightedTagName = _ref$highlightedTagNa === void 0 ? 'mark' : _ref$highlightedTagNa,\n    hit = _ref.hit,\n    _ref$cssClasses = _ref.cssClasses,\n    cssClasses = _ref$cssClasses === void 0 ? {} : _ref$cssClasses;\n  process.env.NODE_ENV === 'development' ? warning(false, \"`instantsearch.reverseHighlight` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `ReverseHighlight` component.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/?client=html+tagged+templates#upgrade-templates\") : void 0;\n  var highlightAttributeResult = getPropertyByPath(hit._highlightResult, attribute);\n\n  // @MAJOR fallback to attribute value if highlight is not found\n  process.env.NODE_ENV === 'development' ? warning(highlightAttributeResult, \"Could not enable reverse highlight for \\\"\".concat(attribute, \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is either searchable or specified in `attributesToHighlight`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var _ref2 = highlightAttributeResult || {},\n    _ref2$value = _ref2.value,\n    attributeValue = _ref2$value === void 0 ? '' : _ref2$value;\n\n  // cx is not used, since it would be bundled as a dependency for Vue & Angular\n  var className = suit({\n    descendantName: 'highlighted'\n  }) + (cssClasses.highlighted ? \" \".concat(cssClasses.highlighted) : '');\n  var reverseHighlightedValue = concatHighlightedParts(reverseHighlightedParts(getHighlightedParts(attributeValue)));\n  return reverseHighlightedValue.replace(new RegExp(TAG_REPLACEMENT.highlightPreTag, 'g'), \"<\".concat(highlightedTagName, \" class=\\\"\").concat(className, \"\\\">\")).replace(new RegExp(TAG_REPLACEMENT.highlightPostTag, 'g'), \"</\".concat(highlightedTagName, \">\"));\n}", "import { component } from \"../lib/suit.js\";\nimport { TAG_REPLACEMENT, getPropertyByPath, warning } from \"../lib/utils/index.js\";\nvar suit = component('Snippet');\n\n/**\n * @deprecated use html tagged templates and the Snippet component instead\n */\nexport default function snippet(_ref) {\n  var attribute = _ref.attribute,\n    _ref$highlightedTagNa = _ref.highlightedTagName,\n    highlightedTagName = _ref$highlightedTagNa === void 0 ? 'mark' : _ref$highlightedTagNa,\n    hit = _ref.hit,\n    _ref$cssClasses = _ref.cssClasses,\n    cssClasses = _ref$cssClasses === void 0 ? {} : _ref$cssClasses;\n  process.env.NODE_ENV === 'development' ? warning(false, \"`instantsearch.snippet` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `Snippet` component.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/?client=html+tagged+templates#upgrade-templates\") : void 0;\n  var snippetAttributeResult = getPropertyByPath(hit._snippetResult, attribute);\n\n  // @MAJOR fallback to attribute value if snippet is not found\n  process.env.NODE_ENV === 'development' ? warning(snippetAttributeResult, \"Could not enable snippet for \\\"\".concat(attribute, \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is specified in `attributesToSnippet`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var _ref2 = snippetAttributeResult || {},\n    _ref2$value = _ref2.value,\n    attributeValue = _ref2$value === void 0 ? '' : _ref2$value;\n\n  // cx is not used, since it would be bundled as a dependency for Vue & Angular\n  var className = suit({\n    descendantName: 'highlighted'\n  }) + (cssClasses.highlighted ? \" \".concat(cssClasses.highlighted) : '');\n  return attributeValue.replace(new RegExp(TAG_REPLACEMENT.highlightPreTag, 'g'), \"<\".concat(highlightedTagName, \" class=\\\"\").concat(className, \"\\\">\")).replace(new RegExp(TAG_REPLACEMENT.highlightPostTag, 'g'), \"</\".concat(highlightedTagName, \">\"));\n}", "import { component } from \"../lib/suit.js\";\nimport { TAG_REPLACEMENT, getPropertyByPath, getHighlightedParts, reverseHighlightedParts, concatHighlightedParts, warning } from \"../lib/utils/index.js\";\nvar suit = component('ReverseSnippet');\n\n/**\n * @deprecated use html tagged templates and the ReverseSnippet component instead\n */\nexport default function reverseSnippet(_ref) {\n  var attribute = _ref.attribute,\n    _ref$highlightedTagNa = _ref.highlightedTagName,\n    highlightedTagName = _ref$highlightedTagNa === void 0 ? 'mark' : _ref$highlightedTagNa,\n    hit = _ref.hit,\n    _ref$cssClasses = _ref.cssClasses,\n    cssClasses = _ref$cssClasses === void 0 ? {} : _ref$cssClasses;\n  process.env.NODE_ENV === 'development' ? warning(false, \"`instantsearch.reverseSnippet` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `ReverseSnippet` component.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/?client=html+tagged+templates#upgrade-templates\") : void 0;\n  var snippetAttributeResult = getPropertyByPath(hit._snippetResult, attribute);\n\n  // @MAJOR fallback to attribute value if snippet is not found\n  process.env.NODE_ENV === 'development' ? warning(snippetAttributeResult, \"Could not enable reverse snippet for \\\"\".concat(attribute, \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is specified in `attributesToSnippet`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var _ref2 = snippetAttributeResult || {},\n    _ref2$value = _ref2.value,\n    attributeValue = _ref2$value === void 0 ? '' : _ref2$value;\n\n  // cx is not used, since it would be bundled as a dependency for Vue & Angular\n  var className = suit({\n    descendantName: 'highlighted'\n  }) + (cssClasses.highlighted ? \" \".concat(cssClasses.highlighted) : '');\n  var reverseHighlightedValue = concatHighlightedParts(reverseHighlightedParts(getHighlightedParts(attributeValue)));\n  return reverseHighlightedValue.replace(new RegExp(TAG_REPLACEMENT.highlightPreTag, 'g'), \"<\".concat(highlightedTagName, \" class=\\\"\").concat(className, \"\\\">\")).replace(new RegExp(TAG_REPLACEMENT.highlightPostTag, 'g'), \"</\".concat(highlightedTagName, \">\"));\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { warning, serializePayload, deserializePayload } from \"../lib/utils/index.js\";\n/** @deprecated use bindEvent instead */\nexport function readDataAttributes(domElement) {\n  var method = domElement.getAttribute('data-insights-method');\n  var serializedPayload = domElement.getAttribute('data-insights-payload');\n  if (typeof serializedPayload !== 'string') {\n    throw new Error('The insights helper expects `data-insights-payload` to be a base64-encoded JSON string.');\n  }\n  try {\n    var payload = deserializePayload(serializedPayload);\n    return {\n      method: method,\n      payload: payload\n    };\n  } catch (error) {\n    throw new Error('The insights helper was unable to parse `data-insights-payload`.');\n  }\n}\n\n/** @deprecated use bindEvent instead */\nexport function writeDataAttributes(_ref) {\n  var method = _ref.method,\n    payload = _ref.payload;\n  if (_typeof(payload) !== 'object') {\n    throw new Error(\"The insights helper expects the payload to be an object.\");\n  }\n  var serializedPayload;\n  try {\n    serializedPayload = serializePayload(payload);\n  } catch (error) {\n    throw new Error(\"Could not JSON serialize the payload object.\");\n  }\n  return \"data-insights-method=\\\"\".concat(method, \"\\\" data-insights-payload=\\\"\").concat(serializedPayload, \"\\\"\");\n}\n\n/**\n * @deprecated This function will be still supported in 4.x releases, but not further. It is replaced by the `insights` middleware. For more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/\n */\nexport default function insights(method, payload) {\n  process.env.NODE_ENV === 'development' ? warning(false, \"`insights` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `insights` middleware.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/\") : void 0;\n  return writeDataAttributes({\n    method: method,\n    payload: payload\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { warning } from \"../lib/utils/index.js\";\nexport var ANONYMOUS_TOKEN_COOKIE_KEY = '_ALGOLIA';\nfunction getCookie(name) {\n  if ((typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) !== 'object' || typeof document.cookie !== 'string') {\n    return undefined;\n  }\n  var prefix = \"\".concat(name, \"=\");\n  var cookies = document.cookie.split(';');\n  for (var i = 0; i < cookies.length; i++) {\n    var cookie = cookies[i];\n    while (cookie.charAt(0) === ' ') {\n      cookie = cookie.substring(1);\n    }\n    if (cookie.indexOf(prefix) === 0) {\n      return cookie.substring(prefix.length, cookie.length);\n    }\n  }\n  return undefined;\n}\nexport function getInsightsAnonymousUserTokenInternal() {\n  return getCookie(ANONYMOUS_TOKEN_COOKIE_KEY);\n}\n\n/**\n * @deprecated This function will be still supported in 4.x releases, but not further. It is replaced by the `insights` middleware. For more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/\n */\nexport default function getInsightsAnonymousUserToken() {\n  process.env.NODE_ENV === 'development' ? warning(false, \"`getInsightsAnonymousUserToken` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `insights` middleware.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/\") : void 0;\n  return getInsightsAnonymousUserTokenInternal();\n}", "var _excluded = [\"page\"];\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { isEqual, safelyRunOnBrowser } from \"../utils/index.js\";\nfunction getStateWithoutPage(state) {\n  var _ref = state || {},\n    page = _ref.page,\n    rest = _objectWithoutProperties(_ref, _excluded);\n  return rest;\n}\nvar KEY = 'ais.infiniteHits';\nexport default function createInfiniteHitsSessionStorageCache() {\n  return {\n    read: function read(_ref2) {\n      var state = _ref2.state;\n      var sessionStorage = safelyRunOnBrowser(function (_ref3) {\n        var window = _ref3.window;\n        return window.sessionStorage;\n      });\n      if (!sessionStorage) {\n        return null;\n      }\n      try {\n        var cache = JSON.parse(\n        // @ts-expect-error JSON.parse() requires a string, but it actually accepts null, too.\n        sessionStorage.getItem(KEY));\n        return cache && isEqual(cache.state, getStateWithoutPage(state)) ? cache.hits : null;\n      } catch (error) {\n        if (error instanceof SyntaxError) {\n          try {\n            sessionStorage.removeItem(KEY);\n          } catch (err) {\n            // do nothing\n          }\n        }\n        return null;\n      }\n    },\n    write: function write(_ref4) {\n      var state = _ref4.state,\n        hits = _ref4.hits;\n      var sessionStorage = safelyRunOnBrowser(function (_ref5) {\n        var window = _ref5.window;\n        return window.sessionStorage;\n      });\n      if (!sessionStorage) {\n        return;\n      }\n      try {\n        sessionStorage.setItem(KEY, JSON.stringify({\n          state: getStateWithoutPage(state),\n          hits: hits\n        }));\n      } catch (error) {\n        // do nothing\n      }\n    }\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport EventEmitter from '@algolia/events';\nimport algoliasearchHelper from 'algoliasearch-helper';\nimport { createInsightsMiddleware } from \"../middlewares/createInsightsMiddleware.js\";\nimport { createMetadataMiddleware, isMetadataEnabled } from \"../middlewares/createMetadataMiddleware.js\";\nimport { createRouterMiddleware } from \"../middlewares/createRouterMiddleware.js\";\nimport index from \"../widgets/index/index.js\";\nimport createHelpers from \"./createHelpers.js\";\nimport { createDocumentationMessageGenerator, createDocumentationLink, defer, hydrateSearchClient, noop, warning, setIndexHelperState, isIndexWidget } from \"./utils/index.js\";\nimport version from \"./version.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'instantsearch'\n});\nfunction defaultCreateURL() {\n  return '#';\n}\n\n// this purposely breaks typescript's type inference to ensure it's not used\n// as it's used for a default parameter for example\n// source: https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-504042546\n/**\n * Global options for an InstantSearch instance.\n */\nexport var INSTANTSEARCH_FUTURE_DEFAULTS = {\n  preserveSharedStateOnUnmount: false,\n  persistHierarchicalRootCount: false\n};\n\n/**\n * The actual implementation of the InstantSearch. This is\n * created using the `instantsearch` factory function.\n * It emits the 'render' event every time a search is done\n */\nvar InstantSearch = /*#__PURE__*/function (_EventEmitter) {\n  _inherits(InstantSearch, _EventEmitter);\n  var _super = _createSuper(InstantSearch);\n  function InstantSearch(options) {\n    var _options$future2;\n    var _this;\n    _classCallCheck(this, InstantSearch);\n    _this = _super.call(this);\n\n    // prevent `render` event listening from causing a warning\n    _defineProperty(_assertThisInitialized(_this), \"client\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"indexName\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"insightsClient\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"onStateChange\", null);\n    _defineProperty(_assertThisInitialized(_this), \"future\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"helper\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"mainHelper\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"mainIndex\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"started\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"templatesConfig\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"renderState\", {});\n    _defineProperty(_assertThisInitialized(_this), \"_stalledSearchDelay\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"_searchStalledTimer\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"_initialUiState\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"_initialResults\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"_createURL\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"_searchFunction\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"_mainHelperSearch\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"_hasSearchWidget\", false);\n    _defineProperty(_assertThisInitialized(_this), \"_hasRecommendWidget\", false);\n    _defineProperty(_assertThisInitialized(_this), \"_insights\", void 0);\n    _defineProperty(_assertThisInitialized(_this), \"middleware\", []);\n    _defineProperty(_assertThisInitialized(_this), \"sendEventToInsights\", void 0);\n    /**\n     * The status of the search. Can be \"idle\", \"loading\", \"stalled\", or \"error\".\n     */\n    _defineProperty(_assertThisInitialized(_this), \"status\", 'idle');\n    /**\n     * The last returned error from the Search API.\n     * The error gets cleared when the next valid search response is rendered.\n     */\n    _defineProperty(_assertThisInitialized(_this), \"error\", undefined);\n    _defineProperty(_assertThisInitialized(_this), \"scheduleSearch\", defer(function () {\n      if (_this.started) {\n        _this.mainHelper.search();\n      }\n    }));\n    _defineProperty(_assertThisInitialized(_this), \"scheduleRender\", defer(function () {\n      var _this$mainHelper;\n      var shouldResetStatus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      if (!((_this$mainHelper = _this.mainHelper) !== null && _this$mainHelper !== void 0 && _this$mainHelper.hasPendingRequests())) {\n        clearTimeout(_this._searchStalledTimer);\n        _this._searchStalledTimer = null;\n        if (shouldResetStatus) {\n          _this.status = 'idle';\n          _this.error = undefined;\n        }\n      }\n      _this.mainIndex.render({\n        instantSearchInstance: _assertThisInitialized(_this)\n      });\n      _this.emit('render');\n    }));\n    _defineProperty(_assertThisInitialized(_this), \"onInternalStateChange\", defer(function () {\n      var nextUiState = _this.mainIndex.getWidgetUiState({});\n      _this.middleware.forEach(function (_ref) {\n        var instance = _ref.instance;\n        instance.onStateChange({\n          uiState: nextUiState\n        });\n      });\n    }));\n    _this.setMaxListeners(100);\n    var _options$indexName = options.indexName,\n      indexName = _options$indexName === void 0 ? '' : _options$indexName,\n      numberLocale = options.numberLocale,\n      _options$initialUiSta = options.initialUiState,\n      initialUiState = _options$initialUiSta === void 0 ? {} : _options$initialUiSta,\n      _options$routing = options.routing,\n      routing = _options$routing === void 0 ? null : _options$routing,\n      _options$insights = options.insights,\n      insights = _options$insights === void 0 ? undefined : _options$insights,\n      searchFunction = options.searchFunction,\n      _options$stalledSearc = options.stalledSearchDelay,\n      stalledSearchDelay = _options$stalledSearc === void 0 ? 200 : _options$stalledSearc,\n      _options$searchClient = options.searchClient,\n      searchClient = _options$searchClient === void 0 ? null : _options$searchClient,\n      _options$insightsClie = options.insightsClient,\n      insightsClient = _options$insightsClie === void 0 ? null : _options$insightsClie,\n      _options$onStateChang = options.onStateChange,\n      onStateChange = _options$onStateChang === void 0 ? null : _options$onStateChang,\n      _options$future = options.future,\n      future = _options$future === void 0 ? _objectSpread(_objectSpread({}, INSTANTSEARCH_FUTURE_DEFAULTS), options.future || {}) : _options$future;\n    if (searchClient === null) {\n      throw new Error(withUsage('The `searchClient` option is required.'));\n    }\n    if (typeof searchClient.search !== 'function') {\n      throw new Error(\"The `searchClient` must implement a `search` method.\\n\\nSee: https://www.algolia.com/doc/guides/building-search-ui/going-further/backend-search/in-depth/backend-instantsearch/js/\");\n    }\n    if (typeof searchClient.addAlgoliaAgent === 'function') {\n      searchClient.addAlgoliaAgent(\"instantsearch.js (\".concat(version, \")\"));\n    }\n    process.env.NODE_ENV === 'development' ? warning(insightsClient === null, \"`insightsClient` property has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `insights` middleware.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/\") : void 0;\n    if (insightsClient && typeof insightsClient !== 'function') {\n      throw new Error(withUsage('The `insightsClient` option should be a function.'));\n    }\n    process.env.NODE_ENV === 'development' ? warning(!options.searchParameters, \"The `searchParameters` option is deprecated and will not be supported in InstantSearch.js 4.x.\\n\\nYou can replace it with the `configure` widget:\\n\\n```\\nsearch.addWidgets([\\n  configure(\".concat(JSON.stringify(options.searchParameters, null, 2), \")\\n]);\\n```\\n\\nSee \").concat(createDocumentationLink({\n      name: 'configure'\n    }))) : void 0;\n    if (process.env.NODE_ENV === 'development' && ((_options$future2 = options.future) === null || _options$future2 === void 0 ? void 0 : _options$future2.preserveSharedStateOnUnmount) === undefined) {\n      // eslint-disable-next-line no-console\n      console.info(\"Starting from the next major version, InstantSearch will change how widgets state is preserved when they are removed. InstantSearch will keep the state of unmounted widgets to be usable by other widgets with the same attribute.\\n\\nWe recommend setting `future.preserveSharedStateOnUnmount` to true to adopt this change today.\\nTo stay with the current behaviour and remove this warning, set the option to false.\\n\\nSee documentation: \".concat(createDocumentationLink({\n        name: 'instantsearch'\n      }), \"#widget-param-future\\n          \"));\n    }\n    _this.client = searchClient;\n    _this.future = future;\n    _this.insightsClient = insightsClient;\n    _this.indexName = indexName;\n    _this.helper = null;\n    _this.mainHelper = null;\n    _this.mainIndex = index({\n      indexName: indexName\n    });\n    _this.onStateChange = onStateChange;\n    _this.started = false;\n    _this.templatesConfig = {\n      helpers: createHelpers({\n        numberLocale: numberLocale\n      }),\n      compileOptions: {}\n    };\n    _this._stalledSearchDelay = stalledSearchDelay;\n    _this._searchStalledTimer = null;\n    _this._createURL = defaultCreateURL;\n    _this._initialUiState = initialUiState;\n    _this._initialResults = null;\n    _this._insights = insights;\n    if (searchFunction) {\n      process.env.NODE_ENV === 'development' ? warning(false, \"The `searchFunction` option is deprecated. Use `onStateChange` instead.\") : void 0;\n      _this._searchFunction = searchFunction;\n    }\n    _this.sendEventToInsights = noop;\n    if (routing) {\n      var routerOptions = typeof routing === 'boolean' ? {} : routing;\n      routerOptions.$$internal = true;\n      _this.use(createRouterMiddleware(routerOptions));\n    }\n\n    // This is the default Insights middleware,\n    // added when `insights` is set to true by the user.\n    // Any user-provided middleware will be added later and override this one.\n    if (insights) {\n      var insightsOptions = typeof insights === 'boolean' ? {} : insights;\n      insightsOptions.$$internal = true;\n      _this.use(createInsightsMiddleware(insightsOptions));\n    }\n    if (isMetadataEnabled()) {\n      _this.use(createMetadataMiddleware({\n        $$internal: true\n      }));\n    }\n    return _this;\n  }\n\n  /**\n   * Hooks a middleware into the InstantSearch lifecycle.\n   */\n  _createClass(InstantSearch, [{\n    key: \"_isSearchStalled\",\n    get:\n    /**\n     * @deprecated use `status === 'stalled'` instead\n     */\n    function get() {\n      process.env.NODE_ENV === 'development' ? warning(false, \"`InstantSearch._isSearchStalled` is deprecated and will be removed in InstantSearch.js 5.0.\\n\\nUse `InstantSearch.status === \\\"stalled\\\"` instead.\") : void 0;\n      return this.status === 'stalled';\n    }\n  }, {\n    key: \"use\",\n    value: function use() {\n      var _this2 = this;\n      for (var _len = arguments.length, middleware = new Array(_len), _key = 0; _key < _len; _key++) {\n        middleware[_key] = arguments[_key];\n      }\n      var newMiddlewareList = middleware.map(function (fn) {\n        var newMiddleware = _objectSpread({\n          $$type: '__unknown__',\n          $$internal: false,\n          subscribe: noop,\n          started: noop,\n          unsubscribe: noop,\n          onStateChange: noop\n        }, fn({\n          instantSearchInstance: _this2\n        }));\n        _this2.middleware.push({\n          creator: fn,\n          instance: newMiddleware\n        });\n        return newMiddleware;\n      });\n\n      // If the instance has already started, we directly subscribe the\n      // middleware so they're notified of changes.\n      if (this.started) {\n        newMiddlewareList.forEach(function (m) {\n          m.subscribe();\n          m.started();\n        });\n      }\n      return this;\n    }\n\n    /**\n     * Removes a middleware from the InstantSearch lifecycle.\n     */\n  }, {\n    key: \"unuse\",\n    value: function unuse() {\n      for (var _len2 = arguments.length, middlewareToUnuse = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        middlewareToUnuse[_key2] = arguments[_key2];\n      }\n      this.middleware.filter(function (m) {\n        return middlewareToUnuse.includes(m.creator);\n      }).forEach(function (m) {\n        return m.instance.unsubscribe();\n      });\n      this.middleware = this.middleware.filter(function (m) {\n        return !middlewareToUnuse.includes(m.creator);\n      });\n      return this;\n    }\n\n    // @major we shipped with EXPERIMENTAL_use, but have changed that to just `use` now\n  }, {\n    key: \"EXPERIMENTAL_use\",\n    value: function EXPERIMENTAL_use() {\n      process.env.NODE_ENV === 'development' ? warning(false, 'The middleware API is now considered stable, so we recommend replacing `EXPERIMENTAL_use` with `use` before upgrading to the next major version.') : void 0;\n      return this.use.apply(this, arguments);\n    }\n\n    /**\n     * Adds a widget to the search instance.\n     * A widget can be added either before or after InstantSearch has started.\n     * @param widget The widget to add to InstantSearch.\n     *\n     * @deprecated This method will still be supported in 4.x releases, but not further. It is replaced by `addWidgets([widget])`.\n     */\n  }, {\n    key: \"addWidget\",\n    value: function addWidget(widget) {\n      process.env.NODE_ENV === 'development' ? warning(false, 'addWidget will still be supported in 4.x releases, but not further. It is replaced by `addWidgets([widget])`') : void 0;\n      return this.addWidgets([widget]);\n    }\n\n    /**\n     * Adds multiple widgets to the search instance.\n     * Widgets can be added either before or after InstantSearch has started.\n     * @param widgets The array of widgets to add to InstantSearch.\n     */\n  }, {\n    key: \"addWidgets\",\n    value: function addWidgets(widgets) {\n      if (!Array.isArray(widgets)) {\n        throw new Error(withUsage('The `addWidgets` method expects an array of widgets. Please use `addWidget`.'));\n      }\n      if (widgets.some(function (widget) {\n        return typeof widget.init !== 'function' && typeof widget.render !== 'function';\n      })) {\n        throw new Error(withUsage('The widget definition expects a `render` and/or an `init` method.'));\n      }\n      this.mainIndex.addWidgets(widgets);\n      return this;\n    }\n\n    /**\n     * Removes a widget from the search instance.\n     * @deprecated This method will still be supported in 4.x releases, but not further. It is replaced by `removeWidgets([widget])`\n     * @param widget The widget instance to remove from InstantSearch.\n     *\n     * The widget must implement a `dispose()` method to clear its state.\n     */\n  }, {\n    key: \"removeWidget\",\n    value: function removeWidget(widget) {\n      process.env.NODE_ENV === 'development' ? warning(false, 'removeWidget will still be supported in 4.x releases, but not further. It is replaced by `removeWidgets([widget])`') : void 0;\n      return this.removeWidgets([widget]);\n    }\n\n    /**\n     * Removes multiple widgets from the search instance.\n     * @param widgets Array of widgets instances to remove from InstantSearch.\n     *\n     * The widgets must implement a `dispose()` method to clear their states.\n     */\n  }, {\n    key: \"removeWidgets\",\n    value: function removeWidgets(widgets) {\n      if (!Array.isArray(widgets)) {\n        throw new Error(withUsage('The `removeWidgets` method expects an array of widgets. Please use `removeWidget`.'));\n      }\n      if (widgets.some(function (widget) {\n        return typeof widget.dispose !== 'function';\n      })) {\n        throw new Error(withUsage('The widget definition expects a `dispose` method.'));\n      }\n      this.mainIndex.removeWidgets(widgets);\n      return this;\n    }\n\n    /**\n     * Ends the initialization of InstantSearch.js and triggers the\n     * first search.\n     */\n  }, {\n    key: \"start\",\n    value: function start() {\n      var _this3 = this;\n      if (this.started) {\n        throw new Error(withUsage('The `start` method has already been called once.'));\n      }\n\n      // This Helper is used for the queries, we don't care about its state. The\n      // states are managed at the `index` level. We use this Helper to create\n      // DerivedHelper scoped into the `index` widgets.\n      // In Vue InstantSearch' hydrate, a main helper gets set before start, so\n      // we need to respect this helper as a way to keep all listeners correct.\n      var mainHelper = this.mainHelper || algoliasearchHelper(this.client, this.indexName, undefined, {\n        persistHierarchicalRootCount: this.future.persistHierarchicalRootCount\n      });\n      mainHelper.search = function () {\n        _this3.status = 'loading';\n        _this3.scheduleRender(false);\n        process.env.NODE_ENV === 'development' ? warning(Boolean(_this3.indexName) || _this3.mainIndex.getWidgets().some(isIndexWidget), 'No indexName provided, nor an explicit index widget in the widgets tree. This is required to be able to display results.') : void 0;\n\n        // This solution allows us to keep the exact same API for the users but\n        // under the hood, we have a different implementation. It should be\n        // completely transparent for the rest of the codebase. Only this module\n        // is impacted.\n        if (_this3._hasSearchWidget) {\n          mainHelper.searchOnlyWithDerivedHelpers();\n        }\n        if (_this3._hasRecommendWidget) {\n          mainHelper.recommend();\n        }\n        return mainHelper;\n      };\n      if (this._searchFunction) {\n        // this client isn't used to actually search, but required for the helper\n        // to not throw errors\n        var fakeClient = {\n          search: function search() {\n            return new Promise(noop);\n          }\n        };\n        this._mainHelperSearch = mainHelper.search.bind(mainHelper);\n        mainHelper.search = function () {\n          var mainIndexHelper = _this3.mainIndex.getHelper();\n          var searchFunctionHelper = algoliasearchHelper(fakeClient, mainIndexHelper.state.index, mainIndexHelper.state);\n          searchFunctionHelper.once('search', function (_ref2) {\n            var state = _ref2.state;\n            mainIndexHelper.overrideStateWithoutTriggeringChangeEvent(state);\n            _this3._mainHelperSearch();\n          });\n          // Forward state changes from `searchFunctionHelper` to `mainIndexHelper`\n          searchFunctionHelper.on('change', function (_ref3) {\n            var state = _ref3.state;\n            mainIndexHelper.setState(state);\n          });\n          _this3._searchFunction(searchFunctionHelper);\n          return mainHelper;\n        };\n      }\n\n      // Only the \"main\" Helper emits the `error` event vs the one for `search`\n      // and `results` that are also emitted on the derived one.\n      mainHelper.on('error', function (_ref4) {\n        var error = _ref4.error;\n        if (!(error instanceof Error)) {\n          // typescript lies here, error is in some cases { name: string, message: string }\n          var err = error;\n          error = Object.keys(err).reduce(function (acc, key) {\n            acc[key] = err[key];\n            return acc;\n          }, new Error(err.message));\n        }\n        // If an error is emitted, it is re-thrown by events. In previous versions\n        // we emitted {error}, which is thrown as:\n        // \"Uncaught, unspecified \\\"error\\\" event. ([object Object])\"\n        // To avoid breaking changes, we make the error available in both\n        // `error` and `error.error`\n        // @MAJOR emit only error\n        error.error = error;\n        _this3.error = error;\n        _this3.status = 'error';\n        _this3.scheduleRender(false);\n\n        // This needs to execute last because it throws the error.\n        _this3.emit('error', error);\n      });\n      this.mainHelper = mainHelper;\n      this.middleware.forEach(function (_ref5) {\n        var instance = _ref5.instance;\n        instance.subscribe();\n      });\n      this.mainIndex.init({\n        instantSearchInstance: this,\n        parent: null,\n        uiState: this._initialUiState\n      });\n      if (this._initialResults) {\n        hydrateSearchClient(this.client, this._initialResults);\n        var originalScheduleSearch = this.scheduleSearch;\n        // We don't schedule a first search when initial results are provided\n        // because we already have the results to render. This skips the initial\n        // network request on the browser on `start`.\n        this.scheduleSearch = defer(noop);\n        // We also skip the initial network request when widgets are dynamically\n        // added in the first tick (that's the case in all the framework-based flavors).\n        // When we add a widget to `index`, it calls `scheduleSearch`. We can rely\n        // on our `defer` util to restore the original `scheduleSearch` value once\n        // widgets are added to hook back to the regular lifecycle.\n        defer(function () {\n          _this3.scheduleSearch = originalScheduleSearch;\n        })();\n      }\n      // We only schedule a search when widgets have been added before `start()`\n      // because there are listeners that can use these results.\n      // This is especially useful in framework-based flavors that wait for\n      // dynamically-added widgets to trigger a network request. It avoids\n      // having to batch this initial network request with the one coming from\n      // `addWidgets()`.\n      // Later, we could also skip `index()` widgets and widgets that don't read\n      // the results, but this is an optimization that has a very low impact for now.\n      else if (this.mainIndex.getWidgets().length > 0) {\n        this.scheduleSearch();\n      }\n\n      // Keep the previous reference for legacy purpose, some pattern use\n      // the direct Helper access `search.helper` (e.g multi-index).\n      this.helper = this.mainIndex.getHelper();\n\n      // track we started the search if we add more widgets,\n      // to init them directly after add\n      this.started = true;\n      this.middleware.forEach(function (_ref6) {\n        var instance = _ref6.instance;\n        instance.started();\n      });\n\n      // This is the automatic Insights middleware,\n      // added when `insights` is unset and the initial results possess `queryID`.\n      // Any user-provided middleware will be added later and override this one.\n      if (typeof this._insights === 'undefined') {\n        mainHelper.derivedHelpers[0].once('result', function () {\n          var hasAutomaticInsights = _this3.mainIndex.getScopedResults().some(function (_ref7) {\n            var results = _ref7.results;\n            return results === null || results === void 0 ? void 0 : results._automaticInsights;\n          });\n          if (hasAutomaticInsights) {\n            _this3.use(createInsightsMiddleware({\n              $$internal: true,\n              $$automatic: true\n            }));\n          }\n        });\n      }\n    }\n\n    /**\n     * Removes all widgets without triggering a search afterwards.\n     * @return {undefined} This method does not return anything\n     */\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      var _this$mainHelper2;\n      this.scheduleSearch.cancel();\n      this.scheduleRender.cancel();\n      clearTimeout(this._searchStalledTimer);\n      this.removeWidgets(this.mainIndex.getWidgets());\n      this.mainIndex.dispose();\n\n      // You can not start an instance two times, therefore a disposed instance\n      // needs to set started as false otherwise this can not be restarted at a\n      // later point.\n      this.started = false;\n\n      // The helper needs to be reset to perform the next search from a fresh state.\n      // If not reset, it would use the state stored before calling `dispose()`.\n      this.removeAllListeners();\n      (_this$mainHelper2 = this.mainHelper) === null || _this$mainHelper2 === void 0 ? void 0 : _this$mainHelper2.removeAllListeners();\n      this.mainHelper = null;\n      this.helper = null;\n      this.middleware.forEach(function (_ref8) {\n        var instance = _ref8.instance;\n        instance.unsubscribe();\n      });\n    }\n  }, {\n    key: \"scheduleStalledRender\",\n    value: function scheduleStalledRender() {\n      var _this4 = this;\n      if (!this._searchStalledTimer) {\n        this._searchStalledTimer = setTimeout(function () {\n          _this4.status = 'stalled';\n          _this4.scheduleRender();\n        }, this._stalledSearchDelay);\n      }\n    }\n\n    /**\n     * Set the UI state and trigger a search.\n     * @param uiState The next UI state or a function computing it from the current state\n     * @param callOnStateChange private parameter used to know if the method is called from a state change\n     */\n  }, {\n    key: \"setUiState\",\n    value: function setUiState(uiState) {\n      var _this5 = this;\n      var callOnStateChange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      if (!this.mainHelper) {\n        throw new Error(withUsage('The `start` method needs to be called before `setUiState`.'));\n      }\n\n      // We refresh the index UI state to update the local UI state that the\n      // main index passes to the function form of `setUiState`.\n      this.mainIndex.refreshUiState();\n      var nextUiState = typeof uiState === 'function' ? uiState(this.mainIndex.getWidgetUiState({})) : uiState;\n      if (this.onStateChange && callOnStateChange) {\n        this.onStateChange({\n          uiState: nextUiState,\n          setUiState: function setUiState(finalUiState) {\n            setIndexHelperState(typeof finalUiState === 'function' ? finalUiState(nextUiState) : finalUiState, _this5.mainIndex);\n            _this5.scheduleSearch();\n            _this5.onInternalStateChange();\n          }\n        });\n      } else {\n        setIndexHelperState(nextUiState, this.mainIndex);\n        this.scheduleSearch();\n        this.onInternalStateChange();\n      }\n    }\n  }, {\n    key: \"getUiState\",\n    value: function getUiState() {\n      if (this.started) {\n        // We refresh the index UI state to make sure changes from `refine` are taken in account\n        this.mainIndex.refreshUiState();\n      }\n      return this.mainIndex.getWidgetUiState({});\n    }\n  }, {\n    key: \"createURL\",\n    value: function createURL() {\n      var nextState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      if (!this.started) {\n        throw new Error(withUsage('The `start` method needs to be called before `createURL`.'));\n      }\n      return this._createURL(nextState);\n    }\n  }, {\n    key: \"refresh\",\n    value: function refresh() {\n      if (!this.mainHelper) {\n        throw new Error(withUsage('The `start` method needs to be called before `refresh`.'));\n      }\n      this.mainHelper.clearCache().search();\n    }\n  }]);\n  return InstantSearch;\n}(EventEmitter);\nexport default InstantSearch;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { getInsightsAnonymousUserTokenInternal } from \"../helpers/index.js\";\nimport { warning, noop, getAppIdAndApiKey, find, safelyRunOnBrowser } from \"../lib/utils/index.js\";\nvar ALGOLIA_INSIGHTS_VERSION = '2.13.0';\nvar ALGOLIA_INSIGHTS_SRC = \"https://cdn.jsdelivr.net/npm/search-insights@\".concat(ALGOLIA_INSIGHTS_VERSION, \"/dist/search-insights.min.js\");\nexport function createInsightsMiddleware() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _insightsClient = props.insightsClient,\n    insightsInitParams = props.insightsInitParams,\n    onEvent = props.onEvent,\n    _props$$$internal = props.$$internal,\n    $$internal = _props$$$internal === void 0 ? false : _props$$$internal,\n    _props$$$automatic = props.$$automatic,\n    $$automatic = _props$$$automatic === void 0 ? false : _props$$$automatic;\n  var potentialInsightsClient = _insightsClient;\n  if (!_insightsClient && _insightsClient !== null) {\n    safelyRunOnBrowser(function (_ref) {\n      var window = _ref.window;\n      var pointer = window.AlgoliaAnalyticsObject || 'aa';\n      if (typeof pointer === 'string') {\n        potentialInsightsClient = window[pointer];\n      }\n      if (!potentialInsightsClient) {\n        window.AlgoliaAnalyticsObject = pointer;\n        if (!window[pointer]) {\n          window[pointer] = function () {\n            if (!window[pointer].queue) {\n              window[pointer].queue = [];\n            }\n            for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n              args[_key] = arguments[_key];\n            }\n            window[pointer].queue.push(args);\n          };\n          window[pointer].version = ALGOLIA_INSIGHTS_VERSION;\n          window[pointer].shouldAddScript = true;\n        }\n        potentialInsightsClient = window[pointer];\n      }\n    });\n  }\n  // if still no insightsClient was found, we use a noop\n  var insightsClient = potentialInsightsClient || noop;\n  return function (_ref2) {\n    var instantSearchInstance = _ref2.instantSearchInstance;\n    // remove existing default insights middleware\n    // user-provided insights middleware takes precedence\n    var existingInsightsMiddlewares = instantSearchInstance.middleware.filter(function (m) {\n      return m.instance.$$type === 'ais.insights' && m.instance.$$internal;\n    }).map(function (m) {\n      return m.creator;\n    });\n    instantSearchInstance.unuse.apply(instantSearchInstance, _toConsumableArray(existingInsightsMiddlewares));\n    var _getAppIdAndApiKey = getAppIdAndApiKey(instantSearchInstance.client),\n      _getAppIdAndApiKey2 = _slicedToArray(_getAppIdAndApiKey, 2),\n      appId = _getAppIdAndApiKey2[0],\n      apiKey = _getAppIdAndApiKey2[1];\n\n    // search-insights.js also throws an error so dev-only clarification is sufficient\n    process.env.NODE_ENV === 'development' ? warning(Boolean(appId && apiKey), 'could not extract Algolia credentials from searchClient in insights middleware.') : void 0;\n    var queuedUserToken = undefined;\n    var queuedAuthenticatedUserToken = undefined;\n    var userTokenBeforeInit = undefined;\n    var authenticatedUserTokenBeforeInit = undefined;\n    var queue = insightsClient.queue;\n    if (Array.isArray(queue)) {\n      // Context: The umd build of search-insights is asynchronously loaded by the snippet.\n      //\n      // When user calls `aa('setUserToken', 'my-user-token')` before `search-insights` is loaded,\n      // ['setUserToken', 'my-user-token'] gets stored in `aa.queue`.\n      // Whenever `search-insights` is finally loaded, it will process the queue.\n      //\n      // But here's the reason why we handle it here:\n      // At this point, even though `search-insights` is not loaded yet,\n      // we still want to read the token from the queue.\n      // Otherwise, the first search call will be fired without the token.\n      var _map = ['setUserToken', 'setAuthenticatedUserToken'].map(function (key) {\n        var _ref3 = find(queue.slice().reverse(), function (_ref5) {\n            var _ref6 = _slicedToArray(_ref5, 1),\n              method = _ref6[0];\n            return method === key;\n          }) || [],\n          _ref4 = _slicedToArray(_ref3, 2),\n          value = _ref4[1];\n        return value;\n      });\n      var _map2 = _slicedToArray(_map, 2);\n      queuedUserToken = _map2[0];\n      queuedAuthenticatedUserToken = _map2[1];\n    }\n\n    // If user called `aa('setUserToken')` or `aa('setAuthenticatedUserToken')`\n    // before creating the Insights middleware, we temporarily store the token\n    // and set it later on.\n    //\n    // Otherwise, the `init` call might override them with anonymous user token.\n    insightsClient('getUserToken', null, function (_error, userToken) {\n      userTokenBeforeInit = normalizeUserToken(userToken);\n    });\n    insightsClient('getAuthenticatedUserToken', null, function (_error, userToken) {\n      authenticatedUserTokenBeforeInit = normalizeUserToken(userToken);\n    });\n\n    // Only `init` if the `insightsInitParams` option is passed or\n    // if the `insightsClient` version doesn't supports optional `init` calling.\n    if (insightsInitParams || !isModernInsightsClient(insightsClient)) {\n      insightsClient('init', _objectSpread({\n        appId: appId,\n        apiKey: apiKey,\n        partial: true\n      }, insightsInitParams));\n    }\n    var initialParameters;\n    var helper;\n    return {\n      $$type: 'ais.insights',\n      $$internal: $$internal,\n      $$automatic: $$automatic,\n      onStateChange: function onStateChange() {},\n      subscribe: function subscribe() {\n        if (!insightsClient.shouldAddScript) return;\n        var errorMessage = '[insights middleware]: could not load search-insights.js. Please load it manually following https://alg.li/insights-init';\n        try {\n          var script = document.createElement('script');\n          script.async = true;\n          script.src = ALGOLIA_INSIGHTS_SRC;\n          script.onerror = function () {\n            instantSearchInstance.emit('error', new Error(errorMessage));\n          };\n          document.body.appendChild(script);\n          insightsClient.shouldAddScript = false;\n        } catch (cause) {\n          insightsClient.shouldAddScript = false;\n          instantSearchInstance.emit('error', new Error(errorMessage));\n        }\n      },\n      started: function started() {\n        insightsClient('addAlgoliaAgent', 'insights-middleware');\n        helper = instantSearchInstance.mainHelper;\n        initialParameters = {\n          userToken: helper.state.userToken,\n          clickAnalytics: helper.state.clickAnalytics\n        };\n\n        // We don't want to force clickAnalytics when the insights is enabled from the search response.\n        // This means we don't enable insights for indices that don't opt in\n        if (!$$automatic) {\n          helper.overrideStateWithoutTriggeringChangeEvent(_objectSpread(_objectSpread({}, helper.state), {}, {\n            clickAnalytics: true\n          }));\n        }\n        if (!$$internal) {\n          instantSearchInstance.scheduleSearch();\n        }\n        var setUserTokenToSearch = function setUserTokenToSearch(userToken) {\n          var immediate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n          var normalizedUserToken = normalizeUserToken(userToken);\n          if (!normalizedUserToken) {\n            return;\n          }\n          var existingToken = helper.state.userToken;\n          function applyToken() {\n            helper.overrideStateWithoutTriggeringChangeEvent(_objectSpread(_objectSpread({}, helper.state), {}, {\n              userToken: normalizedUserToken\n            }));\n            if (existingToken && existingToken !== userToken) {\n              instantSearchInstance.scheduleSearch();\n            }\n          }\n\n          // Delay the token application to the next render cycle\n          if (!immediate) {\n            setTimeout(applyToken, 0);\n          } else {\n            applyToken();\n          }\n        };\n        var anonymousUserToken = getInsightsAnonymousUserTokenInternal();\n        if (anonymousUserToken) {\n          // When `aa('init', { ... })` is called, it creates an anonymous user token in cookie.\n          // We can set it as userToken.\n          setUserTokenToSearch(anonymousUserToken, true);\n        }\n        function setUserToken(token, userToken, authenticatedUserToken) {\n          setUserTokenToSearch(token, true);\n          if (userToken) {\n            insightsClient('setUserToken', userToken);\n          }\n          if (authenticatedUserToken) {\n            insightsClient('setAuthenticatedUserToken', authenticatedUserToken);\n          }\n        }\n\n        // We consider the `userToken` or `authenticatedUserToken` before an\n        // `init` call of higher importance than one from the queue.\n        var tokenBeforeInit = authenticatedUserTokenBeforeInit || userTokenBeforeInit;\n        var queuedToken = queuedAuthenticatedUserToken || queuedUserToken;\n        if (tokenBeforeInit) {\n          setUserToken(tokenBeforeInit, userTokenBeforeInit, authenticatedUserTokenBeforeInit);\n        } else if (queuedToken) {\n          setUserToken(queuedToken, queuedUserToken, queuedAuthenticatedUserToken);\n        }\n\n        // This updates userToken which is set explicitly by `aa('setUserToken', userToken)`\n        insightsClient('onUserTokenChange', setUserTokenToSearch, {\n          immediate: true\n        });\n\n        // This updates userToken which is set explicitly by `aa('setAuthenticatedtUserToken', authenticatedUserToken)`\n        insightsClient('onAuthenticatedUserTokenChange', function (authenticatedUserToken) {\n          // If we're unsetting the `authenticatedUserToken`, we revert to the `userToken`\n          if (!authenticatedUserToken) {\n            insightsClient('getUserToken', null, function (_, userToken) {\n              setUserTokenToSearch(userToken);\n            });\n          }\n          setUserTokenToSearch(authenticatedUserToken);\n        }, {\n          immediate: true\n        });\n        var insightsClientWithLocalCredentials = insightsClient;\n        if (isModernInsightsClient(insightsClient)) {\n          insightsClientWithLocalCredentials = function insightsClientWithLocalCredentials(method, payload) {\n            var extraParams = {\n              headers: {\n                'X-Algolia-Application-Id': appId,\n                'X-Algolia-API-Key': apiKey\n              }\n            };\n\n            // @ts-ignore we are calling this only when we know that the client actually is correct\n            return insightsClient(method, payload, extraParams);\n          };\n        }\n        instantSearchInstance.sendEventToInsights = function (event) {\n          if (onEvent) {\n            onEvent(event, insightsClientWithLocalCredentials);\n          } else if (event.insightsMethod) {\n            // Source is used to differentiate events sent by instantsearch from those sent manually.\n            event.payload.algoliaSource = ['instantsearch'];\n            if ($$automatic) {\n              event.payload.algoliaSource.push('instantsearch-automatic');\n            }\n            if (event.eventModifier === 'internal') {\n              event.payload.algoliaSource.push('instantsearch-internal');\n            }\n            insightsClientWithLocalCredentials(event.insightsMethod, event.payload);\n            process.env.NODE_ENV === 'development' ? warning(Boolean(helper.state.userToken), \"\\nCannot send event to Algolia Insights because `userToken` is not set.\\n\\nSee documentation: https://www.algolia.com/doc/guides/building-search-ui/going-further/send-insights-events/js/#setting-the-usertoken\\n\") : void 0;\n          } else {\n            process.env.NODE_ENV === 'development' ? warning(false, 'Cannot send event to Algolia Insights because `insightsMethod` option is missing.') : void 0;\n          }\n        };\n      },\n      unsubscribe: function unsubscribe() {\n        insightsClient('onUserTokenChange', undefined);\n        insightsClient('onAuthenticatedUserTokenChange', undefined);\n        instantSearchInstance.sendEventToInsights = noop;\n        if (helper && initialParameters) {\n          helper.overrideStateWithoutTriggeringChangeEvent(_objectSpread(_objectSpread({}, helper.state), initialParameters));\n          instantSearchInstance.scheduleSearch();\n        }\n      }\n    };\n  };\n}\n\n/**\n * Determines if a given insights `client` supports the optional call to `init`\n * and the ability to set credentials via extra parameters when sending events.\n */\nfunction isModernInsightsClient(client) {\n  var _split$map = (client.version || '').split('.').map(Number),\n    _split$map2 = _slicedToArray(_split$map, 2),\n    major = _split$map2[0],\n    minor = _split$map2[1];\n\n  /* eslint-disable @typescript-eslint/naming-convention */\n  var v3 = major >= 3;\n  var v2_6 = major === 2 && minor >= 6;\n  var v1_10 = major === 1 && minor >= 10;\n  /* eslint-enable @typescript-eslint/naming-convention */\n\n  return v3 || v2_6 || v1_10;\n}\n\n/**\n * While `search-insights` supports both string and number user tokens,\n * the Search API only accepts strings. This function normalizes the user token.\n */\nfunction normalizeUserToken(userToken) {\n  if (!userToken) {\n    return undefined;\n  }\n  return typeof userToken === 'number' ? userToken.toString() : userToken;\n}", "import { createInitArgs, safelyRunOnBrowser } from \"../lib/utils/index.js\";\nfunction extractWidgetPayload(widgets, instantSearchInstance, payload) {\n  var initOptions = createInitArgs(instantSearchInstance, instantSearchInstance.mainIndex, instantSearchInstance._initialUiState);\n  widgets.forEach(function (widget) {\n    var widgetParams = {};\n    if (widget.getWidgetRenderState) {\n      var renderState = widget.getWidgetRenderState(initOptions);\n      if (renderState && renderState.widgetParams) {\n        // casting, as we just earlier checked widgetParams exists, and thus an object\n        widgetParams = renderState.widgetParams;\n      }\n    }\n\n    // since we destructure in all widgets, the parameters with defaults are set to \"undefined\"\n    var params = Object.keys(widgetParams).filter(function (key) {\n      return widgetParams[key] !== undefined;\n    });\n    payload.widgets.push({\n      type: widget.$$type,\n      widgetType: widget.$$widgetType,\n      params: params\n    });\n    if (widget.$$type === 'ais.index') {\n      extractWidgetPayload(widget.getWidgets(), instantSearchInstance, payload);\n    }\n  });\n}\nexport function isMetadataEnabled() {\n  return safelyRunOnBrowser(function (_ref) {\n    var _window$navigator, _window$navigator$use;\n    var window = _ref.window;\n    return ((_window$navigator = window.navigator) === null || _window$navigator === void 0 ? void 0 : (_window$navigator$use = _window$navigator.userAgent) === null || _window$navigator$use === void 0 ? void 0 : _window$navigator$use.indexOf('Algolia Crawler')) > -1;\n  }, {\n    fallback: function fallback() {\n      return false;\n    }\n  });\n}\n\n/**\n * Exposes the metadata of mounted widgets in a custom\n * `<meta name=\"instantsearch:widgets\" />` tag. The metadata per widget is:\n * - applied parameters\n * - widget name\n * - connector name\n */\nexport function createMetadataMiddleware() {\n  var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n    _ref2$$$internal = _ref2.$$internal,\n    $$internal = _ref2$$$internal === void 0 ? false : _ref2$$$internal;\n  return function (_ref3) {\n    var instantSearchInstance = _ref3.instantSearchInstance;\n    var payload = {\n      widgets: []\n    };\n    var payloadContainer = document.createElement('meta');\n    var refNode = document.querySelector('head');\n    payloadContainer.name = 'instantsearch:widgets';\n    return {\n      $$type: 'ais.metadata',\n      $$internal: $$internal,\n      onStateChange: function onStateChange() {},\n      subscribe: function subscribe() {\n        // using setTimeout here to delay extraction until widgets have been added in a tick (e.g. Vue)\n        setTimeout(function () {\n          var client = instantSearchInstance.client;\n          payload.ua = client.transporter && client.transporter.userAgent ? client.transporter.userAgent.value : client._ua;\n          extractWidgetPayload(instantSearchInstance.mainIndex.getWidgets(), instantSearchInstance, payload);\n          instantSearchInstance.middleware.forEach(function (middleware) {\n            return payload.widgets.push({\n              middleware: true,\n              type: middleware.instance.$$type,\n              internal: middleware.instance.$$internal\n            });\n          });\n          payloadContainer.content = JSON.stringify(payload);\n          refNode.appendChild(payloadContainer);\n        }, 0);\n      },\n      started: function started() {},\n      unsubscribe: function unsubscribe() {\n        payloadContainer.remove();\n      }\n    };\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport qs from 'qs';\nimport { createDocumentationLink, safelyRunOnBrowser, warning } from \"../utils/index.js\";\nvar setWindowTitle = function setWindowTitle(title) {\n  if (title) {\n    // This function is only executed on browsers so we can disable this check.\n    // eslint-disable-next-line no-restricted-globals\n    window.document.title = title;\n  }\n};\nvar BrowserHistory = /*#__PURE__*/function () {\n  /**\n   * Initializes a new storage provider that syncs the search state to the URL\n   * using web APIs (`window.location.pushState` and `onpopstate` event).\n   */\n  function BrowserHistory(_ref) {\n    var _this = this;\n    var windowTitle = _ref.windowTitle,\n      _ref$writeDelay = _ref.writeDelay,\n      writeDelay = _ref$writeDelay === void 0 ? 400 : _ref$writeDelay,\n      createURL = _ref.createURL,\n      parseURL = _ref.parseURL,\n      getLocation = _ref.getLocation,\n      start = _ref.start,\n      dispose = _ref.dispose,\n      push = _ref.push,\n      cleanUrlOnDispose = _ref.cleanUrlOnDispose;\n    _classCallCheck(this, BrowserHistory);\n    _defineProperty(this, \"$$type\", 'ais.browser');\n    /**\n     * Transforms a UI state into a title for the page.\n     */\n    _defineProperty(this, \"windowTitle\", void 0);\n    /**\n     * Time in milliseconds before performing a write in the history.\n     * It prevents from adding too many entries in the history and\n     * makes the back button more usable.\n     *\n     * @default 400\n     */\n    _defineProperty(this, \"writeDelay\", void 0);\n    /**\n     * Creates a full URL based on the route state.\n     * The storage adaptor maps all syncable keys to the query string of the URL.\n     */\n    _defineProperty(this, \"_createURL\", void 0);\n    /**\n     * Parses the URL into a route state.\n     * It should be symmetrical to `createURL`.\n     */\n    _defineProperty(this, \"parseURL\", void 0);\n    /**\n     * Returns the location to store in the history.\n     * @default () => window.location\n     */\n    _defineProperty(this, \"getLocation\", void 0);\n    _defineProperty(this, \"writeTimer\", void 0);\n    _defineProperty(this, \"_onPopState\", void 0);\n    /**\n     * Indicates if last action was back/forward in the browser.\n     */\n    _defineProperty(this, \"inPopState\", false);\n    /**\n     * Indicates whether the history router is disposed or not.\n     */\n    _defineProperty(this, \"isDisposed\", false);\n    /**\n     * Indicates the window.history.length before the last call to\n     * window.history.pushState (called in `write`).\n     * It allows to determine if a `pushState` has been triggered elsewhere,\n     * and thus to prevent the `write` method from calling `pushState`.\n     */\n    _defineProperty(this, \"latestAcknowledgedHistory\", 0);\n    _defineProperty(this, \"_start\", void 0);\n    _defineProperty(this, \"_dispose\", void 0);\n    _defineProperty(this, \"_push\", void 0);\n    _defineProperty(this, \"_cleanUrlOnDispose\", void 0);\n    this.windowTitle = windowTitle;\n    this.writeTimer = undefined;\n    this.writeDelay = writeDelay;\n    this._createURL = createURL;\n    this.parseURL = parseURL;\n    this.getLocation = getLocation;\n    this._start = start;\n    this._dispose = dispose;\n    this._push = push;\n    this._cleanUrlOnDispose = typeof cleanUrlOnDispose === 'undefined' ? true : cleanUrlOnDispose;\n    if (process.env.NODE_ENV === 'development' && typeof cleanUrlOnDispose === 'undefined') {\n      // eslint-disable-next-line no-console\n      console.info(\"Starting from the next major version, InstantSearch will not clean up the URL from active refinements when it is disposed.\\n\\nWe recommend setting `cleanUrlOnDispose` to false to adopt this change today.\\nTo stay with the current behaviour and remove this warning, set the option to true.\\n\\nSee documentation: \".concat(createDocumentationLink({\n        name: 'history-router'\n      }), \"#widget-param-cleanurlondispose\"));\n    }\n    safelyRunOnBrowser(function (_ref2) {\n      var window = _ref2.window;\n      var title = _this.windowTitle && _this.windowTitle(_this.read());\n      setWindowTitle(title);\n      _this.latestAcknowledgedHistory = window.history.length;\n    });\n  }\n\n  /**\n   * Reads the URL and returns a syncable UI search state.\n   */\n  _createClass(BrowserHistory, [{\n    key: \"read\",\n    value: function read() {\n      return this.parseURL({\n        qsModule: qs,\n        location: this.getLocation()\n      });\n    }\n\n    /**\n     * Pushes a search state into the URL.\n     */\n  }, {\n    key: \"write\",\n    value: function write(routeState) {\n      var _this2 = this;\n      safelyRunOnBrowser(function (_ref3) {\n        var window = _ref3.window;\n        var url = _this2.createURL(routeState);\n        var title = _this2.windowTitle && _this2.windowTitle(routeState);\n        if (_this2.writeTimer) {\n          clearTimeout(_this2.writeTimer);\n        }\n        _this2.writeTimer = setTimeout(function () {\n          setWindowTitle(title);\n          if (_this2.shouldWrite(url)) {\n            if (_this2._push) {\n              _this2._push(url);\n            } else {\n              window.history.pushState(routeState, title || '', url);\n            }\n            _this2.latestAcknowledgedHistory = window.history.length;\n          }\n          _this2.inPopState = false;\n          _this2.writeTimer = undefined;\n        }, _this2.writeDelay);\n      });\n    }\n\n    /**\n     * Sets a callback on the `onpopstate` event of the history API of the current page.\n     * It enables the URL sync to keep track of the changes.\n     */\n  }, {\n    key: \"onUpdate\",\n    value: function onUpdate(callback) {\n      var _this3 = this;\n      if (this._start) {\n        this._start(function () {\n          callback(_this3.read());\n        });\n      }\n      this._onPopState = function () {\n        if (_this3.writeTimer) {\n          clearTimeout(_this3.writeTimer);\n          _this3.writeTimer = undefined;\n        }\n        _this3.inPopState = true;\n\n        // We always read the state from the URL because the state of the history\n        // can be incorect in some cases (e.g. using React Router).\n        callback(_this3.read());\n      };\n      safelyRunOnBrowser(function (_ref4) {\n        var window = _ref4.window;\n        window.addEventListener('popstate', _this3._onPopState);\n      });\n    }\n\n    /**\n     * Creates a complete URL from a given syncable UI state.\n     *\n     * It always generates the full URL, not a relative one.\n     * This allows to handle cases like using a <base href>.\n     * See: https://github.com/algolia/instantsearch/issues/790\n     */\n  }, {\n    key: \"createURL\",\n    value: function createURL(routeState) {\n      var url = this._createURL({\n        qsModule: qs,\n        routeState: routeState,\n        location: this.getLocation()\n      });\n      if (process.env.NODE_ENV === 'development') {\n        try {\n          // We just want to check if the URL is valid.\n          // eslint-disable-next-line no-new\n          new URL(url);\n        } catch (e) {\n          process.env.NODE_ENV === 'development' ? warning(false, \"The URL returned by the `createURL` function is invalid.\\nPlease make sure it returns an absolute URL to avoid issues, e.g: `https://algolia.com/search?query=iphone`.\") : void 0;\n        }\n      }\n      return url;\n    }\n\n    /**\n     * Removes the event listener and cleans up the URL.\n     */\n  }, {\n    key: \"dispose\",\n    value: function dispose() {\n      var _this4 = this;\n      if (this._dispose) {\n        this._dispose();\n      }\n      this.isDisposed = true;\n      safelyRunOnBrowser(function (_ref5) {\n        var window = _ref5.window;\n        if (_this4._onPopState) {\n          window.removeEventListener('popstate', _this4._onPopState);\n        }\n      });\n      if (this.writeTimer) {\n        clearTimeout(this.writeTimer);\n      }\n      if (this._cleanUrlOnDispose) {\n        this.write({});\n      }\n    }\n  }, {\n    key: \"start\",\n    value: function start() {\n      this.isDisposed = false;\n    }\n  }, {\n    key: \"shouldWrite\",\n    value: function shouldWrite(url) {\n      var _this5 = this;\n      return safelyRunOnBrowser(function (_ref6) {\n        var window = _ref6.window;\n        // We do want to `pushState` if:\n        // - the router is not disposed, IS.js needs to update the URL\n        // OR\n        // - the last write was from InstantSearch.js\n        // (unlike a SPA, where it would have last written)\n        var lastPushWasByISAfterDispose = !(_this5.isDisposed && _this5.latestAcknowledgedHistory !== window.history.length);\n        return (\n          // When the last state change was through popstate, the IS.js state changes,\n          // but that should not write the URL.\n          !_this5.inPopState &&\n          // When the previous pushState after dispose was by IS.js, we want to write the URL.\n          lastPushWasByISAfterDispose &&\n          // When the URL is the same as the current one, we do not want to write it.\n          url !== window.location.href\n        );\n      });\n    }\n  }]);\n  return BrowserHistory;\n}();\nexport default function historyRouter() {\n  var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n    _ref7$createURL = _ref7.createURL,\n    createURL = _ref7$createURL === void 0 ? function (_ref8) {\n      var qsModule = _ref8.qsModule,\n        routeState = _ref8.routeState,\n        location = _ref8.location;\n      var protocol = location.protocol,\n        hostname = location.hostname,\n        _location$port = location.port,\n        port = _location$port === void 0 ? '' : _location$port,\n        pathname = location.pathname,\n        hash = location.hash;\n      var queryString = qsModule.stringify(routeState);\n      var portWithPrefix = port === '' ? '' : \":\".concat(port);\n\n      // IE <= 11 has no proper `location.origin` so we cannot rely on it.\n      if (!queryString) {\n        return \"\".concat(protocol, \"//\").concat(hostname).concat(portWithPrefix).concat(pathname).concat(hash);\n      }\n      return \"\".concat(protocol, \"//\").concat(hostname).concat(portWithPrefix).concat(pathname, \"?\").concat(queryString).concat(hash);\n    } : _ref7$createURL,\n    _ref7$parseURL = _ref7.parseURL,\n    parseURL = _ref7$parseURL === void 0 ? function (_ref9) {\n      var qsModule = _ref9.qsModule,\n        location = _ref9.location;\n      // `qs` by default converts arrays with more than 20 items to an object.\n      // We want to avoid this because the data structure manipulated can therefore vary.\n      // Setting the limit to `100` seems a good number because the engine's default is 100\n      // (it can go up to 1000 but it is very unlikely to select more than 100 items in the UI).\n      //\n      // Using an `arrayLimit` of `n` allows `n + 1` items.\n      //\n      // See:\n      //   - https://github.com/ljharb/qs#parsing-arrays\n      //   - https://www.algolia.com/doc/api-reference/api-parameters/maxValuesPerFacet/\n      return qsModule.parse(location.search.slice(1), {\n        arrayLimit: 99\n      });\n    } : _ref7$parseURL,\n    _ref7$writeDelay = _ref7.writeDelay,\n    writeDelay = _ref7$writeDelay === void 0 ? 400 : _ref7$writeDelay,\n    windowTitle = _ref7.windowTitle,\n    _ref7$getLocation = _ref7.getLocation,\n    getLocation = _ref7$getLocation === void 0 ? function () {\n      return safelyRunOnBrowser(function (_ref10) {\n        var window = _ref10.window;\n        return window.location;\n      }, {\n        fallback: function fallback() {\n          throw new Error('You need to provide `getLocation` to the `history` router in environments where `window` does not exist.');\n        }\n      });\n    } : _ref7$getLocation,\n    start = _ref7.start,\n    dispose = _ref7.dispose,\n    push = _ref7.push,\n    cleanUrlOnDispose = _ref7.cleanUrlOnDispose;\n  return new BrowserHistory({\n    createURL: createURL,\n    parseURL: parseURL,\n    writeDelay: writeDelay,\n    windowTitle: windowTitle,\n    getLocation: getLocation,\n    start: start,\n    dispose: dispose,\n    push: push,\n    cleanUrlOnDispose: cleanUrlOnDispose\n  });\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"configure\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction getIndexStateWithoutConfigure(uiState) {\n  var configure = uiState.configure,\n    trackedUiState = _objectWithoutProperties(uiState, _excluded);\n  return trackedUiState;\n}\n\n// technically a URL could contain any key, since users provide it,\n// which is why the input to this function is UiState, not something\n// which excludes \"configure\" as this function does.\nexport default function simpleStateMapping() {\n  return {\n    $$type: 'ais.simple',\n    stateToRoute: function stateToRoute(uiState) {\n      return Object.keys(uiState).reduce(function (state, indexId) {\n        return _objectSpread(_objectSpread({}, state), {}, _defineProperty({}, indexId, getIndexStateWithoutConfigure(uiState[indexId])));\n      }, {});\n    },\n    routeToState: function routeToState() {\n      var routeState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return Object.keys(routeState).reduce(function (state, indexId) {\n        return _objectSpread(_objectSpread({}, state), {}, _defineProperty({}, indexId, getIndexStateWithoutConfigure(routeState[indexId])));\n      }, {});\n    }\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport historyRouter from \"../lib/routers/history.js\";\nimport simpleStateMapping from \"../lib/stateMappings/simple.js\";\nimport { isEqual } from \"../lib/utils/index.js\";\nexport var createRouterMiddleware = function createRouterMiddleware() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var _props$router = props.router,\n    router = _props$router === void 0 ? historyRouter() : _props$router,\n    _props$stateMapping = props.stateMapping,\n    stateMapping = _props$stateMapping === void 0 ? simpleStateMapping() : _props$stateMapping,\n    _props$$$internal = props.$$internal,\n    $$internal = _props$$$internal === void 0 ? false : _props$$$internal;\n  return function (_ref) {\n    var instantSearchInstance = _ref.instantSearchInstance;\n    function topLevelCreateURL(nextState) {\n      var previousUiState =\n      // If only the mainIndex is initialized, we don't yet know what other\n      // index widgets are used. Therefore we fall back to the initialUiState.\n      // We can't indiscriminately use the initialUiState because then we\n      // reintroduce state that was changed by the user.\n      // When there are no widgets, we are sure the user can't yet have made\n      // any changes.\n      instantSearchInstance.mainIndex.getWidgets().length === 0 ? instantSearchInstance._initialUiState : instantSearchInstance.mainIndex.getWidgetUiState({});\n      var uiState = Object.keys(nextState).reduce(function (acc, indexId) {\n        return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, indexId, nextState[indexId]));\n      }, previousUiState);\n      var route = stateMapping.stateToRoute(uiState);\n      return router.createURL(route);\n    }\n\n    // casting to UiState here to keep createURL unaware of custom UiState\n    // (as long as it's an object, it's ok)\n    instantSearchInstance._createURL = topLevelCreateURL;\n    var lastRouteState = undefined;\n    var initialUiState = instantSearchInstance._initialUiState;\n    return {\n      $$type: \"ais.router({router:\".concat(router.$$type || '__unknown__', \", stateMapping:\").concat(stateMapping.$$type || '__unknown__', \"})\"),\n      $$internal: $$internal,\n      onStateChange: function onStateChange(_ref2) {\n        var uiState = _ref2.uiState;\n        var routeState = stateMapping.stateToRoute(uiState);\n        if (lastRouteState === undefined || !isEqual(lastRouteState, routeState)) {\n          router.write(routeState);\n          lastRouteState = routeState;\n        }\n      },\n      subscribe: function subscribe() {\n        instantSearchInstance._initialUiState = _objectSpread(_objectSpread({}, initialUiState), stateMapping.routeToState(router.read()));\n        router.onUpdate(function (route) {\n          if (instantSearchInstance.mainIndex.getWidgets().length > 0) {\n            instantSearchInstance.setUiState(stateMapping.routeToState(route));\n          }\n        });\n      },\n      started: function started() {\n        var _router$start;\n        (_router$start = router.start) === null || _router$start === void 0 ? void 0 : _router$start.call(router);\n      },\n      unsubscribe: function unsubscribe() {\n        router.dispose();\n      }\n    };\n  };\n};", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"initialSearchParameters\"],\n  _excluded2 = [\"initialRecommendParameters\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport algoliasearchHelper from 'algoliasearch-helper';\nimport { checkIndexUiState, createDocumentationMessageGenerator, resolveSearchParameters, mergeSearchParameters, warning, isIndexWidget, createInitArgs, createRenderArgs } from \"../../lib/utils/index.js\";\nimport { addWidgetId } from \"../../lib/utils/addWidgetId.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'index-widget'\n});\n/**\n * This is the same content as helper._change / setState, but allowing for extra\n * UiState to be synchronized.\n * see: https://github.com/algolia/algoliasearch-helper-js/blob/6b835ffd07742f2d6b314022cce6848f5cfecd4a/src/algoliasearch.helper.js#L1311-L1324\n */\nfunction privateHelperSetState(helper, _ref) {\n  var state = _ref.state,\n    recommendState = _ref.recommendState,\n    isPageReset = _ref.isPageReset,\n    _uiState = _ref._uiState;\n  if (state !== helper.state) {\n    helper.state = state;\n    helper.emit('change', {\n      state: helper.state,\n      results: helper.lastResults,\n      isPageReset: isPageReset,\n      _uiState: _uiState\n    });\n  }\n  if (recommendState !== helper.recommendState) {\n    helper.recommendState = recommendState;\n\n    // eslint-disable-next-line no-warning-comments\n    // TODO: emit \"change\" event when events for Recommend are implemented\n  }\n}\n\nfunction getLocalWidgetsUiState(widgets, widgetStateOptions) {\n  var initialUiState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  return widgets.reduce(function (uiState, widget) {\n    if (isIndexWidget(widget)) {\n      return uiState;\n    }\n    if (!widget.getWidgetUiState && !widget.getWidgetState) {\n      return uiState;\n    }\n    if (widget.getWidgetUiState) {\n      return widget.getWidgetUiState(uiState, widgetStateOptions);\n    }\n    return widget.getWidgetState(uiState, widgetStateOptions);\n  }, initialUiState);\n}\nfunction getLocalWidgetsSearchParameters(widgets, widgetSearchParametersOptions) {\n  var initialSearchParameters = widgetSearchParametersOptions.initialSearchParameters,\n    rest = _objectWithoutProperties(widgetSearchParametersOptions, _excluded);\n  return widgets.reduce(function (state, widget) {\n    if (!widget.getWidgetSearchParameters || isIndexWidget(widget)) {\n      return state;\n    }\n    if (widget.dependsOn === 'search' && widget.getWidgetParameters) {\n      return widget.getWidgetParameters(state, rest);\n    }\n    return widget.getWidgetSearchParameters(state, rest);\n  }, initialSearchParameters);\n}\nfunction getLocalWidgetsRecommendParameters(widgets, widgetRecommendParametersOptions) {\n  var initialRecommendParameters = widgetRecommendParametersOptions.initialRecommendParameters,\n    rest = _objectWithoutProperties(widgetRecommendParametersOptions, _excluded2);\n  return widgets.reduce(function (state, widget) {\n    if (!isIndexWidget(widget) && widget.dependsOn === 'recommend' && widget.getWidgetParameters) {\n      return widget.getWidgetParameters(state, rest);\n    }\n    return state;\n  }, initialRecommendParameters);\n}\nfunction resetPageFromWidgets(widgets) {\n  var indexWidgets = widgets.filter(isIndexWidget);\n  if (indexWidgets.length === 0) {\n    return;\n  }\n  indexWidgets.forEach(function (widget) {\n    var widgetHelper = widget.getHelper();\n    privateHelperSetState(widgetHelper, {\n      state: widgetHelper.state.resetPage(),\n      recommendState: widgetHelper.recommendState,\n      isPageReset: true\n    });\n    resetPageFromWidgets(widget.getWidgets());\n  });\n}\nfunction resolveScopedResultsFromWidgets(widgets) {\n  var indexWidgets = widgets.filter(isIndexWidget);\n  return indexWidgets.reduce(function (scopedResults, current) {\n    return scopedResults.concat.apply(scopedResults, [{\n      indexId: current.getIndexId(),\n      results: current.getResults(),\n      helper: current.getHelper()\n    }].concat(_toConsumableArray(resolveScopedResultsFromWidgets(current.getWidgets()))));\n  }, []);\n}\nvar index = function index(widgetParams) {\n  if (widgetParams === undefined || widgetParams.indexName === undefined) {\n    throw new Error(withUsage('The `indexName` option is required.'));\n  }\n  var indexName = widgetParams.indexName,\n    _widgetParams$indexId = widgetParams.indexId,\n    indexId = _widgetParams$indexId === void 0 ? indexName : _widgetParams$indexId;\n  var localWidgets = [];\n  var localUiState = {};\n  var localInstantSearchInstance = null;\n  var localParent = null;\n  var helper = null;\n  var derivedHelper = null;\n  var lastValidSearchParameters = null;\n  var hasRecommendWidget = false;\n  var hasSearchWidget = false;\n  return {\n    $$type: 'ais.index',\n    $$widgetType: 'ais.index',\n    getIndexName: function getIndexName() {\n      return indexName;\n    },\n    getIndexId: function getIndexId() {\n      return indexId;\n    },\n    getHelper: function getHelper() {\n      return helper;\n    },\n    getResults: function getResults() {\n      var _derivedHelper;\n      if (!((_derivedHelper = derivedHelper) !== null && _derivedHelper !== void 0 && _derivedHelper.lastResults)) return null;\n\n      // To make the UI optimistic, we patch the state to display to the current\n      // one instead of the one associated with the latest results.\n      // This means user-driven UI changes (e.g., checked checkbox) are reflected\n      // immediately instead of waiting for Algolia to respond, regardless of\n      // the status of the network request.\n      derivedHelper.lastResults._state = helper.state;\n      return derivedHelper.lastResults;\n    },\n    getResultsForWidget: function getResultsForWidget(widget) {\n      var _helper;\n      if (widget.dependsOn !== 'recommend' || isIndexWidget(widget) || widget.$$id === undefined) {\n        return this.getResults();\n      }\n      if (!((_helper = helper) !== null && _helper !== void 0 && _helper.lastRecommendResults)) {\n        return null;\n      }\n      return helper.lastRecommendResults[widget.$$id];\n    },\n    getPreviousState: function getPreviousState() {\n      return lastValidSearchParameters;\n    },\n    getScopedResults: function getScopedResults() {\n      var widgetParent = this.getParent();\n      var widgetSiblings;\n      if (widgetParent) {\n        widgetSiblings = widgetParent.getWidgets();\n      } else if (indexName.length === 0) {\n        // The widget is the root but has no index name:\n        // we resolve results from its children index widgets\n        widgetSiblings = this.getWidgets();\n      } else {\n        // The widget is the root and has an index name:\n        // we consider itself as the only sibling\n        widgetSiblings = [this];\n      }\n      return resolveScopedResultsFromWidgets(widgetSiblings);\n    },\n    getParent: function getParent() {\n      return localParent;\n    },\n    createURL: function createURL(nextState) {\n      if (typeof nextState === 'function') {\n        return localInstantSearchInstance._createURL(_defineProperty({}, indexId, nextState(localUiState)));\n      }\n      return localInstantSearchInstance._createURL(_defineProperty({}, indexId, getLocalWidgetsUiState(localWidgets, {\n        searchParameters: nextState,\n        helper: helper\n      })));\n    },\n    getWidgets: function getWidgets() {\n      return localWidgets;\n    },\n    addWidgets: function addWidgets(widgets) {\n      var _this = this;\n      if (!Array.isArray(widgets)) {\n        throw new Error(withUsage('The `addWidgets` method expects an array of widgets.'));\n      }\n      if (widgets.some(function (widget) {\n        return typeof widget.init !== 'function' && typeof widget.render !== 'function';\n      })) {\n        throw new Error(withUsage('The widget definition expects a `render` and/or an `init` method.'));\n      }\n      widgets.forEach(function (widget) {\n        if (isIndexWidget(widget)) {\n          return;\n        }\n        if (localInstantSearchInstance && widget.dependsOn === 'recommend') {\n          localInstantSearchInstance._hasRecommendWidget = true;\n        } else if (localInstantSearchInstance) {\n          localInstantSearchInstance._hasSearchWidget = true;\n        } else if (widget.dependsOn === 'recommend') {\n          hasRecommendWidget = true;\n        } else {\n          hasSearchWidget = true;\n        }\n        addWidgetId(widget);\n      });\n      localWidgets = localWidgets.concat(widgets);\n      if (localInstantSearchInstance && Boolean(widgets.length)) {\n        privateHelperSetState(helper, {\n          state: getLocalWidgetsSearchParameters(localWidgets, {\n            uiState: localUiState,\n            initialSearchParameters: helper.state\n          }),\n          recommendState: getLocalWidgetsRecommendParameters(localWidgets, {\n            uiState: localUiState,\n            initialRecommendParameters: helper.recommendState\n          }),\n          _uiState: localUiState\n        });\n\n        // We compute the render state before calling `init` in a separate loop\n        // to construct the whole render state object that is then passed to\n        // `init`.\n        widgets.forEach(function (widget) {\n          if (widget.getRenderState) {\n            var renderState = widget.getRenderState(localInstantSearchInstance.renderState[_this.getIndexId()] || {}, createInitArgs(localInstantSearchInstance, _this, localInstantSearchInstance._initialUiState));\n            storeRenderState({\n              renderState: renderState,\n              instantSearchInstance: localInstantSearchInstance,\n              parent: _this\n            });\n          }\n        });\n        widgets.forEach(function (widget) {\n          if (widget.init) {\n            widget.init(createInitArgs(localInstantSearchInstance, _this, localInstantSearchInstance._initialUiState));\n          }\n        });\n        localInstantSearchInstance.scheduleSearch();\n      }\n      return this;\n    },\n    removeWidgets: function removeWidgets(widgets) {\n      var _this2 = this;\n      if (!Array.isArray(widgets)) {\n        throw new Error(withUsage('The `removeWidgets` method expects an array of widgets.'));\n      }\n      if (widgets.some(function (widget) {\n        return typeof widget.dispose !== 'function';\n      })) {\n        throw new Error(withUsage('The widget definition expects a `dispose` method.'));\n      }\n      localWidgets = localWidgets.filter(function (widget) {\n        return widgets.indexOf(widget) === -1;\n      });\n      localWidgets.forEach(function (widget) {\n        if (isIndexWidget(widget)) {\n          return;\n        }\n        if (localInstantSearchInstance && widget.dependsOn === 'recommend') {\n          localInstantSearchInstance._hasRecommendWidget = true;\n        } else if (localInstantSearchInstance) {\n          localInstantSearchInstance._hasSearchWidget = true;\n        } else if (widget.dependsOn === 'recommend') {\n          hasRecommendWidget = true;\n        } else {\n          hasSearchWidget = true;\n        }\n      });\n      if (localInstantSearchInstance && Boolean(widgets.length)) {\n        var _widgets$reduce = widgets.reduce(function (states, widget) {\n            // the `dispose` method exists at this point we already assert it\n            var next = widget.dispose({\n              helper: helper,\n              state: states.cleanedSearchState,\n              recommendState: states.cleanedRecommendState,\n              parent: _this2\n            });\n            if (next instanceof algoliasearchHelper.RecommendParameters) {\n              states.cleanedRecommendState = next;\n            } else if (next) {\n              states.cleanedSearchState = next;\n            }\n            return states;\n          }, {\n            cleanedSearchState: helper.state,\n            cleanedRecommendState: helper.recommendState\n          }),\n          cleanedSearchState = _widgets$reduce.cleanedSearchState,\n          cleanedRecommendState = _widgets$reduce.cleanedRecommendState;\n        var newState = localInstantSearchInstance.future.preserveSharedStateOnUnmount ? getLocalWidgetsSearchParameters(localWidgets, {\n          uiState: localUiState,\n          initialSearchParameters: new algoliasearchHelper.SearchParameters({\n            index: this.getIndexName()\n          })\n        }) : getLocalWidgetsSearchParameters(localWidgets, {\n          uiState: getLocalWidgetsUiState(localWidgets, {\n            searchParameters: cleanedSearchState,\n            helper: helper\n          }),\n          initialSearchParameters: cleanedSearchState\n        });\n        localUiState = getLocalWidgetsUiState(localWidgets, {\n          searchParameters: newState,\n          helper: helper\n        });\n        helper.setState(newState);\n        helper.recommendState = cleanedRecommendState;\n        if (localWidgets.length) {\n          localInstantSearchInstance.scheduleSearch();\n        }\n      }\n      return this;\n    },\n    init: function init(_ref2) {\n      var _this3 = this,\n        _instantSearchInstanc;\n      var instantSearchInstance = _ref2.instantSearchInstance,\n        parent = _ref2.parent,\n        uiState = _ref2.uiState;\n      if (helper !== null) {\n        // helper is already initialized, therefore we do not need to set up\n        // any listeners\n        return;\n      }\n      localInstantSearchInstance = instantSearchInstance;\n      localParent = parent;\n      localUiState = uiState[indexId] || {};\n\n      // The `mainHelper` is already defined at this point. The instance is created\n      // inside InstantSearch at the `start` method, which occurs before the `init`\n      // step.\n      var mainHelper = instantSearchInstance.mainHelper;\n      var parameters = getLocalWidgetsSearchParameters(localWidgets, {\n        uiState: localUiState,\n        initialSearchParameters: new algoliasearchHelper.SearchParameters({\n          index: indexName\n        })\n      });\n      var recommendParameters = getLocalWidgetsRecommendParameters(localWidgets, {\n        uiState: localUiState,\n        initialRecommendParameters: new algoliasearchHelper.RecommendParameters()\n      });\n\n      // This Helper is only used for state management we do not care about the\n      // `searchClient`. Only the \"main\" Helper created at the `InstantSearch`\n      // level is aware of the client.\n      helper = algoliasearchHelper({}, parameters.index, parameters);\n      helper.recommendState = recommendParameters;\n\n      // We forward the call to `search` to the \"main\" instance of the Helper\n      // which is responsible for managing the queries (it's the only one that is\n      // aware of the `searchClient`).\n      helper.search = function () {\n        if (instantSearchInstance.onStateChange) {\n          instantSearchInstance.onStateChange({\n            uiState: instantSearchInstance.mainIndex.getWidgetUiState({}),\n            setUiState: function setUiState(nextState) {\n              return instantSearchInstance.setUiState(nextState, false);\n            }\n          });\n\n          // We don't trigger a search when controlled because it becomes the\n          // responsibility of `setUiState`.\n          return mainHelper;\n        }\n        return mainHelper.search();\n      };\n      helper.searchWithoutTriggeringOnStateChange = function () {\n        return mainHelper.search();\n      };\n\n      // We use the same pattern for the `searchForFacetValues`.\n      helper.searchForFacetValues = function (facetName, facetValue, maxFacetHits, userState) {\n        var state = helper.state.setQueryParameters(userState);\n        return mainHelper.searchForFacetValues(facetName, facetValue, maxFacetHits, state);\n      };\n      derivedHelper = mainHelper.derive(function () {\n        return mergeSearchParameters.apply(void 0, [mainHelper.state].concat(_toConsumableArray(resolveSearchParameters(_this3))));\n      }, function () {\n        return _this3.getHelper().recommendState;\n      });\n      var indexInitialResults = (_instantSearchInstanc = instantSearchInstance._initialResults) === null || _instantSearchInstanc === void 0 ? void 0 : _instantSearchInstanc[this.getIndexId()];\n      if (indexInitialResults) {\n        // We restore the shape of the results provided to the instance to respect\n        // the helper's structure.\n        var results = new algoliasearchHelper.SearchResults(new algoliasearchHelper.SearchParameters(indexInitialResults.state), indexInitialResults.results);\n        derivedHelper.lastResults = results;\n        helper.lastResults = results;\n      }\n\n      // Subscribe to the Helper state changes for the page before widgets\n      // are initialized. This behavior mimics the original one of the Helper.\n      // It makes sense to replicate it at the `init` step. We have another\n      // listener on `change` below, once `init` is done.\n      helper.on('change', function (_ref3) {\n        var isPageReset = _ref3.isPageReset;\n        if (isPageReset) {\n          resetPageFromWidgets(localWidgets);\n        }\n      });\n      derivedHelper.on('search', function () {\n        // The index does not manage the \"staleness\" of the search. This is the\n        // responsibility of the main instance. It does not make sense to manage\n        // it at the index level because it's either: all of them or none of them\n        // that are stalled. The queries are performed into a single network request.\n        instantSearchInstance.scheduleStalledRender();\n        if (process.env.NODE_ENV === 'development') {\n          checkIndexUiState({\n            index: _this3,\n            indexUiState: localUiState\n          });\n        }\n      });\n      derivedHelper.on('result', function (_ref4) {\n        var results = _ref4.results;\n        // The index does not render the results it schedules a new render\n        // to let all the other indices emit their own results. It allows us to\n        // run the render process in one pass.\n        instantSearchInstance.scheduleRender();\n\n        // the derived helper is the one which actually searches, but the helper\n        // which is exposed e.g. via instance.helper, doesn't search, and thus\n        // does not have access to lastResults, which it used to in pre-federated\n        // search behavior.\n        helper.lastResults = results;\n        lastValidSearchParameters = results === null || results === void 0 ? void 0 : results._state;\n      });\n\n      // eslint-disable-next-line no-warning-comments\n      // TODO: listen to \"result\" event when events for Recommend are implemented\n      derivedHelper.on('recommend:result', function (_ref5) {\n        var recommend = _ref5.recommend;\n        // The index does not render the results it schedules a new render\n        // to let all the other indices emit their own results. It allows us to\n        // run the render process in one pass.\n        instantSearchInstance.scheduleRender();\n\n        // the derived helper is the one which actually searches, but the helper\n        // which is exposed e.g. via instance.helper, doesn't search, and thus\n        // does not have access to lastRecommendResults.\n        helper.lastRecommendResults = recommend.results;\n      });\n\n      // We compute the render state before calling `init` in a separate loop\n      // to construct the whole render state object that is then passed to\n      // `init`.\n      localWidgets.forEach(function (widget) {\n        if (widget.getRenderState) {\n          var renderState = widget.getRenderState(instantSearchInstance.renderState[_this3.getIndexId()] || {}, createInitArgs(instantSearchInstance, _this3, uiState));\n          storeRenderState({\n            renderState: renderState,\n            instantSearchInstance: instantSearchInstance,\n            parent: _this3\n          });\n        }\n      });\n      localWidgets.forEach(function (widget) {\n        process.env.NODE_ENV === 'development' ? warning(\n        // if it has NO getWidgetState or if it has getWidgetUiState, we don't warn\n        // aka we warn if there's _only_ getWidgetState\n        !widget.getWidgetState || Boolean(widget.getWidgetUiState), 'The `getWidgetState` method is renamed `getWidgetUiState` and will no longer exist under that name in InstantSearch.js 5.x. Please use `getWidgetUiState` instead.') : void 0;\n        if (widget.init) {\n          widget.init(createInitArgs(instantSearchInstance, _this3, uiState));\n        }\n      });\n\n      // Subscribe to the Helper state changes for the `uiState` once widgets\n      // are initialized. Until the first render, state changes are part of the\n      // configuration step. This is mainly for backward compatibility with custom\n      // widgets. When the subscription happens before the `init` step, the (static)\n      // configuration of the widget is pushed in the URL. That's what we want to avoid.\n      // https://github.com/algolia/instantsearch/pull/994/commits/4a672ae3fd78809e213de0368549ef12e9dc9454\n      helper.on('change', function (event) {\n        var state = event.state;\n        var _uiState = event._uiState;\n        localUiState = getLocalWidgetsUiState(localWidgets, {\n          searchParameters: state,\n          helper: helper\n        }, _uiState || {});\n\n        // We don't trigger an internal change when controlled because it\n        // becomes the responsibility of `setUiState`.\n        if (!instantSearchInstance.onStateChange) {\n          instantSearchInstance.onInternalStateChange();\n        }\n      });\n      if (indexInitialResults) {\n        // If there are initial results, we're not notified of the next results\n        // because we don't trigger an initial search. We therefore need to directly\n        // schedule a render that will render the results injected on the helper.\n        instantSearchInstance.scheduleRender();\n      }\n      if (hasRecommendWidget) {\n        instantSearchInstance._hasRecommendWidget = true;\n      }\n      if (hasSearchWidget) {\n        instantSearchInstance._hasSearchWidget = true;\n      }\n    },\n    render: function render(_ref6) {\n      var _derivedHelper2,\n        _this4 = this;\n      var instantSearchInstance = _ref6.instantSearchInstance;\n      // we can't attach a listener to the error event of search, as the error\n      // then would no longer be thrown for global handlers.\n      if (instantSearchInstance.status === 'error' && !instantSearchInstance.mainHelper.hasPendingRequests() && lastValidSearchParameters) {\n        helper.setState(lastValidSearchParameters);\n      }\n\n      // We only render index widgets if there are no results.\n      // This makes sure `render` is never called with `results` being `null`.\n      var widgetsToRender = this.getResults() || (_derivedHelper2 = derivedHelper) !== null && _derivedHelper2 !== void 0 && _derivedHelper2.lastRecommendResults ? localWidgets : localWidgets.filter(isIndexWidget);\n      widgetsToRender = widgetsToRender.filter(function (widget) {\n        if (!widget.shouldRender) {\n          return true;\n        }\n        return widget.shouldRender({\n          instantSearchInstance: instantSearchInstance\n        });\n      });\n      widgetsToRender.forEach(function (widget) {\n        if (widget.getRenderState) {\n          var renderState = widget.getRenderState(instantSearchInstance.renderState[_this4.getIndexId()] || {}, createRenderArgs(instantSearchInstance, _this4, widget));\n          storeRenderState({\n            renderState: renderState,\n            instantSearchInstance: instantSearchInstance,\n            parent: _this4\n          });\n        }\n      });\n      widgetsToRender.forEach(function (widget) {\n        // At this point, all the variables used below are set. Both `helper`\n        // and `derivedHelper` have been created at the `init` step. The attribute\n        // `lastResults` might be `null` though. It's possible that a stalled render\n        // happens before the result e.g with a dynamically added index the request might\n        // be delayed. The render is triggered for the complete tree but some parts do\n        // not have results yet.\n\n        if (widget.render) {\n          widget.render(createRenderArgs(instantSearchInstance, _this4, widget));\n        }\n      });\n    },\n    dispose: function dispose() {\n      var _this5 = this,\n        _helper2,\n        _derivedHelper3;\n      localWidgets.forEach(function (widget) {\n        if (widget.dispose && helper) {\n          // The dispose function is always called once the instance is started\n          // (it's an effect of `removeWidgets`). The index is initialized and\n          // the Helper is available. We don't care about the return value of\n          // `dispose` because the index is removed. We can't call `removeWidgets`\n          // because we want to keep the widgets on the instance, to allow idempotent\n          // operations on `add` & `remove`.\n          widget.dispose({\n            helper: helper,\n            state: helper.state,\n            recommendState: helper.recommendState,\n            parent: _this5\n          });\n        }\n      });\n      localInstantSearchInstance = null;\n      localParent = null;\n      (_helper2 = helper) === null || _helper2 === void 0 ? void 0 : _helper2.removeAllListeners();\n      helper = null;\n      (_derivedHelper3 = derivedHelper) === null || _derivedHelper3 === void 0 ? void 0 : _derivedHelper3.detach();\n      derivedHelper = null;\n    },\n    getWidgetUiState: function getWidgetUiState(uiState) {\n      return localWidgets.filter(isIndexWidget).reduce(function (previousUiState, innerIndex) {\n        return innerIndex.getWidgetUiState(previousUiState);\n      }, _objectSpread(_objectSpread({}, uiState), {}, _defineProperty({}, indexId, _objectSpread(_objectSpread({}, uiState[indexId]), localUiState))));\n    },\n    getWidgetState: function getWidgetState(uiState) {\n      process.env.NODE_ENV === 'development' ? warning(false, 'The `getWidgetState` method is renamed `getWidgetUiState` and will no longer exist under that name in InstantSearch.js 5.x. Please use `getWidgetUiState` instead.') : void 0;\n      return this.getWidgetUiState(uiState);\n    },\n    getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref7) {\n      var uiState = _ref7.uiState;\n      return getLocalWidgetsSearchParameters(localWidgets, {\n        uiState: uiState,\n        initialSearchParameters: searchParameters\n      });\n    },\n    refreshUiState: function refreshUiState() {\n      localUiState = getLocalWidgetsUiState(localWidgets, {\n        searchParameters: this.getHelper().state,\n        helper: this.getHelper()\n      }, localUiState);\n    },\n    setIndexUiState: function setIndexUiState(indexUiState) {\n      var nextIndexUiState = typeof indexUiState === 'function' ? indexUiState(localUiState) : indexUiState;\n      localInstantSearchInstance.setUiState(function (state) {\n        return _objectSpread(_objectSpread({}, state), {}, _defineProperty({}, indexId, nextIndexUiState));\n      });\n    }\n  };\n};\nexport default index;\nfunction storeRenderState(_ref8) {\n  var renderState = _ref8.renderState,\n    instantSearchInstance = _ref8.instantSearchInstance,\n    parent = _ref8.parent;\n  var parentIndexName = parent ? parent.getIndexId() : instantSearchInstance.mainIndex.getIndexId();\n  instantSearchInstance.renderState = _objectSpread(_objectSpread({}, instantSearchInstance.renderState), {}, _defineProperty({}, parentIndexName, _objectSpread(_objectSpread({}, instantSearchInstance.renderState[parentIndexName]), renderState)));\n}", "var id = 0;\nexport function addWidgetId(widget) {\n  if (widget.dependsOn !== 'recommend') {\n    return;\n  }\n  widget.$$id = id++;\n}", "export function formatNumber(value, numberLocale) {\n  return value.toLocaleString(numberLocale);\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { highlight as _highlight, reverseHighlight as _reverseHighlight, snippet as _snippet, reverseSnippet as _reverseSnippet, insights as _insights } from \"../helpers/index.js\";\nimport { formatNumber as _formatNumber } from \"./formatNumber.js\";\nexport default function hoganHelpers(_ref) {\n  var numberLocale = _ref.numberLocale;\n  return {\n    formatNumber: function formatNumber(value, render) {\n      return _formatNumber(Number(render(value)), numberLocale);\n    },\n    highlight: function highlight(options, render) {\n      try {\n        var highlightOptions = JSON.parse(options);\n        return render(_highlight(_objectSpread(_objectSpread({}, highlightOptions), {}, {\n          hit: this\n        })));\n      } catch (error) {\n        throw new Error(\"\\nThe highlight helper expects a JSON object of the format:\\n{ \\\"attribute\\\": \\\"name\\\", \\\"highlightedTagName\\\": \\\"mark\\\" }\");\n      }\n    },\n    reverseHighlight: function reverseHighlight(options, render) {\n      try {\n        var reverseHighlightOptions = JSON.parse(options);\n        return render(_reverseHighlight(_objectSpread(_objectSpread({}, reverseHighlightOptions), {}, {\n          hit: this\n        })));\n      } catch (error) {\n        throw new Error(\"\\n  The reverseHighlight helper expects a JSON object of the format:\\n  { \\\"attribute\\\": \\\"name\\\", \\\"highlightedTagName\\\": \\\"mark\\\" }\");\n      }\n    },\n    snippet: function snippet(options, render) {\n      try {\n        var snippetOptions = JSON.parse(options);\n        return render(_snippet(_objectSpread(_objectSpread({}, snippetOptions), {}, {\n          hit: this\n        })));\n      } catch (error) {\n        throw new Error(\"\\nThe snippet helper expects a JSON object of the format:\\n{ \\\"attribute\\\": \\\"name\\\", \\\"highlightedTagName\\\": \\\"mark\\\" }\");\n      }\n    },\n    reverseSnippet: function reverseSnippet(options, render) {\n      try {\n        var reverseSnippetOptions = JSON.parse(options);\n        return render(_reverseSnippet(_objectSpread(_objectSpread({}, reverseSnippetOptions), {}, {\n          hit: this\n        })));\n      } catch (error) {\n        throw new Error(\"\\n  The reverseSnippet helper expects a JSON object of the format:\\n  { \\\"attribute\\\": \\\"name\\\", \\\"highlightedTagName\\\": \\\"mark\\\" }\");\n      }\n    },\n    insights: function insights(options, render) {\n      try {\n        var _JSON$parse = JSON.parse(options),\n          method = _JSON$parse.method,\n          payload = _JSON$parse.payload;\n        return render(_insights(method, _objectSpread({\n          objectIDs: [this.objectID]\n        }, payload)));\n      } catch (error) {\n        throw new Error(\"\\nThe insights helper expects a JSON object of the format:\\n{ \\\"method\\\": \\\"method-name\\\", \\\"payload\\\": { \\\"eventName\\\": \\\"name of the event\\\" } }\");\n      }\n    }\n  };\n}", "export default '4.69.0';", "import { snippet, reverseSnippet, highlight, reverseHighlight, insights, getInsightsAnonymousUserToken } from \"./helpers/index.js\";\nimport { createInfiniteHitsSessionStorageCache } from \"./lib/infiniteHitsCache/index.js\";\nimport InstantSearch from \"./lib/InstantSearch.js\";\nimport { deprecate } from \"./lib/utils/index.js\";\nimport version from \"./lib/version.js\";\n/**\n * InstantSearch is the main component of InstantSearch.js. This object\n * manages the widget and lets you add new ones.\n *\n * Two parameters are required to get you started with InstantSearch.js:\n *  - `indexName`: the main index that you will use for your new search UI\n *  - `searchClient`: the search client to plug to InstantSearch.js\n *\n * The [search client provided by Algolia](algolia.com/doc/api-client/getting-started/what-is-the-api-client/javascript/)\n * needs an `appId` and an `apiKey`. Those parameters can be found in your\n * [Algolia dashboard](https://www.algolia.com/api-keys).\n *\n * If you want to get up and running quickly with InstantSearch.js, have a\n * look at the [getting started](https://www.algolia.com/doc/guides/building-search-ui/getting-started/js/).\n */\nvar instantsearch = function instantsearch(options) {\n  return new InstantSearch(options);\n};\ninstantsearch.version = version;\ninstantsearch.createInfiniteHitsSessionStorageCache = deprecate(createInfiniteHitsSessionStorageCache, \"import { createInfiniteHitsSessionStorageCache } from 'instantsearch.js/es/lib/infiniteHitsCache'\");\ninstantsearch.highlight = deprecate(highlight, \"import { highlight } from 'instantsearch.js/es/helpers'\");\ninstantsearch.reverseHighlight = deprecate(reverseHighlight, \"import { reverseHighlight } from 'instantsearch.js/es/helpers'\");\ninstantsearch.snippet = deprecate(snippet, \"import { snippet } from 'instantsearch.js/es/helpers'\");\ninstantsearch.reverseSnippet = deprecate(reverseSnippet, \"import { reverseSnippet } from 'instantsearch.js/es/helpers'\");\ninstantsearch.insights = insights;\ninstantsearch.getInsightsAnonymousUserToken = getInsightsAnonymousUserToken;\nObject.defineProperty(instantsearch, 'widgets', {\n  get: function get() {\n    throw new ReferenceError(\"\\\"instantsearch.widgets\\\" are not available from the ES build.\\n\\nTo import the widgets:\\n\\nimport { searchBox } from 'instantsearch.js/es/widgets'\");\n  }\n});\nObject.defineProperty(instantsearch, 'connectors', {\n  get: function get() {\n    throw new ReferenceError(\"\\\"instantsearch.connectors\\\" are not available from the ES build.\\n\\nTo import the connectors:\\n\\nimport { connectSearchBox } from 'instantsearch.js/es/connectors'\");\n  }\n});\nexport default instantsearch;\nexport * from \"./types/index.js\";\n", "function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };", "function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (e.indexOf(n) >= 0) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };", "import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], t.indexOf(o) >= 0 || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nexport { _objectWithoutProperties as default };", "export function cx() {\n  for (var _len = arguments.length, classNames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classNames[_key] = arguments[_key];\n  }\n  return classNames.reduce(function (acc, className) {\n    if (Array.isArray(className)) {\n      return acc.concat(className);\n    }\n    return acc.concat([className]);\n  }, []).filter(Boolean).join(' ');\n}", "import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nvar _excluded = [\"parts\", \"highlightedTagName\", \"nonHighlightedTagName\", \"separator\", \"className\", \"classNames\"];\nimport { cx } from \"../lib/index.js\";\nfunction createHighlightPartComponent(_ref) {\n  var createElement = _ref.createElement;\n  return function HighlightPart(_ref2) {\n    var classNames = _ref2.classNames,\n      children = _ref2.children,\n      highlightedTagName = _ref2.highlightedTagName,\n      isHighlighted = _ref2.isHighlighted,\n      nonHighlightedTagName = _ref2.nonHighlightedTagName;\n    var TagName = isHighlighted ? highlightedTagName : nonHighlightedTagName;\n    return createElement(TagName, {\n      className: isHighlighted ? classNames.highlighted : classNames.nonHighlighted\n    }, children);\n  };\n}\nexport function createHighlightComponent(_ref3) {\n  var createElement = _ref3.createElement,\n    Fragment = _ref3.Fragment;\n  var HighlightPart = createHighlightPartComponent({\n    createElement: createElement,\n    Fragment: Fragment\n  });\n  return function Highlight(userProps) {\n    var parts = userProps.parts,\n      _userProps$highlighte = userProps.highlightedTagName,\n      highlightedTagName = _userProps$highlighte === void 0 ? 'mark' : _userProps$highlighte,\n      _userProps$nonHighlig = userProps.nonHighlightedTagName,\n      nonHighlightedTagName = _userProps$nonHighlig === void 0 ? 'span' : _userProps$nonHighlig,\n      _userProps$separator = userProps.separator,\n      separator = _userProps$separator === void 0 ? ', ' : _userProps$separator,\n      className = userProps.className,\n      _userProps$classNames = userProps.classNames,\n      classNames = _userProps$classNames === void 0 ? {} : _userProps$classNames,\n      props = _objectWithoutProperties(userProps, _excluded);\n    return createElement(\"span\", _extends({}, props, {\n      className: cx(classNames.root, className)\n    }), parts.map(function (part, partIndex) {\n      var isLastPart = partIndex === parts.length - 1;\n      return createElement(Fragment, {\n        key: partIndex\n      }, part.map(function (subPart, subPartIndex) {\n        return createElement(HighlightPart, {\n          key: subPartIndex,\n          classNames: classNames,\n          highlightedTagName: highlightedTagName,\n          nonHighlightedTagName: nonHighlightedTagName,\n          isHighlighted: subPart.isHighlighted\n        }, subPart.value);\n      }), !isLastPart && createElement(\"span\", {\n        className: classNames.separator\n      }, separator));\n    }));\n  };\n}", "/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 16;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 17;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n", "import { EMPTY_ARR } from './constants';\n\nexport const isArray = Array.isArray;\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-expect-error We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {preact.ContainerNode} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n", "import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n", "import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {VNode[\"type\"]} type The node name or Component constructor for this\n * virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the\n * virtual node\n * @returns {VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\t/** @type {VNode} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original,\n\t\t_index: -1,\n\t\t_flags: 0\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == null && options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor == undefined;\n", "import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { MODE_HYDRATE } from './constants';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function BaseComponent(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nBaseComponent.prototype.setState = function (update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nBaseComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {ComponentChildren | void}\n */\nBaseComponent.prototype.render = Fragment;\n\n/**\n * @param {VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._index + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet oldVNode = component._vnode,\n\t\toldDom = oldVNode._dom,\n\t\tcommitQueue = [],\n\t\trefQueue = [];\n\n\tif (component._parentDom) {\n\t\tconst newVNode = assign({}, oldVNode);\n\t\tnewVNode._original = oldVNode._original + 1;\n\t\tif (options.vnode) options.vnode(newVNode);\n\n\t\tdiff(\n\t\t\tcomponent._parentDom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tcomponent._parentDom.namespaceURI,\n\t\t\toldVNode._flags & MODE_HYDRATE ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(oldVNode) : oldDom,\n\t\t\t!!(oldVNode._flags & MODE_HYDRATE),\n\t\t\trefQueue\n\t\t);\n\n\t\tnewVNode._original = oldVNode._original;\n\t\tnewVNode._parent._children[newVNode._index] = newVNode;\n\t\tcommitRoot(commitQueue, newVNode, refQueue);\n\n\t\tif (newVNode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(newVNode);\n\t\t}\n\t}\n}\n\n/**\n * @param {VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/**\n * Enqueue a rerender of a component\n * @param {Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/**\n * @param {Component} a\n * @param {Component} b\n */\nconst depthSort = (a, b) => a._vnode._depth - b._vnode._depth;\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet c;\n\trerenderQueue.sort(depthSort);\n\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t// process() calls from getting scheduled while `queue` is still being consumed.\n\twhile ((c = rerenderQueue.shift())) {\n\t\tif (c._dirty) {\n\t\t\tlet renderQueueLength = rerenderQueue.length;\n\t\t\trenderComponent(c);\n\t\t\tif (rerenderQueue.length > renderQueueLength) {\n\t\t\t\t// When i.e. rerendering a provider additional new items can be injected, we want to\n\t\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t\t// single pass\n\t\t\t\trerenderQueue.sort(depthSort);\n\t\t\t}\n\t\t}\n\t}\n\tprocess._rerenderCount = 0;\n}\n\nprocess._rerenderCount = 0;\n", "import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value == null ? '' : value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n// A logical clock to solve issues like https://github.com/preactjs/preact/issues/3927.\n// When the DOM performs an event it leaves micro-ticks in between bubbling up which means that\n// an event can trigger on a newly reated DOM-node while the event bubbles up.\n//\n// Originally inspired by Vue\n// (https://github.com/vuejs/core/blob/caeb8a68811a1b0f79/packages/runtime-dom/src/modules/events.ts#L90-L101),\n// but modified to use a logical clock instead of Date.now() in case event handlers get attached\n// and events get dispatched during the same millisecond.\n//\n// The clock is incremented after each new event dispatch. This allows 1 000 000 new events\n// per second for over 280 years before the value reaches Number.MAX_SAFE_INTEGER (2**53 - 1).\nlet eventClock = 0;\n\n/**\n * Set a property value on a DOM node\n * @param {PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {string} namespace Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, namespace) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture =\n\t\t\tname !== (name = name.replace(/(PointerCapture)$|Capture$/i, '$1'));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (\n\t\t\tname.toLowerCase() in dom ||\n\t\t\tname === 'onFocusOut' ||\n\t\t\tname === 'onFocusIn'\n\t\t)\n\t\t\tname = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tvalue._attached = eventClock;\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\tname,\n\t\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\t\tuseCapture\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tvalue._attached = oldValue._attached;\n\t\t\t}\n\t\t} else {\n\t\t\tdom.removeEventListener(\n\t\t\t\tname,\n\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\tuseCapture\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (namespace == 'http://www.w3.org/2000/svg') {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname != 'width' &&\n\t\t\tname != 'height' &&\n\t\t\tname != 'href' &&\n\t\t\tname != 'list' &&\n\t\t\tname != 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname != 'tabIndex' &&\n\t\t\tname != 'download' &&\n\t\t\tname != 'rowSpan' &&\n\t\t\tname != 'colSpan' &&\n\t\t\tname != 'role' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// aria- and data- attributes have no boolean representation.\n\t\t// A `false` value is different from the attribute not being\n\t\t// present, so we can't remove it. For non-boolean aria\n\t\t// attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost too many bytes. On top of\n\t\t// that other frameworks generally stringify `false`.\n\n\t\tif (typeof value == 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != null && (value !== false || name[4] === '-')) {\n\t\t\tdom.setAttribute(name, value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Create an event proxy function.\n * @param {boolean} useCapture Is the event handler for the capture phase.\n * @private\n */\nfunction createEventProxy(useCapture) {\n\t/**\n\t * Proxy an event to hooked event handlers\n\t * @param {PreactEvent} e The event object from the browser\n\t * @private\n\t */\n\treturn function (e) {\n\t\tif (this._listeners) {\n\t\t\tconst eventHandler = this._listeners[e.type + useCapture];\n\t\t\tif (e._dispatched == null) {\n\t\t\t\te._dispatched = eventClock++;\n\n\t\t\t\t// When `e._dispatched` is smaller than the time when the targeted event\n\t\t\t\t// handler was attached we know we have bubbled up to an element that was added\n\t\t\t\t// during patching the DOM.\n\t\t\t} else if (e._dispatched < eventHandler._attached) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn eventHandler(options.event ? options.event(e) : e);\n\t\t}\n\t};\n}\n\nconst eventProxy = createEventProxy(false);\nconst eventProxyCapture = createEventProxy(true);\n", "import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\t/** @type {Component[]} */\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.shouldComponentUpdate = function (_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tsubs.some(c => {\n\t\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType =\n\t\tcontext);\n}\n", "import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR, INSERT_VNODE, MATCHED } from '../constants';\nimport { isArray } from '../util';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {PreactElement} parentDom The DOM element whose children are being\n * diffed\n * @param {ComponentChildren[]} renderResult\n * @param {VNode} newParentVNode The new virtual node whose children should be\n * diff'ed against oldParentVNode\n * @param {VNode} oldParentVNode The old virtual node whose children should be\n * diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\tlet i,\n\t\t/** @type {VNode} */\n\t\toldVNode,\n\t\t/** @type {VNode} */\n\t\tchildVNode,\n\t\t/** @type {PreactElement} */\n\t\tnewDom,\n\t\t/** @type {PreactElement} */\n\t\tfirstChildDom;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\t/** @type {VNode[]} */\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet newChildrenLength = renderResult.length;\n\n\tnewParentVNode._nextDom = oldDom;\n\tconstructNewChildrenArray(newParentVNode, renderResult, oldChildren);\n\toldDom = newParentVNode._nextDom;\n\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\tchildVNode = newParentVNode._children[i];\n\t\tif (\n\t\t\tchildVNode == null ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// At this point, constructNewChildrenArray has assigned _index to be the\n\t\t// matchingIndex for this VNode's oldVNode (or -1 if there is no oldVNode).\n\t\tif (childVNode._index === -1) {\n\t\t\toldVNode = EMPTY_OBJ;\n\t\t} else {\n\t\t\toldVNode = oldChildren[childVNode._index] || EMPTY_OBJ;\n\t\t}\n\n\t\t// Update childVNode._index to its final index\n\t\tchildVNode._index = i;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\n\t\t// Adjust DOM nodes\n\t\tnewDom = childVNode._dom;\n\t\tif (childVNode.ref && oldVNode.ref != childVNode.ref) {\n\t\t\tif (oldVNode.ref) {\n\t\t\t\tapplyRef(oldVNode.ref, null, childVNode);\n\t\t\t}\n\t\t\trefQueue.push(\n\t\t\t\tchildVNode.ref,\n\t\t\t\tchildVNode._component || newDom,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t}\n\n\t\tif (firstChildDom == null && newDom != null) {\n\t\t\tfirstChildDom = newDom;\n\t\t}\n\n\t\tif (\n\t\t\tchildVNode._flags & INSERT_VNODE ||\n\t\t\toldVNode._children === childVNode._children\n\t\t) {\n\t\t\t// @ts-expect-error olDom should be present on a DOM node\n\t\t\tif (oldDom && !oldDom.isConnected) {\n\t\t\t\toldDom = getDomSibling(oldVNode);\n\t\t\t}\n\t\t\toldDom = insert(childVNode, oldDom, parentDom);\n\t\t} else if (\n\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\tchildVNode._nextDom !== undefined\n\t\t) {\n\t\t\t// Since Fragments or components that return Fragment like VNodes can\n\t\t\t// contain multiple DOM nodes as the same level, continue the diff from\n\t\t\t// the sibling of last DOM child of this child VNode\n\t\t\toldDom = childVNode._nextDom;\n\t\t} else if (newDom) {\n\t\t\toldDom = newDom.nextSibling;\n\t\t}\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because it\n\t\t// is only used by `diffChildren` to determine where to resume the diff\n\t\t// after diffing Components and Fragments. Once we store it the nextDOM\n\t\t// local var, we can clean up the property. Also prevents us hanging on to\n\t\t// DOM nodes that may have been unmounted.\n\t\tchildVNode._nextDom = undefined;\n\n\t\t// Unset diffing flags\n\t\tchildVNode._flags &= ~(INSERT_VNODE | MATCHED);\n\t}\n\n\t// TODO: With new child diffing algo, consider alt ways to diff Fragments.\n\t// Such as dropping oldDom and moving fragments in place\n\t//\n\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t// _nextDom property to the nextSibling of its last child DOM node.\n\t//\n\t// `oldDom` contains the correct value here because if the last child\n\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t// node's nextSibling.\n\tnewParentVNode._nextDom = oldDom;\n\tnewParentVNode._dom = firstChildDom;\n}\n\n/**\n * @param {VNode} newParentVNode\n * @param {ComponentChildren[]} renderResult\n * @param {VNode[]} oldChildren\n */\nfunction constructNewChildrenArray(newParentVNode, renderResult, oldChildren) {\n\t/** @type {number} */\n\tlet i;\n\t/** @type {VNode} */\n\tlet childVNode;\n\t/** @type {VNode} */\n\tlet oldVNode;\n\n\tconst newChildrenLength = renderResult.length;\n\tlet oldChildrenLength = oldChildren.length,\n\t\tremainingOldChildren = oldChildrenLength;\n\n\tlet skew = 0;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\t// @ts-expect-error We are reusing the childVNode variable to hold both the\n\t\t// pre and post normalized childVNode\n\t\tchildVNode = renderResult[i];\n\n\t\tif (\n\t\t\tchildVNode == null ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint' ||\n\t\t\tchildVNode.constructor == String\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode.constructor === undefined && childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t//   const reuse = <div />\n\t\t\t//   <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : null,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\tconst skewedIndex = i + skew;\n\n\t\t// Handle unmounting null placeholders, i.e. VNode => null in unkeyed children\n\t\tif (childVNode == null) {\n\t\t\toldVNode = oldChildren[skewedIndex];\n\t\t\tif (\n\t\t\t\toldVNode &&\n\t\t\t\toldVNode.key == null &&\n\t\t\t\toldVNode._dom &&\n\t\t\t\t(oldVNode._flags & MATCHED) === 0\n\t\t\t) {\n\t\t\t\tif (oldVNode._dom == newParentVNode._nextDom) {\n\t\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode, false);\n\n\t\t\t\t// Explicitly nullify this position in oldChildren instead of just\n\t\t\t\t// setting `_match=true` to prevent other routines (e.g.\n\t\t\t\t// `findMatchingIndex` or `getDomSibling`) from thinking VNodes or DOM\n\t\t\t\t// nodes in this position are still available to be used in diffing when\n\t\t\t\t// they have actually already been unmounted. For example, by only\n\t\t\t\t// setting `_match=true` here, the unmounting loop later would attempt\n\t\t\t\t// to unmount this VNode again seeing `_match==true`.  Further,\n\t\t\t\t// getDomSibling doesn't know about _match and so would incorrectly\n\t\t\t\t// assume DOM nodes in this subtree are mounted and usable.\n\t\t\t\toldChildren[skewedIndex] = null;\n\t\t\t\tremainingOldChildren--;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\tconst matchingIndex = findMatchingIndex(\n\t\t\tchildVNode,\n\t\t\toldChildren,\n\t\t\tskewedIndex,\n\t\t\tremainingOldChildren\n\t\t);\n\n\t\t// Temporarily store the matchingIndex on the _index property so we can pull\n\t\t// out the oldVNode in diffChildren. We'll override this to the VNode's\n\t\t// final index after using this property to get the oldVNode\n\t\tchildVNode._index = matchingIndex;\n\n\t\toldVNode = null;\n\t\tif (matchingIndex !== -1) {\n\t\t\toldVNode = oldChildren[matchingIndex];\n\t\t\tremainingOldChildren--;\n\t\t\tif (oldVNode) {\n\t\t\t\toldVNode._flags |= MATCHED;\n\t\t\t}\n\t\t}\n\n\t\t// Here, we define isMounting for the purposes of the skew diffing\n\t\t// algorithm. Nodes that are unsuspending are considered mounting and we detect\n\t\t// this by checking if oldVNode._original === null\n\t\tconst isMounting = oldVNode == null || oldVNode._original === null;\n\n\t\tif (isMounting) {\n\t\t\tif (matchingIndex == -1) {\n\t\t\t\tskew--;\n\t\t\t}\n\n\t\t\t// If we are mounting a DOM VNode, mark it for insertion\n\t\t\tif (typeof childVNode.type != 'function') {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t} else if (matchingIndex !== skewedIndex) {\n\t\t\tif (matchingIndex === skewedIndex + 1) {\n\t\t\t\tskew++;\n\t\t\t} else if (matchingIndex > skewedIndex) {\n\t\t\t\tif (remainingOldChildren > newChildrenLength - skewedIndex) {\n\t\t\t\t\tskew += matchingIndex - skewedIndex;\n\t\t\t\t} else {\n\t\t\t\t\tskew--;\n\t\t\t\t}\n\t\t\t} else if (matchingIndex < skewedIndex) {\n\t\t\t\tif (matchingIndex == skewedIndex - 1) {\n\t\t\t\t\tskew = matchingIndex - skewedIndex;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tskew = 0;\n\t\t\t}\n\n\t\t\t// Move this VNode's DOM if the original index (matchingIndex) doesn't\n\t\t\t// match the new skew index (i + new skew)\n\t\t\tif (matchingIndex !== i + skew) {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove remaining oldChildren if there are any. Loop forwards so that as we\n\t// unmount DOM from the beginning of the oldChildren, we can adjust oldDom to\n\t// point to the next child, which needs to be the first DOM node that won't be\n\t// unmounted.\n\tif (remainingOldChildren) {\n\t\tfor (i = 0; i < oldChildrenLength; i++) {\n\t\t\toldVNode = oldChildren[i];\n\t\t\tif (oldVNode != null && (oldVNode._flags & MATCHED) === 0) {\n\t\t\t\tif (oldVNode._dom == newParentVNode._nextDom) {\n\t\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {VNode} parentVNode\n * @param {PreactElement} oldDom\n * @param {PreactElement} parentDom\n * @returns {PreactElement}\n */\nfunction insert(parentVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\n\tif (typeof parentVNode.type == 'function') {\n\t\tlet children = parentVNode._children;\n\t\tfor (let i = 0; children && i < children.length; i++) {\n\t\t\tif (children[i]) {\n\t\t\t\t// If we enter this code path on sCU bailout, where we copy\n\t\t\t\t// oldVNode._children to newVNode._children, we need to update the old\n\t\t\t\t// children's _parent pointer to point to the newVNode (parentVNode\n\t\t\t\t// here).\n\t\t\t\tchildren[i]._parent = parentVNode;\n\t\t\t\toldDom = insert(children[i], oldDom, parentDom);\n\t\t\t}\n\t\t}\n\n\t\treturn oldDom;\n\t} else if (parentVNode._dom != oldDom) {\n\t\tparentDom.insertBefore(parentVNode._dom, oldDom || null);\n\t\toldDom = parentVNode._dom;\n\t}\n\n\tdo {\n\t\toldDom = oldDom && oldDom.nextSibling;\n\t} while (oldDom != null && oldDom.nodeType === 8);\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {ComponentChildren} children The unflattened children of a virtual\n * node\n * @returns {VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\n/**\n * @param {VNode} childVNode\n * @param {VNode[]} oldChildren\n * @param {number} skewedIndex\n * @param {number} remainingOldChildren\n * @returns {number}\n */\nfunction findMatchingIndex(\n\tchildVNode,\n\toldChildren,\n\tskewedIndex,\n\tremainingOldChildren\n) {\n\tconst key = childVNode.key;\n\tconst type = childVNode.type;\n\tlet x = skewedIndex - 1;\n\tlet y = skewedIndex + 1;\n\tlet oldVNode = oldChildren[skewedIndex];\n\n\t// We only need to perform a search if there are more children\n\t// (remainingOldChildren) to search. However, if the oldVNode we just looked\n\t// at skewedIndex was not already used in this diff, then there must be at\n\t// least 1 other (so greater than 1) remainingOldChildren to attempt to match\n\t// against. So the following condition checks that ensuring\n\t// remainingOldChildren > 1 if the oldVNode is not already used/matched. Else\n\t// if the oldVNode was null or matched, then there could needs to be at least\n\t// 1 (aka `remainingOldChildren > 0`) children to find and compare against.\n\tlet shouldSearch =\n\t\tremainingOldChildren >\n\t\t(oldVNode != null && (oldVNode._flags & MATCHED) === 0 ? 1 : 0);\n\n\tif (\n\t\toldVNode === null ||\n\t\t(oldVNode &&\n\t\t\tkey == oldVNode.key &&\n\t\t\ttype === oldVNode.type &&\n\t\t\t(oldVNode._flags & MATCHED) === 0)\n\t) {\n\t\treturn skewedIndex;\n\t} else if (shouldSearch) {\n\t\twhile (x >= 0 || y < oldChildren.length) {\n\t\t\tif (x >= 0) {\n\t\t\t\toldVNode = oldChildren[x];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) === 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn x;\n\t\t\t\t}\n\t\t\t\tx--;\n\t\t\t}\n\n\t\t\tif (y < oldChildren.length) {\n\t\t\t\toldVNode = oldChildren[y];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) === 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn y;\n\t\t\t\t}\n\t\t\t\ty++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn -1;\n}\n", "import {\n\tEMPTY_OBJ,\n\tMODE_HYDRATE,\n\tMODE_SUSPENDED,\n\tRESET_MODE\n} from '../constants';\nimport { BaseComponent, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { setProperty } from './props';\nimport { assign, isArray, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {PreactElement} parentDom The parent of the DOM element\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\t/** @type {any} */\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._flags & MODE_SUSPENDED) {\n\t\tisHydrating = !!(oldVNode._flags & MODE_HYDRATE);\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\touter: if (typeof newType == 'function') {\n\t\ttry {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\t\t// @ts-expect-error The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-expect-error Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new BaseComponent(\n\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\t\t\tc._vnode = newVNode;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!c._force &&\n\t\t\t\t\t((c.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\t\tnewVNode._original === oldVNode._original)\n\t\t\t\t) {\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) {\n\t\t\t\t\t\t// When we are dealing with a bail because of sCU we have to update\n\t\t\t\t\t\t// the props, state and dirty-state.\n\t\t\t\t\t\t// when we are dealing with strict-equality we don't as the child could still\n\t\t\t\t\t\t// be dirtied see #3883\n\t\t\t\t\t\tc.props = newProps;\n\t\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t\tc._dirty = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._parentDom = parentDom;\n\t\t\tc._force = false;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tisArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnamespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._flags &= RESET_MODE;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnewVNode._original = null;\n\t\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\t\tnewVNode._dom = oldDom;\n\t\t\t\tnewVNode._flags |= isHydrating\n\t\t\t\t\t? MODE_HYDRATE | MODE_SUSPENDED\n\t\t\t\t\t: MODE_HYDRATE;\n\t\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t\t// ^ could possibly be simplified to:\n\t\t\t\t// excessDomChildren.length = 0;\n\t\t\t} else {\n\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t}\n\t\t\toptions._catchError(e, newVNode, oldVNode);\n\t\t}\n\t} else if (\n\t\texcessDomChildren == null &&\n\t\tnewVNode._original === oldVNode._original\n\t) {\n\t\tnewVNode._children = oldVNode._children;\n\t\tnewVNode._dom = oldVNode._dom;\n\t} else {\n\t\tnewVNode._dom = diffElementNodes(\n\t\t\toldVNode._dom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\t}\n\n\tif ((tmp = options.diffed)) tmp(newVNode);\n}\n\n/**\n * @param {Array<Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {VNode} root\n */\nexport function commitRoot(commitQueue, root, refQueue) {\n\troot._nextDom = undefined;\n\n\tfor (let i = 0; i < refQueue.length; i++) {\n\t\tapplyRef(refQueue[i], refQueue[++i], refQueue[++i]);\n\t}\n\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-expect-error Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-expect-error See above comment on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {PreactElement} dom The DOM element representing the virtual nodes\n * being diffed\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n * @returns {PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating,\n\trefQueue\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = /** @type {string} */ (newVNode.type);\n\t/** @type {any} */\n\tlet i;\n\t/** @type {{ __html?: string }} */\n\tlet newHtml;\n\t/** @type {{ __html?: string }} */\n\tlet oldHtml;\n\t/** @type {ComponentChildren} */\n\tlet newChildren;\n\tlet value;\n\tlet inputValue;\n\tlet checked;\n\n\t// Tracks entering and exiting namespaces when descending through the tree.\n\tif (nodeType === 'svg') namespace = 'http://www.w3.org/2000/svg';\n\telse if (nodeType === 'math')\n\t\tnamespace = 'http://www.w3.org/1998/Math/MathML';\n\telse if (!namespace) namespace = 'http://www.w3.org/1999/xhtml';\n\n\tif (excessDomChildren != null) {\n\t\tfor (i = 0; i < excessDomChildren.length; i++) {\n\t\t\tvalue = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tvalue &&\n\t\t\t\t'setAttribute' in value === !!nodeType &&\n\t\t\t\t(nodeType ? value.localName === nodeType : value.nodeType === 3)\n\t\t\t) {\n\t\t\t\tdom = value;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tdom = document.createElementNS(\n\t\t\tnamespace,\n\t\t\tnodeType,\n\t\t\tnewProps.is && newProps\n\t\t);\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in\n\t\t// case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\t// If we are in a situation where we are not hydrating but are using\n\t\t// existing DOM (e.g. replaceNode) we should read the existing DOM\n\t\t// attributes to diff them\n\t\tif (!isHydrating && excessDomChildren != null) {\n\t\t\toldProps = {};\n\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\tvalue = dom.attributes[i];\n\t\t\t\toldProps[value.name] = value.value;\n\t\t\t}\n\t\t}\n\n\t\tfor (i in oldProps) {\n\t\t\tvalue = oldProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\toldHtml = value;\n\t\t\t} else if (i !== 'key' && !(i in newProps)) {\n\t\t\t\tif (\n\t\t\t\t\t(i == 'value' && 'defaultValue' in newProps) ||\n\t\t\t\t\t(i == 'checked' && 'defaultChecked' in newProps)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tsetProperty(dom, i, null, value, namespace);\n\t\t\t}\n\t\t}\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tfor (i in newProps) {\n\t\t\tvalue = newProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t\tnewChildren = value;\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\tnewHtml = value;\n\t\t\t} else if (i == 'value') {\n\t\t\t\tinputValue = value;\n\t\t\t} else if (i == 'checked') {\n\t\t\t\tchecked = value;\n\t\t\t} else if (\n\t\t\t\ti !== 'key' &&\n\t\t\t\t(!isHydrating || typeof value == 'function') &&\n\t\t\t\toldProps[i] !== value\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, value, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\tif (\n\t\t\t\t!isHydrating &&\n\t\t\t\t(!oldHtml ||\n\t\t\t\t\t(newHtml.__html !== oldHtml.__html &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML))\n\t\t\t) {\n\t\t\t\tdom.innerHTML = newHtml.__html;\n\t\t\t}\n\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\tif (oldHtml) dom.innerHTML = '';\n\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tisArray(newChildren) ? newChildren : [newChildren],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnodeType === 'foreignObject'\n\t\t\t\t\t? 'http://www.w3.org/1999/xhtml'\n\t\t\t\t\t: namespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// As above, don't diff props during hydration\n\t\tif (!isHydrating) {\n\t\t\ti = 'value';\n\t\t\tif (\n\t\t\t\tinputValue !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(inputValue !== dom[i] ||\n\t\t\t\t\t(nodeType === 'progress' && !inputValue) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && inputValue !== oldProps[i]))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, inputValue, oldProps[i], namespace);\n\t\t\t}\n\n\t\t\ti = 'checked';\n\t\t\tif (checked !== undefined && checked !== dom[i]) {\n\t\t\t\tsetProperty(dom, i, checked, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {Ref<any>} ref\n * @param {any} value\n * @param {VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {VNode} vnode The virtual node to unmount\n * @param {VNode} parentVNode The parent of the VNode that initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) {\n\t\t\tapplyRef(r, null, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type != 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._component = vnode._parent = vnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n", "import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {ComponentChild} vnode The virtual node to render\n * @param {PreactElement} parentDom The DOM element to render into\n * @param {PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode == 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = ((!isHydrating && replaceNode) || parentDom)._children =\n\t\tcreateElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [],\n\t\trefQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.namespaceURI,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t? null\n\t\t\t: parentDom.firstChild\n\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t? oldVNode._dom\n\t\t\t: parentDom.firstChild,\n\t\tisHydrating,\n\t\trefQueue\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode, refQueue);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {ComponentChild} vnode The virtual node to render\n * @param {PreactElement} parentDom The DOM element to update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n", "import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its\n * children.\n * @param {VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<ComponentChildren>} rest Any additional arguments will be used\n * as replacement children.\n * @returns {VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\n\tlet defaultProps;\n\n\tif (vnode.type && vnode.type.defaultProps) {\n\t\tdefaultProps = vnode.type.defaultProps;\n\t}\n\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse if (props[i] === undefined && defaultProps !== undefined) {\n\t\t\tnormalizedProps[i] = defaultProps[i];\n\t\t} else {\n\t\t\tnormalizedProps[i] = props[i];\n\t\t}\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n", "/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {VNode} vnode The vnode that threw the error that was caught (except\n * for unmounting when this parameter is the highest parent that was being\n * unmounted)\n * @param {VNode} [oldVNode]\n * @param {ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {Component} */\n\tlet component,\n\t\t/** @type {ComponentType} */\n\t\tctor,\n\t\t/** @type {boolean} */\n\t\thandled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nimport { uniq } from \"../utils/uniq.js\";\nfunction prepareTemplates(\n// can not use = {} here, since the template could have different constraints\ndefaultTemplates) {\n  var templates = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var allKeys = uniq([].concat(_toConsumableArray(Object.keys(defaultTemplates || {})), _toConsumableArray(Object.keys(templates))));\n  return allKeys.reduce(function (config, key) {\n    var defaultTemplate = defaultTemplates ? defaultTemplates[key] : undefined;\n    var customTemplate = templates[key];\n    var isCustomTemplate = customTemplate !== undefined && customTemplate !== defaultTemplate;\n    config.templates[key] = isCustomTemplate ? customTemplate : defaultTemplate;\n    config.useCustomCompileOptions[key] = isCustomTemplate;\n    return config;\n  }, {\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    templates: {},\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    useCustomCompileOptions: {}\n  });\n}\n\n/**\n * Prepares an object to be passed to the Template widget\n */\nexport function prepareTemplateProps(_ref) {\n  var defaultTemplates = _ref.defaultTemplates,\n    templates = _ref.templates,\n    templatesConfig = _ref.templatesConfig;\n  var preparedTemplates = prepareTemplates(defaultTemplates, templates);\n  return _objectSpread({\n    templatesConfig: templatesConfig\n  }, preparedTemplates);\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport hogan from 'hogan.js';\nimport { html } from 'htm/preact';\nimport { Highlight, ReverseHighlight, ReverseSnippet, Snippet } from \"../../helpers/components/index.js\";\n// We add all our template helper methods to the template as lambdas. Note\n// that lambdas in Mustache are supposed to accept a second argument of\n// `render` to get the rendered value, not the literal `{{value}}`. But\n// this is currently broken (see https://github.com/twitter/hogan.js/issues/222).\nfunction transformHelpersToHogan() {\n  var helpers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var compileOptions = arguments.length > 1 ? arguments[1] : undefined;\n  var data = arguments.length > 2 ? arguments[2] : undefined;\n  return Object.keys(helpers).reduce(function (acc, helperKey) {\n    return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, helperKey, function () {\n      var _this = this;\n      return function (text) {\n        var render = function render(value) {\n          return hogan.compile(value, compileOptions).render(_this);\n        };\n        return helpers[helperKey].call(data, text, render);\n      };\n    }));\n  }, {});\n}\nexport function renderTemplate(_ref) {\n  var templates = _ref.templates,\n    templateKey = _ref.templateKey,\n    compileOptions = _ref.compileOptions,\n    helpers = _ref.helpers,\n    data = _ref.data,\n    bindEvent = _ref.bindEvent,\n    sendEvent = _ref.sendEvent;\n  var template = templates[templateKey];\n  if (typeof template !== 'string' && typeof template !== 'function') {\n    throw new Error(\"Template must be 'string' or 'function', was '\".concat(_typeof(template), \"' (key: \").concat(templateKey, \")\"));\n  }\n  if (typeof template === 'function') {\n    // @MAJOR no longer pass bindEvent when string templates are removed\n    var params = bindEvent || {};\n    params.html = html;\n    params.sendEvent = sendEvent;\n    params.components = {\n      Highlight: Highlight,\n      ReverseHighlight: ReverseHighlight,\n      Snippet: Snippet,\n      ReverseSnippet: ReverseSnippet\n    };\n\n    // @MAJOR remove the `as any` when string templates are removed\n    // needed because not every template receives sendEvent\n    return template(data, params);\n  }\n  var transformedHelpers = transformHelpersToHogan(helpers, compileOptions, data);\n  return hogan.compile(template, compileOptions).render(_objectSpread(_objectSpread({}, data), {}, {\n    helpers: transformedHelpers\n  })).replace(/[ \\n\\r\\t\\f\\xA0]+/g, function (spaces) {\n    return spaces.replace(/(^|\\xA0+)[^\\xA0]+/g, '$1 ');\n  }).trim();\n}", "var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n", "import{h as r,Component as o,render as t}from\"preact\";export{h,render,Component}from\"preact\";import e from\"htm\";var m=e.bind(r);export{m as html};\n", "import { createHighlightComponent } from 'instantsearch-ui-components';\nimport { createElement, Fragment } from 'preact';\nexport var InternalHighlight = createHighlightComponent({\n  createElement: createElement,\n  Fragment: Fragment\n});", "var _excluded = [\"classNames\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { InternalHighlight } from \"../InternalHighlight/InternalHighlight.js\";\nexport function Highlight(_ref) {\n  var _ref$classNames = _ref.classNames,\n    classNames = _ref$classNames === void 0 ? {} : _ref$classNames,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return h(InternalHighlight, _extends({\n    classNames: {\n      root: cx('ais-Highlight', classNames.root),\n      highlighted: cx('ais-Highlight-highlighted', classNames.highlighted),\n      nonHighlighted: cx('ais-Highlight-nonHighlighted', classNames.nonHighlighted),\n      separator: cx('ais-Highlight-separator', classNames.separator)\n    }\n  }, props));\n}", "var _excluded = [\"hit\", \"attribute\", \"cssClasses\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { h } from 'preact';\nimport { Highlight as HighlightUiComponent } from \"../../components/Highlight/Highlight.js\";\nimport { getPropertyByPath, unescape, toArray, warning, getHighlightedParts } from \"../../lib/utils/index.js\";\nexport function Highlight(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute,\n    cssClasses = _ref.cssClasses,\n    props = _objectWithoutProperties(_ref, _excluded);\n  var property = getPropertyByPath(hit._highlightResult, attribute) || [];\n  var properties = toArray(property);\n  process.env.NODE_ENV === 'development' ? warning(Boolean(properties.length), \"Could not enable highlight for \\\"\".concat(attribute.toString(), \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is either searchable or specified in `attributesToHighlight`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var parts = properties.map(function (_ref2) {\n    var value = _ref2.value;\n    return getHighlightedParts(unescape(value || ''));\n  });\n  return h(HighlightUiComponent, _extends({}, props, {\n    parts: parts,\n    classNames: cssClasses\n  }));\n}", "var _excluded = [\"classNames\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { InternalHighlight } from \"../InternalHighlight/InternalHighlight.js\";\nexport function ReverseHighlight(_ref) {\n  var _ref$classNames = _ref.classNames,\n    classNames = _ref$classNames === void 0 ? {} : _ref$classNames,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return h(InternalHighlight, _extends({\n    classNames: {\n      root: cx('ais-ReverseHighlight', classNames.root),\n      highlighted: cx('ais-ReverseHighlight-highlighted', classNames.highlighted),\n      nonHighlighted: cx('ais-ReverseHighlight-nonHighlighted', classNames.nonHighlighted),\n      separator: cx('ais-ReverseHighlight-separator', classNames.separator)\n    }\n  }, props));\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"hit\", \"attribute\", \"cssClasses\"],\n  _excluded2 = [\"isHighlighted\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { h } from 'preact';\nimport { ReverseHighlight as ReverseHighlightUiComponent } from \"../../components/ReverseHighlight/ReverseHighlight.js\";\nimport { getPropertyByPath, unescape, toArray, warning, getHighlightedParts } from \"../../lib/utils/index.js\";\nexport function ReverseHighlight(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute,\n    cssClasses = _ref.cssClasses,\n    props = _objectWithoutProperties(_ref, _excluded);\n  var property = getPropertyByPath(hit._highlightResult, attribute) || [];\n  var properties = toArray(property);\n  process.env.NODE_ENV === 'development' ? warning(Boolean(properties.length), \"Could not enable highlight for \\\"\".concat(attribute.toString(), \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is either searchable or specified in `attributesToHighlight`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var parts = properties.map(function (_ref2) {\n    var value = _ref2.value;\n    return getHighlightedParts(unescape(value || '')).map(function (_ref3) {\n      var isHighlighted = _ref3.isHighlighted,\n        rest = _objectWithoutProperties(_ref3, _excluded2);\n      return _objectSpread(_objectSpread({}, rest), {}, {\n        isHighlighted: !isHighlighted\n      });\n    });\n  });\n  return h(ReverseHighlightUiComponent, _extends({}, props, {\n    parts: parts,\n    classNames: cssClasses\n  }));\n}", "var _excluded = [\"classNames\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { InternalHighlight } from \"../InternalHighlight/InternalHighlight.js\";\nexport function ReverseSnippet(_ref) {\n  var _ref$classNames = _ref.classNames,\n    classNames = _ref$classNames === void 0 ? {} : _ref$classNames,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return h(InternalHighlight, _extends({\n    classNames: {\n      root: cx('ais-ReverseSnippet', classNames.root),\n      highlighted: cx('ais-ReverseSnippet-highlighted', classNames.highlighted),\n      nonHighlighted: cx('ais-ReverseSnippet-nonHighlighted', classNames.nonHighlighted),\n      separator: cx('ais-ReverseSnippet-separator', classNames.separator)\n    }\n  }, props));\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"hit\", \"attribute\", \"cssClasses\"],\n  _excluded2 = [\"isHighlighted\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { h } from 'preact';\nimport { ReverseSnippet as ReverseSnippetUiComponent } from \"../../components/ReverseSnippet/ReverseSnippet.js\";\nimport { getPropertyByPath, unescape, toArray, warning, getHighlightedParts } from \"../../lib/utils/index.js\";\nexport function ReverseSnippet(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute,\n    cssClasses = _ref.cssClasses,\n    props = _objectWithoutProperties(_ref, _excluded);\n  var property = getPropertyByPath(hit._snippetResult, attribute) || [];\n  var properties = toArray(property);\n  process.env.NODE_ENV === 'development' ? warning(Boolean(properties.length), \"Could not enable snippet for \\\"\".concat(attribute.toString(), \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is specified in `attributesToSnippet`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var parts = properties.map(function (_ref2) {\n    var value = _ref2.value;\n    return getHighlightedParts(unescape(value || '')).map(function (_ref3) {\n      var isHighlighted = _ref3.isHighlighted,\n        rest = _objectWithoutProperties(_ref3, _excluded2);\n      return _objectSpread(_objectSpread({}, rest), {}, {\n        isHighlighted: !isHighlighted\n      });\n    });\n  });\n  return h(ReverseSnippetUiComponent, _extends({}, props, {\n    parts: parts,\n    classNames: cssClasses\n  }));\n}", "var _excluded = [\"classNames\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { InternalHighlight } from \"../InternalHighlight/InternalHighlight.js\";\nexport function Snippet(_ref) {\n  var _ref$classNames = _ref.classNames,\n    classNames = _ref$classNames === void 0 ? {} : _ref$classNames,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return h(InternalHighlight, _extends({\n    classNames: {\n      root: cx('ais-Snippet', classNames.root),\n      highlighted: cx('ais-Snippet-highlighted', classNames.highlighted),\n      nonHighlighted: cx('ais-Snippet-nonHighlighted', classNames.nonHighlighted),\n      separator: cx('ais-Snippet-separator', classNames.separator)\n    }\n  }, props));\n}", "var _excluded = [\"hit\", \"attribute\", \"cssClasses\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { h } from 'preact';\nimport { Snippet as SnippetUiComponent } from \"../../components/Snippet/Snippet.js\";\nimport { getPropertyByPath, unescape, toArray, warning, getHighlightedParts } from \"../../lib/utils/index.js\";\nexport function Snippet(_ref) {\n  var hit = _ref.hit,\n    attribute = _ref.attribute,\n    cssClasses = _ref.cssClasses,\n    props = _objectWithoutProperties(_ref, _excluded);\n  var property = getPropertyByPath(hit._snippetResult, attribute) || [];\n  var properties = toArray(property);\n  process.env.NODE_ENV === 'development' ? warning(Boolean(properties.length), \"Could not enable snippet for \\\"\".concat(attribute.toString(), \"\\\", will display an empty string.\\nPlease check whether this attribute exists and is specified in `attributesToSnippet`.\\n\\nSee: https://alg.li/highlighting\\n\")) : void 0;\n  var parts = properties.map(function (_ref2) {\n    var value = _ref2.value;\n    return getHighlightedParts(unescape(value || ''));\n  });\n  return h(SnippetUiComponent, _extends({}, props, {\n    parts: parts,\n    classNames: cssClasses\n  }));\n}", "function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { h, Component, Fragment, createRef } from 'preact';\nimport { renderTemplate } from \"../../lib/templating/index.js\";\nimport { warning, isEqual } from \"../../lib/utils/index.js\";\nvar RawHtml = /*#__PURE__*/function (_Component) {\n  _inherits(RawHtml, _Component);\n  var _super = _createSuper(RawHtml);\n  function RawHtml() {\n    var _this;\n    _classCallCheck(this, RawHtml);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"ref\", createRef());\n    _defineProperty(_assertThisInitialized(_this), \"nodes\", []);\n    return _this;\n  }\n  _createClass(RawHtml, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      var fragment = new DocumentFragment();\n      var root = document.createElement('div');\n      root.innerHTML = this.props.content;\n      this.nodes = _toConsumableArray(root.childNodes);\n      this.nodes.forEach(function (node) {\n        return fragment.appendChild(node);\n      });\n      this.ref.current.replaceWith(fragment);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.nodes.forEach(function (node) {\n        if (node instanceof Element) {\n          node.outerHTML = '';\n          return;\n        }\n        node.nodeValue = '';\n      });\n      // if there is one TextNode first and one TextNode last, the\n      // last one's nodeValue will be assigned to the first.\n      if (this.nodes[0].nodeValue) {\n        this.nodes[0].nodeValue = '';\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      return h(\"div\", {\n        ref: this.ref\n      });\n    }\n  }]);\n  return RawHtml;\n}(Component);\nvar defaultProps = {\n  data: {},\n  rootTagName: 'div',\n  useCustomCompileOptions: {},\n  templates: {},\n  templatesConfig: {}\n};\n// @TODO: Template should be a generic and receive TData to pass to Templates (to avoid TTemplateData to be set as `any`)\nvar Template = /*#__PURE__*/function (_Component2) {\n  _inherits(Template, _Component2);\n  var _super2 = _createSuper(Template);\n  function Template() {\n    _classCallCheck(this, Template);\n    return _super2.apply(this, arguments);\n  }\n  _createClass(Template, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps) {\n      return !isEqual(this.props.data, nextProps.data) || this.props.templateKey !== nextProps.templateKey || !isEqual(this.props.rootProps, nextProps.rootProps);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      if (process.env.NODE_ENV === 'development') {\n        var nonFunctionTemplates = Object.keys(this.props.templates).filter(function (key) {\n          return typeof _this2.props.templates[key] !== 'function';\n        });\n        process.env.NODE_ENV === 'development' ? warning(nonFunctionTemplates.length === 0, \"Hogan.js and string-based templates are deprecated and will not be supported in InstantSearch.js 5.x.\\n\\nYou can replace them with function-form templates and use either the provided `html` function or JSX templates.\\n\\nString-based templates: \".concat(nonFunctionTemplates.join(', '), \".\\n\\nSee: https://www.algolia.com/doc/guides/building-search-ui/upgrade-guides/js/#upgrade-templates\")) : void 0;\n      }\n      var RootTagName = this.props.rootTagName === 'fragment' ? Fragment : this.props.rootTagName;\n      var useCustomCompileOptions = this.props.useCustomCompileOptions[this.props.templateKey];\n      var compileOptions = useCustomCompileOptions ? this.props.templatesConfig.compileOptions : {};\n      var content = renderTemplate({\n        templates: this.props.templates,\n        templateKey: this.props.templateKey,\n        compileOptions: compileOptions,\n        helpers: this.props.templatesConfig.helpers,\n        data: this.props.data,\n        bindEvent: this.props.bindEvent,\n        sendEvent: this.props.sendEvent\n      });\n      if (content === null) {\n        // Adds a noscript to the DOM but virtual DOM is null\n        // See http://facebook.github.io/react/docs/component-specs.html#render\n        return null;\n      }\n      if (_typeof(content) === 'object') {\n        return h(RootTagName, this.props.rootProps, content);\n      }\n\n      // This is to handle Hogan templates with Fragment as rootTagName\n      if (RootTagName === Fragment) {\n        return h(RawHtml, {\n          content: content,\n          key: content\n        });\n      }\n      return h(RootTagName, _extends({}, this.props.rootProps, {\n        dangerouslySetInnerHTML: {\n          __html: content\n        }\n      }));\n    }\n  }]);\n  return Template;\n}(Component);\n_defineProperty(Template, \"defaultProps\", defaultProps);\nexport default Template;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { warning } from \"../../lib/utils/index.js\";\nimport Template from \"../Template/Template.js\";\nvar Answers = function Answers(_ref) {\n  var hits = _ref.hits,\n    isLoading = _ref.isLoading,\n    cssClasses = _ref.cssClasses,\n    templateProps = _ref.templateProps;\n  return h(\"div\", {\n    className: cx(cssClasses.root, hits.length === 0 && cssClasses.emptyRoot)\n  }, h(Template, _extends({}, templateProps, {\n    templateKey: \"header\",\n    rootProps: {\n      className: cssClasses.header\n    },\n    data: {\n      hits: hits,\n      isLoading: isLoading\n    }\n  })), isLoading ? h(Template, _extends({}, templateProps, {\n    templateKey: \"loader\",\n    rootProps: {\n      className: cssClasses.loader\n    }\n  })) : h(\"ul\", {\n    className: cssClasses.list\n  }, hits.map(function (hit, index) {\n    return h(Template, _extends({}, templateProps, {\n      templateKey: \"item\",\n      rootTagName: \"li\",\n      rootProps: {\n        className: cssClasses.item\n      },\n      key: hit.objectID,\n      data: _objectSpread(_objectSpread({}, hit), {}, {\n        get __hitIndex() {\n          process.env.NODE_ENV === 'development' ? warning(false, 'The `__hitIndex` property is deprecated. Use the absolute `__position` instead.') : void 0;\n          return index;\n        }\n      })\n    }));\n  })));\n};\nexport default Answers;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { checkRendering, createDocumentationMessageGenerator, createConcurrentSafePromise, addQueryID, debounce, addAbsolutePosition, noop, escapeHits } from \"../../lib/utils/index.js\";\nfunction hasFindAnswersMethod(answersIndex) {\n  return typeof answersIndex.findAnswers === 'function';\n}\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'answers',\n  connector: true\n});\n/**\n * @deprecated the answers service is no longer offered, and this widget will be removed in InstantSearch.js v5\n */\nvar connectAnswers = function connectAnswers(renderFn) {\n  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n  checkRendering(renderFn, withUsage());\n  return function (widgetParams) {\n    var _ref = widgetParams || {},\n      queryLanguages = _ref.queryLanguages,\n      attributesForPrediction = _ref.attributesForPrediction,\n      _ref$nbHits = _ref.nbHits,\n      nbHits = _ref$nbHits === void 0 ? 1 : _ref$nbHits,\n      _ref$renderDebounceTi = _ref.renderDebounceTime,\n      renderDebounceTime = _ref$renderDebounceTi === void 0 ? 100 : _ref$renderDebounceTi,\n      _ref$searchDebounceTi = _ref.searchDebounceTime,\n      searchDebounceTime = _ref$searchDebounceTi === void 0 ? 100 : _ref$searchDebounceTi,\n      _ref$escapeHTML = _ref.escapeHTML,\n      escapeHTML = _ref$escapeHTML === void 0 ? true : _ref$escapeHTML,\n      _ref$extraParameters = _ref.extraParameters,\n      extraParameters = _ref$extraParameters === void 0 ? {} : _ref$extraParameters;\n\n    // @ts-expect-error checking for the wrong value\n    if (!queryLanguages || queryLanguages.length === 0) {\n      throw new Error(withUsage('The `queryLanguages` expects an array of strings.'));\n    }\n    var runConcurrentSafePromise = createConcurrentSafePromise();\n    var lastHits = [];\n    var isLoading = false;\n    var debouncedRender = debounce(renderFn, renderDebounceTime);\n\n    // this does not directly use DebouncedFunction<findAnswers>, since then the generic will disappear\n    var debouncedRefine;\n    return {\n      $$type: 'ais.answers',\n      init: function init(initOptions) {\n        var state = initOptions.state,\n          instantSearchInstance = initOptions.instantSearchInstance;\n        var answersIndex = instantSearchInstance.client.initIndex(state.index);\n        if (!hasFindAnswersMethod(answersIndex)) {\n          throw new Error(withUsage('`algoliasearch` >= 4.8.0 required.'));\n        }\n        debouncedRefine = debounce(answersIndex.findAnswers, searchDebounceTime);\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {\n          instantSearchInstance: initOptions.instantSearchInstance\n        }), true);\n      },\n      render: function render(renderOptions) {\n        var _this = this;\n        var query = renderOptions.state.query;\n        if (!query) {\n          // renders nothing with empty query\n          lastHits = [];\n          isLoading = false;\n          renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(renderOptions)), {}, {\n            instantSearchInstance: renderOptions.instantSearchInstance\n          }), false);\n          return;\n        }\n\n        // render the loader\n        lastHits = [];\n        isLoading = true;\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(renderOptions)), {}, {\n          instantSearchInstance: renderOptions.instantSearchInstance\n        }), false);\n\n        // call /answers API\n        runConcurrentSafePromise(debouncedRefine(query, queryLanguages, _objectSpread(_objectSpread({}, extraParameters), {}, {\n          nbHits: nbHits,\n          attributesForPrediction: attributesForPrediction\n        }))).then(function (result) {\n          if (!result) {\n            // It's undefined when it's debounced.\n            return;\n          }\n          if (escapeHTML && result.hits.length > 0) {\n            result.hits = escapeHits(result.hits);\n          }\n          var hitsWithAbsolutePosition = addAbsolutePosition(result.hits, 0, nbHits);\n          var hitsWithAbsolutePositionAndQueryID = addQueryID(hitsWithAbsolutePosition, result.queryID);\n          lastHits = hitsWithAbsolutePositionAndQueryID;\n          isLoading = false;\n          debouncedRender(_objectSpread(_objectSpread({}, _this.getWidgetRenderState(renderOptions)), {}, {\n            instantSearchInstance: renderOptions.instantSearchInstance\n          }), false);\n        });\n      },\n      getRenderState: function getRenderState(renderState, renderOptions) {\n        return _objectSpread(_objectSpread({}, renderState), {}, {\n          answers: this.getWidgetRenderState(renderOptions)\n        });\n      },\n      getWidgetRenderState: function getWidgetRenderState() {\n        return {\n          hits: lastHits,\n          isLoading: isLoading,\n          widgetParams: widgetParams\n        };\n      },\n      dispose: function dispose(_ref2) {\n        var state = _ref2.state;\n        unmountFn();\n        return state;\n      },\n      getWidgetSearchParameters: function getWidgetSearchParameters(state) {\n        return state;\n      }\n    };\n  };\n};\nexport default connectAnswers;", "var defaultTemplates = {\n  header: function header() {\n    return '';\n  },\n  loader: function loader() {\n    return '';\n  },\n  item: function item(_item) {\n    return JSON.stringify(_item);\n  }\n};\nexport default defaultTemplates;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, render } from 'preact';\nimport Answers from \"../../components/Answers/Answers.js\";\nimport connectAnswers from \"../../connectors/answers/connectAnswers.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { prepareTemplateProps } from \"../../lib/templating/index.js\";\nimport { createDocumentationMessageGenerator, deprecate, getContainerNode } from \"../../lib/utils/index.js\";\nimport defaultTemplates from \"./defaultTemplates.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'answers'\n});\nvar suit = component('Answers');\nvar renderer = function renderer(_ref) {\n  var containerNode = _ref.containerNode,\n    cssClasses = _ref.cssClasses,\n    renderState = _ref.renderState,\n    templates = _ref.templates;\n  return function (_ref2, isFirstRendering) {\n    var hits = _ref2.hits,\n      isLoading = _ref2.isLoading,\n      instantSearchInstance = _ref2.instantSearchInstance;\n    if (isFirstRendering) {\n      renderState.templateProps = prepareTemplateProps({\n        defaultTemplates: defaultTemplates,\n        templatesConfig: instantSearchInstance.templatesConfig,\n        templates: templates\n      });\n      return;\n    }\n    render(h(Answers, {\n      cssClasses: cssClasses,\n      hits: hits,\n      isLoading: isLoading,\n      templateProps: renderState.templateProps\n    }), containerNode);\n  };\n};\n/**\n * @deprecated the answers service is no longer offered, and this widget will be removed in InstantSearch.js v5\n */\nvar answersWidget = function answersWidget(widgetParams) {\n  var _ref3 = widgetParams || {},\n    container = _ref3.container,\n    attributesForPrediction = _ref3.attributesForPrediction,\n    queryLanguages = _ref3.queryLanguages,\n    nbHits = _ref3.nbHits,\n    searchDebounceTime = _ref3.searchDebounceTime,\n    renderDebounceTime = _ref3.renderDebounceTime,\n    escapeHTML = _ref3.escapeHTML,\n    extraParameters = _ref3.extraParameters,\n    _ref3$templates = _ref3.templates,\n    templates = _ref3$templates === void 0 ? {} : _ref3$templates,\n    _ref3$cssClasses = _ref3.cssClasses,\n    userCssClasses = _ref3$cssClasses === void 0 ? {} : _ref3$cssClasses;\n  if (!container) {\n    throw new Error(withUsage('The `container` option is required.'));\n  }\n  var containerNode = getContainerNode(container);\n  var cssClasses = {\n    root: cx(suit(), userCssClasses.root),\n    emptyRoot: cx(suit({\n      modifierName: 'empty'\n    }), userCssClasses.emptyRoot),\n    header: cx(suit({\n      descendantName: 'header'\n    }), userCssClasses.header),\n    loader: cx(suit({\n      descendantName: 'loader'\n    }), userCssClasses.loader),\n    list: cx(suit({\n      descendantName: 'list'\n    }), userCssClasses.list),\n    item: cx(suit({\n      descendantName: 'item'\n    }), userCssClasses.item)\n  };\n  var specializedRenderer = renderer({\n    containerNode: containerNode,\n    cssClasses: cssClasses,\n    templates: templates,\n    renderState: {}\n  });\n  var makeWidget = connectAnswers(specializedRenderer, function () {\n    return render(null, containerNode);\n  });\n  return _objectSpread(_objectSpread({}, makeWidget({\n    attributesForPrediction: attributesForPrediction,\n    queryLanguages: queryLanguages,\n    nbHits: nbHits,\n    searchDebounceTime: searchDebounceTime,\n    renderDebounceTime: renderDebounceTime,\n    escapeHTML: escapeHTML,\n    extraParameters: extraParameters\n  })), {}, {\n    $$widgetType: 'ais.answers'\n  });\n};\nexport default deprecate(answersWidget, 'The answers widget is deprecated and will be removed in InstantSearch.js 5.0');", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nimport { checkRendering, createDocumentationMessageGenerator, getWidgetAttribute, noop, warning } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'dynamic-widgets',\n  connector: true\n});\nvar MAX_WILDCARD_FACETS = 20;\nvar connectDynamicWidgets = function connectDynamicWidgets(renderFn) {\n  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n  checkRendering(renderFn, withUsage());\n  return function (widgetParams) {\n    var widgets = widgetParams.widgets,\n      _widgetParams$maxValu = widgetParams.maxValuesPerFacet,\n      maxValuesPerFacet = _widgetParams$maxValu === void 0 ? 20 : _widgetParams$maxValu,\n      _widgetParams$facets = widgetParams.facets,\n      facets = _widgetParams$facets === void 0 ? ['*'] : _widgetParams$facets,\n      _widgetParams$transfo = widgetParams.transformItems,\n      transformItems = _widgetParams$transfo === void 0 ? function (items) {\n        return items;\n      } : _widgetParams$transfo,\n      fallbackWidget = widgetParams.fallbackWidget;\n    if (!(widgets && Array.isArray(widgets) && widgets.every(function (widget) {\n      return _typeof(widget) === 'object';\n    }))) {\n      throw new Error(withUsage('The `widgets` option expects an array of widgets.'));\n    }\n    if (!Array.isArray(facets)) {\n      throw new Error(withUsage(\"The `facets` option only accepts an array of facets, you passed \".concat(JSON.stringify(facets))));\n    }\n    var localWidgets = new Map();\n    return {\n      $$type: 'ais.dynamicWidgets',\n      init: function init(initOptions) {\n        widgets.forEach(function (widget) {\n          var attribute = getWidgetAttribute(widget, initOptions);\n          localWidgets.set(attribute, {\n            widget: widget,\n            isMounted: false\n          });\n        });\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {\n          instantSearchInstance: initOptions.instantSearchInstance\n        }), true);\n      },\n      render: function render(renderOptions) {\n        var parent = renderOptions.parent;\n        var renderState = this.getWidgetRenderState(renderOptions);\n        var widgetsToUnmount = [];\n        var widgetsToMount = [];\n        if (fallbackWidget) {\n          renderState.attributesToRender.forEach(function (attribute) {\n            if (!localWidgets.has(attribute)) {\n              var widget = fallbackWidget({\n                attribute: attribute\n              });\n              localWidgets.set(attribute, {\n                widget: widget,\n                isMounted: false\n              });\n            }\n          });\n        }\n        localWidgets.forEach(function (_ref, attribute) {\n          var widget = _ref.widget,\n            isMounted = _ref.isMounted;\n          var shouldMount = renderState.attributesToRender.indexOf(attribute) > -1;\n          if (!isMounted && shouldMount) {\n            widgetsToMount.push(widget);\n            localWidgets.set(attribute, {\n              widget: widget,\n              isMounted: true\n            });\n          } else if (isMounted && !shouldMount) {\n            widgetsToUnmount.push(widget);\n            localWidgets.set(attribute, {\n              widget: widget,\n              isMounted: false\n            });\n          }\n        });\n        parent.addWidgets(widgetsToMount);\n        // make sure this only happens after the regular render, otherwise it\n        // happens too quick, since render is \"deferred\" for the next microtask,\n        // so this needs to be a whole task later\n        setTimeout(function () {\n          return parent.removeWidgets(widgetsToUnmount);\n        }, 0);\n        renderFn(_objectSpread(_objectSpread({}, renderState), {}, {\n          instantSearchInstance: renderOptions.instantSearchInstance\n        }), false);\n      },\n      dispose: function dispose(_ref2) {\n        var parent = _ref2.parent;\n        var toRemove = [];\n        localWidgets.forEach(function (_ref3) {\n          var widget = _ref3.widget,\n            isMounted = _ref3.isMounted;\n          if (isMounted) {\n            toRemove.push(widget);\n          }\n        });\n        parent.removeWidgets(toRemove);\n        unmountFn();\n      },\n      getWidgetSearchParameters: function getWidgetSearchParameters(state) {\n        return facets.reduce(function (acc, curr) {\n          return acc.addFacet(curr);\n        }, state.setQueryParameters({\n          maxValuesPerFacet: Math.max(maxValuesPerFacet || 0, state.maxValuesPerFacet || 0)\n        }));\n      },\n      getRenderState: function getRenderState(renderState, renderOptions) {\n        return _objectSpread(_objectSpread({}, renderState), {}, {\n          dynamicWidgets: this.getWidgetRenderState(renderOptions)\n        });\n      },\n      getWidgetRenderState: function getWidgetRenderState(_ref4) {\n        var _results$renderingCon, _results$renderingCon2, _results$renderingCon3, _results$renderingCon4;\n        var results = _ref4.results,\n          state = _ref4.state;\n        if (!results) {\n          return {\n            attributesToRender: [],\n            widgetParams: widgetParams\n          };\n        }\n        var attributesToRender = transformItems((_results$renderingCon = (_results$renderingCon2 = results.renderingContent) === null || _results$renderingCon2 === void 0 ? void 0 : (_results$renderingCon3 = _results$renderingCon2.facetOrdering) === null || _results$renderingCon3 === void 0 ? void 0 : (_results$renderingCon4 = _results$renderingCon3.facets) === null || _results$renderingCon4 === void 0 ? void 0 : _results$renderingCon4.order) !== null && _results$renderingCon !== void 0 ? _results$renderingCon : [], {\n          results: results\n        });\n        if (!Array.isArray(attributesToRender)) {\n          throw new Error(withUsage('The `transformItems` option expects a function that returns an Array.'));\n        }\n        process.env.NODE_ENV === 'development' ? warning(maxValuesPerFacet >= (state.maxValuesPerFacet || 0), \"The maxValuesPerFacet set by dynamic widgets (\".concat(maxValuesPerFacet, \") is smaller than one of the limits set by a widget (\").concat(state.maxValuesPerFacet, \"). This causes a mismatch in query parameters and thus an extra network request when that widget is mounted.\")) : void 0;\n        process.env.NODE_ENV === 'development' ? warning(attributesToRender.length <= MAX_WILDCARD_FACETS || widgetParams.facets !== undefined, \"More than \".concat(MAX_WILDCARD_FACETS, \" facets are requested to be displayed without explicitly setting which facets to retrieve. This could have a performance impact. Set \\\"facets\\\" to [] to do two smaller network requests, or explicitly to ['*'] to avoid this warning.\")) : void 0;\n        return {\n          attributesToRender: attributesToRender,\n          widgetParams: widgetParams\n        };\n      }\n    };\n  };\n};\nexport default connectDynamicWidgets;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"container\", \"widgets\", \"fallbackWidget\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport connectDynamicWidgets from \"../../connectors/dynamic-widgets/connectDynamicWidgets.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { createDocumentationMessageGenerator, getContainerNode, getWidgetAttribute } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'dynamic-widgets'\n});\nvar suit = component('DynamicWidgets');\nfunction createContainer(rootContainer) {\n  var container = document.createElement('div');\n  container.className = suit({\n    descendantName: 'widget'\n  });\n  rootContainer.appendChild(container);\n  return container;\n}\nvar dynamicWidgets = function dynamicWidgets(widgetParams) {\n  var _ref = widgetParams || {},\n    containerSelector = _ref.container,\n    widgets = _ref.widgets,\n    fallbackWidget = _ref.fallbackWidget,\n    otherWidgetParams = _objectWithoutProperties(_ref, _excluded);\n  if (!containerSelector) {\n    throw new Error(withUsage('The `container` option is required.'));\n  }\n  if (!(widgets && Array.isArray(widgets) && widgets.every(function (widget) {\n    return typeof widget === 'function';\n  }))) {\n    throw new Error(withUsage('The `widgets` option expects an array of callbacks.'));\n  }\n  var userContainer = getContainerNode(containerSelector);\n  var rootContainer = document.createElement('div');\n  rootContainer.className = suit();\n  var containers = new Map();\n  var connectorWidgets = [];\n  var makeWidget = connectDynamicWidgets(function (_ref2, isFirstRender) {\n    var attributesToRender = _ref2.attributesToRender;\n    if (isFirstRender) {\n      userContainer.appendChild(rootContainer);\n    }\n    attributesToRender.forEach(function (attribute) {\n      if (!containers.has(attribute)) {\n        return;\n      }\n      var container = containers.get(attribute);\n      rootContainer.appendChild(container);\n    });\n  }, function () {\n    userContainer.removeChild(rootContainer);\n  });\n  var widget = makeWidget(_objectSpread(_objectSpread({}, otherWidgetParams), {}, {\n    widgets: connectorWidgets,\n    fallbackWidget: typeof fallbackWidget === 'function' ? function (_ref3) {\n      var attribute = _ref3.attribute;\n      var container = createContainer(rootContainer);\n      containers.set(attribute, container);\n      return fallbackWidget({\n        attribute: attribute,\n        container: container\n      });\n    } : undefined\n  }));\n  return _objectSpread(_objectSpread({}, widget), {}, {\n    init: function init(initOptions) {\n      widgets.forEach(function (cb) {\n        var container = createContainer(rootContainer);\n        var childWidget = cb(container);\n        var attribute = getWidgetAttribute(childWidget, initOptions);\n        containers.set(attribute, container);\n        connectorWidgets.push(childWidget);\n      });\n      widget.init(initOptions);\n    },\n    $$widgetType: 'ais.dynamicWidgets'\n  });\n};\nexport default dynamicWidgets;", "import { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { isSpecialClick, capitalize } from \"../../lib/utils/index.js\";\nvar createItemKey = function createItemKey(_ref) {\n  var attribute = _ref.attribute,\n    value = _ref.value,\n    type = _ref.type,\n    operator = _ref.operator;\n  return [attribute, type, value, operator].map(function (key) {\n    return key;\n  }).filter(Boolean).join(':');\n};\nvar handleClick = function handleClick(callback) {\n  return function (event) {\n    if (isSpecialClick(event)) {\n      return;\n    }\n    event.preventDefault();\n    callback();\n  };\n};\nvar CurrentRefinements = function CurrentRefinements(_ref2) {\n  var items = _ref2.items,\n    cssClasses = _ref2.cssClasses,\n    canRefine = _ref2.canRefine;\n  return h(\"div\", {\n    className: cx(cssClasses.root, !canRefine && cssClasses.noRefinementRoot)\n  }, h(\"ul\", {\n    className: cssClasses.list\n  }, items.map(function (item, index) {\n    return h(\"li\", {\n      key: \"\".concat(item.indexName, \"-\").concat(item.attribute, \"-\").concat(index),\n      className: cssClasses.item\n    }, h(\"span\", {\n      className: cssClasses.label\n    }, capitalize(item.label), \": \"), item.refinements.map(function (refinement) {\n      return h(\"span\", {\n        key: createItemKey(refinement),\n        className: cssClasses.category\n      }, h(\"span\", {\n        className: cssClasses.categoryLabel\n      }, refinement.attribute === 'query' ? h(\"q\", null, refinement.label) : refinement.label), h(\"button\", {\n        className: cssClasses.delete,\n        type: \"button\",\n        onClick: handleClick(item.refine.bind(null, refinement))\n      }, \"\\u2715\"));\n    }));\n  })));\n};\nexport default CurrentRefinements;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { getRefinements, checkRendering, createDocumentationMessageGenerator, noop, warning } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'current-refinements',\n  connector: true\n});\nvar connectCurrentRefinements = function connectCurrentRefinements(renderFn) {\n  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n  checkRendering(renderFn, withUsage());\n  return function (widgetParams) {\n    if ((widgetParams || {}).includedAttributes && (widgetParams || {}).excludedAttributes) {\n      throw new Error(withUsage('The options `includedAttributes` and `excludedAttributes` cannot be used together.'));\n    }\n    var _ref = widgetParams || {},\n      includedAttributes = _ref.includedAttributes,\n      _ref$excludedAttribut = _ref.excludedAttributes,\n      excludedAttributes = _ref$excludedAttribut === void 0 ? ['query'] : _ref$excludedAttribut,\n      _ref$transformItems = _ref.transformItems,\n      transformItems = _ref$transformItems === void 0 ? function (items) {\n        return items;\n      } : _ref$transformItems;\n    return {\n      $$type: 'ais.currentRefinements',\n      init: function init(initOptions) {\n        var instantSearchInstance = initOptions.instantSearchInstance;\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {\n          instantSearchInstance: instantSearchInstance\n        }), true);\n      },\n      render: function render(renderOptions) {\n        var instantSearchInstance = renderOptions.instantSearchInstance;\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(renderOptions)), {}, {\n          instantSearchInstance: instantSearchInstance\n        }), false);\n      },\n      dispose: function dispose() {\n        unmountFn();\n      },\n      getRenderState: function getRenderState(renderState, renderOptions) {\n        return _objectSpread(_objectSpread({}, renderState), {}, {\n          currentRefinements: this.getWidgetRenderState(renderOptions)\n        });\n      },\n      getWidgetRenderState: function getWidgetRenderState(_ref2) {\n        var results = _ref2.results,\n          scopedResults = _ref2.scopedResults,\n          _createURL = _ref2.createURL,\n          helper = _ref2.helper;\n        function getItems() {\n          if (!results) {\n            return transformItems(getRefinementsItems({\n              results: {},\n              helper: helper,\n              indexId: helper.state.index,\n              includedAttributes: includedAttributes,\n              excludedAttributes: excludedAttributes\n            }), {\n              results: results\n            });\n          }\n          return scopedResults.reduce(function (accResults, scopedResult) {\n            return accResults.concat(transformItems(getRefinementsItems({\n              results: scopedResult.results,\n              helper: scopedResult.helper,\n              indexId: scopedResult.indexId,\n              includedAttributes: includedAttributes,\n              excludedAttributes: excludedAttributes\n            }), {\n              results: results\n            }));\n          }, []);\n        }\n        var items = getItems();\n        return {\n          items: items,\n          canRefine: items.length > 0,\n          refine: function refine(refinement) {\n            return clearRefinement(helper, refinement);\n          },\n          createURL: function createURL(refinement) {\n            return _createURL(clearRefinementFromState(helper.state, refinement));\n          },\n          widgetParams: widgetParams\n        };\n      }\n    };\n  };\n};\nfunction getRefinementsItems(_ref3) {\n  var results = _ref3.results,\n    helper = _ref3.helper,\n    indexId = _ref3.indexId,\n    includedAttributes = _ref3.includedAttributes,\n    excludedAttributes = _ref3.excludedAttributes;\n  var includesQuery = (includedAttributes || []).indexOf('query') !== -1 || (excludedAttributes || []).indexOf('query') === -1;\n  var filterFunction = includedAttributes ? function (item) {\n    return includedAttributes.indexOf(item.attribute) !== -1;\n  } : function (item) {\n    return excludedAttributes.indexOf(item.attribute) === -1;\n  };\n  var items = getRefinements(results, helper.state, includesQuery).map(normalizeRefinement).filter(filterFunction);\n  return items.reduce(function (allItems, currentItem) {\n    return [].concat(_toConsumableArray(allItems.filter(function (item) {\n      return item.attribute !== currentItem.attribute;\n    })), [{\n      indexName: helper.state.index,\n      indexId: indexId,\n      attribute: currentItem.attribute,\n      label: currentItem.attribute,\n      refinements: items.filter(function (result) {\n        return result.attribute === currentItem.attribute;\n      })\n      // We want to keep the order of refinements except the numeric ones.\n      .sort(function (a, b) {\n        return a.type === 'numeric' ? a.value - b.value : 0;\n      }),\n      refine: function refine(refinement) {\n        return clearRefinement(helper, refinement);\n      }\n    }]);\n  }, []);\n}\nfunction clearRefinementFromState(state, refinement) {\n  state = state.resetPage();\n  switch (refinement.type) {\n    case 'facet':\n      return state.removeFacetRefinement(refinement.attribute, String(refinement.value));\n    case 'disjunctive':\n      return state.removeDisjunctiveFacetRefinement(refinement.attribute, String(refinement.value));\n    case 'hierarchical':\n      return state.removeHierarchicalFacetRefinement(refinement.attribute);\n    case 'exclude':\n      return state.removeExcludeRefinement(refinement.attribute, String(refinement.value));\n    case 'numeric':\n      return state.removeNumericRefinement(refinement.attribute, refinement.operator, String(refinement.value));\n    case 'tag':\n      return state.removeTagRefinement(String(refinement.value));\n    case 'query':\n      return state.setQueryParameter('query', '');\n    default:\n      process.env.NODE_ENV === 'development' ? warning(false, \"The refinement type \\\"\".concat(refinement.type, \"\\\" does not exist and cannot be cleared from the current refinements.\")) : void 0;\n      return state;\n  }\n}\nfunction clearRefinement(helper, refinement) {\n  helper.setState(clearRefinementFromState(helper.state, refinement)).search();\n}\nfunction getOperatorSymbol(operator) {\n  switch (operator) {\n    case '>=':\n      return '\u2265';\n    case '<=':\n      return '\u2264';\n    default:\n      return operator;\n  }\n}\nfunction normalizeRefinement(refinement) {\n  var value = getValue(refinement);\n  var label = refinement.operator ? \"\".concat(getOperatorSymbol(refinement.operator), \" \").concat(refinement.name) : refinement.name;\n  var normalizedRefinement = {\n    attribute: refinement.attribute,\n    type: refinement.type,\n    value: value,\n    label: label\n  };\n  if (refinement.operator !== undefined) {\n    normalizedRefinement.operator = refinement.operator;\n  }\n  if (refinement.count !== undefined) {\n    normalizedRefinement.count = refinement.count;\n  }\n  if (refinement.exhaustive !== undefined) {\n    normalizedRefinement.exhaustive = refinement.exhaustive;\n  }\n  return normalizedRefinement;\n}\nfunction getValue(refinement) {\n  if (refinement.type === 'numeric') {\n    return Number(refinement.name);\n  }\n  if ('escapedValue' in refinement) {\n    return refinement.escapedValue;\n  }\n  return refinement.name;\n}\nexport default connectCurrentRefinements;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, render } from 'preact';\nimport CurrentRefinements from \"../../components/CurrentRefinements/CurrentRefinements.js\";\nimport connectCurrentRefinements from \"../../connectors/current-refinements/connectCurrentRefinements.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { getContainerNode, createDocumentationMessageGenerator } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'current-refinements'\n});\nvar suit = component('CurrentRefinements');\nvar renderer = function renderer(_ref, isFirstRender) {\n  var items = _ref.items,\n    widgetParams = _ref.widgetParams,\n    canRefine = _ref.canRefine;\n  if (isFirstRender) {\n    return;\n  }\n  var _ref2 = widgetParams,\n    container = _ref2.container,\n    cssClasses = _ref2.cssClasses;\n  render(h(CurrentRefinements, {\n    cssClasses: cssClasses,\n    items: items,\n    canRefine: canRefine\n  }), container);\n};\nvar currentRefinements = function currentRefinements(widgetParams) {\n  var _ref3 = widgetParams || {},\n    container = _ref3.container,\n    includedAttributes = _ref3.includedAttributes,\n    excludedAttributes = _ref3.excludedAttributes,\n    _ref3$cssClasses = _ref3.cssClasses,\n    userCssClasses = _ref3$cssClasses === void 0 ? {} : _ref3$cssClasses,\n    transformItems = _ref3.transformItems;\n  if (!container) {\n    throw new Error(withUsage('The `container` option is required.'));\n  }\n  var containerNode = getContainerNode(container);\n  var cssClasses = {\n    root: cx(suit(), userCssClasses.root),\n    noRefinementRoot: cx(suit({\n      modifierName: 'noRefinement'\n    }), userCssClasses.noRefinementRoot),\n    list: cx(suit({\n      descendantName: 'list'\n    }), userCssClasses.list),\n    item: cx(suit({\n      descendantName: 'item'\n    }), userCssClasses.item),\n    label: cx(suit({\n      descendantName: 'label'\n    }), userCssClasses.label),\n    category: cx(suit({\n      descendantName: 'category'\n    }), userCssClasses.category),\n    categoryLabel: cx(suit({\n      descendantName: 'categoryLabel'\n    }), userCssClasses.categoryLabel),\n    delete: cx(suit({\n      descendantName: 'delete'\n    }), userCssClasses.delete)\n  };\n  var makeWidget = connectCurrentRefinements(renderer, function () {\n    return render(null, containerNode);\n  });\n  return _objectSpread(_objectSpread({}, makeWidget({\n    container: containerNode,\n    cssClasses: cssClasses,\n    includedAttributes: includedAttributes,\n    excludedAttributes: excludedAttributes,\n    transformItems: transformItems\n  })), {}, {\n    $$widgetType: 'ais.currentRefinements'\n  });\n};\nexport default currentRefinements;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { h, createRef, Component } from 'preact';\nimport { noop } from \"../../lib/utils/index.js\";\nimport Template from \"../Template/Template.js\";\nvar defaultProps = {\n  query: '',\n  showSubmit: true,\n  showReset: true,\n  showLoadingIndicator: true,\n  autofocus: false,\n  searchAsYouType: true,\n  ignoreCompositionEvents: false,\n  isSearchStalled: false,\n  disabled: false,\n  ariaLabel: 'Search',\n  onChange: noop,\n  onSubmit: noop,\n  onReset: noop,\n  refine: noop\n};\nvar SearchBox = /*#__PURE__*/function (_Component) {\n  _inherits(SearchBox, _Component);\n  var _super = _createSuper(SearchBox);\n  function SearchBox() {\n    var _this;\n    _classCallCheck(this, SearchBox);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      query: _this.props.query,\n      focused: false\n    });\n    _defineProperty(_assertThisInitialized(_this), \"input\", createRef());\n    _defineProperty(_assertThisInitialized(_this), \"onInput\", function (event) {\n      var _this$props = _this.props,\n        searchAsYouType = _this$props.searchAsYouType,\n        refine = _this$props.refine,\n        onChange = _this$props.onChange;\n      var query = event.target.value;\n      if (!(_this.props.ignoreCompositionEvents && event.isComposing)) {\n        if (searchAsYouType) {\n          refine(query);\n        }\n        _this.setState({\n          query: query\n        });\n        onChange(event);\n      }\n    });\n    _defineProperty(_assertThisInitialized(_this), \"onSubmit\", function (event) {\n      var _this$props2 = _this.props,\n        searchAsYouType = _this$props2.searchAsYouType,\n        refine = _this$props2.refine,\n        onSubmit = _this$props2.onSubmit;\n      event.preventDefault();\n      event.stopPropagation();\n      if (_this.input.current) {\n        _this.input.current.blur();\n      }\n      if (!searchAsYouType) {\n        refine(_this.state.query);\n      }\n      onSubmit(event);\n      return false;\n    });\n    _defineProperty(_assertThisInitialized(_this), \"onReset\", function (event) {\n      var _this$props3 = _this.props,\n        refine = _this$props3.refine,\n        onReset = _this$props3.onReset;\n      var query = '';\n      if (_this.input.current) {\n        _this.input.current.focus();\n      }\n      refine(query);\n      _this.setState({\n        query: query\n      });\n      onReset(event);\n    });\n    _defineProperty(_assertThisInitialized(_this), \"onBlur\", function () {\n      _this.setState({\n        focused: false\n      });\n    });\n    _defineProperty(_assertThisInitialized(_this), \"onFocus\", function () {\n      _this.setState({\n        focused: true\n      });\n    });\n    return _this;\n  }\n  _createClass(SearchBox, [{\n    key: \"resetInput\",\n    value:\n    /**\n     * This public method is used in the RefinementList SFFV search box\n     * to reset the input state when an item is selected.\n     *\n     * @see RefinementList#componentWillReceiveProps\n     * @return {undefined}\n     */\n    function resetInput() {\n      this.setState({\n        query: ''\n      });\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      /**\n       * when the user is typing, we don't want to replace the query typed\n       * by the user (state.query) with the query exposed by the connector (props.query)\n       * see: https://github.com/algolia/instantsearch/issues/4141\n       */\n      if (!this.state.focused && nextProps.query !== this.state.query) {\n        this.setState({\n          query: nextProps.query\n        });\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props4 = this.props,\n        cssClasses = _this$props4.cssClasses,\n        placeholder = _this$props4.placeholder,\n        autofocus = _this$props4.autofocus,\n        showSubmit = _this$props4.showSubmit,\n        showReset = _this$props4.showReset,\n        showLoadingIndicator = _this$props4.showLoadingIndicator,\n        templates = _this$props4.templates,\n        isSearchStalled = _this$props4.isSearchStalled,\n        ariaLabel = _this$props4.ariaLabel;\n      return h(\"div\", {\n        className: cssClasses.root\n      }, h(\"form\", {\n        action: \"\",\n        role: \"search\",\n        className: cssClasses.form,\n        noValidate: true,\n        onSubmit: this.onSubmit,\n        onReset: this.onReset\n      }, h(\"input\", {\n        ref: this.input,\n        value: this.state.query,\n        disabled: this.props.disabled,\n        className: cssClasses.input,\n        type: \"search\",\n        placeholder: placeholder,\n        autoFocus: autofocus,\n        autoComplete: \"off\",\n        autoCorrect: \"off\",\n        autoCapitalize: \"off\"\n        // @ts-expect-error `spellCheck` attribute is missing in preact JSX types\n        ,\n        spellCheck: \"false\",\n        maxLength: 512,\n        onInput: this.onInput\n        // see: https://github.com/preactjs/preact/issues/1978\n        // eslint-disable-next-line react/no-unknown-property\n        ,\n        oncompositionend: this.onInput,\n        onBlur: this.onBlur,\n        onFocus: this.onFocus,\n        \"aria-label\": ariaLabel\n      }), h(Template, {\n        templateKey: \"submit\",\n        rootTagName: \"button\",\n        rootProps: {\n          className: cssClasses.submit,\n          type: 'submit',\n          title: 'Submit the search query',\n          hidden: !showSubmit\n        },\n        templates: templates,\n        data: {\n          cssClasses: cssClasses\n        }\n      }), h(Template, {\n        templateKey: \"reset\",\n        rootTagName: \"button\",\n        rootProps: {\n          className: cssClasses.reset,\n          type: 'reset',\n          title: 'Clear the search query',\n          hidden: !(showReset && this.state.query.trim() && !isSearchStalled)\n        },\n        templates: templates,\n        data: {\n          cssClasses: cssClasses\n        }\n      }), showLoadingIndicator && h(Template, {\n        templateKey: \"loadingIndicator\",\n        rootTagName: \"span\",\n        rootProps: {\n          className: cssClasses.loadingIndicator,\n          hidden: !isSearchStalled\n        },\n        templates: templates,\n        data: {\n          cssClasses: cssClasses\n        }\n      })));\n    }\n  }]);\n  return SearchBox;\n}(Component);\n_defineProperty(SearchBox, \"defaultProps\", defaultProps);\nexport default SearchBox;", "function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { h } from 'preact';\nimport Template from \"../Template/Template.js\";\nfunction RefinementListItem(_ref) {\n  var className = _ref.className,\n    handleClick = _ref.handleClick,\n    facetValueToRefine = _ref.facetValueToRefine,\n    isRefined = _ref.isRefined,\n    templateProps = _ref.templateProps,\n    templateKey = _ref.templateKey,\n    templateData = _ref.templateData,\n    subItems = _ref.subItems;\n  return h(\"li\", {\n    className: className,\n    onClick: function onClick(originalEvent) {\n      handleClick({\n        facetValueToRefine: facetValueToRefine,\n        isRefined: isRefined,\n        originalEvent: originalEvent\n      });\n    }\n  }, h(Template, _extends({}, templateProps, {\n    templateKey: templateKey,\n    data: templateData\n  })), subItems);\n}\nexport default RefinementListItem;", "var _excluded = [\"root\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, createRef, Component } from 'preact';\nimport { isSpecialClick, isEqual } from \"../../lib/utils/index.js\";\nimport SearchBox from \"../SearchBox/SearchBox.js\";\nimport Template from \"../Template/Template.js\";\nimport RefinementListItem from \"./RefinementListItem.js\";\n\n// CSS types\n\nvar defaultProps = {\n  cssClasses: {},\n  depth: 0\n};\nfunction isHierarchicalMenuItem(facetValue) {\n  return facetValue.data !== undefined;\n}\nvar RefinementList = /*#__PURE__*/function (_Component) {\n  _inherits(RefinementList, _Component);\n  var _super = _createSuper(RefinementList);\n  function RefinementList() {\n    var _this;\n    _classCallCheck(this, RefinementList);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"searchBox\", createRef());\n    _defineProperty(_assertThisInitialized(_this), \"_generateFacetItem\", function (facetValue) {\n      var subItems;\n      if (isHierarchicalMenuItem(facetValue) && Array.isArray(facetValue.data) && facetValue.data.length > 0) {\n        var _this$props$cssClasse = _this.props.cssClasses,\n          root = _this$props$cssClasse.root,\n          cssClasses = _objectWithoutProperties(_this$props$cssClasse, _excluded);\n        subItems = h(RefinementList, _extends({}, _this.props, {\n          // We want to keep `root` required for external usage but not for the\n          // sub items.\n          cssClasses: cssClasses,\n          depth: _this.props.depth + 1,\n          facetValues: facetValue.data,\n          showMore: false,\n          className: _this.props.cssClasses.childList\n        }));\n      }\n      var url = _this.props.createURL(facetValue.value);\n      var templateData = _objectSpread(_objectSpread({}, facetValue), {}, {\n        url: url,\n        attribute: _this.props.attribute,\n        cssClasses: _this.props.cssClasses,\n        isFromSearch: _this.props.isFromSearch\n      });\n      var key = facetValue.value;\n      if (facetValue.isRefined !== undefined) {\n        key += \"/\".concat(facetValue.isRefined);\n      }\n      if (facetValue.count !== undefined) {\n        key += \"/\".concat(facetValue.count);\n      }\n      var refinementListItemClassName = cx(_this.props.cssClasses.item, facetValue.isRefined && _this.props.cssClasses.selectedItem, !facetValue.count && _this.props.cssClasses.disabledItem, Boolean(isHierarchicalMenuItem(facetValue) && Array.isArray(facetValue.data) && facetValue.data.length > 0) && _this.props.cssClasses.parentItem);\n      return h(RefinementListItem, {\n        templateKey: \"item\",\n        key: key,\n        facetValueToRefine: facetValue.value,\n        handleClick: _this.handleItemClick,\n        isRefined: facetValue.isRefined,\n        className: refinementListItemClassName,\n        subItems: subItems,\n        templateData: templateData,\n        templateProps: _this.props.templateProps\n      });\n    });\n    // Click events on DOM tree like LABEL > INPUT will result in two click events\n    // instead of one.\n    // No matter the framework, see https://www.google.com/search?q=click+label+twice\n    //\n    // Thus making it hard to distinguish activation from deactivation because both click events\n    // are very close. Debounce is a solution but hacky.\n    //\n    // So the code here checks if the click was done on or in a LABEL. If this LABEL\n    // has a checkbox inside, we ignore the first click event because we will get another one.\n    //\n    // We also check if the click was done inside a link and then e.preventDefault() because we already\n    // handle the url\n    //\n    // Finally, we always stop propagation of the event to avoid multiple levels RefinementLists to fail: click\n    // on child would click on parent also\n    _defineProperty(_assertThisInitialized(_this), \"handleItemClick\", function (_ref) {\n      var facetValueToRefine = _ref.facetValueToRefine,\n        isRefined = _ref.isRefined,\n        originalEvent = _ref.originalEvent;\n      if (isSpecialClick(originalEvent)) {\n        // do not alter the default browser behavior\n        // if one special key is down\n        return;\n      }\n      var parent = originalEvent.target;\n      if (parent === null || parent.parentNode === null) {\n        return;\n      }\n      if (isRefined && parent.parentNode.querySelector('input[type=\"radio\"]:checked')) {\n        // Prevent refinement for being reset if the user clicks on an already checked radio button\n        return;\n      }\n      if (parent.tagName === 'INPUT') {\n        _this.refine(facetValueToRefine);\n        return;\n      }\n      while (parent !== originalEvent.currentTarget) {\n        if (parent.tagName === 'LABEL' && (parent.querySelector('input[type=\"checkbox\"]') || parent.querySelector('input[type=\"radio\"]'))) {\n          return;\n        }\n        if (parent.tagName === 'A' && parent.href) {\n          originalEvent.preventDefault();\n        }\n        parent = parent.parentNode;\n      }\n      originalEvent.stopPropagation();\n      _this.refine(facetValueToRefine);\n    });\n    return _this;\n  }\n  _createClass(RefinementList, [{\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps) {\n      var areFacetValuesDifferent = !isEqual(this.props.facetValues, nextProps.facetValues);\n      return areFacetValuesDifferent;\n    }\n  }, {\n    key: \"refine\",\n    value: function refine(facetValueToRefine) {\n      this.props.toggleRefinement(facetValueToRefine);\n    }\n  }, {\n    key: \"componentWillReceiveProps\",\n    value: function componentWillReceiveProps(nextProps) {\n      if (this.searchBox.current && !nextProps.isFromSearch) {\n        this.searchBox.current.resetInput();\n      }\n    }\n  }, {\n    key: \"refineFirstValue\",\n    value: function refineFirstValue() {\n      var firstValue = this.props.facetValues && this.props.facetValues[0];\n      if (firstValue) {\n        var actualValue = firstValue.value;\n        this.props.toggleRefinement(actualValue);\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this2 = this;\n      var showMoreButtonClassName = cx(this.props.cssClasses.showMore, !(this.props.showMore === true && this.props.canToggleShowMore) && this.props.cssClasses.disabledShowMore);\n      var showMoreButton = this.props.showMore === true && h(Template, _extends({}, this.props.templateProps, {\n        templateKey: \"showMoreText\",\n        rootTagName: \"button\",\n        rootProps: {\n          className: showMoreButtonClassName,\n          disabled: !this.props.canToggleShowMore,\n          onClick: this.props.toggleShowMore\n        },\n        data: {\n          isShowingMore: this.props.isShowingMore\n        }\n      }));\n      var shouldDisableSearchBox = this.props.searchIsAlwaysActive !== true && !(this.props.isFromSearch || !this.props.hasExhaustiveItems);\n      var searchBox = this.props.searchFacetValues && h(\"div\", {\n        className: this.props.cssClasses.searchBox\n      }, h(SearchBox, {\n        ref: this.searchBox,\n        placeholder: this.props.searchPlaceholder,\n        disabled: shouldDisableSearchBox,\n        cssClasses: this.props.cssClasses.searchable,\n        templates: this.props.searchBoxTemplateProps.templates,\n        onChange: function onChange(event) {\n          return _this2.props.searchFacetValues(event.target.value);\n        },\n        onReset: function onReset() {\n          return _this2.props.searchFacetValues('');\n        },\n        onSubmit: function onSubmit() {\n          return _this2.refineFirstValue();\n        }\n        // This sets the search box to a controlled state because\n        // we don't rely on the `refine` prop but on `onChange`.\n        ,\n        searchAsYouType: false,\n        ariaLabel: \"Search for filters\"\n      }));\n      var facetValues = this.props.facetValues && this.props.facetValues.length > 0 && h(\"ul\", {\n        className: this.props.cssClasses.list\n      }, this.props.facetValues.map(this._generateFacetItem, this));\n      var noResults = this.props.searchFacetValues && this.props.isFromSearch && (!this.props.facetValues || this.props.facetValues.length === 0) && h(Template, _extends({}, this.props.templateProps, {\n        templateKey: \"searchableNoResults\",\n        rootProps: {\n          className: this.props.cssClasses.noResults\n        }\n      }));\n      var rootClassName = cx(this.props.cssClasses.root, (!this.props.facetValues || this.props.facetValues.length === 0) && this.props.cssClasses.noRefinementRoot, this.props.className);\n      return h(\"div\", {\n        className: rootClassName\n      }, this.props.children, searchBox, facetValues, noResults, showMoreButton);\n    }\n  }]);\n  return RefinementList;\n}(Component);\n_defineProperty(RefinementList, \"defaultProps\", defaultProps);\nexport default RefinementList;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { uniq, find, createDocumentationMessageGenerator, warning } from \"../utils/index.js\";\nvar getSelectedHits = function getSelectedHits(hits, selectedObjectIDs) {\n  return selectedObjectIDs.map(function (objectID) {\n    var hit = find(hits, function (h) {\n      return h.objectID === objectID;\n    });\n    if (typeof hit === 'undefined') {\n      throw new Error(\"Could not find objectID \\\"\".concat(objectID, \"\\\" passed to `clickedObjectIDsAfterSearch` in the returned hits. This is necessary to infer the absolute position and the query ID.\"));\n    }\n    return hit;\n  });\n};\nvar getQueryID = function getQueryID(selectedHits) {\n  var queryIDs = uniq(selectedHits.map(function (hit) {\n    return hit.__queryID;\n  }));\n  if (queryIDs.length > 1) {\n    throw new Error('Insights currently allows a single `queryID`. The `objectIDs` provided map to multiple `queryID`s.');\n  }\n  var queryID = queryIDs[0];\n  if (typeof queryID !== 'string') {\n    throw new Error(\"Could not infer `queryID`. Ensure InstantSearch `clickAnalytics: true` was added with the Configure widget.\\n\\nSee: https://alg.li/lNiZZ7\");\n  }\n  return queryID;\n};\nvar getPositions = function getPositions(selectedHits) {\n  return selectedHits.map(function (hit) {\n    return hit.__position;\n  });\n};\nexport var inferPayload = function inferPayload(_ref) {\n  var method = _ref.method,\n    results = _ref.results,\n    hits = _ref.hits,\n    objectIDs = _ref.objectIDs;\n  var index = results.index;\n  var selectedHits = getSelectedHits(hits, objectIDs);\n  var queryID = getQueryID(selectedHits);\n  switch (method) {\n    case 'clickedObjectIDsAfterSearch':\n      {\n        var positions = getPositions(selectedHits);\n        return {\n          index: index,\n          queryID: queryID,\n          objectIDs: objectIDs,\n          positions: positions\n        };\n      }\n    case 'convertedObjectIDsAfterSearch':\n      return {\n        index: index,\n        queryID: queryID,\n        objectIDs: objectIDs\n      };\n    default:\n      throw new Error(\"Unsupported method passed to insights: \\\"\".concat(method, \"\\\".\"));\n  }\n};\nvar wrapInsightsClient = function wrapInsightsClient(aa, results, hits) {\n  return function (method) {\n    for (var _len = arguments.length, payloads = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      payloads[_key - 1] = arguments[_key];\n    }\n    var payload = payloads[0];\n    process.env.NODE_ENV === 'development' ? warning(false, \"`insights` function has been deprecated. It is still supported in 4.x releases, but not further. It is replaced by the `insights` middleware.\\n\\nFor more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/\") : void 0;\n    if (!aa) {\n      var withInstantSearchUsage = createDocumentationMessageGenerator({\n        name: 'instantsearch'\n      });\n      throw new Error(withInstantSearchUsage('The `insightsClient` option has not been provided to `instantsearch`.'));\n    }\n    if (!Array.isArray(payload.objectIDs)) {\n      throw new TypeError('Expected `objectIDs` to be an array.');\n    }\n    var inferredPayload = inferPayload({\n      method: method,\n      results: results,\n      hits: hits,\n      objectIDs: payload.objectIDs\n    });\n    aa(method, _objectSpread(_objectSpread({}, inferredPayload), payload));\n  };\n};\n\n/**\n * @deprecated This function will be still supported in 4.x releases, but not further. It is replaced by the `insights` middleware. For more information, visit https://www.algolia.com/doc/guides/getting-insights-and-analytics/search-analytics/click-through-and-conversions/how-to/send-click-and-conversion-events-with-instantsearch/js/\n * It passes `insights` to `HitsWithInsightsListener` and `InfiniteHitsWithInsightsListener`.\n */\nexport default function withInsights(connector) {\n  return function (renderFn, unmountFn) {\n    return connector(function (renderOptions, isFirstRender) {\n      var results = renderOptions.results,\n        hits = renderOptions.hits,\n        instantSearchInstance = renderOptions.instantSearchInstance;\n      if (results && hits && instantSearchInstance) {\n        var insights = wrapInsightsClient(instantSearchInstance.insightsClient, results, hits);\n        return renderFn(_objectSpread(_objectSpread({}, renderOptions), {}, {\n          insights: insights\n        }), isFirstRender);\n      }\n      return renderFn(renderOptions, isFirstRender);\n    }, unmountFn);\n  };\n}", "import { h } from 'preact';\nimport { readDataAttributes } from \"../../helpers/insights.js\";\nimport { deserializePayload, warning } from \"../utils/index.js\";\nexport var createInsightsEventHandler = function createInsightsEventHandler(_ref) {\n  var insights = _ref.insights,\n    sendEvent = _ref.sendEvent;\n  return function (event) {\n    // new way, e.g. bindEvent(\"click\", hit, \"Hit clicked\")\n    var insightsThroughSendEvent = findInsightsTarget(event.target, event.currentTarget, function (element) {\n      return element.hasAttribute('data-insights-event');\n    });\n    if (insightsThroughSendEvent) {\n      var payload = parseInsightsEvent(insightsThroughSendEvent);\n      payload.forEach(function (single) {\n        return sendEvent(single);\n      });\n    }\n\n    // old way, e.g. instantsearch.insights(\"clickedObjectIDsAfterSearch\", { .. })\n    var insightsThroughFunction = findInsightsTarget(event.target, event.currentTarget, function (element) {\n      return element.hasAttribute('data-insights-method') && element.hasAttribute('data-insights-payload');\n    });\n    if (insightsThroughFunction) {\n      var _readDataAttributes = readDataAttributes(insightsThroughFunction),\n        method = _readDataAttributes.method,\n        _payload = _readDataAttributes.payload;\n      insights(method, _payload);\n    }\n  };\n};\nfunction findInsightsTarget(startElement, endElement, validator) {\n  var element = startElement;\n  while (element && !validator(element)) {\n    if (element === endElement) {\n      return null;\n    }\n    element = element.parentElement;\n  }\n  return element;\n}\nfunction parseInsightsEvent(element) {\n  var serializedPayload = element.getAttribute('data-insights-event');\n  if (typeof serializedPayload !== 'string') {\n    throw new Error('The insights middleware expects `data-insights-event` to be a base64-encoded JSON string.');\n  }\n  try {\n    return deserializePayload(serializedPayload);\n  } catch (error) {\n    throw new Error('The insights middleware was unable to parse `data-insights-event`.');\n  }\n}\n\n/**\n * @deprecated use `sendEvent` directly instead\n */\nexport default function withInsightsListener(BaseComponent) {\n  process.env.NODE_ENV === 'development' ? warning(false, 'The `withInsightsListener` function is deprecated and will be removed in the next major version. Please use `sendEvent` directly instead.') : void 0;\n  return function WithInsightsListener(props) {\n    var handleClick = createInsightsEventHandler(props);\n    return h(\"div\", {\n      onClick: handleClick\n    }, h(BaseComponent, props));\n  };\n}", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { createInsightsEventHandler } from \"../../lib/insights/listener.js\";\nimport { warning } from \"../../lib/utils/index.js\";\nimport Template from \"../Template/Template.js\";\nvar InfiniteHits = function InfiniteHits(_ref) {\n  var results = _ref.results,\n    hits = _ref.hits,\n    insights = _ref.insights,\n    bindEvent = _ref.bindEvent,\n    sendEvent = _ref.sendEvent,\n    hasShowPrevious = _ref.hasShowPrevious,\n    showPrevious = _ref.showPrevious,\n    showMore = _ref.showMore,\n    isFirstPage = _ref.isFirstPage,\n    isLastPage = _ref.isLastPage,\n    cssClasses = _ref.cssClasses,\n    templateProps = _ref.templateProps;\n  var handleInsightsClick = createInsightsEventHandler({\n    insights: insights,\n    sendEvent: sendEvent\n  });\n  if (results.hits.length === 0) {\n    return h(Template, _extends({}, templateProps, {\n      templateKey: \"empty\",\n      rootProps: {\n        className: cx(cssClasses.root, cssClasses.emptyRoot),\n        onClick: handleInsightsClick\n      },\n      data: results\n    }));\n  }\n  return h(\"div\", {\n    className: cssClasses.root\n  }, hasShowPrevious && h(Template, _extends({}, templateProps, {\n    templateKey: \"showPreviousText\",\n    rootTagName: \"button\",\n    rootProps: {\n      className: cx(cssClasses.loadPrevious, isFirstPage && cssClasses.disabledLoadPrevious),\n      disabled: isFirstPage,\n      onClick: showPrevious\n    }\n  })), h(\"ol\", {\n    className: cssClasses.list\n  }, hits.map(function (hit, index) {\n    return h(Template, _extends({}, templateProps, {\n      templateKey: \"item\",\n      rootTagName: \"li\",\n      rootProps: {\n        className: cssClasses.item,\n        onClick: function onClick(event) {\n          handleInsightsClick(event);\n          sendEvent('click:internal', hit, 'Hit Clicked');\n        },\n        onAuxClick: function onAuxClick(event) {\n          handleInsightsClick(event);\n          sendEvent('click:internal', hit, 'Hit Clicked');\n        }\n      },\n      key: hit.objectID,\n      data: _objectSpread(_objectSpread({}, hit), {}, {\n        get __hitIndex() {\n          process.env.NODE_ENV === 'development' ? warning(false, 'The `__hitIndex` property is deprecated. Use the absolute `__position` instead.') : void 0;\n          return index;\n        }\n      }),\n      bindEvent: bindEvent,\n      sendEvent: sendEvent\n    }));\n  })), h(Template, _extends({}, templateProps, {\n    templateKey: \"showMoreText\",\n    rootTagName: \"button\",\n    rootProps: {\n      className: cx(cssClasses.loadMore, isLastPage && cssClasses.disabledLoadMore),\n      disabled: isLastPage,\n      onClick: showMore\n    }\n  })));\n};\nexport default InfiniteHits;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"page\"],\n  _excluded2 = [\"clickAnalytics\", \"userToken\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { escapeHits, TAG_PLACEHOLDER, checkRendering, createDocumentationMessageGenerator, isEqual, addAbsolutePosition, addQueryID, noop, createSendEventForHits, createBindEventForHits, walkIndex } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'infinite-hits',\n  connector: true\n});\nfunction getStateWithoutPage(state) {\n  var _ref = state || {},\n    page = _ref.page,\n    rest = _objectWithoutProperties(_ref, _excluded);\n  return rest;\n}\nfunction normalizeState(state) {\n  var _ref2 = state || {},\n    clickAnalytics = _ref2.clickAnalytics,\n    userToken = _ref2.userToken,\n    rest = _objectWithoutProperties(_ref2, _excluded2);\n  return rest;\n}\nfunction getInMemoryCache() {\n  var cachedHits = null;\n  var cachedState = null;\n  return {\n    read: function read(_ref3) {\n      var state = _ref3.state;\n      return isEqual(cachedState, getStateWithoutPage(state)) ? cachedHits : null;\n    },\n    write: function write(_ref4) {\n      var state = _ref4.state,\n        hits = _ref4.hits;\n      cachedState = getStateWithoutPage(state);\n      cachedHits = hits;\n    }\n  };\n}\nfunction extractHitsFromCachedHits(cachedHits) {\n  return Object.keys(cachedHits).map(Number).sort(function (a, b) {\n    return a - b;\n  }).reduce(function (acc, page) {\n    return acc.concat(cachedHits[page]);\n  }, []);\n}\nvar connectInfiniteHits = function connectInfiniteHits(renderFn) {\n  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n  checkRendering(renderFn, withUsage());\n\n  // @TODO: this should be a generic, but a Connector can not yet be generic itself\n\n  return function (widgetParams) {\n    var _ref5 = widgetParams || {},\n      _ref5$escapeHTML = _ref5.escapeHTML,\n      escapeHTML = _ref5$escapeHTML === void 0 ? true : _ref5$escapeHTML,\n      _ref5$transformItems = _ref5.transformItems,\n      transformItems = _ref5$transformItems === void 0 ? function (items) {\n        return items;\n      } : _ref5$transformItems,\n      _ref5$cache = _ref5.cache,\n      cache = _ref5$cache === void 0 ? getInMemoryCache() : _ref5$cache;\n    var showPrevious;\n    var showMore;\n    var sendEvent;\n    var bindEvent;\n    var getFirstReceivedPage = function getFirstReceivedPage(state, cachedHits) {\n      var _state$page = state.page,\n        page = _state$page === void 0 ? 0 : _state$page;\n      var pages = Object.keys(cachedHits).map(Number);\n      if (pages.length === 0) {\n        return page;\n      } else {\n        return Math.min.apply(Math, [page].concat(_toConsumableArray(pages)));\n      }\n    };\n    var getLastReceivedPage = function getLastReceivedPage(state, cachedHits) {\n      var _state$page2 = state.page,\n        page = _state$page2 === void 0 ? 0 : _state$page2;\n      var pages = Object.keys(cachedHits).map(Number);\n      if (pages.length === 0) {\n        return page;\n      } else {\n        return Math.max.apply(Math, [page].concat(_toConsumableArray(pages)));\n      }\n    };\n    var getShowPrevious = function getShowPrevious(helper) {\n      return function () {\n        // Using the helper's `overrideStateWithoutTriggeringChangeEvent` method\n        // avoid updating the browser URL when the user displays the previous page.\n        helper.overrideStateWithoutTriggeringChangeEvent(_objectSpread(_objectSpread({}, helper.state), {}, {\n          page: getFirstReceivedPage(helper.state, cache.read({\n            state: normalizeState(helper.state)\n          }) || {}) - 1\n        })).searchWithoutTriggeringOnStateChange();\n      };\n    };\n    var getShowMore = function getShowMore(helper) {\n      return function () {\n        helper.setPage(getLastReceivedPage(helper.state, cache.read({\n          state: normalizeState(helper.state)\n        }) || {}) + 1).search();\n      };\n    };\n    return {\n      $$type: 'ais.infiniteHits',\n      init: function init(initOptions) {\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {\n          instantSearchInstance: initOptions.instantSearchInstance\n        }), true);\n      },\n      render: function render(renderOptions) {\n        var instantSearchInstance = renderOptions.instantSearchInstance;\n        var widgetRenderState = this.getWidgetRenderState(renderOptions);\n        renderFn(_objectSpread(_objectSpread({}, widgetRenderState), {}, {\n          instantSearchInstance: instantSearchInstance\n        }), false);\n        sendEvent('view:internal', widgetRenderState.currentPageHits);\n      },\n      getRenderState: function getRenderState(renderState, renderOptions) {\n        return _objectSpread(_objectSpread({}, renderState), {}, {\n          infiniteHits: this.getWidgetRenderState(renderOptions)\n        });\n      },\n      getWidgetRenderState: function getWidgetRenderState(_ref6) {\n        var results = _ref6.results,\n          helper = _ref6.helper,\n          parent = _ref6.parent,\n          existingState = _ref6.state,\n          instantSearchInstance = _ref6.instantSearchInstance;\n        var isFirstPage;\n        var currentPageHits = [];\n        /**\n         * We bail out of optimistic UI here, as the cache is based on search\n         * parameters, and we don't want to invalidate the cache when the search\n         * is loading.\n         */\n        var state = parent.getPreviousState() || existingState;\n        var cachedHits = cache.read({\n          state: normalizeState(state)\n        }) || {};\n        if (!results) {\n          showPrevious = getShowPrevious(helper);\n          showMore = getShowMore(helper);\n          sendEvent = createSendEventForHits({\n            instantSearchInstance: instantSearchInstance,\n            getIndex: function getIndex() {\n              return helper.getIndex();\n            },\n            widgetType: this.$$type\n          });\n          bindEvent = createBindEventForHits({\n            getIndex: function getIndex() {\n              return helper.getIndex();\n            },\n            widgetType: this.$$type,\n            instantSearchInstance: instantSearchInstance\n          });\n          isFirstPage = state.page === undefined || getFirstReceivedPage(state, cachedHits) === 0;\n        } else {\n          var _state$disjunctiveFac, _state$hierarchicalFa;\n          var _state$page3 = state.page,\n            _page = _state$page3 === void 0 ? 0 : _state$page3;\n          if (escapeHTML && results.hits.length > 0) {\n            results.hits = escapeHits(results.hits);\n          }\n          var hitsWithAbsolutePosition = addAbsolutePosition(results.hits, results.page, results.hitsPerPage);\n          var hitsWithAbsolutePositionAndQueryID = addQueryID(hitsWithAbsolutePosition, results.queryID);\n          var transformedHits = transformItems(hitsWithAbsolutePositionAndQueryID, {\n            results: results\n          });\n\n          /*\n            With dynamic widgets, facets are not included in the state before their relevant widgets are mounted. Until then, we need to bail out of writing this incomplete state representation in cache.\n          */\n          var hasDynamicWidgets = false;\n          walkIndex(instantSearchInstance.mainIndex, function (indexWidget) {\n            if (!hasDynamicWidgets && indexWidget.getWidgets().some(function (_ref7) {\n              var $$type = _ref7.$$type;\n              return $$type === 'ais.dynamicWidgets';\n            })) {\n              hasDynamicWidgets = true;\n            }\n          });\n          var hasNoFacets = !((_state$disjunctiveFac = state.disjunctiveFacets) !== null && _state$disjunctiveFac !== void 0 && _state$disjunctiveFac.length) && !(state.facets || []).filter(function (f) {\n            return f !== '*';\n          }).length && !((_state$hierarchicalFa = state.hierarchicalFacets) !== null && _state$hierarchicalFa !== void 0 && _state$hierarchicalFa.length);\n          if (cachedHits[_page] === undefined && !results.__isArtificial && instantSearchInstance.status === 'idle' && !(hasDynamicWidgets && hasNoFacets)) {\n            cachedHits[_page] = transformedHits;\n            cache.write({\n              state: normalizeState(state),\n              hits: cachedHits\n            });\n          }\n          currentPageHits = transformedHits;\n          isFirstPage = getFirstReceivedPage(state, cachedHits) === 0;\n        }\n        var hits = extractHitsFromCachedHits(cachedHits);\n        var isLastPage = results ? results.nbPages <= getLastReceivedPage(state, cachedHits) + 1 : true;\n        return {\n          hits: hits,\n          currentPageHits: currentPageHits,\n          sendEvent: sendEvent,\n          bindEvent: bindEvent,\n          results: results,\n          showPrevious: showPrevious,\n          showMore: showMore,\n          isFirstPage: isFirstPage,\n          isLastPage: isLastPage,\n          widgetParams: widgetParams\n        };\n      },\n      dispose: function dispose(_ref8) {\n        var state = _ref8.state;\n        unmountFn();\n        var stateWithoutPage = state.setQueryParameter('page', undefined);\n        if (!escapeHTML) {\n          return stateWithoutPage;\n        }\n        return stateWithoutPage.setQueryParameters(Object.keys(TAG_PLACEHOLDER).reduce(function (acc, key) {\n          return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, undefined));\n        }, {}));\n      },\n      getWidgetUiState: function getWidgetUiState(uiState, _ref9) {\n        var searchParameters = _ref9.searchParameters;\n        var page = searchParameters.page || 0;\n        if (!page) {\n          // return without adding `page` to uiState\n          // because we don't want `page=1` in the URL\n          return uiState;\n        }\n        return _objectSpread(_objectSpread({}, uiState), {}, {\n          // The page in the UI state is incremented by one\n          // to expose the user value (not `0`).\n          page: page + 1\n        });\n      },\n      getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref10) {\n        var uiState = _ref10.uiState;\n        var widgetSearchParameters = searchParameters;\n        if (escapeHTML) {\n          // @MAJOR: set this globally, not in the InfiniteHits widget to allow InfiniteHits to be conditionally used\n          widgetSearchParameters = searchParameters.setQueryParameters(TAG_PLACEHOLDER);\n        }\n\n        // The page in the search parameters is decremented by one\n        // to get to the actual parameter value from the UI state.\n        var page = uiState.page ? uiState.page - 1 : 0;\n        return widgetSearchParameters.setQueryParameter('page', page);\n      }\n    };\n  };\n};\nexport default connectInfiniteHits;", "import { omit } from \"../../lib/utils/index.js\";\nvar defaultTemplates = {\n  empty: function empty() {\n    return 'No results';\n  },\n  showPreviousText: function showPreviousText() {\n    return 'Show previous results';\n  },\n  showMoreText: function showMoreText() {\n    return 'Show more results';\n  },\n  item: function item(data) {\n    return JSON.stringify(omit(data, ['__hitIndex']), null, 2);\n  }\n};\nexport default defaultTemplates;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, render } from 'preact';\nimport InfiniteHits from \"../../components/InfiniteHits/InfiniteHits.js\";\nimport connectInfiniteHits from \"../../connectors/infinite-hits/connectInfiniteHits.js\";\nimport { withInsights } from \"../../lib/insights/index.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { prepareTemplateProps } from \"../../lib/templating/index.js\";\nimport { getContainerNode, createDocumentationMessageGenerator } from \"../../lib/utils/index.js\";\nimport defaultTemplates from \"./defaultTemplates.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'infinite-hits'\n});\nvar suit = component('InfiniteHits');\nvar renderer = function renderer(_ref) {\n  var containerNode = _ref.containerNode,\n    cssClasses = _ref.cssClasses,\n    renderState = _ref.renderState,\n    templates = _ref.templates,\n    hasShowPrevious = _ref.showPrevious;\n  return function (_ref2, isFirstRendering) {\n    var hits = _ref2.hits,\n      results = _ref2.results,\n      showMore = _ref2.showMore,\n      showPrevious = _ref2.showPrevious,\n      isFirstPage = _ref2.isFirstPage,\n      isLastPage = _ref2.isLastPage,\n      instantSearchInstance = _ref2.instantSearchInstance,\n      insights = _ref2.insights,\n      bindEvent = _ref2.bindEvent,\n      sendEvent = _ref2.sendEvent;\n    if (isFirstRendering) {\n      renderState.templateProps = prepareTemplateProps({\n        defaultTemplates: defaultTemplates,\n        templatesConfig: instantSearchInstance.templatesConfig,\n        templates: templates\n      });\n      return;\n    }\n    render(h(InfiniteHits, {\n      cssClasses: cssClasses,\n      hits: hits,\n      results: results,\n      hasShowPrevious: hasShowPrevious,\n      showPrevious: showPrevious,\n      showMore: showMore,\n      templateProps: renderState.templateProps,\n      isFirstPage: isFirstPage,\n      isLastPage: isLastPage,\n      insights: insights,\n      sendEvent: sendEvent,\n      bindEvent: bindEvent\n    }), containerNode);\n  };\n};\nvar infiniteHits = function infiniteHits(widgetParams) {\n  var _ref3 = widgetParams || {},\n    container = _ref3.container,\n    escapeHTML = _ref3.escapeHTML,\n    transformItems = _ref3.transformItems,\n    _ref3$templates = _ref3.templates,\n    templates = _ref3$templates === void 0 ? {} : _ref3$templates,\n    _ref3$cssClasses = _ref3.cssClasses,\n    userCssClasses = _ref3$cssClasses === void 0 ? {} : _ref3$cssClasses,\n    showPrevious = _ref3.showPrevious,\n    cache = _ref3.cache;\n  if (!container) {\n    throw new Error(withUsage('The `container` option is required.'));\n  }\n  var containerNode = getContainerNode(container);\n  var cssClasses = {\n    root: cx(suit(), userCssClasses.root),\n    emptyRoot: cx(suit({\n      modifierName: 'empty'\n    }), userCssClasses.emptyRoot),\n    item: cx(suit({\n      descendantName: 'item'\n    }), userCssClasses.item),\n    list: cx(suit({\n      descendantName: 'list'\n    }), userCssClasses.list),\n    loadPrevious: cx(suit({\n      descendantName: 'loadPrevious'\n    }), userCssClasses.loadPrevious),\n    disabledLoadPrevious: cx(suit({\n      descendantName: 'loadPrevious',\n      modifierName: 'disabled'\n    }), userCssClasses.disabledLoadPrevious),\n    loadMore: cx(suit({\n      descendantName: 'loadMore'\n    }), userCssClasses.loadMore),\n    disabledLoadMore: cx(suit({\n      descendantName: 'loadMore',\n      modifierName: 'disabled'\n    }), userCssClasses.disabledLoadMore)\n  };\n  var specializedRenderer = renderer({\n    containerNode: containerNode,\n    cssClasses: cssClasses,\n    templates: templates,\n    showPrevious: showPrevious,\n    renderState: {}\n  });\n  var makeWidget = withInsights(connectInfiniteHits)(specializedRenderer, function () {\n    return render(null, containerNode);\n  });\n  return _objectSpread(_objectSpread({}, makeWidget({\n    escapeHTML: escapeHTML,\n    transformItems: transformItems,\n    showPrevious: showPrevious,\n    cache: cache\n  })), {}, {\n    $$widgetType: 'ais.infiniteHits'\n  });\n};\nexport default infiniteHits;", "var _excluded = [\"name\", \"escapedValue\", \"path\"];\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { checkRendering, createDocumentationMessageGenerator, createSendEventForFacet, noop, warning } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'menu',\n  connector: true\n});\nvar DEFAULT_SORT = ['isRefined', 'name:asc'];\n/**\n * **Menu** connector provides the logic to build a widget that will give the user the ability to choose a single value for a specific facet. The typical usage of menu is for navigation in categories.\n *\n * This connector provides a `toggleShowMore()` function to display more or less items and a `refine()`\n * function to select an item. While selecting a new element, the `refine` will also unselect the\n * one that is currently selected.\n *\n * **Requirement:** the attribute passed as `attribute` must be present in \"attributes for faceting\" on the Algolia dashboard or configured as attributesForFaceting via a set settings call to the Algolia API.\n */\nvar connectMenu = function connectMenu(renderFn) {\n  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n  checkRendering(renderFn, withUsage());\n  return function (widgetParams) {\n    var _ref = widgetParams || {},\n      attribute = _ref.attribute,\n      _ref$limit = _ref.limit,\n      limit = _ref$limit === void 0 ? 10 : _ref$limit,\n      _ref$showMore = _ref.showMore,\n      showMore = _ref$showMore === void 0 ? false : _ref$showMore,\n      _ref$showMoreLimit = _ref.showMoreLimit,\n      showMoreLimit = _ref$showMoreLimit === void 0 ? 20 : _ref$showMoreLimit,\n      _ref$sortBy = _ref.sortBy,\n      sortBy = _ref$sortBy === void 0 ? DEFAULT_SORT : _ref$sortBy,\n      _ref$transformItems = _ref.transformItems,\n      transformItems = _ref$transformItems === void 0 ? function (items) {\n        return items;\n      } : _ref$transformItems;\n    if (!attribute) {\n      throw new Error(withUsage('The `attribute` option is required.'));\n    }\n    if (showMore === true && showMoreLimit <= limit) {\n      throw new Error(withUsage('The `showMoreLimit` option must be greater than `limit`.'));\n    }\n    var sendEvent;\n    var _createURL;\n    var _refine;\n\n    // Provide the same function to the `renderFn` so that way the user\n    // has to only bind it once when `isFirstRendering` for instance\n    var isShowingMore = false;\n    var toggleShowMore = function toggleShowMore() {};\n    function createToggleShowMore(renderOptions, widget) {\n      return function () {\n        isShowingMore = !isShowingMore;\n        widget.render(renderOptions);\n      };\n    }\n    function cachedToggleShowMore() {\n      toggleShowMore();\n    }\n    function getLimit() {\n      return isShowingMore ? showMoreLimit : limit;\n    }\n    return {\n      $$type: 'ais.menu',\n      init: function init(initOptions) {\n        var instantSearchInstance = initOptions.instantSearchInstance;\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {\n          instantSearchInstance: instantSearchInstance\n        }), true);\n      },\n      render: function render(renderOptions) {\n        var instantSearchInstance = renderOptions.instantSearchInstance;\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(renderOptions)), {}, {\n          instantSearchInstance: instantSearchInstance\n        }), false);\n      },\n      dispose: function dispose(_ref2) {\n        var state = _ref2.state;\n        unmountFn();\n        return state.removeHierarchicalFacet(attribute).setQueryParameter('maxValuesPerFacet', undefined);\n      },\n      getRenderState: function getRenderState(renderState, renderOptions) {\n        return _objectSpread(_objectSpread({}, renderState), {}, {\n          menu: _objectSpread(_objectSpread({}, renderState.menu), {}, _defineProperty({}, attribute, this.getWidgetRenderState(renderOptions)))\n        });\n      },\n      getWidgetRenderState: function getWidgetRenderState(renderOptions) {\n        var _this = this;\n        var results = renderOptions.results,\n          createURL = renderOptions.createURL,\n          instantSearchInstance = renderOptions.instantSearchInstance,\n          helper = renderOptions.helper;\n        var items = [];\n        var canToggleShowMore = false;\n        if (!sendEvent) {\n          sendEvent = createSendEventForFacet({\n            instantSearchInstance: instantSearchInstance,\n            helper: helper,\n            attribute: attribute,\n            widgetType: this.$$type\n          });\n        }\n        if (!_createURL) {\n          _createURL = function _createURL(facetValue) {\n            return createURL(function (uiState) {\n              return _this.getWidgetUiState(uiState, {\n                searchParameters: helper.state.resetPage().toggleFacetRefinement(attribute, facetValue),\n                helper: helper\n              });\n            });\n          };\n        }\n        if (!_refine) {\n          _refine = function _refine(facetValue) {\n            var _helper$getHierarchic = helper.getHierarchicalFacetBreadcrumb(attribute),\n              _helper$getHierarchic2 = _slicedToArray(_helper$getHierarchic, 1),\n              refinedItem = _helper$getHierarchic2[0];\n            sendEvent('click:internal', facetValue ? facetValue : refinedItem);\n            helper.toggleFacetRefinement(attribute, facetValue ? facetValue : refinedItem).search();\n          };\n        }\n        if (renderOptions.results) {\n          toggleShowMore = createToggleShowMore(renderOptions, this);\n        }\n        if (results) {\n          var facetValues = results.getFacetValues(attribute, {\n            sortBy: sortBy,\n            facetOrdering: sortBy === DEFAULT_SORT\n          });\n          var facetItems = facetValues && !Array.isArray(facetValues) && facetValues.data ? facetValues.data : [];\n          canToggleShowMore = showMore && (isShowingMore || facetItems.length > getLimit());\n          items = transformItems(facetItems.slice(0, getLimit()).map(function (_ref3) {\n            var label = _ref3.name,\n              value = _ref3.escapedValue,\n              path = _ref3.path,\n              item = _objectWithoutProperties(_ref3, _excluded);\n            return _objectSpread(_objectSpread({}, item), {}, {\n              label: label,\n              value: value\n            });\n          }), {\n            results: results\n          });\n        }\n        return {\n          items: items,\n          createURL: _createURL,\n          refine: _refine,\n          sendEvent: sendEvent,\n          canRefine: items.length > 0,\n          widgetParams: widgetParams,\n          isShowingMore: isShowingMore,\n          toggleShowMore: cachedToggleShowMore,\n          canToggleShowMore: canToggleShowMore\n        };\n      },\n      getWidgetUiState: function getWidgetUiState(uiState, _ref4) {\n        var searchParameters = _ref4.searchParameters;\n        var _searchParameters$get = searchParameters.getHierarchicalFacetBreadcrumb(attribute),\n          _searchParameters$get2 = _slicedToArray(_searchParameters$get, 1),\n          value = _searchParameters$get2[0];\n        return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {\n          menu: _objectSpread(_objectSpread({}, uiState.menu), {}, _defineProperty({}, attribute, value))\n        }), attribute);\n      },\n      getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref5) {\n        var uiState = _ref5.uiState;\n        var value = uiState.menu && uiState.menu[attribute];\n        if (searchParameters.isConjunctiveFacet(attribute) || searchParameters.isDisjunctiveFacet(attribute)) {\n          process.env.NODE_ENV === 'development' ? warning(false, \"Menu: Attribute \\\"\".concat(attribute, \"\\\" is already used by another widget applying conjunctive or disjunctive faceting.\\nAs this is not supported, please make sure to remove this other widget or this Menu widget will not work at all.\")) : void 0;\n          return searchParameters;\n        }\n        var withFacetConfiguration = searchParameters.removeHierarchicalFacet(attribute).addHierarchicalFacet({\n          name: attribute,\n          attributes: [attribute]\n        });\n        var currentMaxValuesPerFacet = withFacetConfiguration.maxValuesPerFacet || 0;\n        var nextMaxValuesPerFacet = Math.max(currentMaxValuesPerFacet, showMore ? showMoreLimit : limit);\n        var withMaxValuesPerFacet = withFacetConfiguration.setQueryParameter('maxValuesPerFacet', nextMaxValuesPerFacet);\n        if (!value) {\n          return withMaxValuesPerFacet.setQueryParameters({\n            hierarchicalFacetsRefinements: _objectSpread(_objectSpread({}, withMaxValuesPerFacet.hierarchicalFacetsRefinements), {}, _defineProperty({}, attribute, []))\n          });\n        }\n        return withMaxValuesPerFacet.addHierarchicalFacetRefinement(attribute, value);\n      }\n    };\n  };\n};\nfunction removeEmptyRefinementsFromUiState(indexUiState, attribute) {\n  if (!indexUiState.menu) {\n    return indexUiState;\n  }\n  if (indexUiState.menu[attribute] === undefined) {\n    delete indexUiState.menu[attribute];\n  }\n  if (Object.keys(indexUiState.menu).length === 0) {\n    delete indexUiState.menu;\n  }\n  return indexUiState;\n}\nexport default connectMenu;", "import { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { formatNumber } from \"../../lib/formatNumber.js\";\nvar defaultTemplates = {\n  item: function item(_ref) {\n    var cssClasses = _ref.cssClasses,\n      url = _ref.url,\n      label = _ref.label,\n      count = _ref.count;\n    return h(\"a\", {\n      className: cx(cssClasses.link),\n      href: url\n    }, h(\"span\", {\n      className: cx(cssClasses.label)\n    }, label), h(\"span\", {\n      className: cx(cssClasses.count)\n    }, formatNumber(count)));\n  },\n  showMoreText: function showMoreText(_ref2) {\n    var isShowingMore = _ref2.isShowingMore;\n    return isShowingMore ? 'Show less' : 'Show more';\n  }\n};\nexport default defaultTemplates;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, render } from 'preact';\nimport RefinementList from \"../../components/RefinementList/RefinementList.js\";\nimport connectMenu from \"../../connectors/menu/connectMenu.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { prepareTemplateProps } from \"../../lib/templating/index.js\";\nimport { getContainerNode, createDocumentationMessageGenerator } from \"../../lib/utils/index.js\";\nimport defaultTemplates from \"./defaultTemplates.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'menu'\n});\nvar suit = component('Menu');\nvar renderer = function renderer(_ref) {\n  var containerNode = _ref.containerNode,\n    cssClasses = _ref.cssClasses,\n    renderState = _ref.renderState,\n    templates = _ref.templates,\n    showMore = _ref.showMore;\n  return function (_ref2, isFirstRendering) {\n    var refine = _ref2.refine,\n      items = _ref2.items,\n      createURL = _ref2.createURL,\n      instantSearchInstance = _ref2.instantSearchInstance,\n      isShowingMore = _ref2.isShowingMore,\n      toggleShowMore = _ref2.toggleShowMore,\n      canToggleShowMore = _ref2.canToggleShowMore;\n    if (isFirstRendering) {\n      renderState.templateProps = prepareTemplateProps({\n        defaultTemplates: defaultTemplates,\n        templatesConfig: instantSearchInstance.templatesConfig,\n        templates: templates\n      });\n      return;\n    }\n    var facetValues = items.map(function (facetValue) {\n      return _objectSpread(_objectSpread({}, facetValue), {}, {\n        url: createURL(facetValue.value)\n      });\n    });\n    render(h(RefinementList, {\n      createURL: createURL,\n      cssClasses: cssClasses,\n      facetValues: facetValues,\n      showMore: showMore,\n      templateProps: renderState.templateProps,\n      toggleRefinement: refine,\n      toggleShowMore: toggleShowMore,\n      isShowingMore: isShowingMore,\n      canToggleShowMore: canToggleShowMore\n    }), containerNode);\n  };\n};\nvar menu = function menu(widgetParams) {\n  var _ref3 = widgetParams || {},\n    container = _ref3.container,\n    attribute = _ref3.attribute,\n    sortBy = _ref3.sortBy,\n    limit = _ref3.limit,\n    showMore = _ref3.showMore,\n    showMoreLimit = _ref3.showMoreLimit,\n    _ref3$cssClasses = _ref3.cssClasses,\n    userCssClasses = _ref3$cssClasses === void 0 ? {} : _ref3$cssClasses,\n    _ref3$templates = _ref3.templates,\n    templates = _ref3$templates === void 0 ? {} : _ref3$templates,\n    transformItems = _ref3.transformItems;\n  if (!container) {\n    throw new Error(withUsage('The `container` option is required.'));\n  }\n  var containerNode = getContainerNode(container);\n  var cssClasses = {\n    root: cx(suit(), userCssClasses.root),\n    noRefinementRoot: cx(suit({\n      modifierName: 'noRefinement'\n    }), userCssClasses.noRefinementRoot),\n    list: cx(suit({\n      descendantName: 'list'\n    }), userCssClasses.list),\n    item: cx(suit({\n      descendantName: 'item'\n    }), userCssClasses.item),\n    selectedItem: cx(suit({\n      descendantName: 'item',\n      modifierName: 'selected'\n    }), userCssClasses.selectedItem),\n    link: cx(suit({\n      descendantName: 'link'\n    }), userCssClasses.link),\n    label: cx(suit({\n      descendantName: 'label'\n    }), userCssClasses.label),\n    count: cx(suit({\n      descendantName: 'count'\n    }), userCssClasses.count),\n    showMore: cx(suit({\n      descendantName: 'showMore'\n    }), userCssClasses.showMore),\n    disabledShowMore: cx(suit({\n      descendantName: 'showMore',\n      modifierName: 'disabled'\n    }), userCssClasses.disabledShowMore)\n  };\n  var specializedRenderer = renderer({\n    containerNode: containerNode,\n    cssClasses: cssClasses,\n    renderState: {},\n    templates: templates,\n    showMore: showMore\n  });\n  var makeWidget = connectMenu(specializedRenderer, function () {\n    return render(null, containerNode);\n  });\n  return _objectSpread(_objectSpread({}, makeWidget({\n    attribute: attribute,\n    limit: limit,\n    showMore: showMore,\n    showMoreLimit: showMoreLimit,\n    sortBy: sortBy,\n    transformItems: transformItems\n  })), {}, {\n    $$widgetType: 'ais.menu'\n  });\n};\nexport default menu;", "import { options as _options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {import('./internal').Component} */\nlet previousComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array<import('./internal').Component>} */\nlet afterPaintEffects = [];\n\nlet EMPTY = [];\n\n// Cast to use internal Options type\nconst options = /** @type {import('./internal').Options} */ (_options);\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\nlet oldRoot = options._root;\n\nconst RAF_TIMEOUT = 100;\nlet prevRaf;\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._root = (vnode, parentDom) => {\n\tif (vnode && parentDom._children && parentDom._children._mask) {\n\t\tvnode._mask = parentDom._children._mask;\n\t}\n\n\tif (oldRoot) oldRoot(vnode, parentDom);\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\tif (previousComponent === currentComponent) {\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentComponent._renderCallbacks = [];\n\t\t\thooks._list.forEach(hookItem => {\n\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t}\n\t\t\t\thookItem._pendingValue = EMPTY;\n\t\t\t\thookItem._nextValue = hookItem._pendingArgs = undefined;\n\t\t\t});\n\t\t} else {\n\t\t\thooks._pendingEffects.forEach(invokeCleanup);\n\t\t\thooks._pendingEffects.forEach(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentIndex = 0;\n\t\t}\n\t}\n\tpreviousComponent = currentComponent;\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tif (c.__hooks._pendingEffects.length) afterPaint(afterPaintEffects.push(c));\n\t\tc.__hooks._list.forEach(hookItem => {\n\t\t\tif (hookItem._pendingArgs) {\n\t\t\t\thookItem._args = hookItem._pendingArgs;\n\t\t\t}\n\t\t\tif (hookItem._pendingValue !== EMPTY) {\n\t\t\t\thookItem._value = hookItem._pendingValue;\n\t\t\t}\n\t\t\thookItem._pendingArgs = undefined;\n\t\t\thookItem._pendingValue = EMPTY;\n\t\t});\n\t}\n\tpreviousComponent = currentComponent = null;\n};\n\n// TODO: Improve typing of commitQueue parameter\n/** @type {(vnode: import('./internal').VNode, commitQueue: any) => void} */\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.forEach(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tc.__hooks = undefined;\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({ _pendingValue: EMPTY });\n\t}\n\n\treturn hooks._list[index];\n}\n\n/**\n * @template {unknown} S\n * @param {import('./index').Dispatch<import('./index').StateUpdater<S>>} [initialState]\n * @returns {[S, (state: S) => void]}\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @template {unknown} S\n * @template {unknown} A\n * @param {import('./index').Reducer<S, A>} reducer\n * @param {import('./index').Dispatch<import('./index').StateUpdater<S>>} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ S, (state: S) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst currentValue = hookState._nextValue\n\t\t\t\t\t? hookState._nextValue[0]\n\t\t\t\t\t: hookState._value[0];\n\t\t\t\tconst nextValue = hookState._reducer(currentValue, action);\n\n\t\t\t\tif (currentValue !== nextValue) {\n\t\t\t\t\thookState._nextValue = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\n\t\tif (!currentComponent._hasScuFromHooks) {\n\t\t\tcurrentComponent._hasScuFromHooks = true;\n\t\t\tlet prevScu = currentComponent.shouldComponentUpdate;\n\t\t\tconst prevCWU = currentComponent.componentWillUpdate;\n\n\t\t\t// If we're dealing with a forced update `shouldComponentUpdate` will\n\t\t\t// not be called. But we use that to update the hook values, so we\n\t\t\t// need to call it.\n\t\t\tcurrentComponent.componentWillUpdate = function (p, s, c) {\n\t\t\t\tif (this._force) {\n\t\t\t\t\tlet tmp = prevScu;\n\t\t\t\t\t// Clear to avoid other sCU hooks from being called\n\t\t\t\t\tprevScu = undefined;\n\t\t\t\t\tupdateHookState(p, s, c);\n\t\t\t\t\tprevScu = tmp;\n\t\t\t\t}\n\n\t\t\t\tif (prevCWU) prevCWU.call(this, p, s, c);\n\t\t\t};\n\n\t\t\t// This SCU has the purpose of bailing out after repeated updates\n\t\t\t// to stateful hooks.\n\t\t\t// we store the next value in _nextValue[0] and keep doing that for all\n\t\t\t// state setters, if we have next states and\n\t\t\t// all next states within a component end up being equal to their original state\n\t\t\t// we are safe to bail out for this specific component.\n\t\t\t/**\n\t\t\t *\n\t\t\t * @type {import('./internal').Component[\"shouldComponentUpdate\"]}\n\t\t\t */\n\t\t\t// @ts-ignore - We don't use TS to downtranspile\n\t\t\t// eslint-disable-next-line no-inner-declarations\n\t\t\tfunction updateHookState(p, s, c) {\n\t\t\t\tif (!hookState._component.__hooks) return true;\n\n\t\t\t\t/** @type {(x: import('./internal').HookState) => x is import('./internal').ReducerHookState} */\n\t\t\t\tconst isStateHook = x => !!x._component;\n\t\t\t\tconst stateHooks =\n\t\t\t\t\thookState._component.__hooks._list.filter(isStateHook);\n\n\t\t\t\tconst allHooksEmpty = stateHooks.every(x => !x._nextValue);\n\t\t\t\t// When we have no updated hooks in the component we invoke the previous SCU or\n\t\t\t\t// traverse the VDOM tree further.\n\t\t\t\tif (allHooksEmpty) {\n\t\t\t\t\treturn prevScu ? prevScu.call(this, p, s, c) : true;\n\t\t\t\t}\n\n\t\t\t\t// We check whether we have components with a nextValue set that\n\t\t\t\t// have values that aren't equal to one another this pushes\n\t\t\t\t// us to update further down the tree\n\t\t\t\tlet shouldUpdate = false;\n\t\t\t\tstateHooks.forEach(hookItem => {\n\t\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\t\tconst currentValue = hookItem._value[0];\n\t\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t\t\thookItem._nextValue = undefined;\n\t\t\t\t\t\tif (currentValue !== hookItem._value[0]) shouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn shouldUpdate || hookState._component.props !== p\n\t\t\t\t\t? prevScu\n\t\t\t\t\t\t? prevScu.call(this, p, s, c)\n\t\t\t\t\t\t: true\n\t\t\t\t\t: false;\n\t\t\t}\n\n\t\t\tcurrentComponent.shouldComponentUpdate = updateHookState;\n\t\t}\n\t}\n\n\treturn hookState._nextValue || hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\n/** @type {(initialValue: unknown) => unknown} */\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') {\n\t\t\t\tref(createHandle());\n\t\t\t\treturn () => ref(null);\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = createHandle();\n\t\t\t\treturn () => (ref.current = null);\n\t\t\t}\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @template {unknown} T\n * @param {() => T} factory\n * @param {unknown[]} args\n * @returns {T}\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState<T>} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._pendingValue = factory();\n\t\tstate._pendingArgs = args;\n\t\tstate._factory = factory;\n\t\treturn state._pendingValue;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {unknown[]} args\n * @returns {() => void}\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(\n\t\t\tformatter ? formatter(value) : /** @type {any}*/ (value)\n\t\t);\n\t}\n}\n\n/**\n * @param {(error: unknown, errorInfo: import('preact').ErrorInfo) => void} cb\n * @returns {[unknown, () => void]}\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = (err, errorInfo) => {\n\t\t\tif (state._value) state._value(err, errorInfo);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\n/** @type {() => string} */\nexport function useId() {\n\t/** @type {import('./internal').IdHookState} */\n\tconst state = getHookState(currentIndex++, 11);\n\tif (!state._value) {\n\t\t// Grab either the root node or the nearest async boundary node.\n\t\t/** @type {import('./internal.d').VNode} */\n\t\tlet root = currentComponent._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\tlet mask = root._mask || (root._mask = [0, 0]);\n\t\tstate._value = 'P' + mask[0] + '-' + mask[1]++;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tif (!component._parentDom || !component.__hooks) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n * @returns {void}\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').HookState} hook\n * @returns {void}\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n * @returns {void}\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {unknown[]} oldArgs\n * @param {unknown[]} newArgs\n * @returns {boolean}\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\n/**\n * @template Arg\n * @param {Arg} arg\n * @param {(arg: Arg) => any} f\n * @returns {any}\n */\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n", "function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nimport { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { useState, useEffect, useRef } from 'preact/hooks';\nimport Template from \"../Template/Template.js\";\nfunction Panel(props) {\n  var _useState = useState(props.isCollapsed),\n    _useState2 = _slicedToArray(_useState, 2),\n    isCollapsed = _useState2[0],\n    setIsCollapsed = _useState2[1];\n  var _useState3 = useState(false),\n    _useState4 = _slicedToArray(_useState3, 2),\n    isControlled = _useState4[0],\n    setIsControlled = _useState4[1];\n  var bodyRef = useRef(null);\n  useEffect(function () {\n    var node = bodyRef.current;\n    if (!node) {\n      return undefined;\n    }\n    node.appendChild(props.bodyElement);\n    return function () {\n      node.removeChild(props.bodyElement);\n    };\n  }, [bodyRef, props.bodyElement]);\n  if (!isControlled && props.isCollapsed !== isCollapsed) {\n    setIsCollapsed(props.isCollapsed);\n  }\n  return h(\"div\", {\n    className: cx(props.cssClasses.root, props.hidden && props.cssClasses.noRefinementRoot, props.collapsible && props.cssClasses.collapsibleRoot, isCollapsed && props.cssClasses.collapsedRoot),\n    hidden: props.hidden\n  }, props.templates.header && h(\"div\", {\n    className: props.cssClasses.header\n  }, h(Template, {\n    templates: props.templates,\n    templateKey: \"header\",\n    rootTagName: \"span\",\n    data: props.data\n  }), props.collapsible && h(\"button\", {\n    className: props.cssClasses.collapseButton,\n    \"aria-expanded\": !isCollapsed,\n    onClick: function onClick(event) {\n      event.preventDefault();\n      setIsControlled(true);\n      setIsCollapsed(function (prevIsCollapsed) {\n        return !prevIsCollapsed;\n      });\n    }\n  }, h(Template, {\n    templates: props.templates,\n    templateKey: \"collapseButtonText\",\n    rootTagName: \"span\",\n    data: {\n      collapsed: isCollapsed\n    }\n  }))), h(\"div\", {\n    className: props.cssClasses.body,\n    ref: bodyRef\n  }), props.templates.footer && h(Template, {\n    templates: props.templates,\n    templateKey: \"footer\",\n    rootProps: {\n      className: props.cssClasses.footer\n    },\n    data: props.data\n  }));\n}\nexport default Panel;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, render } from 'preact';\nimport Panel from \"../../components/Panel/Panel.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { createDocumentationMessageGenerator, getContainerNode, getObjectType, warning } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'panel'\n});\nvar suit = component('Panel');\nvar renderer = function renderer(_ref) {\n  var containerNode = _ref.containerNode,\n    bodyContainerNode = _ref.bodyContainerNode,\n    cssClasses = _ref.cssClasses,\n    templates = _ref.templates;\n  return function (_ref2) {\n    var options = _ref2.options,\n      hidden = _ref2.hidden,\n      collapsible = _ref2.collapsible,\n      collapsed = _ref2.collapsed;\n    render(h(Panel, {\n      cssClasses: cssClasses,\n      hidden: hidden,\n      collapsible: collapsible,\n      isCollapsed: collapsed,\n      templates: templates,\n      data: options,\n      bodyElement: bodyContainerNode\n    }), containerNode);\n  };\n};\n/**\n * The panel widget wraps other widgets in a consistent panel design.\n * It also reacts, indicates and sets CSS classes when widgets are no longer relevant for refining.\n */\nvar panel = function panel(panelWidgetParams) {\n  var _ref3 = panelWidgetParams || {},\n    _ref3$templates = _ref3.templates,\n    templates = _ref3$templates === void 0 ? {} : _ref3$templates,\n    _ref3$hidden = _ref3.hidden,\n    hidden = _ref3$hidden === void 0 ? function () {\n      return false;\n    } : _ref3$hidden,\n    collapsed = _ref3.collapsed,\n    _ref3$cssClasses = _ref3.cssClasses,\n    userCssClasses = _ref3$cssClasses === void 0 ? {} : _ref3$cssClasses;\n  process.env.NODE_ENV === 'development' ? warning(typeof hidden === 'function', \"The `hidden` option in the \\\"panel\\\" widget expects a function returning a boolean (received type \".concat(getObjectType(hidden), \").\")) : void 0;\n  process.env.NODE_ENV === 'development' ? warning(typeof collapsed === 'undefined' || typeof collapsed === 'function', \"The `collapsed` option in the \\\"panel\\\" widget expects a function returning a boolean (received type \".concat(getObjectType(collapsed), \").\")) : void 0;\n  var bodyContainerNode = document.createElement('div');\n  var collapsible = Boolean(collapsed);\n  var collapsedFn = typeof collapsed === 'function' ? collapsed : function () {\n    return false;\n  };\n  var cssClasses = {\n    root: cx(suit(), userCssClasses.root),\n    noRefinementRoot: cx(suit({\n      modifierName: 'noRefinement'\n    }), userCssClasses.noRefinementRoot),\n    collapsibleRoot: cx(suit({\n      modifierName: 'collapsible'\n    }), userCssClasses.collapsibleRoot),\n    collapsedRoot: cx(suit({\n      modifierName: 'collapsed'\n    }), userCssClasses.collapsedRoot),\n    collapseButton: cx(suit({\n      descendantName: 'collapseButton'\n    }), userCssClasses.collapseButton),\n    collapseIcon: cx(suit({\n      descendantName: 'collapseIcon'\n    }), userCssClasses.collapseIcon),\n    body: cx(suit({\n      descendantName: 'body'\n    }), userCssClasses.body),\n    header: cx(suit({\n      descendantName: 'header'\n    }), userCssClasses.header),\n    footer: cx(suit({\n      descendantName: 'footer'\n    }), userCssClasses.footer)\n  };\n  return function (widgetFactory) {\n    return function (widgetParams) {\n      if (!(widgetParams && widgetParams.container)) {\n        throw new Error(withUsage(\"The `container` option is required in the widget within the panel.\"));\n      }\n      var containerNode = getContainerNode(widgetParams.container);\n      var defaultTemplates = {\n        collapseButtonText: function collapseButtonText(_ref4) {\n          var isCollapsed = _ref4.collapsed;\n          return \"<svg\\n          class=\\\"\".concat(cssClasses.collapseIcon, \"\\\"\\n          style=\\\"width: 1em; height: 1em;\\\"\\n          viewBox=\\\"0 0 500 500\\\"\\n        >\\n        <path d=\\\"\").concat(isCollapsed ? 'M100 250l300-150v300z' : 'M250 400l150-300H100z', \"\\\" fill=\\\"currentColor\\\" />\\n        </svg>\");\n        }\n      };\n      var renderPanel = renderer({\n        containerNode: containerNode,\n        bodyContainerNode: bodyContainerNode,\n        cssClasses: cssClasses,\n        templates: _objectSpread(_objectSpread({}, defaultTemplates), templates)\n      });\n      var widget = widgetFactory(_objectSpread(_objectSpread({}, widgetParams), {}, {\n        container: bodyContainerNode\n      }));\n\n      // TypeScript somehow loses track of the ...widget type, since it's\n      // not directly returned. Eventually the \"as AugmentedWidget<typeof widgetFactory>\"\n      // will not be needed anymore.\n      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n      return _objectSpread(_objectSpread({}, widget), {}, {\n        init: function init() {\n          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n          var renderOptions = args[0];\n          var options = _objectSpread(_objectSpread({}, widget.getWidgetRenderState ? widget.getWidgetRenderState(renderOptions) : {}), renderOptions);\n          renderPanel({\n            options: options,\n            hidden: true,\n            collapsible: collapsible,\n            collapsed: false\n          });\n          if (typeof widget.init === 'function') {\n            var _widget$init;\n            (_widget$init = widget.init).call.apply(_widget$init, [this].concat(args));\n          }\n        },\n        render: function render() {\n          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n          var renderOptions = args[0];\n          var options = _objectSpread(_objectSpread({}, widget.getWidgetRenderState ? widget.getWidgetRenderState(renderOptions) : {}), renderOptions);\n          renderPanel({\n            options: options,\n            hidden: Boolean(hidden(options)),\n            collapsible: collapsible,\n            collapsed: Boolean(collapsedFn(options))\n          });\n          if (typeof widget.render === 'function') {\n            var _widget$render;\n            (_widget$render = widget.render).call.apply(_widget$render, [this].concat(args));\n          }\n        },\n        dispose: function dispose() {\n          render(null, containerNode);\n          if (typeof widget.dispose === 'function') {\n            var _widget$dispose;\n            for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n              args[_key3] = arguments[_key3];\n            }\n            return (_widget$dispose = widget.dispose).call.apply(_widget$dispose, [this].concat(args));\n          }\n          return undefined;\n        }\n      });\n    };\n  };\n};\nexport default panel;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nvar _excluded = [\"name\", \"escapedValue\"],\n  _excluded2 = [\"escapedValue\", \"value\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport { escapeFacets, TAG_PLACEHOLDER, TAG_REPLACEMENT, checkRendering, createDocumentationMessageGenerator, createSendEventForFacet, noop, warning } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'refinement-list',\n  connector: true\n});\nvar DEFAULT_SORT = ['isRefined', 'count:desc', 'name:asc'];\n/**\n * **RefinementList** connector provides the logic to build a custom widget that\n * will let the user filter the results based on the values of a specific facet.\n *\n * **Requirement:** the attribute passed as `attribute` must be present in\n * attributesForFaceting of the searched index.\n *\n * This connector provides:\n * - a `refine()` function to select an item.\n * - a `toggleShowMore()` function to display more or less items\n * - a `searchForItems()` function to search within the items.\n */\nvar connectRefinementList = function connectRefinementList(renderFn) {\n  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n  checkRendering(renderFn, withUsage());\n  return function (widgetParams) {\n    var _ref = widgetParams || {},\n      attribute = _ref.attribute,\n      _ref$operator = _ref.operator,\n      operator = _ref$operator === void 0 ? 'or' : _ref$operator,\n      _ref$limit = _ref.limit,\n      limit = _ref$limit === void 0 ? 10 : _ref$limit,\n      _ref$showMore = _ref.showMore,\n      showMore = _ref$showMore === void 0 ? false : _ref$showMore,\n      _ref$showMoreLimit = _ref.showMoreLimit,\n      showMoreLimit = _ref$showMoreLimit === void 0 ? 20 : _ref$showMoreLimit,\n      _ref$sortBy = _ref.sortBy,\n      sortBy = _ref$sortBy === void 0 ? DEFAULT_SORT : _ref$sortBy,\n      _ref$escapeFacetValue = _ref.escapeFacetValues,\n      escapeFacetValues = _ref$escapeFacetValue === void 0 ? true : _ref$escapeFacetValue,\n      _ref$transformItems = _ref.transformItems,\n      transformItems = _ref$transformItems === void 0 ? function (items) {\n        return items;\n      } : _ref$transformItems;\n    if (!attribute) {\n      throw new Error(withUsage('The `attribute` option is required.'));\n    }\n    if (!/^(and|or)$/.test(operator)) {\n      throw new Error(withUsage(\"The `operator` must one of: `\\\"and\\\"`, `\\\"or\\\"` (got \\\"\".concat(operator, \"\\\").\")));\n    }\n    if (showMore === true && showMoreLimit <= limit) {\n      throw new Error(withUsage('`showMoreLimit` should be greater than `limit`.'));\n    }\n    var formatItems = function formatItems(_ref2) {\n      var label = _ref2.name,\n        value = _ref2.escapedValue,\n        item = _objectWithoutProperties(_ref2, _excluded);\n      return _objectSpread(_objectSpread({}, item), {}, {\n        value: value,\n        label: label,\n        highlighted: label\n      });\n    };\n    var lastResultsFromMainSearch;\n    var lastItemsFromMainSearch = [];\n    var hasExhaustiveItems = true;\n    var triggerRefine;\n    var sendEvent;\n    var isShowingMore = false;\n    // Provide the same function to the `renderFn` so that way the user\n    // has to only bind it once when `isFirstRendering` for instance\n    var toggleShowMore = function toggleShowMore() {};\n    function cachedToggleShowMore() {\n      toggleShowMore();\n    }\n    function createToggleShowMore(renderOptions, widget) {\n      return function () {\n        isShowingMore = !isShowingMore;\n        widget.render(renderOptions);\n      };\n    }\n    function getLimit() {\n      return isShowingMore ? showMoreLimit : limit;\n    }\n    var searchForFacetValues = function searchForFacetValues() {\n      return function () {};\n    };\n    var createSearchForFacetValues = function createSearchForFacetValues(helper, widget) {\n      return function (renderOptions) {\n        return function (query) {\n          var instantSearchInstance = renderOptions.instantSearchInstance,\n            searchResults = renderOptions.results;\n          if (query === '' && lastItemsFromMainSearch) {\n            // render with previous data from the helper.\n            renderFn(_objectSpread(_objectSpread({}, widget.getWidgetRenderState(_objectSpread(_objectSpread({}, renderOptions), {}, {\n              results: lastResultsFromMainSearch\n            }))), {}, {\n              instantSearchInstance: instantSearchInstance\n            }), false);\n          } else {\n            var tags = {\n              highlightPreTag: escapeFacetValues ? TAG_PLACEHOLDER.highlightPreTag : TAG_REPLACEMENT.highlightPreTag,\n              highlightPostTag: escapeFacetValues ? TAG_PLACEHOLDER.highlightPostTag : TAG_REPLACEMENT.highlightPostTag\n            };\n            helper.searchForFacetValues(attribute, query,\n            // We cap the `maxFacetHits` value to 100 because the Algolia API\n            // doesn't support a greater number.\n            // See https://www.algolia.com/doc/api-reference/api-parameters/maxFacetHits/\n            Math.min(getLimit(), 100), tags).then(function (results) {\n              var facetValues = escapeFacetValues ? escapeFacets(results.facetHits) : results.facetHits;\n              var normalizedFacetValues = transformItems(facetValues.map(function (_ref3) {\n                var escapedValue = _ref3.escapedValue,\n                  value = _ref3.value,\n                  item = _objectWithoutProperties(_ref3, _excluded2);\n                return _objectSpread(_objectSpread({}, item), {}, {\n                  value: escapedValue,\n                  label: value\n                });\n              }), {\n                results: searchResults\n              });\n              renderFn(_objectSpread(_objectSpread({}, widget.getWidgetRenderState(_objectSpread(_objectSpread({}, renderOptions), {}, {\n                results: lastResultsFromMainSearch\n              }))), {}, {\n                items: normalizedFacetValues,\n                canToggleShowMore: false,\n                canRefine: true,\n                isFromSearch: true,\n                instantSearchInstance: instantSearchInstance\n              }), false);\n            });\n          }\n        };\n      };\n    };\n    return {\n      $$type: 'ais.refinementList',\n      init: function init(initOptions) {\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {\n          instantSearchInstance: initOptions.instantSearchInstance\n        }), true);\n      },\n      render: function render(renderOptions) {\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(renderOptions)), {}, {\n          instantSearchInstance: renderOptions.instantSearchInstance\n        }), false);\n      },\n      getRenderState: function getRenderState(renderState, renderOptions) {\n        return _objectSpread(_objectSpread({}, renderState), {}, {\n          refinementList: _objectSpread(_objectSpread({}, renderState.refinementList), {}, _defineProperty({}, attribute, this.getWidgetRenderState(renderOptions)))\n        });\n      },\n      getWidgetRenderState: function getWidgetRenderState(renderOptions) {\n        var _this = this;\n        var results = renderOptions.results,\n          state = renderOptions.state,\n          _createURL = renderOptions.createURL,\n          instantSearchInstance = renderOptions.instantSearchInstance,\n          helper = renderOptions.helper;\n        var items = [];\n        var facetValues = [];\n        if (!sendEvent || !triggerRefine || !searchForFacetValues) {\n          sendEvent = createSendEventForFacet({\n            instantSearchInstance: instantSearchInstance,\n            helper: helper,\n            attribute: attribute,\n            widgetType: this.$$type\n          });\n          triggerRefine = function triggerRefine(facetValue) {\n            sendEvent('click:internal', facetValue);\n            helper.toggleFacetRefinement(attribute, facetValue).search();\n          };\n          searchForFacetValues = createSearchForFacetValues(helper, this);\n        }\n        if (results) {\n          var values = results.getFacetValues(attribute, {\n            sortBy: sortBy,\n            facetOrdering: sortBy === DEFAULT_SORT\n          });\n          facetValues = values && Array.isArray(values) ? values : [];\n          items = transformItems(facetValues.slice(0, getLimit()).map(formatItems), {\n            results: results\n          });\n          var maxValuesPerFacetConfig = state.maxValuesPerFacet;\n          var currentLimit = getLimit();\n          // If the limit is the max number of facet retrieved it is impossible to know\n          // if the facets are exhaustive. The only moment we are sure it is exhaustive\n          // is when it is strictly under the number requested unless we know that another\n          // widget has requested more values (maxValuesPerFacet > getLimit()).\n          // Because this is used for making the search of facets unable or not, it is important\n          // to be conservative here.\n          hasExhaustiveItems = maxValuesPerFacetConfig > currentLimit ? facetValues.length <= currentLimit : facetValues.length < currentLimit;\n          lastResultsFromMainSearch = results;\n          lastItemsFromMainSearch = items;\n          if (renderOptions.results) {\n            toggleShowMore = createToggleShowMore(renderOptions, this);\n          }\n        }\n\n        // Do not mistake searchForFacetValues and searchFacetValues which is the actual search\n        // function\n        var searchFacetValues = searchForFacetValues && searchForFacetValues(renderOptions);\n        var canShowLess = isShowingMore && lastItemsFromMainSearch.length > limit;\n        var canShowMore = showMore && !hasExhaustiveItems;\n        var canToggleShowMore = canShowLess || canShowMore;\n        return {\n          createURL: function createURL(facetValue) {\n            return _createURL(function (uiState) {\n              return _this.getWidgetUiState(uiState, {\n                searchParameters: state.resetPage().toggleFacetRefinement(attribute, facetValue),\n                helper: helper\n              });\n            });\n          },\n          items: items,\n          refine: triggerRefine,\n          searchForItems: searchFacetValues,\n          isFromSearch: false,\n          canRefine: items.length > 0,\n          widgetParams: widgetParams,\n          isShowingMore: isShowingMore,\n          canToggleShowMore: canToggleShowMore,\n          toggleShowMore: cachedToggleShowMore,\n          sendEvent: sendEvent,\n          hasExhaustiveItems: hasExhaustiveItems\n        };\n      },\n      dispose: function dispose(_ref4) {\n        var state = _ref4.state;\n        unmountFn();\n        var withoutMaxValuesPerFacet = state.setQueryParameter('maxValuesPerFacet', undefined);\n        if (operator === 'and') {\n          return withoutMaxValuesPerFacet.removeFacet(attribute);\n        }\n        return withoutMaxValuesPerFacet.removeDisjunctiveFacet(attribute);\n      },\n      getWidgetUiState: function getWidgetUiState(uiState, _ref5) {\n        var searchParameters = _ref5.searchParameters;\n        var values = operator === 'or' ? searchParameters.getDisjunctiveRefinements(attribute) : searchParameters.getConjunctiveRefinements(attribute);\n        return removeEmptyRefinementsFromUiState(_objectSpread(_objectSpread({}, uiState), {}, {\n          refinementList: _objectSpread(_objectSpread({}, uiState.refinementList), {}, _defineProperty({}, attribute, values))\n        }), attribute);\n      },\n      getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {\n        var uiState = _ref6.uiState;\n        var isDisjunctive = operator === 'or';\n        if (searchParameters.isHierarchicalFacet(attribute)) {\n          process.env.NODE_ENV === 'development' ? warning(false, \"RefinementList: Attribute \\\"\".concat(attribute, \"\\\" is already used by another widget applying hierarchical faceting.\\nAs this is not supported, please make sure to remove this other widget or this RefinementList widget will not work at all.\")) : void 0;\n          return searchParameters;\n        }\n        if (isDisjunctive && searchParameters.isConjunctiveFacet(attribute) || !isDisjunctive && searchParameters.isDisjunctiveFacet(attribute)) {\n          process.env.NODE_ENV === 'development' ? warning(false, \"RefinementList: Attribute \\\"\".concat(attribute, \"\\\" is used by another refinement list with a different operator.\\nAs this is not supported, please make sure to only use this attribute with one of the two operators.\")) : void 0;\n          return searchParameters;\n        }\n        var values = uiState.refinementList && uiState.refinementList[attribute];\n        var withFacetConfiguration = isDisjunctive ? searchParameters.addDisjunctiveFacet(attribute).removeDisjunctiveFacetRefinement(attribute) : searchParameters.addFacet(attribute).removeFacetRefinement(attribute);\n        var currentMaxValuesPerFacet = withFacetConfiguration.maxValuesPerFacet || 0;\n        var nextMaxValuesPerFacet = Math.max(currentMaxValuesPerFacet, showMore ? showMoreLimit : limit);\n        var withMaxValuesPerFacet = withFacetConfiguration.setQueryParameter('maxValuesPerFacet', nextMaxValuesPerFacet);\n        if (!values) {\n          var key = isDisjunctive ? 'disjunctiveFacetsRefinements' : 'facetsRefinements';\n          return withMaxValuesPerFacet.setQueryParameters(_defineProperty({}, key, _objectSpread(_objectSpread({}, withMaxValuesPerFacet[key]), {}, _defineProperty({}, attribute, []))));\n        }\n        return values.reduce(function (parameters, value) {\n          return isDisjunctive ? parameters.addDisjunctiveFacetRefinement(attribute, value) : parameters.addFacetRefinement(attribute, value);\n        }, withMaxValuesPerFacet);\n      }\n    };\n  };\n};\nfunction removeEmptyRefinementsFromUiState(indexUiState, attribute) {\n  if (!indexUiState.refinementList) {\n    return indexUiState;\n  }\n  if (!indexUiState.refinementList[attribute] || indexUiState.refinementList[attribute].length === 0) {\n    delete indexUiState.refinementList[attribute];\n  }\n  if (Object.keys(indexUiState.refinementList).length === 0) {\n    delete indexUiState.refinementList;\n  }\n  return indexUiState;\n}\nexport default connectRefinementList;", "import { h } from 'preact';\nvar _ref2 = h(\"path\", {\n  d: \"M8.114 10L.944 2.83 0 1.885 1.886 0l.943.943L10 8.113l7.17-7.17.944-.943L20 1.886l-.943.943-7.17 7.17 7.17 7.17.943.944L18.114 20l-.943-.943-7.17-7.17-7.17 7.17-.944.943L0 18.114l.943-.943L8.113 10z\"\n});\nvar _ref4 = h(\"path\", {\n  d: \"M26.804 29.01c-2.832 2.34-6.465 3.746-10.426 3.746C7.333 32.756 0 25.424 0 16.378 0 7.333 7.333 0 16.378 0c9.046 0 16.378 7.333 16.378 16.378 0 3.96-1.406 7.594-3.746 10.426l10.534 10.534c.607.607.61 1.59-.004 2.202-.61.61-1.597.61-2.202.004L26.804 29.01zm-10.426.627c7.323 0 13.26-5.936 13.26-13.26 0-7.32-5.937-13.257-13.26-13.257C9.056 3.12 3.12 9.056 3.12 16.378c0 7.323 5.936 13.26 13.258 13.26z\"\n});\nvar _ref6 = h(\"g\", {\n  fill: \"none\",\n  \"fill-rule\": \"evenodd\"\n}, h(\"g\", {\n  transform: \"translate(1 1)\",\n  \"stroke-width\": \"2\"\n}, h(\"circle\", {\n  \"stroke-opacity\": \".5\",\n  cx: \"18\",\n  cy: \"18\",\n  r: \"18\"\n}), h(\"path\", {\n  d: \"M36 18c0-9.94-8.06-18-18-18\"\n}, h(\"animateTransform\", {\n  attributeName: \"transform\",\n  type: \"rotate\",\n  from: \"0 18 18\",\n  to: \"360 18 18\",\n  dur: \"1s\",\n  repeatCount: \"indefinite\"\n}))));\nvar defaultTemplate = {\n  reset: function reset(_ref) {\n    var cssClasses = _ref.cssClasses;\n    return h(\"svg\", {\n      className: cssClasses.resetIcon,\n      viewBox: \"0 0 20 20\",\n      width: \"10\",\n      height: \"10\",\n      \"aria-hidden\": \"true\"\n    }, _ref2);\n  },\n  submit: function submit(_ref3) {\n    var cssClasses = _ref3.cssClasses;\n    return h(\"svg\", {\n      className: cssClasses.submitIcon,\n      width: \"10\",\n      height: \"10\",\n      viewBox: \"0 0 40 40\",\n      \"aria-hidden\": \"true\"\n    }, _ref4);\n  },\n  loadingIndicator: function loadingIndicator(_ref5) {\n    var cssClasses = _ref5.cssClasses;\n    /* eslint-disable react/no-unknown-property */\n    // Preact supports kebab case attributes, and using camel case would\n    // require using `preact/compat`.\n    // @TODO: reconsider using the `react` ESLint preset\n    return h(\"svg\", {\n      \"aria-label\": \"Results are loading\",\n      className: cssClasses.loadingIcon,\n      width: \"16\",\n      height: \"16\",\n      viewBox: \"0 0 38 38\",\n      stroke: \"#444\",\n      \"aria-hidden\": \"true\"\n    }, _ref6);\n    /* eslint-enable react/no-unknown-property */\n  }\n};\n\nexport default defaultTemplate;", "import { cx } from 'instantsearch-ui-components';\nimport { h } from 'preact';\nimport { formatNumber } from \"../../lib/formatNumber.js\";\nvar defaultTemplates = {\n  item: function item(_ref) {\n    var cssClasses = _ref.cssClasses,\n      count = _ref.count,\n      value = _ref.value,\n      highlighted = _ref.highlighted,\n      isRefined = _ref.isRefined,\n      isFromSearch = _ref.isFromSearch;\n    return h(\"label\", {\n      className: cx(cssClasses.label)\n    }, h(\"input\", {\n      type: \"checkbox\",\n      className: cx(cssClasses.checkbox),\n      value: value,\n      defaultChecked: isRefined\n    }), h(\"span\", {\n      className: cx(cssClasses.labelText),\n      dangerouslySetInnerHTML: isFromSearch ? {\n        __html: highlighted\n      } : undefined\n    }, !isFromSearch && highlighted), h(\"span\", {\n      className: cx(cssClasses.count)\n    }, formatNumber(count)));\n  },\n  showMoreText: function showMoreText(_ref2) {\n    var isShowingMore = _ref2.isShowingMore;\n    return isShowingMore ? 'Show less' : 'Show more';\n  },\n  searchableNoResults: function searchableNoResults() {\n    return 'No results';\n  }\n};\nexport default defaultTemplates;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, render } from 'preact';\nimport RefinementList from \"../../components/RefinementList/RefinementList.js\";\nimport connectRefinementList from \"../../connectors/refinement-list/connectRefinementList.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { prepareTemplateProps } from \"../../lib/templating/index.js\";\nimport { getContainerNode, createDocumentationMessageGenerator } from \"../../lib/utils/index.js\";\nimport searchBoxDefaultTemplates from \"../search-box/defaultTemplates.js\";\nimport defaultTemplates from \"./defaultTemplates.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'refinement-list'\n});\nvar suit = component('RefinementList');\nvar searchBoxSuit = component('SearchBox');\nvar renderer = function renderer(_ref) {\n  var containerNode = _ref.containerNode,\n    cssClasses = _ref.cssClasses,\n    templates = _ref.templates,\n    searchBoxTemplates = _ref.searchBoxTemplates,\n    renderState = _ref.renderState,\n    showMore = _ref.showMore,\n    searchable = _ref.searchable,\n    searchablePlaceholder = _ref.searchablePlaceholder,\n    searchableIsAlwaysActive = _ref.searchableIsAlwaysActive;\n  return function (_ref2, isFirstRendering) {\n    var refine = _ref2.refine,\n      items = _ref2.items,\n      createURL = _ref2.createURL,\n      searchForItems = _ref2.searchForItems,\n      isFromSearch = _ref2.isFromSearch,\n      instantSearchInstance = _ref2.instantSearchInstance,\n      toggleShowMore = _ref2.toggleShowMore,\n      isShowingMore = _ref2.isShowingMore,\n      hasExhaustiveItems = _ref2.hasExhaustiveItems,\n      canToggleShowMore = _ref2.canToggleShowMore;\n    if (isFirstRendering) {\n      renderState.templateProps = prepareTemplateProps({\n        defaultTemplates: defaultTemplates,\n        templatesConfig: instantSearchInstance.templatesConfig,\n        templates: templates\n      });\n      renderState.searchBoxTemplateProps = prepareTemplateProps({\n        defaultTemplates: searchBoxDefaultTemplates,\n        templatesConfig: instantSearchInstance.templatesConfig,\n        templates: searchBoxTemplates\n      });\n      return;\n    }\n    render(h(RefinementList, {\n      createURL: createURL,\n      cssClasses: cssClasses,\n      facetValues: items,\n      templateProps: renderState.templateProps,\n      searchBoxTemplateProps: renderState.searchBoxTemplateProps,\n      toggleRefinement: refine,\n      searchFacetValues: searchable ? searchForItems : undefined,\n      searchPlaceholder: searchablePlaceholder,\n      searchIsAlwaysActive: searchableIsAlwaysActive,\n      isFromSearch: isFromSearch,\n      showMore: showMore && !isFromSearch && items.length > 0,\n      toggleShowMore: toggleShowMore,\n      isShowingMore: isShowingMore,\n      hasExhaustiveItems: hasExhaustiveItems,\n      canToggleShowMore: canToggleShowMore\n    }), containerNode);\n  };\n};\n/**\n * The refinement list widget is one of the most common widget that you can find\n * in a search UI. With this widget, the user can filter the dataset based on facets.\n *\n * The refinement list displays only the most relevant facets for the current search\n * context. The sort option only affects the facet that are returned by the engine,\n * not which facets are returned.\n *\n * This widget also implements search for facet values, which is a mini search inside the\n * values of the facets. This makes easy to deal with uncommon facet values.\n *\n * @requirements\n *\n * The attribute passed to `attribute` must be declared as an\n * [attribute for faceting](https://www.algolia.com/doc/guides/searching/faceting/#declaring-attributes-for-faceting)\n * in your Algolia settings.\n *\n * If you also want to use search for facet values on this attribute, you need to make it searchable using the [dashboard](https://www.algolia.com/explorer/display/) or using the [API](https://www.algolia.com/doc/guides/searching/faceting/#search-for-facet-values).\n */\nvar refinementList = function refinementList(widgetParams) {\n  var _ref3 = widgetParams || {},\n    container = _ref3.container,\n    attribute = _ref3.attribute,\n    operator = _ref3.operator,\n    sortBy = _ref3.sortBy,\n    limit = _ref3.limit,\n    showMore = _ref3.showMore,\n    showMoreLimit = _ref3.showMoreLimit,\n    _ref3$searchable = _ref3.searchable,\n    searchable = _ref3$searchable === void 0 ? false : _ref3$searchable,\n    _ref3$searchablePlace = _ref3.searchablePlaceholder,\n    searchablePlaceholder = _ref3$searchablePlace === void 0 ? 'Search...' : _ref3$searchablePlace,\n    _ref3$searchableEscap = _ref3.searchableEscapeFacetValues,\n    searchableEscapeFacetValues = _ref3$searchableEscap === void 0 ? true : _ref3$searchableEscap,\n    _ref3$searchableIsAlw = _ref3.searchableIsAlwaysActive,\n    searchableIsAlwaysActive = _ref3$searchableIsAlw === void 0 ? true : _ref3$searchableIsAlw,\n    _ref3$cssClasses = _ref3.cssClasses,\n    userCssClasses = _ref3$cssClasses === void 0 ? {} : _ref3$cssClasses,\n    _ref3$templates = _ref3.templates,\n    templates = _ref3$templates === void 0 ? {} : _ref3$templates,\n    transformItems = _ref3.transformItems;\n  if (!container) {\n    throw new Error(withUsage('The `container` option is required.'));\n  }\n  var escapeFacetValues = searchable ? Boolean(searchableEscapeFacetValues) : false;\n  var containerNode = getContainerNode(container);\n  var cssClasses = {\n    root: cx(suit(), userCssClasses.root),\n    noRefinementRoot: cx(suit({\n      modifierName: 'noRefinement'\n    }), userCssClasses.noRefinementRoot),\n    list: cx(suit({\n      descendantName: 'list'\n    }), userCssClasses.list),\n    item: cx(suit({\n      descendantName: 'item'\n    }), userCssClasses.item),\n    selectedItem: cx(suit({\n      descendantName: 'item',\n      modifierName: 'selected'\n    }), userCssClasses.selectedItem),\n    searchBox: cx(suit({\n      descendantName: 'searchBox'\n    }), userCssClasses.searchBox),\n    label: cx(suit({\n      descendantName: 'label'\n    }), userCssClasses.label),\n    checkbox: cx(suit({\n      descendantName: 'checkbox'\n    }), userCssClasses.checkbox),\n    labelText: cx(suit({\n      descendantName: 'labelText'\n    }), userCssClasses.labelText),\n    count: cx(suit({\n      descendantName: 'count'\n    }), userCssClasses.count),\n    noResults: cx(suit({\n      descendantName: 'noResults'\n    }), userCssClasses.noResults),\n    showMore: cx(suit({\n      descendantName: 'showMore'\n    }), userCssClasses.showMore),\n    disabledShowMore: cx(suit({\n      descendantName: 'showMore',\n      modifierName: 'disabled'\n    }), userCssClasses.disabledShowMore),\n    searchable: {\n      root: cx(searchBoxSuit(), userCssClasses.searchableRoot),\n      form: cx(searchBoxSuit({\n        descendantName: 'form'\n      }), userCssClasses.searchableForm),\n      input: cx(searchBoxSuit({\n        descendantName: 'input'\n      }), userCssClasses.searchableInput),\n      submit: cx(searchBoxSuit({\n        descendantName: 'submit'\n      }), userCssClasses.searchableSubmit),\n      submitIcon: cx(searchBoxSuit({\n        descendantName: 'submitIcon'\n      }), userCssClasses.searchableSubmitIcon),\n      reset: cx(searchBoxSuit({\n        descendantName: 'reset'\n      }), userCssClasses.searchableReset),\n      resetIcon: cx(searchBoxSuit({\n        descendantName: 'resetIcon'\n      }), userCssClasses.searchableResetIcon),\n      loadingIndicator: cx(searchBoxSuit({\n        descendantName: 'loadingIndicator'\n      }), userCssClasses.searchableLoadingIndicator),\n      loadingIcon: cx(searchBoxSuit({\n        descendantName: 'loadingIcon'\n      }), userCssClasses.searchableLoadingIcon)\n    }\n  };\n  var specializedRenderer = renderer({\n    containerNode: containerNode,\n    cssClasses: cssClasses,\n    templates: templates,\n    searchBoxTemplates: {\n      submit: templates.searchableSubmit,\n      reset: templates.searchableReset,\n      loadingIndicator: templates.searchableLoadingIndicator\n    },\n    renderState: {},\n    searchable: searchable,\n    searchablePlaceholder: searchablePlaceholder,\n    searchableIsAlwaysActive: searchableIsAlwaysActive,\n    showMore: showMore\n  });\n  var makeWidget = connectRefinementList(specializedRenderer, function () {\n    return render(null, containerNode);\n  });\n  return _objectSpread(_objectSpread({}, makeWidget({\n    attribute: attribute,\n    operator: operator,\n    limit: limit,\n    showMore: showMore,\n    showMoreLimit: showMoreLimit,\n    sortBy: sortBy,\n    escapeFacetValues: escapeFacetValues,\n    transformItems: transformItems\n  })), {}, {\n    $$widgetType: 'ais.refinementList'\n  });\n};\nexport default refinementList;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { checkRendering, createDocumentationMessageGenerator, noop } from \"../../lib/utils/index.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'search-box',\n  connector: true\n});\n\n/**\n * @typedef {Object} CustomSearchBoxWidgetParams\n * @property {function(string, function(string))} [queryHook = undefined] A function that will be called every time\n * a new value for the query is set. The first parameter is the query and the second is a\n * function to actually trigger the search. The function takes the query as the parameter.\n *\n * This queryHook can be used to debounce the number of searches done from the searchBox.\n */\n\nvar defaultQueryHook = function defaultQueryHook(query, hook) {\n  return hook(query);\n};\n\n/**\n * **SearchBox** connector provides the logic to build a widget that will let the user search for a query.\n *\n * The connector provides to the rendering: `refine()` to set the query. The behaviour of this function\n * may be impacted by the `queryHook` widget parameter.\n */\nvar connectSearchBox = function connectSearchBox(renderFn) {\n  var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n  checkRendering(renderFn, withUsage());\n  return function (widgetParams) {\n    var _ref = widgetParams || {},\n      _ref$queryHook = _ref.queryHook,\n      queryHook = _ref$queryHook === void 0 ? defaultQueryHook : _ref$queryHook;\n    var _refine;\n    var _clear;\n    return {\n      $$type: 'ais.searchBox',\n      init: function init(initOptions) {\n        var instantSearchInstance = initOptions.instantSearchInstance;\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(initOptions)), {}, {\n          instantSearchInstance: instantSearchInstance\n        }), true);\n      },\n      render: function render(renderOptions) {\n        var instantSearchInstance = renderOptions.instantSearchInstance;\n        renderFn(_objectSpread(_objectSpread({}, this.getWidgetRenderState(renderOptions)), {}, {\n          instantSearchInstance: instantSearchInstance\n        }), false);\n      },\n      dispose: function dispose(_ref2) {\n        var state = _ref2.state;\n        unmountFn();\n        return state.setQueryParameter('query', undefined);\n      },\n      getRenderState: function getRenderState(renderState, renderOptions) {\n        return _objectSpread(_objectSpread({}, renderState), {}, {\n          searchBox: this.getWidgetRenderState(renderOptions)\n        });\n      },\n      getWidgetRenderState: function getWidgetRenderState(_ref3) {\n        var helper = _ref3.helper,\n          instantSearchInstance = _ref3.instantSearchInstance,\n          state = _ref3.state;\n        if (!_refine) {\n          _refine = function _refine(query) {\n            queryHook(query, function (q) {\n              return helper.setQuery(q).search();\n            });\n          };\n          _clear = function _clear() {\n            helper.setQuery('').search();\n          };\n        }\n        return {\n          query: state.query || '',\n          refine: _refine,\n          clear: _clear,\n          widgetParams: widgetParams,\n          isSearchStalled: instantSearchInstance.status === 'stalled'\n        };\n      },\n      getWidgetUiState: function getWidgetUiState(uiState, _ref4) {\n        var searchParameters = _ref4.searchParameters;\n        var query = searchParameters.query || '';\n        if (query === '' || uiState && uiState.query === query) {\n          return uiState;\n        }\n        return _objectSpread(_objectSpread({}, uiState), {}, {\n          query: query\n        });\n      },\n      getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref5) {\n        var uiState = _ref5.uiState;\n        return searchParameters.setQueryParameter('query', uiState.query || '');\n      }\n    };\n  };\n};\nexport default connectSearchBox;", "function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport { cx } from 'instantsearch-ui-components';\nimport { h, render } from 'preact';\nimport SearchBox from \"../../components/SearchBox/SearchBox.js\";\nimport connectSearchBox from \"../../connectors/search-box/connectSearchBox.js\";\nimport { component } from \"../../lib/suit.js\";\nimport { getContainerNode, createDocumentationMessageGenerator } from \"../../lib/utils/index.js\";\nimport defaultTemplates from \"./defaultTemplates.js\";\nvar withUsage = createDocumentationMessageGenerator({\n  name: 'search-box'\n});\nvar suit = component('SearchBox');\nvar renderer = function renderer(_ref) {\n  var containerNode = _ref.containerNode,\n    cssClasses = _ref.cssClasses,\n    placeholder = _ref.placeholder,\n    templates = _ref.templates,\n    autofocus = _ref.autofocus,\n    searchAsYouType = _ref.searchAsYouType,\n    ignoreCompositionEvents = _ref.ignoreCompositionEvents,\n    showReset = _ref.showReset,\n    showSubmit = _ref.showSubmit,\n    showLoadingIndicator = _ref.showLoadingIndicator;\n  return function (_ref2) {\n    var refine = _ref2.refine,\n      query = _ref2.query,\n      isSearchStalled = _ref2.isSearchStalled;\n    render(h(SearchBox, {\n      query: query,\n      placeholder: placeholder,\n      autofocus: autofocus,\n      refine: refine,\n      searchAsYouType: searchAsYouType,\n      ignoreCompositionEvents: ignoreCompositionEvents,\n      templates: templates,\n      showSubmit: showSubmit,\n      showReset: showReset,\n      showLoadingIndicator: showLoadingIndicator,\n      isSearchStalled: isSearchStalled,\n      cssClasses: cssClasses\n    }), containerNode);\n  };\n};\n\n/**\n * The searchbox widget is used to let the user set a text based query.\n *\n * This is usually the  main entry point to start the search in an instantsearch context. For that\n * reason is usually placed on top, and not hidden so that the user can start searching right\n * away.\n *\n */\n\nvar searchBox = function searchBox(widgetParams) {\n  var _ref3 = widgetParams || {},\n    container = _ref3.container,\n    _ref3$placeholder = _ref3.placeholder,\n    placeholder = _ref3$placeholder === void 0 ? '' : _ref3$placeholder,\n    _ref3$cssClasses = _ref3.cssClasses,\n    userCssClasses = _ref3$cssClasses === void 0 ? {} : _ref3$cssClasses,\n    _ref3$autofocus = _ref3.autofocus,\n    autofocus = _ref3$autofocus === void 0 ? false : _ref3$autofocus,\n    _ref3$searchAsYouType = _ref3.searchAsYouType,\n    searchAsYouType = _ref3$searchAsYouType === void 0 ? true : _ref3$searchAsYouType,\n    _ref3$ignoreCompositi = _ref3.ignoreCompositionEvents,\n    ignoreCompositionEvents = _ref3$ignoreCompositi === void 0 ? false : _ref3$ignoreCompositi,\n    _ref3$showReset = _ref3.showReset,\n    showReset = _ref3$showReset === void 0 ? true : _ref3$showReset,\n    _ref3$showSubmit = _ref3.showSubmit,\n    showSubmit = _ref3$showSubmit === void 0 ? true : _ref3$showSubmit,\n    _ref3$showLoadingIndi = _ref3.showLoadingIndicator,\n    showLoadingIndicator = _ref3$showLoadingIndi === void 0 ? true : _ref3$showLoadingIndi,\n    queryHook = _ref3.queryHook,\n    _ref3$templates = _ref3.templates,\n    userTemplates = _ref3$templates === void 0 ? {} : _ref3$templates;\n  if (!container) {\n    throw new Error(withUsage('The `container` option is required.'));\n  }\n  var containerNode = getContainerNode(container);\n  var cssClasses = {\n    root: cx(suit(), userCssClasses.root),\n    form: cx(suit({\n      descendantName: 'form'\n    }), userCssClasses.form),\n    input: cx(suit({\n      descendantName: 'input'\n    }), userCssClasses.input),\n    submit: cx(suit({\n      descendantName: 'submit'\n    }), userCssClasses.submit),\n    submitIcon: cx(suit({\n      descendantName: 'submitIcon'\n    }), userCssClasses.submitIcon),\n    reset: cx(suit({\n      descendantName: 'reset'\n    }), userCssClasses.reset),\n    resetIcon: cx(suit({\n      descendantName: 'resetIcon'\n    }), userCssClasses.resetIcon),\n    loadingIndicator: cx(suit({\n      descendantName: 'loadingIndicator'\n    }), userCssClasses.loadingIndicator),\n    loadingIcon: cx(suit({\n      descendantName: 'loadingIcon'\n    }), userCssClasses.loadingIcon)\n  };\n  var templates = _objectSpread(_objectSpread({}, defaultTemplates), userTemplates);\n  var specializedRenderer = renderer({\n    containerNode: containerNode,\n    cssClasses: cssClasses,\n    placeholder: placeholder,\n    templates: templates,\n    autofocus: autofocus,\n    searchAsYouType: searchAsYouType,\n    ignoreCompositionEvents: ignoreCompositionEvents,\n    showReset: showReset,\n    showSubmit: showSubmit,\n    showLoadingIndicator: showLoadingIndicator\n  });\n  var makeWidget = connectSearchBox(specializedRenderer, function () {\n    return render(null, containerNode);\n  });\n  return _objectSpread(_objectSpread({}, makeWidget({\n    queryHook: queryHook\n  })), {}, {\n    $$widgetType: 'ais.searchBox'\n  });\n};\nexport default searchBox;", "import { deprecate } from \"../lib/utils/index.js\";\nimport answers from \"./answers/answers.js\";\nimport dynamicWidgets from \"./dynamic-widgets/dynamic-widgets.js\";\n\n/** @deprecated answers is no longer supported */\nexport var EXPERIMENTAL_answers = deprecate(answers, 'answers is no longer supported');\n\n/** @deprecated use dynamicWidgets */\nexport var EXPERIMENTAL_dynamicWidgets = deprecate(dynamicWidgets, 'use dynamicWidgets');\nexport { dynamicWidgets };\nexport { default as analytics } from \"./analytics/analytics.js\";\nexport { default as breadcrumb } from \"./breadcrumb/breadcrumb.js\";\nexport { default as clearRefinements } from \"./clear-refinements/clear-refinements.js\";\nexport { default as configure } from \"./configure/configure.js\";\nexport { default as currentRefinements } from \"./current-refinements/current-refinements.js\";\nexport { default as EXPERIMENTAL_configureRelatedItems } from \"./configure-related-items/configure-related-items.js\";\nexport { default as geoSearch } from \"./geo-search/geo-search.js\";\nexport { default as hierarchicalMenu } from \"./hierarchical-menu/hierarchical-menu.js\";\nexport { default as hits } from \"./hits/hits.js\";\nexport { default as hitsPerPage } from \"./hits-per-page/hits-per-page.js\";\nexport { default as index } from \"./index/index.js\";\nexport { default as infiniteHits } from \"./infinite-hits/infinite-hits.js\";\nexport { default as menu } from \"./menu/menu.js\";\nexport { default as menuSelect } from \"./menu-select/menu-select.js\";\nexport { default as numericMenu } from \"./numeric-menu/numeric-menu.js\";\nexport { default as pagination } from \"./pagination/pagination.js\";\nexport { default as panel } from \"./panel/panel.js\";\nexport { default as places } from \"./places/places.js\";\nexport { default as poweredBy } from \"./powered-by/powered-by.js\";\nexport { default as queryRuleContext } from \"./query-rule-context/query-rule-context.js\";\nexport { default as queryRuleCustomData } from \"./query-rule-custom-data/query-rule-custom-data.js\";\nexport { default as relatedProducts } from \"./related-products/related-products.js\";\nexport { default as rangeInput } from \"./range-input/range-input.js\";\nexport { default as rangeSlider } from \"./range-slider/range-slider.js\";\nexport { default as ratingMenu } from \"./rating-menu/rating-menu.js\";\nexport { default as refinementList } from \"./refinement-list/refinement-list.js\";\nexport { default as relevantSort } from \"./relevant-sort/relevant-sort.js\";\nexport { default as searchBox } from \"./search-box/search-box.js\";\nexport { default as sortBy } from \"./sort-by/sort-by.js\";\nexport { default as stats } from \"./stats/stats.js\";\nexport { default as toggleRefinement } from \"./toggle-refinement/toggle-refinement.js\";\nexport { default as trendingItems } from \"./trending-items/trending-items.js\";\nexport { default as voiceSearch } from \"./voice-search/voice-search.js\";\nexport { default as frequentlyBoughtTogether } from \"./frequently-bought-together/frequently-bought-together.js\";\nexport { default as lookingSimilar } from \"./looking-similar/looking-similar.js\";", "import { menu, refinementList } from \"instantsearch.js/es/widgets\";\n\nconst refinementListDefaultOptions = {\n  cssClasses: {\n    list: \"c-admin--search--filters-items\",\n    item: \"c-admin--search--filters-item\",\n    label: \"c-admin--search--filters-label\",\n    count: \"c-admin--search--filters-count\",\n    showMore: \"c-admin--search--filters-more\",\n  },\n  showMore: true,\n  templates: {\n    showMoreText(data, { html }) {\n      return html`<span\n        >${data.isShowingMore ? \"Voir moins\" : \"Voir plus\"}</span\n      >`;\n    },\n  },\n};\n\nexport default {\n  complete: {\n    widget: menu,\n    title: \"Statut de la fiche\",\n    options: {\n      cssClasses: {\n        list: \"c-admin--search--filters-items\",\n        item: \"c-admin--search--filters-item\",\n        selectedItem: \"c-admin--search--filters-selected\",\n        link: \"c-admin--search--filters-link\",\n        count: \"c-admin--search--filters-count\",\n      },\n      attribute: \"human_complete\",\n      sortBy: [\"name\"],\n    },\n  },\n  color: {\n    widget: refinementList,\n    title: \"Couleur\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"color\",\n    },\n  },\n  certifications: {\n    widget: refinementList,\n    title: \"Certification\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"certifications\",\n    },\n  },\n  classification: {\n    widget: refinementList,\n    title: \"Classification\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"classification\",\n    },\n  },\n  country: {\n    widget: refinementList,\n    title: \"Pays\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"country\",\n    },\n  },\n  designation: {\n    widget: refinementList,\n    title: \"D\u00E9signation\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"designation\",\n    },\n  },\n  sub_region: {\n    widget: refinementList,\n    title: \"Sous-r\u00E9gion\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"sub_region\",\n    },\n  },\n  sub_type: {\n    widget: refinementList,\n    title: \"Sous-type\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"sub_type\",\n    },\n  },\n  type: {\n    widget: refinementList,\n    title: \"Type\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"type\",\n    },\n  },\n  region: {\n    widget: refinementList,\n    title: \"R\u00E9gion\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"region\",\n    },\n  },\n};\n", "export default {\n  showLoadingIndicator: false,\n  cssClasses: {\n    list: \"c-admin--list-root\",\n    item: \"c-admin--list--item-root\",\n    loadMore:\n      \"c-admin--search--hits-more c-trek--button-root c-trek--button-size-narrow\",\n  },\n  templates: {\n    empty(results, { html }) {\n      return html`<div class=\"c-admin--list-root\">\n        Aucun r\u00E9sultat pour <q>${results.query}</q>\n      </div>`;\n    },\n    item(hit, { html, components }) {\n      const packshot = hit.packshots?.horizontal?.medium;\n      return html`\n        <span class=\"c-admin--list--item-image\">\n          ${packshot\n            ? html`<img src=\"${packshot}\" loading=\"lazy\" />`\n            : html`<svg class=\"c-icon-root c-icon-trek--pic\" role=\"img\">\n                <use xlink:href=\"#c-icon-trek--pic\"></use>\n              </svg>`}\n        </span>\n\n        <div class=\"c-admin--list--item-content\">\n          <div class=\"c-admin--list--item-title\">\n            <span\n              class=\"c-admin--list--item-color-dot\"\n              style=\"--color: var(--list-dot-${hit.color_key}, var(--${hit.color_key}, ${hit.color_key}))\"\n            ></span>\n            <a href=\"${hit.admin_url}\"\n              >${components.Highlight({ hit, attribute: \"display_name\" })}</a\n            >\n          </div>\n        </div>\n\n        <span class=\"c-admin--list--item-status\">\n          ${hit.complete\n            ? html` <span\n                class=\"c-pill-root\"\n                style=\"--pill-color: var(--limeade);\"\n                ><svg\n                  class=\"c-icon-root c-icon-tick-square c-pill-icon\"\n                  role=\"img\"\n                >\n                  <use xlink:href=\"#c-icon-tick-square\"></use></svg\n                ><span class=\"c-pill-content\">Compl\u00E8te</span></span\n              >`\n            : html` <span\n                class=\"c-pill-root\"\n                style=\"--pill-color: var(--cinnamon);\"\n                ><svg class=\"c-icon-root c-icon-danger c-pill-icon\" role=\"img\">\n                  <use xlink:href=\"#c-icon-danger\"></use></svg\n                ><span class=\"c-pill-content\">Incompl\u00E8te</span></span\n              >`}\n        </span>\n      `;\n    },\n    showMoreText(data, { html }) {\n      return html`<span>Voir plus de r\u00E9sultats</span>`;\n    },\n  },\n};\n", "export default {\n  cssClasses: {\n    form: \"c-admin--search--box-form\",\n    input: \"c-admin--search--box-input\",\n    loadingIndicator: \"c-admin--search--box-loading\",\n    reset: \"c-admin--search--box-reset\",\n    submit: \"c-admin--search--box-submit\",\n  },\n  placeholder: \"Rechercher\",\n};\n", "export default {\n  cssClasses: {\n    noRefinementRoot: \"c-admin--search--refinements-empty\",\n    list: \"c-admin--search--refinements-items\",\n    item: \"c-admin--search--refinements-item\",\n    label: \"c-admin--search--refinements-label\",\n    category: \"c-admin--search--refinements-category\",\n    \"category-label\": \"c-admin--search--refinements-category-label\",\n    delete: \"c-admin--search--refinements-delete\",\n  },\n};\n", "import \"./box_component.css\";\n", "import \"./filters_component.css\";\n", "import \"./hits_component.css\";\n", "import \"./refinements_component.css\";\n", "import \"./spinner_component.css\";\n", "import \"./avatar_component.css\";\n", "import \"./banner_component.css\";\n", "import \"./bouncer_component.css\";\n", "import \"./button_component.css\";\n", "import flatpickr from \"flatpickr\";\nimport { French } from \"flatpickr/dist/l10n/fr.js\";\nimport \"flatpickr/dist/flatpickr.min.css\";\n\ndocument.addEventListener(\"turbo:load\", () => {\n  const input = document.querySelector(\"[data-behavior='day-picker']\");\n  if (!input) return;\n\n  const nonPickupDays = JSON.parse(input.dataset.nonPickupDays);\n  const nextAvailableDeliveryDay = input.dataset.nextAvailableDeliveryDay;\n\n  flatpickr(\"[data-behavior='day-picker']\", {\n    locale: French,\n    minDate: nextAvailableDeliveryDay,\n    disable: [\n      (date) => date.getDay() === 0 || date.getDay() === 6, // dimanche/samedi\n      (date) => nonPickupDays.includes(formatDateLocal(date)), // jours f\u00E9ri\u00E9s\n    ],\n    dateFormat: \"d/m/Y\",\n  });\n\n  function formatDateLocal(date) {\n    return date.toLocaleDateString(\"fr-FR\"); // format \"DD/MM/YYYY\"\n  }\n});\n", "export var HOOKS = [\n    \"onChange\",\n    \"onClose\",\n    \"onDayCreate\",\n    \"onDestroy\",\n    \"onKeyDown\",\n    \"onMonthChange\",\n    \"onOpen\",\n    \"onParseConfig\",\n    \"onReady\",\n    \"onValueUpdate\",\n    \"onYearChange\",\n    \"onPreCalendarPosition\",\n];\nexport var defaults = {\n    _disable: [],\n    allowInput: false,\n    allowInvalidPreload: false,\n    altFormat: \"F j, Y\",\n    altInput: false,\n    altInputClass: \"form-control input\",\n    animate: typeof window === \"object\" &&\n        window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n    ariaDateFormat: \"F j, Y\",\n    autoFillDefaultTime: true,\n    clickOpens: true,\n    closeOnSelect: true,\n    conjunction: \", \",\n    dateFormat: \"Y-m-d\",\n    defaultHour: 12,\n    defaultMinute: 0,\n    defaultSeconds: 0,\n    disable: [],\n    disableMobile: false,\n    enableSeconds: false,\n    enableTime: false,\n    errorHandler: function (err) {\n        return typeof console !== \"undefined\" && console.warn(err);\n    },\n    getWeek: function (givenDate) {\n        var date = new Date(givenDate.getTime());\n        date.setHours(0, 0, 0, 0);\n        date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n        var week1 = new Date(date.getFullYear(), 0, 4);\n        return (1 +\n            Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n                3 +\n                ((week1.getDay() + 6) % 7)) /\n                7));\n    },\n    hourIncrement: 1,\n    ignoredFocusElements: [],\n    inline: false,\n    locale: \"default\",\n    minuteIncrement: 5,\n    mode: \"single\",\n    monthSelectorType: \"dropdown\",\n    nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n    noCalendar: false,\n    now: new Date(),\n    onChange: [],\n    onClose: [],\n    onDayCreate: [],\n    onDestroy: [],\n    onKeyDown: [],\n    onMonthChange: [],\n    onOpen: [],\n    onParseConfig: [],\n    onReady: [],\n    onValueUpdate: [],\n    onYearChange: [],\n    onPreCalendarPosition: [],\n    plugins: [],\n    position: \"auto\",\n    positionElement: undefined,\n    prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n    shorthandCurrentMonth: false,\n    showMonths: 1,\n    static: false,\n    time_24hr: false,\n    weekNumbers: false,\n    wrap: false,\n};\n", "export var english = {\n    weekdays: {\n        shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        longhand: [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\",\n        ],\n    },\n    months: {\n        shorthand: [\n            \"Jan\",\n            \"Feb\",\n            \"Mar\",\n            \"Apr\",\n            \"May\",\n            \"Jun\",\n            \"Jul\",\n            \"Aug\",\n            \"Sep\",\n            \"Oct\",\n            \"Nov\",\n            \"Dec\",\n        ],\n        longhand: [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\",\n        ],\n    },\n    daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    firstDayOfWeek: 0,\n    ordinal: function (nth) {\n        var s = nth % 100;\n        if (s > 3 && s < 21)\n            return \"th\";\n        switch (s % 10) {\n            case 1:\n                return \"st\";\n            case 2:\n                return \"nd\";\n            case 3:\n                return \"rd\";\n            default:\n                return \"th\";\n        }\n    },\n    rangeSeparator: \" to \",\n    weekAbbreviation: \"Wk\",\n    scrollTitle: \"Scroll to increment\",\n    toggleTitle: \"Click to toggle\",\n    amPM: [\"AM\", \"PM\"],\n    yearAriaLabel: \"Year\",\n    monthAriaLabel: \"Month\",\n    hourAriaLabel: \"Hour\",\n    minuteAriaLabel: \"Minute\",\n    time_24hr: false,\n};\nexport default english;\n", "export var pad = function (number, length) {\n    if (length === void 0) { length = 2; }\n    return (\"000\" + number).slice(length * -1);\n};\nexport var int = function (bool) { return (bool === true ? 1 : 0); };\nexport function debounce(fn, wait) {\n    var t;\n    return function () {\n        var _this = this;\n        var args = arguments;\n        clearTimeout(t);\n        t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n    };\n}\nexport var arrayify = function (obj) {\n    return obj instanceof Array ? obj : [obj];\n};\n", "export function toggleClass(elem, className, bool) {\n    if (bool === true)\n        return elem.classList.add(className);\n    elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n    var e = window.document.createElement(tag);\n    className = className || \"\";\n    content = content || \"\";\n    e.className = className;\n    if (content !== undefined)\n        e.textContent = content;\n    return e;\n}\nexport function clearNode(node) {\n    while (node.firstChild)\n        node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n    if (condition(node))\n        return node;\n    else if (node.parentNode)\n        return findParent(node.parentNode, condition);\n    return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n    var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n    if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n        numInput.type = \"number\";\n    }\n    else {\n        numInput.type = \"text\";\n        numInput.pattern = \"\\\\d*\";\n    }\n    if (opts !== undefined)\n        for (var key in opts)\n            numInput.setAttribute(key, opts[key]);\n    wrapper.appendChild(numInput);\n    wrapper.appendChild(arrowUp);\n    wrapper.appendChild(arrowDown);\n    return wrapper;\n}\nexport function getEventTarget(event) {\n    try {\n        if (typeof event.composedPath === \"function\") {\n            var path = event.composedPath();\n            return path[0];\n        }\n        return event.target;\n    }\n    catch (error) {\n        return event.target;\n    }\n}\n", "import { int, pad } from \"../utils\";\nvar doNothing = function () { return undefined; };\nexport var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\nexport var revFormat = {\n    D: doNothing,\n    F: function (dateObj, monthName, locale) {\n        dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n    },\n    G: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    H: function (dateObj, hour) {\n        dateObj.setHours(parseFloat(hour));\n    },\n    J: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    K: function (dateObj, amPM, locale) {\n        dateObj.setHours((dateObj.getHours() % 12) +\n            12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n    },\n    M: function (dateObj, shortMonth, locale) {\n        dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n    },\n    S: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n    W: function (dateObj, weekNum, locale) {\n        var weekNumber = parseInt(weekNum);\n        var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n        date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n        return date;\n    },\n    Y: function (dateObj, year) {\n        dateObj.setFullYear(parseFloat(year));\n    },\n    Z: function (_, ISODate) { return new Date(ISODate); },\n    d: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    h: function (dateObj, hour) {\n        dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n    },\n    i: function (dateObj, minutes) {\n        dateObj.setMinutes(parseFloat(minutes));\n    },\n    j: function (dateObj, day) {\n        dateObj.setDate(parseFloat(day));\n    },\n    l: doNothing,\n    m: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    n: function (dateObj, month) {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    s: function (dateObj, seconds) {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    u: function (_, unixMillSeconds) {\n        return new Date(parseFloat(unixMillSeconds));\n    },\n    w: doNothing,\n    y: function (dateObj, year) {\n        dateObj.setFullYear(2000 + parseFloat(year));\n    },\n};\nexport var tokenRegex = {\n    D: \"\",\n    F: \"\",\n    G: \"(\\\\d\\\\d|\\\\d)\",\n    H: \"(\\\\d\\\\d|\\\\d)\",\n    J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n    K: \"\",\n    M: \"\",\n    S: \"(\\\\d\\\\d|\\\\d)\",\n    U: \"(.+)\",\n    W: \"(\\\\d\\\\d|\\\\d)\",\n    Y: \"(\\\\d{4})\",\n    Z: \"(.+)\",\n    d: \"(\\\\d\\\\d|\\\\d)\",\n    h: \"(\\\\d\\\\d|\\\\d)\",\n    i: \"(\\\\d\\\\d|\\\\d)\",\n    j: \"(\\\\d\\\\d|\\\\d)\",\n    l: \"\",\n    m: \"(\\\\d\\\\d|\\\\d)\",\n    n: \"(\\\\d\\\\d|\\\\d)\",\n    s: \"(\\\\d\\\\d|\\\\d)\",\n    u: \"(.+)\",\n    w: \"(\\\\d\\\\d|\\\\d)\",\n    y: \"(\\\\d{2})\",\n};\nexport var formats = {\n    Z: function (date) { return date.toISOString(); },\n    D: function (date, locale, options) {\n        return locale.weekdays.shorthand[formats.w(date, locale, options)];\n    },\n    F: function (date, locale, options) {\n        return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n    },\n    G: function (date, locale, options) {\n        return pad(formats.h(date, locale, options));\n    },\n    H: function (date) { return pad(date.getHours()); },\n    J: function (date, locale) {\n        return locale.ordinal !== undefined\n            ? date.getDate() + locale.ordinal(date.getDate())\n            : date.getDate();\n    },\n    K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n    M: function (date, locale) {\n        return monthToStr(date.getMonth(), true, locale);\n    },\n    S: function (date) { return pad(date.getSeconds()); },\n    U: function (date) { return date.getTime() / 1000; },\n    W: function (date, _, options) {\n        return options.getWeek(date);\n    },\n    Y: function (date) { return pad(date.getFullYear(), 4); },\n    d: function (date) { return pad(date.getDate()); },\n    h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n    i: function (date) { return pad(date.getMinutes()); },\n    j: function (date) { return date.getDate(); },\n    l: function (date, locale) {\n        return locale.weekdays.longhand[date.getDay()];\n    },\n    m: function (date) { return pad(date.getMonth() + 1); },\n    n: function (date) { return date.getMonth() + 1; },\n    s: function (date) { return date.getSeconds(); },\n    u: function (date) { return date.getTime(); },\n    w: function (date) { return date.getDay(); },\n    y: function (date) { return String(date.getFullYear()).substring(2); },\n};\n", "import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport var createDateFormatter = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n    return function (dateObj, frmt, overrideLocale) {\n        var locale = overrideLocale || l10n;\n        if (config.formatDate !== undefined && !isMobile) {\n            return config.formatDate(dateObj, frmt, locale);\n        }\n        return frmt\n            .split(\"\")\n            .map(function (c, i, arr) {\n            return formats[c] && arr[i - 1] !== \"\\\\\"\n                ? formats[c](dateObj, locale, config)\n                : c !== \"\\\\\"\n                    ? c\n                    : \"\";\n        })\n            .join(\"\");\n    };\n};\nexport var createDateParser = function (_a) {\n    var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n    return function (date, givenFormat, timeless, customLocale) {\n        if (date !== 0 && !date)\n            return undefined;\n        var locale = customLocale || l10n;\n        var parsedDate;\n        var dateOrig = date;\n        if (date instanceof Date)\n            parsedDate = new Date(date.getTime());\n        else if (typeof date !== \"string\" &&\n            date.toFixed !== undefined)\n            parsedDate = new Date(date);\n        else if (typeof date === \"string\") {\n            var format = givenFormat || (config || defaults).dateFormat;\n            var datestr = String(date).trim();\n            if (datestr === \"today\") {\n                parsedDate = new Date();\n                timeless = true;\n            }\n            else if (config && config.parseDate) {\n                parsedDate = config.parseDate(date, format);\n            }\n            else if (/Z$/.test(datestr) ||\n                /GMT$/.test(datestr)) {\n                parsedDate = new Date(date);\n            }\n            else {\n                var matched = void 0, ops = [];\n                for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n                    var token = format[i];\n                    var isBackSlash = token === \"\\\\\";\n                    var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n                    if (tokenRegex[token] && !escaped) {\n                        regexStr += tokenRegex[token];\n                        var match = new RegExp(regexStr).exec(date);\n                        if (match && (matched = true)) {\n                            ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                                fn: revFormat[token],\n                                val: match[++matchIndex],\n                            });\n                        }\n                    }\n                    else if (!isBackSlash)\n                        regexStr += \".\";\n                }\n                parsedDate =\n                    !config || !config.noCalendar\n                        ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n                        : new Date(new Date().setHours(0, 0, 0, 0));\n                ops.forEach(function (_a) {\n                    var fn = _a.fn, val = _a.val;\n                    return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n                });\n                parsedDate = matched ? parsedDate : undefined;\n            }\n        }\n        if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n            config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n            return undefined;\n        }\n        if (timeless === true)\n            parsedDate.setHours(0, 0, 0, 0);\n        return parsedDate;\n    };\n};\nexport function compareDates(date1, date2, timeless) {\n    if (timeless === void 0) { timeless = true; }\n    if (timeless !== false) {\n        return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n            new Date(date2.getTime()).setHours(0, 0, 0, 0));\n    }\n    return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n    return (3600 * (date1.getHours() - date2.getHours()) +\n        60 * (date1.getMinutes() - date2.getMinutes()) +\n        date1.getSeconds() -\n        date2.getSeconds());\n}\nexport var isBetween = function (ts, ts1, ts2) {\n    return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n    return hours * 3600 + minutes * 60 + seconds;\n};\nexport var parseSeconds = function (secondsSinceMidnight) {\n    var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n    return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n};\nexport var duration = {\n    DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n    var hours = config.defaultHour;\n    var minutes = config.defaultMinute;\n    var seconds = config.defaultSeconds;\n    if (config.minDate !== undefined) {\n        var minHour = config.minDate.getHours();\n        var minMinutes = config.minDate.getMinutes();\n        var minSeconds = config.minDate.getSeconds();\n        if (hours < minHour) {\n            hours = minHour;\n        }\n        if (hours === minHour && minutes < minMinutes) {\n            minutes = minMinutes;\n        }\n        if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n            seconds = config.minDate.getSeconds();\n    }\n    if (config.maxDate !== undefined) {\n        var maxHr = config.maxDate.getHours();\n        var maxMinutes = config.maxDate.getMinutes();\n        hours = Math.min(hours, maxHr);\n        if (hours === maxHr)\n            minutes = Math.min(maxMinutes, minutes);\n        if (hours === maxHr && minutes === maxMinutes)\n            seconds = config.maxDate.getSeconds();\n    }\n    return { hours: hours, minutes: minutes, seconds: seconds };\n}\n", "\"use strict\";\nif (typeof Object.assign !== \"function\") {\n    Object.assign = function (target) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        if (!target) {\n            throw TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var _loop_1 = function (source) {\n            if (source) {\n                Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n            }\n        };\n        for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n            var source = args_1[_a];\n            _loop_1(source);\n        }\n        return target;\n    };\n}\n", "var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nimport { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, calculateSecondsSinceMidnight, parseSeconds, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nvar DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n    var self = {\n        config: __assign(__assign({}, defaultOptions), flatpickr.defaultConfig),\n        l10n: English,\n    };\n    self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    self._handlers = [];\n    self.pluginElements = [];\n    self.loadedPlugins = [];\n    self._bind = bind;\n    self._setHoursFromDate = setHoursFromDate;\n    self._positionCalendar = positionCalendar;\n    self.changeMonth = changeMonth;\n    self.changeYear = changeYear;\n    self.clear = clear;\n    self.close = close;\n    self.onMouseOver = onMouseOver;\n    self._createElement = createElement;\n    self.createDay = createDay;\n    self.destroy = destroy;\n    self.isEnabled = isEnabled;\n    self.jumpToDate = jumpToDate;\n    self.updateValue = updateValue;\n    self.open = open;\n    self.redraw = redraw;\n    self.set = set;\n    self.setDate = setDate;\n    self.toggle = toggle;\n    function setupHelperFunctions() {\n        self.utils = {\n            getDaysInMonth: function (month, yr) {\n                if (month === void 0) { month = self.currentMonth; }\n                if (yr === void 0) { yr = self.currentYear; }\n                if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n                    return 29;\n                return self.l10n.daysInMonth[month];\n            },\n        };\n    }\n    function init() {\n        self.element = self.input = element;\n        self.isOpen = false;\n        parseConfig();\n        setupLocale();\n        setupInputs();\n        setupDates();\n        setupHelperFunctions();\n        if (!self.isMobile)\n            build();\n        bindEvents();\n        if (self.selectedDates.length || self.config.noCalendar) {\n            if (self.config.enableTime) {\n                setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n            }\n            updateValue(false);\n        }\n        setCalendarWidth();\n        var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n        if (!self.isMobile && isSafari) {\n            positionCalendar();\n        }\n        triggerEvent(\"onReady\");\n    }\n    function getClosestActiveElement() {\n        var _a;\n        return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n            .activeElement || document.activeElement);\n    }\n    function bindToInstance(fn) {\n        return fn.bind(self);\n    }\n    function setCalendarWidth() {\n        var config = self.config;\n        if (config.weekNumbers === false && config.showMonths === 1) {\n            return;\n        }\n        else if (config.noCalendar !== true) {\n            window.requestAnimationFrame(function () {\n                if (self.calendarContainer !== undefined) {\n                    self.calendarContainer.style.visibility = \"hidden\";\n                    self.calendarContainer.style.display = \"block\";\n                }\n                if (self.daysContainer !== undefined) {\n                    var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n                    self.daysContainer.style.width = daysWidth + \"px\";\n                    self.calendarContainer.style.width =\n                        daysWidth +\n                            (self.weekWrapper !== undefined\n                                ? self.weekWrapper.offsetWidth\n                                : 0) +\n                            \"px\";\n                    self.calendarContainer.style.removeProperty(\"visibility\");\n                    self.calendarContainer.style.removeProperty(\"display\");\n                }\n            });\n        }\n    }\n    function updateTime(e) {\n        if (self.selectedDates.length === 0) {\n            var defaultDate = self.config.minDate === undefined ||\n                compareDates(new Date(), self.config.minDate) >= 0\n                ? new Date()\n                : new Date(self.config.minDate.getTime());\n            var defaults = getDefaultHours(self.config);\n            defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n            self.selectedDates = [defaultDate];\n            self.latestSelectedDateObj = defaultDate;\n        }\n        if (e !== undefined && e.type !== \"blur\") {\n            timeWrapper(e);\n        }\n        var prevValue = self._input.value;\n        setHoursFromInputs();\n        updateValue();\n        if (self._input.value !== prevValue) {\n            self._debouncedChange();\n        }\n    }\n    function ampm2military(hour, amPM) {\n        return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n    }\n    function military2ampm(hour) {\n        switch (hour % 24) {\n            case 0:\n            case 12:\n                return 12;\n            default:\n                return hour % 12;\n        }\n    }\n    function setHoursFromInputs() {\n        if (self.hourElement === undefined || self.minuteElement === undefined)\n            return;\n        var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n            ? (parseInt(self.secondElement.value, 10) || 0) % 60\n            : 0;\n        if (self.amPM !== undefined) {\n            hours = ampm2military(hours, self.amPM.textContent);\n        }\n        var limitMinHours = self.config.minTime !== undefined ||\n            (self.config.minDate &&\n                self.minDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n                    0);\n        var limitMaxHours = self.config.maxTime !== undefined ||\n            (self.config.maxDate &&\n                self.maxDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n                    0);\n        if (self.config.maxTime !== undefined &&\n            self.config.minTime !== undefined &&\n            self.config.minTime > self.config.maxTime) {\n            var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n            var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n            var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n            if (currentTime > maxBound && currentTime < minBound) {\n                var result = parseSeconds(minBound);\n                hours = result[0];\n                minutes = result[1];\n                seconds = result[2];\n            }\n        }\n        else {\n            if (limitMaxHours) {\n                var maxTime = self.config.maxTime !== undefined\n                    ? self.config.maxTime\n                    : self.config.maxDate;\n                hours = Math.min(hours, maxTime.getHours());\n                if (hours === maxTime.getHours())\n                    minutes = Math.min(minutes, maxTime.getMinutes());\n                if (minutes === maxTime.getMinutes())\n                    seconds = Math.min(seconds, maxTime.getSeconds());\n            }\n            if (limitMinHours) {\n                var minTime = self.config.minTime !== undefined\n                    ? self.config.minTime\n                    : self.config.minDate;\n                hours = Math.max(hours, minTime.getHours());\n                if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n                    minutes = minTime.getMinutes();\n                if (minutes === minTime.getMinutes())\n                    seconds = Math.max(seconds, minTime.getSeconds());\n            }\n        }\n        setHours(hours, minutes, seconds);\n    }\n    function setHoursFromDate(dateObj) {\n        var date = dateObj || self.latestSelectedDateObj;\n        if (date && date instanceof Date) {\n            setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n        }\n    }\n    function setHours(hours, minutes, seconds) {\n        if (self.latestSelectedDateObj !== undefined) {\n            self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n        }\n        if (!self.hourElement || !self.minuteElement || self.isMobile)\n            return;\n        self.hourElement.value = pad(!self.config.time_24hr\n            ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n            : hours);\n        self.minuteElement.value = pad(minutes);\n        if (self.amPM !== undefined)\n            self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n        if (self.secondElement !== undefined)\n            self.secondElement.value = pad(seconds);\n    }\n    function onYearInput(event) {\n        var eventTarget = getEventTarget(event);\n        var year = parseInt(eventTarget.value) + (event.delta || 0);\n        if (year / 1000 > 1 ||\n            (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n            changeYear(year);\n        }\n    }\n    function bind(element, event, handler, options) {\n        if (event instanceof Array)\n            return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n        if (element instanceof Array)\n            return element.forEach(function (el) { return bind(el, event, handler, options); });\n        element.addEventListener(event, handler, options);\n        self._handlers.push({\n            remove: function () { return element.removeEventListener(event, handler, options); },\n        });\n    }\n    function triggerChange() {\n        triggerEvent(\"onChange\");\n    }\n    function bindEvents() {\n        if (self.config.wrap) {\n            [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n                Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n                    return bind(el, \"click\", self[evt]);\n                });\n            });\n        }\n        if (self.isMobile) {\n            setupMobile();\n            return;\n        }\n        var debouncedResize = debounce(onResize, 50);\n        self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n        if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n            bind(self.daysContainer, \"mouseover\", function (e) {\n                if (self.config.mode === \"range\")\n                    onMouseOver(getEventTarget(e));\n            });\n        bind(self._input, \"keydown\", onKeyDown);\n        if (self.calendarContainer !== undefined) {\n            bind(self.calendarContainer, \"keydown\", onKeyDown);\n        }\n        if (!self.config.inline && !self.config.static)\n            bind(window, \"resize\", debouncedResize);\n        if (window.ontouchstart !== undefined)\n            bind(window.document, \"touchstart\", documentClick);\n        else\n            bind(window.document, \"mousedown\", documentClick);\n        bind(window.document, \"focus\", documentClick, { capture: true });\n        if (self.config.clickOpens === true) {\n            bind(self._input, \"focus\", self.open);\n            bind(self._input, \"click\", self.open);\n        }\n        if (self.daysContainer !== undefined) {\n            bind(self.monthNav, \"click\", onMonthNavClick);\n            bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n            bind(self.daysContainer, \"click\", selectDate);\n        }\n        if (self.timeContainer !== undefined &&\n            self.minuteElement !== undefined &&\n            self.hourElement !== undefined) {\n            var selText = function (e) {\n                return getEventTarget(e).select();\n            };\n            bind(self.timeContainer, [\"increment\"], updateTime);\n            bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n            bind(self.timeContainer, \"click\", timeIncrement);\n            bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n            if (self.secondElement !== undefined)\n                bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n            if (self.amPM !== undefined) {\n                bind(self.amPM, \"click\", function (e) {\n                    updateTime(e);\n                });\n            }\n        }\n        if (self.config.allowInput) {\n            bind(self._input, \"blur\", onBlur);\n        }\n    }\n    function jumpToDate(jumpDate, triggerChange) {\n        var jumpTo = jumpDate !== undefined\n            ? self.parseDate(jumpDate)\n            : self.latestSelectedDateObj ||\n                (self.config.minDate && self.config.minDate > self.now\n                    ? self.config.minDate\n                    : self.config.maxDate && self.config.maxDate < self.now\n                        ? self.config.maxDate\n                        : self.now);\n        var oldYear = self.currentYear;\n        var oldMonth = self.currentMonth;\n        try {\n            if (jumpTo !== undefined) {\n                self.currentYear = jumpTo.getFullYear();\n                self.currentMonth = jumpTo.getMonth();\n            }\n        }\n        catch (e) {\n            e.message = \"Invalid date supplied: \" + jumpTo;\n            self.config.errorHandler(e);\n        }\n        if (triggerChange && self.currentYear !== oldYear) {\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        if (triggerChange &&\n            (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n            triggerEvent(\"onMonthChange\");\n        }\n        self.redraw();\n    }\n    function timeIncrement(e) {\n        var eventTarget = getEventTarget(e);\n        if (~eventTarget.className.indexOf(\"arrow\"))\n            incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n    }\n    function incrementNumInput(e, delta, inputElem) {\n        var target = e && getEventTarget(e);\n        var input = inputElem ||\n            (target && target.parentNode && target.parentNode.firstChild);\n        var event = createEvent(\"increment\");\n        event.delta = delta;\n        input && input.dispatchEvent(event);\n    }\n    function build() {\n        var fragment = window.document.createDocumentFragment();\n        self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n        self.calendarContainer.tabIndex = -1;\n        if (!self.config.noCalendar) {\n            fragment.appendChild(buildMonthNav());\n            self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n            if (self.config.weekNumbers) {\n                var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n                self.innerContainer.appendChild(weekWrapper);\n                self.weekNumbers = weekNumbers;\n                self.weekWrapper = weekWrapper;\n            }\n            self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n            self.rContainer.appendChild(buildWeekdays());\n            if (!self.daysContainer) {\n                self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n                self.daysContainer.tabIndex = -1;\n            }\n            buildDays();\n            self.rContainer.appendChild(self.daysContainer);\n            self.innerContainer.appendChild(self.rContainer);\n            fragment.appendChild(self.innerContainer);\n        }\n        if (self.config.enableTime) {\n            fragment.appendChild(buildTime());\n        }\n        toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n        toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n        toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n        self.calendarContainer.appendChild(fragment);\n        var customAppend = self.config.appendTo !== undefined &&\n            self.config.appendTo.nodeType !== undefined;\n        if (self.config.inline || self.config.static) {\n            self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n            if (self.config.inline) {\n                if (!customAppend && self.element.parentNode)\n                    self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n                else if (self.config.appendTo !== undefined)\n                    self.config.appendTo.appendChild(self.calendarContainer);\n            }\n            if (self.config.static) {\n                var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n                if (self.element.parentNode)\n                    self.element.parentNode.insertBefore(wrapper, self.element);\n                wrapper.appendChild(self.element);\n                if (self.altInput)\n                    wrapper.appendChild(self.altInput);\n                wrapper.appendChild(self.calendarContainer);\n            }\n        }\n        if (!self.config.static && !self.config.inline)\n            (self.config.appendTo !== undefined\n                ? self.config.appendTo\n                : window.document.body).appendChild(self.calendarContainer);\n    }\n    function createDay(className, date, _dayNumber, i) {\n        var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n        dayElement.dateObj = date;\n        dayElement.$i = i;\n        dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n        if (className.indexOf(\"hidden\") === -1 &&\n            compareDates(date, self.now) === 0) {\n            self.todayDateElem = dayElement;\n            dayElement.classList.add(\"today\");\n            dayElement.setAttribute(\"aria-current\", \"date\");\n        }\n        if (dateIsEnabled) {\n            dayElement.tabIndex = -1;\n            if (isDateSelected(date)) {\n                dayElement.classList.add(\"selected\");\n                self.selectedDateElem = dayElement;\n                if (self.config.mode === \"range\") {\n                    toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n                        compareDates(date, self.selectedDates[0], true) === 0);\n                    toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n                        compareDates(date, self.selectedDates[1], true) === 0);\n                    if (className === \"nextMonthDay\")\n                        dayElement.classList.add(\"inRange\");\n                }\n            }\n        }\n        else {\n            dayElement.classList.add(\"flatpickr-disabled\");\n        }\n        if (self.config.mode === \"range\") {\n            if (isDateInRange(date) && !isDateSelected(date))\n                dayElement.classList.add(\"inRange\");\n        }\n        if (self.weekNumbers &&\n            self.config.showMonths === 1 &&\n            className !== \"prevMonthDay\" &&\n            i % 7 === 6) {\n            self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n        }\n        triggerEvent(\"onDayCreate\", dayElement);\n        return dayElement;\n    }\n    function focusOnDayElem(targetNode) {\n        targetNode.focus();\n        if (self.config.mode === \"range\")\n            onMouseOver(targetNode);\n    }\n    function getFirstAvailableDay(delta) {\n        var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        for (var m = startMonth; m != endMonth; m += delta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = delta > 0 ? 0 : month.children.length - 1;\n            var endIndex = delta > 0 ? month.children.length : -1;\n            for (var i = startIndex; i != endIndex; i += delta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n                    return c;\n            }\n        }\n        return undefined;\n    }\n    function getNextAvailableDay(current, delta) {\n        var givenMonth = current.className.indexOf(\"Month\") === -1\n            ? current.dateObj.getMonth()\n            : self.currentMonth;\n        var endMonth = delta > 0 ? self.config.showMonths : -1;\n        var loopDelta = delta > 0 ? 1 : -1;\n        for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n            var month = self.daysContainer.children[m];\n            var startIndex = givenMonth - self.currentMonth === m\n                ? current.$i + delta\n                : delta < 0\n                    ? month.children.length - 1\n                    : 0;\n            var numMonthDays = month.children.length;\n            for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n                var c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 &&\n                    isEnabled(c.dateObj) &&\n                    Math.abs(current.$i - i) >= Math.abs(delta))\n                    return focusOnDayElem(c);\n            }\n        }\n        self.changeMonth(loopDelta);\n        focusOnDay(getFirstAvailableDay(loopDelta), 0);\n        return undefined;\n    }\n    function focusOnDay(current, offset) {\n        var activeElement = getClosestActiveElement();\n        var dayFocused = isInView(activeElement || document.body);\n        var startElem = current !== undefined\n            ? current\n            : dayFocused\n                ? activeElement\n                : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n                    ? self.selectedDateElem\n                    : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n                        ? self.todayDateElem\n                        : getFirstAvailableDay(offset > 0 ? 1 : -1);\n        if (startElem === undefined) {\n            self._input.focus();\n        }\n        else if (!dayFocused) {\n            focusOnDayElem(startElem);\n        }\n        else {\n            getNextAvailableDay(startElem, offset);\n        }\n    }\n    function buildMonthDays(year, month) {\n        var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n        var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n        var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n        var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n        for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n        }\n        for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n        }\n        for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n            (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n            days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n        }\n        var dayContainer = createElement(\"div\", \"dayContainer\");\n        dayContainer.appendChild(days);\n        return dayContainer;\n    }\n    function buildDays() {\n        if (self.daysContainer === undefined) {\n            return;\n        }\n        clearNode(self.daysContainer);\n        if (self.weekNumbers)\n            clearNode(self.weekNumbers);\n        var frag = document.createDocumentFragment();\n        for (var i = 0; i < self.config.showMonths; i++) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n        }\n        self.daysContainer.appendChild(frag);\n        self.days = self.daysContainer.firstChild;\n        if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n            onMouseOver();\n        }\n    }\n    function buildMonthSwitch() {\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType !== \"dropdown\")\n            return;\n        var shouldBuildMonth = function (month) {\n            if (self.config.minDate !== undefined &&\n                self.currentYear === self.config.minDate.getFullYear() &&\n                month < self.config.minDate.getMonth()) {\n                return false;\n            }\n            return !(self.config.maxDate !== undefined &&\n                self.currentYear === self.config.maxDate.getFullYear() &&\n                month > self.config.maxDate.getMonth());\n        };\n        self.monthsDropdownContainer.tabIndex = -1;\n        self.monthsDropdownContainer.innerHTML = \"\";\n        for (var i = 0; i < 12; i++) {\n            if (!shouldBuildMonth(i))\n                continue;\n            var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n            month.value = new Date(self.currentYear, i).getMonth().toString();\n            month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n            month.tabIndex = -1;\n            if (self.currentMonth === i) {\n                month.selected = true;\n            }\n            self.monthsDropdownContainer.appendChild(month);\n        }\n    }\n    function buildMonth() {\n        var container = createElement(\"div\", \"flatpickr-month\");\n        var monthNavFragment = window.document.createDocumentFragment();\n        var monthElement;\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType === \"static\") {\n            monthElement = createElement(\"span\", \"cur-month\");\n        }\n        else {\n            self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n            self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n            bind(self.monthsDropdownContainer, \"change\", function (e) {\n                var target = getEventTarget(e);\n                var selectedMonth = parseInt(target.value, 10);\n                self.changeMonth(selectedMonth - self.currentMonth);\n                triggerEvent(\"onMonthChange\");\n            });\n            buildMonthSwitch();\n            monthElement = self.monthsDropdownContainer;\n        }\n        var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n        var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n        yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n        if (self.config.minDate) {\n            yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n        }\n        if (self.config.maxDate) {\n            yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n            yearElement.disabled =\n                !!self.config.minDate &&\n                    self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n        }\n        var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n        currentMonth.appendChild(monthElement);\n        currentMonth.appendChild(yearInput);\n        monthNavFragment.appendChild(currentMonth);\n        container.appendChild(monthNavFragment);\n        return {\n            container: container,\n            yearElement: yearElement,\n            monthElement: monthElement,\n        };\n    }\n    function buildMonths() {\n        clearNode(self.monthNav);\n        self.monthNav.appendChild(self.prevMonthNav);\n        if (self.config.showMonths) {\n            self.yearElements = [];\n            self.monthElements = [];\n        }\n        for (var m = self.config.showMonths; m--;) {\n            var month = buildMonth();\n            self.yearElements.push(month.yearElement);\n            self.monthElements.push(month.monthElement);\n            self.monthNav.appendChild(month.container);\n        }\n        self.monthNav.appendChild(self.nextMonthNav);\n    }\n    function buildMonthNav() {\n        self.monthNav = createElement(\"div\", \"flatpickr-months\");\n        self.yearElements = [];\n        self.monthElements = [];\n        self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n        self.prevMonthNav.innerHTML = self.config.prevArrow;\n        self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n        self.nextMonthNav.innerHTML = self.config.nextArrow;\n        buildMonths();\n        Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n            get: function () { return self.__hidePrevMonthArrow; },\n            set: function (bool) {\n                if (self.__hidePrevMonthArrow !== bool) {\n                    toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hidePrevMonthArrow = bool;\n                }\n            },\n        });\n        Object.defineProperty(self, \"_hideNextMonthArrow\", {\n            get: function () { return self.__hideNextMonthArrow; },\n            set: function (bool) {\n                if (self.__hideNextMonthArrow !== bool) {\n                    toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hideNextMonthArrow = bool;\n                }\n            },\n        });\n        self.currentYearElement = self.yearElements[0];\n        updateNavigationCurrentMonth();\n        return self.monthNav;\n    }\n    function buildTime() {\n        self.calendarContainer.classList.add(\"hasTime\");\n        if (self.config.noCalendar)\n            self.calendarContainer.classList.add(\"noCalendar\");\n        var defaults = getDefaultHours(self.config);\n        self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n        self.timeContainer.tabIndex = -1;\n        var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n        var hourInput = createNumberInput(\"flatpickr-hour\", {\n            \"aria-label\": self.l10n.hourAriaLabel,\n        });\n        self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n        var minuteInput = createNumberInput(\"flatpickr-minute\", {\n            \"aria-label\": self.l10n.minuteAriaLabel,\n        });\n        self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n        self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n        self.hourElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getHours()\n            : self.config.time_24hr\n                ? defaults.hours\n                : military2ampm(defaults.hours));\n        self.minuteElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getMinutes()\n            : defaults.minutes);\n        self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n        self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n        self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n        self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n        self.hourElement.setAttribute(\"maxlength\", \"2\");\n        self.minuteElement.setAttribute(\"min\", \"0\");\n        self.minuteElement.setAttribute(\"max\", \"59\");\n        self.minuteElement.setAttribute(\"maxlength\", \"2\");\n        self.timeContainer.appendChild(hourInput);\n        self.timeContainer.appendChild(separator);\n        self.timeContainer.appendChild(minuteInput);\n        if (self.config.time_24hr)\n            self.timeContainer.classList.add(\"time24hr\");\n        if (self.config.enableSeconds) {\n            self.timeContainer.classList.add(\"hasSeconds\");\n            var secondInput = createNumberInput(\"flatpickr-second\");\n            self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n            self.secondElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getSeconds()\n                : defaults.seconds);\n            self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n            self.secondElement.setAttribute(\"min\", \"0\");\n            self.secondElement.setAttribute(\"max\", \"59\");\n            self.secondElement.setAttribute(\"maxlength\", \"2\");\n            self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n            self.timeContainer.appendChild(secondInput);\n        }\n        if (!self.config.time_24hr) {\n            self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n                ? self.hourElement.value\n                : self.config.defaultHour) > 11)]);\n            self.amPM.title = self.l10n.toggleTitle;\n            self.amPM.tabIndex = -1;\n            self.timeContainer.appendChild(self.amPM);\n        }\n        return self.timeContainer;\n    }\n    function buildWeekdays() {\n        if (!self.weekdayContainer)\n            self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n        else\n            clearNode(self.weekdayContainer);\n        for (var i = self.config.showMonths; i--;) {\n            var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n            self.weekdayContainer.appendChild(container);\n        }\n        updateWeekdays();\n        return self.weekdayContainer;\n    }\n    function updateWeekdays() {\n        if (!self.weekdayContainer) {\n            return;\n        }\n        var firstDayOfWeek = self.l10n.firstDayOfWeek;\n        var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n        if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n            weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n        }\n        for (var i = self.config.showMonths; i--;) {\n            self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n        }\n    }\n    function buildWeeks() {\n        self.calendarContainer.classList.add(\"hasWeeks\");\n        var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n        weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n        var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n        weekWrapper.appendChild(weekNumbers);\n        return {\n            weekWrapper: weekWrapper,\n            weekNumbers: weekNumbers,\n        };\n    }\n    function changeMonth(value, isOffset) {\n        if (isOffset === void 0) { isOffset = true; }\n        var delta = isOffset ? value : value - self.currentMonth;\n        if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n            (delta > 0 && self._hideNextMonthArrow === true))\n            return;\n        self.currentMonth += delta;\n        if (self.currentMonth < 0 || self.currentMonth > 11) {\n            self.currentYear += self.currentMonth > 11 ? 1 : -1;\n            self.currentMonth = (self.currentMonth + 12) % 12;\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        buildDays();\n        triggerEvent(\"onMonthChange\");\n        updateNavigationCurrentMonth();\n    }\n    function clear(triggerChangeEvent, toInitial) {\n        if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n        if (toInitial === void 0) { toInitial = true; }\n        self.input.value = \"\";\n        if (self.altInput !== undefined)\n            self.altInput.value = \"\";\n        if (self.mobileInput !== undefined)\n            self.mobileInput.value = \"\";\n        self.selectedDates = [];\n        self.latestSelectedDateObj = undefined;\n        if (toInitial === true) {\n            self.currentYear = self._initialDate.getFullYear();\n            self.currentMonth = self._initialDate.getMonth();\n        }\n        if (self.config.enableTime === true) {\n            var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n            setHours(hours, minutes, seconds);\n        }\n        self.redraw();\n        if (triggerChangeEvent)\n            triggerEvent(\"onChange\");\n    }\n    function close() {\n        self.isOpen = false;\n        if (!self.isMobile) {\n            if (self.calendarContainer !== undefined) {\n                self.calendarContainer.classList.remove(\"open\");\n            }\n            if (self._input !== undefined) {\n                self._input.classList.remove(\"active\");\n            }\n        }\n        triggerEvent(\"onClose\");\n    }\n    function destroy() {\n        if (self.config !== undefined)\n            triggerEvent(\"onDestroy\");\n        for (var i = self._handlers.length; i--;) {\n            self._handlers[i].remove();\n        }\n        self._handlers = [];\n        if (self.mobileInput) {\n            if (self.mobileInput.parentNode)\n                self.mobileInput.parentNode.removeChild(self.mobileInput);\n            self.mobileInput = undefined;\n        }\n        else if (self.calendarContainer && self.calendarContainer.parentNode) {\n            if (self.config.static && self.calendarContainer.parentNode) {\n                var wrapper = self.calendarContainer.parentNode;\n                wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n                if (wrapper.parentNode) {\n                    while (wrapper.firstChild)\n                        wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n                    wrapper.parentNode.removeChild(wrapper);\n                }\n            }\n            else\n                self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n        }\n        if (self.altInput) {\n            self.input.type = \"text\";\n            if (self.altInput.parentNode)\n                self.altInput.parentNode.removeChild(self.altInput);\n            delete self.altInput;\n        }\n        if (self.input) {\n            self.input.type = self.input._type;\n            self.input.classList.remove(\"flatpickr-input\");\n            self.input.removeAttribute(\"readonly\");\n        }\n        [\n            \"_showTimeInput\",\n            \"latestSelectedDateObj\",\n            \"_hideNextMonthArrow\",\n            \"_hidePrevMonthArrow\",\n            \"__hideNextMonthArrow\",\n            \"__hidePrevMonthArrow\",\n            \"isMobile\",\n            \"isOpen\",\n            \"selectedDateElem\",\n            \"minDateHasTime\",\n            \"maxDateHasTime\",\n            \"days\",\n            \"daysContainer\",\n            \"_input\",\n            \"_positionElement\",\n            \"innerContainer\",\n            \"rContainer\",\n            \"monthNav\",\n            \"todayDateElem\",\n            \"calendarContainer\",\n            \"weekdayContainer\",\n            \"prevMonthNav\",\n            \"nextMonthNav\",\n            \"monthsDropdownContainer\",\n            \"currentMonthElement\",\n            \"currentYearElement\",\n            \"navigationCurrentMonth\",\n            \"selectedDateElem\",\n            \"config\",\n        ].forEach(function (k) {\n            try {\n                delete self[k];\n            }\n            catch (_) { }\n        });\n    }\n    function isCalendarElem(elem) {\n        return self.calendarContainer.contains(elem);\n    }\n    function documentClick(e) {\n        if (self.isOpen && !self.config.inline) {\n            var eventTarget_1 = getEventTarget(e);\n            var isCalendarElement = isCalendarElem(eventTarget_1);\n            var isInput = eventTarget_1 === self.input ||\n                eventTarget_1 === self.altInput ||\n                self.element.contains(eventTarget_1) ||\n                (e.path &&\n                    e.path.indexOf &&\n                    (~e.path.indexOf(self.input) ||\n                        ~e.path.indexOf(self.altInput)));\n            var lostFocus = !isInput &&\n                !isCalendarElement &&\n                !isCalendarElem(e.relatedTarget);\n            var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n                return elem.contains(eventTarget_1);\n            });\n            if (lostFocus && isIgnored) {\n                if (self.config.allowInput) {\n                    self.setDate(self._input.value, false, self.config.altInput\n                        ? self.config.altFormat\n                        : self.config.dateFormat);\n                }\n                if (self.timeContainer !== undefined &&\n                    self.minuteElement !== undefined &&\n                    self.hourElement !== undefined &&\n                    self.input.value !== \"\" &&\n                    self.input.value !== undefined) {\n                    updateTime();\n                }\n                self.close();\n                if (self.config &&\n                    self.config.mode === \"range\" &&\n                    self.selectedDates.length === 1)\n                    self.clear(false);\n            }\n        }\n    }\n    function changeYear(newYear) {\n        if (!newYear ||\n            (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n            (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n            return;\n        var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n        self.currentYear = newYearNum || self.currentYear;\n        if (self.config.maxDate &&\n            self.currentYear === self.config.maxDate.getFullYear()) {\n            self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n        }\n        else if (self.config.minDate &&\n            self.currentYear === self.config.minDate.getFullYear()) {\n            self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n        }\n        if (isNewYear) {\n            self.redraw();\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n    }\n    function isEnabled(date, timeless) {\n        var _a;\n        if (timeless === void 0) { timeless = true; }\n        var dateToCheck = self.parseDate(date, undefined, timeless);\n        if ((self.config.minDate &&\n            dateToCheck &&\n            compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n            (self.config.maxDate &&\n                dateToCheck &&\n                compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n            return false;\n        if (!self.config.enable && self.config.disable.length === 0)\n            return true;\n        if (dateToCheck === undefined)\n            return false;\n        var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n        for (var i = 0, d = void 0; i < array.length; i++) {\n            d = array[i];\n            if (typeof d === \"function\" &&\n                d(dateToCheck))\n                return bool;\n            else if (d instanceof Date &&\n                dateToCheck !== undefined &&\n                d.getTime() === dateToCheck.getTime())\n                return bool;\n            else if (typeof d === \"string\") {\n                var parsed = self.parseDate(d, undefined, true);\n                return parsed && parsed.getTime() === dateToCheck.getTime()\n                    ? bool\n                    : !bool;\n            }\n            else if (typeof d === \"object\" &&\n                dateToCheck !== undefined &&\n                d.from &&\n                d.to &&\n                dateToCheck.getTime() >= d.from.getTime() &&\n                dateToCheck.getTime() <= d.to.getTime())\n                return bool;\n        }\n        return !bool;\n    }\n    function isInView(elem) {\n        if (self.daysContainer !== undefined)\n            return (elem.className.indexOf(\"hidden\") === -1 &&\n                elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n                self.daysContainer.contains(elem));\n        return false;\n    }\n    function onBlur(e) {\n        var isInput = e.target === self._input;\n        var valueChanged = self._input.value.trimEnd() !== getDateStr();\n        if (isInput &&\n            valueChanged &&\n            !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n            self.setDate(self._input.value, true, e.target === self.altInput\n                ? self.config.altFormat\n                : self.config.dateFormat);\n        }\n    }\n    function onKeyDown(e) {\n        var eventTarget = getEventTarget(e);\n        var isInput = self.config.wrap\n            ? element.contains(eventTarget)\n            : eventTarget === self._input;\n        var allowInput = self.config.allowInput;\n        var allowKeydown = self.isOpen && (!allowInput || !isInput);\n        var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n        if (e.keyCode === 13 && isInput) {\n            if (allowInput) {\n                self.setDate(self._input.value, true, eventTarget === self.altInput\n                    ? self.config.altFormat\n                    : self.config.dateFormat);\n                self.close();\n                return eventTarget.blur();\n            }\n            else {\n                self.open();\n            }\n        }\n        else if (isCalendarElem(eventTarget) ||\n            allowKeydown ||\n            allowInlineKeydown) {\n            var isTimeObj = !!self.timeContainer &&\n                self.timeContainer.contains(eventTarget);\n            switch (e.keyCode) {\n                case 13:\n                    if (isTimeObj) {\n                        e.preventDefault();\n                        updateTime();\n                        focusAndClose();\n                    }\n                    else\n                        selectDate(e);\n                    break;\n                case 27:\n                    e.preventDefault();\n                    focusAndClose();\n                    break;\n                case 8:\n                case 46:\n                    if (isInput && !self.config.allowInput) {\n                        e.preventDefault();\n                        self.clear();\n                    }\n                    break;\n                case 37:\n                case 39:\n                    if (!isTimeObj && !isInput) {\n                        e.preventDefault();\n                        var activeElement = getClosestActiveElement();\n                        if (self.daysContainer !== undefined &&\n                            (allowInput === false ||\n                                (activeElement && isInView(activeElement)))) {\n                            var delta_1 = e.keyCode === 39 ? 1 : -1;\n                            if (!e.ctrlKey)\n                                focusOnDay(undefined, delta_1);\n                            else {\n                                e.stopPropagation();\n                                changeMonth(delta_1);\n                                focusOnDay(getFirstAvailableDay(1), 0);\n                            }\n                        }\n                    }\n                    else if (self.hourElement)\n                        self.hourElement.focus();\n                    break;\n                case 38:\n                case 40:\n                    e.preventDefault();\n                    var delta = e.keyCode === 40 ? 1 : -1;\n                    if ((self.daysContainer &&\n                        eventTarget.$i !== undefined) ||\n                        eventTarget === self.input ||\n                        eventTarget === self.altInput) {\n                        if (e.ctrlKey) {\n                            e.stopPropagation();\n                            changeYear(self.currentYear - delta);\n                            focusOnDay(getFirstAvailableDay(1), 0);\n                        }\n                        else if (!isTimeObj)\n                            focusOnDay(undefined, delta * 7);\n                    }\n                    else if (eventTarget === self.currentYearElement) {\n                        changeYear(self.currentYear - delta);\n                    }\n                    else if (self.config.enableTime) {\n                        if (!isTimeObj && self.hourElement)\n                            self.hourElement.focus();\n                        updateTime(e);\n                        self._debouncedChange();\n                    }\n                    break;\n                case 9:\n                    if (isTimeObj) {\n                        var elems = [\n                            self.hourElement,\n                            self.minuteElement,\n                            self.secondElement,\n                            self.amPM,\n                        ]\n                            .concat(self.pluginElements)\n                            .filter(function (x) { return x; });\n                        var i = elems.indexOf(eventTarget);\n                        if (i !== -1) {\n                            var target = elems[i + (e.shiftKey ? -1 : 1)];\n                            e.preventDefault();\n                            (target || self._input).focus();\n                        }\n                    }\n                    else if (!self.config.noCalendar &&\n                        self.daysContainer &&\n                        self.daysContainer.contains(eventTarget) &&\n                        e.shiftKey) {\n                        e.preventDefault();\n                        self._input.focus();\n                    }\n                    break;\n                default:\n                    break;\n            }\n        }\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            switch (e.key) {\n                case self.l10n.amPM[0].charAt(0):\n                case self.l10n.amPM[0].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[0];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n                case self.l10n.amPM[1].charAt(0):\n                case self.l10n.amPM[1].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[1];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n            }\n        }\n        if (isInput || isCalendarElem(eventTarget)) {\n            triggerEvent(\"onKeyDown\", e);\n        }\n    }\n    function onMouseOver(elem, cellClass) {\n        if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n        if (self.selectedDates.length !== 1 ||\n            (elem &&\n                (!elem.classList.contains(cellClass) ||\n                    elem.classList.contains(\"flatpickr-disabled\"))))\n            return;\n        var hoverDate = elem\n            ? elem.dateObj.getTime()\n            : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n        var containsDisabled = false;\n        var minRange = 0, maxRange = 0;\n        for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n            if (!isEnabled(new Date(t), true)) {\n                containsDisabled =\n                    containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n                if (t < initialDate && (!minRange || t > minRange))\n                    minRange = t;\n                else if (t > initialDate && (!maxRange || t < maxRange))\n                    maxRange = t;\n            }\n        }\n        var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n        hoverableCells.forEach(function (dayElem) {\n            var date = dayElem.dateObj;\n            var timestamp = date.getTime();\n            var outOfRange = (minRange > 0 && timestamp < minRange) ||\n                (maxRange > 0 && timestamp > maxRange);\n            if (outOfRange) {\n                dayElem.classList.add(\"notAllowed\");\n                [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                    dayElem.classList.remove(c);\n                });\n                return;\n            }\n            else if (containsDisabled && !outOfRange)\n                return;\n            [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n                dayElem.classList.remove(c);\n            });\n            if (elem !== undefined) {\n                elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n                    ? \"startRange\"\n                    : \"endRange\");\n                if (initialDate < hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"startRange\");\n                else if (initialDate > hoverDate && timestamp === initialDate)\n                    dayElem.classList.add(\"endRange\");\n                if (timestamp >= minRange &&\n                    (maxRange === 0 || timestamp <= maxRange) &&\n                    isBetween(timestamp, initialDate, hoverDate))\n                    dayElem.classList.add(\"inRange\");\n            }\n        });\n    }\n    function onResize() {\n        if (self.isOpen && !self.config.static && !self.config.inline)\n            positionCalendar();\n    }\n    function open(e, positionElement) {\n        if (positionElement === void 0) { positionElement = self._positionElement; }\n        if (self.isMobile === true) {\n            if (e) {\n                e.preventDefault();\n                var eventTarget = getEventTarget(e);\n                if (eventTarget) {\n                    eventTarget.blur();\n                }\n            }\n            if (self.mobileInput !== undefined) {\n                self.mobileInput.focus();\n                self.mobileInput.click();\n            }\n            triggerEvent(\"onOpen\");\n            return;\n        }\n        else if (self._input.disabled || self.config.inline) {\n            return;\n        }\n        var wasOpen = self.isOpen;\n        self.isOpen = true;\n        if (!wasOpen) {\n            self.calendarContainer.classList.add(\"open\");\n            self._input.classList.add(\"active\");\n            triggerEvent(\"onOpen\");\n            positionCalendar(positionElement);\n        }\n        if (self.config.enableTime === true && self.config.noCalendar === true) {\n            if (self.config.allowInput === false &&\n                (e === undefined ||\n                    !self.timeContainer.contains(e.relatedTarget))) {\n                setTimeout(function () { return self.hourElement.select(); }, 50);\n            }\n        }\n    }\n    function minMaxDateSetter(type) {\n        return function (date) {\n            var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n            var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n            if (dateObj !== undefined) {\n                self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n                    dateObj.getHours() > 0 ||\n                        dateObj.getMinutes() > 0 ||\n                        dateObj.getSeconds() > 0;\n            }\n            if (self.selectedDates) {\n                self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n                if (!self.selectedDates.length && type === \"min\")\n                    setHoursFromDate(dateObj);\n                updateValue();\n            }\n            if (self.daysContainer) {\n                redraw();\n                if (dateObj !== undefined)\n                    self.currentYearElement[type] = dateObj.getFullYear().toString();\n                else\n                    self.currentYearElement.removeAttribute(type);\n                self.currentYearElement.disabled =\n                    !!inverseDateObj &&\n                        dateObj !== undefined &&\n                        inverseDateObj.getFullYear() === dateObj.getFullYear();\n            }\n        };\n    }\n    function parseConfig() {\n        var boolOpts = [\n            \"wrap\",\n            \"weekNumbers\",\n            \"allowInput\",\n            \"allowInvalidPreload\",\n            \"clickOpens\",\n            \"time_24hr\",\n            \"enableTime\",\n            \"noCalendar\",\n            \"altInput\",\n            \"shorthandCurrentMonth\",\n            \"inline\",\n            \"static\",\n            \"enableSeconds\",\n            \"disableMobile\",\n        ];\n        var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n        var formats = {};\n        self.config.parseDate = userConfig.parseDate;\n        self.config.formatDate = userConfig.formatDate;\n        Object.defineProperty(self.config, \"enable\", {\n            get: function () { return self.config._enable; },\n            set: function (dates) {\n                self.config._enable = parseDateRules(dates);\n            },\n        });\n        Object.defineProperty(self.config, \"disable\", {\n            get: function () { return self.config._disable; },\n            set: function (dates) {\n                self.config._disable = parseDateRules(dates);\n            },\n        });\n        var timeMode = userConfig.mode === \"time\";\n        if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n            var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n            formats.dateFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n                    : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n        }\n        if (userConfig.altInput &&\n            (userConfig.enableTime || timeMode) &&\n            !userConfig.altFormat) {\n            var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n            formats.altFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n                    : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n        }\n        Object.defineProperty(self.config, \"minDate\", {\n            get: function () { return self.config._minDate; },\n            set: minMaxDateSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxDate\", {\n            get: function () { return self.config._maxDate; },\n            set: minMaxDateSetter(\"max\"),\n        });\n        var minMaxTimeSetter = function (type) { return function (val) {\n            self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n        }; };\n        Object.defineProperty(self.config, \"minTime\", {\n            get: function () { return self.config._minTime; },\n            set: minMaxTimeSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxTime\", {\n            get: function () { return self.config._maxTime; },\n            set: minMaxTimeSetter(\"max\"),\n        });\n        if (userConfig.mode === \"time\") {\n            self.config.noCalendar = true;\n            self.config.enableTime = true;\n        }\n        Object.assign(self.config, formats, userConfig);\n        for (var i = 0; i < boolOpts.length; i++)\n            self.config[boolOpts[i]] =\n                self.config[boolOpts[i]] === true ||\n                    self.config[boolOpts[i]] === \"true\";\n        HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n            self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n        });\n        self.isMobile =\n            !self.config.disableMobile &&\n                !self.config.inline &&\n                self.config.mode === \"single\" &&\n                !self.config.disable.length &&\n                !self.config.enable &&\n                !self.config.weekNumbers &&\n                /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n        for (var i = 0; i < self.config.plugins.length; i++) {\n            var pluginConf = self.config.plugins[i](self) || {};\n            for (var key in pluginConf) {\n                if (HOOKS.indexOf(key) > -1) {\n                    self.config[key] = arrayify(pluginConf[key])\n                        .map(bindToInstance)\n                        .concat(self.config[key]);\n                }\n                else if (typeof userConfig[key] === \"undefined\")\n                    self.config[key] = pluginConf[key];\n            }\n        }\n        if (!userConfig.altInputClass) {\n            self.config.altInputClass =\n                getInputElem().className + \" \" + self.config.altInputClass;\n        }\n        triggerEvent(\"onParseConfig\");\n    }\n    function getInputElem() {\n        return self.config.wrap\n            ? element.querySelector(\"[data-input]\")\n            : element;\n    }\n    function setupLocale() {\n        if (typeof self.config.locale !== \"object\" &&\n            typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n            self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n        self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n            ? self.config.locale\n            : self.config.locale !== \"default\"\n                ? flatpickr.l10ns[self.config.locale]\n                : undefined));\n        tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n        tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n        tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n        tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n        tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n        var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n        if (userConfig.time_24hr === undefined &&\n            flatpickr.defaultConfig.time_24hr === undefined) {\n            self.config.time_24hr = self.l10n.time_24hr;\n        }\n        self.formatDate = createDateFormatter(self);\n        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    }\n    function positionCalendar(customPositionElement) {\n        if (typeof self.config.position === \"function\") {\n            return void self.config.position(self, customPositionElement);\n        }\n        if (self.calendarContainer === undefined)\n            return;\n        triggerEvent(\"onPreCalendarPosition\");\n        var positionElement = customPositionElement || self._positionElement;\n        var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n            (configPosVertical !== \"below\" &&\n                distanceFromBottom < calendarHeight &&\n                inputBounds.top > calendarHeight);\n        var top = window.pageYOffset +\n            inputBounds.top +\n            (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n        toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n        toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n        if (self.config.inline)\n            return;\n        var left = window.pageXOffset + inputBounds.left;\n        var isCenter = false;\n        var isRight = false;\n        if (configPosHorizontal === \"center\") {\n            left -= (calendarWidth - inputBounds.width) / 2;\n            isCenter = true;\n        }\n        else if (configPosHorizontal === \"right\") {\n            left -= calendarWidth - inputBounds.width;\n            isRight = true;\n        }\n        toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n        toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n        toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n        var right = window.document.body.offsetWidth -\n            (window.pageXOffset + inputBounds.right);\n        var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n        var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n        toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n        if (self.config.static)\n            return;\n        self.calendarContainer.style.top = top + \"px\";\n        if (!rightMost) {\n            self.calendarContainer.style.left = left + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n        else if (!centerMost) {\n            self.calendarContainer.style.left = \"auto\";\n            self.calendarContainer.style.right = right + \"px\";\n        }\n        else {\n            var doc = getDocumentStyleSheet();\n            if (doc === undefined)\n                return;\n            var bodyWidth = window.document.body.offsetWidth;\n            var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n            var centerBefore = \".flatpickr-calendar.centerMost:before\";\n            var centerAfter = \".flatpickr-calendar.centerMost:after\";\n            var centerIndex = doc.cssRules.length;\n            var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n            toggleClass(self.calendarContainer, \"rightMost\", false);\n            toggleClass(self.calendarContainer, \"centerMost\", true);\n            doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n            self.calendarContainer.style.left = centerLeft + \"px\";\n            self.calendarContainer.style.right = \"auto\";\n        }\n    }\n    function getDocumentStyleSheet() {\n        var editableSheet = null;\n        for (var i = 0; i < document.styleSheets.length; i++) {\n            var sheet = document.styleSheets[i];\n            if (!sheet.cssRules)\n                continue;\n            try {\n                sheet.cssRules;\n            }\n            catch (err) {\n                continue;\n            }\n            editableSheet = sheet;\n            break;\n        }\n        return editableSheet != null ? editableSheet : createStyleSheet();\n    }\n    function createStyleSheet() {\n        var style = document.createElement(\"style\");\n        document.head.appendChild(style);\n        return style.sheet;\n    }\n    function redraw() {\n        if (self.config.noCalendar || self.isMobile)\n            return;\n        buildMonthSwitch();\n        updateNavigationCurrentMonth();\n        buildDays();\n    }\n    function focusAndClose() {\n        self._input.focus();\n        if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n            navigator.msMaxTouchPoints !== undefined) {\n            setTimeout(self.close, 0);\n        }\n        else {\n            self.close();\n        }\n    }\n    function selectDate(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        var isSelectable = function (day) {\n            return day.classList &&\n                day.classList.contains(\"flatpickr-day\") &&\n                !day.classList.contains(\"flatpickr-disabled\") &&\n                !day.classList.contains(\"notAllowed\");\n        };\n        var t = findParent(getEventTarget(e), isSelectable);\n        if (t === undefined)\n            return;\n        var target = t;\n        var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n        var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n            selectedDate.getMonth() >\n                self.currentMonth + self.config.showMonths - 1) &&\n            self.config.mode !== \"range\";\n        self.selectedDateElem = target;\n        if (self.config.mode === \"single\")\n            self.selectedDates = [selectedDate];\n        else if (self.config.mode === \"multiple\") {\n            var selectedIndex = isDateSelected(selectedDate);\n            if (selectedIndex)\n                self.selectedDates.splice(parseInt(selectedIndex), 1);\n            else\n                self.selectedDates.push(selectedDate);\n        }\n        else if (self.config.mode === \"range\") {\n            if (self.selectedDates.length === 2) {\n                self.clear(false, false);\n            }\n            self.latestSelectedDateObj = selectedDate;\n            self.selectedDates.push(selectedDate);\n            if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n        }\n        setHoursFromInputs();\n        if (shouldChangeMonth) {\n            var isNewYear = self.currentYear !== selectedDate.getFullYear();\n            self.currentYear = selectedDate.getFullYear();\n            self.currentMonth = selectedDate.getMonth();\n            if (isNewYear) {\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            triggerEvent(\"onMonthChange\");\n        }\n        updateNavigationCurrentMonth();\n        buildDays();\n        updateValue();\n        if (!shouldChangeMonth &&\n            self.config.mode !== \"range\" &&\n            self.config.showMonths === 1)\n            focusOnDayElem(target);\n        else if (self.selectedDateElem !== undefined &&\n            self.hourElement === undefined) {\n            self.selectedDateElem && self.selectedDateElem.focus();\n        }\n        if (self.hourElement !== undefined)\n            self.hourElement !== undefined && self.hourElement.focus();\n        if (self.config.closeOnSelect) {\n            var single = self.config.mode === \"single\" && !self.config.enableTime;\n            var range = self.config.mode === \"range\" &&\n                self.selectedDates.length === 2 &&\n                !self.config.enableTime;\n            if (single || range) {\n                focusAndClose();\n            }\n        }\n        triggerChange();\n    }\n    var CALLBACKS = {\n        locale: [setupLocale, updateWeekdays],\n        showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n        minDate: [jumpToDate],\n        maxDate: [jumpToDate],\n        positionElement: [updatePositionElement],\n        clickOpens: [\n            function () {\n                if (self.config.clickOpens === true) {\n                    bind(self._input, \"focus\", self.open);\n                    bind(self._input, \"click\", self.open);\n                }\n                else {\n                    self._input.removeEventListener(\"focus\", self.open);\n                    self._input.removeEventListener(\"click\", self.open);\n                }\n            },\n        ],\n    };\n    function set(option, value) {\n        if (option !== null && typeof option === \"object\") {\n            Object.assign(self.config, option);\n            for (var key in option) {\n                if (CALLBACKS[key] !== undefined)\n                    CALLBACKS[key].forEach(function (x) { return x(); });\n            }\n        }\n        else {\n            self.config[option] = value;\n            if (CALLBACKS[option] !== undefined)\n                CALLBACKS[option].forEach(function (x) { return x(); });\n            else if (HOOKS.indexOf(option) > -1)\n                self.config[option] = arrayify(value);\n        }\n        self.redraw();\n        updateValue(true);\n    }\n    function setSelectedDate(inputDate, format) {\n        var dates = [];\n        if (inputDate instanceof Array)\n            dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n        else if (inputDate instanceof Date || typeof inputDate === \"number\")\n            dates = [self.parseDate(inputDate, format)];\n        else if (typeof inputDate === \"string\") {\n            switch (self.config.mode) {\n                case \"single\":\n                case \"time\":\n                    dates = [self.parseDate(inputDate, format)];\n                    break;\n                case \"multiple\":\n                    dates = inputDate\n                        .split(self.config.conjunction)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                case \"range\":\n                    dates = inputDate\n                        .split(self.l10n.rangeSeparator)\n                        .map(function (date) { return self.parseDate(date, format); });\n                    break;\n                default:\n                    break;\n            }\n        }\n        else\n            self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n        self.selectedDates = (self.config.allowInvalidPreload\n            ? dates\n            : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n        if (self.config.mode === \"range\")\n            self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n    }\n    function setDate(date, triggerChange, format) {\n        if (triggerChange === void 0) { triggerChange = false; }\n        if (format === void 0) { format = self.config.dateFormat; }\n        if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n            return self.clear(triggerChange);\n        setSelectedDate(date, format);\n        self.latestSelectedDateObj =\n            self.selectedDates[self.selectedDates.length - 1];\n        self.redraw();\n        jumpToDate(undefined, triggerChange);\n        setHoursFromDate();\n        if (self.selectedDates.length === 0) {\n            self.clear(false);\n        }\n        updateValue(triggerChange);\n        if (triggerChange)\n            triggerEvent(\"onChange\");\n    }\n    function parseDateRules(arr) {\n        return arr\n            .slice()\n            .map(function (rule) {\n            if (typeof rule === \"string\" ||\n                typeof rule === \"number\" ||\n                rule instanceof Date) {\n                return self.parseDate(rule, undefined, true);\n            }\n            else if (rule &&\n                typeof rule === \"object\" &&\n                rule.from &&\n                rule.to)\n                return {\n                    from: self.parseDate(rule.from, undefined),\n                    to: self.parseDate(rule.to, undefined),\n                };\n            return rule;\n        })\n            .filter(function (x) { return x; });\n    }\n    function setupDates() {\n        self.selectedDates = [];\n        self.now = self.parseDate(self.config.now) || new Date();\n        var preloadedDate = self.config.defaultDate ||\n            ((self.input.nodeName === \"INPUT\" ||\n                self.input.nodeName === \"TEXTAREA\") &&\n                self.input.placeholder &&\n                self.input.value === self.input.placeholder\n                ? null\n                : self.input.value);\n        if (preloadedDate)\n            setSelectedDate(preloadedDate, self.config.dateFormat);\n        self._initialDate =\n            self.selectedDates.length > 0\n                ? self.selectedDates[0]\n                : self.config.minDate &&\n                    self.config.minDate.getTime() > self.now.getTime()\n                    ? self.config.minDate\n                    : self.config.maxDate &&\n                        self.config.maxDate.getTime() < self.now.getTime()\n                        ? self.config.maxDate\n                        : self.now;\n        self.currentYear = self._initialDate.getFullYear();\n        self.currentMonth = self._initialDate.getMonth();\n        if (self.selectedDates.length > 0)\n            self.latestSelectedDateObj = self.selectedDates[0];\n        if (self.config.minTime !== undefined)\n            self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n        if (self.config.maxTime !== undefined)\n            self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n        self.minDateHasTime =\n            !!self.config.minDate &&\n                (self.config.minDate.getHours() > 0 ||\n                    self.config.minDate.getMinutes() > 0 ||\n                    self.config.minDate.getSeconds() > 0);\n        self.maxDateHasTime =\n            !!self.config.maxDate &&\n                (self.config.maxDate.getHours() > 0 ||\n                    self.config.maxDate.getMinutes() > 0 ||\n                    self.config.maxDate.getSeconds() > 0);\n    }\n    function setupInputs() {\n        self.input = getInputElem();\n        if (!self.input) {\n            self.config.errorHandler(new Error(\"Invalid input element specified\"));\n            return;\n        }\n        self.input._type = self.input.type;\n        self.input.type = \"text\";\n        self.input.classList.add(\"flatpickr-input\");\n        self._input = self.input;\n        if (self.config.altInput) {\n            self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n            self._input = self.altInput;\n            self.altInput.placeholder = self.input.placeholder;\n            self.altInput.disabled = self.input.disabled;\n            self.altInput.required = self.input.required;\n            self.altInput.tabIndex = self.input.tabIndex;\n            self.altInput.type = \"text\";\n            self.input.setAttribute(\"type\", \"hidden\");\n            if (!self.config.static && self.input.parentNode)\n                self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n        }\n        if (!self.config.allowInput)\n            self._input.setAttribute(\"readonly\", \"readonly\");\n        updatePositionElement();\n    }\n    function updatePositionElement() {\n        self._positionElement = self.config.positionElement || self._input;\n    }\n    function setupMobile() {\n        var inputType = self.config.enableTime\n            ? self.config.noCalendar\n                ? \"time\"\n                : \"datetime-local\"\n            : \"date\";\n        self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n        self.mobileInput.tabIndex = 1;\n        self.mobileInput.type = inputType;\n        self.mobileInput.disabled = self.input.disabled;\n        self.mobileInput.required = self.input.required;\n        self.mobileInput.placeholder = self.input.placeholder;\n        self.mobileFormatStr =\n            inputType === \"datetime-local\"\n                ? \"Y-m-d\\\\TH:i:S\"\n                : inputType === \"date\"\n                    ? \"Y-m-d\"\n                    : \"H:i:S\";\n        if (self.selectedDates.length > 0) {\n            self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n        }\n        if (self.config.minDate)\n            self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n        if (self.config.maxDate)\n            self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n        if (self.input.getAttribute(\"step\"))\n            self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n        self.input.type = \"hidden\";\n        if (self.altInput !== undefined)\n            self.altInput.type = \"hidden\";\n        try {\n            if (self.input.parentNode)\n                self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n        }\n        catch (_a) { }\n        bind(self.mobileInput, \"change\", function (e) {\n            self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n            triggerEvent(\"onChange\");\n            triggerEvent(\"onClose\");\n        });\n    }\n    function toggle(e) {\n        if (self.isOpen === true)\n            return self.close();\n        self.open(e);\n    }\n    function triggerEvent(event, data) {\n        if (self.config === undefined)\n            return;\n        var hooks = self.config[event];\n        if (hooks !== undefined && hooks.length > 0) {\n            for (var i = 0; hooks[i] && i < hooks.length; i++)\n                hooks[i](self.selectedDates, self.input.value, self, data);\n        }\n        if (event === \"onChange\") {\n            self.input.dispatchEvent(createEvent(\"change\"));\n            self.input.dispatchEvent(createEvent(\"input\"));\n        }\n    }\n    function createEvent(name) {\n        var e = document.createEvent(\"Event\");\n        e.initEvent(name, true, true);\n        return e;\n    }\n    function isDateSelected(date) {\n        for (var i = 0; i < self.selectedDates.length; i++) {\n            var selectedDate = self.selectedDates[i];\n            if (selectedDate instanceof Date &&\n                compareDates(selectedDate, date) === 0)\n                return \"\" + i;\n        }\n        return false;\n    }\n    function isDateInRange(date) {\n        if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n            return false;\n        return (compareDates(date, self.selectedDates[0]) >= 0 &&\n            compareDates(date, self.selectedDates[1]) <= 0);\n    }\n    function updateNavigationCurrentMonth() {\n        if (self.config.noCalendar || self.isMobile || !self.monthNav)\n            return;\n        self.yearElements.forEach(function (yearElement, i) {\n            var d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType === \"static\") {\n                self.monthElements[i].textContent =\n                    monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n            }\n            else {\n                self.monthsDropdownContainer.value = d.getMonth().toString();\n            }\n            yearElement.value = d.getFullYear().toString();\n        });\n        self._hidePrevMonthArrow =\n            self.config.minDate !== undefined &&\n                (self.currentYear === self.config.minDate.getFullYear()\n                    ? self.currentMonth <= self.config.minDate.getMonth()\n                    : self.currentYear < self.config.minDate.getFullYear());\n        self._hideNextMonthArrow =\n            self.config.maxDate !== undefined &&\n                (self.currentYear === self.config.maxDate.getFullYear()\n                    ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n                    : self.currentYear > self.config.maxDate.getFullYear());\n    }\n    function getDateStr(specificFormat) {\n        var format = specificFormat ||\n            (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n        return self.selectedDates\n            .map(function (dObj) { return self.formatDate(dObj, format); })\n            .filter(function (d, i, arr) {\n            return self.config.mode !== \"range\" ||\n                self.config.enableTime ||\n                arr.indexOf(d) === i;\n        })\n            .join(self.config.mode !== \"range\"\n            ? self.config.conjunction\n            : self.l10n.rangeSeparator);\n    }\n    function updateValue(triggerChange) {\n        if (triggerChange === void 0) { triggerChange = true; }\n        if (self.mobileInput !== undefined && self.mobileFormatStr) {\n            self.mobileInput.value =\n                self.latestSelectedDateObj !== undefined\n                    ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n                    : \"\";\n        }\n        self.input.value = getDateStr(self.config.dateFormat);\n        if (self.altInput !== undefined) {\n            self.altInput.value = getDateStr(self.config.altFormat);\n        }\n        if (triggerChange !== false)\n            triggerEvent(\"onValueUpdate\");\n    }\n    function onMonthNavClick(e) {\n        var eventTarget = getEventTarget(e);\n        var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n        var isNextMonth = self.nextMonthNav.contains(eventTarget);\n        if (isPrevMonth || isNextMonth) {\n            changeMonth(isPrevMonth ? -1 : 1);\n        }\n        else if (self.yearElements.indexOf(eventTarget) >= 0) {\n            eventTarget.select();\n        }\n        else if (eventTarget.classList.contains(\"arrowUp\")) {\n            self.changeYear(self.currentYear + 1);\n        }\n        else if (eventTarget.classList.contains(\"arrowDown\")) {\n            self.changeYear(self.currentYear - 1);\n        }\n    }\n    function timeWrapper(e) {\n        e.preventDefault();\n        var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            self.amPM.textContent =\n                self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n        var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n            (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n        var newValue = curValue + step * delta;\n        if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n            var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n            if (newValue < min) {\n                newValue =\n                    max +\n                        newValue +\n                        int(!isHourElem) +\n                        (int(isHourElem) && int(!self.amPM));\n                if (isMinuteElem)\n                    incrementNumInput(undefined, -1, self.hourElement);\n            }\n            else if (newValue > max) {\n                newValue =\n                    input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n                if (isMinuteElem)\n                    incrementNumInput(undefined, 1, self.hourElement);\n            }\n            if (self.amPM &&\n                isHourElem &&\n                (step === 1\n                    ? newValue + curValue === 23\n                    : Math.abs(newValue - curValue) > step)) {\n                self.amPM.textContent =\n                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n            }\n            input.value = pad(newValue);\n        }\n    }\n    init();\n    return self;\n}\nfunction _flatpickr(nodeList, config) {\n    var nodes = Array.prototype.slice\n        .call(nodeList)\n        .filter(function (x) { return x instanceof HTMLElement; });\n    var instances = [];\n    for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n        try {\n            if (node.getAttribute(\"data-fp-omit\") !== null)\n                continue;\n            if (node._flatpickr !== undefined) {\n                node._flatpickr.destroy();\n                node._flatpickr = undefined;\n            }\n            node._flatpickr = FlatpickrInstance(node, config || {});\n            instances.push(node._flatpickr);\n        }\n        catch (e) {\n            console.error(e);\n        }\n    }\n    return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n    typeof HTMLCollection !== \"undefined\" &&\n    typeof NodeList !== \"undefined\") {\n    HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n    HTMLElement.prototype.flatpickr = function (config) {\n        return _flatpickr([this], config);\n    };\n}\nvar flatpickr = function (selector, config) {\n    if (typeof selector === \"string\") {\n        return _flatpickr(window.document.querySelectorAll(selector), config);\n    }\n    else if (selector instanceof Node) {\n        return _flatpickr([selector], config);\n    }\n    else {\n        return _flatpickr(selector, config);\n    }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n    en: __assign({}, English),\n    default: __assign({}, English),\n};\nflatpickr.localize = function (l10n) {\n    flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = function (config) {\n    flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n    jQuery.fn.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n}\nDate.prototype.fp_incr = function (days) {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n    window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n", "import \"./card_component.css\";\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nclass CardController extends BaseController {\n  highlight() {\n    this.removeHighlight();\n\n    this.element.classList.add(\"c-card-highlighted\");\n  }\n\n  removeHighlight() {\n    document.querySelectorAll(\".c-card-highlighted\").forEach((card) => {\n      card.classList.remove(\"c-card-highlighted\");\n    });\n  }\n}\n\nexport { CardController as Controller };\n", "import \"./carousel_component.css\";\nimport Swiper from \"swiper/bundle\";\nimport \"swiper/css/bundle\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  connect() {\n    this.createSwiper();\n  }\n\n  disconnect() {\n    this.removeSwiper();\n  }\n\n  createSwiper() {\n    if (!this.mobileMedia.matches) return;\n\n    this.swiper = new Swiper(this.element, {\n      slidesPerView: 1.3,\n      spaceBetween: 16,\n      breakpointsBase: \"container\",\n      breakpoints: {\n        576: {\n          slidesPerView: 2.3,\n        },\n      },\n    });\n  }\n\n  removeSwiper() {\n    if (this.swiper) {\n      this.swiper.destroy();\n      this.swiper = null;\n    }\n  }\n\n  get mobileMedia() {\n    return window.matchMedia(\"(max-width: 576px)\");\n  }\n}\n", "/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n  return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n  if (target === void 0) {\n    target = {};\n  }\n  if (src === void 0) {\n    src = {};\n  }\n  Object.keys(src).forEach(key => {\n    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n      extend(target[key], src[key]);\n    }\n  });\n}\nconst ssrDocument = {\n  body: {},\n  addEventListener() {},\n  removeEventListener() {},\n  activeElement: {\n    blur() {},\n    nodeName: ''\n  },\n  querySelector() {\n    return null;\n  },\n  querySelectorAll() {\n    return [];\n  },\n  getElementById() {\n    return null;\n  },\n  createEvent() {\n    return {\n      initEvent() {}\n    };\n  },\n  createElement() {\n    return {\n      children: [],\n      childNodes: [],\n      style: {},\n      setAttribute() {},\n      getElementsByTagName() {\n        return [];\n      }\n    };\n  },\n  createElementNS() {\n    return {};\n  },\n  importNode() {\n    return null;\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  }\n};\nfunction getDocument() {\n  const doc = typeof document !== 'undefined' ? document : {};\n  extend(doc, ssrDocument);\n  return doc;\n}\nconst ssrWindow = {\n  document: ssrDocument,\n  navigator: {\n    userAgent: ''\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  },\n  history: {\n    replaceState() {},\n    pushState() {},\n    go() {},\n    back() {}\n  },\n  CustomEvent: function CustomEvent() {\n    return this;\n  },\n  addEventListener() {},\n  removeEventListener() {},\n  getComputedStyle() {\n    return {\n      getPropertyValue() {\n        return '';\n      }\n    };\n  },\n  Image() {},\n  Date() {},\n  screen: {},\n  setTimeout() {},\n  clearTimeout() {},\n  matchMedia() {\n    return {};\n  },\n  requestAnimationFrame(callback) {\n    if (typeof setTimeout === 'undefined') {\n      callback();\n      return null;\n    }\n    return setTimeout(callback, 0);\n  },\n  cancelAnimationFrame(id) {\n    if (typeof setTimeout === 'undefined') {\n      return;\n    }\n    clearTimeout(id);\n  }\n};\nfunction getWindow() {\n  const win = typeof window !== 'undefined' ? window : {};\n  extend(win, ssrWindow);\n  return win;\n}\n\nexport { getWindow as a, getDocument as g };\n", "import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n  const object = obj;\n  Object.keys(object).forEach(key => {\n    try {\n      object[key] = null;\n    } catch (e) {\n      // no getter for object\n    }\n    try {\n      delete object[key];\n    } catch (e) {\n      // something got wrong\n    }\n  });\n}\nfunction nextTick(callback, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return setTimeout(callback, delay);\n}\nfunction now() {\n  return Date.now();\n}\nfunction getComputedStyle(el) {\n  const window = getWindow();\n  let style;\n  if (window.getComputedStyle) {\n    style = window.getComputedStyle(el, null);\n  }\n  if (!style && el.currentStyle) {\n    style = el.currentStyle;\n  }\n  if (!style) {\n    style = el.style;\n  }\n  return style;\n}\nfunction getTranslate(el, axis) {\n  if (axis === void 0) {\n    axis = 'x';\n  }\n  const window = getWindow();\n  let matrix;\n  let curTransform;\n  let transformMatrix;\n  const curStyle = getComputedStyle(el);\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n    }\n    // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[4]);\n  }\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[5]);\n  }\n  return curTransform || 0;\n}\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n  // eslint-disable-next-line\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n    return node instanceof HTMLElement;\n  }\n  return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n  const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\n  for (let i = 1; i < arguments.length; i += 1) {\n    const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        const nextKey = keysArray[nextIndex];\n        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n  return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n  el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n  let {\n    swiper,\n    targetPosition,\n    side\n  } = _ref;\n  const window = getWindow();\n  const startPosition = -swiper.translate;\n  let startTime = null;\n  let time;\n  const duration = swiper.params.speed;\n  swiper.wrapperEl.style.scrollSnapType = 'none';\n  window.cancelAnimationFrame(swiper.cssModeFrameID);\n  const dir = targetPosition > startPosition ? 'next' : 'prev';\n  const isOutOfBound = (current, target) => {\n    return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n  };\n  const animate = () => {\n    time = new Date().getTime();\n    if (startTime === null) {\n      startTime = time;\n    }\n    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      currentPosition = targetPosition;\n    }\n    swiper.wrapperEl.scrollTo({\n      [side]: currentPosition\n    });\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.scrollSnapType = '';\n      setTimeout(() => {\n        swiper.wrapperEl.style.overflow = '';\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\n      });\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\n      return;\n    }\n    swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n  };\n  animate();\n}\nfunction getSlideTransformEl(slideEl) {\n  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n  if (selector === void 0) {\n    selector = '';\n  }\n  const children = [...element.children];\n  if (element instanceof HTMLSlotElement) {\n    children.push(...element.assignedElements());\n  }\n  if (!selector) {\n    return children;\n  }\n  return children.filter(el => el.matches(selector));\n}\nfunction elementIsChildOf(el, parent) {\n  const isChild = parent.contains(el);\n  if (!isChild && parent instanceof HTMLSlotElement) {\n    const children = [...parent.assignedElements()];\n    return children.includes(el);\n  }\n  return isChild;\n}\nfunction showWarning(text) {\n  try {\n    console.warn(text);\n    return;\n  } catch (err) {\n    // err\n  }\n}\nfunction createElement(tag, classes) {\n  if (classes === void 0) {\n    classes = [];\n  }\n  const el = document.createElement(tag);\n  el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n  return el;\n}\nfunction elementOffset(el) {\n  const window = getWindow();\n  const document = getDocument();\n  const box = el.getBoundingClientRect();\n  const body = document.body;\n  const clientTop = el.clientTop || body.clientTop || 0;\n  const clientLeft = el.clientLeft || body.clientLeft || 0;\n  const scrollTop = el === window ? window.scrollY : el.scrollTop;\n  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n  return {\n    top: box.top + scrollTop - clientTop,\n    left: box.left + scrollLeft - clientLeft\n  };\n}\nfunction elementPrevAll(el, selector) {\n  const prevEls = [];\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if (prev.matches(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return prevEls;\n}\nfunction elementNextAll(el, selector) {\n  const nextEls = [];\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if (next.matches(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return nextEls;\n}\nfunction elementStyle(el, prop) {\n  const window = getWindow();\n  return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n  let child = el;\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\nfunction elementParents(el, selector) {\n  const parents = []; // eslint-disable-line\n  let parent = el.parentElement; // eslint-disable-line\n  while (parent) {\n    if (selector) {\n      if (parent.matches(selector)) parents.push(parent);\n    } else {\n      parents.push(parent);\n    }\n    parent = parent.parentElement;\n  }\n  return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n  function fireCallBack(e) {\n    if (e.target !== el) return;\n    callback.call(el, e);\n    el.removeEventListener('transitionend', fireCallBack);\n  }\n  if (callback) {\n    el.addEventListener('transitionend', fireCallBack);\n  }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n  const window = getWindow();\n  if (includeMargins) {\n    return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n  }\n  return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n  return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\nfunction getRotateFix(swiper) {\n  return v => {\n    if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n      return v + 0.001;\n    }\n    return v;\n  };\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, getRotateFix as o, elementStyle as p, elementNextAll as q, elementPrevAll as r, setCSSProperty as s, animateCSSModeScroll as t, showWarning as u, elementIsChildOf as v, extend as w, deleteProps as x };\n", "import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, p as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, q as elementNextAll, r as elementPrevAll, j as getTranslate, t as animateCSSModeScroll, n as nextTick, u as showWarning, c as createElement, v as elementIsChildOf, d as now, w as extend, h as elementIndex, x as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n  const window = getWindow();\n  const document = getDocument();\n  return {\n    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n  };\n}\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n  return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n  let {\n    userAgent\n  } = _temp === void 0 ? {} : _temp;\n  const support = getSupport();\n  const window = getWindow();\n  const platform = window.navigator.platform;\n  const ua = userAgent || window.navigator.userAgent;\n  const device = {\n    ios: false,\n    android: false\n  };\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const windows = platform === 'Win32';\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  }\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n\n  // Export object\n  return device;\n}\nfunction getDevice(overrides) {\n  if (overrides === void 0) {\n    overrides = {};\n  }\n  if (!deviceCached) {\n    deviceCached = calcDevice(overrides);\n  }\n  return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n  const window = getWindow();\n  const device = getDevice();\n  let needPerspectiveFix = false;\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n  if (isSafari()) {\n    const ua = String(window.navigator.userAgent);\n    if (ua.includes('Version/')) {\n      const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n      needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n    }\n  }\n  const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n  const isSafariBrowser = isSafari();\n  const need3dFix = isSafariBrowser || isWebView && device.ios;\n  return {\n    isSafari: needPerspectiveFix || isSafariBrowser,\n    needPerspectiveFix,\n    need3dFix,\n    isWebView\n  };\n}\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n  return browser;\n}\n\nfunction Resize(_ref) {\n  let {\n    swiper,\n    on,\n    emit\n  } = _ref;\n  const window = getWindow();\n  let observer = null;\n  let animationFrame = null;\n  const resizeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('beforeResize');\n    emit('resize');\n  };\n  const createObserver = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    observer = new ResizeObserver(entries => {\n      animationFrame = window.requestAnimationFrame(() => {\n        const {\n          width,\n          height\n        } = swiper;\n        let newWidth = width;\n        let newHeight = height;\n        entries.forEach(_ref2 => {\n          let {\n            contentBoxSize,\n            contentRect,\n            target\n          } = _ref2;\n          if (target && target !== swiper.el) return;\n          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n        });\n        if (newWidth !== width || newHeight !== height) {\n          resizeHandler();\n        }\n      });\n    });\n    observer.observe(swiper.el);\n  };\n  const removeObserver = () => {\n    if (animationFrame) {\n      window.cancelAnimationFrame(animationFrame);\n    }\n    if (observer && observer.unobserve && swiper.el) {\n      observer.unobserve(swiper.el);\n      observer = null;\n    }\n  };\n  const orientationChangeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('orientationchange');\n  };\n  on('init', () => {\n    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n      createObserver();\n      return;\n    }\n    window.addEventListener('resize', resizeHandler);\n    window.addEventListener('orientationchange', orientationChangeHandler);\n  });\n  on('destroy', () => {\n    removeObserver();\n    window.removeEventListener('resize', resizeHandler);\n    window.removeEventListener('orientationchange', orientationChangeHandler);\n  });\n}\n\nfunction Observer(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const observers = [];\n  const window = getWindow();\n  const attach = function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    const observer = new ObserverFunc(mutations => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (swiper.__preventObserver__) return;\n      if (mutations.length === 1) {\n        emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        emit('observerUpdate', mutations[0]);\n      };\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n    });\n    observers.push(observer);\n  };\n  const init = () => {\n    if (!swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = elementParents(swiper.hostEl);\n      for (let i = 0; i < containerParents.length; i += 1) {\n        attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    attach(swiper.hostEl, {\n      childList: swiper.params.observeSlideChildren\n    });\n\n    // Observe wrapper\n    attach(swiper.wrapperEl, {\n      attributes: false\n    });\n  };\n  const destroy = () => {\n    observers.forEach(observer => {\n      observer.disconnect();\n    });\n    observers.splice(0, observers.length);\n  };\n  extendParams({\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  });\n  on('init', init);\n  on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n  on(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(event => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n  once(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    function onceHandler() {\n      self.off(events, onceHandler);\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n  onAny(handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n    return self;\n  },\n  offAny(handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsAnyListeners) return self;\n    const index = self.eventsAnyListeners.indexOf(handler);\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n    return self;\n  },\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(event => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  },\n  emit() {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    data.unshift(context);\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(event => {\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n        self.eventsAnyListeners.forEach(eventHandler => {\n          eventHandler.apply(context, [event, ...data]);\n        });\n      }\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(eventHandler => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n};\n\nfunction updateSize() {\n  const swiper = this;\n  let width;\n  let height;\n  const el = swiper.el;\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n    width = swiper.params.width;\n  } else {\n    width = el.clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n    height = swiper.params.height;\n  } else {\n    height = el.clientHeight;\n  }\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n  height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n  if (Number.isNaN(width)) width = 0;\n  if (Number.isNaN(height)) height = 0;\n  Object.assign(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}\n\nfunction updateSlides() {\n  const swiper = this;\n  function getDirectionPropertyValue(node, label) {\n    return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n  }\n  const params = swiper.params;\n  const {\n    wrapperEl,\n    slidesEl,\n    size: swiperSize,\n    rtlTranslate: rtl,\n    wrongRTL\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.slidesGrid.length;\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  slides.forEach(slideEl => {\n    if (rtl) {\n      slideEl.style.marginLeft = '';\n    } else {\n      slideEl.style.marginRight = '';\n    }\n    slideEl.style.marginBottom = '';\n    slideEl.style.marginTop = '';\n  });\n\n  // reset cssMode offsets\n  if (params.centeredSlides && params.cssMode) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n  }\n  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n  if (gridEnabled) {\n    swiper.grid.initSlides(slides);\n  } else if (swiper.grid) {\n    swiper.grid.unsetSlides();\n  }\n\n  // Calc slides\n  let slideSize;\n  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n    return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n  }).length > 0;\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    let slide;\n    if (slides[i]) slide = slides[i];\n    if (gridEnabled) {\n      swiper.grid.updateSlide(i, slide, slides);\n    }\n    if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      if (shouldResetSlideSize) {\n        slides[i].style[swiper.getDirectionLabel('width')] = ``;\n      }\n      const slideStyles = getComputedStyle(slide);\n      const currentTransform = slide.style.transform;\n      const currentWebKitTransform = slide.style.webkitTransform;\n      if (currentTransform) {\n        slide.style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n      } else {\n        // eslint-disable-next-line\n        const width = getDirectionPropertyValue(slideStyles, 'width');\n        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n        const boxSizing = slideStyles.getPropertyValue('box-sizing');\n        if (boxSizing && boxSizing === 'border-box') {\n          slideSize = width + marginLeft + marginRight;\n        } else {\n          const {\n            clientWidth,\n            offsetWidth\n          } = slide;\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n        }\n      }\n      if (currentTransform) {\n        slide.style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n      if (slides[i]) {\n        slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n    swiper.virtualSize += slideSize + spaceBetween;\n    prevSlideSize = slideSize;\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (params.setWrapperSize) {\n    wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (gridEnabled) {\n    swiper.grid.updateWrapperSize(slideSize, snapGrid);\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    const newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (isVirtual && params.loop) {\n    const size = slidesSizesGrid[0] + spaceBetween;\n    if (params.slidesPerGroup > 1) {\n      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n      const groupSize = size * params.slidesPerGroup;\n      for (let i = 0; i < groups; i += 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n      }\n    }\n    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n      if (params.slidesPerGroup === 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n      }\n      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n      swiper.virtualSize += size;\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n  if (spaceBetween !== 0) {\n    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n    slides.filter((_, slideIndex) => {\n      if (!params.cssMode || params.loop) return true;\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }).forEach(slideEl => {\n      slideEl.style[key] = `${spaceBetween}px`;\n    });\n  }\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n    snapGrid = snapGrid.map(snap => {\n      if (snap <= 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n    if (allSlidesSize + offsetSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n  Object.assign(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid\n  });\n  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n    const addToSnapGrid = -swiper.snapGrid[0];\n    const addToSlidesGrid = -swiper.slidesGrid[0];\n    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n  }\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  swiper.emit('slidesUpdated');\n  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n    if (slidesLength <= params.maxBackfaceHiddenSlides) {\n      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n    } else if (hasClassBackfaceClassAdded) {\n      swiper.el.classList.remove(backFaceHiddenClass);\n    }\n  }\n}\n\nfunction updateAutoHeight(speed) {\n  const swiper = this;\n  const activeSlides = [];\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  const getSlideByIndex = index => {\n    if (isVirtual) {\n      return swiper.slides[swiper.getSlideIndexByData(index)];\n    }\n    return swiper.slides[index];\n  };\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      (swiper.visibleSlides || []).forEach(slide => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length && !isVirtual) break;\n        activeSlides.push(getSlideByIndex(index));\n      }\n    }\n  } else {\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n  const swiper = this;\n  const slides = swiper.slides;\n  // eslint-disable-next-line\n  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n  }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n  if (condition && !slideEl.classList.contains(className)) {\n    slideEl.classList.add(className);\n  } else if (!condition && slideEl.classList.contains(className)) {\n    slideEl.classList.remove(className);\n  }\n};\nfunction updateSlidesProgress(translate) {\n  if (translate === void 0) {\n    translate = this && this.translate || 0;\n  }\n  const swiper = this;\n  const params = swiper.params;\n  const {\n    slides,\n    rtlTranslate: rtl,\n    snapGrid\n  } = swiper;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n  let spaceBetween = params.spaceBetween;\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    let slideOffset = slide.swiperSlideOffset;\n    if (params.cssMode && params.centeredSlides) {\n      slideOffset -= slides[0].swiperSlideOffset;\n    }\n    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const slideBefore = -(offsetCenter - slideOffset);\n    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n    const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n    if (isVisible) {\n      swiper.visibleSlides.push(slide);\n      swiper.visibleSlidesIndexes.push(i);\n    }\n    toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n    toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n    slide.progress = rtl ? -slideProgress : slideProgress;\n    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n  }\n}\n\nfunction updateProgress(translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let {\n    progress,\n    isBeginning,\n    isEnd,\n    progressLoop\n  } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\n    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n    isBeginning = isBeginningRounded || progress <= 0;\n    isEnd = isEndRounded || progress >= 1;\n    if (isBeginningRounded) progress = 0;\n    if (isEndRounded) progress = 1;\n  }\n  if (params.loop) {\n    const firstSlideIndex = swiper.getSlideIndexByData(0);\n    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n    const translateAbs = Math.abs(translate);\n    if (translateAbs >= firstSlideTranslate) {\n      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n    } else {\n      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n    }\n    if (progressLoop > 1) progressLoop -= 1;\n  }\n  Object.assign(swiper, {\n    progress,\n    progressLoop,\n    isBeginning,\n    isEnd\n  });\n  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n    swiper.emit('fromEdge');\n  }\n  swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n  if (condition && !slideEl.classList.contains(className)) {\n    slideEl.classList.add(className);\n  } else if (!condition && slideEl.classList.contains(className)) {\n    slideEl.classList.remove(className);\n  }\n};\nfunction updateSlidesClasses() {\n  const swiper = this;\n  const {\n    slides,\n    params,\n    slidesEl,\n    activeIndex\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const getFilteredSlide = selector => {\n    return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n  };\n  let activeSlide;\n  let prevSlide;\n  let nextSlide;\n  if (isVirtual) {\n    if (params.loop) {\n      let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n    } else {\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n    }\n  } else {\n    if (gridEnabled) {\n      activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n      nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n      prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n    } else {\n      activeSlide = slides[activeIndex];\n    }\n  }\n  if (activeSlide) {\n    if (!gridEnabled) {\n      // Next Slide\n      nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !nextSlide) {\n        nextSlide = slides[0];\n      }\n\n      // Prev Slide\n      prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !prevSlide === 0) {\n        prevSlide = slides[slides.length - 1];\n      }\n    }\n  }\n  slides.forEach(slideEl => {\n    toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n    toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n    toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n  });\n  swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n  const slideEl = imageEl.closest(slideSelector());\n  if (slideEl) {\n    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n    if (!lazyEl && swiper.isElement) {\n      if (slideEl.shadowRoot) {\n        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n      } else {\n        // init later\n        requestAnimationFrame(() => {\n          if (slideEl.shadowRoot) {\n            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n            if (lazyEl) lazyEl.remove();\n          }\n        });\n      }\n    }\n    if (lazyEl) lazyEl.remove();\n  }\n};\nconst unlazy = (swiper, index) => {\n  if (!swiper.slides[index]) return;\n  const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n  if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  let amount = swiper.params.lazyPreloadPrevNext;\n  const len = swiper.slides.length;\n  if (!len || !amount || amount < 0) return;\n  amount = Math.min(amount, len);\n  const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n  const activeIndex = swiper.activeIndex;\n  if (swiper.params.grid && swiper.params.grid.rows > 1) {\n    const activeColumn = activeIndex;\n    const preloadColumns = [activeColumn - amount];\n    preloadColumns.push(...Array.from({\n      length: amount\n    }).map((_, i) => {\n      return activeColumn + slidesPerView + i;\n    }));\n    swiper.slides.forEach((slideEl, i) => {\n      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n    });\n    return;\n  }\n  const slideIndexLastInView = activeIndex + slidesPerView - 1;\n  if (swiper.params.rewind || swiper.params.loop) {\n    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n      const realIndex = (i % len + len) % len;\n      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n    }\n  } else {\n    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n        unlazy(swiper, i);\n      }\n    }\n  }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n  const {\n    slidesGrid,\n    params\n  } = swiper;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  let activeIndex;\n  for (let i = 0; i < slidesGrid.length; i += 1) {\n    if (typeof slidesGrid[i + 1] !== 'undefined') {\n      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n        activeIndex = i;\n      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n        activeIndex = i + 1;\n      }\n    } else if (translate >= slidesGrid[i]) {\n      activeIndex = i;\n    }\n  }\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n  }\n  return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    snapGrid,\n    params,\n    activeIndex: previousIndex,\n    realIndex: previousRealIndex,\n    snapIndex: previousSnapIndex\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  const getVirtualRealIndex = aIndex => {\n    let realIndex = aIndex - swiper.virtual.slidesBefore;\n    if (realIndex < 0) {\n      realIndex = swiper.virtual.slides.length + realIndex;\n    }\n    if (realIndex >= swiper.virtual.slides.length) {\n      realIndex -= swiper.virtual.slides.length;\n    }\n    return realIndex;\n  };\n  if (typeof activeIndex === 'undefined') {\n    activeIndex = getActiveIndexByTranslate(swiper);\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex && !swiper.params.loop) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n  if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n    swiper.realIndex = getVirtualRealIndex(activeIndex);\n    return;\n  }\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n  // Get real index\n  let realIndex;\n  if (swiper.virtual && params.virtual.enabled && params.loop) {\n    realIndex = getVirtualRealIndex(activeIndex);\n  } else if (gridEnabled) {\n    const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n    let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n    if (Number.isNaN(activeSlideIndex)) {\n      activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n    }\n    realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n  } else if (swiper.slides[activeIndex]) {\n    const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n    if (slideIndex) {\n      realIndex = parseInt(slideIndex, 10);\n    } else {\n      realIndex = activeIndex;\n    }\n  } else {\n    realIndex = activeIndex;\n  }\n  Object.assign(swiper, {\n    previousSnapIndex,\n    snapIndex,\n    previousRealIndex,\n    realIndex,\n    previousIndex,\n    activeIndex\n  });\n  if (swiper.initialized) {\n    preload(swiper);\n  }\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    swiper.emit('slideChange');\n  }\n}\n\nfunction updateClickedSlide(el, path) {\n  const swiper = this;\n  const params = swiper.params;\n  let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n  if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n    [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n      if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n        slide = pathEl;\n      }\n    });\n  }\n  let slideFound = false;\n  let slideIndex;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) {\n        slideFound = true;\n        slideIndex = i;\n        break;\n      }\n    }\n  }\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = slideIndex;\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n\nvar update = {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n  if (axis === void 0) {\n    axis = this.isHorizontal() ? 'x' : 'y';\n  }\n  const swiper = this;\n  const {\n    params,\n    rtlTranslate: rtl,\n    translate,\n    wrapperEl\n  } = swiper;\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n  let currentTranslate = getTranslate(wrapperEl, axis);\n  currentTranslate += swiper.cssOverflowAdjustment();\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl,\n    params,\n    wrapperEl,\n    progress\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    if (swiper.isHorizontal()) {\n      x -= swiper.cssOverflowAdjustment();\n    } else {\n      y -= swiper.cssOverflowAdjustment();\n    }\n    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n  }\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n  return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n  if (translate === void 0) {\n    translate = 0;\n  }\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (translateBounds === void 0) {\n    translateBounds = true;\n  }\n  const swiper = this;\n  const {\n    params,\n    wrapperEl\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: -newTranslate,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: -newTranslate,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          swiper.animating = false;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n  return true;\n}\n\nvar translate = {\n  getTranslate: getSwiperTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo\n};\n\nfunction setTransition(duration, byController) {\n  const swiper = this;\n  if (!swiper.params.cssMode) {\n    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n  }\n  swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n  let {\n    swiper,\n    runCallbacks,\n    direction,\n    step\n  } = _ref;\n  const {\n    activeIndex,\n    previousIndex\n  } = swiper;\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n  swiper.emit(`transition${step}`);\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit(`slideResetTransition${step}`);\n      return;\n    }\n    swiper.emit(`slideChangeTransition${step}`);\n    if (dir === 'next') {\n      swiper.emit(`slideNextTransition${step}`);\n    } else {\n      swiper.emit(`slidePrevTransition${step}`);\n    }\n  }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'Start'\n  });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'End'\n  });\n}\n\nvar transition = {\n  setTransition,\n  transitionStart,\n  transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    index = parseInt(index, 10);\n  }\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    previousIndex,\n    activeIndex,\n    rtlTranslate: rtl,\n    wrapperEl,\n    enabled\n  } = swiper;\n  if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  const translate = -snapGrid[snapIndex];\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      const normalizedTranslate = -Math.floor(translate * 100);\n      const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n          slideIndex = i;\n        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n          slideIndex = i + 1;\n        }\n      } else if (normalizedTranslate >= normalizedGrid) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) {\n        return false;\n      }\n    }\n  }\n  if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  // Update progress\n  swiper.updateProgress(translate);\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n  // initial virtual\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  const isInitialVirtual = isVirtual && initial;\n  // Update Index\n  if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    const t = rtl ? translate : -translate;\n    if (speed === 0) {\n      if (isVirtual) {\n        swiper.wrapperEl.style.scrollSnapType = 'none';\n        swiper._immediateVirtual = true;\n      }\n      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n        swiper._cssModeVirtualInitialSet = true;\n        requestAnimationFrame(() => {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n      if (isVirtual) {\n        requestAnimationFrame(() => {\n          swiper.wrapperEl.style.scrollSnapType = '';\n          swiper._immediateVirtual = false;\n        });\n      }\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: t,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: t,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  swiper.setTransition(speed);\n  swiper.setTranslate(translate);\n  swiper.updateActiveIndex(slideIndex);\n  swiper.updateSlidesClasses();\n  swiper.emit('beforeTransitionStart', speed, internal);\n  swiper.transitionStart(runCallbacks, direction);\n  if (speed === 0) {\n    swiper.transitionEnd(runCallbacks, direction);\n  } else if (!swiper.animating) {\n    swiper.animating = true;\n    if (!swiper.onSlideToWrapperTransitionEnd) {\n      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n        if (!swiper || swiper.destroyed) return;\n        if (e.target !== this) return;\n        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.onSlideToWrapperTransitionEnd = null;\n        delete swiper.onSlideToWrapperTransitionEnd;\n        swiper.transitionEnd(runCallbacks, direction);\n      };\n    }\n    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n  }\n  return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    const indexAsNumber = parseInt(index, 10);\n    index = indexAsNumber;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      // eslint-disable-next-line\n      newIndex = newIndex + swiper.virtual.slidesBefore;\n    } else {\n      let targetSlideIndex;\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n      }\n      const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n      const {\n        centeredSlides\n      } = swiper.params;\n      let slidesPerView = swiper.params.slidesPerView;\n      if (slidesPerView === 'auto') {\n        slidesPerView = swiper.slidesPerViewDynamic();\n      } else {\n        slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n        if (centeredSlides && slidesPerView % 2 === 0) {\n          slidesPerView = slidesPerView + 1;\n        }\n      }\n      let needLoopFix = cols - targetSlideIndex < slidesPerView;\n      if (centeredSlides) {\n        needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n      }\n      if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n        needLoopFix = false;\n      }\n      if (needLoopFix) {\n        const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n        swiper.loopFix({\n          direction,\n          slideTo: true,\n          activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n          slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n        });\n      }\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        newIndex = swiper.getSlideIndexByData(newIndex);\n      }\n    }\n  }\n  requestAnimationFrame(() => {\n    swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  });\n  return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    enabled,\n    params,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let perGroup = params.slidesPerGroup;\n  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n  }\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'next'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n      requestAnimationFrame(() => {\n        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n      });\n      return true;\n    }\n  }\n  if (params.rewind && swiper.isEnd) {\n    return swiper.slideTo(0, speed, runCallbacks, internal);\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    rtlTranslate,\n    enabled,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'prev'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    let prevSnapIndex;\n    snapGrid.forEach((snap, snapIndex) => {\n      if (normalizedTranslate >= snap) {\n        // prevSnap = snap;\n        prevSnapIndex = snapIndex;\n      }\n    });\n    if (typeof prevSnapIndex !== 'undefined') {\n      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n    }\n  }\n  let prevIndex = 0;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n      prevIndex = Math.max(prevIndex, 0);\n    }\n  }\n  if (params.rewind && swiper.isBeginning) {\n    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n    requestAnimationFrame(() => {\n      swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    });\n    return true;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (threshold === void 0) {\n    threshold = 0.5;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n  const swiper = this;\n  if (swiper.destroyed) return;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n        swiper.loopFix();\n        slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n        nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n      nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n\nvar slide = {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  const initSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    slides.forEach((el, index) => {\n      el.setAttribute('data-swiper-slide-index', index);\n    });\n  };\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n  const addBlankSlides = amountOfSlides => {\n    for (let i = 0; i < amountOfSlides; i += 1) {\n      const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n      swiper.slidesEl.append(slideEl);\n    }\n  };\n  if (shouldFillGroup) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else if (shouldFillGrid) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else {\n    initSlides();\n  }\n  swiper.loopFix({\n    slideRealIndex,\n    direction: params.centeredSlides ? undefined : 'next'\n  });\n}\n\nfunction loopFix(_temp) {\n  let {\n    slideRealIndex,\n    slideTo = true,\n    direction,\n    setTranslate,\n    activeSlideIndex,\n    byController,\n    byMousewheel\n  } = _temp === void 0 ? {} : _temp;\n  const swiper = this;\n  if (!swiper.params.loop) return;\n  swiper.emit('beforeLoopFix');\n  const {\n    slides,\n    allowSlidePrev,\n    allowSlideNext,\n    slidesEl,\n    params\n  } = swiper;\n  const {\n    centeredSlides\n  } = params;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  if (swiper.virtual && params.virtual.enabled) {\n    if (slideTo) {\n      if (!params.centeredSlides && swiper.snapIndex === 0) {\n        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n    swiper.emit('loopFix');\n    return;\n  }\n  let slidesPerView = params.slidesPerView;\n  if (slidesPerView === 'auto') {\n    slidesPerView = swiper.slidesPerViewDynamic();\n  } else {\n    slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n    if (centeredSlides && slidesPerView % 2 === 0) {\n      slidesPerView = slidesPerView + 1;\n    }\n  }\n  const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n  let loopedSlides = slidesPerGroup;\n  if (loopedSlides % slidesPerGroup !== 0) {\n    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n  }\n  loopedSlides += params.loopAdditionalSlides;\n  swiper.loopedSlides = loopedSlides;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (slides.length < slidesPerView + loopedSlides) {\n    showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n  } else if (gridEnabled && params.grid.fill === 'row') {\n    showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n  }\n  const prependSlidesIndexes = [];\n  const appendSlidesIndexes = [];\n  let activeIndex = swiper.activeIndex;\n  if (typeof activeSlideIndex === 'undefined') {\n    activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n  } else {\n    activeIndex = activeSlideIndex;\n  }\n  const isNext = direction === 'next' || !direction;\n  const isPrev = direction === 'prev' || !direction;\n  let slidesPrepended = 0;\n  let slidesAppended = 0;\n  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n  const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n  // prepend last slides before start\n  if (activeColIndexWithShift < loopedSlides) {\n    slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n    for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        const colIndexToPrepend = cols - index - 1;\n        for (let i = slides.length - 1; i >= 0; i -= 1) {\n          if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n        }\n        // slides.forEach((slide, slideIndex) => {\n        //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n        // });\n      } else {\n        prependSlidesIndexes.push(cols - index - 1);\n      }\n    }\n  } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n    slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n    for (let i = 0; i < slidesAppended; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        slides.forEach((slide, slideIndex) => {\n          if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n        });\n      } else {\n        appendSlidesIndexes.push(index);\n      }\n    }\n  }\n  swiper.__preventObserver__ = true;\n  requestAnimationFrame(() => {\n    swiper.__preventObserver__ = false;\n  });\n  if (isPrev) {\n    prependSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.prepend(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  if (isNext) {\n    appendSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.append(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  swiper.recalcSlides();\n  if (params.slidesPerView === 'auto') {\n    swiper.updateSlides();\n  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n    swiper.slides.forEach((slide, slideIndex) => {\n      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n    });\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  if (slideTo) {\n    if (prependSlidesIndexes.length > 0 && isPrev) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        if (setTranslate) {\n          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n          swiper.touchEventsData.currentTranslate = swiper.translate;\n        }\n      }\n    } else if (appendSlidesIndexes.length > 0 && isNext) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n      }\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.controller && swiper.controller.control && !byController) {\n    const loopParams = {\n      slideRealIndex,\n      direction,\n      setTranslate,\n      activeSlideIndex,\n      byController: true\n    };\n    if (Array.isArray(swiper.controller.control)) {\n      swiper.controller.control.forEach(c => {\n        if (!c.destroyed && c.params.loop) c.loopFix({\n          ...loopParams,\n          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n        });\n      });\n    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n      swiper.controller.control.loopFix({\n        ...loopParams,\n        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n      });\n    }\n  }\n  swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  swiper.recalcSlides();\n  const newSlidesOrder = [];\n  swiper.slides.forEach(slideEl => {\n    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n    newSlidesOrder[index] = slideEl;\n  });\n  swiper.slides.forEach(slideEl => {\n    slideEl.removeAttribute('data-swiper-slide-index');\n  });\n  newSlidesOrder.forEach(slideEl => {\n    slidesEl.append(slideEl);\n  });\n  swiper.recalcSlides();\n  swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n  loopCreate,\n  loopFix,\n  loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n  const swiper = this;\n  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nfunction unsetGrabCursor() {\n  const swiper = this;\n  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nvar grabCursor = {\n  setGrabCursor,\n  unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n  if (base === void 0) {\n    base = this;\n  }\n  function __closestFrom(el) {\n    if (!el || el === getDocument() || el === getWindow()) return null;\n    if (el.assignedSlot) el = el.assignedSlot;\n    const found = el.closest(selector);\n    if (!found && !el.getRootNode) {\n      return null;\n    }\n    return found || __closestFrom(el.getRootNode().host);\n  }\n  return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n  const window = getWindow();\n  const {\n    params\n  } = swiper;\n  const edgeSwipeDetection = params.edgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold;\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n    if (edgeSwipeDetection === 'prevent') {\n      event.preventDefault();\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\nfunction onTouchStart(event) {\n  const swiper = this;\n  const document = getDocument();\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const data = swiper.touchEventsData;\n  if (e.type === 'pointerdown') {\n    if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n      return;\n    }\n    data.pointerId = e.pointerId;\n  } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n    data.touchId = e.targetTouches[0].identifier;\n  }\n  if (e.type === 'touchstart') {\n    // don't proceed touch event\n    preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n    return;\n  }\n  const {\n    params,\n    touches,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  if (!swiper.animating && params.cssMode && params.loop) {\n    swiper.loopFix();\n  }\n  let targetEl = e.target;\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n  }\n  if ('which' in e && e.which === 3) return;\n  if ('button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n\n  // change target el for shadow root component\n  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n  // eslint-disable-next-line\n  const eventPath = e.composedPath ? e.composedPath() : e.path;\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n    targetEl = eventPath[0];\n  }\n  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n  const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n  // use closestElement for shadow root element to get the actual closest for nested shadow root element\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!targetEl.closest(params.swipeHandler)) return;\n  }\n  touches.currentX = e.pageX;\n  touches.currentY = e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  if (!preventEdgeSwipe(swiper, e, startX)) {\n    return;\n  }\n  Object.assign(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined\n  });\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  let preventDefault = true;\n  if (targetEl.matches(data.focusableElements)) {\n    preventDefault = false;\n    if (targetEl.nodeName === 'SELECT') {\n      data.isTouched = false;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n    document.activeElement.blur();\n  }\n  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n    e.preventDefault();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n    swiper.freeMode.onTouchStart();\n  }\n  swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n  const document = getDocument();\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (e.type === 'pointermove') {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    const id = e.pointerId;\n    if (id !== data.pointerId) return;\n  }\n  let targetTouch;\n  if (e.type === 'touchmove') {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  } else {\n    targetTouch = e;\n  }\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  const pageX = targetTouch.pageX;\n  const pageY = targetTouch.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    if (!e.target.matches(data.focusableElements)) {\n      swiper.allowClick = false;\n    }\n    if (data.isTouched) {\n      Object.assign(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY\n      });\n      data.touchStartTime = now();\n    }\n    return;\n  }\n  if (params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n      return;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n    document.activeElement.blur();\n  }\n  if (document.activeElement) {\n    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  touches.previousX = touches.currentX;\n  touches.previousY = touches.currentY;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n  if (params.oneWayMovement) {\n    diff = Math.abs(diff) * (rtl ? 1 : -1);\n    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n  }\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) {\n    diff = -diff;\n    touchesDiff = -touchesDiff;\n  }\n  const prevTouchesDirection = swiper.touchesDirection;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n  const isLoop = swiper.params.loop && !params.cssMode;\n  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n  if (!data.isMoved) {\n    if (isLoop && allowLoopFix) {\n      swiper.loopFix({\n        direction: swiper.swipeDirection\n      });\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      const evt = new window.CustomEvent('transitionend', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          bySwiperTouchMove: true\n        }\n      });\n      swiper.wrapperEl.dispatchEvent(evt);\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  let loopFixed;\n  new Date().getTime();\n  if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n    Object.assign(touches, {\n      startX: pageX,\n      startY: pageY,\n      currentX: pageX,\n      currentY: pageY,\n      startTranslate: data.currentTranslate\n    });\n    data.loopSwapReset = true;\n    data.startTranslate = data.currentTranslate;\n    return;\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  data.currentTranslate = diff + data.startTranslate;\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if (diff > 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n      swiper.loopFix({\n        direction: 'prev',\n        setTranslate: true,\n        activeSlideIndex: 0\n      });\n    }\n    if (data.currentTranslate > swiper.minTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      }\n    }\n  } else if (diff < 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n      swiper.loopFix({\n        direction: 'next',\n        setTranslate: true,\n        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n      });\n    }\n    if (data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n    }\n  }\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n    swiper.freeMode.onTouchMove();\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  let targetTouch;\n  const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n  if (!isTouchEvent) {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    if (e.pointerId !== data.pointerId) return;\n    targetTouch = e;\n  } else {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  }\n  if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n    const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n    if (!proceed) {\n      return;\n    }\n  }\n  data.pointerId = null;\n  data.touchId = null;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    slidesGrid,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    const pathTree = e.path || e.composedPath && e.composedPath();\n    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n  data.lastClickTime = now();\n  nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n  if (params.cssMode) {\n    return;\n  }\n  if (params.freeMode && params.freeMode.enabled) {\n    swiper.freeMode.onTouchEnd({\n      currentPos\n    });\n    return;\n  }\n\n  // Find current slide\n  const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n  let rewindFirstIndex = null;\n  let rewindLastIndex = null;\n  if (params.rewind) {\n    if (swiper.isBeginning) {\n      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    } else if (swiper.isEnd) {\n      rewindFirstIndex = 0;\n    }\n  }\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > 1 - params.longSwipesRatio) {\n        swiper.slideTo(stopIndex + increment);\n      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n        swiper.slideTo(rewindLastIndex);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n\nfunction onResize() {\n  const swiper = this;\n  const {\n    params,\n    el\n  } = swiper;\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const {\n    allowSlideNext,\n    allowSlidePrev,\n    snapGrid\n  } = swiper;\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n  swiper.updateSize();\n  swiper.updateSlides();\n  swiper.updateSlidesClasses();\n  const isVirtualLoop = isVirtual && params.loop;\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    if (swiper.params.loop && !isVirtual) {\n      swiper.slideToLoop(swiper.realIndex, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n  }\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    clearTimeout(swiper.autoplay.resizeTimeout);\n    swiper.autoplay.resizeTimeout = setTimeout(() => {\n      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n        swiper.autoplay.resume();\n      }\n    }, 500);\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n\nfunction onClick(e) {\n  const swiper = this;\n  if (!swiper.enabled) return;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n\nfunction onScroll() {\n  const swiper = this;\n  const {\n    wrapperEl,\n    rtlTranslate,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    swiper.translate = -wrapperEl.scrollLeft;\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === 0) swiper.translate = 0;\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n  const swiper = this;\n  processLazyPreloader(swiper, e.target);\n  if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n    return;\n  }\n  swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n  const swiper = this;\n  if (swiper.documentTouchHandlerProceeded) return;\n  swiper.documentTouchHandlerProceeded = true;\n  if (swiper.params.touchReleaseOnEdges) {\n    swiper.el.style.touchAction = 'auto';\n  }\n}\n\nconst events = (swiper, method) => {\n  const document = getDocument();\n  const {\n    params,\n    el,\n    wrapperEl,\n    device\n  } = swiper;\n  const capture = !!params.nested;\n  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n  const swiperMethod = method;\n  if (!el || typeof el === 'string') return;\n\n  // Touch Events\n  document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n    passive: false,\n    capture\n  });\n  el[domMethod]('touchstart', swiper.onTouchStart, {\n    passive: false\n  });\n  el[domMethod]('pointerdown', swiper.onTouchStart, {\n    passive: false\n  });\n  document[domMethod]('touchmove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('pointermove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('touchend', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerup', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointercancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('touchcancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerout', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerleave', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('contextmenu', swiper.onTouchEnd, {\n    passive: true\n  });\n\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el[domMethod]('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl[domMethod]('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper[swiperMethod]('observerUpdate', onResize, true);\n  }\n\n  // Images loader\n  el[domMethod]('load', swiper.onLoad, {\n    capture: true\n  });\n};\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n  swiper.onClick = onClick.bind(swiper);\n  swiper.onLoad = onLoad.bind(swiper);\n  events(swiper, 'on');\n}\nfunction detachEvents() {\n  const swiper = this;\n  events(swiper, 'off');\n}\nvar events$1 = {\n  attachEvents,\n  detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n  return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n  const swiper = this;\n  const {\n    realIndex,\n    initialized,\n    params,\n    el\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n  const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n  const wasMultiRow = isGridEnabled(swiper, params);\n  const isMultiRow = isGridEnabled(swiper, breakpointParams);\n  const wasGrabCursor = swiper.params.grabCursor;\n  const isGrabCursor = breakpointParams.grabCursor;\n  const wasEnabled = params.enabled;\n  if (wasMultiRow && !isMultiRow) {\n    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n    swiper.emitContainerClasses();\n  } else if (!wasMultiRow && isMultiRow) {\n    el.classList.add(`${params.containerModifierClass}grid`);\n    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n      el.classList.add(`${params.containerModifierClass}grid-column`);\n    }\n    swiper.emitContainerClasses();\n  }\n  if (wasGrabCursor && !isGrabCursor) {\n    swiper.unsetGrabCursor();\n  } else if (!wasGrabCursor && isGrabCursor) {\n    swiper.setGrabCursor();\n  }\n\n  // Toggle navigation, pagination, scrollbar\n  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n    if (typeof breakpointParams[prop] === 'undefined') return;\n    const wasModuleEnabled = params[prop] && params[prop].enabled;\n    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n    if (wasModuleEnabled && !isModuleEnabled) {\n      swiper[prop].disable();\n    }\n    if (!wasModuleEnabled && isModuleEnabled) {\n      swiper[prop].enable();\n    }\n  });\n  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n  const wasLoop = params.loop;\n  if (directionChanged && initialized) {\n    swiper.changeDirection();\n  }\n  extend(swiper.params, breakpointParams);\n  const isEnabled = swiper.params.enabled;\n  const hasLoop = swiper.params.loop;\n  Object.assign(swiper, {\n    allowTouchMove: swiper.params.allowTouchMove,\n    allowSlideNext: swiper.params.allowSlideNext,\n    allowSlidePrev: swiper.params.allowSlidePrev\n  });\n  if (wasEnabled && !isEnabled) {\n    swiper.disable();\n  } else if (!wasEnabled && isEnabled) {\n    swiper.enable();\n  }\n  swiper.currentBreakpoint = breakpoint;\n  swiper.emit('_beforeBreakpoint', breakpointParams);\n  if (initialized) {\n    if (needsReLoop) {\n      swiper.loopDestroy();\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (!wasLoop && hasLoop) {\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (wasLoop && !hasLoop) {\n      swiper.loopDestroy();\n    }\n  }\n  swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n  if (base === void 0) {\n    base = 'window';\n  }\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\n  let breakpoint = false;\n  const window = getWindow();\n  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n  const points = Object.keys(breakpoints).map(point => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = currentHeight * minRatio;\n      return {\n        value,\n        point\n      };\n    }\n    return {\n      value: point,\n      point\n    };\n  });\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const {\n      point,\n      value\n    } = points[i];\n    if (base === 'window') {\n      if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n        breakpoint = point;\n      }\n    } else if (value <= containerEl.clientWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n\nvar breakpoints = {\n  setBreakpoint,\n  getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n  const resultClasses = [];\n  entries.forEach(item => {\n    if (typeof item === 'object') {\n      Object.keys(item).forEach(classNames => {\n        if (item[classNames]) {\n          resultClasses.push(prefix + classNames);\n        }\n      });\n    } else if (typeof item === 'string') {\n      resultClasses.push(prefix + item);\n    }\n  });\n  return resultClasses;\n}\nfunction addClasses() {\n  const swiper = this;\n  const {\n    classNames,\n    params,\n    rtl,\n    el,\n    device\n  } = swiper;\n  // prettier-ignore\n  const suffixes = prepareClasses(['initialized', params.direction, {\n    'free-mode': swiper.params.freeMode && params.freeMode.enabled\n  }, {\n    'autoheight': params.autoHeight\n  }, {\n    'rtl': rtl\n  }, {\n    'grid': params.grid && params.grid.rows > 1\n  }, {\n    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n  }, {\n    'android': device.android\n  }, {\n    'ios': device.ios\n  }, {\n    'css-mode': params.cssMode\n  }, {\n    'centered': params.cssMode && params.centeredSlides\n  }, {\n    'watch-progress': params.watchSlidesProgress\n  }], params.containerModifierClass);\n  classNames.push(...suffixes);\n  el.classList.add(...classNames);\n  swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n  const swiper = this;\n  const {\n    el,\n    classNames\n  } = swiper;\n  if (!el || typeof el === 'string') return;\n  el.classList.remove(...classNames);\n  swiper.emitContainerClasses();\n}\n\nvar classes = {\n  addClasses,\n  removeClasses\n};\n\nfunction checkOverflow() {\n  const swiper = this;\n  const {\n    isLocked: wasLocked,\n    params\n  } = swiper;\n  const {\n    slidesOffsetBefore\n  } = params;\n  if (slidesOffsetBefore) {\n    const lastSlideIndex = swiper.slides.length - 1;\n    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n    swiper.isLocked = swiper.size > lastSlideRightEdge;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n  if (params.allowSlideNext === true) {\n    swiper.allowSlideNext = !swiper.isLocked;\n  }\n  if (params.allowSlidePrev === true) {\n    swiper.allowSlidePrev = !swiper.isLocked;\n  }\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n  }\n  if (wasLocked !== swiper.isLocked) {\n    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n  }\n}\nvar checkOverflow$1 = {\n  checkOverflow\n};\n\nvar defaults = {\n  init: true,\n  direction: 'horizontal',\n  oneWayMovement: false,\n  swiperElementNodeName: 'SWIPER-CONTAINER',\n  touchEventsTarget: 'wrapper',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  resizeObserver: true,\n  nested: false,\n  createElements: false,\n  eventsPrefix: 'swiper',\n  enabled: true,\n  focusableElements: 'input, select, option, textarea, button, video, label',\n  // Overrides\n  width: null,\n  height: null,\n  //\n  preventInteractionOnTransition: false,\n  // ssr\n  userAgent: null,\n  url: null,\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n  // Autoheight\n  autoHeight: false,\n  // Set wrapper width\n  setWrapperSize: false,\n  // Virtual Translate\n  virtualTranslate: false,\n  // Effects\n  effect: 'slide',\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n  breakpointsBase: 'window',\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  slidesPerGroupAuto: false,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0,\n  // in px\n  slidesOffsetAfter: 0,\n  // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: true,\n  // Round length\n  roundLengths: false,\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 5,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n  // Progress\n  watchSlidesProgress: false,\n  // Cursor\n  grabCursor: false,\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n  // loop\n  loop: false,\n  loopAddBlankSlides: true,\n  loopAdditionalSlides: 0,\n  loopPreventsSliding: true,\n  // rewind\n  rewind: false,\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null,\n  // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n  // Passive Listeners\n  passiveListeners: true,\n  maxBackfaceHiddenSlides: 10,\n  // NS\n  containerModifierClass: 'swiper-',\n  // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideFullyVisibleClass: 'swiper-slide-fully-visible',\n  slideNextClass: 'swiper-slide-next',\n  slidePrevClass: 'swiper-slide-prev',\n  wrapperClass: 'swiper-wrapper',\n  lazyPreloaderClass: 'swiper-lazy-preloader',\n  lazyPreloadPrevNext: 0,\n  // Callbacks\n  runCallbacksOnInit: true,\n  // Internals\n  _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n  return function extendParams(obj) {\n    if (obj === void 0) {\n      obj = {};\n    }\n    const moduleParamName = Object.keys(obj)[0];\n    const moduleParams = obj[moduleParamName];\n    if (typeof moduleParams !== 'object' || moduleParams === null) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (params[moduleParamName] === true) {\n      params[moduleParamName] = {\n        enabled: true\n      };\n    }\n    if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n      params[moduleParamName].auto = true;\n    }\n    if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n      params[moduleParamName].auto = true;\n    }\n    if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n      params[moduleParamName].enabled = true;\n    }\n    if (!params[moduleParamName]) params[moduleParamName] = {\n      enabled: false\n    };\n    extend(allModulesParams, obj);\n  };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n  eventsEmitter,\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  events: events$1,\n  breakpoints,\n  checkOverflow: checkOverflow$1,\n  classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n  constructor() {\n    let el;\n    let params;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el;\n    const document = getDocument();\n    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n      const swipers = [];\n      document.querySelectorAll(params.el).forEach(containerEl => {\n        const newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      // eslint-disable-next-line no-constructor-return\n      return swipers;\n    }\n\n    // Swiper Instance\n    const swiper = this;\n    swiper.__swiper__ = true;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n    swiper.modules = [...swiper.__modules__];\n    if (params.modules && Array.isArray(params.modules)) {\n      swiper.modules.push(...params.modules);\n    }\n    const allModulesParams = {};\n    swiper.modules.forEach(mod => {\n      mod({\n        params,\n        swiper,\n        extendParams: moduleExtendParams(params, allModulesParams),\n        on: swiper.on.bind(swiper),\n        once: swiper.once.bind(swiper),\n        off: swiper.off.bind(swiper),\n        emit: swiper.emit.bind(swiper)\n      });\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = extend({}, defaults, allModulesParams);\n\n    // Extend defaults with passed params\n    swiper.params = extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = extend({}, swiper.params);\n    swiper.passedParams = extend({}, params);\n\n    // add event listeners\n    if (swiper.params && swiper.params.on) {\n      Object.keys(swiper.params.on).forEach(eventName => {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    }\n    if (swiper.params && swiper.params.onAny) {\n      swiper.onAny(swiper.params.onAny);\n    }\n\n    // Extend Swiper\n    Object.assign(swiper, {\n      enabled: swiper.params.enabled,\n      el,\n      // Classes\n      classNames: [],\n      // Slides\n      slides: [],\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n      //\n      isBeginning: true,\n      isEnd: false,\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n      cssOverflowAdjustment() {\n        // Returns 0 unless `translate` is > 2**23\n        // Should be subtracted from css values to prevent overflow\n        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n      },\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n      // Touch Events\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        focusableElements: swiper.params.focusableElements,\n        // Last click time\n        lastClickTime: 0,\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        startMoving: undefined,\n        pointerId: null,\n        touchId: null\n      },\n      // Clicks\n      allowClick: true,\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0\n      },\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0\n    });\n    swiper.emit('_swiper');\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    // eslint-disable-next-line no-constructor-return\n    return swiper;\n  }\n  getDirectionLabel(property) {\n    if (this.isHorizontal()) {\n      return property;\n    }\n    // prettier-ignore\n    return {\n      'width': 'height',\n      'margin-top': 'margin-left',\n      'margin-bottom ': 'margin-right',\n      'margin-left': 'margin-top',\n      'margin-right': 'margin-bottom',\n      'padding-left': 'padding-top',\n      'padding-right': 'padding-bottom',\n      'marginRight': 'marginBottom'\n    }[property];\n  }\n  getSlideIndex(slideEl) {\n    const {\n      slidesEl,\n      params\n    } = this;\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    const firstSlideIndex = elementIndex(slides[0]);\n    return elementIndex(slideEl) - firstSlideIndex;\n  }\n  getSlideIndexByData(index) {\n    return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n  }\n  recalcSlides() {\n    const swiper = this;\n    const {\n      slidesEl,\n      params\n    } = swiper;\n    swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n  }\n  enable() {\n    const swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n    swiper.emit('enable');\n  }\n  disable() {\n    const swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n    swiper.emit('disable');\n  }\n  setProgress(progress, speed) {\n    const swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    const min = swiper.minTranslate();\n    const max = swiper.maxTranslate();\n    const current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  emitContainerClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const cls = swiper.el.className.split(' ').filter(className => {\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', cls.join(' '));\n  }\n  getSlideClasses(slideEl) {\n    const swiper = this;\n    if (swiper.destroyed) return '';\n    return slideEl.className.split(' ').filter(className => {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  }\n  emitSlidesClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const updates = [];\n    swiper.slides.forEach(slideEl => {\n      const classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl,\n        classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  }\n  slidesPerViewDynamic(view, exact) {\n    if (view === void 0) {\n      view = 'current';\n    }\n    if (exact === void 0) {\n      exact = false;\n    }\n    const swiper = this;\n    const {\n      params,\n      slides,\n      slidesGrid,\n      slidesSizesGrid,\n      size: swiperSize,\n      activeIndex\n    } = swiper;\n    let spv = 1;\n    if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += Math.ceil(slides[i].swiperSlideSize);\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      // eslint-disable-next-line\n      if (view === 'current') {\n        for (let i = activeIndex + 1; i < slides.length; i += 1) {\n          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      } else {\n        // previous\n        for (let i = activeIndex - 1; i >= 0; i -= 1) {\n          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      }\n    }\n    return spv;\n  }\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const {\n      snapGrid,\n      params\n    } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      }\n    });\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n      setTranslate();\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n        translated = swiper.slideTo(slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n  changeDirection(newDirection, needUpdate) {\n    if (needUpdate === void 0) {\n      needUpdate = true;\n    }\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n      return swiper;\n    }\n    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n    swiper.emitContainerClasses();\n    swiper.params.direction = newDirection;\n    swiper.slides.forEach(slideEl => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n    return swiper;\n  }\n  changeLanguageDirection(direction) {\n    const swiper = this;\n    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n    swiper.rtl = direction === 'rtl';\n    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n    if (swiper.rtl) {\n      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'rtl';\n    } else {\n      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'ltr';\n    }\n    swiper.update();\n  }\n  mount(element) {\n    const swiper = this;\n    if (swiper.mounted) return true;\n\n    // Find el\n    let el = element || swiper.params.el;\n    if (typeof el === 'string') {\n      el = document.querySelector(el);\n    }\n    if (!el) {\n      return false;\n    }\n    el.swiper = swiper;\n    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n      swiper.isElement = true;\n    }\n    const getWrapperSelector = () => {\n      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n    };\n    const getWrapper = () => {\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        const res = el.shadowRoot.querySelector(getWrapperSelector());\n        // Children needs to return slot items\n        return res;\n      }\n      return elementChildren(el, getWrapperSelector())[0];\n    };\n    // Find Wrapper\n    let wrapperEl = getWrapper();\n    if (!wrapperEl && swiper.params.createElements) {\n      wrapperEl = createElement('div', swiper.params.wrapperClass);\n      el.append(wrapperEl);\n      elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n        wrapperEl.append(slideEl);\n      });\n    }\n    Object.assign(swiper, {\n      el,\n      wrapperEl,\n      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n      hostEl: swiper.isElement ? el.parentNode.host : el,\n      mounted: true,\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n      wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n    });\n    return true;\n  }\n  init(el) {\n    const swiper = this;\n    if (swiper.initialized) return swiper;\n    const mounted = swiper.mount(el);\n    if (mounted === false) return swiper;\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor && swiper.enabled) {\n      swiper.setGrabCursor();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n    }\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Attach events\n    swiper.attachEvents();\n    const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n    if (swiper.isElement) {\n      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n    }\n    lazyElements.forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      } else {\n        imageEl.addEventListener('load', e => {\n          processLazyPreloader(swiper, e.target);\n        });\n      }\n    });\n    preload(swiper);\n\n    // Init Flag\n    swiper.initialized = true;\n    preload(swiper);\n\n    // Emit\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  }\n  destroy(deleteInstance, cleanStyles) {\n    if (deleteInstance === void 0) {\n      deleteInstance = true;\n    }\n    if (cleanStyles === void 0) {\n      cleanStyles = true;\n    }\n    const swiper = this;\n    const {\n      params,\n      el,\n      wrapperEl,\n      slides\n    } = swiper;\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      if (el && typeof el !== 'string') {\n        el.removeAttribute('style');\n      }\n      if (wrapperEl) {\n        wrapperEl.removeAttribute('style');\n      }\n      if (slides && slides.length) {\n        slides.forEach(slideEl => {\n          slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n          slideEl.removeAttribute('style');\n          slideEl.removeAttribute('data-swiper-slide-index');\n        });\n      }\n    }\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach(eventName => {\n      swiper.off(eventName);\n    });\n    if (deleteInstance !== false) {\n      if (swiper.el && typeof swiper.el !== 'string') {\n        swiper.el.swiper = null;\n      }\n      deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n    return null;\n  }\n  static extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  }\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n  static get defaults() {\n    return defaults;\n  }\n  static installModule(mod) {\n    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n    const modules = Swiper.prototype.__modules__;\n    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n      modules.push(mod);\n    }\n  }\n  static use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(m => Swiper.installModule(m));\n      return Swiper;\n    }\n    Swiper.installModule(module);\n    return Swiper;\n  }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n  });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { s as setCSSProperty, e as elementChildren, c as createElement } from '../shared/utils.mjs';\n\nfunction Virtual(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  extendParams({\n    virtual: {\n      enabled: false,\n      slides: [],\n      cache: true,\n      renderSlide: null,\n      renderExternal: null,\n      renderExternalUpdate: true,\n      addSlidesBefore: 0,\n      addSlidesAfter: 0\n    }\n  });\n  let cssModeTimeout;\n  const document = getDocument();\n  swiper.virtual = {\n    cache: {},\n    from: undefined,\n    to: undefined,\n    slides: [],\n    offset: 0,\n    slidesGrid: []\n  };\n  const tempDOM = document.createElement('div');\n  function renderSlide(slide, index) {\n    const params = swiper.params.virtual;\n    if (params.cache && swiper.virtual.cache[index]) {\n      return swiper.virtual.cache[index];\n    }\n    // eslint-disable-next-line\n    let slideEl;\n    if (params.renderSlide) {\n      slideEl = params.renderSlide.call(swiper, slide, index);\n      if (typeof slideEl === 'string') {\n        tempDOM.innerHTML = slideEl;\n        slideEl = tempDOM.children[0];\n      }\n    } else if (swiper.isElement) {\n      slideEl = createElement('swiper-slide');\n    } else {\n      slideEl = createElement('div', swiper.params.slideClass);\n    }\n    slideEl.setAttribute('data-swiper-slide-index', index);\n    if (!params.renderSlide) {\n      slideEl.innerHTML = slide;\n    }\n    if (params.cache) {\n      swiper.virtual.cache[index] = slideEl;\n    }\n    return slideEl;\n  }\n  function update(force, beforeInit) {\n    const {\n      slidesPerView,\n      slidesPerGroup,\n      centeredSlides,\n      loop: isLoop,\n      initialSlide\n    } = swiper.params;\n    if (beforeInit && !isLoop && initialSlide > 0) {\n      return;\n    }\n    const {\n      addSlidesBefore,\n      addSlidesAfter\n    } = swiper.params.virtual;\n    const {\n      from: previousFrom,\n      to: previousTo,\n      slides,\n      slidesGrid: previousSlidesGrid,\n      offset: previousOffset\n    } = swiper.virtual;\n    if (!swiper.params.cssMode) {\n      swiper.updateActiveIndex();\n    }\n    const activeIndex = swiper.activeIndex || 0;\n    let offsetProp;\n    if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n    let slidesAfter;\n    let slidesBefore;\n    if (centeredSlides) {\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n    } else {\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n      slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\n    }\n    let from = activeIndex - slidesBefore;\n    let to = activeIndex + slidesAfter;\n    if (!isLoop) {\n      from = Math.max(from, 0);\n      to = Math.min(to, slides.length - 1);\n    }\n    let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n    if (isLoop && activeIndex >= slidesBefore) {\n      from -= slidesBefore;\n      if (!centeredSlides) offset += swiper.slidesGrid[0];\n    } else if (isLoop && activeIndex < slidesBefore) {\n      from = -slidesBefore;\n      if (centeredSlides) offset += swiper.slidesGrid[0];\n    }\n    Object.assign(swiper.virtual, {\n      from,\n      to,\n      offset,\n      slidesGrid: swiper.slidesGrid,\n      slidesBefore,\n      slidesAfter\n    });\n    function onRendered() {\n      swiper.updateSlides();\n      swiper.updateProgress();\n      swiper.updateSlidesClasses();\n      emit('virtualUpdate');\n    }\n    if (previousFrom === from && previousTo === to && !force) {\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n        swiper.slides.forEach(slideEl => {\n          slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n        });\n      }\n      swiper.updateProgress();\n      emit('virtualUpdate');\n      return;\n    }\n    if (swiper.params.virtual.renderExternal) {\n      swiper.params.virtual.renderExternal.call(swiper, {\n        offset,\n        from,\n        to,\n        slides: function getSlides() {\n          const slidesToRender = [];\n          for (let i = from; i <= to; i += 1) {\n            slidesToRender.push(slides[i]);\n          }\n          return slidesToRender;\n        }()\n      });\n      if (swiper.params.virtual.renderExternalUpdate) {\n        onRendered();\n      } else {\n        emit('virtualUpdate');\n      }\n      return;\n    }\n    const prependIndexes = [];\n    const appendIndexes = [];\n    const getSlideIndex = index => {\n      let slideIndex = index;\n      if (index < 0) {\n        slideIndex = slides.length + index;\n      } else if (slideIndex >= slides.length) {\n        // eslint-disable-next-line\n        slideIndex = slideIndex - slides.length;\n      }\n      return slideIndex;\n    };\n    if (force) {\n      swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach(slideEl => {\n        slideEl.remove();\n      });\n    } else {\n      for (let i = previousFrom; i <= previousTo; i += 1) {\n        if (i < from || i > to) {\n          const slideIndex = getSlideIndex(i);\n          swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`)).forEach(slideEl => {\n            slideEl.remove();\n          });\n        }\n      }\n    }\n    const loopFrom = isLoop ? -slides.length : 0;\n    const loopTo = isLoop ? slides.length * 2 : slides.length;\n    for (let i = loopFrom; i < loopTo; i += 1) {\n      if (i >= from && i <= to) {\n        const slideIndex = getSlideIndex(i);\n        if (typeof previousTo === 'undefined' || force) {\n          appendIndexes.push(slideIndex);\n        } else {\n          if (i > previousTo) appendIndexes.push(slideIndex);\n          if (i < previousFrom) prependIndexes.push(slideIndex);\n        }\n      }\n    }\n    appendIndexes.forEach(index => {\n      swiper.slidesEl.append(renderSlide(slides[index], index));\n    });\n    if (isLoop) {\n      for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\n        const index = prependIndexes[i];\n        swiper.slidesEl.prepend(renderSlide(slides[index], index));\n      }\n    } else {\n      prependIndexes.sort((a, b) => b - a);\n      prependIndexes.forEach(index => {\n        swiper.slidesEl.prepend(renderSlide(slides[index], index));\n      });\n    }\n    elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {\n      slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n    });\n    onRendered();\n  }\n  function appendSlide(slides) {\n    if (typeof slides === 'object' && 'length' in slides) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.push(slides[i]);\n      }\n    } else {\n      swiper.virtual.slides.push(slides);\n    }\n    update(true);\n  }\n  function prependSlide(slides) {\n    const activeIndex = swiper.activeIndex;\n    let newActiveIndex = activeIndex + 1;\n    let numberOfNewSlides = 1;\n    if (Array.isArray(slides)) {\n      for (let i = 0; i < slides.length; i += 1) {\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n      }\n      newActiveIndex = activeIndex + slides.length;\n      numberOfNewSlides = slides.length;\n    } else {\n      swiper.virtual.slides.unshift(slides);\n    }\n    if (swiper.params.virtual.cache) {\n      const cache = swiper.virtual.cache;\n      const newCache = {};\n      Object.keys(cache).forEach(cachedIndex => {\n        const cachedEl = cache[cachedIndex];\n        const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n        if (cachedElIndex) {\n          cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n        }\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n      });\n      swiper.virtual.cache = newCache;\n    }\n    update(true);\n    swiper.slideTo(newActiveIndex, 0);\n  }\n  function removeSlide(slidesIndexes) {\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n    let activeIndex = swiper.activeIndex;\n    if (Array.isArray(slidesIndexes)) {\n      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n        if (swiper.params.virtual.cache) {\n          delete swiper.virtual.cache[slidesIndexes[i]];\n          // shift cache indexes\n          Object.keys(swiper.virtual.cache).forEach(key => {\n            if (key > slidesIndexes) {\n              swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n              swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n              delete swiper.virtual.cache[key];\n            }\n          });\n        }\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n        activeIndex = Math.max(activeIndex, 0);\n      }\n    } else {\n      if (swiper.params.virtual.cache) {\n        delete swiper.virtual.cache[slidesIndexes];\n        // shift cache indexes\n        Object.keys(swiper.virtual.cache).forEach(key => {\n          if (key > slidesIndexes) {\n            swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n            swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n            delete swiper.virtual.cache[key];\n          }\n        });\n      }\n      swiper.virtual.slides.splice(slidesIndexes, 1);\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\n      activeIndex = Math.max(activeIndex, 0);\n    }\n    update(true);\n    swiper.slideTo(activeIndex, 0);\n  }\n  function removeAllSlides() {\n    swiper.virtual.slides = [];\n    if (swiper.params.virtual.cache) {\n      swiper.virtual.cache = {};\n    }\n    update(true);\n    swiper.slideTo(0, 0);\n  }\n  on('beforeInit', () => {\n    if (!swiper.params.virtual.enabled) return;\n    let domSlidesAssigned;\n    if (typeof swiper.passedParams.virtual.slides === 'undefined') {\n      const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n      if (slides && slides.length) {\n        swiper.virtual.slides = [...slides];\n        domSlidesAssigned = true;\n        slides.forEach((slideEl, slideIndex) => {\n          slideEl.setAttribute('data-swiper-slide-index', slideIndex);\n          swiper.virtual.cache[slideIndex] = slideEl;\n          slideEl.remove();\n        });\n      }\n    }\n    if (!domSlidesAssigned) {\n      swiper.virtual.slides = swiper.params.virtual.slides;\n    }\n    swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n    swiper.params.watchSlidesProgress = true;\n    swiper.originalParams.watchSlidesProgress = true;\n    update(false, true);\n  });\n  on('setTranslate', () => {\n    if (!swiper.params.virtual.enabled) return;\n    if (swiper.params.cssMode && !swiper._immediateVirtual) {\n      clearTimeout(cssModeTimeout);\n      cssModeTimeout = setTimeout(() => {\n        update();\n      }, 100);\n    } else {\n      update();\n    }\n  });\n  on('init update resize', () => {\n    if (!swiper.params.virtual.enabled) return;\n    if (swiper.params.cssMode) {\n      setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n    }\n  });\n  Object.assign(swiper.virtual, {\n    appendSlide,\n    prependSlide,\n    removeSlide,\n    removeAllSlides,\n    update\n  });\n}\n\nexport { Virtual as default };\n", "import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { a as elementParents, b as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const document = getDocument();\n  const window = getWindow();\n  swiper.keyboard = {\n    enabled: false\n  };\n  extendParams({\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n      pageUpDown: true\n    }\n  });\n  function handle(event) {\n    if (!swiper.enabled) return;\n    const {\n      rtlTranslate: rtl\n    } = swiper;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    const pageUpDown = swiper.params.keyboard.pageUpDown;\n    const isPageUp = pageUpDown && kc === 33;\n    const isPageDown = pageUpDown && kc === 34;\n    const isArrowLeft = kc === 37;\n    const isArrowRight = kc === 39;\n    const isArrowUp = kc === 38;\n    const isArrowDown = kc === 40;\n    // Directions locks\n    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const el = swiper.el;\n      const swiperWidth = el.clientWidth;\n      const swiperHeight = el.clientHeight;\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = elementOffset(el);\n      if (rtl) swiperOffset.left -= el.scrollLeft;\n      const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n          if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n    } else {\n      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n      if (isPageDown || isArrowDown) swiper.slideNext();\n      if (isPageUp || isArrowUp) swiper.slidePrev();\n    }\n    emit('keyPress', kc);\n    return undefined;\n  }\n  function enable() {\n    if (swiper.keyboard.enabled) return;\n    document.addEventListener('keydown', handle);\n    swiper.keyboard.enabled = true;\n  }\n  function disable() {\n    if (!swiper.keyboard.enabled) return;\n    document.removeEventListener('keydown', handle);\n    swiper.keyboard.enabled = false;\n  }\n  on('init', () => {\n    if (swiper.params.keyboard.enabled) {\n      enable();\n    }\n  });\n  on('destroy', () => {\n    if (swiper.keyboard.enabled) {\n      disable();\n    }\n  });\n  Object.assign(swiper.keyboard, {\n    enable,\n    disable\n  });\n}\n\nexport { Keyboard as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, d as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const window = getWindow();\n  extendParams({\n    mousewheel: {\n      enabled: false,\n      releaseOnEdges: false,\n      invert: false,\n      forceToAxis: false,\n      sensitivity: 1,\n      eventsTarget: 'container',\n      thresholdDelta: null,\n      thresholdTime: null,\n      noMousewheelClass: 'swiper-no-mousewheel'\n    }\n  });\n  swiper.mousewheel = {\n    enabled: false\n  };\n  let timeout;\n  let lastScrollTime = now();\n  let lastEventBeforeSnap;\n  const recentWheelEvents = [];\n  function normalize(e) {\n    // Reasonable defaults\n    const PIXEL_STEP = 10;\n    const LINE_HEIGHT = 40;\n    const PAGE_HEIGHT = 800;\n    let sX = 0;\n    let sY = 0; // spinX, spinY\n    let pX = 0;\n    let pY = 0; // pixelX, pixelY\n\n    // Legacy\n    if ('detail' in e) {\n      sY = e.detail;\n    }\n    if ('wheelDelta' in e) {\n      sY = -e.wheelDelta / 120;\n    }\n    if ('wheelDeltaY' in e) {\n      sY = -e.wheelDeltaY / 120;\n    }\n    if ('wheelDeltaX' in e) {\n      sX = -e.wheelDeltaX / 120;\n    }\n\n    // side scrolling on FF with DOMMouseScroll\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n      sX = sY;\n      sY = 0;\n    }\n    pX = sX * PIXEL_STEP;\n    pY = sY * PIXEL_STEP;\n    if ('deltaY' in e) {\n      pY = e.deltaY;\n    }\n    if ('deltaX' in e) {\n      pX = e.deltaX;\n    }\n    if (e.shiftKey && !pX) {\n      // if user scrolls with shift he wants horizontal scroll\n      pX = pY;\n      pY = 0;\n    }\n    if ((pX || pY) && e.deltaMode) {\n      if (e.deltaMode === 1) {\n        // delta in LINE units\n        pX *= LINE_HEIGHT;\n        pY *= LINE_HEIGHT;\n      } else {\n        // delta in PAGE units\n        pX *= PAGE_HEIGHT;\n        pY *= PAGE_HEIGHT;\n      }\n    }\n\n    // Fall-back if spin cannot be determined\n    if (pX && !sX) {\n      sX = pX < 1 ? -1 : 1;\n    }\n    if (pY && !sY) {\n      sY = pY < 1 ? -1 : 1;\n    }\n    return {\n      spinX: sX,\n      spinY: sY,\n      pixelX: pX,\n      pixelY: pY\n    };\n  }\n  function handleMouseEnter() {\n    if (!swiper.enabled) return;\n    swiper.mouseEntered = true;\n  }\n  function handleMouseLeave() {\n    if (!swiper.enabled) return;\n    swiper.mouseEntered = false;\n  }\n  function animateSlider(newEvent) {\n    if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n      // Prevent if delta of wheel scroll delta is below configured threshold\n      return false;\n    }\n    if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n      // Prevent if time between scrolls is below configured threshold\n      return false;\n    }\n\n    // If the movement is NOT big enough and\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n    //   Don't go any further (avoid insignificant scroll movement).\n    if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n      // Return false as a default\n      return true;\n    }\n    // If user is scrolling towards the end:\n    //   If the slider hasn't hit the latest slide or\n    //   if the slider is a loop and\n    //   if the slider isn't moving right now:\n    //     Go to next slide and\n    //     emit a scroll event.\n    // Else (the user is scrolling towards the beginning) and\n    // if the slider hasn't hit the first slide or\n    // if the slider is a loop and\n    // if the slider isn't moving right now:\n    //   Go to prev slide and\n    //   emit a scroll event.\n    if (newEvent.direction < 0) {\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n        swiper.slideNext();\n        emit('scroll', newEvent.raw);\n      }\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n      swiper.slidePrev();\n      emit('scroll', newEvent.raw);\n    }\n    // If you got here is because an animation has been triggered so store the current time\n    lastScrollTime = new window.Date().getTime();\n    // Return false as a default\n    return false;\n  }\n  function releaseScroll(newEvent) {\n    const params = swiper.params.mousewheel;\n    if (newEvent.direction < 0) {\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n        // Return true to animate scroll on edges\n        return true;\n      }\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n      // Return true to animate scroll on edges\n      return true;\n    }\n    return false;\n  }\n  function handle(event) {\n    let e = event;\n    let disableParentSwiper = true;\n    if (!swiper.enabled) return;\n\n    // Ignore event if the target or its parents have the swiper-no-mousewheel class\n    if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n    const params = swiper.params.mousewheel;\n    if (swiper.params.cssMode) {\n      e.preventDefault();\n    }\n    let targetEl = swiper.el;\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\n      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n    }\n    const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n    if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    let delta = 0;\n    const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n    const data = normalize(e);\n    if (params.forceToAxis) {\n      if (swiper.isHorizontal()) {\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n    } else {\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n    }\n    if (delta === 0) return true;\n    if (params.invert) delta = -delta;\n\n    // Get the scroll positions\n    let positions = swiper.getTranslate() + delta * params.sensitivity;\n    if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n    if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n    // When loop is true:\n    //     the disableParentSwiper will be true.\n    // When loop is false:\n    //     if the scroll positions is not on edge,\n    //     then the disableParentSwiper will be true.\n    //     if the scroll on edge positions,\n    //     then the disableParentSwiper will be false.\n    disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n    if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n    if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n      // Register the new event in a variable which stores the relevant data\n      const newEvent = {\n        time: now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta),\n        raw: event\n      };\n\n      // Keep the most recent events\n      if (recentWheelEvents.length >= 2) {\n        recentWheelEvents.shift(); // only store the last N events\n      }\n\n      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n      recentWheelEvents.push(newEvent);\n\n      // If there is at least one previous recorded event:\n      //   If direction has changed or\n      //   if the scroll is quicker than the previous one:\n      //     Animate the slider.\n      // Else (this is the first time the wheel is moved):\n      //     Animate the slider.\n      if (prevEvent) {\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n          animateSlider(newEvent);\n        }\n      } else {\n        animateSlider(newEvent);\n      }\n\n      // If it's time to release the scroll:\n      //   Return now so you don't hit the preventDefault.\n      if (releaseScroll(newEvent)) {\n        return true;\n      }\n    } else {\n      // Freemode or scrollContainer:\n\n      // If we recently snapped after a momentum scroll, then ignore wheel events\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n      // or if it's a new scroll (larger delta or inverse sign as last event before\n      // an end-of-momentum snap).\n      const newEvent = {\n        time: now(),\n        delta: Math.abs(delta),\n        direction: Math.sign(delta)\n      };\n      const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n      if (!ignoreWheelEvents) {\n        lastEventBeforeSnap = undefined;\n        let position = swiper.getTranslate() + delta * params.sensitivity;\n        const wasBeginning = swiper.isBeginning;\n        const wasEnd = swiper.isEnd;\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n        swiper.setTransition(0);\n        swiper.setTranslate(position);\n        swiper.updateProgress();\n        swiper.updateActiveIndex();\n        swiper.updateSlidesClasses();\n        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n          swiper.updateSlidesClasses();\n        }\n        if (swiper.params.loop) {\n          swiper.loopFix({\n            direction: newEvent.direction < 0 ? 'next' : 'prev',\n            byMousewheel: true\n          });\n        }\n        if (swiper.params.freeMode.sticky) {\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\n          // 1. do all N events have decreasing or same (absolute value) delta?\n          // 2. did all N events arrive in the last M (M=500?) msecs?\n          // 3. does the earliest event have an (absolute value) delta that's\n          //    at least P (P=1?) larger than the most recent event's delta?\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n          // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n          // Snap immediately and ignore remaining wheel events in this scroll.\n          // See comment above for \"remaining wheel events in this scroll\" determination.\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n          clearTimeout(timeout);\n          timeout = undefined;\n          if (recentWheelEvents.length >= 15) {\n            recentWheelEvents.shift(); // only store the last N events\n          }\n\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n          const firstEvent = recentWheelEvents[0];\n          recentWheelEvents.push(newEvent);\n          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n            recentWheelEvents.splice(0);\n          } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\n            // to wait for more events. Snap ASAP on the next tick.\n            // Also, because there's some remaining momentum we'll bias the snap in the\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\n            // if it's already scrolled more than 20% in the current direction, keep going.\n            const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n            lastEventBeforeSnap = newEvent;\n            recentWheelEvents.splice(0);\n            timeout = nextTick(() => {\n              if (swiper.destroyed || !swiper.params) return;\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 0); // no delay; move on next tick\n          }\n\n          if (!timeout) {\n            // if we get here, then we haven't detected the end of a momentum scroll, so\n            // we'll consider a scroll \"complete\" when there haven't been any wheel events\n            // for 500ms.\n            timeout = nextTick(() => {\n              if (swiper.destroyed || !swiper.params) return;\n              const snapToThreshold = 0.5;\n              lastEventBeforeSnap = newEvent;\n              recentWheelEvents.splice(0);\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n            }, 500);\n          }\n        }\n\n        // Emit event\n        if (!ignoreWheelEvents) emit('scroll', e);\n\n        // Stop autoplay\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n        // Return page scroll on edge positions\n        if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n          return true;\n        }\n      }\n    }\n    if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n    return false;\n  }\n  function events(method) {\n    let targetEl = swiper.el;\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\n      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n    }\n    targetEl[method]('mouseenter', handleMouseEnter);\n    targetEl[method]('mouseleave', handleMouseLeave);\n    targetEl[method]('wheel', handle);\n  }\n  function enable() {\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.removeEventListener('wheel', handle);\n      return true;\n    }\n    if (swiper.mousewheel.enabled) return false;\n    events('addEventListener');\n    swiper.mousewheel.enabled = true;\n    return true;\n  }\n  function disable() {\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.addEventListener(event, handle);\n      return true;\n    }\n    if (!swiper.mousewheel.enabled) return false;\n    events('removeEventListener');\n    swiper.mousewheel.enabled = false;\n    return true;\n  }\n  on('init', () => {\n    if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n      disable();\n    }\n    if (swiper.params.mousewheel.enabled) enable();\n  });\n  on('destroy', () => {\n    if (swiper.params.cssMode) {\n      enable();\n    }\n    if (swiper.mousewheel.enabled) disable();\n  });\n  Object.assign(swiper.mousewheel, {\n    enable,\n    disable\n  });\n}\n\nexport { Mousewheel as default };\n", "import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n  if (swiper.params.createElements) {\n    Object.keys(checkProps).forEach(key => {\n      if (!params[key] && params.auto === true) {\n        let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n        if (!element) {\n          element = createElement('div', checkProps[key]);\n          element.className = checkProps[key];\n          swiper.el.append(element);\n        }\n        params[key] = element;\n        originalParams[key] = element;\n      }\n    });\n  }\n  return params;\n}\n\nexport { createElementIfNotDefined as c };\n", "import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  extendParams({\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n      navigationDisabledClass: 'swiper-navigation-disabled'\n    }\n  });\n  swiper.navigation = {\n    nextEl: null,\n    prevEl: null\n  };\n  function getEl(el) {\n    let res;\n    if (el && typeof el === 'string' && swiper.isElement) {\n      res = swiper.el.querySelector(el) || swiper.hostEl.querySelector(el);\n      if (res) return res;\n    }\n    if (el) {\n      if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n      if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n        res = swiper.el.querySelector(el);\n      } else if (res && res.length === 1) {\n        res = res[0];\n      }\n    }\n    if (el && !res) return el;\n    // if (Array.isArray(res) && res.length === 1) res = res[0];\n    return res;\n  }\n  function toggleEl(el, disabled) {\n    const params = swiper.params.navigation;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (subEl) {\n        subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n        if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n        }\n      }\n    });\n  }\n  function update() {\n    // Update Navigation Buttons\n    const {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    if (swiper.params.loop) {\n      toggleEl(prevEl, false);\n      toggleEl(nextEl, false);\n      return;\n    }\n    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n  }\n  function onPrevClick(e) {\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slidePrev();\n    emit('navigationPrev');\n  }\n  function onNextClick(e) {\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slideNext();\n    emit('navigationNext');\n  }\n  function init() {\n    const params = swiper.params.navigation;\n    swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n      nextEl: 'swiper-button-next',\n      prevEl: 'swiper-button-prev'\n    });\n    if (!(params.nextEl || params.prevEl)) return;\n    let nextEl = getEl(params.nextEl);\n    let prevEl = getEl(params.prevEl);\n    Object.assign(swiper.navigation, {\n      nextEl,\n      prevEl\n    });\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const initButton = (el, dir) => {\n      if (el) {\n        el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      }\n      if (!swiper.enabled && el) {\n        el.classList.add(...params.lockClass.split(' '));\n      }\n    };\n    nextEl.forEach(el => initButton(el, 'next'));\n    prevEl.forEach(el => initButton(el, 'prev'));\n  }\n  function destroy() {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const destroyButton = (el, dir) => {\n      el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n    };\n    nextEl.forEach(el => destroyButton(el, 'next'));\n    prevEl.forEach(el => destroyButton(el, 'prev'));\n  }\n  on('init', () => {\n    if (swiper.params.navigation.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      update();\n    }\n  });\n  on('toEdge fromEdge lock unlock', () => {\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (swiper.enabled) {\n      update();\n      return;\n    }\n    [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n  });\n  on('click', (_s, e) => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const targetEl = e.target;\n    let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n    if (swiper.isElement && !targetIsButton) {\n      const path = e.path || e.composedPath && e.composedPath();\n      if (path) {\n        targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n      }\n    }\n    if (swiper.params.navigation.hideOnClick && !targetIsButton) {\n      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n      let isHidden;\n      if (nextEl.length) {\n        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      } else if (prevEl.length) {\n        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      }\n      if (isHidden === true) {\n        emit('navigationShow');\n      } else {\n        emit('navigationHide');\n      }\n      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    init();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    destroy();\n  };\n  Object.assign(swiper.navigation, {\n    enable,\n    disable,\n    update,\n    init,\n    destroy\n  });\n}\n\nexport { Navigation as default };\n", "function classesToSelector(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n", "import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const pfx = 'swiper-pagination';\n  extendParams({\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets',\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: number => number,\n      formatFractionTotal: number => number,\n      bulletClass: `${pfx}-bullet`,\n      bulletActiveClass: `${pfx}-bullet-active`,\n      modifierClass: `${pfx}-`,\n      currentClass: `${pfx}-current`,\n      totalClass: `${pfx}-total`,\n      hiddenClass: `${pfx}-hidden`,\n      progressbarFillClass: `${pfx}-progressbar-fill`,\n      progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n      clickableClass: `${pfx}-clickable`,\n      lockClass: `${pfx}-lock`,\n      horizontalClass: `${pfx}-horizontal`,\n      verticalClass: `${pfx}-vertical`,\n      paginationDisabledClass: `${pfx}-disabled`\n    }\n  });\n  swiper.pagination = {\n    el: null,\n    bullets: []\n  };\n  let bulletSize;\n  let dynamicBulletIndex = 0;\n  function isPaginationDisabled() {\n    return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n  }\n  function setSideBullets(bulletEl, position) {\n    const {\n      bulletActiveClass\n    } = swiper.params.pagination;\n    if (!bulletEl) return;\n    bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n    if (bulletEl) {\n      bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n      bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n      if (bulletEl) {\n        bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n      }\n    }\n  }\n  function getMoveDirection(prevIndex, nextIndex, length) {\n    prevIndex = prevIndex % length;\n    nextIndex = nextIndex % length;\n    if (nextIndex === prevIndex + 1) {\n      return 'next';\n    } else if (nextIndex === prevIndex - 1) {\n      return 'previous';\n    }\n    return;\n  }\n  function onBulletClick(e) {\n    const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n    if (!bulletEl) {\n      return;\n    }\n    e.preventDefault();\n    const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n    if (swiper.params.loop) {\n      if (swiper.realIndex === index) return;\n      const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n      if (moveDirection === 'next') {\n        swiper.slideNext();\n      } else if (moveDirection === 'previous') {\n        swiper.slidePrev();\n      } else {\n        swiper.slideToLoop(index);\n      }\n    } else {\n      swiper.slideTo(index);\n    }\n  }\n  function update() {\n    // Render || Update Pagination bullets/items\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    // Current/Total\n    let current;\n    let previousIndex;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      previousIndex = swiper.previousRealIndex || 0;\n      current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n      previousIndex = swiper.previousSnapIndex;\n    } else {\n      previousIndex = swiper.previousIndex || 0;\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n        el.forEach(subEl => {\n          subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n        });\n        if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n          dynamicBulletIndex += current - (previousIndex || 0);\n          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n            dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (dynamicBulletIndex < 0) {\n            dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = Math.max(current - dynamicBulletIndex, 0);\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.forEach(bulletEl => {\n        const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n        bulletEl.classList.remove(...classesToRemove);\n      });\n      if (el.length > 1) {\n        bullets.forEach(bullet => {\n          const bulletIndex = elementIndex(bullet);\n          if (bulletIndex === current) {\n            bullet.classList.add(...params.bulletActiveClass.split(' '));\n          } else if (swiper.isElement) {\n            bullet.setAttribute('part', 'bullet');\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n            if (bulletIndex === firstIndex) {\n              setSideBullets(bullet, 'prev');\n            }\n            if (bulletIndex === lastIndex) {\n              setSideBullets(bullet, 'next');\n            }\n          }\n        });\n      } else {\n        const bullet = bullets[current];\n        if (bullet) {\n          bullet.classList.add(...params.bulletActiveClass.split(' '));\n        }\n        if (swiper.isElement) {\n          bullets.forEach((bulletEl, bulletIndex) => {\n            bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n          });\n        }\n        if (params.dynamicBullets) {\n          const firstDisplayedBullet = bullets[firstIndex];\n          const lastDisplayedBullet = bullets[lastIndex];\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            if (bullets[i]) {\n              bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n          }\n          setSideBullets(firstDisplayedBullet, 'prev');\n          setSideBullets(lastDisplayedBullet, 'next');\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.forEach(bullet => {\n          bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n        });\n      }\n    }\n    el.forEach((subEl, subElIndex) => {\n      if (params.type === 'fraction') {\n        subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n          fractionEl.textContent = params.formatFractionCurrent(current + 1);\n        });\n        subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n          totalEl.textContent = params.formatFractionTotal(total);\n        });\n      }\n      if (params.type === 'progressbar') {\n        let progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        const scale = (current + 1) / total;\n        let scaleX = 1;\n        let scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n          progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n          progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n        });\n      }\n      if (params.type === 'custom' && params.renderCustom) {\n        subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n        if (subElIndex === 0) emit('paginationRender', subEl);\n      } else {\n        if (subElIndex === 0) emit('paginationRender', subEl);\n        emit('paginationUpdate', subEl);\n      }\n      if (swiper.params.watchOverflow && swiper.enabled) {\n        subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n      }\n    });\n  }\n  function render() {\n    // Render Container\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n        numberOfBullets = slidesLength;\n      }\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          // prettier-ignore\n          paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n      }\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n    }\n    swiper.pagination.bullets = [];\n    el.forEach(subEl => {\n      if (params.type !== 'custom') {\n        subEl.innerHTML = paginationHTML || '';\n      }\n      if (params.type === 'bullets') {\n        swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n      }\n    });\n    if (params.type !== 'custom') {\n      emit('paginationRender', el[0]);\n    }\n  }\n  function init() {\n    swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n      el: 'swiper-pagination'\n    });\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n    let el;\n    if (typeof params.el === 'string' && swiper.isElement) {\n      el = swiper.el.querySelector(params.el);\n    }\n    if (!el && typeof params.el === 'string') {\n      el = [...document.querySelectorAll(params.el)];\n    }\n    if (!el) {\n      el = params.el;\n    }\n    if (!el || el.length === 0) return;\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n      el = [...swiper.el.querySelectorAll(params.el)];\n      // check if it belongs to another nested Swiper\n      if (el.length > 1) {\n        el = el.filter(subEl => {\n          if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n          return true;\n        })[0];\n      }\n    }\n    if (Array.isArray(el) && el.length === 1) el = el[0];\n    Object.assign(swiper.pagination, {\n      el\n    });\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (params.type === 'bullets' && params.clickable) {\n        subEl.classList.add(...(params.clickableClass || '').split(' '));\n      }\n      subEl.classList.add(params.modifierClass + params.type);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n        dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        subEl.classList.add(params.progressbarOppositeClass);\n      }\n      if (params.clickable) {\n        subEl.addEventListener('click', onBulletClick);\n      }\n      if (!swiper.enabled) {\n        subEl.classList.add(params.lockClass);\n      }\n    });\n  }\n  function destroy() {\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => {\n        subEl.classList.remove(params.hiddenClass);\n        subEl.classList.remove(params.modifierClass + params.type);\n        subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        if (params.clickable) {\n          subEl.classList.remove(...(params.clickableClass || '').split(' '));\n          subEl.removeEventListener('click', onBulletClick);\n        }\n      });\n    }\n    if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n  }\n  on('changeDirection', () => {\n    if (!swiper.pagination || !swiper.pagination.el) return;\n    const params = swiper.params.pagination;\n    let {\n      el\n    } = swiper.pagination;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.classList.remove(params.horizontalClass, params.verticalClass);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    });\n  });\n  on('init', () => {\n    if (swiper.params.pagination.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      render();\n      update();\n    }\n  });\n  on('activeIndexChange', () => {\n    if (typeof swiper.snapIndex === 'undefined') {\n      update();\n    }\n  });\n  on('snapIndexChange', () => {\n    update();\n  });\n  on('snapGridLengthChange', () => {\n    render();\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n    }\n  });\n  on('lock unlock', () => {\n    update();\n  });\n  on('click', (_s, e) => {\n    const targetEl = e.target;\n    const el = makeElementsArray(swiper.pagination.el);\n    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n      const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n      if (isHidden === true) {\n        emit('paginationShow');\n      } else {\n        emit('paginationHide');\n      }\n      el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n    }\n    init();\n    render();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n    }\n    destroy();\n  };\n  Object.assign(swiper.pagination, {\n    enable,\n    disable,\n    render,\n    update,\n    init,\n    destroy\n  });\n}\n\nexport { Pagination as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, i as classesToTokens, c as createElement, n as nextTick, b as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\n\nfunction Scrollbar(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const document = getDocument();\n  let isTouched = false;\n  let timeout = null;\n  let dragTimeout = null;\n  let dragStartPos;\n  let dragSize;\n  let trackSize;\n  let divider;\n  extendParams({\n    scrollbar: {\n      el: null,\n      dragSize: 'auto',\n      hide: false,\n      draggable: false,\n      snapOnRelease: true,\n      lockClass: 'swiper-scrollbar-lock',\n      dragClass: 'swiper-scrollbar-drag',\n      scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n      horizontalClass: `swiper-scrollbar-horizontal`,\n      verticalClass: `swiper-scrollbar-vertical`\n    }\n  });\n  swiper.scrollbar = {\n    el: null,\n    dragEl: null\n  };\n  function setTranslate() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const {\n      scrollbar,\n      rtlTranslate: rtl\n    } = swiper;\n    const {\n      dragEl,\n      el\n    } = scrollbar;\n    const params = swiper.params.scrollbar;\n    const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n    let newSize = dragSize;\n    let newPos = (trackSize - dragSize) * progress;\n    if (rtl) {\n      newPos = -newPos;\n      if (newPos > 0) {\n        newSize = dragSize - newPos;\n        newPos = 0;\n      } else if (-newPos + dragSize > trackSize) {\n        newSize = trackSize + newPos;\n      }\n    } else if (newPos < 0) {\n      newSize = dragSize + newPos;\n      newPos = 0;\n    } else if (newPos + dragSize > trackSize) {\n      newSize = trackSize - newPos;\n    }\n    if (swiper.isHorizontal()) {\n      dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n      dragEl.style.width = `${newSize}px`;\n    } else {\n      dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n      dragEl.style.height = `${newSize}px`;\n    }\n    if (params.hide) {\n      clearTimeout(timeout);\n      el.style.opacity = 1;\n      timeout = setTimeout(() => {\n        el.style.opacity = 0;\n        el.style.transitionDuration = '400ms';\n      }, 1000);\n    }\n  }\n  function setTransition(duration) {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n  }\n  function updateSize() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    const {\n      scrollbar\n    } = swiper;\n    const {\n      dragEl,\n      el\n    } = scrollbar;\n    dragEl.style.width = '';\n    dragEl.style.height = '';\n    trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n    divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n    if (swiper.params.scrollbar.dragSize === 'auto') {\n      dragSize = trackSize * divider;\n    } else {\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n    }\n    if (swiper.isHorizontal()) {\n      dragEl.style.width = `${dragSize}px`;\n    } else {\n      dragEl.style.height = `${dragSize}px`;\n    }\n    if (divider >= 1) {\n      el.style.display = 'none';\n    } else {\n      el.style.display = '';\n    }\n    if (swiper.params.scrollbar.hide) {\n      el.style.opacity = 0;\n    }\n    if (swiper.params.watchOverflow && swiper.enabled) {\n      scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n    }\n  }\n  function getPointerPosition(e) {\n    return swiper.isHorizontal() ? e.clientX : e.clientY;\n  }\n  function setDragPosition(e) {\n    const {\n      scrollbar,\n      rtlTranslate: rtl\n    } = swiper;\n    const {\n      el\n    } = scrollbar;\n    let positionRatio;\n    positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n    if (rtl) {\n      positionRatio = 1 - positionRatio;\n    }\n    const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n    swiper.updateProgress(position);\n    swiper.setTranslate(position);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  function onDragStart(e) {\n    const params = swiper.params.scrollbar;\n    const {\n      scrollbar,\n      wrapperEl\n    } = swiper;\n    const {\n      el,\n      dragEl\n    } = scrollbar;\n    isTouched = true;\n    dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n    e.preventDefault();\n    e.stopPropagation();\n    wrapperEl.style.transitionDuration = '100ms';\n    dragEl.style.transitionDuration = '100ms';\n    setDragPosition(e);\n    clearTimeout(dragTimeout);\n    el.style.transitionDuration = '0ms';\n    if (params.hide) {\n      el.style.opacity = 1;\n    }\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n    }\n    emit('scrollbarDragStart', e);\n  }\n  function onDragMove(e) {\n    const {\n      scrollbar,\n      wrapperEl\n    } = swiper;\n    const {\n      el,\n      dragEl\n    } = scrollbar;\n    if (!isTouched) return;\n    if (e.preventDefault && e.cancelable) e.preventDefault();else e.returnValue = false;\n    setDragPosition(e);\n    wrapperEl.style.transitionDuration = '0ms';\n    el.style.transitionDuration = '0ms';\n    dragEl.style.transitionDuration = '0ms';\n    emit('scrollbarDragMove', e);\n  }\n  function onDragEnd(e) {\n    const params = swiper.params.scrollbar;\n    const {\n      scrollbar,\n      wrapperEl\n    } = swiper;\n    const {\n      el\n    } = scrollbar;\n    if (!isTouched) return;\n    isTouched = false;\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style['scroll-snap-type'] = '';\n      wrapperEl.style.transitionDuration = '';\n    }\n    if (params.hide) {\n      clearTimeout(dragTimeout);\n      dragTimeout = nextTick(() => {\n        el.style.opacity = 0;\n        el.style.transitionDuration = '400ms';\n      }, 1000);\n    }\n    emit('scrollbarDragEnd', e);\n    if (params.snapOnRelease) {\n      swiper.slideToClosest();\n    }\n  }\n  function events(method) {\n    const {\n      scrollbar,\n      params\n    } = swiper;\n    const el = scrollbar.el;\n    if (!el) return;\n    const target = el;\n    const activeListener = params.passiveListeners ? {\n      passive: false,\n      capture: false\n    } : false;\n    const passiveListener = params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    if (!target) return;\n    const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n    target[eventMethod]('pointerdown', onDragStart, activeListener);\n    document[eventMethod]('pointermove', onDragMove, activeListener);\n    document[eventMethod]('pointerup', onDragEnd, passiveListener);\n  }\n  function enableDraggable() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    events('on');\n  }\n  function disableDraggable() {\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n    events('off');\n  }\n  function init() {\n    const {\n      scrollbar,\n      el: swiperEl\n    } = swiper;\n    swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n      el: 'swiper-scrollbar'\n    });\n    const params = swiper.params.scrollbar;\n    if (!params.el) return;\n    let el;\n    if (typeof params.el === 'string' && swiper.isElement) {\n      el = swiper.el.querySelector(params.el);\n    }\n    if (!el && typeof params.el === 'string') {\n      el = document.querySelectorAll(params.el);\n      if (!el.length) return;\n    } else if (!el) {\n      el = params.el;\n    }\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n      el = swiperEl.querySelector(params.el);\n    }\n    if (el.length > 0) el = el[0];\n    el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    let dragEl;\n    if (el) {\n      dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass));\n      if (!dragEl) {\n        dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n        el.append(dragEl);\n      }\n    }\n    Object.assign(scrollbar, {\n      el,\n      dragEl\n    });\n    if (params.draggable) {\n      enableDraggable();\n    }\n    if (el) {\n      el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n    }\n  }\n  function destroy() {\n    const params = swiper.params.scrollbar;\n    const el = swiper.scrollbar.el;\n    if (el) {\n      el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n    }\n    disableDraggable();\n  }\n  on('changeDirection', () => {\n    if (!swiper.scrollbar || !swiper.scrollbar.el) return;\n    const params = swiper.params.scrollbar;\n    let {\n      el\n    } = swiper.scrollbar;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.classList.remove(params.horizontalClass, params.verticalClass);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    });\n  });\n  on('init', () => {\n    if (swiper.params.scrollbar.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      updateSize();\n      setTranslate();\n    }\n  });\n  on('update resize observerUpdate lock unlock changeDirection', () => {\n    updateSize();\n  });\n  on('setTranslate', () => {\n    setTranslate();\n  });\n  on('setTransition', (_s, duration) => {\n    setTransition(duration);\n  });\n  on('enable disable', () => {\n    const {\n      el\n    } = swiper.scrollbar;\n    if (el) {\n      el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n    }\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  const enable = () => {\n    swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    if (swiper.scrollbar.el) {\n      swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    }\n    init();\n    updateSize();\n    setTranslate();\n  };\n  const disable = () => {\n    swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    if (swiper.scrollbar.el) {\n      swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n    }\n    destroy();\n  };\n  Object.assign(swiper.scrollbar, {\n    enable,\n    disable,\n    updateSize,\n    setTranslate,\n    init,\n    destroy\n  });\n}\n\nexport { Scrollbar as default };\n", "import { e as elementChildren } from '../shared/utils.mjs';\n\nfunction Parallax(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    parallax: {\n      enabled: false\n    }\n  });\n  const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';\n  const setTransform = (el, progress) => {\n    const {\n      rtl\n    } = swiper;\n    const rtlFactor = rtl ? -1 : 1;\n    const p = el.getAttribute('data-swiper-parallax') || '0';\n    let x = el.getAttribute('data-swiper-parallax-x');\n    let y = el.getAttribute('data-swiper-parallax-y');\n    const scale = el.getAttribute('data-swiper-parallax-scale');\n    const opacity = el.getAttribute('data-swiper-parallax-opacity');\n    const rotate = el.getAttribute('data-swiper-parallax-rotate');\n    if (x || y) {\n      x = x || '0';\n      y = y || '0';\n    } else if (swiper.isHorizontal()) {\n      x = p;\n      y = '0';\n    } else {\n      y = p;\n      x = '0';\n    }\n    if (x.indexOf('%') >= 0) {\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n    } else {\n      x = `${x * progress * rtlFactor}px`;\n    }\n    if (y.indexOf('%') >= 0) {\n      y = `${parseInt(y, 10) * progress}%`;\n    } else {\n      y = `${y * progress}px`;\n    }\n    if (typeof opacity !== 'undefined' && opacity !== null) {\n      const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n      el.style.opacity = currentOpacity;\n    }\n    let transform = `translate3d(${x}, ${y}, 0px)`;\n    if (typeof scale !== 'undefined' && scale !== null) {\n      const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n      transform += ` scale(${currentScale})`;\n    }\n    if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n      const currentRotate = rotate * progress * -1;\n      transform += ` rotate(${currentRotate}deg)`;\n    }\n    el.style.transform = transform;\n  };\n  const setTranslate = () => {\n    const {\n      el,\n      slides,\n      progress,\n      snapGrid,\n      isElement\n    } = swiper;\n    const elements = elementChildren(el, elementsSelector);\n    if (swiper.isElement) {\n      elements.push(...elementChildren(swiper.hostEl, elementsSelector));\n    }\n    elements.forEach(subEl => {\n      setTransform(subEl, progress);\n    });\n    slides.forEach((slideEl, slideIndex) => {\n      let slideProgress = slideEl.progress;\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n        slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n      }\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n      slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => {\n        setTransform(subEl, slideProgress);\n      });\n    });\n  };\n  const setTransition = function (duration) {\n    if (duration === void 0) {\n      duration = swiper.params.speed;\n    }\n    const {\n      el,\n      hostEl\n    } = swiper;\n    const elements = [...el.querySelectorAll(elementsSelector)];\n    if (swiper.isElement) {\n      elements.push(...hostEl.querySelectorAll(elementsSelector));\n    }\n    elements.forEach(parallaxEl => {\n      let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\n      if (duration === 0) parallaxDuration = 0;\n      parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n    });\n  };\n  on('beforeInit', () => {\n    if (!swiper.params.parallax.enabled) return;\n    swiper.params.watchSlidesProgress = true;\n    swiper.originalParams.watchSlidesProgress = true;\n  });\n  on('init', () => {\n    if (!swiper.params.parallax.enabled) return;\n    setTranslate();\n  });\n  on('setTranslate', () => {\n    if (!swiper.params.parallax.enabled) return;\n    setTranslate();\n  });\n  on('setTransition', (_swiper, duration) => {\n    if (!swiper.params.parallax.enabled) return;\n    setTransition(duration);\n  });\n}\n\nexport { Parallax as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, a as elementParents, b as elementOffset, j as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const window = getWindow();\n  extendParams({\n    zoom: {\n      enabled: false,\n      limitToOriginalSize: false,\n      maxRatio: 3,\n      minRatio: 1,\n      toggle: true,\n      containerClass: 'swiper-zoom-container',\n      zoomedSlideClass: 'swiper-slide-zoomed'\n    }\n  });\n  swiper.zoom = {\n    enabled: false\n  };\n  let currentScale = 1;\n  let isScaling = false;\n  let fakeGestureTouched;\n  let fakeGestureMoved;\n  const evCache = [];\n  const gesture = {\n    originX: 0,\n    originY: 0,\n    slideEl: undefined,\n    slideWidth: undefined,\n    slideHeight: undefined,\n    imageEl: undefined,\n    imageWrapEl: undefined,\n    maxRatio: 3\n  };\n  const image = {\n    isTouched: undefined,\n    isMoved: undefined,\n    currentX: undefined,\n    currentY: undefined,\n    minX: undefined,\n    minY: undefined,\n    maxX: undefined,\n    maxY: undefined,\n    width: undefined,\n    height: undefined,\n    startX: undefined,\n    startY: undefined,\n    touchesStart: {},\n    touchesCurrent: {}\n  };\n  const velocity = {\n    x: undefined,\n    y: undefined,\n    prevPositionX: undefined,\n    prevPositionY: undefined,\n    prevTime: undefined\n  };\n  let scale = 1;\n  Object.defineProperty(swiper.zoom, 'scale', {\n    get() {\n      return scale;\n    },\n    set(value) {\n      if (scale !== value) {\n        const imageEl = gesture.imageEl;\n        const slideEl = gesture.slideEl;\n        emit('zoomChange', value, imageEl, slideEl);\n      }\n      scale = value;\n    }\n  });\n  function getDistanceBetweenTouches() {\n    if (evCache.length < 2) return 1;\n    const x1 = evCache[0].pageX;\n    const y1 = evCache[0].pageY;\n    const x2 = evCache[1].pageX;\n    const y2 = evCache[1].pageY;\n    const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n    return distance;\n  }\n  function getMaxRatio() {\n    const params = swiper.params.zoom;\n    const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n    if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) {\n      const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth;\n      return Math.min(imageMaxRatio, maxRatio);\n    }\n    return maxRatio;\n  }\n  function getScaleOrigin() {\n    if (evCache.length < 2) return {\n      x: null,\n      y: null\n    };\n    const box = gesture.imageEl.getBoundingClientRect();\n    return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];\n  }\n  function getSlideSelector() {\n    return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n  }\n  function eventWithinSlide(e) {\n    const slideSelector = getSlideSelector();\n    if (e.target.matches(slideSelector)) return true;\n    if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n    return false;\n  }\n  function eventWithinZoomContainer(e) {\n    const selector = `.${swiper.params.zoom.containerClass}`;\n    if (e.target.matches(selector)) return true;\n    if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n    return false;\n  }\n\n  // Events\n  function onGestureStart(e) {\n    if (e.pointerType === 'mouse') {\n      evCache.splice(0, evCache.length);\n    }\n    if (!eventWithinSlide(e)) return;\n    const params = swiper.params.zoom;\n    fakeGestureTouched = false;\n    fakeGestureMoved = false;\n    evCache.push(e);\n    if (evCache.length < 2) {\n      return;\n    }\n    fakeGestureTouched = true;\n    gesture.scaleStart = getDistanceBetweenTouches();\n    if (!gesture.slideEl) {\n      gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n      if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n      if (imageEl) {\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n      }\n      gesture.imageEl = imageEl;\n      if (imageEl) {\n        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n      } else {\n        gesture.imageWrapEl = undefined;\n      }\n      if (!gesture.imageWrapEl) {\n        gesture.imageEl = undefined;\n        return;\n      }\n      gesture.maxRatio = getMaxRatio();\n    }\n    if (gesture.imageEl) {\n      const [originX, originY] = getScaleOrigin();\n      gesture.originX = originX;\n      gesture.originY = originY;\n      gesture.imageEl.style.transitionDuration = '0ms';\n    }\n    isScaling = true;\n  }\n  function onGestureChange(e) {\n    if (!eventWithinSlide(e)) return;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n    if (pointerIndex >= 0) evCache[pointerIndex] = e;\n    if (evCache.length < 2) {\n      return;\n    }\n    fakeGestureMoved = true;\n    gesture.scaleMove = getDistanceBetweenTouches();\n    if (!gesture.imageEl) {\n      return;\n    }\n    zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n    }\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n    }\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n  }\n  function onGestureEnd(e) {\n    if (!eventWithinSlide(e)) return;\n    if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n    if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n    if (!fakeGestureTouched || !fakeGestureMoved) {\n      return;\n    }\n    fakeGestureTouched = false;\n    fakeGestureMoved = false;\n    if (!gesture.imageEl) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n    currentScale = zoom.scale;\n    isScaling = false;\n    if (zoom.scale > 1 && gesture.slideEl) {\n      gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n    } else if (zoom.scale <= 1 && gesture.slideEl) {\n      gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n    }\n    if (zoom.scale === 1) {\n      gesture.originX = 0;\n      gesture.originY = 0;\n      gesture.slideEl = undefined;\n    }\n  }\n  let allowTouchMoveTimeout;\n  function allowTouchMove() {\n    swiper.touchEventsData.preventTouchMoveFromPointerMove = false;\n  }\n  function preventTouchMove() {\n    clearTimeout(allowTouchMoveTimeout);\n    swiper.touchEventsData.preventTouchMoveFromPointerMove = true;\n    allowTouchMoveTimeout = setTimeout(() => {\n      if (swiper.destroyed) return;\n      allowTouchMove();\n    });\n  }\n  function onTouchStart(e) {\n    const device = swiper.device;\n    if (!gesture.imageEl) return;\n    if (image.isTouched) return;\n    if (device.android && e.cancelable) e.preventDefault();\n    image.isTouched = true;\n    const event = evCache.length > 0 ? evCache[0] : e;\n    image.touchesStart.x = event.pageX;\n    image.touchesStart.y = event.pageY;\n  }\n  function onTouchMove(e) {\n    if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) {\n      return;\n    }\n    const zoom = swiper.zoom;\n    if (!gesture.imageEl) {\n      return;\n    }\n    if (!image.isTouched || !gesture.slideEl) {\n      return;\n    }\n    if (!image.isMoved) {\n      image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n      image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n      image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n      image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n      gesture.slideWidth = gesture.slideEl.offsetWidth;\n      gesture.slideHeight = gesture.slideEl.offsetHeight;\n      gesture.imageWrapEl.style.transitionDuration = '0ms';\n    }\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n    image.maxY = -image.minY;\n    image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n    image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n    const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n    if (touchesDiff > 5) {\n      swiper.allowClick = false;\n    }\n    if (!image.isMoved && !isScaling) {\n      if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n        image.isTouched = false;\n        allowTouchMove();\n        return;\n      }\n      if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n        image.isTouched = false;\n        allowTouchMove();\n        return;\n      }\n    }\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n    e.stopPropagation();\n    preventTouchMove();\n    image.isMoved = true;\n    const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n    const {\n      originX,\n      originY\n    } = gesture;\n    image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n    image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n    if (image.currentX < image.minX) {\n      image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n    }\n    if (image.currentX > image.maxX) {\n      image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n    }\n    if (image.currentY < image.minY) {\n      image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n    }\n    if (image.currentY > image.maxY) {\n      image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n    }\n\n    // Velocity\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n    velocity.prevPositionX = image.touchesCurrent.x;\n    velocity.prevPositionY = image.touchesCurrent.y;\n    velocity.prevTime = Date.now();\n    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n  }\n  function onTouchEnd() {\n    const zoom = swiper.zoom;\n    if (!gesture.imageEl) return;\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n    image.isTouched = false;\n    image.isMoved = false;\n    let momentumDurationX = 300;\n    let momentumDurationY = 300;\n    const momentumDistanceX = velocity.x * momentumDurationX;\n    const newPositionX = image.currentX + momentumDistanceX;\n    const momentumDistanceY = velocity.y * momentumDurationY;\n    const newPositionY = image.currentY + momentumDistanceY;\n\n    // Fix duration\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n    image.currentX = newPositionX;\n    image.currentY = newPositionY;\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n    gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n  }\n  function onTransitionEnd() {\n    const zoom = swiper.zoom;\n    if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n      if (gesture.imageEl) {\n        gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n      }\n      if (gesture.imageWrapEl) {\n        gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n      }\n      gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n      zoom.scale = 1;\n      currentScale = 1;\n      gesture.slideEl = undefined;\n      gesture.imageEl = undefined;\n      gesture.imageWrapEl = undefined;\n      gesture.originX = 0;\n      gesture.originY = 0;\n    }\n  }\n  function zoomIn(e) {\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    if (!gesture.slideEl) {\n      if (e && e.target) {\n        gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n      }\n      if (!gesture.slideEl) {\n        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n          gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n        } else {\n          gesture.slideEl = swiper.slides[swiper.activeIndex];\n        }\n      }\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n      if (imageEl) {\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n      }\n      gesture.imageEl = imageEl;\n      if (imageEl) {\n        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n      } else {\n        gesture.imageWrapEl = undefined;\n      }\n    }\n    if (!gesture.imageEl || !gesture.imageWrapEl) return;\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.touchAction = 'none';\n    }\n    gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n    let touchX;\n    let touchY;\n    let offsetX;\n    let offsetY;\n    let diffX;\n    let diffY;\n    let translateX;\n    let translateY;\n    let imageWidth;\n    let imageHeight;\n    let scaledWidth;\n    let scaledHeight;\n    let translateMinX;\n    let translateMinY;\n    let translateMaxX;\n    let translateMaxY;\n    let slideWidth;\n    let slideHeight;\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.pageX;\n      touchY = e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n    const forceZoomRatio = typeof e === 'number' ? e : null;\n    if (currentScale === 1 && forceZoomRatio) {\n      touchX = undefined;\n      touchY = undefined;\n      image.touchesStart.x = undefined;\n      image.touchesStart.y = undefined;\n    }\n    const maxRatio = getMaxRatio();\n    zoom.scale = forceZoomRatio || maxRatio;\n    currentScale = forceZoomRatio || maxRatio;\n    if (e && !(currentScale === 1 && forceZoomRatio)) {\n      slideWidth = gesture.slideEl.offsetWidth;\n      slideHeight = gesture.slideEl.offsetHeight;\n      offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n      offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n      diffX = offsetX + slideWidth / 2 - touchX;\n      diffY = offsetY + slideHeight / 2 - touchY;\n      imageWidth = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n      imageHeight = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n      translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n      translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n      translateX = diffX * zoom.scale;\n      translateY = diffY * zoom.scale;\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n    if (forceZoomRatio && zoom.scale === 1) {\n      gesture.originX = 0;\n      gesture.originY = 0;\n    }\n    gesture.imageWrapEl.style.transitionDuration = '300ms';\n    gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n    gesture.imageEl.style.transitionDuration = '300ms';\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n  }\n  function zoomOut() {\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    if (!gesture.slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n      } else {\n        gesture.slideEl = swiper.slides[swiper.activeIndex];\n      }\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n      if (imageEl) {\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n      }\n      gesture.imageEl = imageEl;\n      if (imageEl) {\n        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n      } else {\n        gesture.imageWrapEl = undefined;\n      }\n    }\n    if (!gesture.imageEl || !gesture.imageWrapEl) return;\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style.overflow = '';\n      swiper.wrapperEl.style.touchAction = '';\n    }\n    zoom.scale = 1;\n    currentScale = 1;\n    image.touchesStart.x = undefined;\n    image.touchesStart.y = undefined;\n    gesture.imageWrapEl.style.transitionDuration = '300ms';\n    gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n    gesture.imageEl.style.transitionDuration = '300ms';\n    gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n    gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n    gesture.slideEl = undefined;\n    gesture.originX = 0;\n    gesture.originY = 0;\n  }\n\n  // Toggle Zoom\n  function zoomToggle(e) {\n    const zoom = swiper.zoom;\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoomOut();\n    } else {\n      // Zoom In\n      zoomIn(e);\n    }\n  }\n  function getListeners() {\n    const passiveListener = swiper.params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    const activeListenerWithCapture = swiper.params.passiveListeners ? {\n      passive: false,\n      capture: true\n    } : true;\n    return {\n      passiveListener,\n      activeListenerWithCapture\n    };\n  }\n\n  // Attach/Detach Events\n  function enable() {\n    const zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n    const {\n      passiveListener,\n      activeListenerWithCapture\n    } = getListeners();\n\n    // Scale image\n    swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n    swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n    ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n      swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n    });\n\n    // Move image\n    swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n  }\n  function disable() {\n    const zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n    zoom.enabled = false;\n    const {\n      passiveListener,\n      activeListenerWithCapture\n    } = getListeners();\n\n    // Scale image\n    swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n    swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n    ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n      swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n    });\n\n    // Move image\n    swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n  }\n  on('init', () => {\n    if (swiper.params.zoom.enabled) {\n      enable();\n    }\n  });\n  on('destroy', () => {\n    disable();\n  });\n  on('touchStart', (_s, e) => {\n    if (!swiper.zoom.enabled) return;\n    onTouchStart(e);\n  });\n  on('touchEnd', (_s, e) => {\n    if (!swiper.zoom.enabled) return;\n    onTouchEnd();\n  });\n  on('doubleTap', (_s, e) => {\n    if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n      zoomToggle(e);\n    }\n  });\n  on('transitionEnd', () => {\n    if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n      onTransitionEnd();\n    }\n  });\n  on('slideChange', () => {\n    if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n      onTransitionEnd();\n    }\n  });\n  Object.assign(swiper.zoom, {\n    enable,\n    disable,\n    in: zoomIn,\n    out: zoomOut,\n    toggle: zoomToggle\n  });\n}\n\nexport { Zoom as default };\n", "import { n as nextTick, k as elementTransitionEnd } from '../shared/utils.mjs';\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nfunction Controller(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    controller: {\n      control: undefined,\n      inverse: false,\n      by: 'slide' // or 'container'\n    }\n  });\n\n  swiper.controller = {\n    control: undefined\n  };\n  function LinearSpline(x, y) {\n    const binarySearch = function search() {\n      let maxIndex;\n      let minIndex;\n      let guess;\n      return (array, val) => {\n        minIndex = -1;\n        maxIndex = array.length;\n        while (maxIndex - minIndex > 1) {\n          guess = maxIndex + minIndex >> 1;\n          if (array[guess] <= val) {\n            minIndex = guess;\n          } else {\n            maxIndex = guess;\n          }\n        }\n        return maxIndex;\n      };\n    }();\n    this.x = x;\n    this.y = y;\n    this.lastIndex = x.length - 1;\n    // Given an x value (x2), return the expected y2 value:\n    // (x1,y1) is the known point before given value,\n    // (x3,y3) is the known point after given value.\n    let i1;\n    let i3;\n    this.interpolate = function interpolate(x2) {\n      if (!x2) return 0;\n\n      // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n      i3 = binarySearch(this.x, x2);\n      i1 = i3 - 1;\n\n      // We have our indexes i1 & i3, so we can calculate already:\n      // y2 := ((x2\u2212x1) \u00D7 (y3\u2212y1)) \u00F7 (x3\u2212x1) + y1\n      return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n    };\n    return this;\n  }\n  function getInterpolateFunction(c) {\n    swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n  }\n  function setTranslate(_t, byController) {\n    const controlled = swiper.controller.control;\n    let multiplier;\n    let controlledTranslate;\n    const Swiper = swiper.constructor;\n    function setControlledTranslate(c) {\n      if (c.destroyed) return;\n\n      // this will create an Interpolate function based on the snapGrids\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\n      // it makes sense to create this only once and recall it for the interpolation\n      // the function does a lot of value caching for performance\n      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n      if (swiper.params.controller.by === 'slide') {\n        getInterpolateFunction(c);\n        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n        // but it did not work out\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n      }\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n        if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {\n          multiplier = 1;\n        }\n        controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n      }\n      if (swiper.params.controller.inverse) {\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\n      }\n      c.updateProgress(controlledTranslate);\n      c.setTranslate(controlledTranslate, swiper);\n      c.updateActiveIndex();\n      c.updateSlidesClasses();\n    }\n    if (Array.isArray(controlled)) {\n      for (let i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTranslate(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTranslate(controlled);\n    }\n  }\n  function setTransition(duration, byController) {\n    const Swiper = swiper.constructor;\n    const controlled = swiper.controller.control;\n    let i;\n    function setControlledTransition(c) {\n      if (c.destroyed) return;\n      c.setTransition(duration, swiper);\n      if (duration !== 0) {\n        c.transitionStart();\n        if (c.params.autoHeight) {\n          nextTick(() => {\n            c.updateAutoHeight();\n          });\n        }\n        elementTransitionEnd(c.wrapperEl, () => {\n          if (!controlled) return;\n          c.transitionEnd();\n        });\n      }\n    }\n    if (Array.isArray(controlled)) {\n      for (i = 0; i < controlled.length; i += 1) {\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n          setControlledTransition(controlled[i]);\n        }\n      }\n    } else if (controlled instanceof Swiper && byController !== controlled) {\n      setControlledTransition(controlled);\n    }\n  }\n  function removeSpline() {\n    if (!swiper.controller.control) return;\n    if (swiper.controller.spline) {\n      swiper.controller.spline = undefined;\n      delete swiper.controller.spline;\n    }\n  }\n  on('beforeInit', () => {\n    if (typeof window !== 'undefined' && (\n    // eslint-disable-line\n    typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\n      const controlElements = typeof swiper.params.controller.control === 'string' ? [...document.querySelectorAll(swiper.params.controller.control)] : [swiper.params.controller.control];\n      controlElements.forEach(controlElement => {\n        if (!swiper.controller.control) swiper.controller.control = [];\n        if (controlElement && controlElement.swiper) {\n          swiper.controller.control.push(controlElement.swiper);\n        } else if (controlElement) {\n          const eventName = `${swiper.params.eventsPrefix}init`;\n          const onControllerSwiper = e => {\n            swiper.controller.control.push(e.detail[0]);\n            swiper.update();\n            controlElement.removeEventListener(eventName, onControllerSwiper);\n          };\n          controlElement.addEventListener(eventName, onControllerSwiper);\n        }\n      });\n      return;\n    }\n    swiper.controller.control = swiper.params.controller.control;\n  });\n  on('update', () => {\n    removeSpline();\n  });\n  on('resize', () => {\n    removeSpline();\n  });\n  on('observerUpdate', () => {\n    removeSpline();\n  });\n  on('setTranslate', (_s, translate, byController) => {\n    if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n    swiper.controller.setTranslate(translate, byController);\n  });\n  on('setTransition', (_s, duration, byController) => {\n    if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n    swiper.controller.setTransition(duration, byController);\n  });\n  Object.assign(swiper.controller, {\n    setTranslate,\n    setTransition\n  });\n}\n\nexport { Controller as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElement, h as elementIndex, m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction A11y(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n      slideLabelMessage: '{{index}} / {{slidesLength}}',\n      containerMessage: null,\n      containerRoleDescriptionMessage: null,\n      containerRole: null,\n      itemRoleDescriptionMessage: null,\n      slideRole: 'group',\n      id: null,\n      scrollOnFocus: true\n    }\n  });\n  swiper.a11y = {\n    clicked: false\n  };\n  let liveRegion = null;\n  let preventFocusHandler;\n  let focusTargetSlideEl;\n  let visibilityChangedTimestamp = new Date().getTime();\n  function notify(message) {\n    const notification = liveRegion;\n    if (notification.length === 0) return;\n    notification.innerHTML = '';\n    notification.innerHTML = message;\n  }\n  function getRandomNumber(size) {\n    if (size === void 0) {\n      size = 16;\n    }\n    const randomChar = () => Math.round(16 * Math.random()).toString(16);\n    return 'x'.repeat(size).replace(/x/g, randomChar);\n  }\n  function makeElFocusable(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('tabIndex', '0');\n    });\n  }\n  function makeElNotFocusable(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('tabIndex', '-1');\n    });\n  }\n  function addElRole(el, role) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('role', role);\n    });\n  }\n  function addElRoleDescription(el, description) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-roledescription', description);\n    });\n  }\n  function addElControls(el, controls) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-controls', controls);\n    });\n  }\n  function addElLabel(el, label) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-label', label);\n    });\n  }\n  function addElId(el, id) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('id', id);\n    });\n  }\n  function addElLive(el, live) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-live', live);\n    });\n  }\n  function disableEl(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-disabled', true);\n    });\n  }\n  function enableEl(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-disabled', false);\n    });\n  }\n  function onEnterOrSpaceKey(e) {\n    if (e.keyCode !== 13 && e.keyCode !== 32) return;\n    const params = swiper.params.a11y;\n    const targetEl = e.target;\n    if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n      if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n    }\n    if (swiper.navigation && swiper.navigation.prevEl && swiper.navigation.nextEl) {\n      const prevEls = makeElementsArray(swiper.navigation.prevEl);\n      const nextEls = makeElementsArray(swiper.navigation.nextEl);\n      if (nextEls.includes(targetEl)) {\n        if (!(swiper.isEnd && !swiper.params.loop)) {\n          swiper.slideNext();\n        }\n        if (swiper.isEnd) {\n          notify(params.lastSlideMessage);\n        } else {\n          notify(params.nextSlideMessage);\n        }\n      }\n      if (prevEls.includes(targetEl)) {\n        if (!(swiper.isBeginning && !swiper.params.loop)) {\n          swiper.slidePrev();\n        }\n        if (swiper.isBeginning) {\n          notify(params.firstSlideMessage);\n        } else {\n          notify(params.prevSlideMessage);\n        }\n      }\n    }\n    if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n      targetEl.click();\n    }\n  }\n  function updateNavigation() {\n    if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n    const {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    if (prevEl) {\n      if (swiper.isBeginning) {\n        disableEl(prevEl);\n        makeElNotFocusable(prevEl);\n      } else {\n        enableEl(prevEl);\n        makeElFocusable(prevEl);\n      }\n    }\n    if (nextEl) {\n      if (swiper.isEnd) {\n        disableEl(nextEl);\n        makeElNotFocusable(nextEl);\n      } else {\n        enableEl(nextEl);\n        makeElFocusable(nextEl);\n      }\n    }\n  }\n  function hasPagination() {\n    return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n  }\n  function hasClickablePagination() {\n    return hasPagination() && swiper.params.pagination.clickable;\n  }\n  function updatePagination() {\n    const params = swiper.params.a11y;\n    if (!hasPagination()) return;\n    swiper.pagination.bullets.forEach(bulletEl => {\n      if (swiper.params.pagination.clickable) {\n        makeElFocusable(bulletEl);\n        if (!swiper.params.pagination.renderBullet) {\n          addElRole(bulletEl, 'button');\n          addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n        }\n      }\n      if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {\n        bulletEl.setAttribute('aria-current', 'true');\n      } else {\n        bulletEl.removeAttribute('aria-current');\n      }\n    });\n  }\n  const initNavEl = (el, wrapperId, message) => {\n    makeElFocusable(el);\n    if (el.tagName !== 'BUTTON') {\n      addElRole(el, 'button');\n      el.addEventListener('keydown', onEnterOrSpaceKey);\n    }\n    addElLabel(el, message);\n    addElControls(el, wrapperId);\n  };\n  const handlePointerDown = e => {\n    if (focusTargetSlideEl && focusTargetSlideEl !== e.target && !focusTargetSlideEl.contains(e.target)) {\n      preventFocusHandler = true;\n    }\n    swiper.a11y.clicked = true;\n  };\n  const handlePointerUp = () => {\n    preventFocusHandler = false;\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        if (!swiper.destroyed) {\n          swiper.a11y.clicked = false;\n        }\n      });\n    });\n  };\n  const onVisibilityChange = e => {\n    visibilityChangedTimestamp = new Date().getTime();\n  };\n  const handleFocus = e => {\n    if (swiper.a11y.clicked || !swiper.params.a11y.scrollOnFocus) return;\n    if (new Date().getTime() - visibilityChangedTimestamp < 100) return;\n    const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n    if (!slideEl || !swiper.slides.includes(slideEl)) return;\n    focusTargetSlideEl = slideEl;\n    const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n    const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n    if (isActive || isVisible) return;\n    if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n    if (swiper.isHorizontal()) {\n      swiper.el.scrollLeft = 0;\n    } else {\n      swiper.el.scrollTop = 0;\n    }\n    requestAnimationFrame(() => {\n      if (preventFocusHandler) return;\n      if (swiper.params.loop) {\n        swiper.slideToLoop(parseInt(slideEl.getAttribute('data-swiper-slide-index')), 0);\n      } else {\n        swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n      }\n      preventFocusHandler = false;\n    });\n  };\n  const initSlides = () => {\n    const params = swiper.params.a11y;\n    if (params.itemRoleDescriptionMessage) {\n      addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n    }\n    if (params.slideRole) {\n      addElRole(swiper.slides, params.slideRole);\n    }\n    const slidesLength = swiper.slides.length;\n    if (params.slideLabelMessage) {\n      swiper.slides.forEach((slideEl, index) => {\n        const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n        const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n        addElLabel(slideEl, ariaLabelMessage);\n      });\n    }\n  };\n  const init = () => {\n    const params = swiper.params.a11y;\n    swiper.el.append(liveRegion);\n\n    // Container\n    const containerEl = swiper.el;\n    if (params.containerRoleDescriptionMessage) {\n      addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n    }\n    if (params.containerMessage) {\n      addElLabel(containerEl, params.containerMessage);\n    }\n    if (params.containerRole) {\n      addElRole(containerEl, params.containerRole);\n    }\n\n    // Wrapper\n    const wrapperEl = swiper.wrapperEl;\n    const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n    const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n    addElId(wrapperEl, wrapperId);\n    addElLive(wrapperEl, live);\n\n    // Slide\n    initSlides();\n\n    // Navigation\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation ? swiper.navigation : {};\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (nextEl) {\n      nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n    }\n    if (prevEl) {\n      prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n    }\n\n    // Pagination\n    if (hasClickablePagination()) {\n      const paginationEl = makeElementsArray(swiper.pagination.el);\n      paginationEl.forEach(el => {\n        el.addEventListener('keydown', onEnterOrSpaceKey);\n      });\n    }\n\n    // Tab focus\n    const document = getDocument();\n    document.addEventListener('visibilitychange', onVisibilityChange);\n    swiper.el.addEventListener('focus', handleFocus, true);\n    swiper.el.addEventListener('focus', handleFocus, true);\n    swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n    swiper.el.addEventListener('pointerup', handlePointerUp, true);\n  };\n  function destroy() {\n    if (liveRegion) liveRegion.remove();\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation ? swiper.navigation : {};\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (nextEl) {\n      nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n    }\n    if (prevEl) {\n      prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n    }\n\n    // Pagination\n    if (hasClickablePagination()) {\n      const paginationEl = makeElementsArray(swiper.pagination.el);\n      paginationEl.forEach(el => {\n        el.removeEventListener('keydown', onEnterOrSpaceKey);\n      });\n    }\n    const document = getDocument();\n    document.removeEventListener('visibilitychange', onVisibilityChange);\n    // Tab focus\n    if (swiper.el && typeof swiper.el !== 'string') {\n      swiper.el.removeEventListener('focus', handleFocus, true);\n      swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n      swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n    }\n  }\n  on('beforeInit', () => {\n    liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n    liveRegion.setAttribute('aria-live', 'assertive');\n    liveRegion.setAttribute('aria-atomic', 'true');\n  });\n  on('afterInit', () => {\n    if (!swiper.params.a11y.enabled) return;\n    init();\n  });\n  on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n    if (!swiper.params.a11y.enabled) return;\n    initSlides();\n  });\n  on('fromEdge toEdge afterInit lock unlock', () => {\n    if (!swiper.params.a11y.enabled) return;\n    updateNavigation();\n  });\n  on('paginationUpdate', () => {\n    if (!swiper.params.a11y.enabled) return;\n    updatePagination();\n  });\n  on('destroy', () => {\n    if (!swiper.params.a11y.enabled) return;\n    destroy();\n  });\n}\n\nexport { A11y as default };\n", "import { a as getWindow } from '../shared/ssr-window.esm.mjs';\n\nfunction History(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    history: {\n      enabled: false,\n      root: '',\n      replaceState: false,\n      key: 'slides',\n      keepQuery: false\n    }\n  });\n  let initialized = false;\n  let paths = {};\n  const slugify = text => {\n    return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n  };\n  const getPathValues = urlOverride => {\n    const window = getWindow();\n    let location;\n    if (urlOverride) {\n      location = new URL(urlOverride);\n    } else {\n      location = window.location;\n    }\n    const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n    const total = pathArray.length;\n    const key = pathArray[total - 2];\n    const value = pathArray[total - 1];\n    return {\n      key,\n      value\n    };\n  };\n  const setHistory = (key, index) => {\n    const window = getWindow();\n    if (!initialized || !swiper.params.history.enabled) return;\n    let location;\n    if (swiper.params.url) {\n      location = new URL(swiper.params.url);\n    } else {\n      location = window.location;\n    }\n    const slide = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${index}\"]`) : swiper.slides[index];\n    let value = slugify(slide.getAttribute('data-history'));\n    if (swiper.params.history.root.length > 0) {\n      let root = swiper.params.history.root;\n      if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n      value = `${root}/${key ? `${key}/` : ''}${value}`;\n    } else if (!location.pathname.includes(key)) {\n      value = `${key ? `${key}/` : ''}${value}`;\n    }\n    if (swiper.params.history.keepQuery) {\n      value += location.search;\n    }\n    const currentState = window.history.state;\n    if (currentState && currentState.value === value) {\n      return;\n    }\n    if (swiper.params.history.replaceState) {\n      window.history.replaceState({\n        value\n      }, null, value);\n    } else {\n      window.history.pushState({\n        value\n      }, null, value);\n    }\n  };\n  const scrollToSlide = (speed, value, runCallbacks) => {\n    if (value) {\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n        const slide = swiper.slides[i];\n        const slideHistory = slugify(slide.getAttribute('data-history'));\n        if (slideHistory === value) {\n          const index = swiper.getSlideIndex(slide);\n          swiper.slideTo(index, speed, runCallbacks);\n        }\n      }\n    } else {\n      swiper.slideTo(0, speed, runCallbacks);\n    }\n  };\n  const setHistoryPopState = () => {\n    paths = getPathValues(swiper.params.url);\n    scrollToSlide(swiper.params.speed, paths.value, false);\n  };\n  const init = () => {\n    const window = getWindow();\n    if (!swiper.params.history) return;\n    if (!window.history || !window.history.pushState) {\n      swiper.params.history.enabled = false;\n      swiper.params.hashNavigation.enabled = true;\n      return;\n    }\n    initialized = true;\n    paths = getPathValues(swiper.params.url);\n    if (!paths.key && !paths.value) {\n      if (!swiper.params.history.replaceState) {\n        window.addEventListener('popstate', setHistoryPopState);\n      }\n      return;\n    }\n    scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n    if (!swiper.params.history.replaceState) {\n      window.addEventListener('popstate', setHistoryPopState);\n    }\n  };\n  const destroy = () => {\n    const window = getWindow();\n    if (!swiper.params.history.replaceState) {\n      window.removeEventListener('popstate', setHistoryPopState);\n    }\n  };\n  on('init', () => {\n    if (swiper.params.history.enabled) {\n      init();\n    }\n  });\n  on('destroy', () => {\n    if (swiper.params.history.enabled) {\n      destroy();\n    }\n  });\n  on('transitionEnd _freeModeNoMomentumRelease', () => {\n    if (initialized) {\n      setHistory(swiper.params.history.key, swiper.activeIndex);\n    }\n  });\n  on('slideChange', () => {\n    if (initialized && swiper.params.cssMode) {\n      setHistory(swiper.params.history.key, swiper.activeIndex);\n    }\n  });\n}\n\nexport { History as default };\n", "import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren } from '../shared/utils.mjs';\n\nfunction HashNavigation(_ref) {\n  let {\n    swiper,\n    extendParams,\n    emit,\n    on\n  } = _ref;\n  let initialized = false;\n  const document = getDocument();\n  const window = getWindow();\n  extendParams({\n    hashNavigation: {\n      enabled: false,\n      replaceState: false,\n      watchState: false,\n      getSlideIndex(_s, hash) {\n        if (swiper.virtual && swiper.params.virtual.enabled) {\n          const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0];\n          if (!slideWithHash) return 0;\n          const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);\n          return index;\n        }\n        return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${hash}\"], swiper-slide[data-hash=\"${hash}\"]`)[0]);\n      }\n    }\n  });\n  const onHashChange = () => {\n    emit('hashChange');\n    const newHash = document.location.hash.replace('#', '');\n    const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n    const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';\n    if (newHash !== activeSlideHash) {\n      const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);\n      if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;\n      swiper.slideTo(newIndex);\n    }\n  };\n  const setHash = () => {\n    if (!initialized || !swiper.params.hashNavigation.enabled) return;\n    const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n    const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';\n    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n      window.history.replaceState(null, null, `#${activeSlideHash}` || '');\n      emit('hashSet');\n    } else {\n      document.location.hash = activeSlideHash || '';\n      emit('hashSet');\n    }\n  };\n  const init = () => {\n    if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n    initialized = true;\n    const hash = document.location.hash.replace('#', '');\n    if (hash) {\n      const speed = 0;\n      const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);\n      swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);\n    }\n    if (swiper.params.hashNavigation.watchState) {\n      window.addEventListener('hashchange', onHashChange);\n    }\n  };\n  const destroy = () => {\n    if (swiper.params.hashNavigation.watchState) {\n      window.removeEventListener('hashchange', onHashChange);\n    }\n  };\n  on('init', () => {\n    if (swiper.params.hashNavigation.enabled) {\n      init();\n    }\n  });\n  on('destroy', () => {\n    if (swiper.params.hashNavigation.enabled) {\n      destroy();\n    }\n  });\n  on('transitionEnd _freeModeNoMomentumRelease', () => {\n    if (initialized) {\n      setHash();\n    }\n  });\n  on('slideChange', () => {\n    if (initialized && swiper.params.cssMode) {\n      setHash();\n    }\n  });\n}\n\nexport { HashNavigation as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit,\n    params\n  } = _ref;\n  swiper.autoplay = {\n    running: false,\n    paused: false,\n    timeLeft: 0\n  };\n  extendParams({\n    autoplay: {\n      enabled: false,\n      delay: 3000,\n      waitForTransition: true,\n      disableOnInteraction: false,\n      stopOnLastSlide: false,\n      reverseDirection: false,\n      pauseOnMouseEnter: false\n    }\n  });\n  let timeout;\n  let raf;\n  let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n  let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n  let autoplayTimeLeft;\n  let autoplayStartTime = new Date().getTime();\n  let wasPaused;\n  let isTouched;\n  let pausedByTouch;\n  let touchStartTimeout;\n  let slideChanged;\n  let pausedByInteraction;\n  let pausedByPointerEnter;\n  function onTransitionEnd(e) {\n    if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n    if (e.target !== swiper.wrapperEl) return;\n    swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n    if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n      return;\n    }\n    resume();\n  }\n  const calcTimeLeft = () => {\n    if (swiper.destroyed || !swiper.autoplay.running) return;\n    if (swiper.autoplay.paused) {\n      wasPaused = true;\n    } else if (wasPaused) {\n      autoplayDelayCurrent = autoplayTimeLeft;\n      wasPaused = false;\n    }\n    const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n    swiper.autoplay.timeLeft = timeLeft;\n    emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n    raf = requestAnimationFrame(() => {\n      calcTimeLeft();\n    });\n  };\n  const getSlideDelay = () => {\n    let activeSlideEl;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n    } else {\n      activeSlideEl = swiper.slides[swiper.activeIndex];\n    }\n    if (!activeSlideEl) return undefined;\n    const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n    return currentSlideDelay;\n  };\n  const run = delayForce => {\n    if (swiper.destroyed || !swiper.autoplay.running) return;\n    cancelAnimationFrame(raf);\n    calcTimeLeft();\n    let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n    autoplayDelayTotal = swiper.params.autoplay.delay;\n    autoplayDelayCurrent = swiper.params.autoplay.delay;\n    const currentSlideDelay = getSlideDelay();\n    if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n      delay = currentSlideDelay;\n      autoplayDelayTotal = currentSlideDelay;\n      autoplayDelayCurrent = currentSlideDelay;\n    }\n    autoplayTimeLeft = delay;\n    const speed = swiper.params.speed;\n    const proceed = () => {\n      if (!swiper || swiper.destroyed) return;\n      if (swiper.params.autoplay.reverseDirection) {\n        if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n          swiper.slidePrev(speed, true, true);\n          emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n          emit('autoplay');\n        }\n      } else {\n        if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n          swiper.slideNext(speed, true, true);\n          emit('autoplay');\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\n          swiper.slideTo(0, speed, true, true);\n          emit('autoplay');\n        }\n      }\n      if (swiper.params.cssMode) {\n        autoplayStartTime = new Date().getTime();\n        requestAnimationFrame(() => {\n          run();\n        });\n      }\n    };\n    if (delay > 0) {\n      clearTimeout(timeout);\n      timeout = setTimeout(() => {\n        proceed();\n      }, delay);\n    } else {\n      requestAnimationFrame(() => {\n        proceed();\n      });\n    }\n\n    // eslint-disable-next-line\n    return delay;\n  };\n  const start = () => {\n    autoplayStartTime = new Date().getTime();\n    swiper.autoplay.running = true;\n    run();\n    emit('autoplayStart');\n  };\n  const stop = () => {\n    swiper.autoplay.running = false;\n    clearTimeout(timeout);\n    cancelAnimationFrame(raf);\n    emit('autoplayStop');\n  };\n  const pause = (internal, reset) => {\n    if (swiper.destroyed || !swiper.autoplay.running) return;\n    clearTimeout(timeout);\n    if (!internal) {\n      pausedByInteraction = true;\n    }\n    const proceed = () => {\n      emit('autoplayPause');\n      if (swiper.params.autoplay.waitForTransition) {\n        swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n      } else {\n        resume();\n      }\n    };\n    swiper.autoplay.paused = true;\n    if (reset) {\n      if (slideChanged) {\n        autoplayTimeLeft = swiper.params.autoplay.delay;\n      }\n      slideChanged = false;\n      proceed();\n      return;\n    }\n    const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n    autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n    if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n    proceed();\n  };\n  const resume = () => {\n    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n    autoplayStartTime = new Date().getTime();\n    if (pausedByInteraction) {\n      pausedByInteraction = false;\n      run(autoplayTimeLeft);\n    } else {\n      run();\n    }\n    swiper.autoplay.paused = false;\n    emit('autoplayResume');\n  };\n  const onVisibilityChange = () => {\n    if (swiper.destroyed || !swiper.autoplay.running) return;\n    const document = getDocument();\n    if (document.visibilityState === 'hidden') {\n      pausedByInteraction = true;\n      pause(true);\n    }\n    if (document.visibilityState === 'visible') {\n      resume();\n    }\n  };\n  const onPointerEnter = e => {\n    if (e.pointerType !== 'mouse') return;\n    pausedByInteraction = true;\n    pausedByPointerEnter = true;\n    if (swiper.animating || swiper.autoplay.paused) return;\n    pause(true);\n  };\n  const onPointerLeave = e => {\n    if (e.pointerType !== 'mouse') return;\n    pausedByPointerEnter = false;\n    if (swiper.autoplay.paused) {\n      resume();\n    }\n  };\n  const attachMouseEvents = () => {\n    if (swiper.params.autoplay.pauseOnMouseEnter) {\n      swiper.el.addEventListener('pointerenter', onPointerEnter);\n      swiper.el.addEventListener('pointerleave', onPointerLeave);\n    }\n  };\n  const detachMouseEvents = () => {\n    if (swiper.el && typeof swiper.el !== 'string') {\n      swiper.el.removeEventListener('pointerenter', onPointerEnter);\n      swiper.el.removeEventListener('pointerleave', onPointerLeave);\n    }\n  };\n  const attachDocumentEvents = () => {\n    const document = getDocument();\n    document.addEventListener('visibilitychange', onVisibilityChange);\n  };\n  const detachDocumentEvents = () => {\n    const document = getDocument();\n    document.removeEventListener('visibilitychange', onVisibilityChange);\n  };\n  on('init', () => {\n    if (swiper.params.autoplay.enabled) {\n      attachMouseEvents();\n      attachDocumentEvents();\n      start();\n    }\n  });\n  on('destroy', () => {\n    detachMouseEvents();\n    detachDocumentEvents();\n    if (swiper.autoplay.running) {\n      stop();\n    }\n  });\n  on('_freeModeStaticRelease', () => {\n    if (pausedByTouch || pausedByInteraction) {\n      resume();\n    }\n  });\n  on('_freeModeNoMomentumRelease', () => {\n    if (!swiper.params.autoplay.disableOnInteraction) {\n      pause(true, true);\n    } else {\n      stop();\n    }\n  });\n  on('beforeTransitionStart', (_s, speed, internal) => {\n    if (swiper.destroyed || !swiper.autoplay.running) return;\n    if (internal || !swiper.params.autoplay.disableOnInteraction) {\n      pause(true, true);\n    } else {\n      stop();\n    }\n  });\n  on('sliderFirstMove', () => {\n    if (swiper.destroyed || !swiper.autoplay.running) return;\n    if (swiper.params.autoplay.disableOnInteraction) {\n      stop();\n      return;\n    }\n    isTouched = true;\n    pausedByTouch = false;\n    pausedByInteraction = false;\n    touchStartTimeout = setTimeout(() => {\n      pausedByInteraction = true;\n      pausedByTouch = true;\n      pause(true);\n    }, 200);\n  });\n  on('touchEnd', () => {\n    if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n    clearTimeout(touchStartTimeout);\n    clearTimeout(timeout);\n    if (swiper.params.autoplay.disableOnInteraction) {\n      pausedByTouch = false;\n      isTouched = false;\n      return;\n    }\n    if (pausedByTouch && swiper.params.cssMode) resume();\n    pausedByTouch = false;\n    isTouched = false;\n  });\n  on('slideChange', () => {\n    if (swiper.destroyed || !swiper.autoplay.running) return;\n    slideChanged = true;\n  });\n  Object.assign(swiper.autoplay, {\n    start,\n    stop,\n    pause,\n    resume\n  });\n}\n\nexport { Autoplay as default };\n", "import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { l as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    thumbs: {\n      swiper: null,\n      multipleActiveThumbs: true,\n      autoScrollOffset: 0,\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\n      thumbsContainerClass: 'swiper-thumbs'\n    }\n  });\n  let initialized = false;\n  let swiperCreated = false;\n  swiper.thumbs = {\n    swiper: null\n  };\n  function onThumbClick() {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    const clickedIndex = thumbsSwiper.clickedIndex;\n    const clickedSlide = thumbsSwiper.clickedSlide;\n    if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n    let slideToIndex;\n    if (thumbsSwiper.params.loop) {\n      slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    } else {\n      slideToIndex = clickedIndex;\n    }\n    if (swiper.params.loop) {\n      swiper.slideToLoop(slideToIndex);\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  }\n  function init() {\n    const {\n      thumbs: thumbsParams\n    } = swiper.params;\n    if (initialized) return false;\n    initialized = true;\n    const SwiperClass = swiper.constructor;\n    if (thumbsParams.swiper instanceof SwiperClass) {\n      swiper.thumbs.swiper = thumbsParams.swiper;\n      Object.assign(swiper.thumbs.swiper.originalParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      Object.assign(swiper.thumbs.swiper.params, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      swiper.thumbs.swiper.update();\n    } else if (isObject(thumbsParams.swiper)) {\n      const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n      Object.assign(thumbsSwiperParams, {\n        watchSlidesProgress: true,\n        slideToClickedSlide: false\n      });\n      swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n      swiperCreated = true;\n    }\n    swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n    swiper.thumbs.swiper.on('tap', onThumbClick);\n    return true;\n  }\n  function update(initial) {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n    // Activate thumbs\n    let thumbsToActivate = 1;\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n      thumbsToActivate = swiper.params.slidesPerView;\n    }\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\n      thumbsToActivate = 1;\n    }\n    thumbsToActivate = Math.floor(thumbsToActivate);\n    thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n    if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n          slideEl.classList.add(thumbActiveClass);\n        });\n      }\n    } else {\n      for (let i = 0; i < thumbsToActivate; i += 1) {\n        if (thumbsSwiper.slides[swiper.realIndex + i]) {\n          thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n        }\n      }\n    }\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n      const currentThumbsIndex = thumbsSwiper.activeIndex;\n      let newThumbsIndex;\n      let direction;\n      if (thumbsSwiper.params.loop) {\n        const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n        newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n      } else {\n        newThumbsIndex = swiper.realIndex;\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n      }\n      if (useOffset) {\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n      }\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n        if (thumbsSwiper.params.centeredSlides) {\n          if (newThumbsIndex > currentThumbsIndex) {\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n          } else {\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n          }\n        } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n      }\n    }\n  }\n  on('beforeInit', () => {\n    const {\n      thumbs\n    } = swiper.params;\n    if (!thumbs || !thumbs.swiper) return;\n    if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n      const document = getDocument();\n      const getThumbsElementAndInit = () => {\n        const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n        if (thumbsElement && thumbsElement.swiper) {\n          thumbs.swiper = thumbsElement.swiper;\n          init();\n          update(true);\n        } else if (thumbsElement) {\n          const eventName = `${swiper.params.eventsPrefix}init`;\n          const onThumbsSwiper = e => {\n            thumbs.swiper = e.detail[0];\n            thumbsElement.removeEventListener(eventName, onThumbsSwiper);\n            init();\n            update(true);\n            thumbs.swiper.update();\n            swiper.update();\n          };\n          thumbsElement.addEventListener(eventName, onThumbsSwiper);\n        }\n        return thumbsElement;\n      };\n      const watchForThumbsToAppear = () => {\n        if (swiper.destroyed) return;\n        const thumbsElement = getThumbsElementAndInit();\n        if (!thumbsElement) {\n          requestAnimationFrame(watchForThumbsToAppear);\n        }\n      };\n      requestAnimationFrame(watchForThumbsToAppear);\n    } else {\n      init();\n      update(true);\n    }\n  });\n  on('slideChange update resize observerUpdate', () => {\n    update();\n  });\n  on('setTransition', (_s, duration) => {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    thumbsSwiper.setTransition(duration);\n  });\n  on('beforeDestroy', () => {\n    const thumbsSwiper = swiper.thumbs.swiper;\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n    if (swiperCreated) {\n      thumbsSwiper.destroy();\n    }\n  });\n  Object.assign(swiper.thumbs, {\n    init,\n    update\n  });\n}\n\nexport { Thumb as default };\n", "import { d as now, k as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode(_ref) {\n  let {\n    swiper,\n    extendParams,\n    emit,\n    once\n  } = _ref;\n  extendParams({\n    freeMode: {\n      enabled: false,\n      momentum: true,\n      momentumRatio: 1,\n      momentumBounce: true,\n      momentumBounceRatio: 1,\n      momentumVelocityRatio: 1,\n      sticky: false,\n      minimumVelocity: 0.02\n    }\n  });\n  function onTouchStart() {\n    if (swiper.params.cssMode) return;\n    const translate = swiper.getTranslate();\n    swiper.setTranslate(translate);\n    swiper.setTransition(0);\n    swiper.touchEventsData.velocities.length = 0;\n    swiper.freeMode.onTouchEnd({\n      currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n    });\n  }\n  function onTouchMove() {\n    if (swiper.params.cssMode) return;\n    const {\n      touchEventsData: data,\n      touches\n    } = swiper;\n    // Velocity\n    if (data.velocities.length === 0) {\n      data.velocities.push({\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n        time: data.touchStartTime\n      });\n    }\n    data.velocities.push({\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n      time: now()\n    });\n  }\n  function onTouchEnd(_ref2) {\n    let {\n      currentPos\n    } = _ref2;\n    if (swiper.params.cssMode) return;\n    const {\n      params,\n      wrapperEl,\n      rtlTranslate: rtl,\n      snapGrid,\n      touchEventsData: data\n    } = swiper;\n    // Time diff\n    const touchEndTime = now();\n    const timeDiff = touchEndTime - data.touchStartTime;\n    if (currentPos < -swiper.minTranslate()) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (currentPos > -swiper.maxTranslate()) {\n      if (swiper.slides.length < snapGrid.length) {\n        swiper.slideTo(snapGrid.length - 1);\n      } else {\n        swiper.slideTo(swiper.slides.length - 1);\n      }\n      return;\n    }\n    if (params.freeMode.momentum) {\n      if (data.velocities.length > 1) {\n        const lastMoveEvent = data.velocities.pop();\n        const velocityEvent = data.velocities.pop();\n        const distance = lastMoveEvent.position - velocityEvent.position;\n        const time = lastMoveEvent.time - velocityEvent.time;\n        swiper.velocity = distance / time;\n        swiper.velocity /= 2;\n        if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n          swiper.velocity = 0;\n        }\n        // this implies that the user stopped moving a finger then released.\n        // There would be no events with distance zero, so the last event is stale.\n        if (time > 150 || now() - lastMoveEvent.time > 300) {\n          swiper.velocity = 0;\n        }\n      } else {\n        swiper.velocity = 0;\n      }\n      swiper.velocity *= params.freeMode.momentumVelocityRatio;\n      data.velocities.length = 0;\n      let momentumDuration = 1000 * params.freeMode.momentumRatio;\n      const momentumDistance = swiper.velocity * momentumDuration;\n      let newPosition = swiper.translate + momentumDistance;\n      if (rtl) newPosition = -newPosition;\n      let doBounce = false;\n      let afterBouncePosition;\n      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n      let needsLoopFix;\n      if (newPosition < swiper.maxTranslate()) {\n        if (params.freeMode.momentumBounce) {\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n            newPosition = swiper.maxTranslate() - bounceAmount;\n          }\n          afterBouncePosition = swiper.maxTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.maxTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (newPosition > swiper.minTranslate()) {\n        if (params.freeMode.momentumBounce) {\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\n            newPosition = swiper.minTranslate() + bounceAmount;\n          }\n          afterBouncePosition = swiper.minTranslate();\n          doBounce = true;\n          data.allowMomentumBounce = true;\n        } else {\n          newPosition = swiper.minTranslate();\n        }\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\n      } else if (params.freeMode.sticky) {\n        let nextSlide;\n        for (let j = 0; j < snapGrid.length; j += 1) {\n          if (snapGrid[j] > -newPosition) {\n            nextSlide = j;\n            break;\n          }\n        }\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n          newPosition = snapGrid[nextSlide];\n        } else {\n          newPosition = snapGrid[nextSlide - 1];\n        }\n        newPosition = -newPosition;\n      }\n      if (needsLoopFix) {\n        once('transitionEnd', () => {\n          swiper.loopFix();\n        });\n      }\n      // Fix duration\n      if (swiper.velocity !== 0) {\n        if (rtl) {\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n        } else {\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n        }\n        if (params.freeMode.sticky) {\n          // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n          // It's easy to see this when simulating touch with mouse events. To fix this,\n          // limit single-slide swipes to the default slide duration. This also has the\n          // nice side effect of matching slide speed if the user stopped moving before\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n          // For faster swipes, also apply limits (albeit higher ones).\n          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n          if (moveDistance < currentSlideSize) {\n            momentumDuration = params.speed;\n          } else if (moveDistance < 2 * currentSlideSize) {\n            momentumDuration = params.speed * 1.5;\n          } else {\n            momentumDuration = params.speed * 2.5;\n          }\n        }\n      } else if (params.freeMode.sticky) {\n        swiper.slideToClosest();\n        return;\n      }\n      if (params.freeMode.momentumBounce && doBounce) {\n        swiper.updateProgress(afterBouncePosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        swiper.animating = true;\n        elementTransitionEnd(wrapperEl, () => {\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n          emit('momentumBounce');\n          swiper.setTransition(params.speed);\n          setTimeout(() => {\n            swiper.setTranslate(afterBouncePosition);\n            elementTransitionEnd(wrapperEl, () => {\n              if (!swiper || swiper.destroyed) return;\n              swiper.transitionEnd();\n            });\n          }, 0);\n        });\n      } else if (swiper.velocity) {\n        emit('_freeModeNoMomentumRelease');\n        swiper.updateProgress(newPosition);\n        swiper.setTransition(momentumDuration);\n        swiper.setTranslate(newPosition);\n        swiper.transitionStart(true, swiper.swipeDirection);\n        if (!swiper.animating) {\n          swiper.animating = true;\n          elementTransitionEnd(wrapperEl, () => {\n            if (!swiper || swiper.destroyed) return;\n            swiper.transitionEnd();\n          });\n        }\n      } else {\n        swiper.updateProgress(newPosition);\n      }\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    } else if (params.freeMode.sticky) {\n      swiper.slideToClosest();\n      return;\n    } else if (params.freeMode) {\n      emit('_freeModeNoMomentumRelease');\n    }\n    if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n      emit('_freeModeStaticRelease');\n      swiper.updateProgress();\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n  }\n  Object.assign(swiper, {\n    freeMode: {\n      onTouchStart,\n      onTouchMove,\n      onTouchEnd\n    }\n  });\n}\n\nexport { freeMode as default };\n", "function Grid(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    grid: {\n      rows: 1,\n      fill: 'column'\n    }\n  });\n  let slidesNumberEvenToRows;\n  let slidesPerRow;\n  let numFullColumns;\n  let wasMultiRow;\n  const getSpaceBetween = () => {\n    let spaceBetween = swiper.params.spaceBetween;\n    if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n      spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n    } else if (typeof spaceBetween === 'string') {\n      spaceBetween = parseFloat(spaceBetween);\n    }\n    return spaceBetween;\n  };\n  const initSlides = slides => {\n    const {\n      slidesPerView\n    } = swiper.params;\n    const {\n      rows,\n      fill\n    } = swiper.params.grid;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;\n    numFullColumns = Math.floor(slidesLength / rows);\n    if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n      slidesNumberEvenToRows = slidesLength;\n    } else {\n      slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n    }\n    if (slidesPerView !== 'auto' && fill === 'row') {\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n    }\n    slidesPerRow = slidesNumberEvenToRows / rows;\n  };\n  const unsetSlides = () => {\n    if (swiper.slides) {\n      swiper.slides.forEach(slide => {\n        if (slide.swiperSlideGridSet) {\n          slide.style.height = '';\n          slide.style[swiper.getDirectionLabel('margin-top')] = '';\n        }\n      });\n    }\n  };\n  const updateSlide = (i, slide, slides) => {\n    const {\n      slidesPerGroup\n    } = swiper.params;\n    const spaceBetween = getSpaceBetween();\n    const {\n      rows,\n      fill\n    } = swiper.params.grid;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;\n    // Set slides order\n    let newSlideOrderIndex;\n    let column;\n    let row;\n    if (fill === 'row' && slidesPerGroup > 1) {\n      const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n      const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n      const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n      row = Math.floor(slideIndexInGroup / columnsInGroup);\n      column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n      newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n      slide.style.order = newSlideOrderIndex;\n    } else if (fill === 'column') {\n      column = Math.floor(i / rows);\n      row = i - column * rows;\n      if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n        row += 1;\n        if (row >= rows) {\n          row = 0;\n          column += 1;\n        }\n      }\n    } else {\n      row = Math.floor(i / slidesPerRow);\n      column = i - row * slidesPerRow;\n    }\n    slide.row = row;\n    slide.column = column;\n    slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`;\n    slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\n    slide.swiperSlideGridSet = true;\n  };\n  const updateWrapperSize = (slideSize, snapGrid) => {\n    const {\n      centeredSlides,\n      roundLengths\n    } = swiper.params;\n    const spaceBetween = getSpaceBetween();\n    const {\n      rows\n    } = swiper.params.grid;\n    swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n    if (!swiper.params.cssMode) {\n      swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n    }\n    if (centeredSlides) {\n      const newSlidesGrid = [];\n      for (let i = 0; i < snapGrid.length; i += 1) {\n        let slidesGridItem = snapGrid[i];\n        if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n      }\n      snapGrid.splice(0, snapGrid.length);\n      snapGrid.push(...newSlidesGrid);\n    }\n  };\n  const onInit = () => {\n    wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;\n  };\n  const onUpdate = () => {\n    const {\n      params,\n      el\n    } = swiper;\n    const isMultiRow = params.grid && params.grid.rows > 1;\n    if (wasMultiRow && !isMultiRow) {\n      el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n      numFullColumns = 1;\n      swiper.emitContainerClasses();\n    } else if (!wasMultiRow && isMultiRow) {\n      el.classList.add(`${params.containerModifierClass}grid`);\n      if (params.grid.fill === 'column') {\n        el.classList.add(`${params.containerModifierClass}grid-column`);\n      }\n      swiper.emitContainerClasses();\n    }\n    wasMultiRow = isMultiRow;\n  };\n  on('init', onInit);\n  on('update', onUpdate);\n  swiper.grid = {\n    initSlides,\n    unsetSlides,\n    updateSlide,\n    updateWrapperSize\n  };\n}\n\nexport { Grid as default };\n", "function appendSlide(slides) {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  const appendElement = slideEl => {\n    if (typeof slideEl === 'string') {\n      const tempDOM = document.createElement('div');\n      tempDOM.innerHTML = slideEl;\n      slidesEl.append(tempDOM.children[0]);\n      tempDOM.innerHTML = '';\n    } else {\n      slidesEl.append(slideEl);\n    }\n  };\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) appendElement(slides[i]);\n    }\n  } else {\n    appendElement(slides);\n  }\n  swiper.recalcSlides();\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!params.observer || swiper.isElement) {\n    swiper.update();\n  }\n}\n\nfunction prependSlide(slides) {\n  const swiper = this;\n  const {\n    params,\n    activeIndex,\n    slidesEl\n  } = swiper;\n  if (params.loop) {\n    swiper.loopDestroy();\n  }\n  let newActiveIndex = activeIndex + 1;\n  const prependElement = slideEl => {\n    if (typeof slideEl === 'string') {\n      const tempDOM = document.createElement('div');\n      tempDOM.innerHTML = slideEl;\n      slidesEl.prepend(tempDOM.children[0]);\n      tempDOM.innerHTML = '';\n    } else {\n      slidesEl.prepend(slideEl);\n    }\n  };\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) prependElement(slides[i]);\n    }\n    newActiveIndex = activeIndex + slides.length;\n  } else {\n    prependElement(slides);\n  }\n  swiper.recalcSlides();\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!params.observer || swiper.isElement) {\n    swiper.update();\n  }\n  swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide(index, slides) {\n  const swiper = this;\n  const {\n    params,\n    activeIndex,\n    slidesEl\n  } = swiper;\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n    swiper.recalcSlides();\n  }\n  const baseLength = swiper.slides.length;\n  if (index <= 0) {\n    swiper.prependSlide(slides);\n    return;\n  }\n  if (index >= baseLength) {\n    swiper.appendSlide(slides);\n    return;\n  }\n  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n  const slidesBuffer = [];\n  for (let i = baseLength - 1; i >= index; i -= 1) {\n    const currentSlide = swiper.slides[i];\n    currentSlide.remove();\n    slidesBuffer.unshift(currentSlide);\n  }\n  if (typeof slides === 'object' && 'length' in slides) {\n    for (let i = 0; i < slides.length; i += 1) {\n      if (slides[i]) slidesEl.append(slides[i]);\n    }\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n  } else {\n    slidesEl.append(slides);\n  }\n  for (let i = 0; i < slidesBuffer.length; i += 1) {\n    slidesEl.append(slidesBuffer[i]);\n  }\n  swiper.recalcSlides();\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!params.observer || swiper.isElement) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n\nfunction removeSlide(slidesIndexes) {\n  const swiper = this;\n  const {\n    params,\n    activeIndex\n  } = swiper;\n  let activeIndexBuffer = activeIndex;\n  if (params.loop) {\n    activeIndexBuffer -= swiper.loopedSlides;\n    swiper.loopDestroy();\n  }\n  let newActiveIndex = activeIndexBuffer;\n  let indexToRemove;\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n    for (let i = 0; i < slidesIndexes.length; i += 1) {\n      indexToRemove = slidesIndexes[i];\n      if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    }\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  } else {\n    indexToRemove = slidesIndexes;\n    if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n    newActiveIndex = Math.max(newActiveIndex, 0);\n  }\n  swiper.recalcSlides();\n  if (params.loop) {\n    swiper.loopCreate();\n  }\n  if (!params.observer || swiper.isElement) {\n    swiper.update();\n  }\n  if (params.loop) {\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n  } else {\n    swiper.slideTo(newActiveIndex, 0, false);\n  }\n}\n\nfunction removeAllSlides() {\n  const swiper = this;\n  const slidesIndexes = [];\n  for (let i = 0; i < swiper.slides.length; i += 1) {\n    slidesIndexes.push(i);\n  }\n  swiper.removeSlide(slidesIndexes);\n}\n\nfunction Manipulation(_ref) {\n  let {\n    swiper\n  } = _ref;\n  Object.assign(swiper, {\n    appendSlide: appendSlide.bind(swiper),\n    prependSlide: prependSlide.bind(swiper),\n    addSlide: addSlide.bind(swiper),\n    removeSlide: removeSlide.bind(swiper),\n    removeAllSlides: removeAllSlides.bind(swiper)\n  });\n}\n\nexport { Manipulation as default };\n", "function effectInit(params) {\n  const {\n    effect,\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    overwriteParams,\n    perspective,\n    recreateShadows,\n    getEffectParams\n  } = params;\n  on('beforeInit', () => {\n    if (swiper.params.effect !== effect) return;\n    swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n    if (perspective && perspective()) {\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n    }\n    const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n    Object.assign(swiper.params, overwriteParamsResult);\n    Object.assign(swiper.originalParams, overwriteParamsResult);\n  });\n  on('setTranslate', () => {\n    if (swiper.params.effect !== effect) return;\n    setTranslate();\n  });\n  on('setTransition', (_s, duration) => {\n    if (swiper.params.effect !== effect) return;\n    setTransition(duration);\n  });\n  on('transitionEnd', () => {\n    if (swiper.params.effect !== effect) return;\n    if (recreateShadows) {\n      if (!getEffectParams || !getEffectParams().slideShadows) return;\n      // remove shadows\n      swiper.slides.forEach(slideEl => {\n        slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());\n      });\n      // create new one\n      recreateShadows();\n    }\n  });\n  let requireUpdateOnVirtual;\n  on('virtualUpdate', () => {\n    if (swiper.params.effect !== effect) return;\n    if (!swiper.slides.length) {\n      requireUpdateOnVirtual = true;\n    }\n    requestAnimationFrame(() => {\n      if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n        setTranslate();\n        requireUpdateOnVirtual = false;\n      }\n    });\n  });\n}\n\nexport { effectInit as e };\n", "import { g as getSlideTransformEl } from './utils.mjs';\n\nfunction effectTarget(effectParams, slideEl) {\n  const transformEl = getSlideTransformEl(slideEl);\n  if (transformEl !== slideEl) {\n    transformEl.style.backfaceVisibility = 'hidden';\n    transformEl.style['-webkit-backface-visibility'] = 'hidden';\n  }\n  return transformEl;\n}\n\nexport { effectTarget as e };\n", "import { k as elementTransitionEnd } from './utils.mjs';\n\nfunction effectVirtualTransitionEnd(_ref) {\n  let {\n    swiper,\n    duration,\n    transformElements,\n    allSlides\n  } = _ref;\n  const {\n    activeIndex\n  } = swiper;\n  const getSlide = el => {\n    if (!el.parentElement) {\n      // assume shadow root\n      const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0];\n      return slide;\n    }\n    return el.parentElement;\n  };\n  if (swiper.params.virtualTranslate && duration !== 0) {\n    let eventTriggered = false;\n    let transitionEndTarget;\n    if (allSlides) {\n      transitionEndTarget = transformElements;\n    } else {\n      transitionEndTarget = transformElements.filter(transformEl => {\n        const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\n        return swiper.getSlideIndex(el) === activeIndex;\n      });\n    }\n    transitionEndTarget.forEach(el => {\n      elementTransitionEnd(el, () => {\n        if (eventTriggered) return;\n        if (!swiper || swiper.destroyed) return;\n        eventTriggered = true;\n        swiper.animating = false;\n        const evt = new window.CustomEvent('transitionend', {\n          bubbles: true,\n          cancelable: true\n        });\n        swiper.wrapperEl.dispatchEvent(evt);\n      });\n    });\n  }\n}\n\nexport { effectVirtualTransitionEnd as e };\n", "import { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectFade(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    fadeEffect: {\n      crossFade: false\n    }\n  });\n  const setTranslate = () => {\n    const {\n      slides\n    } = swiper;\n    const params = swiper.params.fadeEffect;\n    for (let i = 0; i < slides.length; i += 1) {\n      const slideEl = swiper.slides[i];\n      const offset = slideEl.swiperSlideOffset;\n      let tx = -offset;\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n      }\n      const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\n      const targetEl = effectTarget(params, slideEl);\n      targetEl.style.opacity = slideOpacity;\n      targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n    }\n  };\n  const setTransition = duration => {\n    const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n    transformElements.forEach(el => {\n      el.style.transitionDuration = `${duration}ms`;\n    });\n    effectVirtualTransitionEnd({\n      swiper,\n      duration,\n      transformElements,\n      allSlides: true\n    });\n  };\n  effectInit({\n    effect: 'fade',\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    overwriteParams: () => ({\n      slidesPerView: 1,\n      slidesPerGroup: 1,\n      watchSlidesProgress: true,\n      spaceBetween: 0,\n      virtualTranslate: !swiper.params.cssMode\n    })\n  });\n}\n\nexport { EffectFade as default };\n", "import { e as effectInit } from '../shared/effect-init.mjs';\nimport { c as createElement, o as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCube(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    cubeEffect: {\n      slideShadows: true,\n      shadow: true,\n      shadowOffset: 20,\n      shadowScale: 0.94\n    }\n  });\n  const createSlideShadows = (slideEl, progress, isHorizontal) => {\n    let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n    let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n    if (!shadowBefore) {\n      shadowBefore = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));\n      slideEl.append(shadowBefore);\n    }\n    if (!shadowAfter) {\n      shadowAfter = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));\n      slideEl.append(shadowAfter);\n    }\n    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n  };\n  const recreateShadows = () => {\n    // create new ones\n    const isHorizontal = swiper.isHorizontal();\n    swiper.slides.forEach(slideEl => {\n      const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n      createSlideShadows(slideEl, progress, isHorizontal);\n    });\n  };\n  const setTranslate = () => {\n    const {\n      el,\n      wrapperEl,\n      slides,\n      width: swiperWidth,\n      height: swiperHeight,\n      rtlTranslate: rtl,\n      size: swiperSize,\n      browser\n    } = swiper;\n    const r = getRotateFix(swiper);\n    const params = swiper.params.cubeEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n    let wrapperRotate = 0;\n    let cubeShadowEl;\n    if (params.shadow) {\n      if (isHorizontal) {\n        cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');\n        if (!cubeShadowEl) {\n          cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n          swiper.wrapperEl.append(cubeShadowEl);\n        }\n        cubeShadowEl.style.height = `${swiperWidth}px`;\n      } else {\n        cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n        if (!cubeShadowEl) {\n          cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n          el.append(cubeShadowEl);\n        }\n      }\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      const slideEl = slides[i];\n      let slideIndex = i;\n      if (isVirtual) {\n        slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\n      }\n      let slideAngle = slideIndex * 90;\n      let round = Math.floor(slideAngle / 360);\n      if (rtl) {\n        slideAngle = -slideAngle;\n        round = Math.floor(-slideAngle / 360);\n      }\n      const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n      let tx = 0;\n      let ty = 0;\n      let tz = 0;\n      if (slideIndex % 4 === 0) {\n        tx = -round * 4 * swiperSize;\n        tz = 0;\n      } else if ((slideIndex - 1) % 4 === 0) {\n        tx = 0;\n        tz = -round * 4 * swiperSize;\n      } else if ((slideIndex - 2) % 4 === 0) {\n        tx = swiperSize + round * 4 * swiperSize;\n        tz = swiperSize;\n      } else if ((slideIndex - 3) % 4 === 0) {\n        tx = -swiperSize;\n        tz = 3 * swiperSize + swiperSize * 4 * round;\n      }\n      if (rtl) {\n        tx = -tx;\n      }\n      if (!isHorizontal) {\n        ty = tx;\n        tx = 0;\n      }\n      const transform = `rotateX(${r(isHorizontal ? 0 : -slideAngle)}deg) rotateY(${r(isHorizontal ? slideAngle : 0)}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n      if (progress <= 1 && progress > -1) {\n        wrapperRotate = slideIndex * 90 + progress * 90;\n        if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n      }\n      slideEl.style.transform = transform;\n      if (params.slideShadows) {\n        createSlideShadows(slideEl, progress, isHorizontal);\n      }\n    }\n    wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n    wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\n    if (params.shadow) {\n      if (isHorizontal) {\n        cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`;\n      } else {\n        const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n        const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n        const scale1 = params.shadowScale;\n        const scale2 = params.shadowScale / multiplier;\n        const offset = params.shadowOffset;\n        cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`;\n      }\n    }\n    const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\n    wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${r(swiper.isHorizontal() ? 0 : wrapperRotate)}deg) rotateY(${r(swiper.isHorizontal() ? -wrapperRotate : 0)}deg)`;\n    wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n  };\n  const setTransition = duration => {\n    const {\n      el,\n      slides\n    } = swiper;\n    slides.forEach(slideEl => {\n      slideEl.style.transitionDuration = `${duration}ms`;\n      slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {\n        subEl.style.transitionDuration = `${duration}ms`;\n      });\n    });\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n      const shadowEl = el.querySelector('.swiper-cube-shadow');\n      if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\n    }\n  };\n  effectInit({\n    effect: 'cube',\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    recreateShadows,\n    getEffectParams: () => swiper.params.cubeEffect,\n    perspective: () => true,\n    overwriteParams: () => ({\n      slidesPerView: 1,\n      slidesPerGroup: 1,\n      watchSlidesProgress: true,\n      resistanceRatio: 0,\n      spaceBetween: 0,\n      centeredSlides: false,\n      virtualTranslate: true\n    })\n  });\n}\n\nexport { EffectCube as default };\n", "import { g as getSlideTransformEl, c as createElement } from './utils.mjs';\n\nfunction createShadow(suffix, slideEl, side) {\n  const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;\n  const shadowContainer = getSlideTransformEl(slideEl);\n  let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);\n  if (!shadowEl) {\n    shadowEl = createElement('div', shadowClass.split(' '));\n    shadowContainer.append(shadowEl);\n  }\n  return shadowEl;\n}\n\nexport { createShadow as c };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl, o as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectFlip(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    flipEffect: {\n      slideShadows: true,\n      limitRotation: true\n    }\n  });\n  const createSlideShadows = (slideEl, progress) => {\n    let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n    let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n    if (!shadowBefore) {\n      shadowBefore = createShadow('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');\n    }\n    if (!shadowAfter) {\n      shadowAfter = createShadow('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n    }\n    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n  };\n  const recreateShadows = () => {\n    // Set shadows\n    swiper.params.flipEffect;\n    swiper.slides.forEach(slideEl => {\n      let progress = slideEl.progress;\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min(slideEl.progress, 1), -1);\n      }\n      createSlideShadows(slideEl, progress);\n    });\n  };\n  const setTranslate = () => {\n    const {\n      slides,\n      rtlTranslate: rtl\n    } = swiper;\n    const params = swiper.params.flipEffect;\n    const rotateFix = getRotateFix(swiper);\n    for (let i = 0; i < slides.length; i += 1) {\n      const slideEl = slides[i];\n      let progress = slideEl.progress;\n      if (swiper.params.flipEffect.limitRotation) {\n        progress = Math.max(Math.min(slideEl.progress, 1), -1);\n      }\n      const offset = slideEl.swiperSlideOffset;\n      const rotate = -180 * progress;\n      let rotateY = rotate;\n      let rotateX = 0;\n      let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n      let ty = 0;\n      if (!swiper.isHorizontal()) {\n        ty = tx;\n        tx = 0;\n        rotateX = -rotateY;\n        rotateY = 0;\n      } else if (rtl) {\n        rotateY = -rotateY;\n      }\n      slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n      if (params.slideShadows) {\n        createSlideShadows(slideEl, progress);\n      }\n      const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateFix(rotateX)}deg) rotateY(${rotateFix(rotateY)}deg)`;\n      const targetEl = effectTarget(params, slideEl);\n      targetEl.style.transform = transform;\n    }\n  };\n  const setTransition = duration => {\n    const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n    transformElements.forEach(el => {\n      el.style.transitionDuration = `${duration}ms`;\n      el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n        shadowEl.style.transitionDuration = `${duration}ms`;\n      });\n    });\n    effectVirtualTransitionEnd({\n      swiper,\n      duration,\n      transformElements\n    });\n  };\n  effectInit({\n    effect: 'flip',\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    recreateShadows,\n    getEffectParams: () => swiper.params.flipEffect,\n    perspective: () => true,\n    overwriteParams: () => ({\n      slidesPerView: 1,\n      slidesPerGroup: 1,\n      watchSlidesProgress: true,\n      spaceBetween: 0,\n      virtualTranslate: !swiper.params.cssMode\n    })\n  });\n}\n\nexport { EffectFlip as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { g as getSlideTransformEl, o as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCoverflow(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      scale: 1,\n      modifier: 1,\n      slideShadows: true\n    }\n  });\n  const setTranslate = () => {\n    const {\n      width: swiperWidth,\n      height: swiperHeight,\n      slides,\n      slidesSizesGrid\n    } = swiper;\n    const params = swiper.params.coverflowEffect;\n    const isHorizontal = swiper.isHorizontal();\n    const transform = swiper.translate;\n    const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n    const rotate = isHorizontal ? params.rotate : -params.rotate;\n    const translate = params.depth;\n    const r = getRotateFix(swiper);\n    // Each slide offset from center\n    for (let i = 0, length = slides.length; i < length; i += 1) {\n      const slideEl = slides[i];\n      const slideSize = slidesSizesGrid[i];\n      const slideOffset = slideEl.swiperSlideOffset;\n      const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n      const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n      // var rotateZ = 0\n      let translateZ = -translate * Math.abs(offsetMultiplier);\n      let stretch = params.stretch;\n      // Allow percentage to make a relative stretch for responsive sliders\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n        stretch = parseFloat(params.stretch) / 100 * slideSize;\n      }\n      let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n      let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n      let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n      // Fix for ultra small values\n      if (Math.abs(translateX) < 0.001) translateX = 0;\n      if (Math.abs(translateY) < 0.001) translateY = 0;\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\n      if (Math.abs(scale) < 0.001) scale = 0;\n      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${r(rotateX)}deg) rotateY(${r(rotateY)}deg) scale(${scale})`;\n      const targetEl = effectTarget(params, slideEl);\n      targetEl.style.transform = slideTransform;\n      slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n      if (params.slideShadows) {\n        // Set shadows\n        let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n        let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n        if (!shadowBeforeEl) {\n          shadowBeforeEl = createShadow('coverflow', slideEl, isHorizontal ? 'left' : 'top');\n        }\n        if (!shadowAfterEl) {\n          shadowAfterEl = createShadow('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');\n        }\n        if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n        if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n      }\n    }\n  };\n  const setTransition = duration => {\n    const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n    transformElements.forEach(el => {\n      el.style.transitionDuration = `${duration}ms`;\n      el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n        shadowEl.style.transitionDuration = `${duration}ms`;\n      });\n    });\n  };\n  effectInit({\n    effect: 'coverflow',\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    perspective: () => true,\n    overwriteParams: () => ({\n      watchSlidesProgress: true\n    })\n  });\n}\n\nexport { EffectCoverflow as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl, o as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCreative(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    creativeEffect: {\n      limitProgress: 1,\n      shadowPerProgress: false,\n      progressMultiplier: 1,\n      perspective: true,\n      prev: {\n        translate: [0, 0, 0],\n        rotate: [0, 0, 0],\n        opacity: 1,\n        scale: 1\n      },\n      next: {\n        translate: [0, 0, 0],\n        rotate: [0, 0, 0],\n        opacity: 1,\n        scale: 1\n      }\n    }\n  });\n  const getTranslateValue = value => {\n    if (typeof value === 'string') return value;\n    return `${value}px`;\n  };\n  const setTranslate = () => {\n    const {\n      slides,\n      wrapperEl,\n      slidesSizesGrid\n    } = swiper;\n    const params = swiper.params.creativeEffect;\n    const {\n      progressMultiplier: multiplier\n    } = params;\n    const isCenteredSlides = swiper.params.centeredSlides;\n    const rotateFix = getRotateFix(swiper);\n    if (isCenteredSlides) {\n      const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n      wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n    }\n    for (let i = 0; i < slides.length; i += 1) {\n      const slideEl = slides[i];\n      const slideProgress = slideEl.progress;\n      const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\n      let originalProgress = progress;\n      if (!isCenteredSlides) {\n        originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\n      }\n      const offset = slideEl.swiperSlideOffset;\n      const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n      const r = [0, 0, 0];\n      let custom = false;\n      if (!swiper.isHorizontal()) {\n        t[1] = t[0];\n        t[0] = 0;\n      }\n      let data = {\n        translate: [0, 0, 0],\n        rotate: [0, 0, 0],\n        scale: 1,\n        opacity: 1\n      };\n      if (progress < 0) {\n        data = params.next;\n        custom = true;\n      } else if (progress > 0) {\n        data = params.prev;\n        custom = true;\n      }\n      // set translate\n      t.forEach((value, index) => {\n        t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n      });\n      // set rotates\n      r.forEach((value, index) => {\n        let val = data.rotate[index] * Math.abs(progress * multiplier);\n        r[index] = val;\n      });\n      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n      const translateString = t.join(', ');\n      const rotateString = `rotateX(${rotateFix(r[0])}deg) rotateY(${rotateFix(r[1])}deg) rotateZ(${rotateFix(r[2])}deg)`;\n      const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n      const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n      const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n      // Set shadows\n      if (custom && data.shadow || !custom) {\n        let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n        if (!shadowEl && data.shadow) {\n          shadowEl = createShadow('creative', slideEl);\n        }\n        if (shadowEl) {\n          const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n          shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n        }\n      }\n      const targetEl = effectTarget(params, slideEl);\n      targetEl.style.transform = transform;\n      targetEl.style.opacity = opacityString;\n      if (data.origin) {\n        targetEl.style.transformOrigin = data.origin;\n      }\n    }\n  };\n  const setTransition = duration => {\n    const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n    transformElements.forEach(el => {\n      el.style.transitionDuration = `${duration}ms`;\n      el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n        shadowEl.style.transitionDuration = `${duration}ms`;\n      });\n    });\n    effectVirtualTransitionEnd({\n      swiper,\n      duration,\n      transformElements,\n      allSlides: true\n    });\n  };\n  effectInit({\n    effect: 'creative',\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    perspective: () => swiper.params.creativeEffect.perspective,\n    overwriteParams: () => ({\n      watchSlidesProgress: true,\n      virtualTranslate: !swiper.params.cssMode\n    })\n  });\n}\n\nexport { EffectCreative as default };\n", "import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCards(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    cardsEffect: {\n      slideShadows: true,\n      rotate: true,\n      perSlideRotate: 2,\n      perSlideOffset: 8\n    }\n  });\n  const setTranslate = () => {\n    const {\n      slides,\n      activeIndex,\n      rtlTranslate: rtl\n    } = swiper;\n    const params = swiper.params.cardsEffect;\n    const {\n      startTranslate,\n      isTouched\n    } = swiper.touchEventsData;\n    const currentTranslate = rtl ? -swiper.translate : swiper.translate;\n    for (let i = 0; i < slides.length; i += 1) {\n      const slideEl = slides[i];\n      const slideProgress = slideEl.progress;\n      const progress = Math.min(Math.max(slideProgress, -4), 4);\n      let offset = slideEl.swiperSlideOffset;\n      if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n        swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n      }\n      if (swiper.params.centeredSlides && swiper.params.cssMode) {\n        offset -= slides[0].swiperSlideOffset;\n      }\n      let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n      let tY = 0;\n      const tZ = -100 * Math.abs(progress);\n      let scale = 1;\n      let rotate = -params.perSlideRotate * progress;\n      let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n      const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n      const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n      const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n      if (isSwipeToNext || isSwipeToPrev) {\n        const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n        rotate += -28 * progress * subProgress;\n        scale += -0.5 * subProgress;\n        tXAdd += 96 * subProgress;\n        tY = `${-25 * subProgress * Math.abs(progress)}%`;\n      }\n      if (progress < 0) {\n        // next\n        tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;\n      } else if (progress > 0) {\n        // prev\n        tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`;\n      } else {\n        tX = `${tX}px`;\n      }\n      if (!swiper.isHorizontal()) {\n        const prevY = tY;\n        tY = tX;\n        tX = prevY;\n      }\n      const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n\n      /* eslint-disable */\n      const transform = `\n        translate3d(${tX}, ${tY}, ${tZ}px)\n        rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)\n        scale(${scaleString})\n      `;\n      /* eslint-enable */\n\n      if (params.slideShadows) {\n        // Set shadows\n        let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n        if (!shadowEl) {\n          shadowEl = createShadow('cards', slideEl);\n        }\n        if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n      }\n      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n      const targetEl = effectTarget(params, slideEl);\n      targetEl.style.transform = transform;\n    }\n  };\n  const setTransition = duration => {\n    const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n    transformElements.forEach(el => {\n      el.style.transitionDuration = `${duration}ms`;\n      el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n        shadowEl.style.transitionDuration = `${duration}ms`;\n      });\n    });\n    effectVirtualTransitionEnd({\n      swiper,\n      duration,\n      transformElements\n    });\n  };\n  effectInit({\n    effect: 'cards',\n    swiper,\n    on,\n    setTranslate,\n    setTransition,\n    perspective: () => true,\n    overwriteParams: () => ({\n      watchSlidesProgress: true,\n      virtualTranslate: !swiper.params.cssMode\n    })\n  });\n}\n\nexport { EffectCards as default };\n", "/**\n * Swiper 11.1.15\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: November 18, 2024\n */\n\nimport { S as Swiper } from './shared/swiper-core.mjs';\nimport Virtual from './modules/virtual.mjs';\nimport Keyboard from './modules/keyboard.mjs';\nimport Mousewheel from './modules/mousewheel.mjs';\nimport Navigation from './modules/navigation.mjs';\nimport Pagination from './modules/pagination.mjs';\nimport Scrollbar from './modules/scrollbar.mjs';\nimport Parallax from './modules/parallax.mjs';\nimport Zoom from './modules/zoom.mjs';\nimport Controller from './modules/controller.mjs';\nimport A11y from './modules/a11y.mjs';\nimport History from './modules/history.mjs';\nimport HashNavigation from './modules/hash-navigation.mjs';\nimport Autoplay from './modules/autoplay.mjs';\nimport Thumb from './modules/thumbs.mjs';\nimport freeMode from './modules/free-mode.mjs';\nimport Grid from './modules/grid.mjs';\nimport Manipulation from './modules/manipulation.mjs';\nimport EffectFade from './modules/effect-fade.mjs';\nimport EffectCube from './modules/effect-cube.mjs';\nimport EffectFlip from './modules/effect-flip.mjs';\nimport EffectCoverflow from './modules/effect-coverflow.mjs';\nimport EffectCreative from './modules/effect-creative.mjs';\nimport EffectCards from './modules/effect-cards.mjs';\n\n// Swiper Class\nconst modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\nSwiper.use(modules);\n\nexport { Swiper, Swiper as default };\n", "import \"./cart_line_component.css\";\n", "import \"./cart_lines_component.css\";\n", "import \"./chip_component.css\";\n", "import \"./collapse_button_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  showContent(e) {\n    e.preventDefault();\n    this.element.classList.add(\"c-collapse-button-active\");\n  }\n}\n", "import \"./comment_component.css\";\n", "import \"./container_component.css\";\n", "import \"./customer_card_component.css\";\n", "import \"./customer_cards_component.css\";\n", "import \"./drawer_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\nexport class Controller extends BaseController {\n  static classes = [\"open\", \"bodyOpen\"];\n  static targets = [\"panel\"];\n\n  initialize() {\n    this.opened = false;\n  }\n\n  connect() {\n    this.opened = !this.panelTarget.inert;\n    this.refreshBodyClass();\n  }\n\n  disconnect() {\n    this.opened = false;\n    this.disposeClick();\n  }\n\n  open() {\n    this.opened = true;\n    this.initClick();\n    this.element.classList.add(this.openClass);\n    this.panelTarget.inert = false;\n    this.panelTarget.scrollTop = 0;\n    this.refreshBodyClass();\n  }\n\n  close() {\n    this.opened = false;\n    this.disposeClick();\n    this.element.classList.remove(this.openClass);\n    this.panelTarget.inert = true;\n    this.refreshBodyClass();\n  }\n\n  closeAndClear() {\n    this.close();\n    setTimeout(this.clearPanel.bind(this), 300);\n  }\n\n  refreshBodyClass() {\n    this.opened = !this.panelTarget.inert;\n    if (this.opened) {\n      document.body.classList.add(this.bodyOpenClass);\n    }\n    if (\n      !document.querySelector(`[data-controller=\"drawer\"].${this.openClass}`)\n    ) {\n      document.body.classList.remove(this.bodyOpenClass);\n    }\n  }\n\n  initClick() {\n    this.onClickFn = (e) => this.onClick(e);\n    document.addEventListener(\"click\", this.onClickFn);\n  }\n\n  disposeClick() {\n    document.removeEventListener(\"click\", this.onClickFn);\n  }\n\n  onClick(e) {\n    // When clicking outside the modal, close it\n    if (e.target == this.element) {\n      this.close();\n      return;\n    }\n  }\n\n  clearPanel() {\n    this.panelTarget.innerHTML = \"\";\n  }\n}\n", "import \"./feature_table_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./footer_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./enum_radio_buttons_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"radio\", \"field\"];\n\n  connect() {\n    this.updateFields();\n  }\n\n  updateFields() {\n    const hide = ![\"movements\", \"invoice_lines\"].includes(this.exportType);\n\n    this.fieldTarget.classList.toggle(\"c-form--fieldset-hidden\", hide);\n  }\n\n  get exportType() {\n    return this.radioTargets.find((radio) => radio.checked).value;\n  }\n}\n", "import \"./fieldset_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./footer_component.css\";\n", "import \"./group_component.css\";\n", "import \"./password_field_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"input\"];\n\n  toggle() {\n    this.inputTarget.type =\n      this.inputTarget.type === \"password\" ? \"text\" : \"password\";\n  }\n}\n", "import \"./payment_setup_component.css\";\nimport { loadStripe } from \"@stripe/stripe-js/pure\";\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"message\", \"payment\"];\n  static values = {\n    stripePublicApiKey: String,\n    lockwineAddressName: String,\n    returnUrlValue: String,\n    clientSecret: String,\n    defaultValues: Object,\n    formFieldId: String,\n  };\n\n  async connect() {\n    await this.loadStripe();\n    this.initStripeElements();\n    this.mountPaymentElement();\n    this.messageTarget.innerText = \"\";\n  }\n\n  disconnect() {\n    if (this.paymentElement) {\n      this.paymentElement.destroy();\n      this.paymentElement = null;\n    }\n  }\n\n  async loadStripe() {\n    if (this.stripe) return;\n\n    loadStripe.setLoadParameters({ advancedFraudSignals: false });\n    this.stripe = await loadStripe(this.stripePublicApiKeyValue);\n  }\n\n  initStripeElements() {\n    if (this.elements) return;\n\n    this.elements = this.stripe.elements({\n      clientSecret: this.clientSecretValue,\n      appearance: this.appearance,\n    });\n  }\n\n  mountPaymentElement() {\n    this.paymentElement = this.elements.create(\"payment\", this.options);\n    this.paymentElement.mount(this.paymentTarget);\n  }\n\n  submit(e) {\n    e.preventDefault();\n\n    this.messageTarget.innerText = \"Chargement...\";\n\n    this.stripe\n      .confirmSetup({\n        elements: this.elements,\n        confirmParams: {\n          return_url: this.returnUrlValue,\n        },\n        redirect: \"if_required\",\n      })\n      .then(\n        function (result) {\n          if (result.error) {\n            this.messageTarget.innerText = result.error.message;\n          } else {\n            this.messageTarget.innerText = \"\";\n            this.formField.value = result.setupIntent.payment_method;\n            this.formField.form.submit();\n          }\n        }.bind(this)\n      );\n  }\n\n  get appearance() {\n    return {\n      theme: \"flat\",\n    };\n  }\n\n  get options() {\n    return {\n      defaultValues: {\n        billingDetails: this.defaultValuesValue,\n      },\n      business: { name: this.lockwineAddressNameValue },\n    };\n  }\n\n  get formField() {\n    return document.getElementById(this.formFieldIdValue);\n  }\n}\n", "import \"./uppy_component.css\";\nimport Uppy from \"@uppy/core\";\nimport French from \"@uppy/locales/lib/fr_FR\";\nimport DragDrop from \"@uppy/drag-drop\";\nimport XHR from \"@uppy/xhr-upload\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"file\", \"fileText\", \"uppy\", \"hiddenInput\", \"wait\"];\n  static values = {\n    acceptedFiles: String,\n    label: String,\n    uploadUrl: String,\n  };\n\n  connect() {\n    this.initUppy();\n  }\n\n  disconnect() {\n    if (this.uppy) this.uppy.destroy();\n    this.uppy = null;\n  }\n\n  initUppy() {\n    if (this.uppy) this.uppy.destroy();\n    this.uppy = new Uppy({\n      allowMultipleUploadBatches: false,\n      autoProceed: true,\n      debug: true,\n      locale: French,\n      restrictions: this.restrictions,\n    })\n      .use(DragDrop, this.dragDropConfig)\n      .use(XHR, this.xhrConfig);\n\n    this.uppy.on(\"file-added\", (file) => this.fileAdded(file));\n    this.uppy.on(\"upload\", () => this.uploadStarted());\n    this.uppy.on(\"upload-success\", (file, response) =>\n      this.fileUploaded(file, response)\n    );\n  }\n\n  hideUppy() {\n    this.uppyTarget.hidden = true;\n  }\n\n  hideWait() {\n    this.waitTarget.hidden = true;\n  }\n\n  showWait() {\n    this.waitTarget.hidden = false;\n  }\n\n  showFile() {\n    this.fileTarget.hidden = false;\n  }\n\n  resetFile() {\n    this.hiddenInputTarget.value = \"\";\n    this.hideWait();\n    this.fileTarget.hidden = true;\n    this.uppyTarget.hidden = false;\n    if (this.uppy) this.uppy.clear();\n  }\n\n  hideErrors() {\n    document.querySelectorAll(\".c-toast-variant-error\").forEach((error) => {\n      error.remove();\n    });\n  }\n\n  fileAdded() {\n    this.hideErrors();\n  }\n\n  uploadStarted() {\n    this.showWait();\n    this.hideUppy();\n  }\n\n  fileUploaded(file, response) {\n    this.file = file;\n    const data = response.body.data;\n    this.hiddenInputTarget.value = JSON.stringify(data);\n    this.fileTextTarget.innerText = file.name;\n    this.hideWait();\n    this.showFile();\n    this.hideUppy();\n  }\n\n  get restrictions() {\n    return {\n      maxNumberOfFiles: 1,\n      allowedFileTypes: this.acceptedFilesValue.split(\",\"),\n    };\n  }\n\n  get dragDropConfig() {\n    return {\n      locale: {\n        strings: Object.assign(\n          {\n            browse: \"parcourir\",\n          },\n          this.hasLabelValue ? { dropHereOr: this.labelValue } : {}\n        ),\n      },\n      height: 80,\n      target: this.uppyTarget,\n      width: \"100%\",\n    };\n  }\n\n  get xhrConfig() {\n    return {\n      endpoint: this.uploadUrlValue,\n      fieldName: \"file\",\n      headers: {\n        \"X-CSRF-Token\": this.csrfToken,\n      },\n    };\n  }\n\n  get csrfToken() {\n    const metaTag = document.querySelector(\"meta[name=csrf-token]\");\n    return metaTag ? metaTag.content : \"\";\n  }\n}\n", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\n// We're using a generic because languages have different plural rules.\n\n// eslint-disable-next-line no-use-before-define\n\nfunction insertReplacement(source, rx, replacement) {\n  const newParts = [];\n  source.forEach(chunk => {\n    // When the source contains multiple placeholders for interpolation,\n    // we should ignore chunks that are not strings, because those\n    // can be JSX objects and will be otherwise incorrectly turned into strings.\n    // Without this condition we\u2019d get this: [object Object] hello [object Object] my <button>\n    if (typeof chunk !== 'string') {\n      return newParts.push(chunk);\n    }\n    return rx[Symbol.split](chunk).forEach((raw, i, list) => {\n      if (raw !== '') {\n        newParts.push(raw);\n      }\n\n      // Interlace with the `replacement` value\n      if (i < list.length - 1) {\n        newParts.push(replacement);\n      }\n    });\n  });\n  return newParts;\n}\n\n/**\n * Takes a string with placeholder variables like `%{smart_count} file selected`\n * and replaces it with values from options `{smart_count: 5}`\n *\n * @license https://github.com/airbnb/polyglot.js/blob/master/LICENSE\n * taken from https://github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299\n *\n * @param phrase that needs interpolation, with placeholders\n * @param options with values that will be used to replace placeholders\n */\nfunction interpolate(phrase, options) {\n  const dollarRegex = /\\$/g;\n  const dollarBillsYall = '$$$$';\n  let interpolated = [phrase];\n  if (options == null) return interpolated;\n  for (const arg of Object.keys(options)) {\n    if (arg !== '_') {\n      // Ensure replacement value is escaped to prevent special $-prefixed\n      // regex replace tokens. the \"$$$$\" is needed because each \"$\" needs to\n      // be escaped with \"$\" itself, and we need two in the resulting output.\n      let replacement = options[arg];\n      if (typeof replacement === 'string') {\n        replacement = dollarRegex[Symbol.replace](replacement, dollarBillsYall);\n      }\n      // We create a new `RegExp` each time instead of using a more-efficient\n      // string replace so that the same argument can be replaced multiple times\n      // in the same phrase.\n      interpolated = insertReplacement(interpolated, new RegExp(`%\\\\{${arg}\\\\}`, 'g'), replacement);\n    }\n  }\n  return interpolated;\n}\nconst defaultOnMissingKey = key => {\n  throw new Error(`missing string: ${key}`);\n};\n\n/**\n * Translates strings with interpolation & pluralization support.\n * Extensible with custom dictionaries and pluralization functions.\n *\n * Borrows heavily from and inspired by Polyglot https://github.com/airbnb/polyglot.js,\n * basically a stripped-down version of it. Differences: pluralization functions are not hardcoded\n * and can be easily added among with dictionaries, nested objects are used for pluralization\n * as opposed to `||||` delimeter\n *\n * Usage example: `translator.translate('files_chosen', {smart_count: 3})`\n */\nvar _onMissingKey = /*#__PURE__*/_classPrivateFieldLooseKey(\"onMissingKey\");\nvar _apply = /*#__PURE__*/_classPrivateFieldLooseKey(\"apply\");\nexport default class Translator {\n  constructor(locales, _temp) {\n    let {\n      onMissingKey = defaultOnMissingKey\n    } = _temp === void 0 ? {} : _temp;\n    Object.defineProperty(this, _apply, {\n      value: _apply2\n    });\n    Object.defineProperty(this, _onMissingKey, {\n      writable: true,\n      value: void 0\n    });\n    this.locale = {\n      strings: {},\n      pluralize(n) {\n        if (n === 1) {\n          return 0;\n        }\n        return 1;\n      }\n    };\n    if (Array.isArray(locales)) {\n      locales.forEach(_classPrivateFieldLooseBase(this, _apply)[_apply], this);\n    } else {\n      _classPrivateFieldLooseBase(this, _apply)[_apply](locales);\n    }\n    _classPrivateFieldLooseBase(this, _onMissingKey)[_onMissingKey] = onMissingKey;\n  }\n  /**\n   * Public translate method\n   *\n   * @param key\n   * @param options with values that will be used later to replace placeholders in string\n   * @returns string translated (and interpolated)\n   */\n  translate(key, options) {\n    return this.translateArray(key, options).join('');\n  }\n\n  /**\n   * Get a translation and return the translated and interpolated parts as an array.\n   *\n   * @returns The translated and interpolated parts, in order.\n   */\n  translateArray(key, options) {\n    let string = this.locale.strings[key];\n    if (string == null) {\n      _classPrivateFieldLooseBase(this, _onMissingKey)[_onMissingKey](key);\n      string = key;\n    }\n    const hasPluralForms = typeof string === 'object';\n    if (hasPluralForms) {\n      if (options && typeof options.smart_count !== 'undefined') {\n        const plural = this.locale.pluralize(options.smart_count);\n        return interpolate(string[plural], options);\n      }\n      throw new Error('Attempted to use a string with plural forms, but no value was given for %{smart_count}');\n    }\n    if (typeof string !== 'string') {\n      throw new Error(`string was not a string`);\n    }\n    return interpolate(string, options);\n  }\n}\nfunction _apply2(locale) {\n  if (!(locale != null && locale.strings)) {\n    return;\n  }\n  const prevLocale = this.locale;\n  Object.assign(this.locale, {\n    strings: {\n      ...prevLocale.strings,\n      ...locale.strings\n    },\n    pluralize: locale.pluralize || prevLocale.pluralize\n  });\n}", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\n/* eslint-disable max-classes-per-file */\n/* global AggregateError */\n\nimport Translator from '@uppy/utils/lib/Translator';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\nimport ee from 'namespace-emitter';\nimport { nanoid } from 'nanoid/non-secure';\nimport throttle from 'lodash/throttle.js';\nimport DefaultStore from '@uppy/store-default';\nimport getFileType from '@uppy/utils/lib/getFileType';\nimport getFileNameAndExtension from '@uppy/utils/lib/getFileNameAndExtension';\nimport { getSafeFileId } from '@uppy/utils/lib/generateFileID';\nimport supportsUploadProgress from './supportsUploadProgress.js';\nimport getFileName from './getFileName.js';\nimport { justErrorsLogger, debugLogger } from './loggers.js';\nimport { Restricter, defaultOptions as defaultRestrictionOptions, RestrictionError } from './Restricter.js';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"4.4.4\"\n};\nimport locale from './locale.js';\n\n/**\n * ids are always `string`s, except the root folder's id can be `null`\n */\n\n/**\n * PartialTree has the following structure.\n *\n *           FolderRoot\n *         \u250C\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2510\n *     FolderNode     File\n *   \u250C\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2510\n *  File      File\n *\n * Root folder is called `PartialTreeFolderRoot`,\n * all other folders are called `PartialTreeFolderNode`, because they are \"internal nodes\".\n *\n * It's possible for `PartialTreeFolderNode` to be a leaf node if it doesn't contain any files.\n */\n\n/**\n * This is a base for a provider that does not necessarily use the Companion-assisted OAuth2 flow\n */\n\n/*\n * UnknownProviderPlugin can be any Companion plugin (such as Google Drive)\n * that uses the Companion-assisted OAuth flow.\n * As the plugins are passed around throughout Uppy we need a generic type for this.\n * It may seems like duplication, but this type safe. Changing the type of `storage`\n * will error in the `Provider` class of @uppy/companion-client and vice versa.\n *\n * Note that this is the *plugin* class, not a version of the `Provider` class.\n * `Provider` does operate on Companion plugins with `uppy.getPlugin()`.\n */\n\n/*\n * UnknownSearchProviderPlugin can be any search Companion plugin (such as Unsplash).\n * As the plugins are passed around throughout Uppy we need a generic type for this.\n * It may seems like duplication, but this type safe. Changing the type of `title`\n * will error in the `SearchProvider` class of @uppy/companion-client and vice versa.\n *\n * Note that this is the *plugin* class, not a version of the `SearchProvider` class.\n * `SearchProvider` does operate on Companion plugins with `uppy.getPlugin()`.\n */\n\n// TODO: can we use namespaces in other plugins to populate this?\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\n// The user facing type for UppyOptions used in uppy.setOptions()\n\n/** `OmitFirstArg<typeof someArray>` is the type of the returned value of `someArray.slice(1)`. */\n\nconst defaultUploadState = {\n  totalProgress: 0,\n  allowNewUpload: true,\n  error: null,\n  recoveredState: null\n};\n\n/**\n * Uppy Core module.\n * Manages plugins, state updates, acts as an event bus,\n * adds/removes files and metadata.\n */\nvar _plugins = /*#__PURE__*/_classPrivateFieldLooseKey(\"plugins\");\nvar _restricter = /*#__PURE__*/_classPrivateFieldLooseKey(\"restricter\");\nvar _storeUnsubscribe = /*#__PURE__*/_classPrivateFieldLooseKey(\"storeUnsubscribe\");\nvar _emitter = /*#__PURE__*/_classPrivateFieldLooseKey(\"emitter\");\nvar _preProcessors = /*#__PURE__*/_classPrivateFieldLooseKey(\"preProcessors\");\nvar _uploaders = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploaders\");\nvar _postProcessors = /*#__PURE__*/_classPrivateFieldLooseKey(\"postProcessors\");\nvar _informAndEmit = /*#__PURE__*/_classPrivateFieldLooseKey(\"informAndEmit\");\nvar _checkRequiredMetaFieldsOnFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkRequiredMetaFieldsOnFile\");\nvar _checkRequiredMetaFields = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkRequiredMetaFields\");\nvar _assertNewUploadAllowed = /*#__PURE__*/_classPrivateFieldLooseKey(\"assertNewUploadAllowed\");\nvar _transformFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"transformFile\");\nvar _startIfAutoProceed = /*#__PURE__*/_classPrivateFieldLooseKey(\"startIfAutoProceed\");\nvar _checkAndUpdateFileState = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkAndUpdateFileState\");\nvar _getFilesToRetry = /*#__PURE__*/_classPrivateFieldLooseKey(\"getFilesToRetry\");\nvar _doRetryAll = /*#__PURE__*/_classPrivateFieldLooseKey(\"doRetryAll\");\nvar _handleUploadProgress = /*#__PURE__*/_classPrivateFieldLooseKey(\"handleUploadProgress\");\nvar _updateTotalProgress = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateTotalProgress\");\nvar _updateTotalProgressThrottled = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateTotalProgressThrottled\");\nvar _calculateTotalProgress = /*#__PURE__*/_classPrivateFieldLooseKey(\"calculateTotalProgress\");\nvar _addListeners = /*#__PURE__*/_classPrivateFieldLooseKey(\"addListeners\");\nvar _updateOnlineStatus = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateOnlineStatus\");\nvar _requestClientById = /*#__PURE__*/_classPrivateFieldLooseKey(\"requestClientById\");\nvar _createUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"createUpload\");\nvar _getUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"getUpload\");\nvar _removeUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"removeUpload\");\nvar _runUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"runUpload\");\nexport class Uppy {\n  /**\n   * Instantiate Uppy\n   */\n  constructor(_opts) {\n    /**\n     * Run an upload. This picks up where it left off in case the upload is being restored.\n     */\n    Object.defineProperty(this, _runUpload, {\n      value: _runUpload2\n    });\n    /**\n     * Remove an upload, eg. if it has been canceled or completed.\n     *\n     */\n    Object.defineProperty(this, _removeUpload, {\n      value: _removeUpload2\n    });\n    Object.defineProperty(this, _getUpload, {\n      value: _getUpload2\n    });\n    /**\n     * Create an upload for a bunch of files.\n     *\n     */\n    Object.defineProperty(this, _createUpload, {\n      value: _createUpload2\n    });\n    /**\n     * Registers listeners for all global actions, like:\n     * `error`, `file-removed`, `upload-progress`\n     */\n    Object.defineProperty(this, _addListeners, {\n      value: _addListeners2\n    });\n    Object.defineProperty(this, _calculateTotalProgress, {\n      value: _calculateTotalProgress2\n    });\n    Object.defineProperty(this, _updateTotalProgress, {\n      value: _updateTotalProgress2\n    });\n    Object.defineProperty(this, _doRetryAll, {\n      value: _doRetryAll2\n    });\n    Object.defineProperty(this, _getFilesToRetry, {\n      value: _getFilesToRetry2\n    });\n    Object.defineProperty(this, _checkAndUpdateFileState, {\n      value: _checkAndUpdateFileState2\n    });\n    // Schedule an upload if `autoProceed` is enabled.\n    Object.defineProperty(this, _startIfAutoProceed, {\n      value: _startIfAutoProceed2\n    });\n    /**\n     * Create a file state object based on user-provided `addFile()` options.\n     */\n    Object.defineProperty(this, _transformFile, {\n      value: _transformFile2\n    });\n    Object.defineProperty(this, _assertNewUploadAllowed, {\n      value: _assertNewUploadAllowed2\n    });\n    Object.defineProperty(this, _checkRequiredMetaFields, {\n      value: _checkRequiredMetaFields2\n    });\n    Object.defineProperty(this, _checkRequiredMetaFieldsOnFile, {\n      value: _checkRequiredMetaFieldsOnFile2\n    });\n    Object.defineProperty(this, _informAndEmit, {\n      value: _informAndEmit2\n    });\n    Object.defineProperty(this, _plugins, {\n      writable: true,\n      value: Object.create(null)\n    });\n    Object.defineProperty(this, _restricter, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _storeUnsubscribe, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _emitter, {\n      writable: true,\n      value: ee()\n    });\n    Object.defineProperty(this, _preProcessors, {\n      writable: true,\n      value: new Set()\n    });\n    Object.defineProperty(this, _uploaders, {\n      writable: true,\n      value: new Set()\n    });\n    Object.defineProperty(this, _postProcessors, {\n      writable: true,\n      value: new Set()\n    });\n    this.scheduledAutoProceed = null;\n    this.wasOffline = false;\n    Object.defineProperty(this, _handleUploadProgress, {\n      writable: true,\n      value: (file, progress) => {\n        const fileInState = file ? this.getFile(file.id) : undefined;\n        if (file == null || !fileInState) {\n          this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n          return;\n        }\n        if (fileInState.progress.percentage === 100) {\n          this.log(`Not setting progress for a file that has been already uploaded: ${file.id}`);\n          return;\n        }\n        const newProgress = {\n          bytesTotal: progress.bytesTotal,\n          // bytesTotal may be null or zero; in that case we can't divide by it\n          percentage: progress.bytesTotal != null && Number.isFinite(progress.bytesTotal) && progress.bytesTotal > 0 ? Math.round(progress.bytesUploaded / progress.bytesTotal * 100) : undefined\n        };\n        if (fileInState.progress.uploadStarted != null) {\n          this.setFileState(file.id, {\n            progress: {\n              ...fileInState.progress,\n              ...newProgress,\n              bytesUploaded: progress.bytesUploaded\n            }\n          });\n        } else {\n          this.setFileState(file.id, {\n            progress: {\n              ...fileInState.progress,\n              ...newProgress\n            }\n          });\n        }\n        _classPrivateFieldLooseBase(this, _updateTotalProgressThrottled)[_updateTotalProgressThrottled]();\n      }\n    });\n    // ___Why throttle at 500ms?\n    //    - We must throttle at >250ms for superfocus in Dashboard to work well\n    //    (because animation takes 0.25s, and we want to wait for all animations to be over before refocusing).\n    //    [Practical Check]: if thottle is at 100ms, then if you are uploading a file,\n    //    and click 'ADD MORE FILES', - focus won't activate in Firefox.\n    //    - We must throttle at around >500ms to avoid performance lags.\n    //    [Practical Check] Firefox, try to upload a big file for a prolonged period of time. Laptop will start to heat up.\n    Object.defineProperty(this, _updateTotalProgressThrottled, {\n      writable: true,\n      value: throttle(() => _classPrivateFieldLooseBase(this, _updateTotalProgress)[_updateTotalProgress](), 500, {\n        leading: true,\n        trailing: true\n      })\n    });\n    Object.defineProperty(this, _updateOnlineStatus, {\n      writable: true,\n      value: this.updateOnlineStatus.bind(this)\n    });\n    // We need to store request clients by a unique ID, so we can share RequestClient instances across files\n    // this allows us to do rate limiting and synchronous operations like refreshing provider tokens\n    // example: refreshing tokens: if each file has their own requestclient,\n    // we don't have any way to synchronize all requests in order to\n    // - block all requests\n    // - refresh the token\n    // - unblock all requests and allow them to run with a the new access token\n    // back when we had a requestclient per file, once an access token expired,\n    // all 6 files would go ahead and refresh the token at the same time\n    // (calling /refresh-token up to 6 times), which will probably fail for some providers\n    Object.defineProperty(this, _requestClientById, {\n      writable: true,\n      value: new Map()\n    });\n    this.defaultLocale = locale;\n    const defaultOptions = {\n      id: 'uppy',\n      autoProceed: false,\n      allowMultipleUploadBatches: true,\n      debug: false,\n      restrictions: defaultRestrictionOptions,\n      meta: {},\n      onBeforeFileAdded: (file, files) => !Object.hasOwn(files, file.id),\n      onBeforeUpload: files => files,\n      store: new DefaultStore(),\n      logger: justErrorsLogger,\n      infoTimeout: 5000\n    };\n    const merged = {\n      ...defaultOptions,\n      ..._opts\n    };\n    // Merge default options with the ones set by user,\n    // making sure to merge restrictions too\n    this.opts = {\n      ...merged,\n      restrictions: {\n        ...defaultOptions.restrictions,\n        ...(_opts && _opts.restrictions)\n      }\n    };\n\n    // Support debug: true for backwards-compatability, unless logger is set in opts\n    // opts instead of this.opts to avoid comparing objects \u2014 we set logger: justErrorsLogger in defaultOptions\n    if (_opts && _opts.logger && _opts.debug) {\n      this.log('You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.', 'warning');\n    } else if (_opts && _opts.debug) {\n      this.opts.logger = debugLogger;\n    }\n    this.log(`Using Core v${Uppy.VERSION}`);\n    this.i18nInit();\n    this.store = this.opts.store;\n    this.setState({\n      ...defaultUploadState,\n      plugins: {},\n      files: {},\n      currentUploads: {},\n      capabilities: {\n        uploadProgress: supportsUploadProgress(),\n        individualCancellation: true,\n        resumableUploads: false\n      },\n      meta: {\n        ...this.opts.meta\n      },\n      info: []\n    });\n    _classPrivateFieldLooseBase(this, _restricter)[_restricter] = new Restricter(() => this.opts, () => this.i18n);\n    _classPrivateFieldLooseBase(this, _storeUnsubscribe)[_storeUnsubscribe] = this.store.subscribe((prevState, nextState, patch) => {\n      this.emit('state-update', prevState, nextState, patch);\n      this.updateAll(nextState);\n    });\n\n    // Exposing uppy object on window for debugging and testing\n    if (this.opts.debug && typeof window !== 'undefined') {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore Mutating the global object for debug purposes\n      window[this.opts.id] = this;\n    }\n    _classPrivateFieldLooseBase(this, _addListeners)[_addListeners]();\n  }\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].emit(event, ...args);\n  }\n  on(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].on(event, callback);\n    return this;\n  }\n  once(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].once(event, callback);\n    return this;\n  }\n  off(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].off(event, callback);\n    return this;\n  }\n\n  /**\n   * Iterate on all plugins and run `update` on them.\n   * Called each time state changes.\n   *\n   */\n  updateAll(state) {\n    this.iteratePlugins(plugin => {\n      plugin.update(state);\n    });\n  }\n\n  /**\n   * Updates state with a patch\n   */\n  setState(patch) {\n    this.store.setState(patch);\n  }\n\n  /**\n   * Returns current state.\n   */\n  getState() {\n    return this.store.getState();\n  }\n  patchFilesState(filesWithNewState) {\n    const existingFilesState = this.getState().files;\n    this.setState({\n      files: {\n        ...existingFilesState,\n        ...Object.fromEntries(Object.entries(filesWithNewState).map(_ref => {\n          let [fileID, newFileState] = _ref;\n          return [fileID, {\n            ...existingFilesState[fileID],\n            ...newFileState\n          }];\n        }))\n      }\n    });\n  }\n\n  /**\n   * Shorthand to set state for a specific file.\n   */\n  setFileState(fileID, state) {\n    if (!this.getState().files[fileID]) {\n      throw new Error(`Can\u2019t set state for ${fileID} (the file could have been removed)`);\n    }\n    this.patchFilesState({\n      [fileID]: state\n    });\n  }\n  i18nInit() {\n    const onMissingKey = key => this.log(`Missing i18n string: ${key}`, 'error');\n    const translator = new Translator([this.defaultLocale, this.opts.locale], {\n      onMissingKey\n    });\n    this.i18n = translator.translate.bind(translator);\n    this.i18nArray = translator.translateArray.bind(translator);\n    this.locale = translator.locale;\n  }\n  setOptions(newOpts) {\n    this.opts = {\n      ...this.opts,\n      ...newOpts,\n      restrictions: {\n        ...this.opts.restrictions,\n        ...(newOpts == null ? void 0 : newOpts.restrictions)\n      }\n    };\n    if (newOpts.meta) {\n      this.setMeta(newOpts.meta);\n    }\n    this.i18nInit();\n    if (newOpts.locale) {\n      this.iteratePlugins(plugin => {\n        plugin.setOptions(newOpts);\n      });\n    }\n\n    // Note: this is not the preact `setState`, it's an internal function that has the same name.\n    this.setState(undefined); // so that UI re-renders with new options\n  }\n  resetProgress() {\n    const defaultProgress = {\n      percentage: 0,\n      bytesUploaded: false,\n      uploadComplete: false,\n      uploadStarted: null\n    };\n    const files = {\n      ...this.getState().files\n    };\n    const updatedFiles = Object.create(null);\n    Object.keys(files).forEach(fileID => {\n      updatedFiles[fileID] = {\n        ...files[fileID],\n        progress: {\n          ...files[fileID].progress,\n          ...defaultProgress\n        },\n        // @ts-expect-error these typed are inserted\n        // into the namespace in their respective packages\n        // but core isn't ware of those\n        tus: undefined,\n        transloadit: undefined\n      };\n    });\n    this.setState({\n      files: updatedFiles,\n      ...defaultUploadState\n    });\n  }\n  clear() {\n    const {\n      capabilities,\n      currentUploads\n    } = this.getState();\n    if (Object.keys(currentUploads).length > 0 && !capabilities.individualCancellation) {\n      throw new Error('The installed uploader plugin does not allow removing files during an upload.');\n    }\n    this.setState({\n      ...defaultUploadState,\n      files: {}\n    });\n  }\n  addPreProcessor(fn) {\n    _classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors].add(fn);\n  }\n  removePreProcessor(fn) {\n    return _classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors].delete(fn);\n  }\n  addPostProcessor(fn) {\n    _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].add(fn);\n  }\n  removePostProcessor(fn) {\n    return _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].delete(fn);\n  }\n  addUploader(fn) {\n    _classPrivateFieldLooseBase(this, _uploaders)[_uploaders].add(fn);\n  }\n  removeUploader(fn) {\n    return _classPrivateFieldLooseBase(this, _uploaders)[_uploaders].delete(fn);\n  }\n  setMeta(data) {\n    const updatedMeta = {\n      ...this.getState().meta,\n      ...data\n    };\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    Object.keys(updatedFiles).forEach(fileID => {\n      updatedFiles[fileID] = {\n        ...updatedFiles[fileID],\n        meta: {\n          ...updatedFiles[fileID].meta,\n          ...data\n        }\n      };\n    });\n    this.log('Adding metadata:');\n    this.log(data);\n    this.setState({\n      meta: updatedMeta,\n      files: updatedFiles\n    });\n  }\n  setFileMeta(fileID, data) {\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    if (!updatedFiles[fileID]) {\n      this.log(`Was trying to set metadata for a file that has been removed: ${fileID}`);\n      return;\n    }\n    const newMeta = {\n      ...updatedFiles[fileID].meta,\n      ...data\n    };\n    updatedFiles[fileID] = {\n      ...updatedFiles[fileID],\n      meta: newMeta\n    };\n    this.setState({\n      files: updatedFiles\n    });\n  }\n\n  /**\n   * Get a file object.\n   */\n  getFile(fileID) {\n    return this.getState().files[fileID];\n  }\n\n  /**\n   * Get all files in an array.\n   */\n  getFiles() {\n    const {\n      files\n    } = this.getState();\n    return Object.values(files);\n  }\n  getFilesByIds(ids) {\n    return ids.map(id => this.getFile(id));\n  }\n  getObjectOfFilesPerState() {\n    const {\n      files: filesObject,\n      totalProgress,\n      error\n    } = this.getState();\n    const files = Object.values(filesObject);\n    const inProgressFiles = [];\n    const newFiles = [];\n    const startedFiles = [];\n    const uploadStartedFiles = [];\n    const pausedFiles = [];\n    const completeFiles = [];\n    const erroredFiles = [];\n    const inProgressNotPausedFiles = [];\n    const processingFiles = [];\n    for (const file of files) {\n      const {\n        progress\n      } = file;\n      if (!progress.uploadComplete && progress.uploadStarted) {\n        inProgressFiles.push(file);\n        if (!file.isPaused) {\n          inProgressNotPausedFiles.push(file);\n        }\n      }\n      if (!progress.uploadStarted) {\n        newFiles.push(file);\n      }\n      if (progress.uploadStarted || progress.preprocess || progress.postprocess) {\n        startedFiles.push(file);\n      }\n      if (progress.uploadStarted) {\n        uploadStartedFiles.push(file);\n      }\n      if (file.isPaused) {\n        pausedFiles.push(file);\n      }\n      if (progress.uploadComplete) {\n        completeFiles.push(file);\n      }\n      if (file.error) {\n        erroredFiles.push(file);\n      }\n      if (progress.preprocess || progress.postprocess) {\n        processingFiles.push(file);\n      }\n    }\n    return {\n      newFiles,\n      startedFiles,\n      uploadStartedFiles,\n      pausedFiles,\n      completeFiles,\n      erroredFiles,\n      inProgressFiles,\n      inProgressNotPausedFiles,\n      processingFiles,\n      isUploadStarted: uploadStartedFiles.length > 0,\n      isAllComplete: totalProgress === 100 && completeFiles.length === files.length && processingFiles.length === 0,\n      isAllErrored: !!error && erroredFiles.length === files.length,\n      isAllPaused: inProgressFiles.length !== 0 && pausedFiles.length === inProgressFiles.length,\n      isUploadInProgress: inProgressFiles.length > 0,\n      isSomeGhost: files.some(file => file.isGhost)\n    };\n  }\n  validateRestrictions(file, files) {\n    if (files === void 0) {\n      files = this.getFiles();\n    }\n    try {\n      _classPrivateFieldLooseBase(this, _restricter)[_restricter].validate(files, [file]);\n    } catch (err) {\n      return err;\n    }\n    return null;\n  }\n  validateSingleFile(file) {\n    try {\n      _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateSingleFile(file);\n    } catch (err) {\n      return err.message;\n    }\n    return null;\n  }\n  validateAggregateRestrictions(files) {\n    const existingFiles = this.getFiles();\n    try {\n      _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateAggregateRestrictions(existingFiles, files);\n    } catch (err) {\n      return err.message;\n    }\n    return null;\n  }\n  checkIfFileAlreadyExists(fileID) {\n    const {\n      files\n    } = this.getState();\n    if (files[fileID] && !files[fileID].isGhost) {\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Add a new file to `state.files`. This will run `onBeforeFileAdded`,\n   * try to guess file type in a clever way, check file against restrictions,\n   * and start an upload if `autoProceed === true`.\n   */\n  addFile(file) {\n    _classPrivateFieldLooseBase(this, _assertNewUploadAllowed)[_assertNewUploadAllowed](file);\n    const {\n      nextFilesState,\n      validFilesToAdd,\n      errors\n    } = _classPrivateFieldLooseBase(this, _checkAndUpdateFileState)[_checkAndUpdateFileState]([file]);\n    const restrictionErrors = errors.filter(error => error.isRestriction);\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](restrictionErrors);\n    if (errors.length > 0) throw errors[0];\n    this.setState({\n      files: nextFilesState\n    });\n    const [firstValidFileToAdd] = validFilesToAdd;\n    this.emit('file-added', firstValidFileToAdd);\n    this.emit('files-added', validFilesToAdd);\n    this.log(`Added file: ${firstValidFileToAdd.name}, ${firstValidFileToAdd.id}, mime type: ${firstValidFileToAdd.type}`);\n    _classPrivateFieldLooseBase(this, _startIfAutoProceed)[_startIfAutoProceed]();\n    return firstValidFileToAdd.id;\n  }\n\n  /**\n   * Add multiple files to `state.files`. See the `addFile()` documentation.\n   *\n   * If an error occurs while adding a file, it is logged and the user is notified.\n   * This is good for UI plugins, but not for programmatic use.\n   * Programmatic users should usually still use `addFile()` on individual files.\n   */\n  addFiles(fileDescriptors) {\n    _classPrivateFieldLooseBase(this, _assertNewUploadAllowed)[_assertNewUploadAllowed]();\n    const {\n      nextFilesState,\n      validFilesToAdd,\n      errors\n    } = _classPrivateFieldLooseBase(this, _checkAndUpdateFileState)[_checkAndUpdateFileState](fileDescriptors);\n    const restrictionErrors = errors.filter(error => error.isRestriction);\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](restrictionErrors);\n    const nonRestrictionErrors = errors.filter(error => !error.isRestriction);\n    if (nonRestrictionErrors.length > 0) {\n      let message = 'Multiple errors occurred while adding files:\\n';\n      nonRestrictionErrors.forEach(subError => {\n        message += `\\n * ${subError.message}`;\n      });\n      this.info({\n        message: this.i18n('addBulkFilesFailed', {\n          smart_count: nonRestrictionErrors.length\n        }),\n        details: message\n      }, 'error', this.opts.infoTimeout);\n      if (typeof AggregateError === 'function') {\n        throw new AggregateError(nonRestrictionErrors, message);\n      } else {\n        const err = new Error(message);\n        // @ts-expect-error fallback when AggregateError is not available\n        err.errors = nonRestrictionErrors;\n        throw err;\n      }\n    }\n\n    // OK, we haven't thrown an error, we can start updating state and emitting events now:\n\n    this.setState({\n      files: nextFilesState\n    });\n    validFilesToAdd.forEach(file => {\n      this.emit('file-added', file);\n    });\n    this.emit('files-added', validFilesToAdd);\n    if (validFilesToAdd.length > 5) {\n      this.log(`Added batch of ${validFilesToAdd.length} files`);\n    } else {\n      Object.values(validFilesToAdd).forEach(file => {\n        this.log(`Added file: ${file.name}\\n id: ${file.id}\\n type: ${file.type}`);\n      });\n    }\n    if (validFilesToAdd.length > 0) {\n      _classPrivateFieldLooseBase(this, _startIfAutoProceed)[_startIfAutoProceed]();\n    }\n  }\n  removeFiles(fileIDs) {\n    const {\n      files,\n      currentUploads\n    } = this.getState();\n    const updatedFiles = {\n      ...files\n    };\n    const updatedUploads = {\n      ...currentUploads\n    };\n    const removedFiles = Object.create(null);\n    fileIDs.forEach(fileID => {\n      if (files[fileID]) {\n        removedFiles[fileID] = files[fileID];\n        delete updatedFiles[fileID];\n      }\n    });\n\n    // Remove files from the `fileIDs` list in each upload.\n    function fileIsNotRemoved(uploadFileID) {\n      return removedFiles[uploadFileID] === undefined;\n    }\n    Object.keys(updatedUploads).forEach(uploadID => {\n      const newFileIDs = currentUploads[uploadID].fileIDs.filter(fileIsNotRemoved);\n\n      // Remove the upload if no files are associated with it anymore.\n      if (newFileIDs.length === 0) {\n        delete updatedUploads[uploadID];\n        return;\n      }\n      const {\n        capabilities\n      } = this.getState();\n      if (newFileIDs.length !== currentUploads[uploadID].fileIDs.length && !capabilities.individualCancellation) {\n        throw new Error('The installed uploader plugin does not allow removing files during an upload.');\n      }\n      updatedUploads[uploadID] = {\n        ...currentUploads[uploadID],\n        fileIDs: newFileIDs\n      };\n    });\n    const stateUpdate = {\n      currentUploads: updatedUploads,\n      files: updatedFiles\n    };\n\n    // If all files were removed - allow new uploads,\n    // and clear recoveredState\n    if (Object.keys(updatedFiles).length === 0) {\n      stateUpdate.allowNewUpload = true;\n      stateUpdate.error = null;\n      stateUpdate.recoveredState = null;\n    }\n    this.setState(stateUpdate);\n    _classPrivateFieldLooseBase(this, _updateTotalProgressThrottled)[_updateTotalProgressThrottled]();\n    const removedFileIDs = Object.keys(removedFiles);\n    removedFileIDs.forEach(fileID => {\n      this.emit('file-removed', removedFiles[fileID]);\n    });\n    if (removedFileIDs.length > 5) {\n      this.log(`Removed ${removedFileIDs.length} files`);\n    } else {\n      this.log(`Removed files: ${removedFileIDs.join(', ')}`);\n    }\n  }\n  removeFile(fileID) {\n    this.removeFiles([fileID]);\n  }\n  pauseResume(fileID) {\n    if (!this.getState().capabilities.resumableUploads || this.getFile(fileID).progress.uploadComplete) {\n      return undefined;\n    }\n    const file = this.getFile(fileID);\n    const wasPaused = file.isPaused || false;\n    const isPaused = !wasPaused;\n    this.setFileState(fileID, {\n      isPaused\n    });\n    this.emit('upload-pause', file, isPaused);\n    return isPaused;\n  }\n  pauseAll() {\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    const inProgressUpdatedFiles = Object.keys(updatedFiles).filter(file => {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(file => {\n      const updatedFile = {\n        ...updatedFiles[file],\n        isPaused: true\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('pause-all');\n  }\n  resumeAll() {\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    const inProgressUpdatedFiles = Object.keys(updatedFiles).filter(file => {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(file => {\n      const updatedFile = {\n        ...updatedFiles[file],\n        isPaused: false,\n        error: null\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('resume-all');\n  }\n  async retryAll() {\n    const result = await _classPrivateFieldLooseBase(this, _doRetryAll)[_doRetryAll]();\n    this.emit('complete', result);\n    return result;\n  }\n  cancelAll() {\n    this.emit('cancel-all');\n    const {\n      files\n    } = this.getState();\n    const fileIDs = Object.keys(files);\n    if (fileIDs.length) {\n      this.removeFiles(fileIDs);\n    }\n    this.setState(defaultUploadState);\n  }\n  retryUpload(fileID) {\n    this.setFileState(fileID, {\n      error: null,\n      isPaused: false\n    });\n    this.emit('upload-retry', this.getFile(fileID));\n    const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload]([fileID], {\n      forceAllowNewUpload: true // create new upload even if allowNewUpload: false\n    });\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  }\n  logout() {\n    this.iteratePlugins(plugin => {\n      var _provider;\n      ;\n      (_provider = plugin.provider) == null || _provider.logout == null || _provider.logout();\n    });\n  }\n  // eslint-disable-next-line class-methods-use-this, @typescript-eslint/explicit-module-boundary-types\n  [Symbol.for('uppy test: updateTotalProgress')]() {\n    return _classPrivateFieldLooseBase(this, _updateTotalProgress)[_updateTotalProgress]();\n  }\n  updateOnlineStatus() {\n    var _window$navigator$onL;\n    const online = (_window$navigator$onL = window.navigator.onLine) != null ? _window$navigator$onL : true;\n    if (!online) {\n      this.emit('is-offline');\n      this.info(this.i18n('noInternetConnection'), 'error', 0);\n      this.wasOffline = true;\n    } else {\n      this.emit('is-online');\n      if (this.wasOffline) {\n        this.emit('back-online');\n        this.info(this.i18n('connectedToInternet'), 'success', 3000);\n        this.wasOffline = false;\n      }\n    }\n  }\n  getID() {\n    return this.opts.id;\n  }\n\n  /**\n   * Registers a plugin with Core.\n   */\n  use(Plugin) {\n    if (typeof Plugin !== 'function') {\n      const msg = `Expected a plugin class, but got ${Plugin === null ? 'null' : typeof Plugin}.` + ' Please verify that the plugin was imported and spelled correctly.';\n      throw new TypeError(msg);\n    }\n\n    // Instantiate\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    const plugin = new Plugin(this, ...args);\n    const pluginId = plugin.id;\n    if (!pluginId) {\n      throw new Error('Your plugin must have an id');\n    }\n    if (!plugin.type) {\n      throw new Error('Your plugin must have a type');\n    }\n    const existsPluginAlready = this.getPlugin(pluginId);\n    if (existsPluginAlready) {\n      const msg = `Already found a plugin named '${existsPluginAlready.id}'. ` + `Tried to use: '${pluginId}'.\\n` + 'Uppy plugins must have unique `id` options.';\n      throw new Error(msg);\n    }\n\n    // @ts-expect-error does exist\n    if (Plugin.VERSION) {\n      // @ts-expect-error does exist\n      this.log(`Using ${pluginId} v${Plugin.VERSION}`);\n    }\n    if (plugin.type in _classPrivateFieldLooseBase(this, _plugins)[_plugins]) {\n      _classPrivateFieldLooseBase(this, _plugins)[_plugins][plugin.type].push(plugin);\n    } else {\n      _classPrivateFieldLooseBase(this, _plugins)[_plugins][plugin.type] = [plugin];\n    }\n    plugin.install();\n    this.emit('plugin-added', plugin);\n    return this;\n  }\n\n  /**\n   * Find one Plugin by name.\n   */\n  getPlugin(id) {\n    for (const plugins of Object.values(_classPrivateFieldLooseBase(this, _plugins)[_plugins])) {\n      const foundPlugin = plugins.find(plugin => plugin.id === id);\n      if (foundPlugin != null) return foundPlugin;\n    }\n    return undefined;\n  }\n  [Symbol.for('uppy test: getPlugins')](type) {\n    return _classPrivateFieldLooseBase(this, _plugins)[_plugins][type];\n  }\n\n  /**\n   * Iterate through all `use`d plugins.\n   *\n   */\n  iteratePlugins(method) {\n    Object.values(_classPrivateFieldLooseBase(this, _plugins)[_plugins]).flat(1).forEach(method);\n  }\n\n  /**\n   * Uninstall and remove a plugin.\n   *\n   * @param {object} instance The plugin instance to remove.\n   */\n  removePlugin(instance) {\n    this.log(`Removing plugin ${instance.id}`);\n    this.emit('plugin-remove', instance);\n    if (instance.uninstall) {\n      instance.uninstall();\n    }\n    const list = _classPrivateFieldLooseBase(this, _plugins)[_plugins][instance.type];\n    // list.indexOf failed here, because Vue3 converted the plugin instance\n    // to a Proxy object, which failed the strict comparison test:\n    // obj !== objProxy\n    const index = list.findIndex(item => item.id === instance.id);\n    if (index !== -1) {\n      list.splice(index, 1);\n    }\n    const state = this.getState();\n    const updatedState = {\n      plugins: {\n        ...state.plugins,\n        [instance.id]: undefined\n      }\n    };\n    this.setState(updatedState);\n  }\n\n  /**\n   * Uninstall all plugins and close down this Uppy instance.\n   */\n  destroy() {\n    this.log(`Closing Uppy instance ${this.opts.id}: removing all files and uninstalling plugins`);\n    this.cancelAll();\n    _classPrivateFieldLooseBase(this, _storeUnsubscribe)[_storeUnsubscribe]();\n    this.iteratePlugins(plugin => {\n      this.removePlugin(plugin);\n    });\n    if (typeof window !== 'undefined' && window.removeEventListener) {\n      window.removeEventListener('online', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n      window.removeEventListener('offline', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    }\n  }\n  hideInfo() {\n    const {\n      info\n    } = this.getState();\n    this.setState({\n      info: info.slice(1)\n    });\n    this.emit('info-hidden');\n  }\n\n  /**\n   * Set info message in `state.info`, so that UI plugins like `Informer`\n   * can display the message.\n   */\n  info(message, type, duration) {\n    if (type === void 0) {\n      type = 'info';\n    }\n    if (duration === void 0) {\n      duration = 3000;\n    }\n    const isComplexMessage = typeof message === 'object';\n    this.setState({\n      info: [...this.getState().info, {\n        type,\n        message: isComplexMessage ? message.message : message,\n        details: isComplexMessage ? message.details : null\n      }]\n    });\n    setTimeout(() => this.hideInfo(), duration);\n    this.emit('info-visible');\n  }\n\n  /**\n   * Passes messages to a function, provided in `opts.logger`.\n   * If `opts.logger: Uppy.debugLogger` or `opts.debug: true`, logs to the browser console.\n   */\n  log(message, type) {\n    const {\n      logger\n    } = this.opts;\n    switch (type) {\n      case 'error':\n        logger.error(message);\n        break;\n      case 'warning':\n        logger.warn(message);\n        break;\n      default:\n        logger.debug(message);\n        break;\n    }\n  }\n  registerRequestClient(id, client) {\n    _classPrivateFieldLooseBase(this, _requestClientById)[_requestClientById].set(id, client);\n  }\n\n  /** @protected */\n  getRequestClientForFile(file) {\n    if (!file.remote) throw new Error(`Tried to get RequestClient for a non-remote file ${file.id}`);\n    const requestClient = _classPrivateFieldLooseBase(this, _requestClientById)[_requestClientById].get(file.remote.requestClientId);\n    if (requestClient == null) throw new Error(`requestClientId \"${file.remote.requestClientId}\" not registered for file \"${file.id}\"`);\n    return requestClient;\n  }\n\n  /**\n   * Restore an upload by its ID.\n   */\n  restore(uploadID) {\n    this.log(`Core: attempting to restore upload \"${uploadID}\"`);\n    if (!this.getState().currentUploads[uploadID]) {\n      _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n      return Promise.reject(new Error('Nonexistent upload'));\n    }\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  }\n  [Symbol.for('uppy test: createUpload')]() {\n    // @ts-expect-error https://github.com/microsoft/TypeScript/issues/47595\n    return _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](...arguments);\n  }\n  /**\n   * Add data to an upload's result object.\n   */\n  addResultData(uploadID, data) {\n    if (!_classPrivateFieldLooseBase(this, _getUpload)[_getUpload](uploadID)) {\n      this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n      return;\n    }\n    const {\n      currentUploads\n    } = this.getState();\n    const currentUpload = {\n      ...currentUploads[uploadID],\n      result: {\n        ...currentUploads[uploadID].result,\n        ...data\n      }\n    };\n    this.setState({\n      currentUploads: {\n        ...currentUploads,\n        [uploadID]: currentUpload\n      }\n    });\n  }\n  /**\n   * Start an upload for all the files that are not currently being uploaded.\n   */\n  async upload() {\n    var _classPrivateFieldLoo;\n    if (!((_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _plugins)[_plugins]['uploader']) != null && _classPrivateFieldLoo.length)) {\n      this.log('No uploader type plugins are used', 'warning');\n    }\n    let {\n      files\n    } = this.getState();\n\n    // retry any failed files from a previous upload() call\n    const filesToRetry = _classPrivateFieldLooseBase(this, _getFilesToRetry)[_getFilesToRetry]();\n    if (filesToRetry.length > 0) {\n      const retryResult = await _classPrivateFieldLooseBase(this, _doRetryAll)[_doRetryAll](); // we don't want the complete event to fire\n\n      const hasNewFiles = this.getFiles().filter(file => file.progress.uploadStarted == null).length > 0;\n\n      // if no new files, make it idempotent and return\n      if (!hasNewFiles) {\n        this.emit('complete', retryResult);\n        return retryResult;\n      }\n      // reload files which might have  changed after retry\n      ;\n      ({\n        files\n      } = this.getState());\n    }\n\n    // If no files to retry, proceed with original upload() behavior for new files\n    const onBeforeUploadResult = this.opts.onBeforeUpload(files);\n    if (onBeforeUploadResult === false) {\n      return Promise.reject(new Error('Not starting the upload because onBeforeUpload returned false'));\n    }\n    if (onBeforeUploadResult && typeof onBeforeUploadResult === 'object') {\n      files = onBeforeUploadResult;\n      // Updating files in state, because uploader plugins receive file IDs,\n      // and then fetch the actual file object from state\n      this.setState({\n        files\n      });\n    }\n    return Promise.resolve().then(() => _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateMinNumberOfFiles(files)).catch(err => {\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([err]);\n      throw err;\n    }).then(() => {\n      if (!_classPrivateFieldLooseBase(this, _checkRequiredMetaFields)[_checkRequiredMetaFields](files)) {\n        throw new RestrictionError(this.i18n('missingRequiredMetaField'));\n      }\n    }).catch(err => {\n      // Doing this in a separate catch because we already emited and logged\n      // all the errors in `checkRequiredMetaFields` so we only throw a generic\n      // missing fields error here.\n      throw err;\n    }).then(async () => {\n      const {\n        currentUploads\n      } = this.getState();\n      // get a list of files that are currently assigned to uploads\n      const currentlyUploadingFiles = Object.values(currentUploads).flatMap(curr => curr.fileIDs);\n      const waitingFileIDs = [];\n      Object.keys(files).forEach(fileID => {\n        const file = this.getFile(fileID);\n        // if the file hasn't started uploading and hasn't already been assigned to an upload..\n        if (!file.progress.uploadStarted && currentlyUploadingFiles.indexOf(fileID) === -1) {\n          waitingFileIDs.push(file.id);\n        }\n      });\n      const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](waitingFileIDs);\n      const result = await _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n      this.emit('complete', result);\n      return result;\n    }).catch(err => {\n      this.emit('error', err);\n      this.log(err, 'error');\n      throw err;\n    });\n  }\n}\nfunction _informAndEmit2(errors) {\n  for (const error of errors) {\n    if (error.isRestriction) {\n      this.emit('restriction-failed', error.file, error);\n    } else {\n      this.emit('error', error, error.file);\n    }\n    this.log(error, 'warning');\n  }\n  const userFacingErrors = errors.filter(error => error.isUserFacing);\n\n  // don't flood the user: only show the first 4 toasts\n  const maxNumToShow = 4;\n  const firstErrors = userFacingErrors.slice(0, maxNumToShow);\n  const additionalErrors = userFacingErrors.slice(maxNumToShow);\n  firstErrors.forEach(_ref2 => {\n    let {\n      message,\n      details = ''\n    } = _ref2;\n    this.info({\n      message,\n      details\n    }, 'error', this.opts.infoTimeout);\n  });\n  if (additionalErrors.length > 0) {\n    this.info({\n      message: this.i18n('additionalRestrictionsFailed', {\n        count: additionalErrors.length\n      })\n    });\n  }\n}\nfunction _checkRequiredMetaFieldsOnFile2(file) {\n  const {\n    missingFields,\n    error\n  } = _classPrivateFieldLooseBase(this, _restricter)[_restricter].getMissingRequiredMetaFields(file);\n  if (missingFields.length > 0) {\n    this.setFileState(file.id, {\n      missingRequiredMetaFields: missingFields\n    });\n    this.log(error.message);\n    this.emit('restriction-failed', file, error);\n    return false;\n  }\n  return true;\n}\nfunction _checkRequiredMetaFields2(files) {\n  let success = true;\n  for (const file of Object.values(files)) {\n    if (!_classPrivateFieldLooseBase(this, _checkRequiredMetaFieldsOnFile)[_checkRequiredMetaFieldsOnFile](file)) {\n      success = false;\n    }\n  }\n  return success;\n}\nfunction _assertNewUploadAllowed2(file) {\n  const {\n    allowNewUpload\n  } = this.getState();\n  if (allowNewUpload === false) {\n    const error = new RestrictionError(this.i18n('noMoreFilesAllowed'), {\n      file\n    });\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([error]);\n    throw error;\n  }\n}\nfunction _transformFile2(fileDescriptorOrFile) {\n  // Uppy expects files in { name, type, size, data } format.\n  // If the actual File object is passed from input[type=file] or drag-drop,\n  // we normalize it to match Uppy file object\n  const file = fileDescriptorOrFile instanceof File ? {\n    name: fileDescriptorOrFile.name,\n    type: fileDescriptorOrFile.type,\n    size: fileDescriptorOrFile.size,\n    data: fileDescriptorOrFile\n  } : fileDescriptorOrFile;\n  const fileType = getFileType(file);\n  const fileName = getFileName(fileType, file);\n  const fileExtension = getFileNameAndExtension(fileName).extension;\n  const id = getSafeFileId(file, this.getID());\n  const meta = file.meta || {};\n  meta.name = fileName;\n  meta.type = fileType;\n\n  // `null` means the size is unknown.\n  const size = Number.isFinite(file.data.size) ? file.data.size : null;\n  return {\n    source: file.source || '',\n    id,\n    name: fileName,\n    extension: fileExtension || '',\n    meta: {\n      ...this.getState().meta,\n      ...meta\n    },\n    type: fileType,\n    data: file.data,\n    progress: {\n      percentage: 0,\n      bytesUploaded: false,\n      bytesTotal: size,\n      uploadComplete: false,\n      uploadStarted: null\n    },\n    size,\n    isGhost: false,\n    isRemote: file.isRemote || false,\n    remote: file.remote,\n    preview: file.preview\n  };\n}\nfunction _startIfAutoProceed2() {\n  if (this.opts.autoProceed && !this.scheduledAutoProceed) {\n    this.scheduledAutoProceed = setTimeout(() => {\n      this.scheduledAutoProceed = null;\n      this.upload().catch(err => {\n        if (!err.isRestriction) {\n          this.log(err.stack || err.message || err);\n        }\n      });\n    }, 4);\n  }\n}\nfunction _checkAndUpdateFileState2(filesToAdd) {\n  const {\n    files: existingFiles\n  } = this.getState();\n\n  // create a copy of the files object only once\n  const nextFilesState = {\n    ...existingFiles\n  };\n  const validFilesToAdd = [];\n  const errors = [];\n  for (const fileToAdd of filesToAdd) {\n    try {\n      var _existingFiles$newFil;\n      let newFile = _classPrivateFieldLooseBase(this, _transformFile)[_transformFile](fileToAdd);\n\n      // If a file has been recovered (Golden Retriever), but we were unable to recover its data (probably too large),\n      // users are asked to re-select these half-recovered files and then this method will be called again.\n      // In order to keep the progress, meta and everything else, we keep the existing file,\n      // but we replace `data`, and we remove `isGhost`, because the file is no longer a ghost now\n      const isGhost = (_existingFiles$newFil = existingFiles[newFile.id]) == null ? void 0 : _existingFiles$newFil.isGhost;\n      if (isGhost) {\n        const existingFileState = existingFiles[newFile.id];\n        newFile = {\n          ...existingFileState,\n          isGhost: false,\n          data: fileToAdd.data\n        };\n        this.log(`Replaced the blob in the restored ghost file: ${newFile.name}, ${newFile.id}`);\n      }\n      const onBeforeFileAddedResult = this.opts.onBeforeFileAdded(newFile, nextFilesState);\n      if (!onBeforeFileAddedResult && this.checkIfFileAlreadyExists(newFile.id)) {\n        var _newFile$name;\n        throw new RestrictionError(this.i18n('noDuplicates', {\n          fileName: (_newFile$name = newFile.name) != null ? _newFile$name : this.i18n('unnamed')\n        }), {\n          file: fileToAdd\n        });\n      }\n\n      // Pass through reselected files from Golden Retriever\n      if (onBeforeFileAddedResult === false && !isGhost) {\n        // Don\u2019t show UI info for this error, as it should be done by the developer\n        throw new RestrictionError('Cannot add the file because onBeforeFileAdded returned false.', {\n          isUserFacing: false,\n          file: fileToAdd\n        });\n      } else if (typeof onBeforeFileAddedResult === 'object' && onBeforeFileAddedResult !== null) {\n        newFile = onBeforeFileAddedResult;\n      }\n      _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateSingleFile(newFile);\n\n      // need to add it to the new local state immediately, so we can use the state to validate the next files too\n      nextFilesState[newFile.id] = newFile;\n      validFilesToAdd.push(newFile);\n    } catch (err) {\n      errors.push(err);\n    }\n  }\n  try {\n    // need to run this separately because it's much more slow, so if we run it inside the for-loop it will be very slow\n    // when many files are added\n    _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateAggregateRestrictions(Object.values(existingFiles), validFilesToAdd);\n  } catch (err) {\n    errors.push(err);\n\n    // If we have any aggregate error, don't allow adding this batch\n    return {\n      nextFilesState: existingFiles,\n      validFilesToAdd: [],\n      errors\n    };\n  }\n  return {\n    nextFilesState,\n    validFilesToAdd,\n    errors\n  };\n}\nfunction _getFilesToRetry2() {\n  const {\n    files\n  } = this.getState();\n  return Object.keys(files).filter(file => {\n    return files[file].error;\n  });\n}\nasync function _doRetryAll2() {\n  const filesToRetry = _classPrivateFieldLooseBase(this, _getFilesToRetry)[_getFilesToRetry]();\n  const updatedFiles = {\n    ...this.getState().files\n  };\n  filesToRetry.forEach(fileID => {\n    updatedFiles[fileID] = {\n      ...updatedFiles[fileID],\n      isPaused: false,\n      error: null\n    };\n  });\n  this.setState({\n    files: updatedFiles,\n    error: null\n  });\n  this.emit('retry-all', this.getFilesByIds(filesToRetry));\n  if (filesToRetry.length === 0) {\n    return {\n      successful: [],\n      failed: []\n    };\n  }\n  const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](filesToRetry, {\n    forceAllowNewUpload: true // create new upload even if allowNewUpload: false\n  });\n  return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n}\nfunction _updateTotalProgress2() {\n  var _totalProgressPercent, _totalProgressPercent2;\n  const totalProgress = _classPrivateFieldLooseBase(this, _calculateTotalProgress)[_calculateTotalProgress]();\n  let totalProgressPercent = null;\n  if (totalProgress != null) {\n    totalProgressPercent = Math.round(totalProgress * 100);\n    if (totalProgressPercent > 100) totalProgressPercent = 100;else if (totalProgressPercent < 0) totalProgressPercent = 0;\n  }\n  this.emit('progress', (_totalProgressPercent = totalProgressPercent) != null ? _totalProgressPercent : 0);\n  this.setState({\n    totalProgress: (_totalProgressPercent2 = totalProgressPercent) != null ? _totalProgressPercent2 : 0\n  });\n}\nfunction _calculateTotalProgress2() {\n  // calculate total progress, using the number of files currently uploading,\n  // between 0 and 1 and sum of individual progress of each file\n  const files = this.getFiles();\n\n  // note: also includes files that have completed uploading:\n  const filesInProgress = files.filter(file => {\n    return file.progress.uploadStarted || file.progress.preprocess || file.progress.postprocess;\n  });\n  if (filesInProgress.length === 0) {\n    return 0;\n  }\n  if (filesInProgress.every(file => file.progress.uploadComplete)) {\n    // If every uploading file is complete, and we're still getting progress, it probably means\n    // there's a bug somewhere in some progress reporting code (maybe not even our code)\n    // and we're still getting progress, so let's just assume it means a 100% progress\n    return 1;\n  }\n  const isSizedFile = file => file.progress.bytesTotal != null && file.progress.bytesTotal !== 0;\n  const sizedFilesInProgress = filesInProgress.filter(isSizedFile);\n  const unsizedFilesInProgress = filesInProgress.filter(file => !isSizedFile(file));\n  if (sizedFilesInProgress.every(file => file.progress.uploadComplete) && unsizedFilesInProgress.length > 0 && !unsizedFilesInProgress.every(file => file.progress.uploadComplete)) {\n    // we are done with uploading all files of known size, however\n    // there is at least one file with unknown size still uploading,\n    // and we cannot say anything about their progress\n    // In any case, return null because it doesn't make any sense to show a progress\n    return null;\n  }\n  const totalFilesSize = sizedFilesInProgress.reduce((acc, file) => {\n    var _file$progress$bytesT;\n    return acc + ((_file$progress$bytesT = file.progress.bytesTotal) != null ? _file$progress$bytesT : 0);\n  }, 0);\n  const totalUploadedSize = sizedFilesInProgress.reduce((acc, file) => acc + (file.progress.bytesUploaded || 0), 0);\n  return totalFilesSize === 0 ? 0 : totalUploadedSize / totalFilesSize;\n}\nfunction _addListeners2() {\n  // Type inference only works for inline functions so we have to type it again\n  const errorHandler = (error, file, response) => {\n    let errorMsg = error.message || 'Unknown error';\n    if (error.details) {\n      errorMsg += ` ${error.details}`;\n    }\n    this.setState({\n      error: errorMsg\n    });\n    if (file != null && file.id in this.getState().files) {\n      this.setFileState(file.id, {\n        error: errorMsg,\n        response\n      });\n    }\n  };\n  this.on('error', errorHandler);\n  this.on('upload-error', (file, error, response) => {\n    errorHandler(error, file, response);\n    if (typeof error === 'object' && error.message) {\n      var _file$name;\n      this.log(error.message, 'error');\n      const newError = new Error(this.i18n('failedToUpload', {\n        file: (_file$name = file == null ? void 0 : file.name) != null ? _file$name : ''\n      })); // we may want a new custom error here\n      newError.isUserFacing = true; // todo maybe don't do this with all errors?\n      newError.details = error.message;\n      if (error.details) {\n        newError.details += ` ${error.details}`;\n      }\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([newError]);\n    } else {\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([error]);\n    }\n  });\n  let uploadStalledWarningRecentlyEmitted = null;\n  this.on('upload-stalled', (error, files) => {\n    const {\n      message\n    } = error;\n    const details = files.map(file => file.meta.name).join(', ');\n    if (!uploadStalledWarningRecentlyEmitted) {\n      this.info({\n        message,\n        details\n      }, 'warning', this.opts.infoTimeout);\n      uploadStalledWarningRecentlyEmitted = setTimeout(() => {\n        uploadStalledWarningRecentlyEmitted = null;\n      }, this.opts.infoTimeout);\n    }\n    this.log(`${message} ${details}`.trim(), 'warning');\n  });\n  this.on('upload', () => {\n    this.setState({\n      error: null\n    });\n  });\n  const onUploadStarted = files => {\n    const filesFiltered = files.filter(file => {\n      const exists = file != null && this.getFile(file.id);\n      if (!exists) this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return exists;\n    });\n    const filesState = Object.fromEntries(filesFiltered.map(file => [file.id, {\n      progress: {\n        uploadStarted: Date.now(),\n        uploadComplete: false,\n        bytesUploaded: 0,\n        bytesTotal: file.size\n      }\n    }]));\n    this.patchFilesState(filesState);\n  };\n  this.on('upload-start', onUploadStarted);\n  this.on('upload-progress', _classPrivateFieldLooseBase(this, _handleUploadProgress)[_handleUploadProgress]);\n  this.on('upload-success', (file, uploadResp) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    const currentProgress = this.getFile(file.id).progress;\n    this.setFileState(file.id, {\n      progress: {\n        ...currentProgress,\n        postprocess: _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].size > 0 ? {\n          mode: 'indeterminate'\n        } : undefined,\n        uploadComplete: true,\n        percentage: 100,\n        bytesUploaded: currentProgress.bytesTotal\n      },\n      response: uploadResp,\n      uploadURL: uploadResp.uploadURL,\n      isPaused: false\n    });\n\n    // Remote providers sometimes don't tell us the file size,\n    // but we can know how many bytes we uploaded once the upload is complete.\n    if (file.size == null) {\n      this.setFileState(file.id, {\n        size: uploadResp.bytesUploaded || currentProgress.bytesTotal\n      });\n    }\n    _classPrivateFieldLooseBase(this, _updateTotalProgressThrottled)[_updateTotalProgressThrottled]();\n  });\n  this.on('preprocess-progress', (file, progress) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    this.setFileState(file.id, {\n      progress: {\n        ...this.getFile(file.id).progress,\n        preprocess: progress\n      }\n    });\n  });\n  this.on('preprocess-complete', file => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    const files = {\n      ...this.getState().files\n    };\n    files[file.id] = {\n      ...files[file.id],\n      progress: {\n        ...files[file.id].progress\n      }\n    };\n    delete files[file.id].progress.preprocess;\n    this.setState({\n      files\n    });\n  });\n  this.on('postprocess-progress', (file, progress) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    this.setFileState(file.id, {\n      progress: {\n        ...this.getState().files[file.id].progress,\n        postprocess: progress\n      }\n    });\n  });\n  this.on('postprocess-complete', file => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    const files = {\n      ...this.getState().files\n    };\n    files[file.id] = {\n      ...files[file.id],\n      progress: {\n        ...files[file.id].progress\n      }\n    };\n    delete files[file.id].progress.postprocess;\n    this.setState({\n      files\n    });\n  });\n  this.on('restored', () => {\n    // Files may have changed--ensure progress is still accurate.\n    _classPrivateFieldLooseBase(this, _updateTotalProgressThrottled)[_updateTotalProgressThrottled]();\n  });\n\n  // @ts-expect-error should fix itself when dashboard it typed (also this doesn't belong here)\n  this.on('dashboard:file-edit-complete', file => {\n    if (file) {\n      _classPrivateFieldLooseBase(this, _checkRequiredMetaFieldsOnFile)[_checkRequiredMetaFieldsOnFile](file);\n    }\n  });\n\n  // show informer if offline\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('online', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    window.addEventListener('offline', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    setTimeout(_classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus], 3000);\n  }\n}\nfunction _createUpload2(fileIDs, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  // uppy.retryAll sets this to true \u2014 when retrying we want to ignore `allowNewUpload: false`\n  const {\n    forceAllowNewUpload = false\n  } = opts;\n  const {\n    allowNewUpload,\n    currentUploads\n  } = this.getState();\n  if (!allowNewUpload && !forceAllowNewUpload) {\n    throw new Error('Cannot create a new upload: already uploading.');\n  }\n  const uploadID = nanoid();\n  this.emit('upload', uploadID, this.getFilesByIds(fileIDs));\n  this.setState({\n    allowNewUpload: this.opts.allowMultipleUploadBatches !== false && this.opts.allowMultipleUploads !== false,\n    currentUploads: {\n      ...currentUploads,\n      [uploadID]: {\n        fileIDs,\n        step: 0,\n        result: {}\n      }\n    }\n  });\n  return uploadID;\n}\nfunction _getUpload2(uploadID) {\n  const {\n    currentUploads\n  } = this.getState();\n  return currentUploads[uploadID];\n}\nfunction _removeUpload2(uploadID) {\n  const currentUploads = {\n    ...this.getState().currentUploads\n  };\n  delete currentUploads[uploadID];\n  this.setState({\n    currentUploads\n  });\n}\nasync function _runUpload2(uploadID) {\n  const getCurrentUpload = () => {\n    const {\n      currentUploads\n    } = this.getState();\n    return currentUploads[uploadID];\n  };\n  let currentUpload = getCurrentUpload();\n  const steps = [..._classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors], ..._classPrivateFieldLooseBase(this, _uploaders)[_uploaders], ..._classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors]];\n  try {\n    for (let step = currentUpload.step || 0; step < steps.length; step++) {\n      if (!currentUpload) {\n        break;\n      }\n      const fn = steps[step];\n      this.setState({\n        currentUploads: {\n          ...this.getState().currentUploads,\n          [uploadID]: {\n            ...currentUpload,\n            step\n          }\n        }\n      });\n      const {\n        fileIDs\n      } = currentUpload;\n\n      // TODO give this the `updatedUpload` object as its only parameter maybe?\n      // Otherwise when more metadata may be added to the upload this would keep getting more parameters\n      await fn(fileIDs, uploadID);\n\n      // Update currentUpload value in case it was modified asynchronously.\n      currentUpload = getCurrentUpload();\n    }\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n    throw err;\n  }\n\n  // Set result data.\n  if (currentUpload) {\n    // Mark postprocessing step as complete if necessary; this addresses a case where we might get\n    // stuck in the postprocessing UI while the upload is fully complete.\n    // If the postprocessing steps do not do any work, they may not emit postprocessing events at\n    // all, and never mark the postprocessing as complete. This is fine on its own but we\n    // introduced code in the @uppy/core upload-success handler to prepare postprocessing progress\n    // state if any postprocessors are registered. That is to avoid a \"flash of completed state\"\n    // before the postprocessing plugins can emit events.\n    //\n    // So, just in case an upload with postprocessing plugins *has* completed *without* emitting\n    // postprocessing completion, we do it instead.\n    currentUpload.fileIDs.forEach(fileID => {\n      const file = this.getFile(fileID);\n      if (file && file.progress.postprocess) {\n        this.emit('postprocess-complete', file);\n      }\n    });\n    const files = currentUpload.fileIDs.map(fileID => this.getFile(fileID));\n    const successful = files.filter(file => !file.error);\n    const failed = files.filter(file => file.error);\n    this.addResultData(uploadID, {\n      successful,\n      failed,\n      uploadID\n    });\n\n    // Update currentUpload value in case it was modified asynchronously.\n    currentUpload = getCurrentUpload();\n  }\n  // Emit completion events.\n  // This is in a separate function so that the `currentUploads` variable\n  // always refers to the latest state. In the handler right above it refers\n  // to an outdated object without the `.result` property.\n  let result;\n  if (currentUpload) {\n    result = currentUpload.result;\n    _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n  }\n  if (result == null) {\n    this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n  }\n  return result;\n}\nUppy.VERSION = packageJson.version;\nexport default Uppy;", "/* @ts-self-types=\"./index.d.ts\" */\nlet urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport let customAlphabet = (alphabet, defaultSize = 21) => {\n  return (size = defaultSize) => {\n    let id = ''\n    let i = size | 0\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\nexport let nanoid = (size = 21) => {\n  let id = ''\n  let i = size | 0\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\n", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"4.2.0\"\n};\nvar _callbacks = /*#__PURE__*/_classPrivateFieldLooseKey(\"callbacks\");\nvar _publish = /*#__PURE__*/_classPrivateFieldLooseKey(\"publish\");\n/**\n * Default store that keeps state in a simple object.\n */\nclass DefaultStore {\n  constructor() {\n    Object.defineProperty(this, _publish, {\n      value: _publish2\n    });\n    this.state = {};\n    Object.defineProperty(this, _callbacks, {\n      writable: true,\n      value: new Set()\n    });\n  }\n  getState() {\n    return this.state;\n  }\n  setState(patch) {\n    const prevState = {\n      ...this.state\n    };\n    const nextState = {\n      ...this.state,\n      ...patch\n    };\n    this.state = nextState;\n    _classPrivateFieldLooseBase(this, _publish)[_publish](prevState, nextState, patch);\n  }\n  subscribe(listener) {\n    _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].add(listener);\n    return () => {\n      _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].delete(listener);\n    };\n  }\n}\nfunction _publish2() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].forEach(listener => {\n    listener(...args);\n  });\n}\nDefaultStore.VERSION = packageJson.version;\nexport default DefaultStore;", "/**\n * Takes a full filename string and returns an object {name, extension}\n */\nexport default function getFileNameAndExtension(fullFileName) {\n  const lastDot = fullFileName.lastIndexOf('.');\n  // these count as no extension: \"no-dot\", \"trailing-dot.\"\n  if (lastDot === -1 || lastDot === fullFileName.length - 1) {\n    return {\n      name: fullFileName,\n      extension: undefined\n    };\n  }\n  return {\n    name: fullFileName.slice(0, lastDot),\n    extension: fullFileName.slice(lastDot + 1)\n  };\n}", "// ___Why not add the mime-types package?\n//    It's 19.7kB gzipped, and we only need mime types for well-known extensions (for file previews).\n// ___Where to take new extensions from?\n//    https://github.com/jshttp/mime-db/blob/master/db.json\n\nexport default {\n  __proto__: null,\n  md: 'text/markdown',\n  markdown: 'text/markdown',\n  mp4: 'video/mp4',\n  mp3: 'audio/mp3',\n  svg: 'image/svg+xml',\n  jpg: 'image/jpeg',\n  png: 'image/png',\n  webp: 'image/webp',\n  gif: 'image/gif',\n  heic: 'image/heic',\n  heif: 'image/heif',\n  yaml: 'text/yaml',\n  yml: 'text/yaml',\n  csv: 'text/csv',\n  tsv: 'text/tab-separated-values',\n  tab: 'text/tab-separated-values',\n  avi: 'video/x-msvideo',\n  mks: 'video/x-matroska',\n  mkv: 'video/x-matroska',\n  mov: 'video/quicktime',\n  dicom: 'application/dicom',\n  doc: 'application/msword',\n  msg: 'application/vnd.ms-outlook',\n  docm: 'application/vnd.ms-word.document.macroenabled.12',\n  docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  dot: 'application/msword',\n  dotm: 'application/vnd.ms-word.template.macroenabled.12',\n  dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n  xla: 'application/vnd.ms-excel',\n  xlam: 'application/vnd.ms-excel.addin.macroenabled.12',\n  xlc: 'application/vnd.ms-excel',\n  xlf: 'application/x-xliff+xml',\n  xlm: 'application/vnd.ms-excel',\n  xls: 'application/vnd.ms-excel',\n  xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n  xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',\n  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  xlt: 'application/vnd.ms-excel',\n  xltm: 'application/vnd.ms-excel.template.macroenabled.12',\n  xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n  xlw: 'application/vnd.ms-excel',\n  txt: 'text/plain',\n  text: 'text/plain',\n  conf: 'text/plain',\n  log: 'text/plain',\n  pdf: 'application/pdf',\n  zip: 'application/zip',\n  '7z': 'application/x-7z-compressed',\n  rar: 'application/x-rar-compressed',\n  tar: 'application/x-tar',\n  gz: 'application/gzip',\n  dmg: 'application/x-apple-diskimage'\n};", "import getFileNameAndExtension from './getFileNameAndExtension.js';\nimport mimeTypes from './mimeTypes.js';\nexport default function getFileType(file) {\n  var _getFileNameAndExtens;\n  if (file.type) return file.type;\n  const fileExtension = file.name ? (_getFileNameAndExtens = getFileNameAndExtension(file.name).extension) == null ? void 0 : _getFileNameAndExtens.toLowerCase() : null;\n  if (fileExtension && fileExtension in mimeTypes) {\n    // else, see if we can map extension to a mime type\n    return mimeTypes[fileExtension];\n  }\n  // if all fails, fall back to a generic byte stream type\n  return 'application/octet-stream';\n}", "import getFileType from './getFileType.js';\nfunction encodeCharacter(character) {\n  return character.charCodeAt(0).toString(32);\n}\nfunction encodeFilename(name) {\n  let suffix = '';\n  return name.replace(/[^A-Z0-9]/gi, character => {\n    suffix += `-${encodeCharacter(character)}`;\n    return '/';\n  }) + suffix;\n}\n\n/**\n * Takes a file object and turns it into fileID, by converting file.name to lowercase,\n * removing extra characters and adding type, size and lastModified\n */\nexport default function generateFileID(file, instanceId) {\n  // It's tempting to do `[items].filter(Boolean).join('-')` here, but that\n  // is slower! simple string concatenation is fast\n\n  let id = instanceId || 'uppy';\n  if (typeof file.name === 'string') {\n    id += `-${encodeFilename(file.name.toLowerCase())}`;\n  }\n  if (file.type !== undefined) {\n    id += `-${file.type}`;\n  }\n  if (file.meta && typeof file.meta.relativePath === 'string') {\n    id += `-${encodeFilename(file.meta.relativePath.toLowerCase())}`;\n  }\n  if (file.data.size !== undefined) {\n    id += `-${file.data.size}`;\n  }\n  if (file.data.lastModified !== undefined) {\n    id += `-${file.data.lastModified}`;\n  }\n  return id;\n}\n\n// If the provider has a stable, unique ID, then we can use that to identify the file.\n// Then we don't have to generate our own ID, and we can add the same file many times if needed (different path)\nfunction hasFileStableId(file) {\n  if (!file.isRemote || !file.remote) return false;\n  // These are the providers that it seems like have stable IDs for their files. The other's I haven't checked yet.\n  const stableIdProviders = new Set(['box', 'dropbox', 'drive', 'facebook', 'unsplash']);\n  return stableIdProviders.has(file.remote.provider);\n}\nexport function getSafeFileId(file, instanceId) {\n  if (hasFileStableId(file)) return file.id;\n  const fileType = getFileType(file);\n  return generateFileID({\n    ...file,\n    type: fileType\n  }, instanceId);\n}", "// Edge 15.x does not fire 'progress' events on uploads.\n// See https://github.com/transloadit/uppy/issues/945\n// And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/\nexport default function supportsUploadProgress(userAgent) {\n  // Allow passing in userAgent for tests\n  if (userAgent == null && typeof navigator !== 'undefined') {\n    // eslint-disable-next-line no-param-reassign\n    userAgent = navigator.userAgent;\n  }\n  // Assume it works because basically everything supports progress events.\n  if (!userAgent) return true;\n  const m = /Edge\\/(\\d+\\.\\d+)/.exec(userAgent);\n  if (!m) return true;\n  const edgeVersion = m[1];\n  const version = edgeVersion.split('.', 2);\n  const major = parseInt(version[0], 10);\n  const minor = parseInt(version[1], 10);\n\n  // Worked before:\n  // Edge 40.15063.0.0\n  // Microsoft EdgeHTML 15.15063\n  if (major < 15 || major === 15 && minor < 15063) {\n    return true;\n  }\n\n  // Fixed in:\n  // Microsoft EdgeHTML 18.18218\n  if (major > 18 || major === 18 && minor >= 18218) {\n    return true;\n  }\n\n  // other versions don't work.\n  return false;\n}", "export default function getFileName(fileType, fileDescriptor) {\n  if (fileDescriptor.name) {\n    return fileDescriptor.name;\n  }\n  if (fileType.split('/')[0] === 'image') {\n    return `${fileType.split('/')[0]}.${fileType.split('/')[1]}`;\n  }\n  return 'noname';\n}", "/**\n * Adds zero to strings shorter than two characters.\n */\nfunction pad(number) {\n  return number < 10 ? `0${number}` : number.toString();\n}\n\n/**\n * Returns a timestamp in the format of `hours:minutes:seconds`\n */\nexport default function getTimeStamp() {\n  const date = new Date();\n  const hours = pad(date.getHours());\n  const minutes = pad(date.getMinutes());\n  const seconds = pad(date.getSeconds());\n  return `${hours}:${minutes}:${seconds}`;\n}", "/* eslint-disable no-console */\nimport getTimeStamp from '@uppy/utils/lib/getTimeStamp';\n\n// Swallow all logs, except errors.\n// default if logger is not set or debug: false\nconst justErrorsLogger = {\n  debug: () => {},\n  warn: () => {},\n  error: function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return console.error(`[Uppy] [${getTimeStamp()}]`, ...args);\n  }\n};\n\n// Print logs to console with namespace + timestamp,\n// set by logger: Uppy.debugLogger or debug: true\nconst debugLogger = {\n  debug: function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return console.debug(`[Uppy] [${getTimeStamp()}]`, ...args);\n  },\n  warn: function () {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return console.warn(`[Uppy] [${getTimeStamp()}]`, ...args);\n  },\n  error: function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return console.error(`[Uppy] [${getTimeStamp()}]`, ...args);\n  }\n};\nexport { justErrorsLogger, debugLogger };", "/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable max-classes-per-file, class-methods-use-this */\nimport prettierBytes from '@transloadit/prettier-bytes';\n// @ts-ignore untyped\nimport match from 'mime-match';\n\n/**\n * The minimal required properties to be present from UppyFile in order to validate it.\n */\n\nconst defaultOptions = {\n  maxFileSize: null,\n  minFileSize: null,\n  maxTotalFileSize: null,\n  maxNumberOfFiles: null,\n  minNumberOfFiles: null,\n  allowedFileTypes: null,\n  requiredMetaFields: []\n};\nclass RestrictionError extends Error {\n  constructor(message, opts) {\n    var _opts$isUserFacing;\n    super(message);\n    this.isRestriction = true;\n    this.isUserFacing = (_opts$isUserFacing = opts == null ? void 0 : opts.isUserFacing) != null ? _opts$isUserFacing : true;\n    if (opts != null && opts.file) {\n      this.file = opts.file; // only some restriction errors are related to a particular file\n    }\n  }\n}\nclass Restricter {\n  constructor(getOpts, getI18n) {\n    this.getI18n = getI18n;\n    this.getOpts = () => {\n      var _opts$restrictions;\n      const opts = getOpts();\n      if (((_opts$restrictions = opts.restrictions) == null ? void 0 : _opts$restrictions.allowedFileTypes) != null && !Array.isArray(opts.restrictions.allowedFileTypes)) {\n        throw new TypeError('`restrictions.allowedFileTypes` must be an array');\n      }\n      return opts;\n    };\n  }\n\n  // Because these operations are slow, we cannot run them for every file (if we are adding multiple files)\n  validateAggregateRestrictions(existingFiles, addingFiles) {\n    const {\n      maxTotalFileSize,\n      maxNumberOfFiles\n    } = this.getOpts().restrictions;\n    if (maxNumberOfFiles) {\n      const nonGhostFiles = existingFiles.filter(f => !f.isGhost);\n      if (nonGhostFiles.length + addingFiles.length > maxNumberOfFiles) {\n        throw new RestrictionError(`${this.getI18n()('youCanOnlyUploadX', {\n          smart_count: maxNumberOfFiles\n        })}`);\n      }\n    }\n    if (maxTotalFileSize) {\n      const totalFilesSize = [...existingFiles, ...addingFiles].reduce((total, f) => {\n        var _f$size;\n        return total + ((_f$size = f.size) != null ? _f$size : 0);\n      }, 0);\n      if (totalFilesSize > maxTotalFileSize) {\n        throw new RestrictionError(this.getI18n()('aggregateExceedsSize', {\n          sizeAllowed: prettierBytes(maxTotalFileSize),\n          size: prettierBytes(totalFilesSize)\n        }));\n      }\n    }\n  }\n  validateSingleFile(file) {\n    const {\n      maxFileSize,\n      minFileSize,\n      allowedFileTypes\n    } = this.getOpts().restrictions;\n    if (allowedFileTypes) {\n      const isCorrectFileType = allowedFileTypes.some(type => {\n        // check if this is a mime-type\n        if (type.includes('/')) {\n          if (!file.type) return false;\n          return match(file.type.replace(/;.*?$/, ''), type);\n        }\n\n        // otherwise this is likely an extension\n        if (type[0] === '.' && file.extension) {\n          return file.extension.toLowerCase() === type.slice(1).toLowerCase();\n        }\n        return false;\n      });\n      if (!isCorrectFileType) {\n        const allowedFileTypesString = allowedFileTypes.join(', ');\n        throw new RestrictionError(this.getI18n()('youCanOnlyUploadFileTypes', {\n          types: allowedFileTypesString\n        }), {\n          file\n        });\n      }\n    }\n\n    // We can't check maxFileSize if the size is unknown.\n    if (maxFileSize && file.size != null && file.size > maxFileSize) {\n      var _file$name;\n      throw new RestrictionError(this.getI18n()('exceedsSize', {\n        size: prettierBytes(maxFileSize),\n        file: (_file$name = file.name) != null ? _file$name : this.getI18n()('unnamed')\n      }), {\n        file\n      });\n    }\n\n    // We can't check minFileSize if the size is unknown.\n    if (minFileSize && file.size != null && file.size < minFileSize) {\n      throw new RestrictionError(this.getI18n()('inferiorSize', {\n        size: prettierBytes(minFileSize)\n      }), {\n        file\n      });\n    }\n  }\n  validate(existingFiles, addingFiles) {\n    addingFiles.forEach(addingFile => {\n      this.validateSingleFile(addingFile);\n    });\n    this.validateAggregateRestrictions(existingFiles, addingFiles);\n  }\n  validateMinNumberOfFiles(files) {\n    const {\n      minNumberOfFiles\n    } = this.getOpts().restrictions;\n    if (minNumberOfFiles && Object.keys(files).length < minNumberOfFiles) {\n      throw new RestrictionError(this.getI18n()('youHaveToAtLeastSelectX', {\n        smart_count: minNumberOfFiles\n      }));\n    }\n  }\n  getMissingRequiredMetaFields(file) {\n    var _file$name2;\n    const error = new RestrictionError(this.getI18n()('missingRequiredMetaFieldOnFile', {\n      fileName: (_file$name2 = file.name) != null ? _file$name2 : this.getI18n()('unnamed')\n    }));\n    const {\n      requiredMetaFields\n    } = this.getOpts().restrictions;\n    const missingFields = [];\n    for (const field of requiredMetaFields) {\n      if (!Object.hasOwn(file.meta, field) || file.meta[field] === '') {\n        missingFields.push(field);\n      }\n    }\n    return {\n      missingFields,\n      error\n    };\n  }\n}\nexport { Restricter, defaultOptions, RestrictionError };", "export default {\n  strings: {\n    addBulkFilesFailed: {\n      0: 'Failed to add %{smart_count} file due to an internal error',\n      1: 'Failed to add %{smart_count} files due to internal errors'\n    },\n    youCanOnlyUploadX: {\n      0: 'You can only upload %{smart_count} file',\n      1: 'You can only upload %{smart_count} files'\n    },\n    youHaveToAtLeastSelectX: {\n      0: 'You have to select at least %{smart_count} file',\n      1: 'You have to select at least %{smart_count} files'\n    },\n    aggregateExceedsSize: 'You selected %{size} of files, but maximum allowed size is %{sizeAllowed}',\n    exceedsSize: '%{file} exceeds maximum allowed size of %{size}',\n    missingRequiredMetaField: 'Missing required meta fields',\n    missingRequiredMetaFieldOnFile: 'Missing required meta fields in %{fileName}',\n    inferiorSize: 'This file is smaller than the allowed size of %{size}',\n    youCanOnlyUploadFileTypes: 'You can only upload: %{types}',\n    noMoreFilesAllowed: 'Cannot add more files',\n    noDuplicates: \"Cannot add the duplicate file '%{fileName}', it already exists\",\n    companionError: 'Connection with Companion failed',\n    authAborted: 'Authentication aborted',\n    companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',\n    failedToUpload: 'Failed to upload %{file}',\n    noInternetConnection: 'No Internet connection',\n    connectedToInternet: 'Connected to the Internet',\n    // Strings for remote providers\n    noFilesFound: 'You have no files or folders here',\n    noSearchResults: 'Unfortunately, there are no results for this search',\n    selectX: {\n      0: 'Select %{smart_count}',\n      1: 'Select %{smart_count}'\n    },\n    allFilesFromFolderNamed: 'All files from folder %{name}',\n    openFolderNamed: 'Open folder %{name}',\n    cancel: 'Cancel',\n    logOut: 'Log out',\n    logIn: 'Log in',\n    pickFiles: 'Pick files',\n    pickPhotos: 'Pick photos',\n    filter: 'Filter',\n    resetFilter: 'Reset filter',\n    loading: 'Loading...',\n    loadedXFiles: 'Loaded %{numFiles} files',\n    authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',\n    authenticateWith: 'Connect to %{pluginName}',\n    signInWithGoogle: 'Sign in with Google',\n    searchImages: 'Search for images',\n    enterTextToSearch: 'Enter text to search for images',\n    search: 'Search',\n    resetSearch: 'Reset search',\n    emptyFolderAdded: 'No files were added from empty folder',\n    addedNumFiles: 'Added %{numFiles} file(s)',\n    folderAlreadyAdded: 'The folder \"%{folder}\" was already added',\n    folderAdded: {\n      0: 'Added %{smart_count} file from %{folder}',\n      1: 'Added %{smart_count} files from %{folder}'\n    },\n    additionalRestrictionsFailed: '%{count} additional restrictions were not fulfilled',\n    unnamed: 'Unnamed',\n    pleaseWait: 'Please wait'\n  }\n};", "/**\n * Check if an object is a DOM element. Duck-typing based on `nodeType`.\n */\nexport default function isDOMElement(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  if (!('nodeType' in obj)) return false;\n  return obj.nodeType === Node.ELEMENT_NODE;\n}", "import isDOMElement from './isDOMElement.js';\nfunction findDOMElement(element, context) {\n  if (context === void 0) {\n    context = document;\n  }\n  if (typeof element === 'string') {\n    return context.querySelector(element);\n  }\n  if (isDOMElement(element)) {\n    return element;\n  }\n  return null;\n}\nexport default findDOMElement;", "/**\n * Get the declared text direction for an element.\n */\n\nfunction getTextDirection(element) {\n  var _element;\n  // There is another way to determine text direction using getComputedStyle(), as done here:\n  // https://github.com/pencil-js/text-direction/blob/2a235ce95089b3185acec3b51313cbba921b3811/text-direction.js\n  //\n  // We do not use that approach because we are interested specifically in the _declared_ text direction.\n  // If no text direction is declared, we have to provide our own explicit text direction so our\n  // bidirectional CSS style sheets work.\n  while (element && !element.dir) {\n    // eslint-disable-next-line no-param-reassign\n    element = element.parentNode;\n  }\n  return (_element = element) == null ? void 0 : _element.dir;\n}\nexport default getTextDirection;", "/* eslint-disable class-methods-use-this */\n\n/**\n * Core plugin logic that all plugins share.\n *\n * BasePlugin does not contain DOM rendering so it can be used for plugins\n * without a user interface.\n *\n * See `Plugin` for the extended version with Preact rendering for interfaces.\n */\n\nimport Translator from '@uppy/utils/lib/Translator';\n\n/**\n * DefinePluginOpts marks all of the passed AlwaysDefinedKeys as \u201Crequired\u201D or \u201Calways defined\u201D.\n */\n\nexport default class BasePlugin {\n  constructor(uppy, opts) {\n    this.uppy = uppy;\n    this.opts = opts != null ? opts : {};\n  }\n  getPluginState() {\n    const {\n      plugins\n    } = this.uppy.getState();\n    return (plugins == null ? void 0 : plugins[this.id]) || {};\n  }\n  setPluginState(update) {\n    const {\n      plugins\n    } = this.uppy.getState();\n    this.uppy.setState({\n      plugins: {\n        ...plugins,\n        [this.id]: {\n          ...plugins[this.id],\n          ...update\n        }\n      }\n    });\n  }\n  setOptions(newOpts) {\n    this.opts = {\n      ...this.opts,\n      ...newOpts\n    };\n    this.setPluginState(undefined); // so that UI re-renders with new options\n    this.i18nInit();\n  }\n  i18nInit() {\n    const translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = translator.translate.bind(translator);\n    this.i18nArray = translator.translateArray.bind(translator);\n    this.setPluginState(undefined); // so that UI re-renders and we see the updated locale\n  }\n\n  /**\n   * Extendable methods\n   * ==================\n   * These methods are here to serve as an overview of the extendable methods as well as\n   * making them not conditional in use, such as `if (this.afterUpdate)`.\n   */\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  addTarget(plugin) {\n    throw new Error(\"Extend the addTarget method to add your plugin to another plugin's target\");\n  }\n  install() {}\n  uninstall() {}\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  update(state) {}\n\n  // Called after every state update, after everything's mounted. Debounced.\n  afterUpdate() {}\n}", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\n/* eslint-disable class-methods-use-this */\nimport { render } from 'preact';\nimport findDOMElement from '@uppy/utils/lib/findDOMElement';\nimport getTextDirection from '@uppy/utils/lib/getTextDirection';\nimport BasePlugin from './BasePlugin.js';\n/**\n * Defer a frequent call to the microtask queue.\n */\nfunction debounce(fn) {\n  let calling = null;\n  let latestArgs;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    latestArgs = args;\n    if (!calling) {\n      calling = Promise.resolve().then(() => {\n        calling = null;\n        // At this point `args` may be different from the most\n        // recent state, if multiple calls happened since this task\n        // was queued. So we use the `latestArgs`, which definitely\n        // is the most recent call.\n        return fn(...latestArgs);\n      });\n    }\n    return calling;\n  };\n}\n\n/**\n * UIPlugin is the extended version of BasePlugin to incorporate rendering with Preact.\n * Use this for plugins that need a user interface.\n *\n * For plugins without an user interface, see BasePlugin.\n */\nvar _updateUI = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateUI\");\nclass UIPlugin extends BasePlugin {\n  constructor() {\n    super(...arguments);\n    Object.defineProperty(this, _updateUI, {\n      writable: true,\n      value: void 0\n    });\n  }\n  getTargetPlugin(target // eslint-disable-line no-use-before-define\n  ) {\n    let targetPlugin;\n    if (typeof (target == null ? void 0 : target.addTarget) === 'function') {\n      // Targeting a plugin *instance*\n      targetPlugin = target;\n      if (!(targetPlugin instanceof UIPlugin)) {\n        // eslint-disable-next-line no-console\n        console.warn(new Error('The provided plugin is not an instance of UIPlugin. This is an indication of a bug with the way Uppy is bundled.', {\n          cause: {\n            targetPlugin,\n            UIPlugin\n          }\n        }));\n      }\n    } else if (typeof target === 'function') {\n      // Targeting a plugin type\n      const Target = target;\n      // Find the target plugin instance.\n      this.uppy.iteratePlugins(p => {\n        if (p instanceof Target) {\n          targetPlugin = p;\n        }\n      });\n    }\n    return targetPlugin;\n  }\n\n  /**\n   * Check if supplied `target` is a DOM element or an `object`.\n   * If it\u2019s an object \u2014 target is a plugin, and we search `plugins`\n   * for a plugin with same name and return its target.\n   */\n  mount(target,\n  // eslint-disable-line no-use-before-define\n  plugin) {\n    const callerPluginName = plugin.id;\n    const targetElement = findDOMElement(target);\n    if (targetElement) {\n      this.isTargetDOMEl = true;\n      // When target is <body> with a single <div> element,\n      // Preact thinks it\u2019s the Uppy root element in there when doing a diff,\n      // and destroys it. So we are creating a fragment (could be empty div)\n      const uppyRootElement = document.createElement('div');\n      uppyRootElement.classList.add('uppy-Root');\n\n      // API for plugins that require a synchronous rerender.\n      _classPrivateFieldLooseBase(this, _updateUI)[_updateUI] = debounce(state => {\n        // plugin could be removed, but this.rerender is debounced below,\n        // so it could still be called even after uppy.removePlugin or uppy.destroy\n        // hence the check\n        if (!this.uppy.getPlugin(this.id)) return;\n        render(this.render(state, uppyRootElement), uppyRootElement);\n        this.afterUpdate();\n      });\n      this.uppy.log(`Installing ${callerPluginName} to a DOM element '${target}'`);\n      if (this.opts.replaceTargetContent) {\n        // Doing render(h(null), targetElement), which should have been\n        // a better way, since because the component might need to do additional cleanup when it is removed,\n        // stopped working \u2014 Preact just adds null into target, not replacing\n        targetElement.innerHTML = '';\n      }\n      render(this.render(this.uppy.getState(), uppyRootElement), uppyRootElement);\n      this.el = uppyRootElement;\n      targetElement.appendChild(uppyRootElement);\n\n      // Set the text direction if the page has not defined one.\n      uppyRootElement.dir = this.opts.direction || getTextDirection(uppyRootElement) || 'ltr';\n      this.onMount();\n      return this.el;\n    }\n    const targetPlugin = this.getTargetPlugin(target);\n    if (targetPlugin) {\n      this.uppy.log(`Installing ${callerPluginName} to ${targetPlugin.id}`);\n      this.parent = targetPlugin;\n      this.el = targetPlugin.addTarget(plugin);\n      this.onMount();\n      return this.el;\n    }\n    this.uppy.log(`Not installing ${callerPluginName}`);\n    let message = `Invalid target option given to ${callerPluginName}.`;\n    if (typeof target === 'function') {\n      message += ' The given target is not a Plugin class. ' + \"Please check that you're not specifying a React Component instead of a plugin. \" + 'If you are using @uppy/* packages directly, make sure you have only 1 version of @uppy/core installed: ' + 'run `npm ls @uppy/core` on the command line and verify that all the versions match and are deduped correctly.';\n    } else {\n      message += 'If you meant to target an HTML element, please make sure that the element exists. ' + 'Check that the <script> tag initializing Uppy is right before the closing </body> tag at the end of the page. ' + '(see https://github.com/transloadit/uppy/issues/1042)\\n\\n' + 'If you meant to target a plugin, please confirm that your `import` statements or `require` calls are correct.';\n    }\n    throw new Error(message);\n  }\n\n  /**\n   * Called when plugin is mounted, whether in DOM or into another plugin.\n   * Needed because sometimes plugins are mounted separately/after `install`,\n   * so this.el and this.parent might not be available in `install`.\n   * This is the case with @uppy/react plugins, for example.\n   */\n  render(\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  state,\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  container) {\n    throw new Error('Extend the render method to add your plugin to a DOM element');\n  }\n  update(state) {\n    if (this.el != null) {\n      var _classPrivateFieldLoo, _classPrivateFieldLoo2;\n      (_classPrivateFieldLoo = (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _updateUI))[_updateUI]) == null || _classPrivateFieldLoo.call(_classPrivateFieldLoo2, state);\n    }\n  }\n  unmount() {\n    if (this.isTargetDOMEl) {\n      var _this$el;\n      (_this$el = this.el) == null || _this$el.remove();\n    }\n    this.onUnmount();\n  }\n  onMount() {}\n  onUnmount() {}\n}\nexport default UIPlugin;", "const fr_FR = {\n  strings: {},\n  pluralize(n) {\n    if (n <= 1) {\n      return 0;\n    }\n    return 1;\n  }\n};\nfr_FR.strings = {\n  addBulkFilesFailed: {\n    '0': 'L\u2019ajout de %{smart_count} fichier a \u00E9chou\u00E9 en raison d\u2019une erreur interne',\n    '1': 'L\u2019ajout de %{smart_count} fichiers a \u00E9chou\u00E9 en raison d\u2019erreurs internes'\n  },\n  addedNumFiles: '%{numFiles} fichier(s) ajout\u00E9(s)',\n  addingMoreFiles: 'Ajout de fichiers',\n  additionalRestrictionsFailed: '%{count} restrictions suppl\u00E9mentaires n\u2019ont pas \u00E9t\u00E9 respect\u00E9es',\n  addMore: 'Ajouter d\u2019autres',\n  addMoreFiles: 'Ajouter d\u2019autres fichiers',\n  aggregateExceedsSize: 'Vous avez s\u00E9lectionn\u00E9 %{size} de fichiers, mais la taille maximale autoris\u00E9e est %{sizeAllowed}',\n  allFilesFromFolderNamed: 'Tous les fichiers du dossier %{name}',\n  allowAccessDescription: 'Pour prendre des photos ou enregistrer une vid\u00E9o, veuillez autoriser l\u2019acc\u00E8s \u00E0 votre cam\u00E9ra pour ce site.',\n  allowAccessTitle: 'Veuillez autoriser l\u2019acc\u00E8s \u00E0 votre cam\u00E9ra',\n  allowAudioAccessDescription: 'Pour enregistrer de l\u2019audio, veuillez autoriser l\u2019acc\u00E8s au microphone pour ce site.',\n  allowAudioAccessTitle: 'Veuillez autoriser l\u2019acc\u00E8s au microphone',\n  aspectRatioLandscape: 'Recadrer en paysage (16:9)',\n  aspectRatioPortrait: 'Recadrer en portrait (9:16)',\n  aspectRatioSquare: 'Recadrer pour obtenir une photo carr\u00E9e',\n  authAborted: 'Authentification interrompue',\n  authenticateWith: 'Se connecter \u00E0 %{pluginName}',\n  authenticateWithTitle: 'Veuillez vous authentifier avec %{pluginName} pour s\u00E9lectionner les fichiers',\n  back: 'Retour',\n  browse: 'naviguer',\n  browseFiles: 'naviguer dans les fichiers',\n  browseFolders: 'naviguer dans les dossiers',\n  cancel: 'Annuler',\n  cancelUpload: 'Annuler le t\u00E9l\u00E9versement',\n  chooseFiles: 'Choisir des fichiers',\n  closeModal: 'Fermer la fen\u00EAtre',\n  companionError: 'Connexion \u00E0 Companion a \u00E9chou\u00E9',\n  companionUnauthorizeHint: 'Pour vous d\u00E9connecter de votre compte %{provider}, veuillez aller \u00E0 %{url}',\n  complete: 'Termin\u00E9',\n  compressedX: '%{size} \u00E9conomis\u00E9(s) par la compression',\n  compressingImages: 'Compression des images\u2026',\n  connectedToInternet: 'Connect\u00E9 \u00E0 Internet',\n  copyLink: 'Copier le lien',\n  copyLinkToClipboardFallback: 'Copier le lien ci-dessous',\n  copyLinkToClipboardSuccess: 'Lien copi\u00E9',\n  creatingAssembly: 'Pr\u00E9paration du t\u00E9l\u00E9versement\u2026',\n  creatingAssemblyFailed: 'Transloadit: Impossible de cr\u00E9er Assembly',\n  dashboardTitle: 'T\u00E9l\u00E9verseur de fichiers',\n  dashboardWindowTitle: 'Fen\u00EAtre de t\u00E9l\u00E9versement de fichiers (Appuyez sur \u00C9chap pour fermer)',\n  dataUploadedOfTotal: '%{complete} sur %{total}',\n  discardRecordedFile: 'Supprimer le fichier enregistr\u00E9',\n  done: 'Termin\u00E9',\n  dropHereOr: 'D\u00E9poser les fichiers ici ou %{browse}',\n  dropHint: 'D\u00E9posez vos fichiers ici',\n  dropPasteBoth: 'D\u00E9poser les fichiers ici, coller ou %{browse}',\n  dropPasteFiles: 'D\u00E9poser les fichiers ici, coller ou %{browse}',\n  dropPasteFolders: 'D\u00E9poser les fichiers ici, coller ou %{browse}',\n  dropPasteImportBoth: 'D\u00E9poser les fichiers ici, coller, %{browse} ou importer de',\n  dropPasteImportFiles: 'D\u00E9poser les fichiers ici, coller, %{browse} ou importer de',\n  dropPasteImportFolders: 'D\u00E9poser les fichiers ici, coller, %{browse} ou importer de',\n  editFile: 'Modifier le fichier',\n  editImage: 'Modifier l\u2019image',\n  editFileWithFilename: 'Modifier le fichier %{file}',\n  editing: 'Modification en cours de %{file}',\n  emptyFolderAdded: 'Aucun fichier n\u2019a \u00E9t\u00E9 ajout\u00E9 depuis un dossier vide',\n  encoding: 'Traitement\u2026',\n  enterCorrectUrl: 'Lien incorrect: Assurez-vous que vous entrez un lien direct vers le fichier',\n  enterTextToSearch: 'Entrez un texte pour rechercher des images',\n  enterUrlToImport: 'Entrez le lien pour importer un fichier',\n  error: 'Erreur',\n  exceedsSize: 'Le fichier %{file} d\u00E9passe la taille maximale autoris\u00E9e de %{size}',\n  failedToFetch: 'Companion a \u00E9chou\u00E9 \u00E0 r\u00E9cup\u00E9rer ce lien, assurez-vous qu\u2019il est correct',\n  failedToUpload: 'Le t\u00E9l\u00E9versement de %{file} a \u00E9chou\u00E9',\n  fileSource: 'Fichier source: %{name}',\n  filesUploadedOfTotal: {\n    '0': '%{complete} sur %{smart_count} fichier t\u00E9l\u00E9vers\u00E9',\n    '1': '%{complete} sur %{smart_count} fichiers t\u00E9l\u00E9vers\u00E9s'\n  },\n  filter: 'Filtrer',\n  finishEditingFile: 'Terminer l\u2019\u00E9dition du fichier',\n  flipHorizontal: 'Retourner horizontalement',\n  folderAdded: {\n    '0': '%{smart_count} fichier ajout\u00E9 de %{folder}',\n    '1': '%{smart_count} fichiers ajout\u00E9s de %{folder}'\n  },\n  folderAlreadyAdded: 'Le dossier \"%{folder}\" a d\u00E9j\u00E0 \u00E9t\u00E9 ajout\u00E9',\n  generatingThumbnails: 'G\u00E9n\u00E9ration des vignettes\u2026',\n  import: 'Importer',\n  importFiles: 'Importer des fichiers depuis :',\n  importFrom: 'Importer de %{name}',\n  inferiorSize: 'Ce fichier est plus petit que la taille autoris\u00E9e de %{size}',\n  loadedXFiles: 'Charg\u00E9 %{numFiles} fichiers',\n  loading: 'Chargement\u2026',\n  logOut: 'D\u00E9connexion',\n  micDisabled: 'Acc\u00E8s au micro refus\u00E9 par l\u2019utilisateur',\n  missingRequiredMetaField: 'Champ m\u00E9ta requis manquant',\n  missingRequiredMetaFieldOnFile: 'Champs m\u00E9ta requis manquants dans %{fileName}',\n  missingRequiredMetaFields: {\n    '0': 'Champ m\u00E9ta requis manquant : %{fields}.',\n    '1': 'Champs m\u00E9ta requis manquants : %{fields}.'\n  },\n  myDevice: 'Mon Appareil',\n  noAudioDescription: 'Pour enregistrer de l\u2019audio, veuillez connecter un microphone ou un autre appareil d\u2019entr\u00E9e audio',\n  noAudioTitle: 'Microphone non disponible',\n  noCameraDescription: 'Pour prendre des photos ou enregistrer une vid\u00E9o, veuillez connecter une cam\u00E9ra',\n  noDuplicates: 'Impossible d\u2019ajouter le fichier \"%{fileName}\", il existe d\u00E9j\u00E0',\n  noFilesFound: 'Vous n\u2019avez aucun fichier ou dossier ici',\n  noInternetConnection: 'Pas de connexion \u00E0 Internet',\n  noMoreFilesAllowed: 'Impossible d\u2019ajouter de nouveaux fichiers: en cours de chargement ',\n  noSearchResults: 'Malheureusement, il n\u2019y a aucun r\u00E9sultat pour cette recherche',\n  openFolderNamed: 'Ouvrir %{name}',\n  pause: 'Pause',\n  pauseUpload: 'Mettre en pause le t\u00E9l\u00E9versement',\n  paused: 'En pause',\n  poweredBy: 'Propuls\u00E9 par %{uppy}',\n  processingXFiles: {\n    '0': 'Traitement de %{smart_count} fichier',\n    '1': 'Traitement de %{smart_count} fichiers'\n  },\n  recording: 'Enregistrement',\n  recordingLength: 'Dur\u00E9e d\u2019enregistrement %{recording_length}',\n  recordingStoppedMaxSize: 'L\u2019enregistrement s\u2019est arr\u00E9t\u00E9 car la taille du fichier d\u00E9passe la limite',\n  recordVideoBtn: 'Enregistrer une vid\u00E9o',\n  recoveredAllFiles: 'Nous avons restaur\u00E9 tous les fichiers. Vous pouvez maintenant reprendre le t\u00E9l\u00E9versement.',\n  recoveredXFiles: {\n    '0': 'Nous n\u2019avons pas pu r\u00E9cup\u00E9rer enti\u00E8rement 1 fichier. Veuillez le res\u00E9lectionner et reprendre le t\u00E9l\u00E9versement.',\n    '1': 'Nous n\u2019avons pas pu r\u00E9cup\u00E9rer enti\u00E8rement %{smart_count} fichiers. Veuillez les res\u00E9lectionner et reprendre le t\u00E9l\u00E9versement.'\n  },\n  removeFile: 'Effacer le fichier %{file}',\n  resetFilter: 'R\u00E9initialiser filtre',\n  resume: 'Reprendre',\n  resumeUpload: 'Reprendre le t\u00E9l\u00E9versement',\n  retry: 'R\u00E9essayer',\n  retryUpload: 'R\u00E9essayer le t\u00E9l\u00E9versement',\n  reSelect: 'Res\u00E9lectionner',\n  save: 'Sauvegarder',\n  saveChanges: 'Sauvegarder les modifications',\n  selectFileNamed: 'S\u00E9lectionner le fichier %{name}',\n  selectX: {\n    '0': 'S\u00E9lectionner %{smart_count}',\n    '1': 'S\u00E9lectionner %{smart_count}'\n  },\n  sessionRestored: 'Session restaur\u00E9e',\n  signInWithGoogle: 'Se connecter avec Google',\n  smile: 'Souriez !',\n  startRecording: 'Commencer l\u2019enregistrement vid\u00E9o',\n  stopRecording: 'Arr\u00EAter l\u2019enregistrement vid\u00E9o',\n  streamActive: 'Stream actif',\n  streamPassive: 'Stream passif',\n  submitRecordedFile: 'Envoyer la vid\u00E9o enregistr\u00E9e',\n  takePicture: 'Prendre une photo',\n  takePictureBtn: 'Prendre une photo',\n  timedOut: 'T\u00E9l\u00E9versement bloqu\u00E9 durant %{seconds} secondes, annulation.',\n  unselectFileNamed: 'D\u00E9s\u00E9lectionner le fichier %{name}',\n  upload: 'T\u00E9l\u00E9verser',\n  uploadComplete: 'T\u00E9l\u00E9versement termin\u00E9',\n  uploadFailed: 'Le t\u00E9l\u00E9versement a \u00E9chou\u00E9',\n  uploadPaused: 'T\u00E9l\u00E9versement mis en pause',\n  uploadStalled: 'T\u00E9l\u00E9versement bloqu\u00E9 depuis %{seconds} secondes. Il est peut-\u00EAtre n\u00E9cessaire de recommencer l\u2019op\u00E9ration.',\n  uploadXFiles: {\n    '0': 'T\u00E9l\u00E9verser %{smart_count} fichier',\n    '1': 'T\u00E9l\u00E9verser %{smart_count} fichiers'\n  },\n  uploadXNewFiles: {\n    '0': 'T\u00E9l\u00E9verser +%{smart_count} fichier',\n    '1': 'T\u00E9l\u00E9verser +%{smart_count} fichiers'\n  },\n  uploading: 'T\u00E9l\u00E9versement en cours',\n  uploadingXFiles: {\n    '0': 'T\u00E9l\u00E9versement de %{smart_count} fichier',\n    '1': 'T\u00E9l\u00E9versement de %{smart_count} fichiers'\n  },\n  xFilesSelected: {\n    '0': '%{smart_count} fichier s\u00E9lectionn\u00E9',\n    '1': '%{smart_count} fichiers s\u00E9lectionn\u00E9s'\n  },\n  xMoreFilesAdded: {\n    '0': '%{smart_count} autre fichier ajout\u00E9',\n    '1': '%{smart_count} autres fichiers ajout\u00E9s'\n  },\n  xTimeLeft: '%{time} restantes',\n  youCanOnlyUploadFileTypes: 'Vous pouvez seulement t\u00E9l\u00E9verser: %{types}',\n  youCanOnlyUploadX: {\n    '0': 'Vous pouvez seulement t\u00E9l\u00E9verser %{smart_count} fichier',\n    '1': 'Vous pouvez seulement t\u00E9l\u00E9verser %{smart_count} fichiers'\n  },\n  youHaveToAtLeastSelectX: {\n    '0': 'Vous devez s\u00E9lectionner au moins %{smart_count} fichier',\n    '1': 'Vous devez s\u00E9lectionner au moins %{smart_count} fichiers'\n  }\n};\nexport default fr_FR;", "/**\n * Converts list into array\n */\nexport default Array.from;", "/**\n * Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).\n */\nexport default function isDragDropSupported() {\n  const div = document.body;\n  if (!('draggable' in div) || !('ondragstart' in div && 'ondrop' in div)) {\n    return false;\n  }\n  if (!('FormData' in window)) {\n    return false;\n  }\n  if (!('FileReader' in window)) {\n    return false;\n  }\n  return true;\n}", "/**\n * Recursive function, calls the original callback() when the directory is entirely parsed.\n */\nexport default function getFilesAndDirectoriesFromDirectory(directoryReader, oldEntries, logDropError, _ref) {\n  let {\n    onSuccess\n  } = _ref;\n  directoryReader.readEntries(entries => {\n    const newEntries = [...oldEntries, ...entries];\n    // According to the FileSystem API spec, getFilesAndDirectoriesFromDirectory()\n    // must be called until it calls the onSuccess with an empty array.\n    if (entries.length) {\n      queueMicrotask(() => {\n        getFilesAndDirectoriesFromDirectory(directoryReader, newEntries, logDropError, {\n          onSuccess\n        });\n      });\n      // Done iterating this particular directory\n    } else {\n      onSuccess(newEntries);\n    }\n  },\n  // Make sure we resolve on error anyway, it's fine if only one directory couldn't be parsed!\n  error => {\n    logDropError(error);\n    onSuccess(oldEntries);\n  });\n}", "import getFilesAndDirectoriesFromDirectory from './getFilesAndDirectoriesFromDirectory.js';\n/**\n * Polyfill for the new (experimental) getAsFileSystemHandle API (using the popular webkitGetAsEntry behind the scenes)\n * so that we can switch to the getAsFileSystemHandle API once it (hopefully) becomes standard\n */\nfunction getAsFileSystemHandleFromEntry(entry, logDropError) {\n  if (entry == null) return entry;\n  return {\n    kind:\n    // eslint-disable-next-line no-nested-ternary\n    entry.isFile ? 'file' : entry.isDirectory ? 'directory' : undefined,\n    name: entry.name,\n    getFile() {\n      return new Promise((resolve, reject) => entry.file(resolve, reject));\n    },\n    async *values() {\n      // If the file is a directory.\n      const directoryReader = entry.createReader();\n      const entries = await new Promise(resolve => {\n        getFilesAndDirectoriesFromDirectory(directoryReader, [], logDropError, {\n          onSuccess: dirEntries => resolve(dirEntries.map(file => getAsFileSystemHandleFromEntry(file, logDropError)))\n        });\n      });\n      yield* entries;\n    },\n    isSameEntry: undefined\n  };\n}\nfunction createPromiseToAddFileOrParseDirectory(entry, relativePath, lastResortFile) {\n  try {\n    if (lastResortFile === void 0) {\n      lastResortFile = undefined;\n    }\n    return async function* () {\n      const getNextRelativePath = () => `${relativePath}/${entry.name}`;\n\n      // For each dropped item, - make sure it's a file/directory, and start deepening in!\n      if (entry.kind === 'file') {\n        const file = await entry.getFile();\n        if (file != null) {\n          ;\n          file.relativePath = relativePath ? getNextRelativePath() : null;\n          yield file;\n        } else if (lastResortFile != null) yield lastResortFile;\n      } else if (entry.kind === 'directory') {\n        for await (const handle of entry.values()) {\n          // Recurse on the directory, appending the dir name to the relative path\n          yield* createPromiseToAddFileOrParseDirectory(handle, relativePath ? getNextRelativePath() : entry.name);\n        }\n      } else if (lastResortFile != null) yield lastResortFile;\n    }();\n  } catch (e) {\n    return Promise.reject(e);\n  }\n}\n\n/**\n * Load all files from data transfer, and recursively read any directories.\n * Note that IE is not supported for drag-drop, because IE doesn't support Data Transfers\n *\n * @param {DataTransfer} dataTransfer\n * @param {*} logDropError on error\n */\nexport default async function* getFilesFromDataTransfer(dataTransfer, logDropError) {\n  // Retrieving the dropped items must happen synchronously\n  // otherwise only the first item gets treated and the other ones are garbage collected.\n  // https://github.com/transloadit/uppy/pull/3998\n  const fileSystemHandles = await Promise.all(Array.from(dataTransfer.items, async item => {\n    var _fileSystemHandle;\n    let fileSystemHandle;\n\n    // TODO enable getAsFileSystemHandle API once we can get it working with subdirectories\n    // IMPORTANT: Need to check isSecureContext *before* calling getAsFileSystemHandle\n    // or else Chrome will crash when running in HTTP: https://github.com/transloadit/uppy/issues/4133\n    // if (window.isSecureContext && item.getAsFileSystemHandle != null)\n    // fileSystemHandle = await item.getAsFileSystemHandle()\n\n    // `webkitGetAsEntry` exists in all popular browsers (including non-WebKit browsers),\n    // however it may be renamed to getAsEntry() in the future, so you should code defensively, looking for both.\n    // from https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry\n    const getAsEntry = () => typeof item.getAsEntry === 'function' ? item.getAsEntry() : item.webkitGetAsEntry();\n    // eslint-disable-next-line prefer-const\n    (_fileSystemHandle = fileSystemHandle) != null ? _fileSystemHandle : fileSystemHandle = getAsFileSystemHandleFromEntry(getAsEntry(), logDropError);\n    return {\n      fileSystemHandle,\n      lastResortFile: item.getAsFile() // can be used as a fallback in case other methods fail\n    };\n  }));\n  for (const {\n    lastResortFile,\n    fileSystemHandle\n  } of fileSystemHandles) {\n    // fileSystemHandle and lastResortFile can be null when we drop an url.\n    if (fileSystemHandle != null) {\n      try {\n        yield* createPromiseToAddFileOrParseDirectory(fileSystemHandle, '', lastResortFile);\n      } catch (err) {\n        // Example: If dropping a symbolic link, Chromium will throw:\n        // \"DOMException: A requested file or directory could not be found at the time an operation was processed.\",\n        // So we will use lastResortFile instead. See https://github.com/transloadit/uppy/issues/3505.\n        if (lastResortFile != null) {\n          yield lastResortFile;\n        } else {\n          logDropError(err);\n        }\n      }\n    } else if (lastResortFile != null) yield lastResortFile;\n  }\n}", "import toArray from '../../toArray.js';\n\n// .files fallback, should be implemented in any browser\nexport default function fallbackApi(dataTransfer) {\n  const files = toArray(dataTransfer.files);\n  return Promise.resolve(files);\n}", "import webkitGetAsEntryApi from './utils/webkitGetAsEntryApi/index.js';\nimport fallbackApi from './utils/fallbackApi.js';\n\n/**\n * Returns a promise that resolves to the array of dropped files (if a folder is\n * dropped, and browser supports folder parsing - promise resolves to the flat\n * array of all files in all directories).\n * Each file has .relativePath prop appended to it (e.g. \"/docs/Prague/ticket_from_prague_to_ufa.pdf\")\n * if browser supports it. Otherwise it's undefined.\n *\n * @param dataTransfer\n * @param options\n * @param options.logDropError - a function that's called every time some\n * folder or some file error out (e.g. because of the folder name being too long\n * on Windows). Notice that resulting promise will always be resolved anyway.\n *\n * @returns {Promise} - Array<File>\n */\nexport default async function getDroppedFiles(dataTransfer, options) {\n  var _options$logDropError;\n  // Get all files from all subdirs. Works (at least) in Chrome, Mozilla, and Safari\n  const logDropError = (_options$logDropError = options == null ? void 0 : options.logDropError) != null ? _options$logDropError : Function.prototype;\n  try {\n    const accumulator = [];\n    for await (const file of webkitGetAsEntryApi(dataTransfer, logDropError)) {\n      accumulator.push(file);\n    }\n    return accumulator;\n    // Otherwise just return all first-order files\n  } catch {\n    return fallbackApi(dataTransfer);\n  }\n}", "export default {\n  strings: {\n    // Text to show on the droppable area.\n    // `%{browse}` is replaced with a link that opens the system file selection dialog.\n    dropHereOr: 'Drop here or %{browse}',\n    // Used as the label for the link that opens the system file selection dialog.\n    browse: 'browse'\n  }\n};", "import { UIPlugin } from '@uppy/core';\nimport toArray from '@uppy/utils/lib/toArray';\nimport isDragDropSupported from '@uppy/utils/lib/isDragDropSupported';\nimport getDroppedFiles from '@uppy/utils/lib/getDroppedFiles';\nimport { h } from 'preact';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"4.1.2\"\n};\nimport locale from './locale.js';\nconst defaultOptions = {\n  inputName: 'files[]',\n  width: '100%',\n  height: '100%'\n};\n\n/**\n * Drag & Drop plugin\n *\n */\nexport default class DragDrop extends UIPlugin {\n  constructor(uppy, opts) {\n    super(uppy, {\n      ...defaultOptions,\n      ...opts\n    });\n    // Check for browser dragDrop support\n    this.isDragDropSupported = isDragDropSupported();\n    this.addFiles = files => {\n      const descriptors = files.map(file => ({\n        source: this.id,\n        name: file.name,\n        type: file.type,\n        data: file,\n        meta: {\n          // path of the file relative to the ancestor directory the user selected.\n          // e.g. 'docs/Old Prague/airbnb.pdf'\n          relativePath: file.relativePath || null\n        }\n      }));\n      try {\n        this.uppy.addFiles(descriptors);\n      } catch (err) {\n        this.uppy.log(err);\n      }\n    };\n    this.onInputChange = event => {\n      const files = toArray(event.currentTarget.files || []);\n      if (files.length > 0) {\n        this.uppy.log('[DragDrop] Files selected through input');\n        this.addFiles(files);\n      }\n\n      // Clear the input so that Chrome can detect file section when the same file is repeatedly selected\n      // (see https://github.com/transloadit/uppy/issues/768#issuecomment-2264902758)\n      // eslint-disable-next-line no-param-reassign\n      event.currentTarget.value = '';\n    };\n    this.handleDragOver = event => {\n      var _this$opts$onDragOver, _this$opts;\n      event.preventDefault();\n      event.stopPropagation();\n\n      // Check if the \"type\" of the datatransfer object includes files. If not, deny drop.\n      const {\n        types\n      } = event.dataTransfer;\n      const hasFiles = types.some(type => type === 'Files');\n      const {\n        allowNewUpload\n      } = this.uppy.getState();\n      if (!hasFiles || !allowNewUpload) {\n        // eslint-disable-next-line no-param-reassign\n        event.dataTransfer.dropEffect = 'none';\n        return;\n      }\n\n      // Add a small (+) icon on drop\n      // (and prevent browsers from interpreting this as files being _moved_ into the browser\n      // https://github.com/transloadit/uppy/issues/1978)\n      //\n      // eslint-disable-next-line no-param-reassign\n      event.dataTransfer.dropEffect = 'copy';\n      this.setPluginState({\n        isDraggingOver: true\n      });\n      (_this$opts$onDragOver = (_this$opts = this.opts).onDragOver) == null || _this$opts$onDragOver.call(_this$opts, event);\n    };\n    this.handleDragLeave = event => {\n      var _this$opts$onDragLeav, _this$opts2;\n      event.preventDefault();\n      event.stopPropagation();\n      this.setPluginState({\n        isDraggingOver: false\n      });\n      (_this$opts$onDragLeav = (_this$opts2 = this.opts).onDragLeave) == null || _this$opts$onDragLeav.call(_this$opts2, event);\n    };\n    this.handleDrop = async event => {\n      var _this$opts$onDrop, _this$opts3;\n      event.preventDefault();\n      event.stopPropagation();\n      this.setPluginState({\n        isDraggingOver: false\n      });\n      const logDropError = error => {\n        this.uppy.log(error, 'error');\n      };\n\n      // Add all dropped files\n      const files = await getDroppedFiles(event.dataTransfer, {\n        logDropError\n      });\n      if (files.length > 0) {\n        this.uppy.log('[DragDrop] Files dropped');\n        this.addFiles(files);\n      }\n      (_this$opts$onDrop = (_this$opts3 = this.opts).onDrop) == null || _this$opts$onDrop.call(_this$opts3, event);\n    };\n    this.type = 'acquirer';\n    this.id = this.opts.id || 'DragDrop';\n    this.title = 'Drag & Drop';\n    this.defaultLocale = locale;\n    this.i18nInit();\n  }\n  renderHiddenFileInput() {\n    var _restrictions$allowed;\n    const {\n      restrictions\n    } = this.uppy.opts;\n    return h(\"input\", {\n      className: \"uppy-DragDrop-input\",\n      type: \"file\",\n      hidden: true,\n      ref: ref => {\n        this.fileInputRef = ref;\n      },\n      name: this.opts.inputName,\n      multiple: restrictions.maxNumberOfFiles !== 1,\n      accept: (_restrictions$allowed = restrictions.allowedFileTypes) == null ? void 0 : _restrictions$allowed.join(', '),\n      onChange: this.onInputChange\n    });\n  }\n  static renderArrowSvg() {\n    return h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      className: \"uppy-c-icon uppy-DragDrop-arrow\",\n      width: \"16\",\n      height: \"16\",\n      viewBox: \"0 0 16 16\"\n    }, h(\"path\", {\n      d: \"M11 10V0H5v10H2l6 6 6-6h-3zm0 0\",\n      fillRule: \"evenodd\"\n    }));\n  }\n  renderLabel() {\n    return h(\"div\", {\n      className: \"uppy-DragDrop-label\"\n    }, this.i18nArray('dropHereOr', {\n      browse: h(\"span\", {\n        className: \"uppy-DragDrop-browse\"\n      }, this.i18n('browse'))\n    }));\n  }\n  renderNote() {\n    return h(\"span\", {\n      className: \"uppy-DragDrop-note\"\n    }, this.opts.note);\n  }\n  render() {\n    const dragDropClass = `uppy-u-reset\n      uppy-DragDrop-container\n      ${this.isDragDropSupported ? 'uppy-DragDrop--isDragDropSupported' : ''}\n      ${this.getPluginState().isDraggingOver ? 'uppy-DragDrop--isDraggingOver' : ''}\n    `;\n    const dragDropStyle = {\n      width: this.opts.width,\n      height: this.opts.height\n    };\n    return h(\"button\", {\n      type: \"button\",\n      className: dragDropClass,\n      style: dragDropStyle,\n      onClick: () => this.fileInputRef.click(),\n      onDragOver: this.handleDragOver,\n      onDragLeave: this.handleDragLeave,\n      onDrop: this.handleDrop\n    }, this.renderHiddenFileInput(), h(\"div\", {\n      className: \"uppy-DragDrop-inner\"\n    }, DragDrop.renderArrowSvg(), this.renderLabel(), this.renderNote()));\n  }\n  install() {\n    const {\n      target\n    } = this.opts;\n    this.setPluginState({\n      isDraggingOver: false\n    });\n    if (target) {\n      this.mount(target, this);\n    }\n  }\n  uninstall() {\n    this.unmount();\n  }\n}\nDragDrop.VERSION = packageJson.version;", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nvar _uppy = /*#__PURE__*/_classPrivateFieldLooseKey(\"uppy\");\nvar _events = /*#__PURE__*/_classPrivateFieldLooseKey(\"events\");\n/**\n * Create a wrapper around an event emitter with a `remove` method to remove\n * all events that were added using the wrapped emitter.\n */\nexport default class EventManager {\n  constructor(uppy) {\n    Object.defineProperty(this, _uppy, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _events, {\n      writable: true,\n      value: []\n    });\n    _classPrivateFieldLooseBase(this, _uppy)[_uppy] = uppy;\n  }\n  on(event, fn) {\n    _classPrivateFieldLooseBase(this, _events)[_events].push([event, fn]);\n    return _classPrivateFieldLooseBase(this, _uppy)[_uppy].on(event, fn);\n  }\n  remove() {\n    for (const [event, fn] of _classPrivateFieldLooseBase(this, _events)[_events].splice(0)) {\n      _classPrivateFieldLooseBase(this, _uppy)[_uppy].off(event, fn);\n    }\n  }\n  onFilePause(fileID, cb) {\n    this.on('upload-pause', (file, isPaused) => {\n      if (fileID === (file == null ? void 0 : file.id)) {\n        cb(isPaused);\n      }\n    });\n  }\n  onFileRemove(fileID, cb) {\n    this.on('file-removed', file => {\n      if (fileID === file.id) cb(file.id);\n    });\n  }\n  onPause(fileID, cb) {\n    this.on('upload-pause', (file, isPaused) => {\n      if (fileID === (file == null ? void 0 : file.id)) {\n        // const isPaused = this.#uppy.pauseResume(fileID)\n        cb(isPaused);\n      }\n    });\n  }\n  onRetry(fileID, cb) {\n    this.on('upload-retry', file => {\n      if (fileID === (file == null ? void 0 : file.id)) {\n        cb();\n      }\n    });\n  }\n  onRetryAll(fileID, cb) {\n    this.on('retry-all', () => {\n      if (!_classPrivateFieldLooseBase(this, _uppy)[_uppy].getFile(fileID)) return;\n      cb();\n    });\n  }\n  onPauseAll(fileID, cb) {\n    this.on('pause-all', () => {\n      if (!_classPrivateFieldLooseBase(this, _uppy)[_uppy].getFile(fileID)) return;\n      cb();\n    });\n  }\n  onCancelAll(fileID, eventHandler) {\n    var _this = this;\n    this.on('cancel-all', function () {\n      if (!_classPrivateFieldLooseBase(_this, _uppy)[_uppy].getFile(fileID)) return;\n      eventHandler(...arguments);\n    });\n  }\n  onResumeAll(fileID, cb) {\n    this.on('resume-all', () => {\n      if (!_classPrivateFieldLooseBase(this, _uppy)[_uppy].getFile(fileID)) return;\n      cb();\n    });\n  }\n}", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nfunction createCancelError(cause) {\n  return new Error('Cancelled', {\n    cause\n  });\n}\nfunction abortOn(signal) {\n  if (signal != null) {\n    var _this$then;\n    const abortPromise = () => this.abort(signal.reason);\n    signal.addEventListener('abort', abortPromise, {\n      once: true\n    });\n    const removeAbortListener = () => {\n      signal.removeEventListener('abort', abortPromise);\n    };\n    (_this$then = this.then) == null || _this$then.call(this, removeAbortListener, removeAbortListener);\n  }\n  return this;\n}\nvar _activeRequests = /*#__PURE__*/_classPrivateFieldLooseKey(\"activeRequests\");\nvar _queuedHandlers = /*#__PURE__*/_classPrivateFieldLooseKey(\"queuedHandlers\");\nvar _paused = /*#__PURE__*/_classPrivateFieldLooseKey(\"paused\");\nvar _pauseTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"pauseTimer\");\nvar _downLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"downLimit\");\nvar _upperLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"upperLimit\");\nvar _rateLimitingTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"rateLimitingTimer\");\nvar _call = /*#__PURE__*/_classPrivateFieldLooseKey(\"call\");\nvar _queueNext = /*#__PURE__*/_classPrivateFieldLooseKey(\"queueNext\");\nvar _next = /*#__PURE__*/_classPrivateFieldLooseKey(\"next\");\nvar _queue = /*#__PURE__*/_classPrivateFieldLooseKey(\"queue\");\nvar _dequeue = /*#__PURE__*/_classPrivateFieldLooseKey(\"dequeue\");\nvar _resume = /*#__PURE__*/_classPrivateFieldLooseKey(\"resume\");\nvar _increaseLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"increaseLimit\");\nexport class RateLimitedQueue {\n  constructor(limit) {\n    Object.defineProperty(this, _dequeue, {\n      value: _dequeue2\n    });\n    Object.defineProperty(this, _queue, {\n      value: _queue2\n    });\n    Object.defineProperty(this, _next, {\n      value: _next2\n    });\n    Object.defineProperty(this, _queueNext, {\n      value: _queueNext2\n    });\n    Object.defineProperty(this, _call, {\n      value: _call2\n    });\n    Object.defineProperty(this, _activeRequests, {\n      writable: true,\n      value: 0\n    });\n    Object.defineProperty(this, _queuedHandlers, {\n      writable: true,\n      value: []\n    });\n    Object.defineProperty(this, _paused, {\n      writable: true,\n      value: false\n    });\n    Object.defineProperty(this, _pauseTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _downLimit, {\n      writable: true,\n      value: 1\n    });\n    Object.defineProperty(this, _upperLimit, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _rateLimitingTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _resume, {\n      writable: true,\n      value: () => this.resume()\n    });\n    Object.defineProperty(this, _increaseLimit, {\n      writable: true,\n      value: () => {\n        if (_classPrivateFieldLooseBase(this, _paused)[_paused]) {\n          _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], 0);\n          return;\n        }\n        _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] = this.limit;\n        this.limit = Math.ceil((_classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] + _classPrivateFieldLooseBase(this, _downLimit)[_downLimit]) / 2);\n        for (let i = _classPrivateFieldLooseBase(this, _downLimit)[_downLimit]; i <= this.limit; i++) {\n          _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n        }\n        if (_classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] - _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] > 3) {\n          _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], 2000);\n        } else {\n          _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] = Math.floor(_classPrivateFieldLooseBase(this, _downLimit)[_downLimit] / 2);\n        }\n      }\n    });\n    if (typeof limit !== 'number' || limit === 0) {\n      this.limit = Infinity;\n    } else {\n      this.limit = limit;\n    }\n  }\n  run(fn, queueOptions) {\n    if (!_classPrivateFieldLooseBase(this, _paused)[_paused] && _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] < this.limit) {\n      return _classPrivateFieldLooseBase(this, _call)[_call](fn);\n    }\n    return _classPrivateFieldLooseBase(this, _queue)[_queue](fn, queueOptions);\n  }\n  wrapSyncFunction(fn, queueOptions) {\n    var _this = this;\n    return function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      const queuedRequest = _this.run(() => {\n        fn(...args);\n        queueMicrotask(() => queuedRequest.done());\n        return () => {};\n      }, queueOptions);\n      return {\n        abortOn,\n        abort() {\n          queuedRequest.abort();\n        }\n      };\n    };\n  }\n  wrapPromiseFunction(fn, queueOptions) {\n    var _this2 = this;\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n      let queuedRequest;\n      const outerPromise = new Promise((resolve, reject) => {\n        queuedRequest = _this2.run(() => {\n          let cancelError;\n          let innerPromise;\n          try {\n            innerPromise = Promise.resolve(fn(...args));\n          } catch (err) {\n            innerPromise = Promise.reject(err);\n          }\n          innerPromise.then(result => {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              resolve(result);\n            }\n          }, err => {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              reject(err);\n            }\n          });\n          return cause => {\n            cancelError = createCancelError(cause);\n          };\n        }, queueOptions);\n      });\n      outerPromise.abort = cause => {\n        queuedRequest.abort(cause);\n      };\n      outerPromise.abortOn = abortOn;\n      return outerPromise;\n    };\n  }\n  resume() {\n    _classPrivateFieldLooseBase(this, _paused)[_paused] = false;\n    clearTimeout(_classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer]);\n    for (let i = 0; i < this.limit; i++) {\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    }\n  }\n  /**\n   * Freezes the queue for a while or indefinitely.\n   *\n   * @param {number | null } [duration] Duration for the pause to happen, in milliseconds.\n   *                                    If omitted, the queue won't resume automatically.\n   */\n  pause(duration) {\n    if (duration === void 0) {\n      duration = null;\n    }\n    _classPrivateFieldLooseBase(this, _paused)[_paused] = true;\n    clearTimeout(_classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer]);\n    if (duration != null) {\n      _classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer] = setTimeout(_classPrivateFieldLooseBase(this, _resume)[_resume], duration);\n    }\n  }\n\n  /**\n   * Pauses the queue for a duration, and lower the limit of concurrent requests\n   * when the queue resumes. When the queue resumes, it tries to progressively\n   * increase the limit in `this.#increaseLimit` until another call is made to\n   * `this.rateLimit`.\n   * Call this function when using the RateLimitedQueue for network requests and\n   * the remote server responds with 429 HTTP code.\n   *\n   * @param {number} duration in milliseconds.\n   */\n  rateLimit(duration) {\n    clearTimeout(_classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer]);\n    this.pause(duration);\n    if (this.limit > 1 && Number.isFinite(this.limit)) {\n      _classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] = this.limit - 1;\n      this.limit = _classPrivateFieldLooseBase(this, _downLimit)[_downLimit];\n      _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], duration);\n    }\n  }\n  get isPaused() {\n    return _classPrivateFieldLooseBase(this, _paused)[_paused];\n  }\n}\nfunction _call2(fn) {\n  _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] += 1;\n  let done = false;\n  let cancelActive;\n  try {\n    cancelActive = fn();\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n    throw err;\n  }\n  return {\n    abort: cause => {\n      if (done) return;\n      done = true;\n      _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n      cancelActive == null || cancelActive(cause);\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    },\n    done: () => {\n      if (done) return;\n      done = true;\n      _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    }\n  };\n}\nfunction _queueNext2() {\n  // Do it soon but not immediately, this allows clearing out the entire queue synchronously\n  // one by one without continuously _advancing_ it (and starting new tasks before immediately\n  // aborting them)\n  queueMicrotask(() => _classPrivateFieldLooseBase(this, _next)[_next]());\n}\nfunction _next2() {\n  if (_classPrivateFieldLooseBase(this, _paused)[_paused] || _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] >= this.limit) {\n    return;\n  }\n  if (_classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].length === 0) {\n    return;\n  }\n\n  // Dispatch the next request, and update the abort/done handlers\n  // so that cancelling it does the Right Thing (and doesn't just try\n  // to dequeue an already-running request).\n  const next = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].shift();\n  if (next == null) {\n    throw new Error('Invariant violation: next is null');\n  }\n  const handler = _classPrivateFieldLooseBase(this, _call)[_call](next.fn);\n  next.abort = handler.abort;\n  next.done = handler.done;\n}\nfunction _queue2(fn, options) {\n  const handler = {\n    fn,\n    priority: (options == null ? void 0 : options.priority) || 0,\n    abort: () => {\n      _classPrivateFieldLooseBase(this, _dequeue)[_dequeue](handler);\n    },\n    done: () => {\n      throw new Error('Cannot mark a queued request as done: this indicates a bug');\n    }\n  };\n  const index = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].findIndex(other => {\n    return handler.priority > other.priority;\n  });\n  if (index === -1) {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].push(handler);\n  } else {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].splice(index, 0, handler);\n  }\n  return handler;\n}\nfunction _dequeue2(handler) {\n  const index = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].indexOf(handler);\n  if (index !== -1) {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].splice(index, 1);\n  }\n}\nexport const internalRateLimitedQueue = Symbol('__queue');", "class NetworkError extends Error {\n  constructor(error, xhr) {\n    if (xhr === void 0) {\n      xhr = null;\n    }\n    super(`This looks like a network error, the endpoint might be blocked by an internet provider or a firewall.`);\n    this.cause = error;\n    this.isNetworkError = true;\n    this.request = xhr;\n  }\n}\nexport default NetworkError;", "function isNetworkError(xhr) {\n  if (!xhr) {\n    return false;\n  }\n  return xhr.readyState !== 0 && xhr.readyState !== 4 || xhr.status === 0;\n}\nexport default isNetworkError;", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nvar _aliveTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"aliveTimer\");\nvar _isDone = /*#__PURE__*/_classPrivateFieldLooseKey(\"isDone\");\nvar _onTimedOut = /*#__PURE__*/_classPrivateFieldLooseKey(\"onTimedOut\");\nvar _timeout = /*#__PURE__*/_classPrivateFieldLooseKey(\"timeout\");\n/**\n * Helper to abort upload requests if there has not been any progress for `timeout` ms.\n * Create an instance using `timer = new ProgressTimeout(10000, onTimeout)`\n * Call `timer.progress()` to signal that there has been progress of any kind.\n * Call `timer.done()` when the upload has completed.\n */\nclass ProgressTimeout {\n  constructor(timeout,\n  // eslint-disable-next-line no-shadow\n  timeoutHandler) {\n    Object.defineProperty(this, _aliveTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _isDone, {\n      writable: true,\n      value: false\n    });\n    Object.defineProperty(this, _onTimedOut, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _timeout, {\n      writable: true,\n      value: void 0\n    });\n    _classPrivateFieldLooseBase(this, _timeout)[_timeout] = timeout;\n    _classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut] = () => timeoutHandler(timeout);\n  }\n  progress() {\n    // Some browsers fire another progress event when the upload is\n    // cancelled, so we have to ignore progress after the timer was\n    // told to stop.\n    if (_classPrivateFieldLooseBase(this, _isDone)[_isDone]) return;\n    if (_classPrivateFieldLooseBase(this, _timeout)[_timeout] > 0) {\n      clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);\n      _classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = setTimeout(_classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut], _classPrivateFieldLooseBase(this, _timeout)[_timeout]);\n    }\n  }\n  done() {\n    if (!_classPrivateFieldLooseBase(this, _isDone)[_isDone]) {\n      clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);\n      _classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = undefined;\n      _classPrivateFieldLooseBase(this, _isDone)[_isDone] = true;\n    }\n  }\n}\nexport default ProgressTimeout;", "import NetworkError from './NetworkError.js';\nimport ProgressTimeout from './ProgressTimeout.js';\nconst noop = () => {};\n/**\n * Fetches data from a specified URL using XMLHttpRequest, with optional retry functionality and progress tracking.\n *\n * @param url The URL to send the request to.\n * @param options Optional settings for the fetch operation.\n */\nexport function fetcher(url, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    body = null,\n    headers = {},\n    method = 'GET',\n    onBeforeRequest = noop,\n    onUploadProgress = noop,\n    shouldRetry = () => true,\n    onAfterResponse = noop,\n    onTimeout = noop,\n    responseType,\n    retries = 3,\n    signal = null,\n    timeout = 30000,\n    withCredentials = false\n  } = options;\n\n  // 300 ms, 600 ms, 1200 ms, 2400 ms, 4800 ms\n  const delay = attempt => 0.3 * 2 ** (attempt - 1) * 1000;\n  const timer = new ProgressTimeout(timeout, onTimeout);\n  function requestWithRetry(retryCount) {\n    if (retryCount === void 0) {\n      retryCount = 0;\n    }\n    // eslint-disable-next-line no-async-promise-executor\n    return new Promise(async (resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n      const onError = error => {\n        if (shouldRetry(xhr) && retryCount < retries) {\n          setTimeout(() => {\n            requestWithRetry(retryCount + 1).then(resolve, reject);\n          }, delay(retryCount));\n        } else {\n          timer.done();\n          reject(error);\n        }\n      };\n      xhr.open(method, url, true);\n      xhr.withCredentials = withCredentials;\n      if (responseType) {\n        xhr.responseType = responseType;\n      }\n      signal == null || signal.addEventListener('abort', () => {\n        xhr.abort();\n        // Using DOMException for abort errors aligns with\n        // the convention established by the Fetch API.\n        reject(new DOMException('Aborted', 'AbortError'));\n      });\n      xhr.onload = async () => {\n        try {\n          await onAfterResponse(xhr, retryCount);\n        } catch (err) {\n          // This is important as we need to emit the xhr\n          // over the upload-error event.\n          err.request = xhr;\n          onError(err);\n          return;\n        }\n        if (xhr.status >= 200 && xhr.status < 300) {\n          timer.done();\n          resolve(xhr);\n        } else if (shouldRetry(xhr) && retryCount < retries) {\n          setTimeout(() => {\n            requestWithRetry(retryCount + 1).then(resolve, reject);\n          }, delay(retryCount));\n        } else {\n          timer.done();\n          reject(new NetworkError(xhr.statusText, xhr));\n        }\n      };\n      xhr.onerror = () => onError(new NetworkError(xhr.statusText, xhr));\n      xhr.upload.onprogress = event => {\n        timer.progress();\n        onUploadProgress(event);\n      };\n      if (headers) {\n        Object.keys(headers).forEach(key => {\n          xhr.setRequestHeader(key, headers[key]);\n        });\n      }\n      await onBeforeRequest(xhr, retryCount);\n      xhr.send(body);\n    });\n  }\n  return requestWithRetry();\n}", "export function filterNonFailedFiles(files) {\n  const hasError = file => 'error' in file && !!file.error;\n  return files.filter(file => !hasError(file));\n}\n\n// Don't double-emit upload-started for Golden Retriever-restored files that were already started\nexport function filterFilesToEmitUploadStarted(files) {\n  return files.filter(file => {\n    var _file$progress;\n    return !((_file$progress = file.progress) != null && _file$progress.uploadStarted) || !file.isRestored;\n  });\n}", "export default function getAllowedMetaFields(fields, meta) {\n  if (fields === true) {\n    return Object.keys(meta);\n  }\n  if (Array.isArray(fields)) {\n    return fields;\n  }\n  return [];\n}", "export default {\n  strings: {\n    // Shown in the Informer if an upload is being canceled because it stalled for too long.\n    uploadStalled: 'Upload has not made any progress for %{seconds} seconds. You may want to retry it.'\n  }\n};", "function _classPrivateFieldLooseBase(e, t) { if (!{}.hasOwnProperty.call(e, t)) throw new TypeError(\"attempted to use private field on non-instance\"); return e; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(e) { return \"__private_\" + id++ + \"_\" + e; }\nimport { BasePlugin } from '@uppy/core';\nimport EventManager from '@uppy/core/lib/EventManager.js';\nimport { RateLimitedQueue, internalRateLimitedQueue\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\n} from '@uppy/utils/lib/RateLimitedQueue';\nimport NetworkError from '@uppy/utils/lib/NetworkError';\nimport isNetworkError from '@uppy/utils/lib/isNetworkError';\nimport { fetcher } from '@uppy/utils/lib/fetcher';\nimport { filterNonFailedFiles, filterFilesToEmitUploadStarted } from '@uppy/utils/lib/fileFilters';\nimport getAllowedMetaFields from '@uppy/utils/lib/getAllowedMetaFields';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"4.3.3\"\n};\nimport locale from './locale.js';\nfunction buildResponseError(xhr, err) {\n  let error = err;\n  // No error message\n  if (!error) error = new Error('Upload error');\n  // Got an error message string\n  if (typeof error === 'string') error = new Error(error);\n  // Got something else\n  if (!(error instanceof Error)) {\n    error = Object.assign(new Error('Upload error'), {\n      data: error\n    });\n  }\n  if (isNetworkError(xhr)) {\n    error = new NetworkError(error, xhr);\n    return error;\n  }\n\n  // @ts-expect-error request can only be set on NetworkError\n  // but we use NetworkError to distinguish between errors.\n  error.request = xhr;\n  return error;\n}\n\n/**\n * Set `data.type` in the blob to `file.meta.type`,\n * because we might have detected a more accurate file type in Uppy\n * https://stackoverflow.com/a/50875615\n */\nfunction setTypeInBlob(file) {\n  const dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n  return dataWithUpdatedType;\n}\nconst defaultOptions = {\n  formData: true,\n  fieldName: 'file',\n  method: 'post',\n  allowedMetaFields: true,\n  bundle: false,\n  headers: {},\n  timeout: 30 * 1000,\n  limit: 5,\n  withCredentials: false,\n  responseType: ''\n};\nvar _getFetcher = /*#__PURE__*/_classPrivateFieldLooseKey(\"getFetcher\");\nvar _uploadLocalFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadLocalFile\");\nvar _uploadBundle = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadBundle\");\nvar _getCompanionClientArgs = /*#__PURE__*/_classPrivateFieldLooseKey(\"getCompanionClientArgs\");\nvar _uploadFiles = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadFiles\");\nvar _handleUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"handleUpload\");\nexport default class XHRUpload extends BasePlugin {\n  constructor(uppy, _opts) {\n    super(uppy, {\n      ...defaultOptions,\n      fieldName: _opts.bundle ? 'files[]' : 'file',\n      ..._opts\n    });\n    Object.defineProperty(this, _uploadFiles, {\n      value: _uploadFiles2\n    });\n    Object.defineProperty(this, _getCompanionClientArgs, {\n      value: _getCompanionClientArgs2\n    });\n    Object.defineProperty(this, _uploadBundle, {\n      value: _uploadBundle2\n    });\n    Object.defineProperty(this, _uploadLocalFile, {\n      value: _uploadLocalFile2\n    });\n    Object.defineProperty(this, _getFetcher, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _handleUpload, {\n      writable: true,\n      value: async fileIDs => {\n        if (fileIDs.length === 0) {\n          this.uppy.log('[XHRUpload] No files to upload!');\n          return;\n        }\n\n        // No limit configured by the user, and no RateLimitedQueue passed in by a \"parent\" plugin\n        // (basically just AwsS3) using the internal symbol\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore untyped internal\n        if (this.opts.limit === 0 && !this.opts[internalRateLimitedQueue]) {\n          this.uppy.log('[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0', 'warning');\n        }\n        this.uppy.log('[XHRUpload] Uploading...');\n        const files = this.uppy.getFilesByIds(fileIDs);\n        const filesFiltered = filterNonFailedFiles(files);\n        const filesToEmit = filterFilesToEmitUploadStarted(filesFiltered);\n        this.uppy.emit('upload-start', filesToEmit);\n        if (this.opts.bundle) {\n          // if bundle: true, we don\u2019t support remote uploads\n          const isSomeFileRemote = filesFiltered.some(file => file.isRemote);\n          if (isSomeFileRemote) {\n            throw new Error('Can\u2019t upload remote files when the `bundle: true` option is set');\n          }\n          if (typeof this.opts.headers === 'function') {\n            throw new TypeError('`headers` may not be a function when the `bundle: true` option is set');\n          }\n          await _classPrivateFieldLooseBase(this, _uploadBundle)[_uploadBundle](filesFiltered);\n        } else {\n          await _classPrivateFieldLooseBase(this, _uploadFiles)[_uploadFiles](filesFiltered);\n        }\n      }\n    });\n    this.type = 'uploader';\n    this.id = this.opts.id || 'XHRUpload';\n    this.defaultLocale = locale;\n    this.i18nInit();\n\n    // Simultaneous upload limiting is shared across all uploads with this plugin.\n    if (internalRateLimitedQueue in this.opts) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore untyped internal\n      this.requests = this.opts[internalRateLimitedQueue];\n    } else {\n      this.requests = new RateLimitedQueue(this.opts.limit);\n    }\n    if (this.opts.bundle && !this.opts.formData) {\n      throw new Error('`opts.formData` must be true when `opts.bundle` is enabled.');\n    }\n    if (this.opts.bundle && typeof this.opts.headers === 'function') {\n      throw new Error('`opts.headers` can not be a function when the `bundle: true` option is set.');\n    }\n    if ((_opts == null ? void 0 : _opts.allowedMetaFields) === undefined && 'metaFields' in this.opts) {\n      throw new Error('The `metaFields` option has been renamed to `allowedMetaFields`.');\n    }\n    this.uploaderEvents = Object.create(null);\n    /**\n     * xhr-upload wrapper for `fetcher` to handle user options\n     * `validateStatus`, `getResponseError`, `getResponseData`\n     * and to emit `upload-progress`, `upload-error`, and `upload-success` events.\n     */\n    _classPrivateFieldLooseBase(this, _getFetcher)[_getFetcher] = files => {\n      return async (url, options) => {\n        try {\n          var _this$opts$getRespons, _this$opts2, _body3;\n          const res = await fetcher(url, {\n            ...options,\n            onBeforeRequest: (xhr, retryCount) => {\n              var _this$opts$onBeforeRe, _this$opts;\n              return (_this$opts$onBeforeRe = (_this$opts = this.opts).onBeforeRequest) == null ? void 0 : _this$opts$onBeforeRe.call(_this$opts, xhr, retryCount, files);\n            },\n            shouldRetry: this.opts.shouldRetry,\n            onAfterResponse: this.opts.onAfterResponse,\n            onTimeout: timeout => {\n              const seconds = Math.ceil(timeout / 1000);\n              const error = new Error(this.i18n('uploadStalled', {\n                seconds\n              }));\n              this.uppy.emit('upload-stalled', error, files);\n            },\n            onUploadProgress: event => {\n              if (event.lengthComputable) {\n                for (const {\n                  id\n                } of files) {\n                  var _file$progress$upload;\n                  const file = this.uppy.getFile(id);\n                  this.uppy.emit('upload-progress', file, {\n                    uploadStarted: (_file$progress$upload = file.progress.uploadStarted) != null ? _file$progress$upload : 0,\n                    bytesUploaded: event.loaded / event.total * file.size,\n                    bytesTotal: file.size\n                  });\n                }\n              }\n            }\n          });\n          let body = await ((_this$opts$getRespons = (_this$opts2 = this.opts).getResponseData) == null ? void 0 : _this$opts$getRespons.call(_this$opts2, res));\n          if (res.responseType === 'json') {\n            var _body;\n            (_body = body) != null ? _body : body = res.response;\n          } else {\n            try {\n              var _body2;\n              (_body2 = body) != null ? _body2 : body = JSON.parse(res.responseText);\n            } catch (cause) {\n              throw new Error('@uppy/xhr-upload expects a JSON response (with a `url` property). To parse non-JSON responses, use `getResponseData` to turn your response into JSON.', {\n                cause\n              });\n            }\n          }\n          const uploadURL = typeof ((_body3 = body) == null ? void 0 : _body3.url) === 'string' ? body.url : undefined;\n          for (const {\n            id\n          } of files) {\n            this.uppy.emit('upload-success', this.uppy.getFile(id), {\n              status: res.status,\n              body,\n              uploadURL\n            });\n          }\n          return res;\n        } catch (error) {\n          if (error.name === 'AbortError') {\n            return undefined;\n          }\n          const request = error.request;\n          for (const file of files) {\n            this.uppy.emit('upload-error', this.uppy.getFile(file.id), buildResponseError(request, error), request);\n          }\n          throw error;\n        }\n      };\n    };\n  }\n  getOptions(file) {\n    const overrides = this.uppy.getState().xhrUpload;\n    const {\n      headers\n    } = this.opts;\n    const opts = {\n      ...this.opts,\n      ...(overrides || {}),\n      ...(file.xhrUpload || {}),\n      headers: {}\n    };\n    // Support for `headers` as a function, only in the XHRUpload settings.\n    // Options set by other plugins in Uppy state or on the files themselves are still merged in afterward.\n    //\n    // ```js\n    // headers: (file) => ({ expires: file.meta.expires })\n    // ```\n    if (typeof headers === 'function') {\n      opts.headers = headers(file);\n    } else {\n      Object.assign(opts.headers, this.opts.headers);\n    }\n    if (overrides) {\n      Object.assign(opts.headers, overrides.headers);\n    }\n    if (file.xhrUpload) {\n      Object.assign(opts.headers, file.xhrUpload.headers);\n    }\n    return opts;\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  addMetadata(formData, meta, opts) {\n    const allowedMetaFields = getAllowedMetaFields(opts.allowedMetaFields, meta);\n    allowedMetaFields.forEach(item => {\n      const value = meta[item];\n      if (Array.isArray(value)) {\n        // In this case we don't transform `item` to add brackets, it's up to\n        // the user to add the brackets so it won't be overridden.\n        value.forEach(subItem => formData.append(item, subItem));\n      } else {\n        formData.append(item, value);\n      }\n    });\n  }\n  createFormDataUpload(file, opts) {\n    const formPost = new FormData();\n    this.addMetadata(formPost, file.meta, opts);\n    const dataWithUpdatedType = setTypeInBlob(file);\n    if (file.name) {\n      formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n    } else {\n      formPost.append(opts.fieldName, dataWithUpdatedType);\n    }\n    return formPost;\n  }\n  createBundledUpload(files, opts) {\n    const formPost = new FormData();\n    const {\n      meta\n    } = this.uppy.getState();\n    this.addMetadata(formPost, meta, opts);\n    files.forEach(file => {\n      const options = this.getOptions(file);\n      const dataWithUpdatedType = setTypeInBlob(file);\n      if (file.name) {\n        formPost.append(options.fieldName, dataWithUpdatedType, file.name);\n      } else {\n        formPost.append(options.fieldName, dataWithUpdatedType);\n      }\n    });\n    return formPost;\n  }\n  install() {\n    if (this.opts.bundle) {\n      const {\n        capabilities\n      } = this.uppy.getState();\n      this.uppy.setState({\n        capabilities: {\n          ...capabilities,\n          individualCancellation: false\n        }\n      });\n    }\n    this.uppy.addUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]);\n  }\n  uninstall() {\n    if (this.opts.bundle) {\n      const {\n        capabilities\n      } = this.uppy.getState();\n      this.uppy.setState({\n        capabilities: {\n          ...capabilities,\n          individualCancellation: true\n        }\n      });\n    }\n    this.uppy.removeUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]);\n  }\n}\nasync function _uploadLocalFile2(file) {\n  const events = new EventManager(this.uppy);\n  const controller = new AbortController();\n  const uppyFetch = this.requests.wrapPromiseFunction(async () => {\n    const opts = this.getOptions(file);\n    const fetch = _classPrivateFieldLooseBase(this, _getFetcher)[_getFetcher]([file]);\n    const body = opts.formData ? this.createFormDataUpload(file, opts) : file.data;\n    return fetch(opts.endpoint, {\n      ...opts,\n      body,\n      signal: controller.signal\n    });\n  });\n  events.onFileRemove(file.id, () => controller.abort());\n  events.onCancelAll(file.id, () => {\n    controller.abort();\n  });\n  try {\n    await uppyFetch().abortOn(controller.signal);\n  } catch (error) {\n    // TODO: create formal error with name 'AbortError' (this comes from RateLimitedQueue)\n    if (error.message !== 'Cancelled') {\n      throw error;\n    }\n  } finally {\n    events.remove();\n  }\n}\nasync function _uploadBundle2(files) {\n  const controller = new AbortController();\n  const uppyFetch = this.requests.wrapPromiseFunction(async () => {\n    var _this$uppy$getState$x;\n    const optsFromState = (_this$uppy$getState$x = this.uppy.getState().xhrUpload) != null ? _this$uppy$getState$x : {};\n    const fetch = _classPrivateFieldLooseBase(this, _getFetcher)[_getFetcher](files);\n    const body = this.createBundledUpload(files, {\n      ...this.opts,\n      ...optsFromState\n    });\n    return fetch(this.opts.endpoint, {\n      // headers can't be a function with bundle: true\n      ...this.opts,\n      body,\n      signal: controller.signal\n    });\n  });\n  function abort() {\n    controller.abort();\n  }\n\n  // We only need to abort on cancel all because\n  // individual cancellations are not possible with bundle: true\n  this.uppy.once('cancel-all', abort);\n  try {\n    await uppyFetch().abortOn(controller.signal);\n  } catch (error) {\n    // TODO: create formal error with name 'AbortError' (this comes from RateLimitedQueue)\n    if (error.message !== 'Cancelled') {\n      throw error;\n    }\n  } finally {\n    this.uppy.off('cancel-all', abort);\n  }\n}\nfunction _getCompanionClientArgs2(file) {\n  var _file$remote;\n  const opts = this.getOptions(file);\n  const allowedMetaFields = getAllowedMetaFields(opts.allowedMetaFields, file.meta);\n  return {\n    ...((_file$remote = file.remote) == null ? void 0 : _file$remote.body),\n    protocol: 'multipart',\n    endpoint: opts.endpoint,\n    size: file.data.size,\n    fieldname: opts.fieldName,\n    metadata: Object.fromEntries(allowedMetaFields.map(name => [name, file.meta[name]])),\n    httpMethod: opts.method,\n    useFormData: opts.formData,\n    headers: opts.headers\n  };\n}\nasync function _uploadFiles2(files) {\n  await Promise.allSettled(files.map(file => {\n    if (file.isRemote) {\n      const getQueue = () => this.requests;\n      const controller = new AbortController();\n      const removedHandler = removedFile => {\n        if (removedFile.id === file.id) controller.abort();\n      };\n      this.uppy.on('file-removed', removedHandler);\n      const uploadPromise = this.uppy.getRequestClientForFile(file).uploadRemoteFile(file, _classPrivateFieldLooseBase(this, _getCompanionClientArgs)[_getCompanionClientArgs](file), {\n        signal: controller.signal,\n        getQueue\n      });\n      this.requests.wrapSyncFunction(() => {\n        this.uppy.off('file-removed', removedHandler);\n      }, {\n        priority: -1\n      })();\n      return uploadPromise;\n    }\n    return _classPrivateFieldLooseBase(this, _uploadLocalFile)[_uploadLocalFile](file);\n  }));\n}\n// eslint-disable-next-line global-require\nXHRUpload.VERSION = packageJson.version;", "import \"./vintage_year_selector_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"input\", \"checkbox\"];\n\n  connect() {\n    this.toggle();\n  }\n\n  toggle() {\n    const checked = this.checkboxTarget.checked;\n    console.log(\"toggle\", checked);\n\n    this.inputTarget.disabled = checked;\n\n    if (checked) {\n      this.inputTarget.value = \"\";\n    }\n  }\n}\n", "import \"./gate_component.css\";\n", "import \"./graph_chart_component.css\";\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\nimport * as d3 from \"d3\";\n\nexport class Controller extends BaseController {\n  static values = {\n    data: Array,\n  };\n\n  connect() {\n    this.drawChart();\n  }\n\n  disconnect() {\n    this.clearChart();\n  }\n\n  drawChart() {\n    const data = this.dataValue;\n    const yBarScale = this.createYBarScale(data.map((d) => d.bar));\n    const maxBarHeight = d3.max(data.map((d) => yBarScale(d.bar)));\n    const yLineScale = this.createYLineScale(\n      data.map((d) => d.line),\n      maxBarHeight\n    );\n    const xScale = this.createXScale(data.length);\n    const chart = this.selectChartElement();\n\n    this.createBars(chart, data, yBarScale);\n    this.addLabels(chart, data);\n    this.drawLine(\n      chart,\n      data.map((d) => d.line),\n      xScale,\n      yLineScale\n    );\n  }\n\n  redrawChart() {\n    this.clearChart();\n    this.drawChart();\n  }\n\n  clearChart() {\n    d3.select(this.element)\n      .selectAll(\"div.c-graph-chart-container, svg\")\n      .remove();\n  }\n\n  createYBarScale(data) {\n    return d3\n      .scaleLinear()\n      .domain([0, d3.max(data)])\n      .range([420, 0]);\n  }\n\n  createYLineScale(lineData) {\n    const min = d3.min(lineData) * 0.98;\n    const max = d3.max(lineData) * 1.02;\n    return d3.scaleLog().domain([min, max]).range([420, 0]);\n  }\n\n  createXScale(length) {\n    const barWidth = this.element.clientWidth / length;\n    return d3\n      .scaleLinear()\n      .domain([0, length - 1])\n      .range([barWidth / 2, this.element.clientWidth - barWidth / 2]);\n  }\n\n  selectChartElement() {\n    const container = d3\n      .select(this.element)\n      .append(\"div\")\n      .classed(\"c-graph-chart-container\", true);\n\n    return container;\n  }\n\n  createBars(chart, data, yScale) {\n    const barWidth = this.element.clientWidth / data.length - 2;\n\n    chart\n      .selectAll(\"div\")\n      .data(data)\n      .join(\"div\")\n      .style(\"height\", (d) => `${420 - yScale(d.bar)}px`)\n      .style(\"width\", `${barWidth}px`)\n      .style(\"margin-right\", (d, i) => (i === data.length - 1 ? \"0\" : \"15px\"))\n      .classed(\"c-graph-chart-bar\", true)\n      .classed(\"c-graph-chart-label\", true);\n  }\n\n  addLabels(chart) {\n    chart\n      .selectAll(\".c-graph-chart-bar\")\n      .append(\"span\")\n      .text((d) => d.label)\n      .classed(\"c-graph-chart-value\", true);\n  }\n\n  drawLine(chart, lineData, xScale, yLineScale) {\n    const svg = chart\n      .append(\"svg\")\n      .attr(\"width\", this.element.clientWidth)\n      .classed(\"c-graph-chart-line\", true);\n\n    const line = d3\n      .line()\n      .x((d, i) => xScale(i))\n      .y((d) => yLineScale(d))\n      .curve(d3.curveMonotoneX);\n\n    svg\n      .append(\"path\")\n      .datum(lineData)\n      .attr(\"fill\", \"none\")\n      .attr(\"stroke\", \"#800020\")\n      .attr(\"stroke-width\", 8)\n      .attr(\"d\", line)\n      .attr(\"stroke-linecap\", \"round\");\n  }\n}\n", "export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can\u2019t do this\n  // for a comparator (except for specific, known comparators) because we can\u2019t\n  // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n", "export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n", "const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n", "export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n", "export default function(x) {\n  return x;\n}\n", "import identity from \"./identity.js\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n", "function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n", "function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n", "export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "export default function(update) {\n  return new Array(update.length);\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don\u2019t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n", "export default function() {\n  return Array.from(this);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n", "export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n", "export default function() {\n  return !this.node();\n}\n", "export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n", "function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n", "function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n", "function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n", "function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n", "function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n", "function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n", "function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n", "function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n", "export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n", "export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n", "export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n", "export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we\u2019re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n", "const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We\u2019re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n", "export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, \u00B1Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n", "export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n", "export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n", "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", "import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n", "export default function(x) {\n  return x;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n        // grouped, and fractional or exponential \u201Csuffix\u201D part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", "export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n", "export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n", "export default function number(x) {\n  return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n", "export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n", "import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n", "const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n", "import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n", "import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n", "import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n", "export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n", "import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n", "export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n", "function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n", "export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n", "import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n", "function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic B\u00E9zier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n", "export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n", "import \"./graph_component.css\";\n", "import { Controller as BaseController } from \"@hotwired/stimulus\";\nimport * as d3 from \"d3\";\n\nexport class Controller extends BaseController {\n  static values = {\n    data: Array,\n  };\n\n  connect() {\n    this.drawChart();\n  }\n\n  disconnect() {\n    d3.select(this.element).select(\"svg\").remove();\n  }\n\n  drawChart() {\n    this.setLayout();\n    this.setXScale();\n    this.setYScale();\n    this.lineGenerator();\n    this.createSvg();\n    this.createAxis();\n    this.createGrid();\n    this.createLabels();\n    this.drawLastData();\n  }\n\n  setLayout() {\n    this.width = 450;\n    this.height = 250;\n    this.marginTop = 20;\n    this.marginRight = 20;\n    this.marginBottom = 20;\n    this.marginLeft = 20;\n  }\n\n  setXScale() {\n    const padding = 50;\n    this.x = d3\n      .scaleUtc()\n      .domain(d3.extent(this.dataValue, (d) => d.date))\n      .range([this.marginLeft + padding, this.width - this.marginRight]);\n  }\n\n  setYScale() {\n    const minValue = d3.min(this.dataValue, (d) => d.quantity);\n    const maxValue = d3.max(this.dataValue, (d) => d.quantity);\n    const padding = 5;\n\n    this.y = d3\n      .scaleLinear()\n      .domain([minValue - padding, maxValue + padding])\n      .range([this.height - this.marginBottom, this.marginTop]);\n  }\n\n  lineGenerator() {\n    this.line = d3\n      .line()\n      .defined((d) => !isNaN(d.quantity))\n      .x((d) => this.x(d.date))\n      .y((d) => this.y(d.quantity))\n      .curve(d3.curveMonotoneX);\n  }\n\n  createSvg() {\n    this.svg = d3\n      .select(this.element)\n      .append(\"svg\")\n      .attr(\"viewBox\", [0, 0, this.width, this.height]);\n  }\n\n  createAxis() {\n    const yAxis = d3.axisLeft(this.y).ticks(this.height / 100);\n    const tickValues = yAxis.scale().ticks(yAxis.ticks()[0]);\n\n    this.svg\n      .append(\"g\")\n      .attr(\"transform\", `translate(${this.marginLeft},-10)`)\n      .call(\n        yAxis.tickValues(tickValues.filter((d, i) => i % 2 === 0)).tickSize(0)\n      )\n      .call((g) => g.select(\".domain\").remove())\n      .call((g) =>\n        g\n          .append(\"g\")\n          .selectAll(\"line\")\n          .data(tickValues.filter((d, i) => i % 2 !== 0))\n          .join(\"line\")\n          .attr(\"stroke\", \"#F5F3F7\")\n          .attr(\"y1\", (d) => this.y(d))\n          .attr(\"y2\", (d) => this.y(d))\n          .attr(\"x2\", this.width - this.marginLeft - this.marginRight)\n      )\n      .call((g) => g.append(\"text\").attr(\"x\", -this.marginLeft).attr(\"y\", 10))\n      .selectAll(\".tick text\")\n      .style(\"fill\", \"#AD9DBC\")\n      .style(\"font-family\", \"Montserrat Variable\")\n      .style(\"font-size\", \"14px\")\n      .style(\"font-weight\", \"600\");\n  }\n\n  createGrid() {\n    this.svg\n      .append(\"g\")\n      .attr(\"transform\", `translate(0,${this.height - this.marginBottom})`)\n      .call(d3.axisBottom(this.x).tickSizeOuter(0).tickFormat(d3.format(\".0f\")))\n      .call((g) => g.select(\".domain\").remove())\n      .call((g) => g.selectAll(\".tick line\").remove())\n      .selectAll(\".tick text\")\n      .style(\"fill\", \"#AD9DBC\")\n      .style(\"font-family\", \"Montserrat Variable\")\n      .style(\"font-size\", \"14px\")\n      .style(\"font-weight\", \"600\");\n  }\n\n  createLabels() {\n    this.svg\n      .append(\"path\")\n      .attr(\"fill\", \"none\")\n      .attr(\"stroke\", \"#972A48\")\n      .attr(\"stroke-width\", 6)\n      .attr(\"stroke-linejoin\", \"round\")\n      .attr(\"stroke-linecap\", \"round\")\n      .attr(\"d\", this.line(this.dataValue));\n  }\n\n  drawLastData() {\n    const lastDatum = this.dataValue[this.dataValue.length - 1];\n    const svgImage = `\n      <svg width=\"38\" height=\"41\" viewBox=\"0 0 38 41\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <g filter=\"url(#filter0_d_2678_7411)\">\n          <circle cx=\"19\" cy=\"19\" r=\"10\" fill=\"white\"/>\n          <circle cx=\"19\" cy=\"19\" r=\"6.5\" stroke=\"#972A48\" stroke-width=\"7\"/>\n        </g>\n        <circle cx=\"19\" cy=\"19\" r=\"19\" fill=\"#FDD2D2\" fill-opacity=\"0.27\"/>\n        <defs>\n          <filter id=\"filter0_d_2678_7411\" x=\"3\" y=\"9\" width=\"32\" height=\"32\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n            <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n            <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n            <feOffset dy=\"6\"/>\n            <feGaussianBlur stdDeviation=\"3\"/>\n            <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n            <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0\"/>\n            <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2678_7411\"/>\n            <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2678_7411\" result=\"shape\"/>\n          </filter>\n        </defs>\n      </svg>\n    `;\n\n    this.svg\n      .append(\"foreignObject\")\n      .attr(\"width\", 38)\n      .attr(\"height\", 41)\n      .attr(\"x\", this.x(lastDatum.date) - 19)\n      .attr(\"y\", this.y(lastDatum.quantity) - 20.5)\n      .html(svgImage);\n  }\n}\n", "import \"./header_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static values = {\n    customerInitials: String,\n    customerLogo: String,\n  };\n\n  connect() {\n    this.visible = true;\n    this.sendStateToWebView();\n  }\n\n  sendStateToWebView() {\n    if (!window.FlutterBridge) return;\n\n    const state = this.headerState;\n    window.FlutterBridge.sendMessage(\"HeaderComponent\", state);\n  }\n\n  get headerState() {\n    const $navRoot = this.element.querySelector(\".c-nav-root\");\n    if (!$navRoot) {\n      console.error(\"[Bridge][HeaderComponent] Missing $navRoot\");\n      return {};\n    }\n    const $navItemLinks = [...$navRoot.querySelectorAll(\"a\")];\n    const $navItemIcons = [\n      ...$navRoot.querySelectorAll(\".c-icon-root:first-child use\"),\n    ];\n\n    const actions = $navItemLinks.map(($item, i) => {\n      const $svg = $navItemIcons[i];\n      const method = $item.getAttribute(\"data-turbo-method\");\n      const behavior = $item.getAttribute(\"data-mobile-behavior\");\n\n      return {\n        href: $item.getAttribute(\"href\") ?? null,\n        text: $item.textContent,\n        method: method ?? null,\n        behavior: behavior ?? null,\n        // ie: substring of `#c-icon-add-user` => `add-user`\n        icon: $svg.getAttribute(\"xlink:href\").substring(8),\n      };\n    });\n\n    const $title = this.element.querySelector(\".c-header-content-small\");\n    const title = $title.textContent ?? null;\n\n    const $rightAction = this.element.querySelector(\n      \".c-header-actions .c-button-root\"\n    );\n    const rightAction = $rightAction.href ?? null;\n\n    return {\n      visible: this.visible,\n      title,\n      rightAction,\n      customerInitials: this.customerInitialsValue ?? null,\n      customerLogo: this.customerLogoValue ?? null,\n      actions,\n    };\n  }\n}\n", "import \"./help_link_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./icon_component.css\";\n", "import \"./identity_page_component.css\";\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  changeVintage(e) {\n    const vintage = e.target.value;\n    Turbo.visit(vintage);\n  }\n}\n", "import \"./interstitial_component.css\";\n", "import \"./stack_component.css\";\n", "import \"./item_component.css\";\n", "import \"./list_cards_component.css\";\n", "import \"./list_component.css\";\n", "import \"./logo_component.css\";\n", "import \"./menu_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static targets = [\"item\"];\n\n  connect() {\n    this.visible = true;\n    this.sendStateToWebView();\n  }\n\n  sendStateToWebView() {\n    if (!window.FlutterBridge) return;\n\n    window.FlutterBridge.sendMessage(\"MenuComponent\", this.menuState);\n  }\n\n  get menuState() {\n    return {\n      items: this.itemTargets.map((i) => {\n        return {\n          text: i.innerText,\n          url: i.href,\n          active: i.ariaCurrent == \"true\",\n          icon: i.dataset.icon,\n        };\n      }),\n      visible: this.visible,\n    };\n  }\n}\n", "import \"./nav_component.css\";\n", "import \"./nav_item_component.css\";\n", "import \"./card_component.css\";\n", "import \"./pairings_component.css\";\n", "import \"./pill_component.css\";\n", "import \"./pricing_table_component.css\";\n", "import \"./progress_bar_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./properties_component.css\";\n", "import algoliasearch from \"algoliasearch/lite\";\nimport instantsearch from \"instantsearch.js\";\nimport { history } from \"instantsearch.js/es/lib/routers\";\nimport {\n  currentRefinements,\n  infiniteHits,\n  panel,\n  searchBox,\n} from \"instantsearch.js/es/widgets\";\nimport filtersConfig from \"../filters_component/config\";\nimport hitsConfig from \"../hits_component/config\";\nimport searchBoxConfig from \"../box_component/config\";\nimport refinementsConfig from \"../refinements_component/config\";\nimport { Turbo } from \"@hotwired/turbo-rails\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static outlets = [\"drawer\"];\n  static targets = [\"hits\", \"originalHits\", \"refinements\", \"searchBox\"];\n  static values = {\n    apiKey: String,\n    applicationId: String,\n    filters: Array,\n    index: String,\n    customerCode: String,\n    hitUrl: String,\n    showVintages: { type: Boolean, default: true },\n  };\n\n  connect() {\n    this.search = instantsearch(this.instantsearchConfig);\n    this.connectWidgets();\n    this.connectFilters();\n    this.search.start();\n    this.search.on(\"render\", () => {\n      this.hitsTarget.parentNode.classList.toggle(\n        \"c-search--hits-searching\",\n        this.isSearching\n      );\n    });\n  }\n\n  disconnect() {\n    if (this.search) this.search.dispose();\n  }\n\n  connectWidgets() {\n    let widgets = [];\n\n    if (this.hasRefinementsTarget) {\n      widgets.push(\n        currentRefinements({\n          container: this.refinementsTarget,\n          ...refinementsConfig,\n        })\n      );\n    }\n\n    if (this.hasHitsTarget) {\n      const customerCode = this.customerCodeValue;\n      const hitUrl = this.hitUrlValue;\n      const showVintages = this.showVintagesValue;\n      widgets.push(\n        infiniteHits({\n          container: this.hitsTarget,\n          transformItems(items) {\n            return items.map((item) => ({\n              ...item,\n              customer_code: customerCode,\n              hit_url: hitUrl,\n              show_vintages: showVintages,\n            }));\n          },\n          ...hitsConfig,\n        })\n      );\n    }\n\n    if (this.hasSearchBoxTarget) {\n      const placeholder =\n        this.searchBoxTarget.dataset.placeholder ?? searchBoxConfig.placeholder;\n      widgets.push(\n        searchBox({\n          container: this.searchBoxTarget,\n          ...searchBoxConfig,\n          placeholder: placeholder,\n        })\n      );\n    }\n\n    this.search.addWidgets(widgets);\n  }\n\n  connectFilters() {\n    if (!this.hasFiltersElement || !this.hasFiltersValue) return;\n\n    let filtersWidgets = [];\n    this.filtersValue.forEach((filter) => {\n      if (!filtersConfig[filter]) {\n        console.error(`Filter not defined in config: ${filter}`);\n        return;\n      }\n\n      const { widget, title, options } = filtersConfig[filter];\n      const filterEl = document.createRange().createContextualFragment(`\n        <div class=\"c-search--filters-filter\"></div>\n      `);\n      const container = filterEl.querySelector(\".c-search--filters-filter\");\n      this.filtersElement.appendChild(filterEl);\n      options[\"container\"] = container;\n\n      const panelWidget = panel({\n        hidden(options) {\n          return options.canRefine === false;\n        },\n        cssClasses: {\n          header: \"c-search--filters-title\",\n        },\n        templates: {\n          header(data, { html }) {\n            return html`${title}`;\n          },\n        },\n      })(widget);\n\n      filtersWidgets.push(panelWidget(options));\n    });\n\n    this.search.addWidgets(filtersWidgets);\n  }\n\n  toggleFilters() {\n    if (!this.hasDrawerOutlet) return;\n\n    this.drawerOutlet.open();\n  }\n\n  get searchClient() {\n    return algoliasearch(this.applicationIdValue, this.apiKeyValue);\n  }\n\n  get instantsearchConfig() {\n    return {\n      indexName: this.indexValue,\n      routing: {\n        router: history({\n          cleanUrlOnDispose: false,\n          push: (url) => {\n            window.history.pushState({}, null, url);\n            Turbo.navigator.history.push(url);\n          },\n        }),\n      },\n      searchClient: this.searchClient,\n      future: {\n        preserveSharedStateOnUnmount: true,\n      },\n    };\n  }\n\n  get isSearching() {\n    const state = this.search.renderState[this.indexValue];\n    return (\n      state.searchBox.query !== \"\" ||\n      (this.hasRefinementsTarget && state.currentRefinements.items.length !== 0)\n    );\n  }\n\n  get filtersElement() {\n    return document.querySelector(\"[data-search--algolia-target='filters']\");\n  }\n\n  get hasFiltersElement() {\n    return this.filtersElement !== null;\n  }\n}\n", "import { refinementList } from \"instantsearch.js/es/widgets\";\n\nconst refinementListDefaultOptions = {\n  cssClasses: {\n    list: \"c-search--filters-items\",\n    item: \"c-search--filters-item\",\n    label: \"c-search--filters-label\",\n    count: \"c-search--filters-count\",\n    showMore: \"c-search--filters-more\",\n  },\n  showMore: true,\n  templates: {\n    showMoreText(data, { html }) {\n      return html`<span\n        >${data.isShowingMore ? \"Voir moins\" : \"Voir plus\"}</span\n      >`;\n    },\n  },\n};\n\nexport default {\n  color: {\n    widget: refinementList,\n    title: \"Couleur\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"color\",\n    },\n  },\n  certifications: {\n    widget: refinementList,\n    title: \"Certification\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"certifications\",\n    },\n  },\n  classification: {\n    widget: refinementList,\n    title: \"Classification\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"classification\",\n    },\n  },\n  country: {\n    widget: refinementList,\n    title: \"Pays\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"country\",\n    },\n  },\n  designation: {\n    widget: refinementList,\n    title: \"D\u00E9signation\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"designation\",\n    },\n  },\n  sub_region: {\n    widget: refinementList,\n    title: \"Sous-r\u00E9gion\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"sub_region\",\n    },\n  },\n  sub_type: {\n    widget: refinementList,\n    title: \"Sous-type\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"sub_type\",\n    },\n  },\n  type: {\n    widget: refinementList,\n    title: \"Type\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"type\",\n    },\n  },\n  region: {\n    widget: refinementList,\n    title: \"R\u00E9gion\",\n    options: {\n      ...refinementListDefaultOptions,\n      attribute: \"region\",\n    },\n  },\n};\n", "export default {\n  showLoadingIndicator: false,\n  cssClasses: {\n    list: \"c-list-cards-root c-list-cards-format-vertical\",\n    item: \"c-card-root c-card-format-horizontal\",\n    loadMore: \"c-button-root c-button-size-tiny c-button-position-center\",\n  },\n  templates: {\n    empty(results, { html }) {\n      return html`<div class=\"c-admin--list-root\">\n        Aucun r\u00E9sultat pour <q>${results.query}</q>\n      </div>`;\n    },\n    item(hit, { html, components }) {\n      let url = hit.hit_url || hit.website_url;\n      url = url.replace(\":customer_id\", hit.customer_code);\n      url = url.replace(\"%3Aidentity_id\", hit.model_id);\n      url = new URL(url);\n      // link to path only, without domain\n      const href = url.pathname + url.search;\n      const packshot =\n        hit.packshots?.horizontal?.medium ||\n        \"/fallbacks/packshot-horizontal-medium.png\";\n      let vintages = [hit.vintages.at(-1)];\n      if (hit.vintages.length > 1) vintages.push(hit.vintages.at(0));\n      return html`\n        <div class=\"c-card-image-wrapper\">\n          ${packshot\n            ? html`<img\n                src=\"${packshot}\"\n                loading=\"lazy\"\n                class=\"c-card-image\"\n              />`\n            : html`<svg class=\"c-icon-root c-icon-trek--pic\" role=\"img\">\n                <use xlink:href=\"#c-icon-trek--pic\"></use>\n              </svg>`}\n        </div>\n\n        <div class=\"c-card-content\">\n          <div class=\"c-card-title\">\n            <a href=\"${href}\" class=\"c-card-link\"\n              >${components.Highlight({ hit, attribute: \"display_name\" })}\n            </a>\n          </div>\n          ${hit.show_vintages\n            ? html`<div class=\"c-card-info\">\n                <span class=\"c-card-year\">${vintages.join(\" \u2192 \")}</span>\n              </div>`\n            : \"\"}\n        </div>\n        <svg class=\"c-icon-root c-icon-long-arrow-right c-card-icon\" role=\"img\">\n          <use xlink:href=\"#c-icon-long-arrow-right\"></use>\n        </svg>\n      `;\n    },\n    showMoreText(data, { html }) {\n      return html`<span class=\"c-button-text\">Voir plus de r\u00E9sultats</span>`;\n    },\n  },\n};\n", "export default {\n  cssClasses: {\n    form: \"c-search--box-form\",\n    input: \"c-search--box-input\",\n    loadingIndicator: \"c-search--box-loading\",\n    reset: \"c-search--box-reset\",\n    submit: \"c-search--box-submit\",\n  },\n  placeholder: \"Rechercher\",\n};\n", "export default {\n  cssClasses: {\n    noRefinementRoot: \"c-search--refinements-empty\",\n    list: \"c-search--refinements-items\",\n    item: \"c-search--refinements-item\",\n    label: \"c-search--refinements-label\",\n    category: \"c-search--refinements-category\",\n    \"category-label\": \"c-search--refinements-category-label\",\n    delete: \"c-search--refinements-delete\",\n  },\n};\n", "import \"./box_component.css\";\n", "import \"./filters_component.css\";\n", "import \"./hits_component.css\";\n", "import \"./refinements_component.css\";\n", "import \"./search_box_component.css\";\n", "import \"./section_component.css\";\n", "import \"./static_buttons_component.css\";\n", "import \"./stock_card_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  connect() {\n    this.accordionIcon = this.element.querySelector(\n      \".c-stock-card-accordion-icon\"\n    );\n    this.accordionIcon.addEventListener(\n      \"click\",\n      this.handleIconClick.bind(this)\n    );\n  }\n\n  disconnect() {\n    this.accordionIcon.removeEventListener(\n      \"click\",\n      this.handleIconClick.bind(this)\n    );\n  }\n\n  handleIconClick(event) {\n    event.preventDefault();\n\n    this.element\n      .querySelectorAll(\".c-stock-card-accordion-item\")\n      .forEach((item) => {\n        item.classList.toggle(\"c-stock-card-accordion-item-is-open\");\n      });\n\n    this.accordionIcon.classList.toggle(\"c-stock-card-accordion-icon-is-open\");\n  }\n}\n", "import * as d3 from \"d3\";\nimport \"./tasting_zone_component.css\";\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  static values = {\n    drinkFrom: Number,\n    drinkTo: Number,\n    heydayFrom: Number,\n    heydayTo: Number,\n    vintageYear: Number,\n  };\n\n  margin = { top: 0, right: 15, bottom: 0, left: 15 };\n\n  connect() {\n    this.setupDatesAndScale();\n    this.setupSvg();\n    this.resize();\n  }\n\n  setupDatesAndScale() {\n    this.greenZoneStartDate = new Date(this.drinkFromValue, 0, 1);\n    this.greenZoneEndDate = new Date(this.drinkToValue, 0, 1);\n    this.xScale = d3\n      .scaleTime()\n      .domain([new Date(this.vintageYear, 0, 1), this.greenZoneEndDate]);\n  }\n\n  setupSvg() {\n    this.svg = d3\n      .select(\".c-tasting-zone-timeline\")\n      .append(\"svg\")\n      .attr(\"width\", \"100%\")\n      .attr(\"height\", \"25\");\n  }\n\n  resize() {\n    const parentWidth = d3\n      .select(\".c-tasting-zone-timeline\")\n      .node()\n      .getBoundingClientRect().width;\n    this.width = parentWidth - this.margin.left - this.margin.right;\n    this.xScale.range([this.margin.left, this.width - this.margin.right]);\n    this.svg.attr(\"width\", parentWidth);\n    this.updateAll();\n  }\n\n  updateAll() {\n    this.updateAxis();\n    this.updateThumbAndThumbBg();\n    this.updateTastingZonePeriod();\n    this.updateHashZone();\n    this.updateHashZoneTitle();\n  }\n\n  updateAxis() {\n    let tickValues = [\n      new Date(this.vintageYear, 0, 1),\n      this.greenZoneStartDate,\n      this.greenZoneEndDate,\n      new Date(this.heydayFromValue, 0, 1),\n      new Date(this.heydayToValue, 0, 1),\n    ];\n    this.svg.call(d3.axisBottom(this.xScale).tickValues(tickValues));\n  }\n\n  updateThumbAndThumbBg() {\n    let currentDate = new Date();\n    let xPosition = this.xScale(currentDate);\n    this.updateThumb(\".c-tasting-zone-thumb\", xPosition, currentDate);\n    this.updateThumb(\".c-tasting-zone-thumb-bg\", xPosition);\n  }\n\n  updateThumb(id, xPosition) {\n    let currentDate = new Date();\n    let thumb = d3.select(id);\n    thumb.attr(\"cx\", xPosition);\n    if (this.isInGreenZone(currentDate)) {\n      thumb.attr(\"stroke\", \"#59CB00\");\n    } else {\n      thumb.attr(\"stroke\", \"#aba7af\");\n    }\n  }\n\n  isInGreenZone(date) {\n    return date >= this.greenZoneStartDate && date <= this.greenZoneEndDate;\n  }\n\n  updateTastingZonePeriod() {\n    this.updateTastingZone(\n      \".c-tasting-zone-period\",\n      this.greenZoneStartDate,\n      this.greenZoneEndDate\n    );\n  }\n\n  updateTastingZone(id, startDate, endDate) {\n    let zone = d3.select(id);\n    zone\n      .attr(\"x\", this.xScale(startDate))\n      .attr(\"width\", this.xScale(endDate) - this.xScale(startDate));\n  }\n\n  updateHashZone() {\n    let hashZoneStartDate = new Date(this.heydayFromValue, 0, 1);\n    let hashZoneEndDate = new Date(this.heydayToValue, 0, 1);\n    this.updateTastingZone(\n      \".c-tasting-zone-hash-zone-hashed\",\n      hashZoneStartDate,\n      hashZoneEndDate\n    );\n    this.updateLine(\".c-tasting-zone-hash-zone-start-line\", hashZoneStartDate);\n    this.updateLine(\".c-tasting-zone-hash-zone-end-line\", hashZoneEndDate);\n  }\n\n  updateLine(id, date) {\n    let line = d3.select(id);\n    let xPosition = this.xScale(date);\n    line.attr(\"x1\", xPosition).attr(\"x2\", xPosition);\n  }\n\n  updateHashZoneTitle() {\n    let hashZone = d3.select(\".c-tasting-zone-hash-zone-hashed\");\n    let hashZoneTitle = d3.select(\".c-tasting-zone-hash-zone-title\");\n    let hashZoneBBox = hashZone.node().getBBox();\n    let titleBBox = hashZoneTitle.node().getBBox();\n    let hashZoneCenterX = hashZoneBBox.x + hashZoneBBox.width / 2;\n    let titleX = hashZoneCenterX - titleBBox.width / 2;\n    hashZoneTitle.attr(\"transform\", `translate(${titleX - titleBBox.x}, 0)`);\n  }\n\n  get vintageYear() {\n    if (this.vintageYearValue == \"0\") {\n      return this.drinkFromValue - 2;\n    }\n\n    return this.vintageYearValue;\n  }\n}\n", "import \"./tile_component.css\";\n", "import \"./tiles_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./timeline_component.css\";\n", "import \"./toast_component.css\";\n\nimport { Controller as BaseController } from \"@hotwired/stimulus\";\n\nexport class Controller extends BaseController {\n  connect() {\n    if (this.element.classList.contains(\"c-toast-fixed\")) {\n      this.hideToastAfterDelay();\n    }\n  }\n\n  hideToastAfterDelay() {\n    setTimeout(() => {\n      this.element.style.opacity = \"0\";\n      setTimeout(() => {\n        this.element.remove();\n      }, 500);\n    }, 5000);\n  }\n}\n", "import \"./group_component.css\";\n\n// Add a Stimulus controller for this component.\n// It will automatically registered and its name will be available\n// via #component_name in the component class.\n//\n// import { Controller as BaseController } from \"@hotwired/stimulus\";\n//\n// export class Controller extends BaseController {\n//   connect() {\n//   }\n//\n//   disconnect() {\n//   }\n// }\n", "import \"./table_component.css\";\n", "\n        import * as module0 from './action_card_component/action_card_component.js';import * as module1 from './admin/button_group_component/button_group_component.js';import * as module2 from './admin/customer_switch_component/customer_switch_component.js';import * as module3 from './admin/list/item_component/item_component.js';import * as module4 from './admin/list_component/list_component.js';import * as module5 from './admin/product_glimpse_component/product_glimpse_component.js';import * as module6 from './admin/search/algolia_component/algolia_component.js';import * as module7 from './admin/search/box_component/box_component.js';import * as module8 from './admin/search/filters_component/filters_component.js';import * as module9 from './admin/search/hits_component/hits_component.js';import * as module10 from './admin/search/refinements_component/refinements_component.js';import * as module11 from './admin/spinner_component/spinner_component.js';import * as module12 from './avatar_component/avatar_component.js';import * as module13 from './banner_component/banner_component.js';import * as module14 from './bouncer_component/bouncer_component.js';import * as module15 from './button_component/button_component.js';import * as module16 from './calendar_component/calendar_component.js';import * as module17 from './card_component/card_component.js';import * as module18 from './carousel_component/carousel_component.js';import * as module19 from './cart_line_component/cart_line_component.js';import * as module20 from './cart_lines_component/cart_lines_component.js';import * as module21 from './chip_component/chip_component.js';import * as module22 from './collapse_button_component/collapse_button_component.js';import * as module23 from './comment_component/comment_component.js';import * as module24 from './container_component/container_component.js';import * as module25 from './customer_card_component/customer_card_component.js';import * as module26 from './customer_cards_component/customer_cards_component.js';import * as module27 from './drawer_component/drawer_component.js';import * as module28 from './feature_table_component/feature_table_component.js';import * as module29 from './footer_component/footer_component.js';import * as module30 from './form/enum_radio_buttons_component/enum_radio_buttons_component.js';import * as module31 from './form/export_component/export_component.js';import * as module32 from './form/fieldset_component/fieldset_component.js';import * as module33 from './form/footer_component/footer_component.js';import * as module34 from './form/group_component/group_component.js';import * as module35 from './form/password_field_component/password_field_component.js';import * as module36 from './form/payment_setup_component/payment_setup_component.js';import * as module37 from './form/uppy_component/uppy_component.js';import * as module38 from './form/vintage_year_selector_component/vintage_year_selector_component.js';import * as module39 from './gate_component/gate_component.js';import * as module40 from './graph_chart_component/graph_chart_component.js';import * as module41 from './graph_component/graph_component.js';import * as module42 from './graph_line_component/graph_line_component.js';import * as module43 from './header_component/header_component.js';import * as module44 from './help_link_component/help_link_component.js';import * as module45 from './icon_component/icon_component.js';import * as module46 from './identity_page_component/identity_page_component.js';import * as module47 from './interstitial_component/interstitial_component.js';import * as module48 from './layout/stack_component/stack_component.js';import * as module49 from './list/item_component/item_component.js';import * as module50 from './list_cards_component/list_cards_component.js';import * as module51 from './list_component/list_component.js';import * as module52 from './logo_component/logo_component.js';import * as module53 from './menu_component/menu_component.js';import * as module54 from './nav_component/nav_component.js';import * as module55 from './nav_item_component/nav_item_component.js';import * as module56 from './pairings/card_component/card_component.js';import * as module57 from './pairings_component/pairings_component.js';import * as module58 from './pill_component/pill_component.js';import * as module59 from './pricing_table_component/pricing_table_component.js';import * as module60 from './progress_bar_component/progress_bar_component.js';import * as module61 from './properties_component/properties_component.js';import * as module62 from './search/algolia_component/algolia_component.js';import * as module63 from './search/box_component/box_component.js';import * as module64 from './search/filters_component/filters_component.js';import * as module65 from './search/hits_component/hits_component.js';import * as module66 from './search/refinements_component/refinements_component.js';import * as module67 from './search_box_component/search_box_component.js';import * as module68 from './section_component/section_component.js';import * as module69 from './static_buttons_component/static_buttons_component.js';import * as module70 from './stock_card_component/stock_card_component.js';import * as module71 from './tasting_zone_component/tasting_zone_component.js';import * as module72 from './tile_component/tile_component.js';import * as module73 from './tiles_component/tiles_component.js';import * as module74 from './timeline_component/timeline_component.js';import * as module75 from './toast_component/toast_component.js';import * as module76 from './trek/form/group_component/group_component.js';import * as module77 from './trek/table_component/table_component.js'\n        const modules = [{name: 'action-card-component--action-card-component.js', module: module0, filename: 'action_card_component/action_card_component.js'},{name: 'admin--button-group-component--button-group-component.js', module: module1, filename: 'admin/button_group_component/button_group_component.js'},{name: 'admin--customer-switch-component--customer-switch-component.js', module: module2, filename: 'admin/customer_switch_component/customer_switch_component.js'},{name: 'admin--list--item-component--item-component.js', module: module3, filename: 'admin/list/item_component/item_component.js'},{name: 'admin--list-component--list-component.js', module: module4, filename: 'admin/list_component/list_component.js'},{name: 'admin--product-glimpse-component--product-glimpse-component.js', module: module5, filename: 'admin/product_glimpse_component/product_glimpse_component.js'},{name: 'admin--search--algolia-component--algolia-component.js', module: module6, filename: 'admin/search/algolia_component/algolia_component.js'},{name: 'admin--search--box-component--box-component.js', module: module7, filename: 'admin/search/box_component/box_component.js'},{name: 'admin--search--filters-component--filters-component.js', module: module8, filename: 'admin/search/filters_component/filters_component.js'},{name: 'admin--search--hits-component--hits-component.js', module: module9, filename: 'admin/search/hits_component/hits_component.js'},{name: 'admin--search--refinements-component--refinements-component.js', module: module10, filename: 'admin/search/refinements_component/refinements_component.js'},{name: 'admin--spinner-component--spinner-component.js', module: module11, filename: 'admin/spinner_component/spinner_component.js'},{name: 'avatar-component--avatar-component.js', module: module12, filename: 'avatar_component/avatar_component.js'},{name: 'banner-component--banner-component.js', module: module13, filename: 'banner_component/banner_component.js'},{name: 'bouncer-component--bouncer-component.js', module: module14, filename: 'bouncer_component/bouncer_component.js'},{name: 'button-component--button-component.js', module: module15, filename: 'button_component/button_component.js'},{name: 'calendar-component--calendar-component.js', module: module16, filename: 'calendar_component/calendar_component.js'},{name: 'card-component--card-component.js', module: module17, filename: 'card_component/card_component.js'},{name: 'carousel-component--carousel-component.js', module: module18, filename: 'carousel_component/carousel_component.js'},{name: 'cart-line-component--cart-line-component.js', module: module19, filename: 'cart_line_component/cart_line_component.js'},{name: 'cart-lines-component--cart-lines-component.js', module: module20, filename: 'cart_lines_component/cart_lines_component.js'},{name: 'chip-component--chip-component.js', module: module21, filename: 'chip_component/chip_component.js'},{name: 'collapse-button-component--collapse-button-component.js', module: module22, filename: 'collapse_button_component/collapse_button_component.js'},{name: 'comment-component--comment-component.js', module: module23, filename: 'comment_component/comment_component.js'},{name: 'container-component--container-component.js', module: module24, filename: 'container_component/container_component.js'},{name: 'customer-card-component--customer-card-component.js', module: module25, filename: 'customer_card_component/customer_card_component.js'},{name: 'customer-cards-component--customer-cards-component.js', module: module26, filename: 'customer_cards_component/customer_cards_component.js'},{name: 'drawer-component--drawer-component.js', module: module27, filename: 'drawer_component/drawer_component.js'},{name: 'feature-table-component--feature-table-component.js', module: module28, filename: 'feature_table_component/feature_table_component.js'},{name: 'footer-component--footer-component.js', module: module29, filename: 'footer_component/footer_component.js'},{name: 'form--enum-radio-buttons-component--enum-radio-buttons-component.js', module: module30, filename: 'form/enum_radio_buttons_component/enum_radio_buttons_component.js'},{name: 'form--export-component--export-component.js', module: module31, filename: 'form/export_component/export_component.js'},{name: 'form--fieldset-component--fieldset-component.js', module: module32, filename: 'form/fieldset_component/fieldset_component.js'},{name: 'form--footer-component--footer-component.js', module: module33, filename: 'form/footer_component/footer_component.js'},{name: 'form--group-component--group-component.js', module: module34, filename: 'form/group_component/group_component.js'},{name: 'form--password-field-component--password-field-component.js', module: module35, filename: 'form/password_field_component/password_field_component.js'},{name: 'form--payment-setup-component--payment-setup-component.js', module: module36, filename: 'form/payment_setup_component/payment_setup_component.js'},{name: 'form--uppy-component--uppy-component.js', module: module37, filename: 'form/uppy_component/uppy_component.js'},{name: 'form--vintage-year-selector-component--vintage-year-selector-component.js', module: module38, filename: 'form/vintage_year_selector_component/vintage_year_selector_component.js'},{name: 'gate-component--gate-component.js', module: module39, filename: 'gate_component/gate_component.js'},{name: 'graph-chart-component--graph-chart-component.js', module: module40, filename: 'graph_chart_component/graph_chart_component.js'},{name: 'graph-component--graph-component.js', module: module41, filename: 'graph_component/graph_component.js'},{name: 'graph-line-component--graph-line-component.js', module: module42, filename: 'graph_line_component/graph_line_component.js'},{name: 'header-component--header-component.js', module: module43, filename: 'header_component/header_component.js'},{name: 'help-link-component--help-link-component.js', module: module44, filename: 'help_link_component/help_link_component.js'},{name: 'icon-component--icon-component.js', module: module45, filename: 'icon_component/icon_component.js'},{name: 'identity-page-component--identity-page-component.js', module: module46, filename: 'identity_page_component/identity_page_component.js'},{name: 'interstitial-component--interstitial-component.js', module: module47, filename: 'interstitial_component/interstitial_component.js'},{name: 'layout--stack-component--stack-component.js', module: module48, filename: 'layout/stack_component/stack_component.js'},{name: 'list--item-component--item-component.js', module: module49, filename: 'list/item_component/item_component.js'},{name: 'list-cards-component--list-cards-component.js', module: module50, filename: 'list_cards_component/list_cards_component.js'},{name: 'list-component--list-component.js', module: module51, filename: 'list_component/list_component.js'},{name: 'logo-component--logo-component.js', module: module52, filename: 'logo_component/logo_component.js'},{name: 'menu-component--menu-component.js', module: module53, filename: 'menu_component/menu_component.js'},{name: 'nav-component--nav-component.js', module: module54, filename: 'nav_component/nav_component.js'},{name: 'nav-item-component--nav-item-component.js', module: module55, filename: 'nav_item_component/nav_item_component.js'},{name: 'pairings--card-component--card-component.js', module: module56, filename: 'pairings/card_component/card_component.js'},{name: 'pairings-component--pairings-component.js', module: module57, filename: 'pairings_component/pairings_component.js'},{name: 'pill-component--pill-component.js', module: module58, filename: 'pill_component/pill_component.js'},{name: 'pricing-table-component--pricing-table-component.js', module: module59, filename: 'pricing_table_component/pricing_table_component.js'},{name: 'progress-bar-component--progress-bar-component.js', module: module60, filename: 'progress_bar_component/progress_bar_component.js'},{name: 'properties-component--properties-component.js', module: module61, filename: 'properties_component/properties_component.js'},{name: 'search--algolia-component--algolia-component.js', module: module62, filename: 'search/algolia_component/algolia_component.js'},{name: 'search--box-component--box-component.js', module: module63, filename: 'search/box_component/box_component.js'},{name: 'search--filters-component--filters-component.js', module: module64, filename: 'search/filters_component/filters_component.js'},{name: 'search--hits-component--hits-component.js', module: module65, filename: 'search/hits_component/hits_component.js'},{name: 'search--refinements-component--refinements-component.js', module: module66, filename: 'search/refinements_component/refinements_component.js'},{name: 'search-box-component--search-box-component.js', module: module67, filename: 'search_box_component/search_box_component.js'},{name: 'section-component--section-component.js', module: module68, filename: 'section_component/section_component.js'},{name: 'static-buttons-component--static-buttons-component.js', module: module69, filename: 'static_buttons_component/static_buttons_component.js'},{name: 'stock-card-component--stock-card-component.js', module: module70, filename: 'stock_card_component/stock_card_component.js'},{name: 'tasting-zone-component--tasting-zone-component.js', module: module71, filename: 'tasting_zone_component/tasting_zone_component.js'},{name: 'tile-component--tile-component.js', module: module72, filename: 'tile_component/tile_component.js'},{name: 'tiles-component--tiles-component.js', module: module73, filename: 'tiles_component/tiles_component.js'},{name: 'timeline-component--timeline-component.js', module: module74, filename: 'timeline_component/timeline_component.js'},{name: 'toast-component--toast-component.js', module: module75, filename: 'toast_component/toast_component.js'},{name: 'trek--form--group-component--group-component.js', module: module76, filename: 'trek/form/group_component/group_component.js'},{name: 'trek--table-component--table-component.js', module: module77, filename: 'trek/table_component/table_component.js'}]\n        export default modules;\n      ", "import { application } from \"../javascript/controllers/application\";\nimport components from \"./**/*_component.js\";\n\ncomponents.forEach((component) => {\n  const path = component.filename;\n\n  // Skip admin components\n  if (path.startsWith(\"admin/\")) return;\n\n  // Check whether a module has the Controller export defined\n  if (!component.module.Controller) return;\n\n  // Convert path into a controller identifier:\n  //   example_component/example_component.js -> example\n  //   nav/user_info_component/user_info_component.js -> nav--user-info\n  const identifier = /^(.+)_component\\//\n    .exec(path)[1]\n    .replace(/^\\.\\//, \"\")\n    .replace(/_/g, \"-\")\n    .replace(/\\//g, \"--\");\n\n  application.register(identifier, component.module.Controller);\n});\n"],
  "mappings": "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",
  "names": ["adapters_default", "init_adapters", "__esmMin", "logger_default", "init_logger", "__esmMin", "init_adapters", "messages", "adapters_default", "now", "secondsSince", "ConnectionMonitor", "connection_monitor_default", "init_connection_monitor", "__esmMin", "init_logger", "time", "connection", "logger_default", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "internal_default", "init_internal", "__esmMin", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "connection_default", "init_connection", "__esmMin", "init_adapters", "init_connection_monitor", "init_internal", "init_logger", "internal_default", "consumer", "connection_monitor_default", "data", "logger_default", "socketProtocols", "adapters_default", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "Subscription", "init_subscription", "__esmMin", "object", "properties", "key", "value", "consumer", "params", "mixin", "action", "data", "SubscriptionGuarantor", "subscription_guarantor_default", "init_subscription_guarantor", "__esmMin", "init_logger", "subscriptions", "subscription", "logger_default", "s", "Subscriptions", "init_subscriptions", "__esmMin", "init_subscription", "init_subscription_guarantor", "init_logger", "consumer", "subscription_guarantor_default", "channelName", "mixin", "channel", "params", "subscription", "Subscription", "identifier", "s", "callbackName", "args", "subscriptions", "logger_default", "command", "createWebSocketURL", "url", "a", "Consumer", "init_consumer", "__esmMin", "init_connection", "init_subscriptions", "Subscriptions", "connection_default", "data", "subprotocol", "src_exports", "__export", "connection_default", "connection_monitor_default", "Consumer", "internal_default", "Subscription", "subscription_guarantor_default", "Subscriptions", "adapters_default", "createConsumer", "createWebSocketURL", "getConfig", "logger_default", "url", "name", "element", "init_src", "__esmMin", "init_connection", "init_connection_monitor", "init_consumer", "init_internal", "init_subscription", "init_subscriptions", "init_subscription_guarantor", "init_adapters", "init_logger", "require_algoliasearch_lite_umd", "__commonJSMin", "exports", "module", "e", "t", "r", "n", "o", "a", "u", "i", "s", "l", "f", "h", "m", "d", "v", "g", "b", "O", "P", "q", "j", "c", "A", "S", "p", "x", "w", "T", "N", "C", "E", "J", "k", "F", "I", "R", "D", "W", "H", "Q", "L", "require_events", "__commonJSMin", "exports", "module", "EventEmitter", "n", "isNumber", "type", "er", "handler", "len", "args", "i", "listeners", "isObject", "err", "isUndefined", "isFunction", "listener", "m", "fired", "g", "list", "position", "length", "key", "ret", "evlistener", "emitter", "arg", "require_inherits", "__commonJSMin", "exports", "module", "inherits", "ctor", "superCtor", "require_DerivedHelper", "__commonJSMin", "exports", "module", "EventEmitter", "inherits", "DerivedHelper", "mainHelper", "fn", "recommendFn", "parameters", "require_escapeFacetValue", "__commonJSMin", "exports", "module", "escapeFacetValue", "value", "unescapeFacetValue", "require_merge", "__commonJSMin", "exports", "module", "clone", "value", "_merge", "isObjectOrArrayOrFunction", "target", "source", "key", "sourceVal", "targetVal", "merge", "i", "l", "require_objectHasKeys", "__commonJSMin", "exports", "module", "objectHasKeys", "obj", "require_omit", "__commonJSMin", "exports", "module", "_objectWithoutPropertiesLoose", "source", "excluded", "target", "sourceKeys", "key", "i", "require_RecommendParameters", "__commonJSMin", "exports", "module", "RecommendParameters", "opts", "params", "newParams", "id", "param", "indexName", "cache", "query", "require_RecommendResults", "__commonJSMin", "exports", "module", "RecommendResults", "state", "results", "self", "param", "id", "require_requestBuilder", "__commonJSMin", "exports", "module", "merge", "sortObject", "obj", "acc", "curr", "requestBuilder", "index", "state", "queries", "refinedFacet", "hierarchicalFacet", "currentRefinement", "separator", "filtersMap", "map", "segment", "level", "filter", "params", "hasHierarchicalFacetFilter", "value", "attribute", "filteredFacetFilters", "facetFilter", "filtered", "filterValue", "parent", "facets", "facetFilters", "numericFilters", "tagFilters", "additionalParams", "facet", "hierarchicalRootLevel", "facetName", "operators", "operator", "values", "vs", "v", "facetsRefinements", "facetValues", "facetValue", "facetsExcludes", "disjunctiveFacetsRefinements", "orFilters", "hierarchicalFacetsRefinements", "rootPath", "attributeToRefine", "attributesIndex", "out", "allAttributes", "hierarchicalRefinement", "newAttributes", "rootLevel", "attributeIndex", "parentLevel", "query", "maxFacetHits", "stateForSearchForFacetValues", "searchForFacetSearchParameters", "require_defaultsPure", "__commonJSMin", "exports", "module", "sources", "acc", "source", "key", "require_find", "__commonJSMin", "exports", "module", "array", "comparator", "i", "require_intersection", "__commonJSMin", "exports", "module", "intersection", "arr1", "arr2", "value", "index", "require_valToNumber", "__commonJSMin", "exports", "module", "valToNumber", "v", "require_isValidUserToken", "__commonJSMin", "exports", "module", "userToken", "require_RefinementList", "__commonJSMin", "exports", "module", "defaultsPure", "objectHasKeys", "omit", "lib", "refinementList", "attribute", "value", "valueAsString", "facetRefinement", "mod", "v", "f", "refinementType", "hasChanged", "newRefinementList", "memo", "key", "values", "facetList", "refinementValue", "containsRefinements", "refinementValueAsString", "require_SearchParameters", "__commonJSMin", "exports", "module", "defaultsPure", "find", "intersection", "merge", "objectHasKeys", "omit", "valToNumber", "isValidUserToken", "RefinementList", "isEqualNumericRefinement", "a", "b", "el", "i", "findArray", "array", "searchedValue", "currentValue", "SearchParameters", "newParameters", "params", "self", "paramName", "isKeyKnown", "isValueDefined", "partialState", "numbers", "numberKeys", "k", "value", "parsedValue", "geoRect", "numericRefinements", "attribute", "operators", "operator", "values", "parsedValues", "v", "vPrime", "instance", "hierarchicalFacets", "facet", "currentRefinement", "currentState", "parameters", "patch", "index", "newQuery", "newPage", "facets", "n", "typoTolerance", "val", "mod", "facetName", "number", "paramValue", "key", "hasChanged", "newNumericRefinements", "memo", "operatorList", "outValues", "predicateResult", "hierarchicalFacet", "tag", "modification", "f", "t", "separator", "upOneOrMultipleLevel", "path", "refinements", "isOperatorDefined", "isAttributeValueDefined", "disjunctiveNumericRefinedFacets", "refinedFacets", "managedParameters", "queryParams", "parameter", "error", "nextWithNumbers", "previousPlainObject", "acc", "nextPlainObject", "previous", "isPreviousValueDefined", "isNextValueDefined", "hierarchicalFacetName", "refinement", "part", "require_compact", "__commonJSMin", "exports", "module", "array", "require_findIndex", "__commonJSMin", "exports", "module", "array", "comparator", "i", "require_formatSort", "__commonJSMin", "exports", "module", "find", "sortBy", "defaults", "defaultInstructions", "sort", "out", "sortInstruction", "matchingDefault", "defaultInstruction", "require_orderBy", "__commonJSMin", "exports", "module", "compareAscending", "value", "other", "valIsDefined", "valIsNull", "othIsDefined", "othIsNull", "orderBy", "collection", "iteratees", "orders", "result", "index", "iteratee", "object", "res", "require_generate_hierarchical_tree", "__commonJSMin", "exports", "module", "generateTrees", "fv", "find", "prepareHierarchicalFacetSortBy", "orderBy", "escapeFacetValue", "unescapeFacetValue", "state", "hierarchicalFacetResult", "hierarchicalFacetIndex", "hierarchicalFacet", "hierarchicalFacetRefinement", "hierarchicalSeparator", "hierarchicalRootPath", "hierarchicalShowParentLevel", "sortBy", "rootExhaustive", "facetResult", "generateTreeFn", "generateHierarchicalTree", "results", "currentRefinement", "hierarchicalTree", "currentHierarchicalLevel", "parent", "level", "data", "subtree", "picked", "facetValue", "tuple", "onlyMatchingTree", "facetCount", "format", "parentPath", "exhaustive", "parts", "require_SearchResults", "__commonJSMin", "exports", "module", "compact", "defaultsPure", "fv", "find", "findIndex", "formatSort", "merge", "orderBy", "escapeFacetValue", "unescapeFacetValue", "generateHierarchicalTree", "getIndices", "attributes", "indices", "val", "idx", "assignFacetStats", "dest", "facetStats", "key", "findMatchingHierarchicalFacetFromAttributeName", "hierarchicalFacets", "hierarchicalAttributeName", "hierarchicalFacet", "facetNames", "SearchResults", "state", "results", "options", "mainSubResponse", "self", "opts", "sum", "result", "disjunctiveFacets", "facetsIndices", "disjunctiveFacetsIndices", "nextDisjunctiveResult", "mainFacets", "facetKey", "facetValueObject", "facetIndex", "idxAttributeName", "f", "isFacetDisjunctive", "isFacetConjunctive", "position", "disjunctiveFacet", "facets", "dfacet", "facetResults", "attributeIndex", "dataFromMainRequest", "refinementValue", "refinedFacet", "separator", "currentRefinement", "defaultData", "root", "facetName", "excludes", "facetValue", "name", "predicate", "facet", "extractNormalizedFacetValues", "attribute", "value", "hierarchicalFacetValues", "currentRefinementSplit", "setIsRefined", "item", "depth", "child", "recSort", "sortFn", "node", "names", "level", "children", "childNode", "sortedChildren", "newNode", "vanillaSortFn", "order", "data", "sortViaFacetOrdering", "facetValues", "facetOrdering", "orderedFacets", "remainingFacets", "reverseOrder", "acc", "i", "sortRemainingBy", "ordering", "getFacetOrdering", "config", "getFacetStatsIfAvailable", "facetList", "res", "attributeName", "getRefinement", "getHierarchicalRefinement", "operators", "operator", "type", "resultsFacets", "count", "exhaustive", "facetDeclaration", "split", "rootFacet", "intermediateFacet", "part", "newFacet", "path", "require_flat", "__commonJSMin", "exports", "module", "arr", "acc", "val", "require_sortAndMergeRecommendations", "__commonJSMin", "exports", "module", "find", "flat", "getAverageIndices", "indexTracker", "nrOfObjs", "avgIndices", "key", "a", "b", "sortAndMergeRecommendations", "results", "hits", "hit", "index", "sortedAverageIndices", "finalOrder", "orderedHits", "avgIndexRef", "result", "require_version", "__commonJSMin", "exports", "module", "require_algoliasearch_helper", "__commonJSMin", "exports", "module", "EventEmitter", "DerivedHelper", "escapeFacetValue", "inherits", "merge", "objectHasKeys", "omit", "RecommendParameters", "RecommendResults", "requestBuilder", "SearchParameters", "SearchResults", "sortAndMergeRecommendations", "version", "AlgoliaSearchHelper", "client", "index", "options", "searchResultsOptions", "opts", "state", "cb", "tempState", "queries", "self", "content", "err", "e", "derivedHelper", "derivedState", "data", "errorMessage", "facet", "query", "maxFacetHits", "userState", "clientHasSFFV", "clientHasInitIndex", "isDisjunctive", "algoliaQuery", "searchForFacetValuesPromise", "response", "f", "q", "name", "value", "path", "attribute", "operator", "tag", "params", "id", "page", "setCurrentPage", "parameter", "newState", "getCurrentPage", "facetName", "refinements", "conjRefinements", "r", "excludeRefinements", "disjunctiveRefinements", "numericRefinements", "states", "mainQueries", "derivedQueries", "derivedStateQueries", "queryId", "error", "searchState", "recommendState", "ids", "param", "cache", "derivedIndex", "results", "queriesCount", "helper", "specificResults", "idsMap", "indices", "firstResult", "idx", "s", "facetFilters", "numericFilters", "tagFilters", "event", "isPageReset", "newClient", "fn", "recommendFn", "pos", "require_algoliasearch_helper", "__commonJSMin", "exports", "module", "AlgoliaSearchHelper", "RecommendParameters", "SearchParameters", "SearchResults", "algoliasearchHelper", "client", "index", "opts", "searchResultsOptions", "require_formats", "__commonJSMin", "exports", "module", "replace", "percentTwenties", "Format", "value", "require_utils", "__commonJSMin", "exports", "module", "formats", "has", "isArray", "hexTable", "array", "i", "compactQueue", "queue", "item", "obj", "compacted", "j", "arrayToObject", "source", "options", "merge", "target", "mergeTarget", "targetItem", "acc", "key", "value", "assign", "decode", "str", "decoder", "charset", "strWithoutPlus", "encode", "defaultEncoder", "kind", "format", "string", "$0", "out", "compact", "refs", "keys", "val", "isRegExp", "isBuffer", "combine", "a", "b", "maybeMap", "fn", "mapped", "require_stringify", "__commonJSMin", "exports", "module", "utils", "formats", "has", "arrayPrefixGenerators", "prefix", "key", "isArray", "split", "push", "pushToArray", "arr", "valueOrArray", "toISO", "defaultFormat", "defaults", "date", "isNonNullishPrimitive", "v", "stringify", "object", "generateArrayPrefix", "strictNullHandling", "skipNulls", "encoder", "filter", "sort", "allowDots", "serializeDate", "format", "formatter", "encodeValuesOnly", "charset", "obj", "value", "keyValue", "valuesArray", "valuesJoined", "i", "values", "objKeys", "keys", "j", "keyPrefix", "normalizeStringifyOptions", "opts", "options", "arrayFormat", "joined", "require_parse", "__commonJSMin", "exports", "module", "utils", "has", "isArray", "defaults", "interpretNumericEntities", "str", "$0", "numberStr", "parseArrayValue", "val", "options", "isoSentinel", "charsetSentinel", "parseValues", "obj", "cleanStr", "limit", "parts", "skipIndex", "i", "charset", "part", "bracketEqualsPos", "pos", "key", "encodedVal", "parseObject", "chain", "valuesParsed", "leaf", "root", "cleanRoot", "index", "parseKeys", "givenKey", "brackets", "child", "segment", "parent", "keys", "normalizeParseOptions", "opts", "tempObj", "newObj", "require_lib", "__commonJSMin", "exports", "module", "stringify", "parse", "formats", "require_compiler", "__commonJSMin", "exports", "Hogan", "rIsWhitespace", "rQuot", "rNewline", "rCr", "rSlash", "rLineSep", "rParagraphSep", "text", "delimiters", "len", "IN_TEXT", "IN_TAG_TYPE", "IN_TAG", "state", "tagType", "tag", "buf", "tokens", "seenTag", "i", "lineStart", "otag", "ctag", "addBuf", "lineIsWhitespace", "isAllWhitespace", "j", "filterLine", "haveSeenTag", "noNewLine", "next", "changeDelimiters", "index", "close", "closeIndex", "trim", "tagChange", "cleanTripleStache", "token", "s", "l", "allowedInSuper", "buildTree", "kind", "stack", "customTags", "instructions", "opener", "tail", "isOpener", "isCloser", "tags", "open", "stringifySubstitutions", "obj", "items", "key", "esc", "stringifyPartials", "codeObj", "partials", "options", "serialNo", "tree", "context", "code", "template", "chooseMethod", "createPartial", "node", "prefix", "sym", "ctx", "write", "tripleStache", "nodelist", "func", "name", "require_template", "__commonJSMin", "exports", "Hogan", "codeObj", "text", "compiler", "options", "context", "partials", "indent", "hoganEscape", "coerceToString", "symbol", "partial", "template", "createSpecializedPartial", "section", "tail", "isArray", "i", "val", "ctx", "inverted", "start", "end", "tags", "pass", "key", "returnFound", "found", "names", "doModelGet", "cx", "findInScope", "v", "func", "oldTags", "s", "r", "textSource", "result", "name", "f", "scope", "instance", "subs", "stackSubs", "stackPartials", "stackText", "PartialTemplate", "Substitutions", "rAmp", "rLt", "rGt", "rApos", "rQuot", "hChars", "str", "a", "require_hogan", "__commonJSMin", "exports", "module", "Hogan", "require_fr", "__commonJSMin", "exports", "module", "global", "factory", "fp", "French", "nth", "fr", "require_pure", "__commonJSMin", "exports", "_typeof", "obj", "V3_URL", "V3_URL_REGEX", "EXISTING_SCRIPT_MESSAGE", "findScript", "scripts", "i", "script", "injectScript", "params", "queryString", "headOrBody", "registerWrapper", "stripe", "startTime", "stripePromise", "onErrorListener", "onLoadListener", "onError", "reject", "onLoad", "resolve", "loadScript", "_script$parentNode", "error", "initStripe", "maybeStripe", "args", "validateLoadParams", "errorMessage", "loadParams", "loadStripeCalled", "loadStripe", "_len", "_key", "validatedParams", "parameterKeys", "sameParameters", "previousValue", "currentValue", "_loadParams", "require_pure", "__commonJSMin", "exports", "module", "require_namespace_emitter", "__commonJSMin", "exports", "module", "emitter", "_fns", "event", "arg1", "arg2", "arg3", "arg4", "arg5", "arg6", "toEmit", "getListeners", "emitAll", "fn", "one", "keep", "fns", "i", "l", "e", "out", "idx", "args", "keys", "key", "require_isObject", "__commonJSMin", "exports", "module", "isObject", "value", "type", "require_freeGlobal", "__commonJSMin", "exports", "module", "freeGlobal", "require_root", "__commonJSMin", "exports", "module", "freeGlobal", "freeSelf", "root", "require_now", "__commonJSMin", "exports", "module", "root", "now", "require_trimmedEndIndex", "__commonJSMin", "exports", "module", "reWhitespace", "trimmedEndIndex", "string", "index", "require_baseTrim", "__commonJSMin", "exports", "module", "trimmedEndIndex", "reTrimStart", "baseTrim", "string", "require_Symbol", "__commonJSMin", "exports", "module", "root", "Symbol", "require_getRawTag", "__commonJSMin", "exports", "module", "Symbol", "objectProto", "hasOwnProperty", "nativeObjectToString", "symToStringTag", "getRawTag", "value", "isOwn", "tag", "unmasked", "result", "require_objectToString", "__commonJSMin", "exports", "module", "objectProto", "nativeObjectToString", "objectToString", "value", "require_baseGetTag", "__commonJSMin", "exports", "module", "Symbol", "getRawTag", "objectToString", "nullTag", "undefinedTag", "symToStringTag", "baseGetTag", "value", "require_isObjectLike", "__commonJSMin", "exports", "module", "isObjectLike", "value", "require_isSymbol", "__commonJSMin", "exports", "module", "baseGetTag", "isObjectLike", "symbolTag", "isSymbol", "value", "require_toNumber", "__commonJSMin", "exports", "module", "baseTrim", "isObject", "isSymbol", "NAN", "reIsBadHex", "reIsBinary", "reIsOctal", "freeParseInt", "toNumber", "value", "other", "isBinary", "require_debounce", "__commonJSMin", "exports", "module", "isObject", "now", "toNumber", "FUNC_ERROR_TEXT", "nativeMax", "nativeMin", "debounce", "func", "wait", "options", "lastArgs", "lastThis", "maxWait", "result", "timerId", "lastCallTime", "lastInvokeTime", "leading", "maxing", "trailing", "invokeFunc", "time", "args", "thisArg", "leadingEdge", "timerExpired", "remainingWait", "timeSinceLastCall", "timeSinceLastInvoke", "timeWaiting", "shouldInvoke", "trailingEdge", "cancel", "flush", "debounced", "isInvoking", "require_throttle", "__commonJSMin", "exports", "module", "debounce", "isObject", "FUNC_ERROR_TEXT", "throttle", "func", "wait", "options", "leading", "trailing", "module", "num", "neg", "units", "exponent", "unit", "require_wildcard", "__commonJSMin", "exports", "module", "WildcardMatcher", "text", "separator", "input", "matches", "parts", "ii", "partsCount", "testParts", "key", "test", "matcher", "require_mime_match", "__commonJSMin", "exports", "module", "wildcard", "reMimePartSplit", "target", "pattern", "test", "result", "turbo_es2017_esm_exports", "__export", "FetchEnctype", "FetchMethod", "FetchRequest", "FetchResponse", "FrameElement", "FrameLoadingStyle", "FrameRenderer", "PageRenderer", "PageSnapshot", "StreamActions", "StreamElement", "StreamSourceElement", "cache", "clearCache", "config", "connectStreamSource", "disconnectStreamSource", "fetchWithTurboHeaders", "fetchEnctypeFromString", "fetchMethodFromString", "isSafe", "navigator$1", "registerAdapter", "renderStreamMessage", "session", "setConfirmMethod", "setFormMode", "setProgressBarDelay", "start", "visit", "prototype", "submitter", "validateSubmitter", "form", "raise", "errorConstructor", "message", "name", "submittersByForm", "findSubmitterFromClickTarget", "target", "element", "candidate", "clickCaptured", "event", "prototypeOfSubmitEvent", "FrameLoadingStyle", "_FrameElement", "value", "frameLoadingStyleFromString", "FrameElement", "__publicField", "style", "drive", "activateScriptElement", "createdScriptElement", "cspNonce", "getCspNonce", "copyElementAttributes", "destinationElement", "sourceElement", "createDocumentFragment", "html", "template", "dispatch", "eventName", "cancelable", "detail", "cancelEvent", "nextRepaint", "nextEventLoopTick", "nextAnimationFrame", "resolve", "nextMicrotask", "parseHTMLDocument", "unindent", "strings", "values", "lines", "interpolate", "match", "indent", "line", "result", "string", "uuid", "_", "i", "getAttribute", "attributeName", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "timeoutInMilliseconds", "onComplete", "getHistoryMethodForAction", "action", "isAction", "getVisitAction", "getMetaElement", "getMetaContent", "nonce", "content", "setMetaContent", "findClosestRecursively", "selector", "elementIsFocusable", "inertDisabledOrHidden", "queryAutofocusableElement", "elementOrDocumentFragment", "around", "callback", "reader", "before", "after", "doesNotTargetIFrame", "findLinkFromClickTarget", "getLocationForLink", "link", "expandURL", "debounce", "fn", "delay", "timeoutId", "args", "Config", "#submitter", "config", "forms", "locatable", "getAnchor", "url", "anchorMatch", "getAction$1", "getExtension", "getLastPathComponent", "isPrefixedBy", "baseURL", "prefix", "getPrefix", "locationIsVisitable", "location", "rootLocation", "getRequestURL", "anchor", "toCacheKey", "urlsAreEqual", "left", "right", "getPathComponents", "addTrailingSlash", "FetchResponse", "response", "LimitedSet", "maxSize", "oldestValue", "recentRequests", "nativeFetch", "fetchWithTurboHeaders", "options", "modifiedHeaders", "requestUID", "fetchMethodFromString", "method", "FetchMethod", "fetchEnctypeFromString", "encoding", "FetchEnctype", "FetchRequest", "#resolveRequestPromise", "_value", "delegate", "requestBody", "enctype", "body", "buildResourceAndBody", "fetchBody", "fetchMethod", "fetchOptions", "#allowRequestToBeIntercepted", "error", "#willDelegateErrorHandling", "fetchResponse", "isSafe", "mimeType", "requestInterception", "resource", "searchParams", "entriesExcludingFiles", "mergeIntoURLSearchParams", "entries", "AppearanceObserver", "StreamMessage", "fragment", "importStreamElements", "streamElement", "inertScriptElement", "PREFETCH_DELAY", "PrefetchCache", "#prefetchTimeout", "#prefetched", "request", "ttl", "cacheTtl", "prefetchCache", "FormSubmissionState", "FormSubmission", "formElement", "mustRedirect", "getMethod", "getAction", "getFormAction", "buildFormData", "getEnctype", "initialized", "requesting", "confirmationMessage", "stopping", "stopped", "token", "getCookieValue", "_request", "responseSucceededWithoutRedirect", "input", "formData", "cookieName", "cookie", "formElementAction", "formAction", "Snapshot", "queryPermanentElementsAll", "id", "getPermanentElementById", "snapshot", "permanentElementMap", "currentPermanentElement", "newPermanentElement", "node", "FormSubmitObserver", "eventTarget", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "View", "#resolveRenderPromise", "#resolveInterceptionPromise", "x", "y", "renderer", "isPreview", "shouldRender", "willRender", "shouldInvalidate", "renderInterception", "reason", "direction", "FrameView", "LinkInterceptor", "_event", "LinkClickObserver", "FormLinkClickObserver", "originalEvent", "type", "turboFrame", "turboAction", "turboConfirm", "Bardo", "bardo", "permanentElement", "placeholder", "createPlaceholderForPermanentElement", "clone", "Renderer", "#activeElement", "currentElement", "newElement", "currentSnapshot", "newSnapshot", "reject", "FrameRenderer", "destinationRange", "frameElement", "sourceRange", "renderElement", "block", "readScrollLogicalPosition", "behavior", "readScrollBehavior", "activatedScriptElement", "defaultValue", "Idiomorph", "EMPTY_SET", "defaults", "noOp", "elt", "morph", "oldNode", "newContent", "parseContent", "normalizedContent", "normalizeContent", "ctx", "createMorphContext", "morphNormalizedContent", "normalizedNewContent", "oldHead", "newHead", "promises", "handleHeadElement", "morphChildren", "bestMatch", "findBestNodeMatch", "previousSibling", "nextSibling", "morphedNode", "morphOldNodeTo", "insertSiblings", "ignoreValueOfActiveElement", "possibleActiveElement", "isSoftMatch", "syncNodeFrom", "newParent", "oldParent", "nextNewChild", "insertionPoint", "newChild", "removeIdsFromConsideration", "isIdSetMatch", "idSetMatch", "findIdSetMatch", "removeNodesBetween", "softMatch", "findSoftMatch", "tempNode", "removeNode", "ignoreAttribute", "attr", "to", "updateType", "from", "fromAttributes", "toAttributes", "fromAttribute", "toAttribute", "syncInputValue", "syncBooleanAttribute", "ignoreUpdate", "fromValue", "toValue", "newHeadTag", "currentHead", "added", "removed", "preserved", "nodesToAppend", "headMergeStyle", "srcToNewHeadNodes", "newHeadChild", "currentHeadElt", "inNewContent", "isReAppended", "isPreserved", "newNode", "newElt", "promise", "_resolve", "removedElement", "mergeDefaults", "finalConfig", "createIdMap", "node1", "node2", "getIdIntersectionCount", "startInclusive", "endExclusive", "newChildPotentialIdCount", "potentialMatch", "otherMatchCount", "potentialSoftMatch", "siblingSoftMatchCount", "parser", "contentWithSvgsRemoved", "htmlElement", "dummyParent", "stack", "bestElement", "score", "newScore", "scoreElement", "isIdInConsideration", "idIsWithinNode", "targetNode", "idSet", "sourceSet", "matchCount", "populateIdMapForNode", "idMap", "nodeParent", "idElements", "current", "oldContent", "morphElements", "callbacks", "DefaultIdiomorphCallbacks", "#beforeNodeMorphed", "beforeNodeMorphed", "mutationType", "MorphingFrameRenderer", "_ProgressBar", "ProgressBar", "HeadSnapshot", "elementIsNoscript", "elementWithoutNonce", "outerHTML", "details", "elementType", "elementIsTracked", "matchedType", "tracked", "elementIsMetaElementWithName", "elementIsScript", "elementIsStylesheet", "tagName", "PageSnapshot", "documentElement", "head", "headSnapshot", "clonedElement", "selectElements", "clonedSelectElements", "index", "source", "option", "clonedPasswordInput", "root", "ViewTransitioner", "#viewTransitionStarted", "#lastOperation", "useViewTransition", "render", "defaultOptions", "TimingMetric", "VisitState", "SystemStatusCode", "Direction", "Visit", "restorationIdentifier", "historyChanged", "referrer", "snapshotHTML", "visitCachedSnapshot", "updateHistory", "shouldCacheSnapshot", "acceptsStreamResponse", "actionForHistory", "statusCode", "isSuccessful", "responseHTML", "_response", "redirected", "_error", "scrollPosition", "metric", "BrowserAdapter", "session", "visit", "_visit", "_formSubmission", "CacheObserver", "FrameRedirector", "_location", "#shouldRedirect", "frame", "#findFrameElement", "#shouldSubmit", "meta", "History", "state", "additionalData", "restorationData", "turbo", "restorationIndex", "LinkPrefetchObserver", "#prefetchedLink", "#enable", "#tryToPrefetchRequest", "#cancelRequestIfObsolete", "#tryToUsePrefetchedRequest", "#isPrefetchable", "fetchRequest", "#cacheTtl", "#cancelPrefetchRequest", "cached", "turboFrameTarget", "unfetchableLink", "linkToTheSamePage", "linkOptsOut", "nonSafeLink", "eventPrevented", "turboPrefetchParent", "turboMethod", "isUJS", "Navigator", "formSubmission", "visitOptions", "#getActionForFormSubmission", "currentAnchor", "isRestorationToTop", "oldURL", "newURL", "#getDefaultAction", "PageStage", "PageObserver", "readyState", "ScrollObserver", "position", "StreamMessageRenderer", "getPermanentElementMapForFragment", "withAutofocusFromFragment", "withPreservedFocus", "permanentElementsInDocument", "permanentElementInDocument", "elementInStream", "generatedID", "turboStreams", "elementWithAutofocus", "firstAutofocusableElementInStreams", "willAutofocusId", "elementToAutofocus", "activeElementBeforeRender", "activeElementAfterRender", "restoreFocusTo", "elementToFocus", "nodeListOfStreamElements", "StreamObserver", "#started", "fetchResponseFromEvent", "fetchResponseIsStream", "ErrorRenderer", "replaceableElement", "parentNode", "PageRenderer", "#setLanguage", "lang", "mergedHeadElements", "newStylesheetElements", "loadingElements", "newHeadElements", "elementList", "MorphingPageRenderer", "canRefreshFrame", "SnapshotCache", "size", "key", "PageView", "rendererClass", "cachedSnapshot", "Preloader", "snapshotCache", "#preloadAll", "Cache", "#setCacheControl", "Session", "#pageRefreshDebouncePeriod", "adapter", "requestId", "isUnsafe", "isStream", "frameTarget", "extendURLWithDeprecatedProperties", "defaultPrevented", "_snapshot", "_isPreview", "renderMethod", "ev", "newBody", "timing", "submitterIsNavigatable", "container", "withinFrame", "deprecatedLocationPropertyDescriptors", "cache", "navigator$1", "start", "registerAdapter", "connectStreamSource", "disconnectStreamSource", "renderStreamMessage", "clearCache", "setProgressBarDelay", "setConfirmMethod", "confirmMethod", "setFormMode", "mode", "Turbo", "TurboFrameMissingError", "FrameController", "_fetchResponse", "#currentFetchRequest", "#resolveVisitPromise", "#connected", "#hasBeenLoaded", "#ignoredAttributes", "#shouldMorphFrame", "#loadSourceURL", "#isIgnoringChangesTo", "refresh", "src", "#visit", "document", "#loadFrameResponse", "#handleUnvisitableFrameResponse", "#shouldInterceptNavigation", "#navigateFrame", "newFrame", "_renderMethod", "_newElement", "newFrameElement", "#willHandleFrameMissingFromResponse", "#handleFrameMissingFromResponse", "#withCurrentNavigationElement", "pageSnapshot", "#visitResponse", "#throwFrameMissingError", "wrapped", "getFrameElementById", "activateElement", "#formActionIsVisitable", "sourceURL", "#ignoringChangesToAttribute", "currentURL", "StreamActions", "e", "targetElement", "StreamElement", "c", "existingChildren", "newChildrenIds", "actionFunction", "#raise", "StreamSourceElement", "consumer", "getConsumer", "setConsumer", "createConsumer", "newConsumer", "subscribeTo", "channel", "mixin", "subscriptions", "walk", "obj", "acc", "key", "camel", "m", "x", "TurboCableStreamSourceElement", "connectStreamSource", "subscribeTo", "disconnectStreamSource", "data", "event", "channel", "signed_stream_name", "walk", "__publicField", "encodeMethodIntoRequestBody", "event", "form", "fetchOptions", "submitter", "body", "isBodyInit", "method", "determineFetchMethod", "formMethod", "determineFormMethod", "overrideMethod", "turbo_es2017_esm_exports", "encodeMethodIntoRequestBody", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "isSomething", "object", "hasProperty", "property", "allModifiers", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filters", "standardFilter", "params", "pattern", "name", "match", "typecast", "meta", "ctrl", "alt", "shift", "modifier", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "actionEvent", "method", "actionDescriptorFilters", "controller", "passes", "filter", "target", "currentTarget", "identifier", "ElementObserver", "delegate", "mutations", "callback", "mutation", "attributeName", "nodes", "node", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "selectors", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "hasOutlet", "hasOutletController", "_element", "selectorObserver", "attributeObserver", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "getControllerAndEnsureConnectedScope", "outletController", "camelizedName", "outletElement", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "application", "Application", "blobToBase64", "blob", "resolve", "reject", "reader", "base64data", "bridge_controller_default", "Controller", "e", "filenameExtension", "fallbackFilename", "response", "blob", "filename", "blobToBase64", "base64", "headers", "fallback", "match", "__publicField", "element_controller_default", "Controller", "target", "__publicField", "flow_controller_default", "Controller", "selectedRadio", "e", "value", "frame", "radio", "__publicField", "hello_controller_default", "Controller", "Combobox", "Base", "callback", "listbox", "combobox", "display", "action", "Concerns", "mixins", "accumulator", "current", "visible", "target", "wrapAroundAccess", "array", "index", "last", "applyFilter", "query", "matching", "match", "cancel", "event", "startsWith", "string", "substring", "debounce", "fn", "delay", "timeoutId", "args", "isDeleteEvent", "sleep", "ms", "resolve", "unselectedPortion", "element", "dispatch", "eventName", "cancelable", "detail", "nextRepaint", "nextEventLoopTick", "nextAnimationFrame", "option", "autocompletedValue", "typedValue", "MAX_CALLBACK_ATTEMPTS", "callbackId", "id", "newStream", "isNewAndAllowed", "previousValue", "removedDisplay", "removedValue", "FetchResponse", "response", "RequestInterceptor", "interceptor", "getCookie", "name", "cookies", "prefix", "cookie", "value", "compact", "object", "result", "key", "metaContent", "stringEntriesFromFormData", "formData", "entries", "mergeEntries", "searchParams", "FetchRequest", "method", "url", "options", "requestInterceptor", "error", "headers", "baseHeaders", "originalQuery", "params", "requestQuery", "bodyIsAString", "get", "post", "inputType", "el", "currentValue", "arrayFromValue", "currentTarget", "chip", "shouldReopen", "values", "newValue", "queryIsBeingRefined", "deselectionStrategy", "valueIsMissing", "noBlankOptionSelected", "autocompleteStrategy", "_toConsumableArray", "arr", "i", "arr2", "hasPassiveEvents", "passiveTestOptions", "isIosDevice", "locks", "documentListenerAdded", "initialClientY", "previousBodyOverflowSetting", "previousBodyPosition", "previousBodyPaddingRight", "allowTouchMove", "lock", "preventDefault", "rawEvent", "e", "setOverflowHidden", "_reserveScrollBarGap", "scrollBarGap", "computedBodyPaddingRight", "restoreOverflowSetting", "setPositionFixed", "_window", "scrollY", "scrollX", "innerHeight", "bottomBarHeight", "restorePositionSetting", "y", "x", "isTargetElementTotallyScrolled", "targetElement", "handleScroll", "clientY", "disableBodyScroll", "enableBodyScroll", "left", "right", "top", "bottom", "clientX", "concerns", "Controller", "HwComboboxController", "err", "__publicField", "submittable_controller_default", "Controller", "e", "field", "__publicField", "SUBMIT_DELAY", "form_controller_default", "Controller", "inputElement", "value", "ongoing_invoice_controller_default", "Controller", "__publicField", "application", "bridge_controller_default", "element_controller_default", "flow_controller_default", "hello_controller_default", "HwComboboxController", "submittable_controller_default", "form_controller_default", "ongoing_invoice_controller_default", "action_card_component_exports", "button_group_component_exports", "customer_switch_component_exports", "__export", "Controller", "Controller", "__publicField", "item_component_exports", "list_component_exports", "product_glimpse_component_exports", "algolia_component_exports", "__export", "Controller", "import_lite", "NAMESPACE", "component", "componentName", "_ref", "descendantName", "modifierName", "descendent", "modifier", "capitalize", "text", "noop", "deprecate", "fn", "message", "getObjectType", "object", "checkRendering", "rendering", "usage", "getObjectType", "htmlEntities", "regexUnescapedHtml", "regexHasUnescapedHtml", "escape", "value", "character", "htmlCharacters", "regexEscapedHtml", "regexHasEscapedHtml", "unescape", "_typeof", "obj", "getTag", "value", "isObjectLike", "isPlainObject", "proto", "_typeof", "obj", "_objectDestructuringEmpty", "_extends", "target", "i", "source", "key", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "TAG_PLACEHOLDER", "TAG_REPLACEMENT", "replaceTagsAndEscape", "escape", "recursiveEscape", "isPlainObject", "acc", "escapeHits", "hits", "_ref", "hit", "escapeFacets", "facetHits", "h", "concatHighlightedParts", "parts", "highlightPreTag", "TAG_REPLACEMENT", "highlightPostTag", "part", "createConcurrentSafePromise", "basePromiseId", "latestResolvedId", "latestResolvedValue", "promise", "currentPromiseId", "x", "isFacetRefined", "helper", "facet", "value", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "arg", "_toPrimitive", "_typeof", "input", "hint", "prim", "res", "_slicedToArray", "arr", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "o", "minLen", "_arrayLikeToArray", "n", "len", "arr2", "_i", "_s", "_e", "_x", "_r", "_arr", "_n", "_d", "err", "createSendEventForFacet", "_ref", "instantSearchInstance", "helper", "attr", "widgetType", "sendEventForFacet", "_len", "args", "_key", "facetValue", "_args$", "eventName", "_args$2", "additionalData", "_args$0$split", "_args$0$split2", "eventType", "eventModifier", "attribute", "isFacetRefined", "serializePayload", "payload", "deserializePayload", "serialized", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "arg", "_toPrimitive", "_typeof", "input", "hint", "prim", "res", "_slicedToArray", "arr", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "o", "minLen", "_arrayLikeToArray", "n", "len", "arr2", "_i", "_s", "_e", "_x", "_r", "_arr", "_n", "_d", "err", "chunk", "chunkSize", "chunks", "_buildEventPayloadsForHits", "_ref", "getIndex", "widgetType", "methodName", "args", "instantSearchInstance", "_args$0$split", "_args$0$split2", "eventType", "eventModifier", "hits", "eventName", "additionalData", "hitsArray", "queryID", "hitsChunks", "objectIDsByChunk", "batch", "hit", "positionsByChunk", "createSendEventForHits", "_ref2", "sentEvents", "timer", "sendEventForHits", "_len", "_key", "payloads", "payload", "createBindEventForHits", "_ref3", "bindEventForHits", "_len2", "_key2", "serializePayload", "isIndexWidget", "widget", "setIndexHelperState", "finalUiState", "indexWidget", "nextIndexUiState", "isIndexWidget", "widget", "debounce", "func", "wait", "lastTimeout", "_len", "args", "_key", "resolve", "reject", "nextMicroTask", "defer", "callback", "progress", "cancelled", "fn", "_len", "args", "_key", "createDocumentationLink", "_ref", "name", "_ref$connector", "connector", "createDocumentationMessageGenerator", "_len", "widgets", "_key", "links", "widget", "message", "unescapeFacetValue", "value", "escapeFacetValue", "find", "items", "predicate", "value", "i", "findIndex", "array", "comparator", "i", "getAppIdAndApiKey", "searchClient", "_searchClient$transpo", "headers", "queryParameters", "APP_ID", "API_KEY", "appId", "apiKey", "isDomElement", "object", "getContainerNode", "selectorOrHTMLElement", "isSelectorString", "domElement", "isDomElement", "errorMessage", "getHighlightedParts", "highlightedValue", "highlightPostTag", "TAG_REPLACEMENT", "highlightPreTag", "splitByPreTag", "firstValue", "elements", "split", "splitByPostTag", "hasAlphanumeric", "getHighlightFromSiblings", "parts", "i", "_parts", "_parts2", "current", "isNextHighlighted", "isPreviousHighlighted", "unescape", "getPropertyByPath", "object", "path", "parts", "current", "key", "getRefinement", "state", "type", "attribute", "name", "resultsFacets", "res", "escapeFacetValue", "facet", "find", "resultsFacet", "count", "facetDeclaration", "nameParts", "getFacetRefinement", "facetData", "refinementKey", "_loop", "i", "refinement", "getRefinements", "results", "includesQuery", "refinements", "_state$facetsRefineme", "facetsRefinements", "_state$facetsExcludes", "facetsExcludes", "_state$disjunctiveFac", "disjunctiveFacetsRefinements", "_state$hierarchicalFa", "hierarchicalFacetsRefinements", "_state$numericRefinem", "numericRefinements", "_state$tagRefinements", "tagRefinements", "refinementNames", "refinementName", "unescapeFacetValue", "operators", "operatorOriginal", "operator", "valueOrValues", "getWidgetAttribute", "widget", "initOptions", "_widget$getWidgetRend", "renderState", "attribute", "widgetParams", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "addAbsolutePosition", "hits", "page", "hitsPerPage", "hit", "idx", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "addQueryID", "hits", "queryID", "hit", "_typeof", "obj", "_slicedToArray", "arr", "i", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "o", "minLen", "_arrayLikeToArray", "n", "len", "arr2", "_i", "_s", "_e", "_x", "_r", "_arr", "_n", "_d", "err", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "hydrateSearchClient", "client", "results", "cachedRequest", "_results$key", "state", "requestParams", "serverResults", "result", "serializeQueryParameters", "deserializeQueryParameters", "cachedResults", "acc", "baseMethod", "requests", "_len", "methodArgs", "_key", "requestsWithSerializedParams", "request", "cacheKey", "parameters", "parameter", "_parameter$split", "_parameter$split2", "isObjectOrArray", "encode", "format", "_len2", "args", "_key2", "isPrimitive", "obj", "isEqual", "first", "second", "_i", "_Object$keys", "key", "isSpecialClick", "event", "isMiddleClick", "walkIndex", "indexWidget", "callback", "widget", "isIndexWidget", "uniq", "array", "value", "index", "self", "_typeof", "obj", "_excluded", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "mergeWithRest", "left", "right", "facets", "disjunctiveFacets", "facetsRefinements", "facetsExcludes", "disjunctiveFacetsRefinements", "numericRefinements", "tagRefinements", "hierarchicalFacets", "hierarchicalFacetsRefinements", "ruleContexts", "rest", "mergeFacets", "_", "name", "mergeDisjunctiveFacets", "mergeHierarchicalFacets", "facet", "index", "findIndex", "nextFacets", "mergeTagRefinements", "mergeFacetRefinements", "mergeFacetsExcludes", "mergeDisjunctiveFacetsRefinements", "mergeNumericRefinements", "mergeHierarchicalFacetsRefinements", "mergeRuleContexts", "uniq", "mergeSearchParameters", "_len", "parameters", "_key", "hierarchicalFacetsRefinementsMerged", "hierarchicalFacetsMerged", "tagRefinementsMerged", "numericRefinementsMerged", "disjunctiveFacetsRefinementsMerged", "facetsExcludesMerged", "facetRefinementsMerged", "disjunctiveFacetsMerged", "ruleContextsMerged", "facetsMerged", "omit", "source", "excluded", "target", "key", "validKey", "createInitArgs", "instantSearchInstance", "parent", "uiState", "helper", "createRenderArgs", "widget", "results", "resolveSearchParameters", "current", "parent", "states", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "reverseHighlightedParts", "parts", "part", "getHighlightFromSiblings", "safelyRunOnBrowser", "callback", "_ref", "fallback", "toArray", "value", "suit", "component", "highlight", "_ref", "attribute", "_ref$highlightedTagNa", "highlightedTagName", "hit", "_ref$cssClasses", "cssClasses", "highlightAttributeResult", "getPropertyByPath", "_ref2", "_ref2$value", "attributeValue", "className", "TAG_REPLACEMENT", "suit", "component", "reverseHighlight", "_ref", "attribute", "_ref$highlightedTagNa", "highlightedTagName", "hit", "_ref$cssClasses", "cssClasses", "highlightAttributeResult", "getPropertyByPath", "_ref2", "_ref2$value", "attributeValue", "className", "reverseHighlightedValue", "concatHighlightedParts", "reverseHighlightedParts", "getHighlightedParts", "TAG_REPLACEMENT", "suit", "component", "snippet", "_ref", "attribute", "_ref$highlightedTagNa", "highlightedTagName", "hit", "_ref$cssClasses", "cssClasses", "snippetAttributeResult", "getPropertyByPath", "_ref2", "_ref2$value", "attributeValue", "className", "TAG_REPLACEMENT", "suit", "component", "reverseSnippet", "_ref", "attribute", "_ref$highlightedTagNa", "highlightedTagName", "hit", "_ref$cssClasses", "cssClasses", "snippetAttributeResult", "getPropertyByPath", "_ref2", "_ref2$value", "attributeValue", "className", "reverseHighlightedValue", "concatHighlightedParts", "reverseHighlightedParts", "getHighlightedParts", "TAG_REPLACEMENT", "_typeof", "obj", "readDataAttributes", "domElement", "method", "serializedPayload", "payload", "deserializePayload", "writeDataAttributes", "_ref", "serializePayload", "insights", "_typeof", "obj", "ANONYMOUS_TOKEN_COOKIE_KEY", "getCookie", "name", "prefix", "cookies", "i", "cookie", "getInsightsAnonymousUserTokenInternal", "getInsightsAnonymousUserToken", "_excluded", "_objectWithoutProperties", "source", "excluded", "target", "_objectWithoutPropertiesLoose", "key", "sourceSymbolKeys", "sourceKeys", "i", "getStateWithoutPage", "state", "_ref", "page", "rest", "KEY", "createInfiniteHitsSessionStorageCache", "_ref2", "sessionStorage", "safelyRunOnBrowser", "_ref3", "window", "cache", "isEqual", "error", "_ref4", "hits", "_ref5", "import_events", "import_algoliasearch_helper", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_slicedToArray", "arr", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "_i", "_s", "_e", "_x", "_r", "_arr", "_n", "_d", "err", "_toConsumableArray", "_arrayWithoutHoles", "_iterableToArray", "_nonIterableSpread", "o", "minLen", "_arrayLikeToArray", "n", "iter", "len", "arr2", "ALGOLIA_INSIGHTS_VERSION", "ALGOLIA_INSIGHTS_SRC", "createInsightsMiddleware", "props", "_insightsClient", "insightsInitParams", "onEvent", "_props$$$internal", "$$internal", "_props$$$automatic", "$$automatic", "potentialInsightsClient", "safelyRunOnBrowser", "_ref", "window", "pointer", "_len", "args", "_key", "insightsClient", "noop", "_ref2", "instantSearchInstance", "existingInsightsMiddlewares", "m", "_getAppIdAndApiKey", "getAppIdAndApiKey", "_getAppIdAndApiKey2", "appId", "apiKey", "queuedUserToken", "queuedAuthenticatedUserToken", "userTokenBeforeInit", "authenticatedUserTokenBeforeInit", "queue", "_map", "_ref3", "find", "_ref5", "_ref6", "method", "_ref4", "_map2", "_error", "userToken", "normalizeUserToken", "isModernInsightsClient", "initialParameters", "helper", "errorMessage", "script", "setUserTokenToSearch", "immediate", "normalizedUserToken", "existingToken", "applyToken", "anonymousUserToken", "getInsightsAnonymousUserTokenInternal", "setUserToken", "token", "authenticatedUserToken", "tokenBeforeInit", "queuedToken", "insightsClientWithLocalCredentials", "payload", "extraParams", "event", "client", "_split$map", "_split$map2", "major", "minor", "v3", "v2_6", "v1_10", "extractWidgetPayload", "widgets", "instantSearchInstance", "payload", "initOptions", "createInitArgs", "widget", "widgetParams", "renderState", "params", "key", "isMetadataEnabled", "safelyRunOnBrowser", "_ref", "_window$navigator", "_window$navigator$use", "window", "createMetadataMiddleware", "_ref2", "_ref2$$$internal", "$$internal", "_ref3", "payloadContainer", "refNode", "client", "middleware", "import_qs", "_typeof", "obj", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "_defineProperty", "key", "value", "arg", "_toPrimitive", "input", "hint", "prim", "res", "setWindowTitle", "title", "BrowserHistory", "_ref", "_this", "windowTitle", "_ref$writeDelay", "writeDelay", "createURL", "parseURL", "getLocation", "start", "dispose", "push", "cleanUrlOnDispose", "safelyRunOnBrowser", "_ref2", "window", "qs", "routeState", "_this2", "_ref3", "url", "callback", "_this3", "_ref4", "e", "_this4", "_ref5", "_this5", "_ref6", "lastPushWasByISAfterDispose", "historyRouter", "_ref7", "_ref7$createURL", "_ref8", "qsModule", "location", "protocol", "hostname", "_location$port", "port", "pathname", "hash", "queryString", "portWithPrefix", "_ref7$parseURL", "_ref9", "_ref7$writeDelay", "_ref7$getLocation", "_ref10", "_typeof", "obj", "_excluded", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "getIndexStateWithoutConfigure", "uiState", "configure", "trackedUiState", "simpleStateMapping", "state", "indexId", "routeState", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "createRouterMiddleware", "props", "_props$router", "router", "historyRouter", "_props$stateMapping", "stateMapping", "simpleStateMapping", "_props$$$internal", "$$internal", "_ref", "instantSearchInstance", "topLevelCreateURL", "nextState", "previousUiState", "uiState", "acc", "indexId", "route", "lastRouteState", "initialUiState", "_ref2", "routeState", "isEqual", "_router$start", "import_algoliasearch_helper", "id", "addWidgetId", "widget", "_typeof", "obj", "_excluded", "_excluded2", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_toConsumableArray", "arr", "_arrayWithoutHoles", "_iterableToArray", "_unsupportedIterableToArray", "_nonIterableSpread", "o", "minLen", "_arrayLikeToArray", "n", "iter", "len", "arr2", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "withUsage", "createDocumentationMessageGenerator", "privateHelperSetState", "helper", "_ref", "state", "recommendState", "isPageReset", "_uiState", "getLocalWidgetsUiState", "widgets", "widgetStateOptions", "initialUiState", "uiState", "widget", "isIndexWidget", "getLocalWidgetsSearchParameters", "widgetSearchParametersOptions", "initialSearchParameters", "rest", "getLocalWidgetsRecommendParameters", "widgetRecommendParametersOptions", "initialRecommendParameters", "resetPageFromWidgets", "indexWidgets", "widgetHelper", "resolveScopedResultsFromWidgets", "scopedResults", "current", "index", "widgetParams", "indexName", "_widgetParams$indexId", "indexId", "localWidgets", "localUiState", "localInstantSearchInstance", "localParent", "derivedHelper", "lastValidSearchParameters", "hasRecommendWidget", "hasSearchWidget", "_derivedHelper", "_helper", "widgetParent", "widgetSiblings", "nextState", "_this", "addWidgetId", "renderState", "createInitArgs", "storeRenderState", "_this2", "_widgets$reduce", "states", "next", "algoliasearchHelper", "cleanedSearchState", "cleanedRecommendState", "newState", "_ref2", "_this3", "_instantSearchInstanc", "instantSearchInstance", "parent", "mainHelper", "parameters", "recommendParameters", "facetName", "facetValue", "maxFacetHits", "userState", "mergeSearchParameters", "resolveSearchParameters", "indexInitialResults", "results", "_ref3", "_ref4", "_ref5", "recommend", "event", "_ref6", "_derivedHelper2", "_this4", "widgetsToRender", "createRenderArgs", "_this5", "_helper2", "_derivedHelper3", "previousUiState", "innerIndex", "searchParameters", "_ref7", "indexUiState", "nextIndexUiState", "index_default", "_ref8", "parentIndexName", "formatNumber", "value", "numberLocale", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "hoganHelpers", "_ref", "numberLocale", "render", "formatNumber", "options", "highlightOptions", "highlight", "reverseHighlightOptions", "reverseHighlight", "snippetOptions", "snippet", "reverseSnippetOptions", "reverseSnippet", "_JSON$parse", "method", "payload", "insights", "version_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "o", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "value", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "defaultCreateURL", "INSTANTSEARCH_FUTURE_DEFAULTS", "InstantSearch", "_EventEmitter", "_super", "options", "_options$future2", "_this", "defer", "_this$mainHelper", "shouldResetStatus", "nextUiState", "_ref", "_options$indexName", "indexName", "numberLocale", "_options$initialUiSta", "initialUiState", "_options$routing", "routing", "_options$insights", "insights", "searchFunction", "_options$stalledSearc", "stalledSearchDelay", "_options$searchClient", "searchClient", "_options$insightsClie", "insightsClient", "_options$onStateChang", "onStateChange", "_options$future", "future", "version_default", "index_default", "hoganHelpers", "noop", "routerOptions", "createRouterMiddleware", "insightsOptions", "createInsightsMiddleware", "isMetadataEnabled", "createMetadataMiddleware", "_this2", "_len", "middleware", "_key", "newMiddlewareList", "fn", "newMiddleware", "m", "_len2", "middlewareToUnuse", "_key2", "widget", "widgets", "_this3", "mainHelper", "algoliasearchHelper", "fakeClient", "mainIndexHelper", "searchFunctionHelper", "_ref2", "state", "_ref3", "_ref4", "error", "err", "acc", "_ref5", "hydrateSearchClient", "originalScheduleSearch", "_ref6", "hasAutomaticInsights", "_ref7", "results", "_this$mainHelper2", "_ref8", "_this4", "uiState", "_this5", "callOnStateChange", "finalUiState", "setIndexHelperState", "nextState", "EventEmitter", "InstantSearch_default", "instantsearch", "options", "InstantSearch_default", "version_default", "deprecate", "createInfiniteHitsSessionStorageCache", "highlight", "reverseHighlight", "snippet", "reverseSnippet", "insights", "getInsightsAnonymousUserToken", "es_default", "_extends", "n", "t", "r", "_objectWithoutPropertiesLoose", "r", "t", "_objectWithoutProperties", "e", "t", "o", "r", "_objectWithoutPropertiesLoose", "n", "cx", "_len", "classNames", "_key", "acc", "className", "_excluded", "createHighlightPartComponent", "_ref", "createElement", "_ref2", "classNames", "children", "highlightedTagName", "isHighlighted", "nonHighlightedTagName", "TagName", "createHighlightComponent", "_ref3", "Fragment", "HighlightPart", "userProps", "parts", "_userProps$highlighte", "_userProps$nonHighlig", "_userProps$separator", "separator", "className", "_userProps$classNames", "props", "_objectWithoutProperties", "_extends", "cx", "part", "partIndex", "isLastPart", "subPart", "subPartIndex", "MODE_HYDRATE", "slice", "options", "vnodeId", "isValidElement", "rerenderQueue", "prevDebounce", "defer", "depthSort", "eventClock", "eventProxy", "eventProxyCapture", "i", "EMPTY_OBJ", "EMPTY_ARR", "IS_NON_DIMENSIONAL", "isArray", "Array", "assign", "obj", "props", "removeNode", "node", "parentNode", "removeChild", "createElement", "type", "children", "key", "ref", "normalizedProps", "arguments", "length", "call", "defaultProps", "createVNode", "original", "vnode", "__k", "__", "__b", "__e", "__d", "__c", "constructor", "__v", "__i", "__u", "createRef", "current", "Fragment", "BaseComponent", "context", "this", "getDomSibling", "childIndex", "sibling", "updateParentDomPointers", "child", "base", "enqueueRender", "c", "push", "process", "debounceRendering", "renderQueueLength", "component", "newVNode", "oldVNode", "oldDom", "commitQueue", "refQueue", "sort", "shift", "diff", "__P", "namespaceURI", "commitRoot", "diffChildren", "parentDom", "renderResult", "newParentVNode", "oldParentVNode", "globalContext", "namespace", "excessDomChildren", "isHydrating", "childVNode", "newDom", "firstChildDom", "oldChildren", "newChildrenLength", "constructNewChildrenArray", "applyRef", "isConnected", "insert", "nextSibling", "skewedIndex", "matchingIndex", "oldChildrenLength", "remainingOldChildren", "skew", "String", "findMatchingIndex", "unmount", "parentVNode", "insertBefore", "nodeType", "findMatchingIndex", "childVNode", "oldChildren", "skewedIndex", "remainingOldChildren", "key", "type", "x", "y", "oldVNode", "__u", "length", "setStyle", "style", "value", "setProperty", "IS_NON_DIMENSIONAL", "test", "dom", "name", "oldValue", "namespace", "useCapture", "o", "cssText", "replace", "toLowerCase", "slice", "l", "_attached", "eventClock", "addEventListener", "eventProxyCapture", "eventProxy", "removeEventListener", "e", "removeAttribute", "setAttribute", "createEventProxy", "this", "eventHandler", "_dispatched", "options", "event", "diff", "parentDom", "newVNode", "globalContext", "excessDomChildren", "commitQueue", "oldDom", "isHydrating", "refQueue", "tmp", "c", "isNew", "oldProps", "oldState", "snapshot", "clearProcessingException", "newProps", "provider", "componentContext", "i", "renderHook", "count", "renderResult", "newType", "constructor", "__e", "__b", "outer", "props", "contextType", "__c", "__", "__E", "prototype", "render", "BaseComponent", "doRender", "sub", "state", "context", "__n", "__h", "_sb", "__s", "getDerivedStateFromProps", "assign", "__v", "componentWillMount", "componentDidMount", "push", "componentWillReceiveProps", "shouldComponentUpdate", "__d", "__k", "forEach", "vnode", "componentWillUpdate", "componentDidUpdate", "__P", "__r", "getChildContext", "getSnapshotBeforeUpdate", "diffChildren", "isArray", "Fragment", "children", "base", "MODE_HYDRATE", "indexOf", "diffElementNodes", "diffed", "commitRoot", "root", "applyRef", "some", "cb", "call", "newHtml", "oldHtml", "newChildren", "inputValue", "checked", "nodeType", "localName", "document", "createTextNode", "createElementNS", "is", "data", "childNodes", "EMPTY_OBJ", "attributes", "__html", "innerHTML", "getDomSibling", "removeNode", "ref", "current", "unmount", "parentVNode", "skipRemove", "r", "componentWillUnmount", "replaceNode", "createElement", "namespaceURI", "firstChild", "slice", "EMPTY_ARR", "options", "__e", "error", "vnode", "oldVNode", "errorInfo", "component", "ctor", "handled", "__", "__c", "constructor", "getDerivedStateFromError", "setState", "__d", "componentDidCatch", "__E", "e", "vnodeId", "isValidElement", "undefined", "BaseComponent", "prototype", "update", "callback", "s", "this", "__s", "state", "assign", "props", "__v", "_sb", "push", "enqueueRender", "forceUpdate", "__h", "render", "Fragment", "rerenderQueue", "defer", "Promise", "then", "bind", "resolve", "setTimeout", "depthSort", "a", "b", "__b", "process", "__r", "eventClock", "eventProxy", "createEventProxy", "eventProxyCapture", "i", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_toConsumableArray", "arr", "_arrayWithoutHoles", "_iterableToArray", "_unsupportedIterableToArray", "_nonIterableSpread", "o", "minLen", "_arrayLikeToArray", "n", "iter", "len", "arr2", "prepareTemplates", "defaultTemplates", "templates", "allKeys", "uniq", "config", "defaultTemplate", "customTemplate", "isCustomTemplate", "prepareTemplateProps", "_ref", "templatesConfig", "preparedTemplates", "import_hogan", "n", "s", "e", "u", "h", "p", "t", "htm_module_default", "r", "a", "l", "m", "htm_module_default", "_", "InternalHighlight", "createHighlightComponent", "_", "k", "_excluded", "_extends", "target", "i", "source", "key", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "Highlight", "_ref", "_ref$classNames", "classNames", "props", "_", "InternalHighlight", "cx", "_excluded", "_extends", "target", "i", "source", "key", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "Highlight", "_ref", "hit", "attribute", "cssClasses", "props", "property", "getPropertyByPath", "properties", "toArray", "parts", "_ref2", "value", "getHighlightedParts", "unescape", "_", "_excluded", "_extends", "target", "i", "source", "key", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "ReverseHighlight", "_ref", "_ref$classNames", "classNames", "props", "_", "InternalHighlight", "cx", "_typeof", "obj", "_excluded", "_excluded2", "_extends", "target", "i", "source", "key", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "ReverseHighlight", "_ref", "hit", "attribute", "cssClasses", "props", "property", "getPropertyByPath", "properties", "toArray", "parts", "_ref2", "getHighlightedParts", "unescape", "_ref3", "isHighlighted", "rest", "_", "_excluded", "_extends", "target", "i", "source", "key", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "ReverseSnippet", "_ref", "_ref$classNames", "classNames", "props", "_", "InternalHighlight", "cx", "_typeof", "obj", "_excluded", "_excluded2", "_extends", "target", "i", "source", "key", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "ReverseSnippet", "_ref", "hit", "attribute", "cssClasses", "props", "property", "getPropertyByPath", "properties", "toArray", "parts", "_ref2", "getHighlightedParts", "unescape", "_ref3", "isHighlighted", "rest", "_", "_excluded", "_extends", "target", "i", "source", "key", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "Snippet", "_ref", "_ref$classNames", "classNames", "props", "_", "InternalHighlight", "cx", "_excluded", "_extends", "target", "i", "source", "key", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "Snippet", "_ref", "hit", "attribute", "cssClasses", "props", "property", "getPropertyByPath", "properties", "toArray", "parts", "_ref2", "value", "getHighlightedParts", "unescape", "_", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "transformHelpersToHogan", "helpers", "compileOptions", "data", "acc", "helperKey", "_this", "text", "render", "hogan", "renderTemplate", "_ref", "templates", "templateKey", "bindEvent", "sendEvent", "template", "params", "m", "Highlight", "ReverseHighlight", "Snippet", "ReverseSnippet", "transformedHelpers", "spaces", "_extends", "target", "i", "source", "key", "_typeof", "obj", "_toConsumableArray", "arr", "_arrayWithoutHoles", "_iterableToArray", "_unsupportedIterableToArray", "_nonIterableSpread", "o", "minLen", "_arrayLikeToArray", "n", "iter", "len", "arr2", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "_defineProperty", "value", "arg", "_toPrimitive", "input", "hint", "prim", "res", "RawHtml", "_Component", "_super", "_this", "_len", "args", "_key", "m", "fragment", "root", "node", "_", "b", "defaultProps", "Template", "_Component2", "_super2", "nextProps", "isEqual", "_this2", "nonFunctionTemplates", "RootTagName", "k", "useCustomCompileOptions", "compileOptions", "content", "renderTemplate", "Template_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_extends", "Answers", "_ref", "hits", "isLoading", "cssClasses", "templateProps", "_", "cx", "Template_default", "hit", "index", "Answers_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "hasFindAnswersMethod", "answersIndex", "withUsage", "createDocumentationMessageGenerator", "connectAnswers", "renderFn", "unmountFn", "noop", "checkRendering", "widgetParams", "_ref", "queryLanguages", "attributesForPrediction", "_ref$nbHits", "nbHits", "_ref$renderDebounceTi", "renderDebounceTime", "_ref$searchDebounceTi", "searchDebounceTime", "_ref$escapeHTML", "escapeHTML", "_ref$extraParameters", "extraParameters", "runConcurrentSafePromise", "createConcurrentSafePromise", "lastHits", "isLoading", "debouncedRender", "debounce", "debouncedRefine", "initOptions", "state", "instantSearchInstance", "renderOptions", "_this", "query", "result", "escapeHits", "hitsWithAbsolutePosition", "addAbsolutePosition", "hitsWithAbsolutePositionAndQueryID", "addQueryID", "renderState", "_ref2", "connectAnswers_default", "defaultTemplates", "_item", "defaultTemplates_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "renderer", "_ref", "containerNode", "cssClasses", "renderState", "templates", "_ref2", "isFirstRendering", "hits", "isLoading", "instantSearchInstance", "prepareTemplateProps", "defaultTemplates_default", "B", "_", "Answers_default", "answersWidget", "widgetParams", "_ref3", "container", "attributesForPrediction", "queryLanguages", "nbHits", "searchDebounceTime", "renderDebounceTime", "escapeHTML", "extraParameters", "_ref3$templates", "_ref3$cssClasses", "userCssClasses", "getContainerNode", "cx", "specializedRenderer", "makeWidget", "connectAnswers_default", "answers_default", "deprecate", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "obj", "value", "_toPropertyKey", "arg", "_toPrimitive", "_typeof", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "connectDynamicWidgets", "renderFn", "unmountFn", "noop", "checkRendering", "withUsage", "widgetParams", "widgets", "_widgetParams$maxValu", "maxValuesPerFacet", "_widgetParams$facets", "facets", "_widgetParams$transfo", "transformItems", "items", "fallbackWidget", "widget", "_typeof", "localWidgets", "initOptions", "attribute", "getWidgetAttribute", "_objectSpread", "renderOptions", "parent", "renderState", "widgetsToUnmount", "widgetsToMount", "_ref", "isMounted", "shouldMount", "_ref2", "toRemove", "_ref3", "state", "acc", "curr", "_ref4", "_results$renderingCon", "_results$renderingCon2", "_results$renderingCon3", "_results$renderingCon4", "results", "attributesToRender", "connectDynamicWidgets_default", "_typeof", "obj", "_excluded", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "createContainer", "rootContainer", "container", "dynamicWidgets", "widgetParams", "_ref", "containerSelector", "widgets", "fallbackWidget", "otherWidgetParams", "widget", "userContainer", "getContainerNode", "containers", "connectorWidgets", "makeWidget", "connectDynamicWidgets_default", "_ref2", "isFirstRender", "attributesToRender", "attribute", "_ref3", "initOptions", "cb", "childWidget", "getWidgetAttribute", "dynamic_widgets_default", "createItemKey", "_ref", "attribute", "value", "type", "operator", "key", "handleClick", "callback", "event", "isSpecialClick", "CurrentRefinements", "_ref2", "items", "cssClasses", "canRefine", "_", "cx", "item", "index", "capitalize", "refinement", "CurrentRefinements_default", "_typeof", "obj", "_toConsumableArray", "arr", "_arrayWithoutHoles", "_iterableToArray", "_unsupportedIterableToArray", "_nonIterableSpread", "o", "minLen", "_arrayLikeToArray", "n", "iter", "len", "i", "arr2", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "connectCurrentRefinements", "renderFn", "unmountFn", "noop", "checkRendering", "widgetParams", "_ref", "includedAttributes", "_ref$excludedAttribut", "excludedAttributes", "_ref$transformItems", "transformItems", "items", "initOptions", "instantSearchInstance", "renderOptions", "renderState", "_ref2", "results", "scopedResults", "_createURL", "helper", "getItems", "accResults", "scopedResult", "getRefinementsItems", "refinement", "clearRefinement", "clearRefinementFromState", "_ref3", "indexId", "includesQuery", "filterFunction", "item", "getRefinements", "normalizeRefinement", "allItems", "currentItem", "result", "a", "b", "state", "getOperatorSymbol", "operator", "getValue", "label", "normalizedRefinement", "connectCurrentRefinements_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "renderer", "_ref", "isFirstRender", "items", "widgetParams", "canRefine", "_ref2", "container", "cssClasses", "B", "_", "CurrentRefinements_default", "currentRefinements", "_ref3", "includedAttributes", "excludedAttributes", "_ref3$cssClasses", "userCssClasses", "transformItems", "containerNode", "getContainerNode", "cx", "makeWidget", "connectCurrentRefinements_default", "current_refinements_default", "_typeof", "obj", "_classCallCheck", "instance", "Constructor", "_defineProperties", "target", "props", "i", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "o", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "_defineProperty", "key", "value", "arg", "_toPrimitive", "input", "hint", "prim", "res", "defaultProps", "noop", "SearchBox", "_Component", "_super", "_this", "_len", "args", "_key", "m", "event", "_this$props", "searchAsYouType", "refine", "onChange", "query", "_this$props2", "onSubmit", "_this$props3", "onReset", "nextProps", "_this$props4", "cssClasses", "placeholder", "autofocus", "showSubmit", "showReset", "showLoadingIndicator", "templates", "isSearchStalled", "ariaLabel", "_", "Template_default", "b", "SearchBox_default", "_extends", "target", "i", "source", "key", "RefinementListItem", "_ref", "className", "handleClick", "facetValueToRefine", "isRefined", "templateProps", "templateKey", "templateData", "subItems", "_", "originalEvent", "Template_default", "RefinementListItem_default", "_excluded", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "_extends", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "_classCallCheck", "instance", "Constructor", "_defineProperties", "props", "descriptor", "_toPropertyKey", "_createClass", "protoProps", "staticProps", "_inherits", "subClass", "superClass", "_setPrototypeOf", "o", "p", "_createSuper", "Derived", "hasNativeReflectConstruct", "_isNativeReflectConstruct", "Super", "_getPrototypeOf", "result", "NewTarget", "_possibleConstructorReturn", "self", "call", "_assertThisInitialized", "value", "arg", "_toPrimitive", "input", "hint", "prim", "res", "defaultProps", "isHierarchicalMenuItem", "facetValue", "RefinementList", "_Component", "_super", "_this", "_len", "args", "_key", "m", "subItems", "_this$props$cssClasse", "root", "cssClasses", "_", "url", "templateData", "refinementListItemClassName", "cx", "RefinementListItem_default", "_ref", "facetValueToRefine", "isRefined", "originalEvent", "isSpecialClick", "parent", "nextProps", "areFacetValuesDifferent", "isEqual", "firstValue", "actualValue", "_this2", "showMoreButtonClassName", "showMoreButton", "Template_default", "shouldDisableSearchBox", "searchBox", "SearchBox_default", "event", "facetValues", "noResults", "rootClassName", "b", "RefinementList_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "getSelectedHits", "hits", "selectedObjectIDs", "objectID", "hit", "find", "h", "getQueryID", "selectedHits", "queryIDs", "uniq", "queryID", "getPositions", "inferPayload", "_ref", "method", "results", "objectIDs", "index", "positions", "wrapInsightsClient", "aa", "_len", "payloads", "_key", "payload", "withInstantSearchUsage", "createDocumentationMessageGenerator", "inferredPayload", "withInsights", "connector", "renderFn", "unmountFn", "renderOptions", "isFirstRender", "instantSearchInstance", "insights", "createInsightsEventHandler", "_ref", "insights", "sendEvent", "event", "insightsThroughSendEvent", "findInsightsTarget", "element", "payload", "parseInsightsEvent", "single", "insightsThroughFunction", "_readDataAttributes", "readDataAttributes", "method", "_payload", "startElement", "endElement", "validator", "serializedPayload", "deserializePayload", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_extends", "InfiniteHits", "_ref", "results", "hits", "insights", "bindEvent", "sendEvent", "hasShowPrevious", "showPrevious", "showMore", "isFirstPage", "isLastPage", "cssClasses", "templateProps", "handleInsightsClick", "createInsightsEventHandler", "_", "Template_default", "cx", "hit", "index", "event", "InfiniteHits_default", "_typeof", "obj", "_excluded", "_excluded2", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_toConsumableArray", "arr", "_arrayWithoutHoles", "_iterableToArray", "_unsupportedIterableToArray", "_nonIterableSpread", "o", "minLen", "_arrayLikeToArray", "n", "iter", "len", "arr2", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "withUsage", "createDocumentationMessageGenerator", "getStateWithoutPage", "state", "_ref", "page", "rest", "normalizeState", "_ref2", "clickAnalytics", "userToken", "getInMemoryCache", "cachedHits", "cachedState", "_ref3", "isEqual", "_ref4", "hits", "extractHitsFromCachedHits", "a", "b", "acc", "connectInfiniteHits", "renderFn", "unmountFn", "noop", "checkRendering", "widgetParams", "_ref5", "_ref5$escapeHTML", "escapeHTML", "_ref5$transformItems", "transformItems", "items", "_ref5$cache", "cache", "showPrevious", "showMore", "sendEvent", "bindEvent", "getFirstReceivedPage", "_state$page", "pages", "getLastReceivedPage", "_state$page2", "getShowPrevious", "helper", "getShowMore", "initOptions", "renderOptions", "instantSearchInstance", "widgetRenderState", "renderState", "_ref6", "results", "parent", "existingState", "isFirstPage", "currentPageHits", "createSendEventForHits", "createBindEventForHits", "_state$disjunctiveFac", "_state$hierarchicalFa", "_state$page3", "_page", "escapeHits", "hitsWithAbsolutePosition", "addAbsolutePosition", "hitsWithAbsolutePositionAndQueryID", "addQueryID", "transformedHits", "hasDynamicWidgets", "walkIndex", "indexWidget", "_ref7", "$$type", "hasNoFacets", "f", "isLastPage", "_ref8", "stateWithoutPage", "TAG_PLACEHOLDER", "uiState", "_ref9", "searchParameters", "_ref10", "widgetSearchParameters", "connectInfiniteHits_default", "defaultTemplates", "data", "omit", "defaultTemplates_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "renderer", "_ref", "containerNode", "cssClasses", "renderState", "templates", "hasShowPrevious", "_ref2", "isFirstRendering", "hits", "results", "showMore", "showPrevious", "isFirstPage", "isLastPage", "instantSearchInstance", "insights", "bindEvent", "sendEvent", "prepareTemplateProps", "defaultTemplates_default", "B", "_", "InfiniteHits_default", "infiniteHits", "widgetParams", "_ref3", "container", "escapeHTML", "transformItems", "_ref3$templates", "_ref3$cssClasses", "userCssClasses", "cache", "getContainerNode", "cx", "specializedRenderer", "makeWidget", "withInsights", "connectInfiniteHits_default", "infinite_hits_default", "_excluded", "_typeof", "obj", "_objectWithoutProperties", "source", "excluded", "target", "_objectWithoutPropertiesLoose", "key", "sourceSymbolKeys", "sourceKeys", "i", "_slicedToArray", "arr", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "o", "minLen", "_arrayLikeToArray", "n", "len", "arr2", "_i", "_s", "_e", "_x", "_r", "_arr", "_n", "_d", "err", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "DEFAULT_SORT", "connectMenu", "renderFn", "unmountFn", "noop", "checkRendering", "widgetParams", "_ref", "attribute", "_ref$limit", "limit", "_ref$showMore", "showMore", "_ref$showMoreLimit", "showMoreLimit", "_ref$sortBy", "sortBy", "_ref$transformItems", "transformItems", "items", "sendEvent", "_createURL", "_refine", "isShowingMore", "toggleShowMore", "createToggleShowMore", "renderOptions", "widget", "cachedToggleShowMore", "getLimit", "initOptions", "instantSearchInstance", "_ref2", "state", "renderState", "_this", "results", "createURL", "helper", "canToggleShowMore", "createSendEventForFacet", "facetValue", "uiState", "_helper$getHierarchic", "_helper$getHierarchic2", "refinedItem", "facetValues", "facetItems", "_ref3", "label", "path", "item", "_ref4", "searchParameters", "_searchParameters$get", "_searchParameters$get2", "removeEmptyRefinementsFromUiState", "_ref5", "withFacetConfiguration", "currentMaxValuesPerFacet", "nextMaxValuesPerFacet", "withMaxValuesPerFacet", "indexUiState", "connectMenu_default", "defaultTemplates", "_ref", "cssClasses", "url", "label", "count", "_", "cx", "formatNumber", "_ref2", "isShowingMore", "defaultTemplates_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "renderer", "_ref", "containerNode", "cssClasses", "renderState", "templates", "showMore", "_ref2", "isFirstRendering", "refine", "items", "createURL", "instantSearchInstance", "isShowingMore", "toggleShowMore", "canToggleShowMore", "prepareTemplateProps", "defaultTemplates_default", "facetValues", "facetValue", "B", "_", "RefinementList_default", "menu", "widgetParams", "_ref3", "container", "attribute", "sortBy", "limit", "showMoreLimit", "_ref3$cssClasses", "userCssClasses", "_ref3$templates", "transformItems", "getContainerNode", "cx", "specializedRenderer", "makeWidget", "connectMenu_default", "menu_default", "currentIndex", "currentComponent", "previousComponent", "prevRaf", "currentHook", "afterPaintEffects", "EMPTY", "options", "_options", "oldBeforeDiff", "__b", "oldBeforeRender", "__r", "oldAfterDiff", "diffed", "oldCommit", "__c", "oldBeforeUnmount", "unmount", "oldRoot", "__", "getHookState", "index", "type", "__h", "hooks", "__H", "length", "push", "__V", "useState", "initialState", "useReducer", "invokeOrReturn", "reducer", "init", "hookState", "_reducer", "action", "currentValue", "__N", "nextValue", "setState", "_hasScuFromHooks", "updateHookState", "p", "s", "c", "stateHooks", "filter", "x", "every", "prevScu", "call", "this", "shouldUpdate", "forEach", "hookItem", "props", "shouldComponentUpdate", "prevCWU", "componentWillUpdate", "__e", "tmp", "useEffect", "callback", "args", "state", "argsChanged", "_pendingArgs", "useRef", "initialValue", "currentHook", "useMemo", "current", "useMemo", "factory", "args", "state", "getHookState", "currentIndex", "argsChanged", "__H", "__V", "_pendingArgs", "__h", "__", "flushAfterPaintEffects", "component", "afterPaintEffects", "shift", "__P", "__H", "__h", "forEach", "invokeCleanup", "invokeEffect", "e", "options", "__e", "__v", "__b", "vnode", "currentComponent", "oldBeforeDiff", "parentDom", "__k", "__m", "oldRoot", "__r", "oldBeforeRender", "currentIndex", "hooks", "__c", "previousComponent", "__", "hookItem", "__N", "__V", "EMPTY", "_pendingArgs", "diffed", "oldAfterDiff", "c", "length", "push", "prevRaf", "requestAnimationFrame", "afterNextFrame", "commitQueue", "some", "filter", "cb", "oldCommit", "unmount", "oldBeforeUnmount", "hasErrored", "s", "HAS_RAF", "callback", "raf", "done", "clearTimeout", "timeout", "cancelAnimationFrame", "setTimeout", "hook", "comp", "cleanup", "argsChanged", "oldArgs", "newArgs", "arg", "index", "invokeOrReturn", "f", "_slicedToArray", "arr", "i", "_arrayWithHoles", "_iterableToArrayLimit", "_unsupportedIterableToArray", "_nonIterableRest", "o", "minLen", "_arrayLikeToArray", "n", "len", "arr2", "_i", "_s", "_e", "_x", "_r", "_arr", "_n", "_d", "err", "Panel", "props", "_useState", "p", "_useState2", "isCollapsed", "setIsCollapsed", "_useState3", "_useState4", "isControlled", "setIsControlled", "bodyRef", "F", "_", "node", "cx", "Template_default", "event", "prevIsCollapsed", "Panel_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "renderer", "_ref", "containerNode", "bodyContainerNode", "cssClasses", "templates", "_ref2", "options", "hidden", "collapsible", "collapsed", "B", "_", "Panel_default", "panel", "panelWidgetParams", "_ref3", "_ref3$templates", "_ref3$hidden", "_ref3$cssClasses", "userCssClasses", "collapsedFn", "cx", "widgetFactory", "widgetParams", "getContainerNode", "defaultTemplates", "_ref4", "isCollapsed", "renderPanel", "widget", "_len", "args", "_key", "renderOptions", "_widget$init", "_len2", "_key2", "_widget$render", "_widget$dispose", "_len3", "_key3", "panel_default", "_typeof", "obj", "_excluded", "_excluded2", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "_objectWithoutProperties", "excluded", "_objectWithoutPropertiesLoose", "sourceSymbolKeys", "sourceKeys", "withUsage", "createDocumentationMessageGenerator", "DEFAULT_SORT", "connectRefinementList", "renderFn", "unmountFn", "noop", "checkRendering", "widgetParams", "_ref", "attribute", "_ref$operator", "operator", "_ref$limit", "limit", "_ref$showMore", "showMore", "_ref$showMoreLimit", "showMoreLimit", "_ref$sortBy", "sortBy", "_ref$escapeFacetValue", "escapeFacetValues", "_ref$transformItems", "transformItems", "items", "formatItems", "_ref2", "label", "item", "lastResultsFromMainSearch", "lastItemsFromMainSearch", "hasExhaustiveItems", "triggerRefine", "sendEvent", "isShowingMore", "toggleShowMore", "cachedToggleShowMore", "createToggleShowMore", "renderOptions", "widget", "getLimit", "searchForFacetValues", "createSearchForFacetValues", "helper", "query", "instantSearchInstance", "searchResults", "tags", "TAG_PLACEHOLDER", "TAG_REPLACEMENT", "results", "facetValues", "escapeFacets", "normalizedFacetValues", "_ref3", "escapedValue", "initOptions", "renderState", "_this", "state", "_createURL", "createSendEventForFacet", "facetValue", "values", "maxValuesPerFacetConfig", "currentLimit", "searchFacetValues", "canShowLess", "canShowMore", "canToggleShowMore", "uiState", "_ref4", "withoutMaxValuesPerFacet", "_ref5", "searchParameters", "removeEmptyRefinementsFromUiState", "_ref6", "isDisjunctive", "withFacetConfiguration", "currentMaxValuesPerFacet", "nextMaxValuesPerFacet", "withMaxValuesPerFacet", "parameters", "indexUiState", "connectRefinementList_default", "_ref2", "_", "_ref4", "_ref6", "defaultTemplate", "_ref", "cssClasses", "_ref3", "_ref5", "defaultTemplates_default", "defaultTemplates", "_ref", "cssClasses", "count", "value", "highlighted", "isRefined", "isFromSearch", "_", "cx", "formatNumber", "_ref2", "isShowingMore", "defaultTemplates_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "searchBoxSuit", "renderer", "_ref", "containerNode", "cssClasses", "templates", "searchBoxTemplates", "renderState", "showMore", "searchable", "searchablePlaceholder", "searchableIsAlwaysActive", "_ref2", "isFirstRendering", "refine", "items", "createURL", "searchForItems", "isFromSearch", "instantSearchInstance", "toggleShowMore", "isShowingMore", "hasExhaustiveItems", "canToggleShowMore", "prepareTemplateProps", "defaultTemplates_default", "B", "_", "RefinementList_default", "refinementList", "widgetParams", "_ref3", "container", "attribute", "operator", "sortBy", "limit", "showMoreLimit", "_ref3$searchable", "_ref3$searchablePlace", "_ref3$searchableEscap", "searchableEscapeFacetValues", "_ref3$searchableIsAlw", "_ref3$cssClasses", "userCssClasses", "_ref3$templates", "transformItems", "escapeFacetValues", "getContainerNode", "cx", "specializedRenderer", "makeWidget", "connectRefinementList_default", "refinement_list_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "defaultQueryHook", "query", "hook", "connectSearchBox", "renderFn", "unmountFn", "noop", "checkRendering", "widgetParams", "_ref", "_ref$queryHook", "queryHook", "_refine", "_clear", "initOptions", "instantSearchInstance", "renderOptions", "_ref2", "state", "renderState", "_ref3", "helper", "q", "uiState", "_ref4", "searchParameters", "_ref5", "connectSearchBox_default", "_typeof", "obj", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "value", "_toPropertyKey", "arg", "_toPrimitive", "input", "hint", "prim", "res", "withUsage", "createDocumentationMessageGenerator", "suit", "component", "renderer", "_ref", "containerNode", "cssClasses", "placeholder", "templates", "autofocus", "searchAsYouType", "ignoreCompositionEvents", "showReset", "showSubmit", "showLoadingIndicator", "_ref2", "refine", "query", "isSearchStalled", "B", "_", "SearchBox_default", "searchBox", "widgetParams", "_ref3", "container", "_ref3$placeholder", "_ref3$cssClasses", "userCssClasses", "_ref3$autofocus", "_ref3$searchAsYouType", "_ref3$ignoreCompositi", "_ref3$showReset", "_ref3$showSubmit", "_ref3$showLoadingIndi", "queryHook", "_ref3$templates", "userTemplates", "getContainerNode", "cx", "defaultTemplates_default", "specializedRenderer", "makeWidget", "connectSearchBox_default", "search_box_default", "EXPERIMENTAL_answers", "deprecate", "answers_default", "EXPERIMENTAL_dynamicWidgets", "dynamic_widgets_default", "refinementListDefaultOptions", "data", "html", "config_default", "menu_default", "refinement_list_default", "config_default", "results", "html", "hit", "components", "packshot", "data", "config_default", "config_default", "Controller", "es_default", "widgets", "current_refinements_default", "config_default", "infinite_hits_default", "search_box_default", "filtersWidgets", "filter", "widget", "title", "options", "filterEl", "container", "panelWidget", "panel_default", "data", "html", "algoliasearch", "historyRouter", "url", "turbo_es2017_esm_exports", "state", "__publicField", "box_component_exports", "filters_component_exports", "hits_component_exports", "refinements_component_exports", "spinner_component_exports", "avatar_component_exports", "banner_component_exports", "bouncer_component_exports", "button_component_exports", "calendar_component_exports", "HOOKS", "defaults", "err", "givenDate", "date", "week1", "english", "nth", "s", "default_default", "pad", "number", "length", "int", "bool", "debounce", "fn", "wait", "t", "_this", "args", "arrayify", "obj", "toggleClass", "elem", "className", "bool", "createElement", "tag", "content", "e", "clearNode", "node", "findParent", "condition", "createNumberInput", "inputClassName", "opts", "wrapper", "numInput", "arrowUp", "arrowDown", "key", "getEventTarget", "event", "path", "doNothing", "monthToStr", "monthNumber", "shorthand", "locale", "revFormat", "dateObj", "monthName", "hour", "day", "amPM", "int", "shortMonth", "seconds", "_", "unixSeconds", "weekNum", "weekNumber", "date", "year", "ISODate", "minutes", "month", "unixMillSeconds", "tokenRegex", "formats", "options", "pad", "createDateFormatter", "_a", "_b", "config", "defaults", "_c", "l10n", "english", "_d", "isMobile", "dateObj", "frmt", "overrideLocale", "locale", "c", "i", "arr", "formats", "createDateParser", "date", "givenFormat", "timeless", "customLocale", "parsedDate", "dateOrig", "format", "datestr", "matched", "ops", "matchIndex", "regexStr", "token", "isBackSlash", "escaped", "tokenRegex", "match", "revFormat", "fn", "val", "compareDates", "date1", "date2", "isBetween", "ts", "ts1", "ts2", "calculateSecondsSinceMidnight", "hours", "minutes", "seconds", "parseSeconds", "secondsSinceMidnight", "duration", "getDefaultHours", "config", "minHour", "minMinutes", "minSeconds", "maxHr", "maxMinutes", "target", "args", "_i", "_loop_1", "source", "key", "_a", "args_1", "__assign", "s", "i", "p", "__spreadArrays", "il", "r", "k", "a", "j", "jl", "DEBOUNCED_CHANGE_MS", "FlatpickrInstance", "element", "instanceConfig", "self", "defaults", "flatpickr", "default_default", "createDateParser", "bind", "setHoursFromDate", "positionCalendar", "changeMonth", "changeYear", "clear", "close", "onMouseOver", "createElement", "createDay", "destroy", "isEnabled", "jumpToDate", "updateValue", "open", "redraw", "set", "setDate", "toggle", "setupHelperFunctions", "month", "yr", "init", "parseConfig", "setupLocale", "setupInputs", "setupDates", "build", "bindEvents", "setCalendarWidth", "isSafari", "triggerEvent", "getClosestActiveElement", "_a", "bindToInstance", "fn", "config", "daysWidth", "updateTime", "e", "defaultDate", "compareDates", "getDefaultHours", "timeWrapper", "prevValue", "setHoursFromInputs", "ampm2military", "hour", "amPM", "int", "military2ampm", "hours", "minutes", "seconds", "limitMinHours", "limitMaxHours", "minBound", "calculateSecondsSinceMidnight", "maxBound", "currentTime", "result", "parseSeconds", "maxTime", "minTime", "setHours", "dateObj", "date", "pad", "onYearInput", "event", "eventTarget", "getEventTarget", "year", "handler", "options", "ev", "el", "triggerChange", "evt", "setupMobile", "debouncedResize", "debounce", "onResize", "onKeyDown", "documentClick", "onMonthNavClick", "selectDate", "selText", "timeIncrement", "onBlur", "jumpDate", "jumpTo", "oldYear", "oldMonth", "buildMonthSwitch", "incrementNumInput", "delta", "inputElem", "target", "input", "createEvent", "fragment", "buildMonthNav", "buildWeeks", "weekWrapper", "weekNumbers", "buildWeekdays", "buildDays", "buildTime", "toggleClass", "customAppend", "wrapper", "className", "_dayNumber", "dateIsEnabled", "dayElement", "isDateSelected", "isDateInRange", "focusOnDayElem", "targetNode", "getFirstAvailableDay", "startMonth", "endMonth", "m", "startIndex", "endIndex", "c", "getNextAvailableDay", "current", "givenMonth", "loopDelta", "numMonthDays", "focusOnDay", "offset", "activeElement", "dayFocused", "isInView", "startElem", "buildMonthDays", "firstOfMonth", "prevMonthDays", "daysInMonth", "days", "isMultiMonth", "prevMonthDayClass", "nextMonthDayClass", "dayNumber", "dayIndex", "dayNum", "dayContainer", "clearNode", "frag", "d", "shouldBuildMonth", "monthToStr", "buildMonth", "container", "monthNavFragment", "monthElement", "selectedMonth", "yearInput", "createNumberInput", "yearElement", "currentMonth", "buildMonths", "bool", "updateNavigationCurrentMonth", "separator", "hourInput", "minuteInput", "secondInput", "updateWeekdays", "firstDayOfWeek", "weekdays", "value", "isOffset", "triggerChangeEvent", "toInitial", "isCalendarElem", "elem", "eventTarget_1", "isCalendarElement", "isInput", "lostFocus", "isIgnored", "newYear", "newYearNum", "isNewYear", "timeless", "dateToCheck", "array", "parsed", "valueChanged", "getDateStr", "allowInput", "allowKeydown", "allowInlineKeydown", "isTimeObj", "focusAndClose", "delta_1", "elems", "x", "cellClass", "hoverDate", "initialDate", "rangeStartDate", "rangeEndDate", "containsDisabled", "minRange", "maxRange", "t", "duration", "hoverableCells", "dayElem", "timestamp", "outOfRange", "isBetween", "positionElement", "wasOpen", "minMaxDateSetter", "type", "inverseDateObj", "boolOpts", "userConfig", "formats", "dates", "parseDateRules", "timeMode", "defaultDateFormat", "defaultAltFormat", "minMaxTimeSetter", "val", "HOOKS", "hook", "arrayify", "pluginConf", "key", "getInputElem", "tokenRegex", "createDateFormatter", "customPositionElement", "calendarHeight", "acc", "child", "calendarWidth", "configPos", "configPosVertical", "configPosHorizontal", "inputBounds", "distanceFromBottom", "showOnTop", "top", "left", "isCenter", "isRight", "right", "rightMost", "centerMost", "doc", "getDocumentStyleSheet", "bodyWidth", "centerLeft", "centerBefore", "centerAfter", "centerIndex", "centerStyle", "editableSheet", "sheet", "createStyleSheet", "style", "isSelectable", "day", "findParent", "selectedDate", "shouldChangeMonth", "selectedIndex", "b", "single", "range", "CALLBACKS", "updatePositionElement", "option", "setSelectedDate", "inputDate", "format", "arr", "rule", "preloadedDate", "inputType", "data", "hooks", "name", "specificFormat", "dObj", "isPrevMonth", "isNextMonth", "isKeyDown", "min", "max", "step", "curValue", "newValue", "isHourElem", "isMinuteElem", "_flatpickr", "nodeList", "nodes", "instances", "node", "selector", "l10n", "esm_default", "import_fr", "input", "nonPickupDays", "nextAvailableDeliveryDay", "esm_default", "date", "formatDateLocal", "card_component_exports", "__export", "CardController", "CardController", "Controller", "card", "carousel_component_exports", "__export", "Controller", "isObject", "obj", "extend", "target", "src", "key", "ssrDocument", "getDocument", "doc", "ssrWindow", "callback", "id", "getWindow", "win", "classesToTokens", "classes", "c", "deleteProps", "obj", "object", "key", "nextTick", "callback", "delay", "now", "getComputedStyle", "el", "window", "getWindow", "style", "getTranslate", "axis", "matrix", "curTransform", "transformMatrix", "curStyle", "isObject", "o", "isNode", "node", "extend", "to", "noExtend", "i", "nextSource", "keysArray", "nextIndex", "len", "nextKey", "desc", "setCSSProperty", "varName", "varValue", "animateCSSModeScroll", "_ref", "swiper", "targetPosition", "side", "startPosition", "startTime", "time", "duration", "dir", "isOutOfBound", "current", "target", "animate", "progress", "easeProgress", "currentPosition", "getSlideTransformEl", "slideEl", "elementChildren", "element", "selector", "children", "elementIsChildOf", "parent", "isChild", "showWarning", "text", "createElement", "tag", "elementOffset", "document", "getDocument", "box", "body", "clientTop", "clientLeft", "scrollTop", "scrollLeft", "elementPrevAll", "prevEls", "prev", "elementNextAll", "nextEls", "next", "elementStyle", "prop", "elementIndex", "child", "elementParents", "parents", "elementTransitionEnd", "fireCallBack", "e", "elementOuterSize", "size", "includeMargins", "makeElementsArray", "getRotateFix", "v", "support", "calcSupport", "window", "getWindow", "document", "getDocument", "getSupport", "deviceCached", "calcDevice", "_temp", "userAgent", "platform", "ua", "device", "screenWidth", "screenHeight", "android", "ipad", "ipod", "iphone", "windows", "macos", "iPadScreens", "getDevice", "overrides", "browser", "calcBrowser", "needPerspectiveFix", "isSafari", "major", "minor", "num", "isWebView", "isSafariBrowser", "need3dFix", "getBrowser", "Resize", "_ref", "swiper", "on", "emit", "observer", "animationFrame", "resizeHandler", "createObserver", "entries", "width", "height", "newWidth", "newHeight", "_ref2", "contentBoxSize", "contentRect", "target", "removeObserver", "orientationChangeHandler", "Observer", "extendParams", "observers", "attach", "options", "ObserverFunc", "mutations", "observerUpdate", "init", "containerParents", "elementParents", "i", "destroy", "eventsEmitter", "events", "handler", "priority", "self", "method", "event", "onceHandler", "_len", "args", "_key", "index", "eventHandler", "data", "context", "_len2", "_key2", "updateSize", "el", "elementStyle", "updateSlides", "getDirectionPropertyValue", "node", "label", "params", "wrapperEl", "slidesEl", "swiperSize", "rtl", "wrongRTL", "isVirtual", "previousSlidesLength", "slides", "elementChildren", "slidesLength", "snapGrid", "slidesGrid", "slidesSizesGrid", "offsetBefore", "offsetAfter", "previousSnapGridLength", "previousSlidesGridLength", "spaceBetween", "slidePosition", "prevSlideSize", "slideEl", "setCSSProperty", "gridEnabled", "slideSize", "shouldResetSlideSize", "key", "slide", "slideStyles", "currentTransform", "currentWebKitTransform", "elementOuterSize", "paddingLeft", "paddingRight", "marginLeft", "marginRight", "boxSizing", "clientWidth", "offsetWidth", "newSlidesGrid", "slidesGridItem", "size", "groups", "groupSize", "_", "slideIndex", "allSlidesSize", "slideSizeValue", "maxSnap", "snap", "offsetSize", "allSlidesOffset", "snapIndex", "addToSnapGrid", "addToSlidesGrid", "v", "backFaceHiddenClass", "hasClassBackfaceClassAdded", "updateAutoHeight", "speed", "activeSlides", "getSlideByIndex", "updateSlidesOffset", "minusOffset", "toggleSlideClasses$1", "condition", "className", "updateSlidesProgress", "translate", "offsetCenter", "slideOffset", "slideProgress", "originalSlideProgress", "slideBefore", "slideAfter", "isFullyVisible", "isVisible", "updateProgress", "multiplier", "translatesDiff", "progress", "isBeginning", "isEnd", "progressLoop", "wasBeginning", "wasEnd", "isBeginningRounded", "isEndRounded", "firstSlideIndex", "lastSlideIndex", "firstSlideTranslate", "lastSlideTranslate", "translateMax", "translateAbs", "toggleSlideClasses", "updateSlidesClasses", "activeIndex", "getFilteredSlide", "selector", "activeSlide", "prevSlide", "nextSlide", "elementNextAll", "elementPrevAll", "processLazyPreloader", "imageEl", "slideSelector", "lazyEl", "unlazy", "preload", "amount", "len", "slidesPerView", "activeColumn", "preloadColumns", "slideIndexLastInView", "realIndex", "getActiveIndexByTranslate", "updateActiveIndex", "newActiveIndex", "previousIndex", "previousRealIndex", "previousSnapIndex", "getVirtualRealIndex", "aIndex", "skip", "firstSlideInColumn", "activeSlideIndex", "updateClickedSlide", "path", "pathEl", "slideFound", "update", "getSwiperTranslate", "axis", "currentTranslate", "getTranslate", "setTranslate", "byController", "x", "y", "z", "newProgress", "minTranslate", "maxTranslate", "translateTo", "runCallbacks", "translateBounds", "internal", "newTranslate", "isH", "animateCSSModeScroll", "e", "setTransition", "duration", "transitionEmit", "direction", "step", "dir", "transitionStart", "transitionEnd", "transition", "slideTo", "initial", "enabled", "normalizedTranslate", "normalizedGrid", "normalizedGridNext", "t", "slideToLoop", "newIndex", "targetSlideIndex", "cols", "centeredSlides", "needLoopFix", "slideNext", "animating", "perGroup", "increment", "slidePrev", "rtlTranslate", "normalize", "val", "normalizedSnapGrid", "prevSnap", "prevSnapIndex", "prevIndex", "lastIndex", "slideReset", "slideToClosest", "threshold", "currentSnap", "nextSnap", "slideToClickedSlide", "slideToIndex", "nextTick", "loopCreate", "slideRealIndex", "initSlides", "slidesPerGroup", "shouldFillGroup", "shouldFillGrid", "addBlankSlides", "amountOfSlides", "createElement", "slidesToAdd", "showWarning", "loopFix", "byMousewheel", "allowSlidePrev", "allowSlideNext", "loopedSlides", "prependSlidesIndexes", "appendSlidesIndexes", "isNext", "isPrev", "slidesPrepended", "slidesAppended", "activeColIndexWithShift", "colIndexToPrepend", "currentSlideTranslate", "diff", "shift", "loopParams", "c", "loopDestroy", "newSlidesOrder", "loop", "setGrabCursor", "moving", "unsetGrabCursor", "grabCursor", "closestElement", "base", "__closestFrom", "found", "preventEdgeSwipe", "startX", "edgeSwipeDetection", "edgeSwipeThreshold", "onTouchStart", "touches", "targetEl", "elementIsChildOf", "swipingClassHasValue", "eventPath", "noSwipingSelector", "isTargetShadow", "startY", "now", "preventDefault", "shouldPreventDefault", "onTouchMove", "targetTouch", "pageX", "pageY", "diffX", "diffY", "touchAngle", "touchesDiff", "prevTouchesDirection", "isLoop", "allowLoopFix", "evt", "loopFixed", "disableParentSwiper", "resistanceRatio", "onTouchEnd", "touchEndTime", "timeDiff", "pathTree", "currentPos", "swipeToLast", "stopIndex", "rewindFirstIndex", "rewindLastIndex", "ratio", "onResize", "isVirtualLoop", "onClick", "onScroll", "onLoad", "onDocumentTouchStart", "capture", "domMethod", "swiperMethod", "attachEvents", "detachEvents", "events$1", "isGridEnabled", "setBreakpoint", "initialized", "breakpoints", "breakpoint", "breakpointParams", "wasMultiRow", "isMultiRow", "wasGrabCursor", "isGrabCursor", "wasEnabled", "prop", "wasModuleEnabled", "isModuleEnabled", "directionChanged", "needsReLoop", "wasLoop", "extend", "isEnabled", "hasLoop", "getBreakpoint", "containerEl", "currentHeight", "points", "point", "minRatio", "b", "value", "prepareClasses", "prefix", "resultClasses", "item", "classNames", "addClasses", "suffixes", "removeClasses", "classes", "checkOverflow", "wasLocked", "slidesOffsetBefore", "lastSlideRightEdge", "checkOverflow$1", "defaults", "moduleExtendParams", "allModulesParams", "obj", "moduleParamName", "moduleParams", "prototypes", "extendedDefaults", "Swiper", "swipers", "newParams", "mod", "swiperParams", "eventName", "property", "elementIndex", "min", "current", "cls", "updates", "view", "exact", "spv", "breakLoop", "translateValue", "translated", "newDirection", "needUpdate", "currentDirection", "element", "getWrapperSelector", "lazyElements", "deleteInstance", "cleanStyles", "deleteProps", "newDefaults", "modules", "module", "m", "prototypeGroup", "protoMethod", "Virtual", "_ref", "swiper", "extendParams", "on", "emit", "cssModeTimeout", "document", "getDocument", "tempDOM", "renderSlide", "slide", "index", "params", "slideEl", "createElement", "update", "force", "beforeInit", "slidesPerView", "slidesPerGroup", "centeredSlides", "isLoop", "initialSlide", "addSlidesBefore", "addSlidesAfter", "previousFrom", "previousTo", "slides", "previousSlidesGrid", "previousOffset", "activeIndex", "offsetProp", "slidesAfter", "slidesBefore", "from", "to", "offset", "onRendered", "slidesToRender", "i", "prependIndexes", "appendIndexes", "getSlideIndex", "slideIndex", "el", "loopFrom", "loopTo", "a", "b", "elementChildren", "appendSlide", "prependSlide", "newActiveIndex", "numberOfNewSlides", "cache", "newCache", "cachedIndex", "cachedEl", "cachedElIndex", "removeSlide", "slidesIndexes", "key", "removeAllSlides", "domSlidesAssigned", "setCSSProperty", "Keyboard", "_ref", "swiper", "extendParams", "on", "emit", "document", "getDocument", "window", "getWindow", "handle", "event", "rtl", "e", "kc", "pageUpDown", "isPageUp", "isPageDown", "isArrowLeft", "isArrowRight", "isArrowUp", "isArrowDown", "inView", "elementParents", "el", "swiperWidth", "swiperHeight", "windowWidth", "windowHeight", "swiperOffset", "elementOffset", "swiperCoord", "i", "point", "enable", "disable", "Mousewheel", "_ref", "swiper", "extendParams", "on", "emit", "window", "getWindow", "timeout", "lastScrollTime", "now", "lastEventBeforeSnap", "recentWheelEvents", "normalize", "e", "sX", "sY", "pX", "pY", "handleMouseEnter", "handleMouseLeave", "animateSlider", "newEvent", "releaseScroll", "params", "handle", "event", "disableParentSwiper", "targetEl", "targetElContainsTarget", "delta", "rtlFactor", "data", "positions", "prevEvent", "ignoreWheelEvents", "position", "wasBeginning", "wasEnd", "firstEvent", "snapToThreshold", "nextTick", "events", "method", "enable", "disable", "createElementIfNotDefined", "swiper", "originalParams", "params", "checkProps", "key", "element", "elementChildren", "createElement", "Navigation", "_ref", "swiper", "extendParams", "on", "emit", "getEl", "el", "res", "toggleEl", "disabled", "params", "makeElementsArray", "subEl", "update", "nextEl", "prevEl", "onPrevClick", "e", "onNextClick", "init", "createElementIfNotDefined", "initButton", "dir", "destroy", "destroyButton", "disable", "_s", "targetEl", "targetIsButton", "path", "pathEl", "isHidden", "enable", "classesToSelector", "classes", "Pagination", "_ref", "swiper", "extendParams", "on", "emit", "pfx", "number", "bulletSize", "dynamicBulletIndex", "isPaginationDisabled", "setSideBullets", "bulletEl", "position", "bulletActiveClass", "getMoveDirection", "prevIndex", "nextIndex", "length", "onBulletClick", "e", "classesToSelector", "index", "elementIndex", "moveDirection", "update", "rtl", "params", "el", "makeElementsArray", "current", "previousIndex", "slidesLength", "total", "bullets", "firstIndex", "lastIndex", "midIndex", "elementOuterSize", "subEl", "classesToRemove", "suffix", "s", "bullet", "bulletIndex", "firstDisplayedBullet", "lastDisplayedBullet", "i", "dynamicBulletsLength", "bulletsOffset", "offsetProp", "subElIndex", "fractionEl", "totalEl", "progressbarDirection", "scale", "scaleX", "scaleY", "progressEl", "render", "paginationHTML", "numberOfBullets", "init", "createElementIfNotDefined", "elementParents", "destroy", "disable", "_s", "targetEl", "isHidden", "enable", "Scrollbar", "_ref", "swiper", "extendParams", "on", "emit", "document", "getDocument", "isTouched", "timeout", "dragTimeout", "dragStartPos", "dragSize", "trackSize", "divider", "setTranslate", "scrollbar", "rtl", "dragEl", "el", "params", "progress", "newSize", "newPos", "setTransition", "duration", "updateSize", "getPointerPosition", "e", "setDragPosition", "positionRatio", "elementOffset", "position", "onDragStart", "wrapperEl", "onDragMove", "onDragEnd", "nextTick", "events", "method", "target", "activeListener", "passiveListener", "eventMethod", "enableDraggable", "disableDraggable", "init", "swiperEl", "createElementIfNotDefined", "classesToSelector", "createElement", "classesToTokens", "destroy", "makeElementsArray", "subEl", "disable", "_s", "enable", "Parallax", "_ref", "swiper", "extendParams", "on", "elementsSelector", "setTransform", "el", "progress", "rtl", "rtlFactor", "p", "x", "y", "scale", "opacity", "rotate", "currentOpacity", "transform", "currentScale", "currentRotate", "setTranslate", "slides", "snapGrid", "isElement", "elements", "elementChildren", "subEl", "slideEl", "slideIndex", "slideProgress", "setTransition", "duration", "hostEl", "parallaxEl", "parallaxDuration", "_swiper", "Zoom", "_ref", "swiper", "extendParams", "on", "emit", "window", "getWindow", "currentScale", "isScaling", "fakeGestureTouched", "fakeGestureMoved", "evCache", "gesture", "image", "velocity", "scale", "value", "imageEl", "slideEl", "getDistanceBetweenTouches", "x1", "y1", "x2", "y2", "getMaxRatio", "params", "maxRatio", "imageMaxRatio", "getScaleOrigin", "box", "getSlideSelector", "eventWithinSlide", "e", "slideSelector", "eventWithinZoomContainer", "selector", "containerEl", "onGestureStart", "elementParents", "originX", "originY", "onGestureChange", "zoom", "pointerIndex", "cachedEv", "onGestureEnd", "allowTouchMoveTimeout", "allowTouchMove", "preventTouchMove", "onTouchStart", "device", "event", "onTouchMove", "getTranslate", "scaledWidth", "scaledHeight", "scaleRatio", "onTouchEnd", "momentumDurationX", "momentumDurationY", "momentumDistanceX", "newPositionX", "momentumDistanceY", "newPositionY", "momentumDuration", "onTransitionEnd", "zoomIn", "elementChildren", "touchX", "touchY", "offsetX", "offsetY", "diffX", "diffY", "translateX", "translateY", "imageWidth", "imageHeight", "translateMinX", "translateMinY", "translateMaxX", "translateMaxY", "slideWidth", "slideHeight", "forceZoomRatio", "elementOffset", "zoomOut", "zoomToggle", "getListeners", "passiveListener", "activeListenerWithCapture", "enable", "eventName", "disable", "_s", "Controller", "_ref", "swiper", "extendParams", "on", "LinearSpline", "x", "y", "binarySearch", "maxIndex", "minIndex", "guess", "array", "val", "i1", "i3", "x2", "getInterpolateFunction", "setTranslate", "_t", "byController", "controlled", "multiplier", "controlledTranslate", "Swiper", "setControlledTranslate", "c", "translate", "i", "setTransition", "duration", "setControlledTransition", "nextTick", "elementTransitionEnd", "removeSpline", "controlElement", "eventName", "onControllerSwiper", "e", "_s", "A11y", "_ref", "swiper", "extendParams", "on", "liveRegion", "preventFocusHandler", "focusTargetSlideEl", "visibilityChangedTimestamp", "notify", "message", "notification", "getRandomNumber", "size", "randomChar", "makeElFocusable", "el", "makeElementsArray", "subEl", "makeElNotFocusable", "addElRole", "role", "addElRoleDescription", "description", "addElControls", "controls", "addElLabel", "label", "addElId", "id", "addElLive", "live", "disableEl", "enableEl", "onEnterOrSpaceKey", "e", "params", "targetEl", "classesToSelector", "prevEls", "updateNavigation", "nextEl", "prevEl", "hasPagination", "hasClickablePagination", "updatePagination", "bulletEl", "elementIndex", "initNavEl", "wrapperId", "handlePointerDown", "handlePointerUp", "onVisibilityChange", "handleFocus", "slideEl", "isActive", "isVisible", "initSlides", "slidesLength", "index", "slideIndex", "ariaLabelMessage", "init", "containerEl", "wrapperEl", "getDocument", "destroy", "createElement", "History", "_ref", "swiper", "extendParams", "on", "initialized", "paths", "slugify", "text", "getPathValues", "urlOverride", "window", "getWindow", "location", "pathArray", "part", "total", "key", "value", "setHistory", "index", "slide", "root", "currentState", "scrollToSlide", "speed", "runCallbacks", "i", "length", "setHistoryPopState", "init", "destroy", "HashNavigation", "_ref", "swiper", "extendParams", "emit", "on", "initialized", "document", "getDocument", "window", "getWindow", "_s", "hash", "slideWithHash", "slideEl", "elementChildren", "onHashChange", "newHash", "activeSlideEl", "activeSlideHash", "newIndex", "setHash", "init", "index", "destroy", "Autoplay", "_ref", "swiper", "extendParams", "on", "emit", "params", "timeout", "raf", "autoplayDelayTotal", "autoplayDelayCurrent", "autoplayTimeLeft", "autoplayStartTime", "wasPaused", "isTouched", "pausedByTouch", "touchStartTimeout", "slideChanged", "pausedByInteraction", "pausedByPointerEnter", "onTransitionEnd", "e", "resume", "calcTimeLeft", "timeLeft", "getSlideDelay", "activeSlideEl", "slideEl", "run", "delayForce", "delay", "currentSlideDelay", "speed", "proceed", "start", "stop", "pause", "internal", "reset", "onVisibilityChange", "document", "getDocument", "onPointerEnter", "onPointerLeave", "attachMouseEvents", "detachMouseEvents", "attachDocumentEvents", "detachDocumentEvents", "_s", "Thumb", "_ref", "swiper", "extendParams", "on", "initialized", "swiperCreated", "onThumbClick", "thumbsSwiper", "clickedIndex", "clickedSlide", "slideToIndex", "init", "thumbsParams", "SwiperClass", "isObject", "thumbsSwiperParams", "update", "initial", "slidesPerView", "thumbsToActivate", "thumbActiveClass", "slideEl", "i", "elementChildren", "autoScrollOffset", "useOffset", "currentThumbsIndex", "newThumbsIndex", "direction", "newThumbsSlide", "thumbs", "document", "getDocument", "getThumbsElementAndInit", "thumbsElement", "eventName", "onThumbsSwiper", "e", "watchForThumbsToAppear", "_s", "duration", "freeMode", "_ref", "swiper", "extendParams", "emit", "once", "onTouchStart", "translate", "onTouchMove", "data", "touches", "now", "onTouchEnd", "_ref2", "currentPos", "params", "wrapperEl", "rtl", "snapGrid", "timeDiff", "lastMoveEvent", "velocityEvent", "distance", "time", "momentumDuration", "momentumDistance", "newPosition", "doBounce", "afterBouncePosition", "bounceAmount", "needsLoopFix", "nextSlide", "j", "moveDistance", "currentSlideSize", "elementTransitionEnd", "Grid", "_ref", "swiper", "extendParams", "on", "slidesNumberEvenToRows", "slidesPerRow", "numFullColumns", "wasMultiRow", "getSpaceBetween", "spaceBetween", "initSlides", "slides", "slidesPerView", "rows", "fill", "slidesLength", "unsetSlides", "slide", "updateSlide", "i", "slidesPerGroup", "newSlideOrderIndex", "column", "row", "groupIndex", "slideIndexInGroup", "columnsInGroup", "updateWrapperSize", "slideSize", "snapGrid", "centeredSlides", "roundLengths", "newSlidesGrid", "slidesGridItem", "onInit", "onUpdate", "params", "el", "isMultiRow", "appendSlide", "slides", "swiper", "params", "slidesEl", "appendElement", "slideEl", "tempDOM", "i", "prependSlide", "activeIndex", "newActiveIndex", "prependElement", "addSlide", "index", "activeIndexBuffer", "baseLength", "slidesBuffer", "currentSlide", "removeSlide", "slidesIndexes", "indexToRemove", "removeAllSlides", "Manipulation", "_ref", "effectInit", "params", "effect", "swiper", "on", "setTranslate", "setTransition", "overwriteParams", "perspective", "recreateShadows", "getEffectParams", "overwriteParamsResult", "_s", "duration", "slideEl", "shadowEl", "requireUpdateOnVirtual", "effectTarget", "effectParams", "slideEl", "transformEl", "getSlideTransformEl", "effectVirtualTransitionEnd", "_ref", "swiper", "duration", "transformElements", "allSlides", "activeIndex", "getSlide", "el", "slideEl", "eventTriggered", "transitionEndTarget", "transformEl", "elementTransitionEnd", "evt", "EffectFade", "_ref", "swiper", "extendParams", "on", "effectInit", "slides", "params", "i", "slideEl", "tx", "ty", "slideOpacity", "targetEl", "effectTarget", "duration", "transformElements", "getSlideTransformEl", "el", "effectVirtualTransitionEnd", "EffectCube", "_ref", "swiper", "extendParams", "on", "createSlideShadows", "slideEl", "progress", "isHorizontal", "shadowBefore", "shadowAfter", "createElement", "effectInit", "el", "wrapperEl", "slides", "swiperWidth", "swiperHeight", "rtl", "swiperSize", "browser", "r", "getRotateFix", "params", "isVirtual", "wrapperRotate", "cubeShadowEl", "i", "slideIndex", "slideAngle", "round", "tx", "ty", "tz", "transform", "shadowAngle", "multiplier", "scale1", "scale2", "offset", "zFactor", "duration", "subEl", "shadowEl", "createShadow", "suffix", "slideEl", "side", "shadowClass", "shadowContainer", "getSlideTransformEl", "shadowEl", "createElement", "EffectFlip", "_ref", "swiper", "extendParams", "on", "createSlideShadows", "slideEl", "progress", "shadowBefore", "shadowAfter", "createShadow", "effectInit", "slides", "rtl", "params", "rotateFix", "getRotateFix", "i", "offset", "rotateY", "rotateX", "tx", "ty", "transform", "targetEl", "effectTarget", "duration", "transformElements", "getSlideTransformEl", "el", "shadowEl", "effectVirtualTransitionEnd", "EffectCoverflow", "_ref", "swiper", "extendParams", "on", "effectInit", "swiperWidth", "swiperHeight", "slides", "slidesSizesGrid", "params", "isHorizontal", "transform", "center", "rotate", "translate", "r", "getRotateFix", "i", "length", "slideEl", "slideSize", "slideOffset", "centerOffset", "offsetMultiplier", "rotateY", "rotateX", "translateZ", "stretch", "translateY", "translateX", "scale", "slideTransform", "targetEl", "effectTarget", "shadowBeforeEl", "shadowAfterEl", "createShadow", "duration", "getSlideTransformEl", "el", "shadowEl", "EffectCreative", "_ref", "swiper", "extendParams", "on", "getTranslateValue", "value", "effectInit", "slides", "wrapperEl", "slidesSizesGrid", "params", "multiplier", "isCenteredSlides", "rotateFix", "getRotateFix", "margin", "i", "slideEl", "slideProgress", "progress", "originalProgress", "offset", "t", "r", "custom", "data", "index", "val", "translateString", "rotateString", "scaleString", "opacityString", "transform", "shadowEl", "createShadow", "shadowOpacity", "targetEl", "effectTarget", "duration", "transformElements", "getSlideTransformEl", "el", "effectVirtualTransitionEnd", "EffectCards", "_ref", "swiper", "extendParams", "on", "effectInit", "slides", "activeIndex", "rtl", "params", "startTranslate", "isTouched", "currentTranslate", "i", "slideEl", "slideProgress", "progress", "offset", "tX", "tY", "tZ", "scale", "rotate", "tXAdd", "slideIndex", "isSwipeToNext", "isSwipeToPrev", "subProgress", "prevY", "scaleString", "transform", "shadowEl", "createShadow", "targetEl", "effectTarget", "duration", "transformElements", "getSlideTransformEl", "el", "effectVirtualTransitionEnd", "modules", "Virtual", "Keyboard", "Mousewheel", "Navigation", "Pagination", "Scrollbar", "Parallax", "Zoom", "Controller", "A11y", "History", "HashNavigation", "Autoplay", "Thumb", "freeMode", "Grid", "Manipulation", "EffectFade", "EffectCube", "EffectFlip", "EffectCoverflow", "EffectCreative", "EffectCards", "Swiper", "Controller", "Swiper", "cart_line_component_exports", "cart_lines_component_exports", "chip_component_exports", "collapse_button_component_exports", "__export", "Controller", "Controller", "comment_component_exports", "container_component_exports", "customer_card_component_exports", "customer_cards_component_exports", "drawer_component_exports", "__export", "Controller", "Controller", "__publicField", "feature_table_component_exports", "footer_component_exports", "enum_radio_buttons_component_exports", "export_component_exports", "__export", "Controller", "Controller", "hide", "radio", "__publicField", "fieldset_component_exports", "footer_component_exports", "group_component_exports", "password_field_component_exports", "__export", "Controller", "Controller", "__publicField", "payment_setup_component_exports", "__export", "Controller", "import_pure", "Controller", "result", "__publicField", "uppy_component_exports", "__export", "Controller", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "insertReplacement", "source", "rx", "replacement", "newParts", "chunk", "raw", "i", "list", "interpolate", "phrase", "options", "dollarRegex", "dollarBillsYall", "interpolated", "arg", "defaultOnMissingKey", "key", "_onMissingKey", "_apply", "Translator", "locales", "_temp", "onMissingKey", "_apply2", "n", "string", "plural", "locale", "prevLocale", "import_namespace_emitter", "urlAlphabet", "nanoid", "size", "id", "i", "urlAlphabet", "import_throttle", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "packageJson", "_callbacks", "_publish", "DefaultStore", "_publish2", "patch", "prevState", "nextState", "listener", "_len", "args", "_key", "lib_default", "getFileNameAndExtension", "fullFileName", "lastDot", "mimeTypes_default", "getFileType", "file", "_getFileNameAndExtens", "fileExtension", "getFileNameAndExtension", "mimeTypes_default", "encodeCharacter", "character", "encodeFilename", "name", "suffix", "generateFileID", "file", "instanceId", "id", "hasFileStableId", "getSafeFileId", "fileType", "getFileType", "supportsUploadProgress", "userAgent", "m", "version", "major", "minor", "getFileName", "fileType", "fileDescriptor", "pad", "number", "getTimeStamp", "date", "hours", "minutes", "seconds", "justErrorsLogger", "_len", "args", "_key", "getTimeStamp", "debugLogger", "_len2", "_key2", "_len3", "_key3", "_len4", "_key4", "import_prettier_bytes", "import_mime_match", "defaultOptions", "RestrictionError", "message", "opts", "_opts$isUserFacing", "Restricter", "getOpts", "getI18n", "_opts$restrictions", "existingFiles", "addingFiles", "maxTotalFileSize", "maxNumberOfFiles", "f", "totalFilesSize", "total", "_f$size", "prettierBytes", "file", "maxFileSize", "minFileSize", "allowedFileTypes", "type", "match", "allowedFileTypesString", "_file$name", "addingFile", "files", "minNumberOfFiles", "_file$name2", "error", "requiredMetaFields", "missingFields", "field", "locale_default", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "packageJson", "defaultUploadState", "_plugins", "_restricter", "_storeUnsubscribe", "_emitter", "_preProcessors", "_uploaders", "_postProcessors", "_informAndEmit", "_checkRequiredMetaFieldsOnFile", "_checkRequiredMetaFields", "_assertNewUploadAllowed", "_transformFile", "_startIfAutoProceed", "_checkAndUpdateFileState", "_getFilesToRetry", "_doRetryAll", "_handleUploadProgress", "_updateTotalProgress", "_updateTotalProgressThrottled", "_calculateTotalProgress", "_addListeners", "_updateOnlineStatus", "_requestClientById", "_createUpload", "_getUpload", "_removeUpload", "_runUpload", "Uppy", "_opts", "_runUpload2", "_removeUpload2", "_getUpload2", "_createUpload2", "_addListeners2", "_calculateTotalProgress2", "_updateTotalProgress2", "_doRetryAll2", "_getFilesToRetry2", "_checkAndUpdateFileState2", "_startIfAutoProceed2", "_transformFile2", "_assertNewUploadAllowed2", "_checkRequiredMetaFields2", "_checkRequiredMetaFieldsOnFile2", "_informAndEmit2", "ee", "file", "progress", "fileInState", "newProgress", "throttle", "locale_default", "defaultOptions", "files", "lib_default", "justErrorsLogger", "merged", "debugLogger", "supportsUploadProgress", "Restricter", "prevState", "nextState", "patch", "event", "_len", "args", "_key", "callback", "state", "plugin", "filesWithNewState", "existingFilesState", "_ref", "fileID", "newFileState", "onMissingKey", "key", "translator", "Translator", "newOpts", "defaultProgress", "updatedFiles", "capabilities", "currentUploads", "fn", "data", "updatedMeta", "newMeta", "ids", "filesObject", "totalProgress", "error", "inProgressFiles", "newFiles", "startedFiles", "uploadStartedFiles", "pausedFiles", "completeFiles", "erroredFiles", "inProgressNotPausedFiles", "processingFiles", "err", "existingFiles", "nextFilesState", "validFilesToAdd", "errors", "restrictionErrors", "firstValidFileToAdd", "fileDescriptors", "nonRestrictionErrors", "message", "subError", "fileIDs", "updatedUploads", "removedFiles", "fileIsNotRemoved", "uploadFileID", "uploadID", "newFileIDs", "stateUpdate", "removedFileIDs", "isPaused", "updatedFile", "result", "_provider", "_window$navigator$onL", "Plugin", "msg", "_len2", "_key2", "pluginId", "existsPluginAlready", "plugins", "foundPlugin", "type", "method", "instance", "list", "index", "item", "updatedState", "info", "duration", "isComplexMessage", "logger", "client", "requestClient", "currentUpload", "_classPrivateFieldLoo", "retryResult", "onBeforeUploadResult", "RestrictionError", "currentlyUploadingFiles", "curr", "waitingFileIDs", "userFacingErrors", "maxNumToShow", "firstErrors", "additionalErrors", "_ref2", "details", "missingFields", "success", "allowNewUpload", "fileDescriptorOrFile", "fileType", "getFileType", "fileName", "getFileName", "fileExtension", "getFileNameAndExtension", "getSafeFileId", "meta", "size", "filesToAdd", "fileToAdd", "_existingFiles$newFil", "newFile", "isGhost", "onBeforeFileAddedResult", "_newFile$name", "filesToRetry", "_totalProgressPercent", "_totalProgressPercent2", "totalProgressPercent", "filesInProgress", "isSizedFile", "sizedFilesInProgress", "unsizedFilesInProgress", "totalFilesSize", "acc", "_file$progress$bytesT", "totalUploadedSize", "errorHandler", "response", "errorMsg", "_file$name", "newError", "uploadStalledWarningRecentlyEmitted", "onUploadStarted", "filesFiltered", "exists", "filesState", "uploadResp", "currentProgress", "opts", "forceAllowNewUpload", "nanoid", "getCurrentUpload", "steps", "step", "successful", "failed", "Uppy_default", "isDOMElement", "obj", "findDOMElement", "element", "context", "isDOMElement", "findDOMElement_default", "getTextDirection", "element", "_element", "getTextDirection_default", "BasePlugin", "uppy", "opts", "plugins", "update", "newOpts", "translator", "Translator", "plugin", "state", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "debounce", "fn", "calling", "latestArgs", "_len", "args", "_key", "_updateUI", "UIPlugin", "BasePlugin", "target", "targetPlugin", "Target", "p", "plugin", "callerPluginName", "targetElement", "findDOMElement_default", "uppyRootElement", "state", "B", "getTextDirection_default", "message", "container", "_classPrivateFieldLoo", "_classPrivateFieldLoo2", "_this$el", "UIPlugin_default", "fr_FR", "n", "fr_FR_default", "toArray_default", "isDragDropSupported", "div", "getFilesAndDirectoriesFromDirectory", "directoryReader", "oldEntries", "logDropError", "_ref", "onSuccess", "entries", "newEntries", "error", "getAsFileSystemHandleFromEntry", "entry", "logDropError", "resolve", "reject", "directoryReader", "getFilesAndDirectoriesFromDirectory", "dirEntries", "file", "createPromiseToAddFileOrParseDirectory", "relativePath", "lastResortFile", "getNextRelativePath", "handle", "e", "getFilesFromDataTransfer", "dataTransfer", "fileSystemHandles", "item", "_fileSystemHandle", "fileSystemHandle", "getAsEntry", "err", "fallbackApi", "dataTransfer", "files", "toArray_default", "getDroppedFiles", "dataTransfer", "options", "_options$logDropError", "logDropError", "accumulator", "file", "getFilesFromDataTransfer", "fallbackApi", "locale_default", "packageJson", "defaultOptions", "DragDrop", "UIPlugin_default", "uppy", "opts", "isDragDropSupported", "files", "descriptors", "file", "err", "event", "toArray_default", "_this$opts$onDragOver", "_this$opts", "types", "hasFiles", "type", "allowNewUpload", "_this$opts$onDragLeav", "_this$opts2", "_this$opts$onDrop", "_this$opts3", "logDropError", "error", "getDroppedFiles", "locale_default", "_restrictions$allowed", "restrictions", "_", "ref", "dragDropClass", "dragDropStyle", "target", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "_uppy", "_events", "EventManager", "uppy", "event", "fn", "fileID", "cb", "file", "isPaused", "eventHandler", "_this", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "createCancelError", "cause", "abortOn", "signal", "_this$then", "abortPromise", "removeAbortListener", "_activeRequests", "_queuedHandlers", "_paused", "_pauseTimer", "_downLimit", "_upperLimit", "_rateLimitingTimer", "_call", "_queueNext", "_next", "_queue", "_dequeue", "_resume", "_increaseLimit", "RateLimitedQueue", "limit", "_dequeue2", "_queue2", "_next2", "_queueNext2", "_call2", "i", "fn", "queueOptions", "_this", "_len", "args", "_key", "queuedRequest", "_this2", "_len2", "_key2", "outerPromise", "resolve", "reject", "cancelError", "innerPromise", "err", "result", "duration", "done", "cancelActive", "next", "handler", "options", "index", "other", "internalRateLimitedQueue", "NetworkError", "error", "xhr", "NetworkError_default", "isNetworkError", "xhr", "isNetworkError_default", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "_aliveTimer", "_isDone", "_onTimedOut", "_timeout", "ProgressTimeout", "timeout", "timeoutHandler", "ProgressTimeout_default", "noop", "fetcher", "url", "options", "body", "headers", "method", "onBeforeRequest", "onUploadProgress", "shouldRetry", "onAfterResponse", "onTimeout", "responseType", "retries", "signal", "timeout", "withCredentials", "delay", "attempt", "timer", "ProgressTimeout_default", "requestWithRetry", "retryCount", "resolve", "reject", "xhr", "onError", "error", "err", "NetworkError_default", "event", "key", "filterNonFailedFiles", "files", "hasError", "file", "filterFilesToEmitUploadStarted", "_file$progress", "getAllowedMetaFields", "fields", "meta", "locale_default", "_classPrivateFieldLooseBase", "e", "t", "id", "_classPrivateFieldLooseKey", "packageJson", "buildResponseError", "xhr", "err", "error", "isNetworkError_default", "NetworkError_default", "setTypeInBlob", "file", "defaultOptions", "_getFetcher", "_uploadLocalFile", "_uploadBundle", "_getCompanionClientArgs", "_uploadFiles", "_handleUpload", "XHRUpload", "BasePlugin", "uppy", "_opts", "_uploadFiles2", "_getCompanionClientArgs2", "_uploadBundle2", "_uploadLocalFile2", "fileIDs", "internalRateLimitedQueue", "files", "filesFiltered", "filterNonFailedFiles", "filesToEmit", "filterFilesToEmitUploadStarted", "locale_default", "RateLimitedQueue", "url", "options", "_this$opts$getRespons", "_this$opts2", "_body3", "res", "fetcher", "retryCount", "_this$opts$onBeforeRe", "_this$opts", "timeout", "seconds", "event", "_file$progress$upload", "body", "_body", "_body2", "cause", "uploadURL", "request", "overrides", "headers", "opts", "formData", "meta", "getAllowedMetaFields", "item", "value", "subItem", "formPost", "dataWithUpdatedType", "capabilities", "events", "EventManager", "controller", "uppyFetch", "fetch", "_this$uppy$getState$x", "optsFromState", "abort", "_file$remote", "allowedMetaFields", "name", "getQueue", "removedHandler", "removedFile", "uploadPromise", "Controller", "Uppy_default", "fr_FR_default", "DragDrop", "XHRUpload", "file", "response", "error", "data", "metaTag", "__publicField", "vintage_year_selector_component_exports", "__export", "Controller", "Controller", "checked", "__publicField", "gate_component_exports", "graph_chart_component_exports", "__export", "Controller", "ascending", "a", "b", "descending", "a", "b", "bisector", "f", "compare1", "compare2", "delta", "ascending", "d", "x", "descending", "zero", "left", "lo", "hi", "mid", "right", "center", "i", "number", "x", "ascendingBisect", "bisector", "ascending", "bisectRight", "bisectLeft", "bisectCenter", "number", "bisect_default", "extent", "values", "valueof", "min", "max", "value", "index", "e10", "e5", "e2", "tickSpec", "start", "stop", "count", "step", "power", "error", "factor", "i1", "i2", "inc", "ticks", "reverse", "n", "i", "tickIncrement", "tickStep", "max", "values", "valueof", "value", "index", "min", "values", "valueof", "value", "index", "identity_default", "x", "top", "right", "bottom", "left", "epsilon", "translateX", "x", "translateY", "y", "number", "scale", "d", "center", "offset", "entering", "axis", "orient", "tickArguments", "tickValues", "tickFormat", "tickSizeInner", "tickSizeOuter", "tickPadding", "k", "transform", "context", "values", "format", "identity_default", "spacing", "range", "range0", "range1", "position", "selection", "path", "tick", "tickExit", "tickEnter", "line", "text", "p", "_", "axisBottom", "scale", "axis", "bottom", "axisLeft", "left", "noop", "dispatch", "i", "n", "_", "t", "Dispatch", "parseTypenames", "typenames", "types", "name", "typename", "callback", "T", "get", "set", "copy", "type", "that", "args", "c", "dispatch_default", "xhtml", "namespaces_default", "namespace_default", "name", "prefix", "i", "namespaces_default", "creatorInherit", "name", "document", "uri", "xhtml", "creatorFixed", "fullname", "creator_default", "namespace_default", "none", "selector_default", "selector", "select_default", "select", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "Selection", "array", "x", "empty", "selectorAll_default", "selector", "arrayAll", "select", "array", "selectAll_default", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "Selection", "matcher_default", "selector", "childMatcher", "node", "find", "childFind", "match", "childFirst", "selectChild_default", "childMatcher", "filter", "children", "childrenFilter", "match", "selectChildren_default", "childMatcher", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Selection", "sparse_default", "update", "enter_default", "Selection", "sparse_default", "EnterNode", "parent", "datum", "child", "next", "selector", "constant_default", "x", "bindIndex", "parent", "group", "enter", "update", "exit", "data", "i", "node", "groupLength", "dataLength", "EnterNode", "bindKey", "key", "nodeByKeyValue", "keyValues", "keyValue", "datum", "data_default", "value", "bind", "parents", "groups", "constant_default", "m", "j", "arraylike", "enterGroup", "updateGroup", "exitGroup", "i0", "i1", "previous", "next", "Selection", "exit_default", "Selection", "sparse_default", "join_default", "onenter", "onupdate", "onexit", "enter", "update", "exit", "merge_default", "context", "selection", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Selection", "order_default", "groups", "j", "m", "group", "next", "node", "sort_default", "compare", "ascending", "compareNode", "a", "b", "groups", "m", "sortgroups", "j", "group", "n", "sortgroup", "node", "i", "Selection", "call_default", "callback", "nodes_default", "node_default", "groups", "j", "m", "group", "n", "node", "size_default", "size", "node", "empty_default", "each_default", "callback", "groups", "j", "m", "group", "i", "n", "node", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "value", "attrConstantNS", "attrFunction", "v", "attrFunctionNS", "attr_default", "namespace_default", "node", "window_default", "node", "styleRemove", "name", "styleConstant", "value", "priority", "styleFunction", "v", "style_default", "styleValue", "node", "window_default", "propertyRemove", "name", "propertyConstant", "value", "propertyFunction", "v", "property_default", "classArray", "string", "classList", "node", "ClassList", "name", "i", "classedAdd", "names", "list", "n", "classedRemove", "classedTrue", "classedFalse", "classedFunction", "value", "classed_default", "textRemove", "textConstant", "value", "textFunction", "v", "text_default", "htmlRemove", "htmlConstant", "value", "htmlFunction", "v", "html_default", "raise", "raise_default", "lower", "lower_default", "append_default", "name", "create", "creator_default", "constantNull", "insert_default", "name", "before", "create", "creator_default", "select", "selector_default", "remove", "parent", "remove_default", "selection_cloneShallow", "clone", "parent", "selection_cloneDeep", "clone_default", "deep", "datum_default", "value", "contextListener", "listener", "event", "parseTypenames", "typenames", "t", "name", "i", "onRemove", "typename", "on", "j", "m", "o", "onAdd", "value", "options", "on_default", "n", "dispatchEvent", "node", "type", "params", "window", "window_default", "event", "dispatchConstant", "dispatchFunction", "dispatch_default", "iterator_default", "groups", "j", "m", "group", "n", "node", "root", "Selection", "groups", "parents", "selection", "selection_selection", "select_default", "selectAll_default", "selectChild_default", "selectChildren_default", "filter_default", "data_default", "enter_default", "exit_default", "join_default", "merge_default", "order_default", "sort_default", "call_default", "nodes_default", "node_default", "size_default", "empty_default", "each_default", "attr_default", "style_default", "property_default", "classed_default", "text_default", "html_default", "raise_default", "lower_default", "append_default", "insert_default", "remove_default", "clone_default", "datum_default", "on_default", "dispatch_default", "iterator_default", "selection_default", "select_default", "selector", "Selection", "root", "define_default", "constructor", "factory", "prototype", "extend", "parent", "definition", "key", "Color", "darker", "brighter", "reI", "reN", "reP", "reHex", "reRgbInteger", "reRgbPercent", "reRgbaInteger", "reRgbaPercent", "reHslPercent", "reHslaPercent", "named", "define_default", "color", "channels", "color_formatHex", "color_formatHex8", "color_formatHsl", "color_formatRgb", "hslConvert", "format", "m", "l", "rgbn", "Rgb", "rgba", "hsla", "n", "r", "g", "b", "a", "rgbConvert", "o", "rgb", "opacity", "extend", "k", "clampi", "clampa", "rgb_formatHex", "rgb_formatHex8", "rgb_formatRgb", "hex", "value", "h", "s", "Hsl", "min", "max", "hsl", "m2", "m1", "hsl2rgb", "clamph", "clampt", "basis", "t1", "v0", "v1", "v2", "v3", "t2", "t3", "basis_default", "values", "n", "t", "i", "basisClosed_default", "values", "n", "t", "i", "v0", "v1", "v2", "v3", "basis", "constant_default", "x", "linear", "a", "d", "t", "exponential", "b", "y", "gamma", "y", "nogamma", "a", "b", "exponential", "constant_default", "d", "linear", "rgb_default", "rgbGamma", "y", "color", "gamma", "rgb", "start", "end", "r", "g", "b", "opacity", "nogamma", "t", "rgbSpline", "spline", "colors", "n", "i", "rgbBasis", "basis_default", "rgbBasisClosed", "basisClosed_default", "numberArray_default", "a", "b", "n", "c", "t", "isNumberArray", "x", "genericArray", "a", "b", "nb", "na", "x", "c", "i", "value_default", "t", "date_default", "a", "b", "d", "t", "number_default", "a", "b", "t", "object_default", "a", "b", "i", "c", "k", "value_default", "t", "reA", "reB", "zero", "b", "one", "t", "string_default", "a", "bi", "am", "bm", "bs", "i", "s", "q", "number_default", "o", "value_default", "a", "b", "t", "c", "constant_default", "number_default", "color", "rgb_default", "string_default", "date_default", "isNumberArray", "numberArray_default", "genericArray", "object_default", "round_default", "a", "b", "t", "degrees", "identity", "decompose_default", "a", "b", "c", "d", "e", "f", "scaleX", "scaleY", "skewX", "svgNode", "parseCss", "value", "m", "identity", "decompose_default", "parseSvg", "interpolateTransform", "parse", "pxComma", "pxParen", "degParen", "pop", "s", "translate", "xa", "ya", "xb", "yb", "q", "i", "number_default", "rotate", "a", "b", "skewX", "scale", "t", "n", "o", "interpolateTransformCss", "parseCss", "interpolateTransformSvg", "parseSvg", "frame", "timeout", "interval", "pokeDelay", "taskHead", "taskTail", "clockLast", "clockNow", "clockSkew", "clock", "setFrame", "f", "now", "clearNow", "Timer", "timer", "callback", "delay", "time", "sleep", "t", "timerFlush", "wake", "nap", "poke", "t0", "t1", "t2", "timeout_default", "callback", "delay", "time", "t", "Timer", "elapsed", "emptyOn", "dispatch_default", "emptyTween", "CREATED", "SCHEDULED", "STARTING", "STARTED", "RUNNING", "ENDING", "ENDED", "schedule_default", "node", "name", "id", "index", "group", "timing", "schedules", "create", "init", "schedule", "get", "set", "self", "tween", "timer", "elapsed", "start", "i", "j", "n", "o", "stop", "timeout_default", "tick", "t", "interrupt_default", "node", "name", "schedules", "schedule", "active", "empty", "i", "STARTING", "ENDING", "ENDED", "interrupt_default", "name", "tweenRemove", "id", "name", "tween0", "tween1", "schedule", "set", "tween", "i", "n", "tweenFunction", "value", "t", "tween_default", "get", "tweenValue", "transition", "node", "interpolate_default", "a", "b", "c", "number_default", "color", "rgb_default", "string_default", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "interpolate", "value1", "string00", "string1", "interpolate0", "string0", "attrConstantNS", "attrFunction", "value", "string10", "attrFunctionNS", "attr_default", "namespace_default", "i", "interpolateTransformSvg", "interpolate_default", "tweenValue", "attrInterpolate", "name", "i", "t", "attrInterpolateNS", "fullname", "attrTweenNS", "value", "t0", "i0", "tween", "attrTween", "attrTween_default", "key", "namespace_default", "delayFunction", "id", "value", "init", "delayConstant", "delay_default", "get", "durationFunction", "id", "value", "set", "durationConstant", "duration_default", "get", "easeConstant", "id", "value", "set", "ease_default", "get", "easeVarying", "id", "value", "v", "set", "easeVarying_default", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Transition", "merge_default", "transition", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Transition", "start", "name", "t", "i", "onFunction", "id", "listener", "on0", "on1", "sit", "init", "set", "schedule", "on", "on_default", "get", "removeFunction", "id", "parent", "i", "remove_default", "select_default", "select", "name", "id", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "schedule_default", "get", "Transition", "selectAll_default", "select", "name", "id", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "children", "child", "inherit", "get", "k", "l", "schedule_default", "Transition", "Selection", "selection_default", "styleNull", "name", "interpolate", "string00", "string10", "interpolate0", "string0", "styleValue", "string1", "styleRemove", "styleConstant", "value1", "styleFunction", "value", "styleMaybeRemove", "id", "on0", "on1", "listener0", "key", "event", "remove", "schedule", "set", "on", "listener", "style_default", "priority", "i", "interpolateTransformCss", "interpolate_default", "tweenValue", "styleInterpolate", "name", "i", "priority", "t", "styleTween", "value", "i0", "tween", "styleTween_default", "key", "textConstant", "value", "textFunction", "value1", "text_default", "tweenValue", "textInterpolate", "i", "t", "textTween", "value", "t0", "i0", "tween", "textTween_default", "key", "transition_default", "name", "id0", "id1", "newId", "groups", "m", "j", "group", "n", "node", "i", "inherit", "get", "schedule_default", "Transition", "end_default", "on0", "on1", "that", "id", "size", "resolve", "reject", "cancel", "end", "schedule", "set", "on", "id", "Transition", "groups", "parents", "name", "transition", "selection_default", "newId", "selection_prototype", "select_default", "selectAll_default", "filter_default", "merge_default", "transition_default", "on_default", "attr_default", "attrTween_default", "style_default", "styleTween_default", "text_default", "textTween_default", "remove_default", "tween_default", "delay_default", "duration_default", "ease_default", "easeVarying_default", "end_default", "cubicInOut", "defaultTiming", "cubicInOut", "inherit", "node", "id", "timing", "transition_default", "name", "Transition", "newId", "now", "groups", "m", "j", "group", "n", "i", "schedule_default", "selection_default", "interrupt_default", "transition_default", "abs", "max", "min", "number1", "e", "number2", "X", "type", "x", "xy", "Y", "y", "XY", "type", "pi", "tau", "epsilon", "tauEpsilon", "append", "strings", "i", "n", "appendRound", "digits", "d", "k", "Path", "x", "y", "x1", "y1", "x2", "y2", "r", "x0", "y0", "x21", "y21", "x01", "y01", "l01_2", "x20", "y20", "l21_2", "l20_2", "l21", "l01", "l", "t01", "t21", "a0", "a1", "ccw", "dx", "dy", "cw", "da", "w", "h", "path", "formatDecimal_default", "x", "formatDecimalParts", "p", "i", "coefficient", "exponent_default", "x", "formatDecimalParts", "formatGroup_default", "grouping", "thousands", "value", "width", "t", "j", "g", "length", "formatNumerals_default", "numerals", "value", "i", "re", "formatSpecifier", "specifier", "match", "FormatSpecifier", "formatTrim_default", "s", "out", "n", "i", "i0", "i1", "prefixExponent", "formatPrefixAuto_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "i", "n", "formatRounded_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "formatTypes_default", "x", "p", "formatDecimal_default", "formatRounded_default", "formatPrefixAuto_default", "identity_default", "x", "map", "prefixes", "locale_default", "locale", "group", "identity_default", "formatGroup_default", "currencyPrefix", "currencySuffix", "decimal", "numerals", "formatNumerals_default", "percent", "minus", "nan", "newFormat", "specifier", "formatSpecifier", "fill", "align", "sign", "symbol", "zero", "width", "comma", "precision", "trim", "type", "formatTypes_default", "prefix", "suffix", "formatType", "maybeSuffix", "format", "value", "valuePrefix", "valueSuffix", "i", "n", "c", "valueNegative", "formatTrim_default", "prefixExponent", "length", "padding", "formatPrefix", "f", "e", "exponent_default", "k", "locale", "format", "formatPrefix", "defaultLocale", "definition", "locale_default", "precisionFixed_default", "step", "exponent_default", "precisionPrefix_default", "step", "value", "exponent_default", "precisionRound_default", "step", "max", "exponent_default", "initRange", "domain", "range", "constants", "x", "number", "x", "unit", "identity", "x", "normalize", "a", "b", "constants", "clamper", "t", "bimap", "domain", "range", "interpolate", "d0", "d1", "r0", "r1", "polymap", "j", "d", "r", "i", "bisect_default", "copy", "source", "target", "transformer", "value_default", "transform", "untransform", "unknown", "clamp", "piecewise", "output", "input", "rescale", "n", "scale", "y", "number_default", "_", "number", "round_default", "u", "continuous", "tickFormat", "start", "stop", "count", "specifier", "step", "tickStep", "precision", "formatSpecifier", "value", "precisionPrefix_default", "formatPrefix", "precisionRound_default", "precisionFixed_default", "format", "linearish", "scale", "domain", "count", "d", "ticks", "specifier", "tickFormat", "i0", "i1", "start", "stop", "prestep", "step", "maxIter", "tickIncrement", "linear", "continuous", "copy", "initRange", "nice", "domain", "interval", "i0", "i1", "x0", "x1", "t", "transformLog", "x", "transformExp", "transformLogn", "transformExpn", "pow10", "powp", "base", "logp", "reflect", "f", "k", "loggish", "transform", "scale", "domain", "logs", "pows", "rescale", "_", "count", "d", "u", "v", "r", "i", "j", "t", "n", "z", "ticks", "specifier", "formatSpecifier", "format", "nice", "log", "transformer", "copy", "initRange", "t0", "t1", "timeInterval", "floori", "offseti", "count", "field", "interval", "date", "d0", "d1", "step", "start", "stop", "range", "previous", "test", "end", "d", "millisecond", "timeInterval", "date", "step", "start", "end", "k", "milliseconds", "second", "timeInterval", "date", "step", "start", "end", "seconds", "timeMinute", "timeInterval", "date", "step", "start", "end", "timeMinutes", "utcMinute", "utcMinutes", "timeHour", "timeInterval", "date", "step", "start", "end", "timeHours", "utcHour", "utcHours", "timeDay", "timeInterval", "date", "step", "start", "end", "timeDays", "utcDay", "utcDays", "unixDay", "unixDays", "timeWeekday", "i", "timeInterval", "date", "step", "start", "end", "timeSunday", "timeMonday", "timeTuesday", "timeWednesday", "timeThursday", "timeFriday", "timeSaturday", "timeSundays", "timeMondays", "timeTuesdays", "timeWednesdays", "timeThursdays", "timeFridays", "timeSaturdays", "utcWeekday", "utcSunday", "utcMonday", "utcTuesday", "utcWednesday", "utcThursday", "utcFriday", "utcSaturday", "utcSundays", "utcMondays", "utcTuesdays", "utcWednesdays", "utcThursdays", "utcFridays", "utcSaturdays", "timeMonth", "timeInterval", "date", "step", "start", "end", "timeMonths", "utcMonth", "utcMonths", "timeYear", "timeInterval", "date", "step", "start", "end", "k", "timeYears", "utcYear", "utcYears", "ticker", "year", "month", "week", "day", "hour", "minute", "tickIntervals", "second", "ticks", "start", "stop", "count", "reverse", "interval", "tickInterval", "target", "i", "bisector", "step", "tickStep", "millisecond", "t", "utcTicks", "utcTickInterval", "utcYear", "utcMonth", "utcSunday", "unixDay", "utcHour", "utcMinute", "timeTicks", "timeTickInterval", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "localDate", "d", "date", "utcDate", "newDate", "y", "m", "formatLocale", "locale", "locale_dateTime", "locale_date", "locale_time", "locale_periods", "locale_weekdays", "locale_shortWeekdays", "locale_months", "locale_shortMonths", "periodRe", "formatRe", "periodLookup", "formatLookup", "weekdayRe", "weekdayLookup", "shortWeekdayRe", "shortWeekdayLookup", "monthRe", "monthLookup", "shortMonthRe", "shortMonthLookup", "formats", "formatShortWeekday", "formatWeekday", "formatShortMonth", "formatMonth", "formatDayOfMonth", "formatMicroseconds", "formatYearISO", "formatFullYearISO", "formatHour24", "formatHour12", "formatDayOfYear", "formatMilliseconds", "formatMonthNumber", "formatMinutes", "formatPeriod", "formatQuarter", "formatUnixTimestamp", "formatUnixTimestampSeconds", "formatSeconds", "formatWeekdayNumberMonday", "formatWeekNumberSunday", "formatWeekNumberISO", "formatWeekdayNumberSunday", "formatWeekNumberMonday", "formatYear", "formatFullYear", "formatZone", "formatLiteralPercent", "utcFormats", "formatUTCShortWeekday", "formatUTCWeekday", "formatUTCShortMonth", "formatUTCMonth", "formatUTCDayOfMonth", "formatUTCMicroseconds", "formatUTCYearISO", "formatUTCFullYearISO", "formatUTCHour24", "formatUTCHour12", "formatUTCDayOfYear", "formatUTCMilliseconds", "formatUTCMonthNumber", "formatUTCMinutes", "formatUTCPeriod", "formatUTCQuarter", "formatUTCSeconds", "formatUTCWeekdayNumberMonday", "formatUTCWeekNumberSunday", "formatUTCWeekNumberISO", "formatUTCWeekdayNumberSunday", "formatUTCWeekNumberMonday", "formatUTCYear", "formatUTCFullYear", "formatUTCZone", "parses", "parseShortWeekday", "parseWeekday", "parseShortMonth", "parseMonth", "parseLocaleDateTime", "parseDayOfMonth", "parseMicroseconds", "parseYear", "parseFullYear", "parseHour24", "parseDayOfYear", "parseMilliseconds", "parseMonthNumber", "parseMinutes", "parsePeriod", "parseQuarter", "parseUnixTimestamp", "parseUnixTimestampSeconds", "parseSeconds", "parseWeekdayNumberMonday", "parseWeekNumberSunday", "parseWeekNumberISO", "parseWeekdayNumberSunday", "parseWeekNumberMonday", "parseLocaleDate", "parseLocaleTime", "parseZone", "parseLiteralPercent", "newFormat", "specifier", "string", "i", "j", "n", "c", "pad", "format", "pads", "newParse", "Z", "parseSpecifier", "week", "day", "utcMonday", "utcDay", "timeMonday", "timeDay", "parse", "f", "p", "numberRe", "percentRe", "requoteRe", "value", "fill", "width", "sign", "length", "requote", "s", "names", "name", "timeYear", "timeSunday", "dISO", "timeThursday", "z", "utcYear", "dow", "utcSunday", "UTCdISO", "utcThursday", "locale", "timeFormat", "timeParse", "utcFormat", "utcParse", "defaultLocale", "definition", "formatLocale", "date", "number", "calendar", "ticks", "tickInterval", "year", "month", "week", "day", "hour", "minute", "second", "format", "scale", "continuous", "invert", "domain", "formatMillisecond", "formatSecond", "formatMinute", "formatHour", "formatDay", "formatWeek", "formatMonth", "formatYear", "tickFormat", "y", "_", "interval", "d", "count", "specifier", "nice", "copy", "time", "initRange", "timeTicks", "timeTickInterval", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "timeFormat", "utcTime", "initRange", "calendar", "utcTicks", "utcTickInterval", "utcYear", "utcMonth", "utcSunday", "utcDay", "utcHour", "utcMinute", "second", "utcFormat", "constant_default", "x", "withPath", "shape", "digits", "_", "d", "Path", "slice", "array_default", "x", "Linear", "context", "x", "y", "linear_default", "x", "p", "y", "line_default", "x", "y", "defined", "constant_default", "context", "curve", "linear_default", "output", "path", "withPath", "line", "data", "i", "n", "array_default", "d", "defined0", "buffer", "_", "sign", "x", "slope3", "that", "x2", "y2", "h0", "h1", "s0", "s1", "p", "slope2", "t", "h", "point", "t0", "t1", "x0", "y0", "x1", "y1", "dx", "MonotoneX", "context", "y", "MonotoneY", "ReflectContext", "monotoneX", "Transform", "k", "x", "y", "point", "location", "identity", "transform", "node", "Controller", "data", "yBarScale", "d", "maxBarHeight", "max", "yLineScale", "xScale", "chart", "select_default", "linear", "lineData", "min", "log", "length", "barWidth", "yScale", "i", "svg", "line", "line_default", "monotoneX", "__publicField", "graph_component_exports", "graph_line_component_exports", "__export", "Controller", "Controller", "select_default", "utcTime", "extent", "d", "minValue", "min", "maxValue", "max", "padding", "linear", "line_default", "monotoneX", "yAxis", "axisLeft", "tickValues", "g", "i", "axisBottom", "format", "lastDatum", "svgImage", "__publicField", "header_component_exports", "__export", "Controller", "Controller", "state", "$navRoot", "$navItemLinks", "$navItemIcons", "actions", "$item", "i", "$svg", "method", "behavior", "title", "rightAction", "__publicField", "help_link_component_exports", "icon_component_exports", "identity_page_component_exports", "__export", "Controller", "Controller", "vintage", "turbo_es2017_esm_exports", "interstitial_component_exports", "stack_component_exports", "item_component_exports", "list_cards_component_exports", "list_component_exports", "logo_component_exports", "menu_component_exports", "__export", "Controller", "Controller", "i", "__publicField", "nav_component_exports", "nav_item_component_exports", "card_component_exports", "pairings_component_exports", "pill_component_exports", "pricing_table_component_exports", "progress_bar_component_exports", "properties_component_exports", "algolia_component_exports", "__export", "Controller", "import_lite", "refinementListDefaultOptions", "data", "html", "config_default", "refinement_list_default", "config_default", "results", "html", "hit", "components", "url", "href", "packshot", "vintages", "data", "config_default", "config_default", "Controller", "es_default", "widgets", "current_refinements_default", "config_default", "customerCode", "hitUrl", "showVintages", "infinite_hits_default", "items", "item", "placeholder", "search_box_default", "filtersWidgets", "filter", "widget", "title", "options", "filterEl", "container", "panelWidget", "panel_default", "data", "html", "algoliasearch", "historyRouter", "url", "turbo_es2017_esm_exports", "state", "__publicField", "box_component_exports", "filters_component_exports", "hits_component_exports", "refinements_component_exports", "search_box_component_exports", "section_component_exports", "static_buttons_component_exports", "stock_card_component_exports", "__export", "Controller", "Controller", "event", "item", "tasting_zone_component_exports", "__export", "Controller", "Controller", "time", "select_default", "parentWidth", "tickValues", "axisBottom", "currentDate", "xPosition", "id", "thumb", "date", "startDate", "endDate", "hashZoneStartDate", "hashZoneEndDate", "line", "hashZone", "hashZoneTitle", "hashZoneBBox", "titleBBox", "titleX", "__publicField", "tile_component_exports", "tiles_component_exports", "timeline_component_exports", "toast_component_exports", "__export", "Controller", "Controller", "group_component_exports", "table_component_exports", "modules", "action_card_component_exports", "button_group_component_exports", "customer_switch_component_exports", "item_component_exports", "list_component_exports", "product_glimpse_component_exports", "algolia_component_exports", "box_component_exports", "filters_component_exports", "hits_component_exports", "refinements_component_exports", "spinner_component_exports", "avatar_component_exports", "banner_component_exports", "bouncer_component_exports", "button_component_exports", "calendar_component_exports", "card_component_exports", "carousel_component_exports", "cart_line_component_exports", "cart_lines_component_exports", "chip_component_exports", "collapse_button_component_exports", "comment_component_exports", "container_component_exports", "customer_card_component_exports", "customer_cards_component_exports", "drawer_component_exports", "feature_table_component_exports", "footer_component_exports", "enum_radio_buttons_component_exports", "export_component_exports", "fieldset_component_exports", "group_component_exports", "password_field_component_exports", "payment_setup_component_exports", "uppy_component_exports", "vintage_year_selector_component_exports", "gate_component_exports", "graph_chart_component_exports", "graph_component_exports", "graph_line_component_exports", "header_component_exports", "help_link_component_exports", "icon_component_exports", "identity_page_component_exports", "interstitial_component_exports", "stack_component_exports", "list_cards_component_exports", "logo_component_exports", "menu_component_exports", "nav_component_exports", "nav_item_component_exports", "pairings_component_exports", "pill_component_exports", "pricing_table_component_exports", "progress_bar_component_exports", "properties_component_exports", "search_box_component_exports", "section_component_exports", "static_buttons_component_exports", "stock_card_component_exports", "tasting_zone_component_exports", "tile_component_exports", "tiles_component_exports", "timeline_component_exports", "toast_component_exports", "table_component_exports", "component_default", "component_default", "component", "path", "identifier", "application"]
}
