{ "version": 3, "sources": ["../../../node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@hotwired/turbo-rails/node_modules/@rails/actioncable/src/index.js", "../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js", "../../../node_modules/mersenne-twister/src/mersenne-twister.js", "../../../node_modules/polyfill-crypto.getrandomvalues/index.js", "../../../node_modules/no-scroll/index.js", "../../../node_modules/@mapbox/sphericalmercator/sphericalmercator.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/webpack/universalModuleDefinition", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/node_modules/events/events.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/DerivedHelper/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/SearchParameters/RefinementList.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/SearchParameters/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/SearchResults/generate-hierarchical-tree.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/SearchResults/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/algoliasearch.helper.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/compact.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/defaultsPure.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/find.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/findIndex.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/formatSort.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/inherits.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/intersection.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/merge.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/objectHasKeys.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/omit.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/orderBy.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/functions/valToNumber.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/requestBuilder.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/utils/isValidUserToken.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch-helper/src/version.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/algoliasearch/dist/algoliasearch.umd.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/base.css?3500", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/theme.css?2c27", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/intl-tel-input/build/css/intlTelInput.css?7a91", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/selectize/dist/css/selectize.css?b9f8", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/documentation.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/findIndex.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/uniq.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/mergeSearchParameters.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/resolveSearchParameters.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/widgets/index/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/version.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/getPropertyByPath.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/escape.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/isPlainObject.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/escape-highlight.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/suit.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/helpers/highlight.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/concatHighlightedParts.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/unescape.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/getHighlightFromSiblings.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/reverseHighlightedParts.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/getHighlightedParts.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/helpers/reverseHighlight.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/helpers/snippet.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/helpers/reverseSnippet.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/helpers/insights.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/createHelpers.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/defer.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/noop.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/stateMappings/simple.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/routers/history.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/isEqual.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/middlewares/createRouterMiddleware.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/InstantSearch.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/helpers/get-insights-anonymous-user-token.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/infiniteHitsCache/sessionStorage.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/getObjectType.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/checkRendering.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/lib/utils/createSendEventForHits.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/connectors/autocomplete/connectAutocomplete.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/connectors/configure/connectConfigure.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/es/widgets/configure/configure.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/src/pos-finder.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/src/form-helper.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/src/date-picker.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/src/phone-checker.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/src/params-copier.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/src/params-linker.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/intl-tel-input/build/css/intlTelInput.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/accordion.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/autocomplete.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/base.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/button.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/checkboxradio.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/controlgroup.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/core.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/datepicker.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/dialog.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/draggable.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/menu.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/progressbar.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/resizable.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/selectable.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/selectmenu.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/slider.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/sortable.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/spinner.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/tabs.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/theme.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/tooltip.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/selectize/dist/css/selectize.css", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/css-loader/dist/runtime/api.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/css-loader/dist/runtime/cssWithMappingToString.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/css-loader/dist/runtime/getUrl.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/instantsearch.js/node_modules/events/events.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/intl-tel-input/build/js/intlTelInput.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/intl-tel-input/build/js/utils.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/intl-tel-input/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-mask-plugin/dist/jquery.mask.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/ui/keycode.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/ui/version.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/ui/widgets/datepicker.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery/dist/jquery.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/microplugin/src/microplugin.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/qs/lib/formats.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/qs/lib/index.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/qs/lib/parse.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/qs/lib/stringify.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/qs/lib/utils.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/selectize/dist/js/selectize.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/sifter/sifter.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/intl-tel-input/build/img/flags.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/intl-tel-input/build/img/flags@2x.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/images/ui-icons_444444_256x240.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/images/ui-icons_555555_256x240.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/images/ui-icons_777620_256x240.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/images/ui-icons_777777_256x240.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/images/ui-icons_cc0000_256x240.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/node_modules/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/webpack/bootstrap", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/webpack/startup", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/webpack/runtime/compat get default export", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/webpack/runtime/define property getters", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/webpack/runtime/hasOwnProperty shorthand", "../../../node_modules/@lcds/form-helper/build/webpack:/FormHelper/webpack/runtime/make namespace object", "../../javascript/application.js", "../../../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/controllers/accordeon_controller.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/format.js", "../../../node_modules/@popperjs/core/lib/utils/validateModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/uniqueBy.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@mapbox/search-js-core/src/search/constants.ts", "../../../node_modules/@mapbox/search-js-core/src/LngLat.ts", "../../../node_modules/@mapbox/search-js-core/src/LngLatBounds.ts", "../../../node_modules/@mapbox/search-js-core/src/utils/uuid.ts", "../../../node_modules/@mapbox/search-js-core/src/SessionToken.ts", "../../../node_modules/@mapbox/search-js-core/src/MapboxError.ts", "../../../node_modules/@mapbox/search-js-core/src/fetch.ts", "../../../node_modules/@mapbox/search-js-core/src/utils/queryParams.ts", "../../../node_modules/@mapbox/search-js-core/src/search/MapboxSearch.ts", "../../../node_modules/@mapbox/search-js-core/src/autofill/constants.ts", "../../../node_modules/@mapbox/search-js-core/src/autofill/MapboxAutofill.ts", "../../../node_modules/@mapbox/search-js-core/src/autofill/types.ts", "../../../node_modules/@mapbox/search-js-core/src/utils/Evented.ts", "../../../node_modules/@mapbox/search-js-core/src/utils/debounce.ts", "../../../node_modules/@mapbox/search-js-core/src/SearchSession.ts", "../../../node_modules/@mapbox/search-js-core/src/featureToSuggestion.ts", "../../../node_modules/@mapbox/search-js-web/src/components/MapboxSearchListbox.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/dom.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/class_name_transformers.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/index.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/map.ts", "../../../node_modules/@mapbox/search-js-web/src/constants.ts", "../../../node_modules/@mapbox/search-js-web/src/components/HTMLScopedElement.ts", "../../../node_modules/@mapbox/search-js-web/src/MapboxHTMLEvent.ts", "../../../node_modules/@mapbox/search-js-web/src/theme.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/aria.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/autofill.ts", "../../../node_modules/@mapbox/search-js-web/src/confirmAddress.ts", "../../../node_modules/@mapbox/search-js-web/src/components/MapboxAddressConfirmation.ts", "../../../node_modules/@mapbox/search-js-web/src/config.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/confirmation.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/contribute.ts", "../../../node_modules/@mapbox/search-js-web/src/components/MapboxAddressConfirmationFeature.ts", "../../../node_modules/@mapbox/search-js-web/src/components/MapboxAddressConfirmationNoFeature.ts", "../../../node_modules/@mapbox/search-js-web/src/components/MapboxAddressAutofill.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/detect_browser_autofill.ts", "../../../node_modules/@mapbox/search-js-web/src/components/MapboxSearchBox.ts", "../../../node_modules/@mapbox/search-js-web/src/components/MapboxAddressMinimap.ts", "../../../node_modules/@mapbox/search-js-web/src/utils/minimap.ts", "../../../node_modules/@mapbox/search-js-web/src/autofill.ts", "../../../node_modules/tabbable/src/index.js", "../../../node_modules/focus-trap/index.js", "../../../node_modules/@turf/helpers/dist/es/index.js", "../../../node_modules/@turf/meta/dist/es/index.js", "../../../node_modules/@turf/bbox/dist/es/index.js", "../../../node_modules/@turf/bbox-polygon/dist/es/index.js", "../../javascript/controllers/address_controller.js", "../../javascript/controllers/dropdown_controller.js", "../../javascript/controllers/file_controller.js", "../../javascript/controllers/flashes_controller.js", "../../javascript/controllers/hello_controller.js", "../../javascript/controllers/menu_controller.js", "../../javascript/controllers/phone_checker_controller.js", "../../javascript/controllers/size_quantities_controller.js", "../../javascript/controllers/size_sync_controller.js", "../../javascript/controllers/index.js"], "sourcesContent": ["/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */;\n\n(function() {\n var context = this;\n\n (function() {\n (function() {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n\n }).call(this);\n }).call(context);\n\n var Rails = context.Rails;\n\n (function() {\n (function() {\n var nonce;\n\n nonce = null;\n\n Rails.loadCSPNonce = function() {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function() {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n\n }).call(this);\n (function() {\n var expando, m;\n\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function(element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function(element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function(element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n return element[expando][key] = value;\n };\n\n Rails.$ = function(selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n\n }).call(this);\n (function() {\n var $, csrfParam, csrfToken;\n\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function() {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function() {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function(xhr) {\n var token;\n token = csrfToken();\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function() {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n if ((token != null) && (param != null)) {\n return $('form input[name=\"' + param + '\"]').forEach(function(input) {\n return input.value = token;\n });\n }\n };\n\n }).call(this);\n (function() {\n var CustomEvent, fire, matches, preventDefault;\n\n matches = Rails.matches;\n\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n CustomEvent.prototype.preventDefault = function() {\n var result;\n result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function() {\n return true;\n }\n });\n }\n return result;\n };\n }\n\n fire = Rails.fire = function(obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function(e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function(element, selector, eventType, handler) {\n return element.addEventListener(eventType, function(e) {\n var target;\n target = e.target;\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n\n }).call(this);\n (function() {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function(options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function() {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n return options;\n };\n\n createXHR = function(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n };\n\n processResponse = function(response, type) {\n var parser, script;\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n return response;\n };\n\n Rails.href = function(element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function(url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n try {\n urlAnchor.href = url;\n return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));\n } catch (error) {\n e = error;\n return true;\n }\n };\n\n }).call(this);\n (function() {\n var matches, toArray;\n\n matches = Rails.matches;\n\n toArray = function(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function(element, additionalParam) {\n var inputs, params;\n inputs = [element];\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n params = [];\n inputs.forEach(function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function(option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map(function(param) {\n if (param.name != null) {\n return (encodeURIComponent(param.name)) + \"=\" + (encodeURIComponent(param.value));\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function(form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function(el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n\n }).call(this);\n (function() {\n var allowAction, fire, stopEverything;\n\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function(e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function(message, element) {\n return confirm(message);\n };\n\n allowAction = function(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n if (!message) {\n return true;\n }\n answer = false;\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, 'confirm:complete', [answer]);\n }\n return answer && callback;\n };\n\n }).call(this);\n (function() {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function(e) {\n var element;\n element = this;\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function(e) {\n var element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function(e) {\n var element;\n element = e instanceof Event ? e.target : e;\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function(element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function(element) {\n var replacement;\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n replacement = element.getAttribute('data-disable-with');\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, 'ujs:enable-with', null);\n }\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n\n }).call(this);\n (function() {\n var stopEverything;\n\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function(e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n if (!method) {\n return;\n }\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n\n }).call(this);\n (function() {\n var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,\n slice = [].slice;\n\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function(element) {\n var value;\n value = element.getAttribute('data-remote');\n return (value != null) && value !== 'false';\n };\n\n Rails.handleRemote = function(e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: (withCredentials != null) && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function(e) {\n var button, form;\n button = this;\n form = button.form;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function(e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = (e.button != null) && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n\n }).call(this);\n (function() {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if ((typeof jQuery !== \"undefined\" && jQuery !== null) && (jQuery.ajax != null)) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function() {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n window.addEventListener('pageshow', function() {\n $(Rails.formEnableSelector).forEach(function(el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function(el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function(e) {\n return setTimeout((function() {\n return disableElement(e);\n }), 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n\n }).call(this);\n }).call(this);\n\n if (typeof module === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);\n", "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", "(function(global, factory) {\n typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([ \"exports\" ], factory) : factory(global.ActiveStorage = {});\n})(this, function(exports) {\n \"use strict\";\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n var sparkMd5 = createCommonjsModule(function(module, exports) {\n (function(factory) {\n {\n module.exports = factory();\n }\n })(function(undefined) {\n var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n function md5cycle(x, k) {\n var a = x[0], b = x[1], c = x[2], d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n function md5blk(s) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n return md5blks;\n }\n function md5blk_array(a) {\n var md5blks = [], i;\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n return md5blks;\n }\n function md51(s) {\n var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n s = s.substring(i - 64);\n length = s.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function md51_array(a) {\n var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(state, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n function rhex(n) {\n var s = \"\", j;\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n return s;\n }\n function hex(x) {\n var i;\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n return x.join(\"\");\n }\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function() {\n function clamp(val, length) {\n val = val | 0 || 0;\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n return Math.min(val, length);\n }\n ArrayBuffer.prototype.slice = function(from, to) {\n var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n if (to !== undefined) {\n end = clamp(to, length);\n }\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n return str;\n }\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n return returnUInt8Array ? arr : buff;\n }\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n function hexToBinaryString(hex) {\n var bytes = [], length = hex.length, x;\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n return String.fromCharCode.apply(String, bytes);\n }\n function SparkMD5() {\n this.reset();\n }\n SparkMD5.prototype.append = function(str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n SparkMD5.prototype.appendBinary = function(contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length, i;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n SparkMD5.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.prototype.reset = function() {\n this._buff = \"\";\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.prototype.getState = function() {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n SparkMD5.prototype.setState = function(state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n SparkMD5.prototype.destroy = function() {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n SparkMD5.prototype._finish = function(tail, length) {\n var i = length, tmp, lo, hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n if (i > 55) {\n md5cycle(this._hash, tail);\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n SparkMD5.hash = function(str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n SparkMD5.hashBinary = function(content, raw) {\n var hash = md51(content), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n SparkMD5.ArrayBuffer = function() {\n this.reset();\n };\n SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n this._length += arr.byteLength;\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n this._finish(tail, length);\n ret = hex(this._hash);\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n this.reset();\n return ret;\n };\n SparkMD5.ArrayBuffer.prototype.reset = function() {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n return this;\n };\n SparkMD5.ArrayBuffer.prototype.getState = function() {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n return SparkMD5;\n });\n });\n var classCallCheck = function(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n var FileChecksum = function() {\n createClass(FileChecksum, null, [ {\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n } ]);\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n createClass(FileChecksum, [ {\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function(event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function(event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n } ]);\n return FileChecksum;\n }();\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n }\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles, cancelable = eventInit.cancelable, detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n return event;\n }\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n var BlobRecord = function() {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n this.xhr.addEventListener(\"load\", function(event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function(event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobRecord, [ {\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr, responseType = _xhr.responseType, response = _xhr.response;\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n } ]);\n return BlobRecord;\n }();\n var BlobUpload = function() {\n function BlobUpload(blob) {\n var _this = this;\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData, url = _blob$directUploadDat.url, headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n this.xhr.addEventListener(\"load\", function(event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function(event) {\n return _this.requestDidError(event);\n });\n }\n createClass(BlobUpload, [ {\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr, status = _xhr.status, response = _xhr.response;\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n } ]);\n return BlobUpload;\n }();\n var id = 0;\n var DirectUpload = function() {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n createClass(DirectUpload, [ {\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n FileChecksum.create(this.file, function(error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function(error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function(error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n } ]);\n return DirectUpload;\n }();\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n return object[methodName].apply(object, messages);\n }\n }\n var DirectUploadController = function() {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n createClass(DirectUploadController, [ {\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function(error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n _this.dispatch(\"end\");\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function(event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n } ]);\n return DirectUploadController;\n }();\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n var DirectUploadsController = function() {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function(input) {\n return input.files.length;\n });\n }\n createClass(DirectUploadsController, [ {\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n var controllers = this.createDirectUploadControllers();\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n if (controller) {\n controller.start(function(error) {\n if (error) {\n callback(error);\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n _this.dispatch(\"end\");\n }\n };\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function(input) {\n toArray$1(input.files).forEach(function(file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n } ]);\n return DirectUploadsController;\n }();\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n function didClick(event) {\n var target = event.target;\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function(error) {\n form.removeAttribute(processingAttribute);\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n if (button) {\n var _button = button, disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n submitButtonsByForm.delete(form);\n }\n function disable(input) {\n input.disabled = true;\n }\n function enable(input) {\n input.disabled = false;\n }\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});\n", "/*\n https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace\n so it's better encapsulated. Now you can have multiple random number generators\n and they won't stomp all over eachother's state.\n\n If you want to use this as a substitute for Math.random(), use the random()\n method like so:\n\n var m = new MersenneTwister();\n var randomNumber = m.random();\n\n You can also call the other genrand_{foo}() methods on the instance.\n\n If you want to use a specific seed in order to get a repeatable random\n sequence, pass an integer into the constructor:\n\n var m = new MersenneTwister(123);\n\n and that will always produce the same random sequence.\n\n Sean McCullough (banksean@gmail.com)\n*/\n\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_seed(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nvar MersenneTwister = function(seed) {\n\tif (seed == undefined) {\n\t\tseed = new Date().getTime();\n\t}\n\n\t/* Period parameters */\n\tthis.N = 624;\n\tthis.M = 397;\n\tthis.MATRIX_A = 0x9908b0df; /* constant vector a */\n\tthis.UPPER_MASK = 0x80000000; /* most significant w-r bits */\n\tthis.LOWER_MASK = 0x7fffffff; /* least significant r bits */\n\n\tthis.mt = new Array(this.N); /* the array for the state vector */\n\tthis.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */\n\n\tif (seed.constructor == Array) {\n\t\tthis.init_by_array(seed, seed.length);\n\t}\n\telse {\n\t\tthis.init_seed(seed);\n\t}\n}\n\n/* initializes mt[N] with a seed */\n/* origin name init_genrand */\nMersenneTwister.prototype.init_seed = function(s) {\n\tthis.mt[0] = s >>> 0;\n\tfor (this.mti=1; this.mti>> 30);\n\t\tthis.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)\n\t\t+ this.mti;\n\t\t/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n\t\t/* In the previous versions, MSBs of the seed affect */\n\t\t/* only MSBs of the array mt[]. */\n\t\t/* 2002/01/09 modified by Makoto Matsumoto */\n\t\tthis.mt[this.mti] >>>= 0;\n\t\t/* for >32 bit machines */\n\t}\n}\n\n/* initialize by an array with array-length */\n/* init_key is the array for initializing keys */\n/* key_length is its length */\n/* slight change for C++, 2004/2/26 */\nMersenneTwister.prototype.init_by_array = function(init_key, key_length) {\n\tvar i, j, k;\n\tthis.init_seed(19650218);\n\ti=1; j=0;\n\tk = (this.N>key_length ? this.N : key_length);\n\tfor (; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30)\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525)))\n\t\t+ init_key[j] + j; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++; j++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t\tif (j>=key_length) j=0;\n\t}\n\tfor (k=this.N-1; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941))\n\t\t- i; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t}\n\n\tthis.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n}\n\n/* generates a random number on [0,0xffffffff]-interval */\n/* origin name genrand_int32 */\nMersenneTwister.prototype.random_int = function() {\n\tvar y;\n\tvar mag01 = new Array(0x0, this.MATRIX_A);\n\t/* mag01[x] = x * MATRIX_A for x=0,1 */\n\n\tif (this.mti >= this.N) { /* generate N words at one time */\n\t\tvar kk;\n\n\t\tif (this.mti == this.N+1) /* if init_seed() has not been called, */\n\t\t\tthis.init_seed(5489); /* a default initial seed is used */\n\n\t\tfor (kk=0;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\tfor (;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\ty = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);\n\t\tthis.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1];\n\n\t\tthis.mti = 0;\n\t}\n\n\ty = this.mt[this.mti++];\n\n\t/* Tempering */\n\ty ^= (y >>> 11);\n\ty ^= (y << 7) & 0x9d2c5680;\n\ty ^= (y << 15) & 0xefc60000;\n\ty ^= (y >>> 18);\n\n\treturn y >>> 0;\n}\n\n/* generates a random number on [0,0x7fffffff]-interval */\n/* origin name genrand_int31 */\nMersenneTwister.prototype.random_int31 = function() {\n\treturn (this.random_int()>>>1);\n}\n\n/* generates a random number on [0,1]-real-interval */\n/* origin name genrand_real1 */\nMersenneTwister.prototype.random_incl = function() {\n\treturn this.random_int()*(1.0/4294967295.0);\n\t/* divided by 2^32-1 */\n}\n\n/* generates a random number on [0,1)-real-interval */\nMersenneTwister.prototype.random = function() {\n\treturn this.random_int()*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on (0,1)-real-interval */\n/* origin name genrand_real3 */\nMersenneTwister.prototype.random_excl = function() {\n\treturn (this.random_int() + 0.5)*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on [0,1) with 53-bit resolution*/\n/* origin name genrand_res53 */\nMersenneTwister.prototype.random_long = function() {\n\tvar a=this.random_int()>>>5, b=this.random_int()>>>6;\n\treturn(a*67108864.0+b)*(1.0/9007199254740992.0);\n}\n\n/* These real versions are due to Isaku Wada, 2002/01/09 added */\n\nmodule.exports = MersenneTwister;\n", "var MersenneTwister = require('mersenne-twister')\n\nvar twister = new MersenneTwister(Math.random()*Number.MAX_SAFE_INTEGER)\n\nmodule.exports = getRandomValues\n\n\nfunction getRandomValues (abv) {\n var l = abv.length\n while (l--) {\n abv[l] = Math.floor(randomFloat() * 256)\n }\n return abv\n}\n\nfunction randomFloat() {\n return twister.random()\n}", "(function(root) {\n var isOn = false;\n var scrollbarSize;\n var scrollTop;\n\n function getScrollbarSize() {\n if (typeof scrollbarSize !== 'undefined') return scrollbarSize;\n\n var doc = document.documentElement;\n var dummyScroller = document.createElement('div');\n dummyScroller.setAttribute('style', 'width:99px;height:99px;' + 'position:absolute;top:-9999px;overflow:scroll;');\n doc.appendChild(dummyScroller);\n scrollbarSize = dummyScroller.offsetWidth - dummyScroller.clientWidth;\n doc.removeChild(dummyScroller);\n return scrollbarSize;\n }\n\n function hasScrollbar() {\n return document.documentElement.scrollHeight > window.innerHeight;\n }\n\n function on(options) {\n if (typeof document === 'undefined' || isOn) return;\n var doc = document.documentElement;\n scrollTop = window.pageYOffset;\n if (hasScrollbar()) {\n doc.style.width = 'calc(100% - '+ getScrollbarSize() +'px)';\n } else {\n doc.style.width = '100%';\n }\n doc.style.position = 'fixed';\n doc.style.top = -scrollTop + 'px';\n doc.style.overflow = 'hidden';\n isOn = true;\n }\n\n function off() {\n if (typeof document === 'undefined' || !isOn) return;\n var doc = document.documentElement;\n doc.style.width = '';\n doc.style.position = '';\n doc.style.top = '';\n doc.style.overflow = '';\n window.scroll(0, scrollTop);\n isOn = false;\n }\n\n function toggle() {\n if (isOn) {\n off();\n return;\n }\n on();\n }\n\n var noScroll = {\n on: on,\n off: off,\n toggle: toggle,\n };\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = noScroll;\n } else {\n root.noScroll = noScroll;\n }\n})(this);\n", "var SphericalMercator = (function(){\n\n// Closures including constants and other precalculated values.\nvar cache = {},\n EPSLN = 1.0e-10,\n D2R = Math.PI / 180,\n R2D = 180 / Math.PI,\n // 900913 properties.\n A = 6378137.0,\n MAXEXTENT = 20037508.342789244;\n\nfunction isFloat(n){\n return Number(n) === n && n % 1 !== 0;\n}\n\n// SphericalMercator constructor: precaches calculations\n// for fast tile lookups.\nfunction SphericalMercator(options) {\n options = options || {};\n this.size = options.size || 256;\n this.expansion = (options.antimeridian === true) ? 2 : 1;\n if (!cache[this.size]) {\n var size = this.size;\n var c = cache[this.size] = {};\n c.Bc = [];\n c.Cc = [];\n c.zc = [];\n c.Ac = [];\n for (var d = 0; d < 30; d++) {\n c.Bc.push(size / 360);\n c.Cc.push(size / (2 * Math.PI));\n c.zc.push(size / 2);\n c.Ac.push(size);\n size *= 2;\n }\n }\n this.Bc = cache[this.size].Bc;\n this.Cc = cache[this.size].Cc;\n this.zc = cache[this.size].zc;\n this.Ac = cache[this.size].Ac;\n};\n\n// Convert lon lat to screen pixel value\n//\n// - `ll` {Array} `[lon, lat]` array of geographic coordinates.\n// - `zoom` {Number} zoom level.\nSphericalMercator.prototype.px = function(ll, zoom) {\n if (isFloat(zoom)) {\n var size = this.size * Math.pow(2, zoom);\n var d = size / 2;\n var bc = (size / 360);\n var cc = (size / (2 * Math.PI));\n var ac = size;\n var f = Math.min(Math.max(Math.sin(D2R * ll[1]), -0.9999), 0.9999);\n var x = d + ll[0] * bc;\n var y = d + 0.5 * Math.log((1 + f) / (1 - f)) * -cc;\n (x > ac * this.expansion) && (x = ac * this.expansion);\n (y > ac) && (y = ac);\n //(x < 0) && (x = 0);\n //(y < 0) && (y = 0);\n return [x, y];\n } else {\n var d = this.zc[zoom];\n var f = Math.min(Math.max(Math.sin(D2R * ll[1]), -0.9999), 0.9999);\n var x = Math.round(d + ll[0] * this.Bc[zoom]);\n var y = Math.round(d + 0.5 * Math.log((1 + f) / (1 - f)) * (-this.Cc[zoom]));\n (x > this.Ac[zoom] * this.expansion) && (x = this.Ac[zoom] * this.expansion);\n (y > this.Ac[zoom]) && (y = this.Ac[zoom]);\n //(x < 0) && (x = 0);\n //(y < 0) && (y = 0);\n return [x, y];\n }\n};\n\n// Convert screen pixel value to lon lat\n//\n// - `px` {Array} `[x, y]` array of geographic coordinates.\n// - `zoom` {Number} zoom level.\nSphericalMercator.prototype.ll = function(px, zoom) {\n if (isFloat(zoom)) {\n var size = this.size * Math.pow(2, zoom);\n var bc = (size / 360);\n var cc = (size / (2 * Math.PI));\n var zc = size / 2;\n var g = (px[1] - zc) / -cc;\n var lon = (px[0] - zc) / bc;\n var lat = R2D * (2 * Math.atan(Math.exp(g)) - 0.5 * Math.PI);\n return [lon, lat];\n } else {\n var g = (px[1] - this.zc[zoom]) / (-this.Cc[zoom]);\n var lon = (px[0] - this.zc[zoom]) / this.Bc[zoom];\n var lat = R2D * (2 * Math.atan(Math.exp(g)) - 0.5 * Math.PI);\n return [lon, lat];\n }\n};\n\n// Convert tile xyz value to bbox of the form `[w, s, e, n]`\n//\n// - `x` {Number} x (longitude) number.\n// - `y` {Number} y (latitude) number.\n// - `zoom` {Number} zoom.\n// - `tms_style` {Boolean} whether to compute using tms-style.\n// - `srs` {String} projection for resulting bbox (WGS84|900913).\n// - `return` {Array} bbox array of values in form `[w, s, e, n]`.\nSphericalMercator.prototype.bbox = function(x, y, zoom, tms_style, srs) {\n // Convert xyz into bbox with srs WGS84\n if (tms_style) {\n y = (Math.pow(2, zoom) - 1) - y;\n }\n // Use +y to make sure it's a number to avoid inadvertent concatenation.\n var ll = [x * this.size, (+y + 1) * this.size]; // lower left\n // Use +x to make sure it's a number to avoid inadvertent concatenation.\n var ur = [(+x + 1) * this.size, y * this.size]; // upper right\n var bbox = this.ll(ll, zoom).concat(this.ll(ur, zoom));\n\n // If web mercator requested reproject to 900913.\n if (srs === '900913') {\n return this.convert(bbox, '900913');\n } else {\n return bbox;\n }\n};\n\n// Convert bbox to xyx bounds\n//\n// - `bbox` {Number} bbox in the form `[w, s, e, n]`.\n// - `zoom` {Number} zoom.\n// - `tms_style` {Boolean} whether to compute using tms-style.\n// - `srs` {String} projection of input bbox (WGS84|900913).\n// - `@return` {Object} XYZ bounds containing minX, maxX, minY, maxY properties.\nSphericalMercator.prototype.xyz = function(bbox, zoom, tms_style, srs) {\n // If web mercator provided reproject to WGS84.\n if (srs === '900913') {\n bbox = this.convert(bbox, 'WGS84');\n }\n\n var ll = [bbox[0], bbox[1]]; // lower left\n var ur = [bbox[2], bbox[3]]; // upper right\n var px_ll = this.px(ll, zoom);\n var px_ur = this.px(ur, zoom);\n // Y = 0 for XYZ is the top hence minY uses px_ur[1].\n var x = [ Math.floor(px_ll[0] / this.size), Math.floor((px_ur[0] - 1) / this.size) ];\n var y = [ Math.floor(px_ur[1] / this.size), Math.floor((px_ll[1] - 1) / this.size) ];\n var bounds = {\n minX: Math.min.apply(Math, x) < 0 ? 0 : Math.min.apply(Math, x),\n minY: Math.min.apply(Math, y) < 0 ? 0 : Math.min.apply(Math, y),\n maxX: Math.max.apply(Math, x),\n maxY: Math.max.apply(Math, y)\n };\n if (tms_style) {\n var tms = {\n minY: (Math.pow(2, zoom) - 1) - bounds.maxY,\n maxY: (Math.pow(2, zoom) - 1) - bounds.minY\n };\n bounds.minY = tms.minY;\n bounds.maxY = tms.maxY;\n }\n return bounds;\n};\n\n// Convert projection of given bbox.\n//\n// - `bbox` {Number} bbox in the form `[w, s, e, n]`.\n// - `to` {String} projection of output bbox (WGS84|900913). Input bbox\n// assumed to be the \"other\" projection.\n// - `@return` {Object} bbox with reprojected coordinates.\nSphericalMercator.prototype.convert = function(bbox, to) {\n if (to === '900913') {\n return this.forward(bbox.slice(0, 2)).concat(this.forward(bbox.slice(2,4)));\n } else {\n return this.inverse(bbox.slice(0, 2)).concat(this.inverse(bbox.slice(2,4)));\n }\n};\n\n// Convert lon/lat values to 900913 x/y.\nSphericalMercator.prototype.forward = function(ll) {\n var xy = [\n A * ll[0] * D2R,\n A * Math.log(Math.tan((Math.PI*0.25) + (0.5 * ll[1] * D2R)))\n ];\n // if xy value is beyond maxextent (e.g. poles), return maxextent.\n (xy[0] > MAXEXTENT) && (xy[0] = MAXEXTENT);\n (xy[0] < -MAXEXTENT) && (xy[0] = -MAXEXTENT);\n (xy[1] > MAXEXTENT) && (xy[1] = MAXEXTENT);\n (xy[1] < -MAXEXTENT) && (xy[1] = -MAXEXTENT);\n return xy;\n};\n\n// Convert 900913 x/y values to lon/lat.\nSphericalMercator.prototype.inverse = function(xy) {\n return [\n (xy[0] * R2D / A),\n ((Math.PI*0.5) - 2.0 * Math.atan(Math.exp(-xy[1] / A))) * R2D\n ];\n};\n\nreturn SphericalMercator;\n\n})();\n\nif (typeof module !== 'undefined' && typeof exports !== 'undefined') {\n module.exports = exports = SphericalMercator;\n}\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FormHelper\"] = factory();\n\telse\n\t\troot[\"FormHelper\"] = factory();\n})(self, function() {\nreturn ", "'use strict';\n\nvar AlgoliaSearchHelper = require('./src/algoliasearch.helper');\n\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 * @return {AlgoliaSearchHelper}\n */\nfunction algoliasearchHelper(client, index, opts) {\n return new AlgoliaSearchHelper(client, index, opts);\n}\n\n/**\n * The version currently used\n * @member module:algoliasearchHelper.version\n * @type {number}\n */\nalgoliasearchHelper.version = require('./src/version.js');\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 the results of the search.\n * @member module:algoliasearchHelper.SearchResults\n * @type {SearchResults}\n */\nalgoliasearchHelper.SearchResults = SearchResults;\n\nmodule.exports = algoliasearchHelper;\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\nEventEmitter.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\nvar events = require('events');\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 */\nfunction DerivedHelper(mainHelper, fn) {\n this.main = mainHelper;\n this.fn = fn;\n this.lastResults = null;\n}\n\ninherits(DerivedHelper, events.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\nmodule.exports = DerivedHelper;\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.} SearchParameters.refinementList.RefinementList\n */\n\nvar defaultsPure = require('../functions/defaultsPure');\nvar omit = require('../functions/omit');\nvar objectHasKeys = require('../functions/objectHasKeys');\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(refinementList, attribute, value) {\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(refinementList, attribute, value) {\n if (value === undefined) 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(refinementList, attribute, refinementType) {\n if (attribute === undefined) {\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(memo, key) {\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 memo[key] = facetList;\n\n return memo;\n }, {});\n\n if (hasChanged) return newRefinementList;\n return refinementList;\n }\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}\n */\n isRefined: function isRefined(refinementList, attribute, refinementValue) {\n var containsRefinements = !!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 merge = require('../functions/merge');\nvar defaultsPure = require('../functions/defaultsPure');\nvar intersection = require('../functions/intersection');\nvar find = require('../functions/find');\nvar valToNumber = require('../functions/valToNumber');\nvar omit = require('../functions/omit');\nvar objectHasKeys = require('../functions/objectHasKeys');\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 */\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.>} 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 SearchParameters of the first query in\n * the instant search demo\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 ? SearchParameters._parseNumbers(newParameters) : {};\n\n if (params.userToken !== undefined && !isValidUserToken(params.userToken)) {\n console.warn('[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\\n - Format: [a-zA-Z0-9_-]{1,64}');\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.}\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.}\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.}\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.}\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.}\n */\n this.hierarchicalFacetsRefinements = params.hierarchicalFacetsRefinements || {};\n\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 reparse numbers 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(geoRect) {\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 (currentRefinement.length > 0 && currentRefinement[0].indexOf(facet.rootPath) !== 0) {\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(facet.name, facet.rootPath);\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 (currentState.tagFilters && params.tagRefinements && params.tagRefinements.length > 0) {\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 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 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 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}\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 === 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}\n */\n clearTags: function clearTags() {\n if (this.tagFilters === undefined && this.tagRefinements.length === 0) 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}\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}\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}\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}\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}\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}\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}\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}\n * @example\n * // for price = 50 or 40\n * searchparameter.addNumericRefinement('price', '=', [50, 40]);\n * @example\n * // for size = 38 and 40\n * searchparameter.addNumericRefinement('size', '=', 38);\n * searchparameter.addNumericRefinement('size', '=', 40);\n */\n addNumericRefinement: function(attribute, operator, v) {\n var value = valToNumber(v);\n\n if (this.isNumericRefined(attribute, operator, value)) 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(value);\n } else {\n mod[attribute][operator] = [value];\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}\n */\n removeNumericRefinement: function(attribute, operator, paramValue) {\n if (paramValue !== undefined) {\n if (!this.isNumericRefined(attribute, operator, paramValue)) {\n return this;\n }\n return this.setQueryParameters({\n numericRefinements: this._clearNumericRefinements(function(value, key) {\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(value, key) {\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.} refined values\n */\n getNumericRefinement: function(attribute, operator) {\n return this.numericRefinements[attribute] && this.numericRefinements[attribute][operator];\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.}\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(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({val: value, op: operator}, key, 'numeric');\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 if (hasChanged) return newNumericRefinements;\n return this.numericRefinements;\n }\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}\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}\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}\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: `' + hierarchicalFacet.name + '`');\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}\n */\n addFacetRefinement: function addFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.addRefinement(this.facetsRefinements, facet, value)\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}\n */\n addExcludeRefinement: function addExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.addRefinement(this.facetsExcludes, facet, value)\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}\n */\n addDisjunctiveFacetRefinement: function addDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n if (RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.addRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\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}\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}\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}\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}\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}\n */\n removeFacetRefinement: function removeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.removeRefinement(this.facetsRefinements, facet, value)\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}\n */\n removeExcludeRefinement: function removeExcludeRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.facetsExcludes, facet, value)) return this;\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.removeRefinement(this.facetsExcludes, facet, value)\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}\n */\n removeDisjunctiveFacetRefinement: function removeDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n if (!RefinementList.isRefined(this.disjunctiveFacetsRefinements, facet, value)) return this;\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.removeRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\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}\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}\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}\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('Cannot refine the undeclared facet ' + facet +\n '; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets');\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}\n */\n toggleConjunctiveFacetRefinement: function toggleConjunctiveFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsRefinements: RefinementList.toggleRefinement(this.facetsRefinements, facet, value)\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}\n */\n toggleExcludeFacetRefinement: function toggleExcludeFacetRefinement(facet, value) {\n if (!this.isConjunctiveFacet(facet)) {\n throw new Error(facet + ' is not defined in the facets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n facetsExcludes: RefinementList.toggleRefinement(this.facetsExcludes, facet, value)\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}\n */\n toggleDisjunctiveFacetRefinement: function toggleDisjunctiveFacetRefinement(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the disjunctiveFacets attribute of the helper configuration');\n }\n\n return this.setQueryParameters({\n disjunctiveFacetsRefinements: RefinementList.toggleRefinement(\n this.disjunctiveFacetsRefinements, facet, value)\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}\n */\n toggleHierarchicalFacetRefinement: function toggleHierarchicalFacetRefinement(facet, value) {\n if (!this.isHierarchicalFacet(facet)) {\n throw new Error(\n facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration');\n }\n\n var separator = this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(facet));\n\n var mod = {};\n\n var upOneOrMultipleLevel = 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(value + separator) === 0\n );\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({}, mod, this.hierarchicalFacetsRefinements)\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(facet + ' is not defined in the hierarchicalFacets attribute of the helper configuration.');\n }\n var mod = {};\n mod[facet] = [path];\n return this.setQueryParameters({\n hierarchicalFacetsRefinements: defaultsPure({}, mod, this.hierarchicalFacetsRefinements)\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({}, mod, this.hierarchicalFacetsRefinements)\n });\n },\n /**\n * Switch the tag refinement\n * @method\n * @param {string} tag the tag to remove or add\n * @return {SearchParameters}\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}\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}\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}\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}\n */\n isDisjunctiveFacetRefined: function isDisjunctiveFacetRefined(facet, value) {\n if (!this.isDisjunctiveFacet(facet)) {\n return false;\n }\n return RefinementList.isRefined(this.disjunctiveFacetsRefinements, 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}\n */\n isHierarchicalFacetRefined: function isHierarchicalFacetRefined(facet, value) {\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 !!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}\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[]}\n */\n getRefinedDisjunctiveFacets: function getRefinedDisjunctiveFacets() {\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).filter(function(facet) {\n return self.disjunctiveFacetsRefinements[facet].length > 0;\n })\n .concat(disjunctiveNumericRefinedFacets)\n .concat(this.getRefinedHierarchicalFacets());\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[]}\n */\n getRefinedHierarchicalFacets: function getRefinedHierarchicalFacets() {\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) { return facet.name; }),\n Object.keys(this.hierarchicalFacetsRefinements).filter(function(facet) {\n return self.hierarchicalFacetsRefinements[facet].length > 0;\n })\n );\n },\n /**\n * Returned the list of all disjunctive facets not refined\n * @method\n * @return {string[]}\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 'facets', 'disjunctiveFacets', 'facetsRefinements',\n 'facetsExcludes', 'disjunctiveFacetsRefinements',\n 'numericRefinements', 'tagRefinements', 'hierarchicalFacets', 'hierarchicalFacetsRefinements'\n ],\n getQueryParams: function getQueryParams() {\n var managedParameters = this.managedParameters;\n\n var queryParams = {};\n\n var self = this;\n Object.keys(this).forEach(function(paramName) {\n var paramValue = self[paramName];\n if (managedParameters.indexOf(paramName) === -1 && paramValue !== undefined) {\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 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(\n function(previous, key) {\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\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\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\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\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\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\n * @return {object} a hierarchicalFacet\n */\n getHierarchicalFacetByName: function(hierarchicalFacetName) {\n return find(\n this.hierarchicalFacets,\n function(f) {\n return f.name === hierarchicalFacetName;\n }\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.} 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 = generateTrees;\n\nvar orderBy = require('../functions/orderBy');\nvar find = require('../functions/find');\nvar prepareHierarchicalFacetSortBy = require('../functions/formatSort');\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 = state._getHierarchicalFacetSeparator(\n hierarchicalFacet\n );\n var hierarchicalRootPath = state._getHierarchicalRootPath(\n hierarchicalFacet\n );\n var hierarchicalShowParentLevel = state._getHierarchicalShowParentLevel(\n hierarchicalFacet\n );\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 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ères'],\n // level1: ['beers > IPA', 'bières > Belges']\n // }\n // }\n //\n // If parent refinement is `beers`, then we do not want to have `bières > 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 currentRefinement,\n hierarchicalFacetResult.exhaustive\n );\n }),\n sortBy[0],\n sortBy[1]\n );\n }\n\n return hierarchicalTree;\n };\n}\n\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 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 merge = require('../functions/merge');\nvar defaultsPure = require('../functions/defaultsPure');\nvar orderBy = require('../functions/orderBy');\nvar compact = require('../functions/compact');\nvar find = require('../functions/find');\nvar findIndex = require('../functions/findIndex');\nvar formatSort = require('../functions/formatSort');\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 * @param {string[]} attributes\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\n * @param {string} hierarchicalAttributeName\n */\nfunction findMatchingHierarchicalFacetFromAttributeName(\n hierarchicalFacets,\n hierarchicalAttributeName\n) {\n return find(hierarchicalFacets, function facetKeyMatchesAttribute(\n hierarchicalFacet\n ) {\n var facetNames = hierarchicalFacet.attributes || [];\n return facetNames.indexOf(hierarchicalAttributeName) > -1;\n });\n}\n\n/*eslint-disable */\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.} results the results from algolia client\n * @example SearchResults of the first query in\n * the instant search demo\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…d=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™\": 202,\n \"Insignia™\": 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 **/\n/*eslint-enable */\nfunction SearchResults(state, results) {\n var mainSubResponse = results[0];\n\n this._rawResults = results;\n\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 /**\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 * @member {number}\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(function initFutureTree() {\n return [];\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(self.disjunctiveFacets[position], mainSubResponse.facets_stats, facetKey);\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(self.facets[position], mainSubResponse.facets_stats, facetKey);\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(self.hierarchicalFacets[position], function(f) {\n return f.attribute === dfacet;\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 = 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(self.disjunctiveFacets[position], result.facets_stats, dfacet);\n\n if (state.disjunctiveFacetsRefinements[dfacet]) {\n state.disjunctiveFacetsRefinements[dfacet].forEach(function(refinementValue) {\n // add the disjunctive refinements if it is no more retrieved\n if (!self.disjunctiveFacets[position].data[refinementValue] &&\n state.disjunctiveFacetsRefinements[dfacet].indexOf(refinementValue) > -1) {\n self.disjunctiveFacets[position].data[refinementValue] = 0;\n }\n });\n }\n }\n });\n nextDisjunctiveResult++;\n });\n\n // if we have some root 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 (currentRefinement.length === 0 || currentRefinement[0].split(separator).length < 2) {\n return;\n }\n\n var result = results[nextDisjunctiveResult];\n var facets = result && result.facets\n ? 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(self.hierarchicalFacets[position], function(f) {\n return f.attribute === dfacet;\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 var defaultData = {};\n\n if (currentRefinement.length > 0) {\n var root = currentRefinement[0].split(separator)[0];\n defaultData[root] = 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 // 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: mainSubResponse.facets[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(generateHierarchicalTree(state));\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 find(this.facets, predicate) ||\n find(this.disjunctiveFacets, predicate) ||\n find(this.hierarchicalFacets, predicate);\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 return {\n name: name,\n count: facet.data[name],\n isRefined: results._state.isFacetRefined(attribute, name),\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 return {\n name: name,\n count: disjunctiveFacet.data[name],\n isRefined: results._state.isDisjunctiveFacetRefined(attribute, name)\n };\n });\n } else if (results._state.isHierarchicalFacet(attribute)) {\n return find(results.hierarchicalFacets, predicate);\n }\n}\n\n/**\n * Sort nodes of a hierarchical facet results\n * @private\n * @param {HierarchicalFacet} node node to upon which we want to apply the sort\n */\nfunction recSort(sortFn, node) {\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);\n });\n var sortedChildren = sortFn(children);\n var newNode = merge({}, node, {data: sortedChildren});\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 * 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 {Array. | 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, {sortBy: SearchResults.DEFAULT_SORT});\n\n if (Array.isArray(options.sortBy)) {\n var order = formatSort(options.sortBy, SearchResults.DEFAULT_SORT);\n if (Array.isArray(facetValues)) {\n return orderBy(facetValues, order[0], order[1]);\n }\n // If facetValues is not an array, it's an object thus a hierarchical facet object\n return recSort(function(hierarchicalFacetValues) {\n return orderBy(hierarchicalFacetValues, order[0], order[1]);\n }, facetValues);\n } else if (typeof options.sortBy === 'function') {\n if (Array.isArray(facetValues)) {\n return facetValues.sort(options.sortBy);\n }\n // If facetValues is not an array, it's an object thus a hierarchical facet object\n return recSort(function(data) {\n return vanillaSortFn(options.sortBy, data);\n }, facetValues);\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\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\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.} all the refinements\n */\nSearchResults.prototype.getRefinements = function() {\n var state = this._state;\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(getRefinement(state, 'facet', attributeName, name, results.facets));\n });\n });\n\n Object.keys(state.facetsExcludes).forEach(function(attributeName) {\n state.facetsExcludes[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'exclude', attributeName, name, results.facets));\n });\n });\n\n Object.keys(state.disjunctiveFacetsRefinements).forEach(function(attributeName) {\n state.disjunctiveFacetsRefinements[attributeName].forEach(function(name) {\n res.push(getRefinement(state, 'disjunctive', attributeName, name, results.disjunctiveFacets));\n });\n });\n\n Object.keys(state.hierarchicalFacetsRefinements).forEach(function(attributeName) {\n state.hierarchicalFacetsRefinements[attributeName].forEach(function(name) {\n res.push(getHierarchicalRefinement(state, attributeName, name, results.hierarchicalFacets));\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 {*} state\n * @param {*} type\n * @param {string} attributeName\n * @param {*} name\n * @param {Facet[]} resultsFacets\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 {*} state\n * @param {string} attributeName\n * @param {*} name\n * @param {Facet[]} resultsFacets\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 && 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", "'use strict';\n\nvar SearchParameters = require('./SearchParameters');\nvar SearchResults = require('./SearchResults');\nvar DerivedHelper = require('./DerivedHelper');\nvar requestBuilder = require('./requestBuilder');\n\nvar events = require('events');\nvar inherits = require('./functions/inherits');\nvar objectHasKeys = require('./functions/objectHasKeys');\n\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 */\nfunction AlgoliaSearchHelper(client, index, options) {\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.lastResults = null;\n this._queryId = 0;\n this._lastQueryIdReceived = -1;\n this.derivedHelpers = [];\n this._currentNbQueries = 0;\n}\n\ninherits(AlgoliaSearchHelper, events.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}\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 * 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} [callback] 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 ? this.state : this.state.setQueryParameters(options);\n var queries = requestBuilder._getQueries(tempState.index, tempState);\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(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 }, function(e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\n });\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.} the results of the search\n */\nAlgoliaSearchHelper.prototype.searchForFacetValues = function(facet, query, maxFacetHits, userState) {\n var clientHasSFFV = typeof this.client.searchForFacetValues === 'function';\n if (\n !clientHasSFFV &&\n typeof this.client.initIndex !== '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 var state = this.state.setQueryParameters(userState || {});\n var isDisjunctive = state.isDisjunctiveFacet(facet);\n var algoliaQuery = requestBuilder.getSearchForFacetQuery(facet, query, maxFacetHits, state);\n\n this._currentNbQueries++;\n var self = this;\n\n this.emit('searchForFacetValues', {\n state: state,\n facet: facet,\n query: query\n });\n\n var searchForFacetValuesPromise = clientHasSFFV\n ? this.client.searchForFacetValues([{indexName: state.index, params: algoliaQuery}])\n : this.client.initIndex(state.index).searchForFacetValues(algoliaQuery);\n\n return searchForFacetValuesPromise.then(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.isRefined = isDisjunctive\n ? state.isDisjunctiveFacetRefined(facet, f.value)\n : state.isFacetRefined(facet, f.value);\n });\n\n return content;\n }, function(e) {\n self._currentNbQueries--;\n if (self._currentNbQueries === 0) self.emit('searchQueueEmpty');\n throw e;\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}\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}\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}\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}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addDisjunctiveFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().addDisjunctiveFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\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}\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(facet, value) {\n this._change({\n state: this.state.resetPage().addHierarchicalFacetRefinement(facet, value),\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}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.addNumericRefinement = function(attribute, operator, value) {\n this._change({\n state: this.state.resetPage().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}\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/**\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/**\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}\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/**\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}\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 * 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}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeNumericRefinement = function(attribute, operator, value) {\n this._change({\n state: this.state.resetPage().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}\n * @fires change\n * @chainable\n */\nAlgoliaSearchHelper.prototype.removeDisjunctiveFacetRefinement = function(facet, value) {\n this._change({\n state: this.state.resetPage().removeDisjunctiveFacetRefinement(facet, value),\n isPageReset: true\n });\n\n return this;\n};\n\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}\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(facet) {\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}\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/**\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}\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/**\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}\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 * 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}\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/**\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}\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}\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/**\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}\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}\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}\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 */\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}\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}\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}\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}\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}\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}\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 = 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/**\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}\n */\nAlgoliaSearchHelper.prototype.hasTag = function(tag) {\n return this.state.isTagRefined(tag);\n};\n\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/**\n * Get the name of the currently used index.\n * @return {string}\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.} 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 disjRefinements = this.state.getDisjunctiveRefinements(facetName);\n\n disjRefinements.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.} refined values\n */\nAlgoliaSearchHelper.prototype.getNumericRefinement = function(attribute, operator) {\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.} the path as an array of string\n */\nAlgoliaSearchHelper.prototype.getHierarchicalFacetBreadcrumb = function(facetName) {\n return this.state.getHierarchicalFacetBreadcrumb(facetName);\n};\n\n// /////////// PRIVATE\n\n/**\n * Perform the underlying queries\n * @private\n * @return {undefined}\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 = requestBuilder._getQueries(derivedState.index, derivedState);\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 var queryId = this._queryId++;\n\n this._currentNbQueries++;\n\n try {\n this.client.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\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}>}\n * state state used for 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(states, queryId, content) {\n // FIXME 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 var formattedResponse = helper.lastResults = new SearchResults(state, specificResults);\n\n helper.emit('result', {\n results: formattedResponse,\n state: state\n });\n });\n};\n\nAlgoliaSearchHelper.prototype._dispatchAlgoliaError = function(queryId, error) {\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.containsRefinement = function(query, facetFilters, numericFilters, tagFilters) {\n return query ||\n facetFilters.length !== 0 ||\n numericFilters.length !== 0 ||\n tagFilters.length !== 0;\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}\n */\nAlgoliaSearchHelper.prototype._hasDisjunctiveRefinements = function(facet) {\n return this.state.disjunctiveRefinements[facet] &&\n this.state.disjunctiveRefinements[facet].length > 0;\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\n/**\n * Clears the cache of the underlying Algolia client.\n * @return {AlgoliaSearchHelper}\n */\nAlgoliaSearchHelper.prototype.clearCache = function() {\n 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}\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}\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 * @return {DerivedHelper}\n */\nAlgoliaSearchHelper.prototype.derive = function(fn) {\n var derivedHelper = new DerivedHelper(this, fn);\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 * @return {undefined}\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\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// 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", "'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.} 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(defaultInstructions, function(\n defaultInstruction\n ) {\n return defaultInstruction[0] === sortInstruction[0];\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 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\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 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 for (var key in source) {\n if (!Object.prototype.hasOwnProperty.call(source, key)) {\n continue;\n }\n\n var sourceVal = source[key];\n var targetVal = target[key];\n\n if (typeof targetVal !== 'undefined' && typeof sourceVal === 'undefined') {\n continue;\n }\n\n if (isObjectOrArrayOrFunction(targetVal) && isObjectOrArrayOrFunction(sourceVal)) {\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} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n */\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 if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose;\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} collection object with keys in attributes\n * @param {Array} iteratees attributes\n * @param {Array} orders asc | desc\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\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('The value should be a number, a parsable string or an array of those.');\n}\n\nmodule.exports = valToNumber;\n", "'use strict';\n\nvar merge = require('./functions/merge');\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 * @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(state, refinedFacet)\n });\n });\n\n // maybe more to get the root level of hierarchical facets when activated\n state.getRefinedHierarchicalFacets().forEach(function(refinedFacet) {\n var hierarchicalFacet = state.getHierarchicalFacetByName(refinedFacet);\n\n var currentRefinement = state.getHierarchicalRefinement(refinedFacet);\n // if we are deeper than level 0 (starting from `beer > IPA`)\n // we want to get the root values\n var separator = state._getHierarchicalFacetSeparator(hierarchicalFacet);\n if (currentRefinement.length > 0 && currentRefinement[0].split(separator).length > 1) {\n queries.push({\n indexName: index,\n params: requestBuilder._getDisjunctiveFacetSearchParams(state, refinedFacet, true)\n });\n }\n });\n\n return queries;\n },\n\n /**\n * Build search parameters used to fetch hits\n * @private\n * @return {object.}\n */\n _getHitsSearchParams: function(state) {\n var facets = state.facets\n .concat(state.disjunctiveFacets)\n .concat(requestBuilder._getHitsHierarchicalFacetsAttributes(state));\n\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,\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 merge({}, state.getQueryParams(), additionalParams);\n },\n\n /**\n * Build search parameters used to fetch a disjunctive facet\n * @private\n * @param {string} facet the associated facet name\n * @param {boolean} hierarchicalRootLevel ?? FIXME\n * @return {object}\n */\n _getDisjunctiveFacetSearchParams: function(state, facet, hierarchicalRootLevel) {\n var facetFilters = requestBuilder._getFacetFilters(state, facet, hierarchicalRootLevel);\n var numericFilters = requestBuilder._getNumericFilters(state, facet);\n var tagFilters = requestBuilder._getTagFilters(state);\n var additionalParams = {\n hitsPerPage: 1,\n page: 0,\n attributesToRetrieve: [],\n attributesToHighlight: [],\n attributesToSnippet: [],\n tagFilters: tagFilters,\n analytics: false,\n clickAnalytics: false\n };\n\n var hierarchicalFacet = state.getHierarchicalFacetByName(facet);\n\n if (hierarchicalFacet) {\n additionalParams.facets = 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 merge({}, state.getQueryParams(), additionalParams);\n },\n\n /**\n * Return the numeric filters in an algolia request fashion\n * @private\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\n * @private\n * @return {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 /**\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 {string} [facet] if set, the current disjunctive facet\n * @return {array.}\n */\n _getFacetFilters: function(state, facet, hierarchicalRootLevel) {\n var facetFilters = [];\n\n var facetsRefinements = state.facetsRefinements || {};\n Object.keys(facetsRefinements).forEach(function(facetName) {\n var facetValues = facetsRefinements[facetName] || [];\n facetValues.forEach(function(facetValue) {\n facetFilters.push(facetName + ':' + facetValue);\n });\n });\n\n var facetsExcludes = state.facetsExcludes || {};\n Object.keys(facetsExcludes).forEach(function(facetName) {\n var facetValues = facetsExcludes[facetName] || [];\n facetValues.forEach(function(facetValue) {\n facetFilters.push(facetName + ':-' + facetValue);\n });\n });\n\n var disjunctiveFacetsRefinements = state.disjunctiveFacetsRefinements || {};\n Object.keys(disjunctiveFacetsRefinements).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.forEach(function(facetValue) {\n orFilters.push(facetName + ':' + facetValue);\n });\n\n facetFilters.push(orFilters);\n });\n\n var hierarchicalFacetsRefinements = state.hierarchicalFacetsRefinements || {};\n Object.keys(hierarchicalFacetsRefinements).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 (facetValue.indexOf(separator) === -1 || (!rootPath && hierarchicalRootLevel === true) ||\n (rootPath && rootPath.split(separator).length === facetValue.split(separator).length)) {\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(allAttributes, hierarchicalFacet) {\n var hierarchicalRefinement = state.getHierarchicalRefinement(hierarchicalFacet.name)[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 }, out);\n },\n\n _getDisjunctiveHierarchicalFacetAttribute: function(state, hierarchicalFacet, rootLevel) {\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 = 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 merge(\n {},\n requestBuilder._getHitsSearchParams(stateForSearchForFacetValues),\n searchForFacetSearchParameters\n );\n }\n};\n\nmodule.exports = requestBuilder;\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\nmodule.exports = '3.3.4';\n", "/*! algoliasearch.umd.js | 4.8.3 | © 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=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function a(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,a=!1,o=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){a=!0,o=e}finally{try{n||null==i.return||i.return()}finally{if(a)throw o}}return r}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}()}function o(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){var r=JSON.stringify(e),n=o()[r];return Promise.all([n||t(),void 0!==n])})).then((function(e){var t=a(e,2),n=t[0],o=t[1];return Promise.all([n,o||r.miss(n)])})).then((function(e){return a(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var a=o();return a[JSON.stringify(e)]=t,n().setItem(r,JSON.stringify(a)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=o();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=o(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 a(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 a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,a).catch((function(){return i({caches:t}).get(e,n,a)}))},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 a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},o=JSON.stringify(r);if(o in t)return Promise.resolve(e.serializable?JSON.parse(t[o]):t[o]);var u=n(),i=a&&a.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,t,r){var n={\"x-algolia-api-key\":r,\"x-algolia-application-id\":t};return{headers:function(){return e===m.WithinHeaders?n:{}},queryParameters:function(){return e===m.WithinQueryParameters?n:{}}}}function f(e){var t=0;return e((function r(){return t++,new Promise((function(n){setTimeout((function(){n(e(r))}),Math.min(100*t,1e3))}))}))}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e,t){return Promise.resolve()};return Object.assign(e,{wait:function(r){return d(e.then((function(e){return Promise.all([t(e,r),e])})).then((function(e){return e[1]})))}})}function l(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 p(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function h(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var g={Read:1,Write:2,Any:3},v=1,b=2,P=3;function O(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:v;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function w(e){return\"string\"==typeof e?{protocol:\"https\",url:e,accept:g.Any}:{protocol:e.protocol||\"https\",url:e.url,accept:e.accept||g.Any}}var j=\"DELETE\",I=\"GET\",x=\"POST\",q=\"PUT\";function D(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(O(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===v||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===P&&Date.now()-e.lastUpdate<=12e4}(e)})),a=[].concat(o(r),o(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:a.length>0?a.map((function(e){return w(e)})):t}}))}function S(e,t,n,a){var u=[],i=function(e,t){if(e.method===I||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,a),s=function(e,t){var n=r(r({},e.headers),t.headers),a={};return Object.keys(n).forEach((function(e){var t=n[e];a[e.toLowerCase()]=t})),a}(e,a),c=n.method,f=n.method!==I?{}:r(r({},n.data),a.data),d=r(r(r({\"x-algolia-agent\":e.userAgent.value},e.queryParameters),f),a.queryParameters),l=0,p=function t(r,o){var f=r.pop();if(void 0===f)throw{name:\"RetryError\",message:\"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.\",transporterStackTrace:A(u)};var p={data:i,headers:s,method:c,url:N(f,n.path,d),connectTimeout:o(l,e.timeouts.connect),responseTimeout:o(l,a.timeout)},h=function(e){var t={request:p,response:e,host:f,triesLeft:r.length};return u.push(t),t},m={onSucess: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 a=h(n);return n.isTimedOut&&l++,Promise.all([e.logger.info(\"Retryable failure\",E(a)),e.hostsCache.set(f,O(f,n.isTimedOut?P:b))]).then((function(){return t(r,o)}))},onFail:function(e){throw h(e),function(e,t){var r=e.content,n=e.status,a=r;try{a=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:\"ApiError\",message:e,status:t,transporterStackTrace:r}}(a,n,t)}(e,A(u))}};return e.requester.send(p).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.onSucess(e):t.onFail(e)}(e,m)}))};return D(e.hostsCache,t).then((function(e){return p(o(e.statelessHosts).reverse(),e.getTimeout)}))}function k(e){var t=e.hostsCache,r=e.logger,n=e.requester,o=e.requestsCache,u=e.responsesCache,i=e.timeouts,s=e.userAgent,c=e.hosts,f=e.queryParameters,d={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:u,timeouts:i,userAgent:s,headers:e.headers,queryParameters:f,hosts:c.map((function(e){return w(e)})),read:function(e,t){var r=y(t,d.timeouts.read),n=function(){return S(d,d.hosts.filter((function(e){return 0!=(e.accept&g.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var o={request:e,mappedRequestOptions:r,transporter:{queryParameters:d.queryParameters,headers:d.headers}};return d.responsesCache.get(o,(function(){return d.requestsCache.get(o,(function(){return d.requestsCache.set(o,n()).then((function(e){return Promise.all([d.requestsCache.delete(o),e])}),(function(e){return Promise.all([d.requestsCache.delete(o),Promise.reject(e)])})).then((function(e){var t=a(e,2);t[0];return t[1]}))}))}),{miss:function(e){return d.responsesCache.set(o,e)}})},write:function(e,t){return S(d,d.hosts.filter((function(e){return 0!=(e.accept&g.Write)})),e,y(t,d.timeouts.write))}};return d}function T(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 N(e,t,r){var n=R(r),a=\"\".concat(e.protocol,\"://\").concat(e.url,\"/\").concat(\"/\"===t.charAt(0)?t.substr(1):t);return n.length&&(a+=\"?\".concat(n)),a}function R(e){return Object.keys(e).map((function(t){return h(\"%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 E(e)}))}function E(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 C=function(e){return function(t,r){return e.transporter.write({method:x,path:\"2/abtests\",data:t},r)}},U=function(e){return function(t,r){return e.transporter.write({method:j,path:h(\"2/abtests/%s\",t)},r)}},J=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"2/abtests/%s\",t)},r)}},z=function(e){return function(t){return e.transporter.read({method:I,path:\"2/abtests\"},t)}},F=function(e){return function(t,r){return e.transporter.write({method:x,path:h(\"2/abtests/%s/stop\",t)},r)}},H=function(e){return function(t){return e.transporter.read({method:I,path:\"1/strategies/personalization\"},t)}},M=function(e){return function(t,r){return e.transporter.write({method:x,path:\"1/strategies/personalization\",data:t},r)}};function K(e){return function t(r){return e.request(r).then((function(n){if(void 0!==e.batch&&e.batch(n.hits),!e.shouldStop(n))return n.cursor?t({cursor:n.cursor}):t({page:(r.page||0)+1})}))}({})}var W=function(e){return function(t,a){var o=a||{},u=o.queryParameters,i=n(o,[\"queryParameters\"]),s=r({acl:t},void 0!==u?{queryParameters:u}:{});return d(e.transporter.write({method:x,path:\"1/keys\",data:s},i),(function(t,r){return f((function(n){return Y(e)(t.key,r).catch((function(e){if(404!==e.status)throw e;return n()}))}))}))}},B=function(e){return function(t,r,n){var a=y(n);return a.queryParameters[\"X-Algolia-User-ID\"]=t,e.transporter.write({method:x,path:\"1/clusters/mapping\",data:{cluster:r}},a)}},Q=function(e){return function(t,r,n){return e.transporter.write({method:x,path:\"1/clusters/mapping/batch\",data:{users:t,cluster:r}},n)}},G=function(e){return function(t,r,n){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/operation\",t),data:{operation:\"copy\",destination:r}},n),(function(r,n){return re(e)(t,{methods:{waitTask:tt}}).waitTask(r.taskID,n)}))}},L=function(e){return function(t,n,a){return G(e)(t,n,r(r({},a),{},{scope:[nt.Rules]}))}},V=function(e){return function(t,n,a){return G(e)(t,n,r(r({},a),{},{scope:[nt.Settings]}))}},_=function(e){return function(t,n,a){return G(e)(t,n,r(r({},a),{},{scope:[nt.Synonyms]}))}},X=function(e){return function(t,r){return d(e.transporter.write({method:j,path:h(\"1/keys/%s\",t)},r),(function(r,n){return f((function(r){return Y(e)(t,n).then(r).catch((function(e){if(404!==e.status)throw e}))}))}))}},Y=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/keys/%s\",t)},r)}},Z=function(e){return function(t){return e.transporter.read({method:I,path:\"1/logs\"},t)}},$=function(e){return function(t){return e.transporter.read({method:I,path:\"1/clusters/mapping/top\"},t)}},ee=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/clusters/mapping/%s\",t)},r)}},te=function(e){return function(t){var r=t||{},a=r.retrieveMappings,o=n(r,[\"retrieveMappings\"]);return!0===a&&(o.getClusters=!0),e.transporter.read({method:I,path:\"1/clusters/mapping/pending\"},o)}},re=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 p(n,r.methods)}},ne=function(e){return function(t){return e.transporter.read({method:I,path:\"1/keys\"},t)}},ae=function(e){return function(t){return e.transporter.read({method:I,path:\"1/clusters\"},t)}},oe=function(e){return function(t){return e.transporter.read({method:I,path:\"1/indexes\"},t)}},ue=function(e){return function(t){return e.transporter.read({method:I,path:\"1/clusters/mapping\"},t)}},ie=function(e){return function(t,r,n){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/operation\",t),data:{operation:\"move\",destination:r}},n),(function(r,n){return re(e)(t,{methods:{waitTask:tt}}).waitTask(r.taskID,n)}))}},se=function(e){return function(t,r){return d(e.transporter.write({method:x,path:\"1/indexes/*/batch\",data:{requests:t}},r),(function(t,r){return Promise.all(Object.keys(t.taskID).map((function(n){return re(e)(n,{methods:{waitTask:tt}}).waitTask(t.taskID[n],r)})))}))}},ce=function(e){return function(t,r){return e.transporter.read({method:x,path:\"1/indexes/*/objects\",data:{requests:t}},r)}},fe=function(e){return function(t,n){var a=t.map((function(e){return r(r({},e),{},{params:R(e.params||{})})}));return e.transporter.read({method:x,path:\"1/indexes/*/queries\",data:{requests:a},cacheable:!0},n)}},de=function(e){return function(t,a){return Promise.all(t.map((function(t){var o=t.params,u=o.facetName,i=o.facetQuery,s=n(o,[\"facetName\",\"facetQuery\"]);return re(e)(t.indexName,{methods:{searchForFacetValues:Ye}}).searchForFacetValues(u,i,r(r({},a),s))})))}},le=function(e){return function(t,r){var n=y(r);return n.queryParameters[\"X-Algolia-User-ID\"]=t,e.transporter.write({method:j,path:\"1/clusters/mapping\"},n)}},pe=function(e){return function(t,r){return d(e.transporter.write({method:x,path:h(\"1/keys/%s/restore\",t)},r),(function(r,n){return f((function(r){return Y(e)(t,n).catch((function(e){if(404!==e.status)throw e;return r()}))}))}))}},he=function(e){return function(t,r){return e.transporter.read({method:x,path:\"1/clusters/mapping/search\",data:{query:t}},r)}},me=function(e){return function(t,r){var a=Object.assign({},r),o=r||{},u=o.queryParameters,i=n(o,[\"queryParameters\"]),s=u?{queryParameters:u}:{},c=[\"acl\",\"indexes\",\"referers\",\"restrictSources\",\"queryParameters\",\"description\",\"maxQueriesPerIPPerHour\",\"maxHitsPerQuery\"];return d(e.transporter.write({method:q,path:h(\"1/keys/%s\",t),data:s},i),(function(r,n){return f((function(r){return Y(e)(t,n).then((function(e){return function(e){return Object.keys(a).filter((function(e){return-1!==c.indexOf(e)})).every((function(t){return e[t]===a[t]}))}(e)?Promise.resolve():r()}))}))}))}},ye=function(e){return function(t,r){return d(e.transporter.write({method:x,path:h(\"1/indexes/%s/batch\",e.indexName),data:{requests:t}},r),(function(t,r){return tt(e)(t.taskID,r)}))}},ge=function(e){return function(t){return K(r(r({shouldStop:function(e){return void 0===e.cursor}},t),{},{request:function(r){return e.transporter.read({method:x,path:h(\"1/indexes/%s/browse\",e.indexName),data:r},t)}}))}},ve=function(e){return function(t){var n=r({hitsPerPage:1e3},t);return K(r(r({shouldStop:function(e){return e.hits.length0&&void 0!==arguments[0]?arguments[0]:0,c=[];for(a=o;a=e.nbPages)throw{name:\"ObjectNotFoundError\",message:\"Object not found.\"};return n()}))}()}},Ae=function(e){return function(t,r){return e.transporter.read({method:I,path:h(\"1/indexes/%s/%s\",e.indexName,t)},r)}},Ee=function(){return function(e,t){for(var r=0,n=Object.entries(e.hits);rr.OPENED&&void 0===n&&(clearTimeout(o),n=a(e.responseTimeout,\"Socket timeout\"))},r.onerror=function(){0===r.status&&(clearTimeout(o),clearTimeout(n),t({content:r.responseText||\"Network request failed\",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(o),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(a=ut,{debug:function(e,t){return at>=a&&console.debug(e,t),Promise.resolve()},info:function(e,t){return ot>=a&&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.8.3\",\"-\").concat(e)}),s()]}),userAgent:T(\"4.8.3\").add({segment:\"Browser\"})};return function(e){var t=e.appId,n=c(void 0!==e.authMode?e.authMode:m.WithinHeaders,t,e.apiKey),a=k(r(r({hosts:[{url:\"\".concat(t,\"-dsn.algolia.net\"),accept:g.Read},{url:\"\".concat(t,\".algolia.net\"),accept:g.Write}].concat(l([{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 p({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)}(r(r(r({},o),n),{},{methods:{search:fe,searchForFacetValues:de,multipleBatch:se,multipleGetObjects:ce,multipleQueries:fe,copyIndex:G,copySettings:V,copySynonyms:_,copyRules:L,moveIndex:ie,listIndices:oe,getLogs:Z,listClusters:ae,multipleSearchForFacetValues:de,getApiKey:Y,addApiKey:W,listApiKeys:ne,updateApiKey:me,deleteApiKey:X,restoreApiKey:pe,assignUserID:B,assignUserIDs:Q,getUserID:ee,searchUserIDs:he,listUserIDs:ue,getTopUserIDs:$,removeUserID:le,hasPendingMappings:te,initIndex:function(e){return function(t){return re(e)(t,{methods:{batch:ye,delete:xe,findAnswers:Ne,getObject:Ae,getObjects:Ce,saveObject:Be,saveObjects:Qe,search:Xe,searchForFacetValues:Ye,waitTask:tt,setSettings:et,getSettings:Je,partialUpdateObject:Fe,partialUpdateObjects:He,deleteObject:qe,deleteObjects:De,deleteBy:Ie,clearObjects:Oe,browseObjects:ge,getObjectPosition:Ee,findObject:Re,exists:Te,saveSynonym:Ve,saveSynonyms:_e,getSynonym:ze,searchSynonyms:$e,browseSynonyms:be,deleteSynonym:ke,clearSynonyms:je,replaceAllObjects:Me,replaceAllSynonyms:We,searchRules:Ze,getRule:Ue,deleteRule:Se,saveRule:Ge,saveRules:Le,replaceAllRules:Ke,browseRules:ve,clearRules:we}})}},initAnalytics:function(){return function(e){return function(e){var t=e.region||\"us\",n=c(m.WithinHeaders,e.appId,e.apiKey),a=k(r(r({hosts:[{url:\"analytics.\".concat(t,\".algolia.com\")}]},e),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return p({appId:e.appId,transporter:a},e.methods)}(r(r(r({},o),e),{},{methods:{addABTest:C,getABTest:J,getABTests:z,stopABTest:F,deleteABTest:U}}))}},initRecommendation:function(){return function(e){return function(e){var t=e.region||\"us\",n=c(m.WithinHeaders,e.appId,e.apiKey),a=k(r(r({hosts:[{url:\"recommendation.\".concat(t,\".algolia.com\")}]},e),{},{headers:r(r(r({},n.headers()),{\"content-type\":\"application/json\"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return p({appId:e.appId,transporter:a},e.methods)}(r(r(r({},o),e),{},{methods:{getPersonalizationStrategy:H,setPersonalizationStrategy:M}}))}}}}))}return it.version=\"4.8.3\",it}));\n", "import api from \"!../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../css-loader/dist/cjs.js!./base.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};", "import api from \"!../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../css-loader/dist/cjs.js!./theme.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};", "import api from \"!../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../css-loader/dist/cjs.js!./intlTelInput.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};", "import api from \"!../../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../css-loader/dist/cjs.js!./selectize.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};", "export var createDocumentationLink = 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 var createDocumentationMessageGenerator = function createDocumentationMessageGenerator() {\n for (var _len = arguments.length, widgets = new Array(_len), _key = 0; _key < _len; _key++) {\n widgets[_key] = arguments[_key];\n }\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};", "// 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\nfunction findIndex(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\n return -1;\n}\n\nexport default findIndex;", "function uniq(array) {\n return array.filter(function (value, index, self) {\n return self.indexOf(value) === index;\n });\n}\n\nexport default uniq;", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\nimport findIndex from './findIndex';\nimport uniq from './uniq';\n\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, [\"facets\", \"disjunctiveFacets\", \"facetsRefinements\", \"facetsExcludes\", \"disjunctiveFacetsRefinements\", \"numericRefinements\", \"tagRefinements\", \"hierarchicalFacets\", \"hierarchicalFacetsRefinements\", \"ruleContexts\"]);\n\n return left.setQueryParameters(rest);\n}; // Merge facets\n\n\nvar mergeFacets = function mergeFacets(left, right) {\n return right.facets.reduce(function (_, name) {\n return _.addFacet(name);\n }, left);\n};\n\nvar mergeDisjunctiveFacets = function mergeDisjunctiveFacets(left, right) {\n return right.disjunctiveFacets.reduce(function (_, name) {\n return _.addDisjunctiveFacet(name);\n }, left);\n};\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\n if (index === -1) {\n return facets.concat(facet);\n }\n\n var nextFacets = facets.slice();\n nextFacets.splice(index, 1, facet);\n return nextFacets;\n }, left.hierarchicalFacets)\n });\n}; // Merge facet refinements\n\n\nvar mergeTagRefinements = function mergeTagRefinements(left, right) {\n return right.tagRefinements.reduce(function (_, value) {\n return _.addTagRefinement(value);\n }, left);\n};\n\nvar mergeFacetRefinements = function mergeFacetRefinements(left, right) {\n return left.setQueryParameters({\n facetsRefinements: _objectSpread({}, left.facetsRefinements, {}, right.facetsRefinements)\n });\n};\n\nvar mergeFacetsExcludes = function mergeFacetsExcludes(left, right) {\n return left.setQueryParameters({\n facetsExcludes: _objectSpread({}, left.facetsExcludes, {}, right.facetsExcludes)\n });\n};\n\nvar mergeDisjunctiveFacetsRefinements = function mergeDisjunctiveFacetsRefinements(left, right) {\n return left.setQueryParameters({\n disjunctiveFacetsRefinements: _objectSpread({}, left.disjunctiveFacetsRefinements, {}, right.disjunctiveFacetsRefinements)\n });\n};\n\nvar mergeNumericRefinements = function mergeNumericRefinements(left, right) {\n return left.setQueryParameters({\n numericRefinements: _objectSpread({}, left.numericRefinements, {}, right.numericRefinements)\n });\n};\n\nvar mergeHierarchicalFacetsRefinements = function mergeHierarchicalFacetsRefinements(left, right) {\n return left.setQueryParameters({\n hierarchicalFacetsRefinements: _objectSpread({}, left.hierarchicalFacetsRefinements, {}, right.hierarchicalFacetsRefinements)\n });\n};\n\nvar mergeRuleContexts = function mergeRuleContexts(left, right) {\n var ruleContexts = uniq([].concat(left.ruleContexts).concat(right.ruleContexts).filter(Boolean));\n\n if (ruleContexts.length > 0) {\n return left.setQueryParameters({\n ruleContexts: ruleContexts\n });\n }\n\n return left;\n};\n\nvar merge = function merge() {\n for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {\n parameters[_key] = arguments[_key];\n }\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\nexport default merge;", "var resolveSearchParameters = function resolveSearchParameters(current) {\n var parent = current.getParent();\n var states = [current.getHelper().state];\n\n while (parent !== null) {\n states = [parent.getHelper().state].concat(states);\n parent = parent.getParent();\n }\n\n return states;\n};\n\nexport default resolveSearchParameters;", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\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; }\n\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; }\n\nimport algoliasearchHelper from 'algoliasearch-helper';\nimport { checkIndexUiState, createDocumentationMessageGenerator, resolveSearchParameters, mergeSearchParameters, warning } from '../../lib/utils';\nvar withUsage = createDocumentationMessageGenerator({\n name: 'index-widget'\n});\nexport function isIndexWidget(widget) {\n return widget.$$type === 'ais.index';\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 */\n\nfunction privateHelperSetState(helper, _ref) {\n var state = _ref.state,\n isPageReset = _ref.isPageReset,\n _uiState = _ref._uiState;\n\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}\n\nfunction getLocalWidgetsUiState(widgets, widgetStateOptions) {\n var initialUiState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return widgets.filter(function (widget) {\n return !isIndexWidget(widget);\n }).reduce(function (uiState, widget) {\n if (!widget.getWidgetUiState && !widget.getWidgetState) {\n return uiState;\n }\n\n if (widget.getWidgetUiState) {\n return widget.getWidgetUiState(uiState, widgetStateOptions);\n }\n\n return widget.getWidgetState(uiState, widgetStateOptions);\n }, initialUiState);\n}\n\nfunction getLocalWidgetsSearchParameters(widgets, widgetSearchParametersOptions) {\n var initialSearchParameters = widgetSearchParametersOptions.initialSearchParameters,\n rest = _objectWithoutProperties(widgetSearchParametersOptions, [\"initialSearchParameters\"]);\n\n return widgets.filter(function (widget) {\n return !isIndexWidget(widget);\n }).reduce(function (state, widget) {\n if (!widget.getWidgetSearchParameters) {\n return state;\n }\n\n return widget.getWidgetSearchParameters(state, rest);\n }, initialSearchParameters);\n}\n\nfunction resetPageFromWidgets(widgets) {\n var indexWidgets = widgets.filter(isIndexWidget);\n\n if (indexWidgets.length === 0) {\n return;\n }\n\n indexWidgets.forEach(function (widget) {\n var widgetHelper = widget.getHelper();\n privateHelperSetState(widgetHelper, {\n state: widgetHelper.state.resetPage(),\n isPageReset: true\n });\n resetPageFromWidgets(widget.getWidgets());\n });\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}\n\nvar index = function index(props) {\n if (props === undefined || props.indexName === undefined) {\n throw new Error(withUsage('The `indexName` option is required.'));\n }\n\n var indexName = props.indexName,\n _props$indexId = props.indexId,\n indexId = _props$indexId === void 0 ? indexName : _props$indexId;\n var localWidgets = [];\n var localUiState = {};\n var localInstantSearchInstance = null;\n var localParent = null;\n var helper = null;\n var derivedHelper = null;\n return {\n $$type: '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 return derivedHelper && derivedHelper.lastResults;\n },\n getScopedResults: function getScopedResults() {\n var widgetParent = this.getParent(); // If the widget is the root, we consider itself as the only sibling.\n\n var widgetSiblings = widgetParent ? widgetParent.getWidgets() : [this];\n return resolveScopedResultsFromWidgets(widgetSiblings);\n },\n getParent: function getParent() {\n return localParent;\n },\n createURL: function createURL(nextState) {\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\n if (!Array.isArray(widgets)) {\n throw new Error(withUsage('The `addWidgets` method expects an array of widgets.'));\n }\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\n localWidgets = localWidgets.concat(widgets);\n\n if (localInstantSearchInstance && Boolean(widgets.length)) {\n privateHelperSetState(helper, {\n state: getLocalWidgetsSearchParameters(localWidgets, {\n uiState: localUiState,\n initialSearchParameters: helper.state\n }),\n _uiState: localUiState\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\n widgets.forEach(function (widget) {\n if (widget.getRenderState) {\n var renderState = widget.getRenderState(localInstantSearchInstance.renderState[_this.getIndexId()] || {}, {\n uiState: localInstantSearchInstance._initialUiState,\n helper: _this.getHelper(),\n parent: _this,\n instantSearchInstance: localInstantSearchInstance,\n state: helper.state,\n renderState: localInstantSearchInstance.renderState,\n templatesConfig: localInstantSearchInstance.templatesConfig,\n createURL: _this.createURL,\n scopedResults: [],\n searchMetadata: {\n isSearchStalled: localInstantSearchInstance._isSearchStalled\n }\n });\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({\n helper: helper,\n parent: _this,\n uiState: localInstantSearchInstance._initialUiState,\n instantSearchInstance: localInstantSearchInstance,\n state: helper.state,\n renderState: localInstantSearchInstance.renderState,\n templatesConfig: localInstantSearchInstance.templatesConfig,\n createURL: _this.createURL,\n scopedResults: [],\n searchMetadata: {\n isSearchStalled: localInstantSearchInstance._isSearchStalled\n }\n });\n }\n });\n localInstantSearchInstance.scheduleSearch();\n }\n\n return this;\n },\n removeWidgets: function removeWidgets(widgets) {\n if (!Array.isArray(widgets)) {\n throw new Error(withUsage('The `removeWidgets` method expects an array of widgets.'));\n }\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\n localWidgets = localWidgets.filter(function (widget) {\n return widgets.indexOf(widget) === -1;\n });\n\n if (localInstantSearchInstance && Boolean(widgets.length)) {\n var nextState = widgets.reduce(function (state, widget) {\n // the `dispose` method exists at this point we already assert it\n var next = widget.dispose({\n helper: helper,\n state: state\n });\n return next || state;\n }, helper.state);\n localUiState = getLocalWidgetsUiState(localWidgets, {\n searchParameters: nextState,\n helper: helper\n });\n helper.setState(getLocalWidgetsSearchParameters(localWidgets, {\n uiState: localUiState,\n initialSearchParameters: nextState\n }));\n\n if (localWidgets.length) {\n localInstantSearchInstance.scheduleSearch();\n }\n }\n\n return this;\n },\n init: function init(_ref2) {\n var _this2 = this;\n\n var instantSearchInstance = _ref2.instantSearchInstance,\n parent = _ref2.parent,\n uiState = _ref2.uiState;\n localInstantSearchInstance = instantSearchInstance;\n localParent = parent;\n localUiState = uiState[indexId] || {}; // 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\n var mainHelper = instantSearchInstance.mainHelper;\n var parameters = getLocalWidgetsSearchParameters(localWidgets, {\n uiState: localUiState,\n initialSearchParameters: new algoliasearchHelper.SearchParameters({\n index: indexName\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\n helper = algoliasearchHelper({}, parameters.index, parameters); // 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\n helper.search = function () {\n if (instantSearchInstance.onStateChange) {\n instantSearchInstance.onStateChange({\n uiState: instantSearchInstance.mainIndex.getWidgetUiState({}),\n setUiState: instantSearchInstance.setUiState.bind(instantSearchInstance)\n }); // We don't trigger a search when controlled because it becomes the\n // responsibility of `setUiState`.\n\n return mainHelper;\n }\n\n return mainHelper.search();\n };\n\n helper.searchWithoutTriggeringOnStateChange = function () {\n return mainHelper.search();\n }; // We use the same pattern for the `searchForFacetValues`.\n\n\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\n derivedHelper = mainHelper.derive(function () {\n return mergeSearchParameters.apply(void 0, _toConsumableArray(resolveSearchParameters(_this2)));\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\n helper.on('change', function (_ref3) {\n var isPageReset = _ref3.isPageReset;\n\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\n if (process.env.NODE_ENV === 'development') {\n checkIndexUiState({\n index: _this2,\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(); // 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\n helper.lastResults = results;\n }); // We compute the render state before calling `render` in a separate loop\n // to construct the whole render state object that is then passed to\n // `render`.\n\n localWidgets.forEach(function (widget) {\n if (widget.getRenderState) {\n var renderState = widget.getRenderState(instantSearchInstance.renderState[_this2.getIndexId()] || {}, {\n uiState: uiState,\n helper: helper,\n parent: _this2,\n instantSearchInstance: instantSearchInstance,\n state: helper.state,\n renderState: instantSearchInstance.renderState,\n templatesConfig: instantSearchInstance.templatesConfig,\n createURL: _this2.createURL,\n scopedResults: [],\n searchMetadata: {\n isSearchStalled: instantSearchInstance._isSearchStalled\n }\n });\n storeRenderState({\n renderState: renderState,\n instantSearchInstance: instantSearchInstance,\n parent: _this2\n });\n }\n });\n localWidgets.forEach(function (widget) {\n process.env.NODE_ENV === 'development' ? warning(!widget.getWidgetState, '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\n if (widget.init) {\n widget.init({\n uiState: uiState,\n helper: helper,\n parent: _this2,\n instantSearchInstance: instantSearchInstance,\n state: helper.state,\n renderState: instantSearchInstance.renderState,\n templatesConfig: instantSearchInstance.templatesConfig,\n createURL: _this2.createURL,\n scopedResults: [],\n searchMetadata: {\n isSearchStalled: instantSearchInstance._isSearchStalled\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.js/pull/994/commits/4a672ae3fd78809e213de0368549ef12e9dc9454\n\n helper.on('change', function (event) {\n var state = event.state; // @ts-ignore _uiState comes from privateHelperSetState and thus isn't typed on the helper event\n\n var _uiState = event._uiState;\n localUiState = getLocalWidgetsUiState(localWidgets, {\n searchParameters: state,\n helper: helper\n }, _uiState || {}); // We don't trigger an internal change when controlled because it\n // becomes the responsibility of `setUiState`.\n\n if (!instantSearchInstance.onStateChange) {\n instantSearchInstance.onInternalStateChange();\n }\n });\n },\n render: function render(_ref5) {\n var _this3 = this;\n\n var instantSearchInstance = _ref5.instantSearchInstance;\n\n if (!this.getResults()) {\n return;\n }\n\n localWidgets.forEach(function (widget) {\n if (widget.getRenderState) {\n var renderState = widget.getRenderState(instantSearchInstance.renderState[_this3.getIndexId()] || {}, {\n helper: _this3.getHelper(),\n parent: _this3,\n instantSearchInstance: instantSearchInstance,\n results: _this3.getResults(),\n scopedResults: _this3.getScopedResults(),\n state: _this3.getResults()._state,\n renderState: instantSearchInstance.renderState,\n templatesConfig: instantSearchInstance.templatesConfig,\n createURL: _this3.createURL,\n searchMetadata: {\n isSearchStalled: instantSearchInstance._isSearchStalled\n }\n });\n storeRenderState({\n renderState: renderState,\n instantSearchInstance: instantSearchInstance,\n parent: _this3\n });\n }\n });\n localWidgets.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 if (widget.render) {\n widget.render({\n helper: helper,\n parent: _this3,\n instantSearchInstance: instantSearchInstance,\n results: _this3.getResults(),\n scopedResults: _this3.getScopedResults(),\n state: _this3.getResults()._state,\n renderState: instantSearchInstance.renderState,\n templatesConfig: instantSearchInstance.templatesConfig,\n createURL: _this3.createURL,\n searchMetadata: {\n isSearchStalled: instantSearchInstance._isSearchStalled\n }\n });\n }\n });\n },\n dispose: function dispose() {\n localWidgets.forEach(function (widget) {\n if (widget.dispose) {\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 });\n }\n });\n localInstantSearchInstance = null;\n localParent = null;\n helper.removeAllListeners();\n helper = null;\n derivedHelper.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({}, uiState, _defineProperty({}, this.getIndexId(), 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, _ref6) {\n var uiState = _ref6.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 });\n }\n };\n};\n\nexport default index;\n\nfunction storeRenderState(_ref7) {\n var renderState = _ref7.renderState,\n instantSearchInstance = _ref7.instantSearchInstance,\n parent = _ref7.parent;\n var parentIndexName = parent ? parent.getIndexId() : instantSearchInstance.mainIndex.getIndexId();\n instantSearchInstance.renderState = _objectSpread({}, instantSearchInstance.renderState, _defineProperty({}, parentIndexName, _objectSpread({}, instantSearchInstance.renderState[parentIndexName], {}, renderState)));\n}", "export default '4.10.0';", "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}\n\nexport default getPropertyByPath;", "/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/escape.js\n */\n// Used to map characters to HTML entities.\nvar htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n}; // Used to match HTML entities and HTML characters.\n\nvar regexUnescapedHtml = /[&<>\"']/g;\nvar regexHasUnescapedHtml = RegExp(regexUnescapedHtml.source);\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n */\n\nfunction escape(value) {\n return value && regexHasUnescapedHtml.test(value) ? value.replace(regexUnescapedHtml, function (character) {\n return htmlEscapes[character];\n }) : value;\n}\n\nexport default escape;", "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/master/isPlainObject.js\n */\nfunction getTag(value) {\n if (value === null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n\n return Object.prototype.toString.call(value);\n}\n\nfunction isObjectLike(value) {\n return _typeof(value) === 'object' && value !== null;\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 */\n\n\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || getTag(value) !== '[object Object]') {\n return false;\n }\n\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n\n var proto = value;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(value) === proto;\n}\n\nexport default isPlainObject;", "function _extends() { _extends = Object.assign || 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); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { isPlainObject, escape } from '../lib/utils';\nexport var TAG_PLACEHOLDER = {\n highlightPreTag: '__ais-highlight__',\n highlightPostTag: '__/ais-highlight__'\n};\nexport var TAG_REPLACEMENT = {\n highlightPreTag: '',\n highlightPostTag: ''\n};\n\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}\n\nfunction recursiveEscape(input) {\n if (isPlainObject(input) && typeof input.value !== 'string') {\n return Object.keys(input).reduce(function (acc, key) {\n return _objectSpread({}, acc, _defineProperty({}, key, recursiveEscape(input[key])));\n }, {});\n }\n\n if (Array.isArray(input)) {\n return input.map(recursiveEscape);\n }\n\n return _objectSpread({}, input, {\n value: replaceTagsAndEscape(input.value)\n });\n}\n\nexport default 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({}, _ref);\n\n if (hit._highlightResult) {\n hit._highlightResult = recursiveEscape(hit._highlightResult);\n }\n\n if (hit._snippetResult) {\n hit._snippetResult = recursiveEscape(hit._snippetResult);\n }\n\n return hit;\n });\n hits.__escaped = true;\n }\n\n return hits;\n}\nexport function escapeFacets(facetHits) {\n return facetHits.map(function (h) {\n return _objectSpread({}, h, {\n highlighted: replaceTagsAndEscape(h.highlighted)\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\n var descendent = descendantName ? \"-\".concat(descendantName) : '';\n var modifier = modifierName ? \"--\".concat(modifierName) : '';\n return \"\".concat(NAMESPACE, \"-\").concat(componentName).concat(descendent).concat(modifier);\n };\n};", "import { getPropertyByPath } from '../lib/utils';\nimport { TAG_REPLACEMENT } from '../lib/escape-highlight';\nimport { component } from '../lib/suit';\nvar suit = component('Highlight');\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\n var _ref2 = getPropertyByPath(hit._highlightResult, attribute) || {},\n _ref2$value = _ref2.value,\n attributeValue = _ref2$value === void 0 ? '' : _ref2$value; // cx is not used, since it would be bundled as a dependency for Vue & Angular\n\n\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'), \"\"));\n}", "import { TAG_REPLACEMENT } from '../escape-highlight';\nexport default 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}", "/**\n * This implementation is taken from Lodash implementation.\n * See: https://github.com/lodash/lodash/blob/4.17.11-npm/unescape.js\n */\n// Used to map HTML entities to characters.\nvar htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n}; // Used to match HTML entities and HTML characters.\n\nvar regexEscapedHtml = /&(amp|quot|lt|gt|#39);/g;\nvar regexHasEscapedHtml = RegExp(regexEscapedHtml.source);\n/**\n * Converts the HTML entities \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * characters.\n */\n\nexport default function unescape(value) {\n return value && regexHasEscapedHtml.test(value) ? value.replace(regexEscapedHtml, function (character) {\n return htmlEscapes[character];\n }) : value;\n}", "import unescape from './unescape';\nvar hasAlphanumeric = new RegExp(/\\w/i);\nexport default function getHighlightFromSiblings(parts, i) {\n var _parts, _parts2;\n\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\n if (!hasAlphanumeric.test(unescape(current.value)) && isPreviousHighlighted === isNextHighlighted) {\n return isPreviousHighlighted;\n }\n\n return current.isHighlighted;\n}", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport getHighlightFromSiblings from './getHighlightFromSiblings';\nexport default function reverseHighlightedParts(parts) {\n if (!parts.some(function (part) {\n return part.isHighlighted;\n })) {\n return parts.map(function (part) {\n return _objectSpread({}, part, {\n isHighlighted: false\n });\n });\n }\n\n return parts.map(function (part, i) {\n return _objectSpread({}, part, {\n isHighlighted: !getHighlightFromSiblings(parts, i)\n });\n });\n}", "import { TAG_REPLACEMENT } from '../../lib/escape-highlight';\nexport default function getHighlightedParts(highlightedValue) {\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\n if (splitByPostTag[1] !== '') {\n elements.push({\n value: splitByPostTag[1],\n isHighlighted: false\n });\n }\n });\n return elements;\n}", "import { getPropertyByPath, getHighlightedParts, reverseHighlightedParts, concatHighlightedParts } from '../lib/utils';\nimport { TAG_REPLACEMENT } from '../lib/escape-highlight';\nimport { component } from '../lib/suit';\nvar suit = component('ReverseHighlight');\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\n var _ref2 = getPropertyByPath(hit._highlightResult, attribute) || {},\n _ref2$value = _ref2.value,\n attributeValue = _ref2$value === void 0 ? '' : _ref2$value; // cx is not used, since it would be bundled as a dependency for Vue & Angular\n\n\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'), \"\"));\n}", "import { getPropertyByPath } from '../lib/utils';\nimport { TAG_REPLACEMENT } from '../lib/escape-highlight';\nimport { component } from '../lib/suit';\nvar suit = component('Snippet');\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\n var _ref2 = getPropertyByPath(hit._snippetResult, attribute) || {},\n _ref2$value = _ref2.value,\n attributeValue = _ref2$value === void 0 ? '' : _ref2$value; // cx is not used, since it would be bundled as a dependency for Vue & Angular\n\n\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'), \"\"));\n}", "import { getPropertyByPath, getHighlightedParts, reverseHighlightedParts, concatHighlightedParts } from '../lib/utils';\nimport { TAG_REPLACEMENT } from '../lib/escape-highlight';\nimport { component } from '../lib/suit';\nvar suit = component('ReverseSnippet');\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\n var _ref2 = getPropertyByPath(hit._snippetResult, attribute) || {},\n _ref2$value = _ref2.value,\n attributeValue = _ref2$value === void 0 ? '' : _ref2$value; // cx is not used, since it would be bundled as a dependency for Vue & Angular\n\n\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'), \"\"));\n}", "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport { warning } from '../lib/utils';\nexport function readDataAttributes(domElement) {\n var method = domElement.getAttribute('data-insights-method');\n var serializedPayload = domElement.getAttribute('data-insights-payload');\n\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\n try {\n var payload = JSON.parse(atob(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}\nexport function hasDataAttributes(domElement) {\n return domElement.hasAttribute('data-insights-method');\n}\nexport function writeDataAttributes(_ref) {\n var method = _ref.method,\n payload = _ref.payload;\n\n if (_typeof(payload) !== 'object') {\n throw new Error(\"The insights helper expects the payload to be an object.\");\n }\n\n var serializedPayload;\n\n try {\n serializedPayload = btoa(JSON.stringify(payload));\n } catch (error) {\n throw new Error(\"Could not JSON serialize the payload object.\");\n }\n\n return \"data-insights-method=\\\"\".concat(method, \"\\\" data-insights-payload=\\\"\").concat(serializedPayload, \"\\\"\");\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 */\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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport { highlight as _highlight, reverseHighlight as _reverseHighlight, snippet as _snippet, reverseSnippet as _reverseSnippet, insights as _insights } from '../helpers';\nexport default function hoganHelpers(_ref) {\n var numberLocale = _ref.numberLocale;\n return {\n formatNumber: function formatNumber(value, render) {\n return Number(render(value)).toLocaleString(numberLocale);\n },\n highlight: function highlight(options, render) {\n try {\n var highlightOptions = JSON.parse(options);\n return render(_highlight(_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({}, 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({}, 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({}, 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\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}", "var nextMicroTask = Promise.resolve();\n\nvar defer = function defer(callback) {\n var progress = null;\n var cancelled = false;\n\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\n if (progress !== null) {\n return;\n }\n\n progress = nextMicroTask.then(function () {\n progress = null;\n\n if (cancelled) {\n cancelled = false;\n return;\n }\n\n callback.apply(void 0, args);\n });\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\n return progress;\n };\n\n fn.cancel = function () {\n if (progress === null) {\n return;\n }\n\n cancelled = true;\n };\n\n return fn;\n};\n\nexport default defer;", "function noop() {}\n\nexport default noop;", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\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; }\n\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; }\n\nfunction getIndexStateWithoutConfigure(uiState) {\n var configure = uiState.configure,\n trackedUiState = _objectWithoutProperties(uiState, [\"configure\"]);\n\n return trackedUiState;\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.\n\n\nexport default function simpleStateMapping() {\n return {\n stateToRoute: function stateToRoute(uiState) {\n return Object.keys(uiState).reduce(function (state, indexId) {\n return _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({}, state, _defineProperty({}, indexId, getIndexStateWithoutConfigure(routeState[indexId])));\n }, {});\n }\n };\n}", "function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport qs from 'qs';\n\nvar defaultCreateURL = function defaultCreateURL(_ref) {\n var qsModule = _ref.qsModule,\n routeState = _ref.routeState,\n location = _ref.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); // IE <= 11 has no proper `location.origin` so we cannot rely on it.\n\n if (!queryString) {\n return \"\".concat(protocol, \"//\").concat(hostname).concat(portWithPrefix).concat(pathname).concat(hash);\n }\n\n return \"\".concat(protocol, \"//\").concat(hostname).concat(portWithPrefix).concat(pathname, \"?\").concat(queryString).concat(hash);\n};\n\nvar defaultParseURL = function defaultParseURL(_ref2) {\n var qsModule = _ref2.qsModule,\n location = _ref2.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};\n\nvar setWindowTitle = function setWindowTitle(title) {\n if (title) {\n window.document.title = title;\n }\n};\n\nvar BrowserHistory =\n/*#__PURE__*/\nfunction () {\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() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n windowTitle = _ref3.windowTitle,\n _ref3$writeDelay = _ref3.writeDelay,\n writeDelay = _ref3$writeDelay === void 0 ? 400 : _ref3$writeDelay,\n _ref3$createURL = _ref3.createURL,\n createURL = _ref3$createURL === void 0 ? defaultCreateURL : _ref3$createURL,\n _ref3$parseURL = _ref3.parseURL,\n parseURL = _ref3$parseURL === void 0 ? defaultParseURL : _ref3$parseURL;\n\n _classCallCheck(this, BrowserHistory);\n\n _defineProperty(this, \"windowTitle\", void 0);\n\n _defineProperty(this, \"writeDelay\", void 0);\n\n _defineProperty(this, \"_createURL\", void 0);\n\n _defineProperty(this, \"parseURL\", void 0);\n\n _defineProperty(this, \"writeTimer\", void 0);\n\n this.windowTitle = windowTitle;\n this.writeTimer = undefined;\n this.writeDelay = writeDelay;\n this._createURL = createURL;\n this.parseURL = parseURL;\n var title = this.windowTitle && this.windowTitle(this.read());\n setWindowTitle(title);\n }\n /**\n * Reads the URL and returns a syncable UI search state.\n */\n\n\n _createClass(BrowserHistory, [{\n key: \"read\",\n value: function read() {\n return this.parseURL({\n qsModule: qs,\n location: window.location\n });\n }\n /**\n * Pushes a search state into the URL.\n */\n\n }, {\n key: \"write\",\n value: function write(routeState) {\n var _this = this;\n\n var url = this.createURL(routeState);\n var title = this.windowTitle && this.windowTitle(routeState);\n\n if (this.writeTimer) {\n window.clearTimeout(this.writeTimer);\n }\n\n this.writeTimer = window.setTimeout(function () {\n setWindowTitle(title);\n window.history.pushState(routeState, title || '', url);\n _this.writeTimer = undefined;\n }, this.writeDelay);\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 }, {\n key: \"onUpdate\",\n value: function onUpdate(callback) {\n var _this2 = this;\n\n this._onPopState = function (event) {\n if (_this2.writeTimer) {\n window.clearTimeout(_this2.writeTimer);\n _this2.writeTimer = undefined;\n }\n\n var routeState = event.state; // At initial load, the state is read from the URL without update.\n // Therefore the state object is not available.\n // In this case, we fallback and read the URL.\n\n if (!routeState) {\n callback(_this2.read());\n } else {\n callback(routeState);\n }\n };\n\n window.addEventListener('popstate', this._onPopState);\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 .\n * See: https://github.com/algolia/instantsearch.js/issues/790\n */\n\n }, {\n key: \"createURL\",\n value: function createURL(routeState) {\n return this._createURL({\n qsModule: qs,\n routeState: routeState,\n location: window.location\n });\n }\n /**\n * Removes the event listener and cleans up the URL.\n */\n\n }, {\n key: \"dispose\",\n value: function dispose() {\n if (this._onPopState) {\n window.removeEventListener('popstate', this._onPopState);\n }\n\n if (this.writeTimer) {\n window.clearTimeout(this.writeTimer);\n }\n\n this.write({});\n }\n }]);\n\n return BrowserHistory;\n}();\n\nexport default function (props) {\n return new BrowserHistory(props);\n}", "function isPrimitive(obj) {\n return obj !== Object(obj);\n}\n\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n\n if (isPrimitive(first) || isPrimitive(second) || typeof first === 'function' || typeof second === 'function') {\n return first === second;\n }\n\n if (Object.keys(first).length !== Object.keys(second).length) {\n return false;\n }\n\n for (var _i = 0, _Object$keys = Object.keys(first); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n\n if (!(key in second)) {\n return false;\n }\n\n if (!isEqual(first[key], second[key])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport default isEqual;", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport simpleStateMapping from '../lib/stateMappings/simple';\nimport historyRouter from '../lib/routers/history';\nimport { isEqual } from '../lib/utils';\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 return function (_ref) {\n var instantSearchInstance = _ref.instantSearchInstance;\n\n function topLevelCreateURL(nextState) {\n var uiState = Object.keys(nextState).reduce(function (acc, indexId) {\n return _objectSpread({}, acc, _defineProperty({}, indexId, nextState[indexId]));\n }, instantSearchInstance.mainIndex.getWidgetUiState({}));\n var route = stateMapping.stateToRoute(uiState);\n return router.createURL(route);\n }\n\n instantSearchInstance._createURL = topLevelCreateURL;\n instantSearchInstance._initialUiState = _objectSpread({}, instantSearchInstance._initialUiState, {}, stateMapping.routeToState(router.read()));\n var lastRouteState = undefined;\n return {\n onStateChange: function onStateChange(_ref2) {\n var uiState = _ref2.uiState;\n var routeState = stateMapping.stateToRoute(uiState);\n\n if (lastRouteState === undefined || !isEqual(lastRouteState, routeState)) {\n router.write(routeState);\n lastRouteState = routeState;\n }\n },\n subscribe: function subscribe() {\n router.onUpdate(function (route) {\n instantSearchInstance.setUiState(stateMapping.routeToState(route));\n });\n },\n unsubscribe: function unsubscribe() {\n router.dispose();\n }\n };\n };\n};", "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport algoliasearchHelper from 'algoliasearch-helper';\nimport EventEmitter from 'events';\nimport index, { isIndexWidget } from '../widgets/index/index';\nimport version from './version';\nimport createHelpers from './createHelpers';\nimport { createDocumentationMessageGenerator, createDocumentationLink, defer, noop, warning, checkIndexUiState } from './utils';\nimport { createRouterMiddleware } from '../middlewares/createRouterMiddleware';\nvar withUsage = createDocumentationMessageGenerator({\n name: 'instantsearch'\n});\n\nfunction defaultCreateURL() {\n return '#';\n}\n/**\n * Global options for an InstantSearch instance.\n */\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 =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inherits(InstantSearch, _EventEmitter);\n\n function InstantSearch(options) {\n var _this;\n\n _classCallCheck(this, InstantSearch);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(InstantSearch).call(this));\n\n _defineProperty(_assertThisInitialized(_this), \"client\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"indexName\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"insightsClient\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"onStateChange\", null);\n\n _defineProperty(_assertThisInitialized(_this), \"helper\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"mainHelper\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"mainIndex\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"started\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"templatesConfig\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"renderState\", {});\n\n _defineProperty(_assertThisInitialized(_this), \"_stalledSearchDelay\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_searchStalledTimer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_isSearchStalled\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_initialUiState\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_createURL\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_searchFunction\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"_mainHelperSearch\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"middleware\", []);\n\n _defineProperty(_assertThisInitialized(_this), \"sendEventToInsights\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"scheduleSearch\", defer(function () {\n if (_this.started) {\n _this.mainHelper.search();\n }\n }));\n\n _defineProperty(_assertThisInitialized(_this), \"scheduleRender\", defer(function () {\n if (!_this.mainHelper.hasPendingRequests()) {\n clearTimeout(_this._searchStalledTimer);\n _this._searchStalledTimer = null;\n _this._isSearchStalled = false;\n }\n\n _this.mainIndex.render({\n instantSearchInstance: _assertThisInitialized(_this)\n });\n\n _this.emit('render');\n }));\n\n _defineProperty(_assertThisInitialized(_this), \"onInternalStateChange\", function () {\n var nextUiState = _this.mainIndex.getWidgetUiState({});\n\n _this.middleware.forEach(function (m) {\n m.onStateChange({\n uiState: nextUiState\n });\n });\n });\n\n var _options$indexName = options.indexName,\n indexName = _options$indexName === void 0 ? null : _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 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\n if (indexName === null) {\n throw new Error(withUsage('The `indexName` option is required.'));\n }\n\n if (searchClient === null) {\n throw new Error(withUsage('The `searchClient` option is required.'));\n }\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\n if (typeof searchClient.addAlgoliaAgent === 'function') {\n searchClient.addAlgoliaAgent(\"instantsearch.js (\".concat(version, \")\"));\n }\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\n if (insightsClient && typeof insightsClient !== 'function') {\n throw new Error(withUsage('The `insightsClient` option should be a function.'));\n }\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 _this.client = searchClient;\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._isSearchStalled = false;\n _this._createURL = defaultCreateURL;\n _this._initialUiState = initialUiState;\n\n if (searchFunction) {\n _this._searchFunction = searchFunction;\n }\n\n _this.sendEventToInsights = noop;\n\n if (routing) {\n var routerOptions = typeof routing === 'boolean' ? undefined : routing;\n\n _this.use(createRouterMiddleware(routerOptions));\n }\n\n return _this;\n }\n /**\n * Hooks a middleware into the InstantSearch lifecycle.\n *\n * This method is considered as experimental and is subject to change in\n * minor versions.\n */\n\n\n _createClass(InstantSearch, [{\n key: \"use\",\n value: function use() {\n var _this2 = this;\n\n for (var _len = arguments.length, middleware = new Array(_len), _key = 0; _key < _len; _key++) {\n middleware[_key] = arguments[_key];\n }\n\n var newMiddlewareList = middleware.map(function (fn) {\n var newMiddleware = fn({\n instantSearchInstance: _this2\n });\n\n _this2.middleware.push(newMiddleware);\n\n return newMiddleware;\n }); // If the instance has already started, we directly subscribe the\n // middleware so they're notified of changes.\n\n if (this.started) {\n newMiddlewareList.forEach(function (m) {\n m.subscribe();\n });\n }\n\n return this;\n } // @major we shipped with EXPERIMENTAL_use, but have changed that to just `use` now\n\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 * 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 }, {\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 * 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 }, {\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\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\n this.mainIndex.addWidgets(widgets);\n return this;\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 }, {\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 * 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 }, {\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\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\n this.mainIndex.removeWidgets(widgets);\n return this;\n }\n /**\n * Ends the initialization of InstantSearch.js and triggers the\n * first search. This method should be called after all widgets have been added\n * to the instance of InstantSearch.js. InstantSearch.js also supports adding and removing\n * widgets after the start as an **EXPERIMENTAL** feature.\n */\n\n }, {\n key: \"start\",\n value: function start() {\n var _this3 = this;\n\n if (this.started) {\n throw new Error(withUsage('The `start` method has already been called once.'));\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\n\n var mainHelper = algoliasearchHelper(this.client, this.indexName);\n\n mainHelper.search = function () {\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 return mainHelper.searchOnlyWithDerivedHelpers();\n };\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\n mainHelper.search = function () {\n var mainIndexHelper = _this3.mainIndex.getHelper();\n\n var searchFunctionHelper = algoliasearchHelper(fakeClient, mainIndexHelper.state.index, mainIndexHelper.state);\n searchFunctionHelper.once('search', function (_ref) {\n var state = _ref.state;\n mainIndexHelper.overrideStateWithoutTriggeringChangeEvent(state);\n\n _this3._mainHelperSearch();\n }); // Forward state changes from `searchFunctionHelper` to `mainIndexHelper`\n\n searchFunctionHelper.on('change', function (_ref2) {\n var state = _ref2.state;\n mainIndexHelper.setState(state);\n });\n\n _this3._searchFunction(searchFunctionHelper);\n\n return mainHelper;\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\n\n mainHelper.on('error', function (_ref3) {\n var error = _ref3.error;\n\n _this3.emit('error', {\n error: error\n });\n });\n this.mainHelper = mainHelper;\n this.mainIndex.init({\n instantSearchInstance: this,\n parent: null,\n uiState: this._initialUiState\n });\n this.middleware.forEach(function (m) {\n m.subscribe();\n });\n mainHelper.search(); // Keep the previous reference for legacy purpose, some pattern use\n // the direct Helper access `search.helper` (e.g multi-index).\n\n this.helper = this.mainIndex.getHelper(); // track we started the search if we add more widgets,\n // to init them directly after add\n\n this.started = true;\n }\n /**\n * Removes all widgets without triggering a search afterwards. This is an **EXPERIMENTAL** feature,\n * if you find an issue with it, please\n * [open an issue](https://github.com/algolia/instantsearch.js/issues/new?title=Problem%20with%20dispose).\n * @return {undefined} This method does not return anything\n */\n\n }, {\n key: \"dispose\",\n value: function dispose() {\n this.scheduleSearch.cancel();\n this.scheduleRender.cancel();\n clearTimeout(this._searchStalledTimer);\n this.removeWidgets(this.mainIndex.getWidgets());\n this.mainIndex.dispose(); // 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\n this.started = false; // 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\n this.removeAllListeners();\n this.mainHelper.removeAllListeners();\n this.mainHelper = null;\n this.helper = null;\n this.middleware.forEach(function (m) {\n m.unsubscribe();\n });\n }\n }, {\n key: \"scheduleStalledRender\",\n value: function scheduleStalledRender() {\n var _this4 = this;\n\n if (!this._searchStalledTimer) {\n this._searchStalledTimer = setTimeout(function () {\n _this4._isSearchStalled = true;\n\n _this4.scheduleRender();\n }, this._stalledSearchDelay);\n }\n }\n }, {\n key: \"setUiState\",\n value: function setUiState(uiState) {\n if (!this.mainHelper) {\n throw new Error(withUsage('The `start` method needs to be called before `setUiState`.'));\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\n\n this.mainIndex.refreshUiState();\n var nextUiState = typeof uiState === 'function' ? uiState(this.mainIndex.getWidgetUiState({})) : uiState;\n\n var setIndexHelperState = function setIndexHelperState(indexWidget) {\n if (process.env.NODE_ENV === 'development') {\n checkIndexUiState({\n index: indexWidget,\n indexUiState: nextUiState[indexWidget.getIndexId()]\n });\n }\n\n indexWidget.getHelper().overrideStateWithoutTriggeringChangeEvent(indexWidget.getWidgetSearchParameters(indexWidget.getHelper().state, {\n uiState: nextUiState[indexWidget.getIndexId()]\n }));\n indexWidget.getWidgets().filter(isIndexWidget).forEach(setIndexHelperState);\n };\n\n setIndexHelperState(this.mainIndex);\n this.scheduleSearch();\n this.onInternalStateChange();\n }\n }, {\n key: \"createURL\",\n value: function createURL() {\n var nextState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (!this.started) {\n throw new Error(withUsage('The `start` method needs to be called before `createURL`.'));\n }\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\n this.mainHelper.clearCache().search();\n }\n }]);\n\n return InstantSearch;\n}(EventEmitter);\n\nexport default InstantSearch;", "import { warning } from '../lib/utils';\nexport var ANONYMOUS_TOKEN_COOKIE_KEY = '_ALGOLIA';\n\nfunction getCookie(name) {\n var prefix = \"\".concat(name, \"=\");\n var cookies = document.cookie.split(';');\n\n for (var i = 0; i < cookies.length; i++) {\n var cookie = cookies[i];\n\n while (cookie.charAt(0) === ' ') {\n cookie = cookie.substring(1);\n }\n\n if (cookie.indexOf(prefix) === 0) {\n return cookie.substring(prefix.length, cookie.length);\n }\n }\n\n return undefined;\n}\n\nexport function getInsightsAnonymousUserTokenInternal() {\n return getCookie(ANONYMOUS_TOKEN_COOKIE_KEY);\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 */\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}", "function _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; }\n\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; }\n\nimport { isEqual } from '../utils';\n\nfunction getStateWithoutPage(state) {\n var _ref = state || {},\n page = _ref.page,\n rest = _objectWithoutProperties(_ref, [\"page\"]);\n\n return rest;\n}\n\nvar KEY = 'ais.infiniteHits';\n\nfunction hasSessionStorage() {\n return typeof window !== 'undefined' && typeof window.sessionStorage !== 'undefined';\n}\n\nexport default function createInfiniteHitsSessionStorageCache() {\n return {\n read: function read(_ref2) {\n var state = _ref2.state;\n\n if (!hasSessionStorage()) {\n return null;\n }\n\n try {\n var cache = JSON.parse( // @ts-ignore JSON.parse() requires a string, but it actually accepts null, too.\n window.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 window.sessionStorage.removeItem(KEY);\n } catch (err) {// do nothing\n }\n }\n\n return null;\n }\n },\n write: function write(_ref3) {\n var state = _ref3.state,\n hits = _ref3.hits;\n\n if (!hasSessionStorage()) {\n return;\n }\n\n try {\n window.sessionStorage.setItem(KEY, JSON.stringify({\n state: getStateWithoutPage(state),\n hits: hits\n }));\n } catch (error) {// do nothing\n }\n }\n };\n}", "import InstantSearch from './lib/InstantSearch';\nimport version from './lib/version';\nimport { snippet, reverseSnippet, highlight, reverseHighlight, insights, getInsightsAnonymousUserToken } from './helpers';\nimport { createInfiniteHitsSessionStorageCache } from './lib/infiniteHitsCache';\n\nvar instantsearch = function instantsearch(options) {\n return new InstantSearch(options);\n};\n\ninstantsearch.version = version;\ninstantsearch.snippet = snippet;\ninstantsearch.reverseSnippet = reverseSnippet;\ninstantsearch.highlight = highlight;\ninstantsearch.reverseHighlight = reverseHighlight;\ninstantsearch.insights = insights;\ninstantsearch.getInsightsAnonymousUserToken = getInsightsAnonymousUserToken;\ninstantsearch.createInfiniteHitsSessionStorageCache = createInfiniteHitsSessionStorageCache;\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;\n", "function getObjectType(object) {\n return Object.prototype.toString.call(object).slice(8, -1);\n}\n\nexport default getObjectType;", "import getObjectType from './getObjectType';\n\nfunction 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\nexport default checkRendering;", "function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar buildPayload = function buildPayload(_ref) {\n var index = _ref.index,\n widgetType = _ref.widgetType,\n methodName = _ref.methodName,\n args = _ref.args;\n\n if (args.length === 1 && _typeof(args[0]) === 'object') {\n return args[0];\n }\n\n var eventType = args[0];\n var hits = args[1];\n var eventName = args[2];\n\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 null;\n }\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 null;\n }\n }\n\n var hitsArray = Array.isArray(hits) ? hits : [hits];\n\n if (hitsArray.length === 0) {\n return null;\n }\n\n var queryID = hitsArray[0].__queryID;\n var objectIDs = hitsArray.map(function (hit) {\n return hit.objectID;\n });\n var positions = hitsArray.map(function (hit) {\n return hit.__position;\n });\n\n if (eventType === 'view') {\n return {\n insightsMethod: 'viewedObjectIDs',\n widgetType: widgetType,\n eventType: eventType,\n payload: {\n eventName: eventName || 'Hits Viewed',\n index: index,\n objectIDs: objectIDs\n }\n };\n } else if (eventType === 'click') {\n return {\n insightsMethod: 'clickedObjectIDsAfterSearch',\n widgetType: widgetType,\n eventType: eventType,\n payload: {\n eventName: eventName,\n index: index,\n queryID: queryID,\n objectIDs: objectIDs,\n positions: positions\n }\n };\n } else if (eventType === 'conversion') {\n return {\n insightsMethod: 'convertedObjectIDsAfterSearch',\n widgetType: widgetType,\n eventType: eventType,\n payload: {\n eventName: eventName,\n index: index,\n queryID: queryID,\n objectIDs: objectIDs\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 null;\n }\n};\n\nexport function createSendEventForHits(_ref2) {\n var instantSearchInstance = _ref2.instantSearchInstance,\n index = _ref2.index,\n widgetType = _ref2.widgetType;\n\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\n var payload = buildPayload({\n widgetType: widgetType,\n index: index,\n methodName: 'sendEvent',\n args: args\n });\n\n if (payload) {\n instantSearchInstance.sendEventToInsights(payload);\n }\n };\n\n return sendEventForHits;\n}\nexport function createBindEventForHits(_ref3) {\n var index = _ref3.index,\n widgetType = _ref3.widgetType;\n\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\n var payload = buildPayload({\n widgetType: widgetType,\n index: index,\n methodName: 'bindEvent',\n args: args\n });\n return payload ? \"data-insights-event=\".concat(btoa(JSON.stringify(payload))) : '';\n };\n\n return bindEventForHits;\n}", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport escapeHits, { TAG_PLACEHOLDER } from '../../lib/escape-highlight';\nimport { checkRendering, createDocumentationMessageGenerator, createSendEventForHits, noop, warning } from '../../lib/utils';\nvar withUsage = createDocumentationMessageGenerator({\n name: 'autocomplete',\n connector: true\n});\n\nvar connectAutocomplete = function connectAutocomplete(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$escapeHTML = _ref.escapeHTML,\n escapeHTML = _ref$escapeHTML === void 0 ? true : _ref$escapeHTML;\n\n process.env.NODE_ENV === 'development' ? warning(!widgetParams.indices, \"\\nThe option `indices` has been removed from the Autocomplete connector.\\n\\nThe indices to target are now inferred from the widgets tree.\\n\".concat(Array.isArray(widgetParams.indices) ? \"\\nAn alternative would be:\\n\\nconst autocomplete = connectAutocomplete(renderer);\\n\\nsearch.addWidgets([\\n \".concat(widgetParams.indices.map(function (_ref2) {\n var value = _ref2.value;\n return \"index({ indexName: '\".concat(value, \"' }),\");\n }).join('\\n '), \"\\n autocomplete()\\n]);\\n\") : '', \"\\n \")) : void 0;\n var connectorState = {};\n return {\n $$type: 'ais.autocomplete',\n init: function init(initOptions) {\n var instantSearchInstance = initOptions.instantSearchInstance;\n renderFn(_objectSpread({}, this.getWidgetRenderState(initOptions), {\n instantSearchInstance: instantSearchInstance\n }), true);\n },\n render: function render(renderOptions) {\n var instantSearchInstance = renderOptions.instantSearchInstance;\n var renderState = this.getWidgetRenderState(renderOptions);\n renderState.indices.forEach(function (_ref3) {\n var sendEvent = _ref3.sendEvent,\n hits = _ref3.hits;\n sendEvent('view', hits);\n });\n renderFn(_objectSpread({}, renderState, {\n instantSearchInstance: instantSearchInstance\n }), false);\n },\n getRenderState: function getRenderState(renderState, renderOptions) {\n return _objectSpread({}, renderState, {\n autocomplete: this.getWidgetRenderState(renderOptions)\n });\n },\n getWidgetRenderState: function getWidgetRenderState(_ref4) {\n var _this = this;\n\n var helper = _ref4.helper,\n scopedResults = _ref4.scopedResults,\n instantSearchInstance = _ref4.instantSearchInstance;\n\n if (!connectorState.refine) {\n connectorState.refine = function (query) {\n helper.setQuery(query).search();\n };\n }\n\n var indices = scopedResults.map(function (scopedResult) {\n // We need to escape the hits because highlighting\n // exposes HTML tags to the end-user.\n scopedResult.results.hits = escapeHTML ? escapeHits(scopedResult.results.hits) : scopedResult.results.hits;\n var sendEvent = createSendEventForHits({\n instantSearchInstance: instantSearchInstance,\n index: scopedResult.results.index,\n widgetType: _this.$$type\n });\n return {\n indexId: scopedResult.indexId,\n indexName: scopedResult.results.index,\n hits: scopedResult.results.hits,\n results: scopedResult.results,\n sendEvent: sendEvent\n };\n });\n return {\n currentRefinement: helper.state.query || '',\n indices: indices,\n refine: connectorState.refine,\n widgetParams: widgetParams\n };\n },\n getWidgetUiState: function getWidgetUiState(uiState, _ref5) {\n var searchParameters = _ref5.searchParameters;\n var query = searchParameters.query || '';\n\n if (query === '' || uiState && uiState.query === query) {\n return uiState;\n }\n\n return _objectSpread({}, uiState, {\n query: query\n });\n },\n getWidgetSearchParameters: function getWidgetSearchParameters(searchParameters, _ref6) {\n var uiState = _ref6.uiState;\n var parameters = {\n query: uiState.query || ''\n };\n\n if (!escapeHTML) {\n return searchParameters.setQueryParameters(parameters);\n }\n\n return searchParameters.setQueryParameters(_objectSpread({}, parameters, {}, TAG_PLACEHOLDER));\n },\n dispose: function dispose(_ref7) {\n var state = _ref7.state;\n unmountFn();\n var stateWithoutQuery = state.setQueryParameter('query', undefined);\n\n if (!escapeHTML) {\n return stateWithoutQuery;\n }\n\n return stateWithoutQuery.setQueryParameters(Object.keys(TAG_PLACEHOLDER).reduce(function (acc, key) {\n return _objectSpread({}, acc, _defineProperty({}, key, undefined));\n }, {}));\n }\n };\n };\n};\n\nexport default connectAutocomplete;", "function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport algoliasearchHelper from 'algoliasearch-helper';\nimport { createDocumentationMessageGenerator, isPlainObject, mergeSearchParameters, noop } from '../../lib/utils';\n/**\n * Refine the given search parameters.\n */\n\nvar withUsage = createDocumentationMessageGenerator({\n name: 'configure',\n connector: true\n});\n\nfunction getInitialSearchParameters(state, widgetParams) {\n // We leverage the helper internals to remove the `widgetParams` from\n // the state. The function `setQueryParameters` omits the values that\n // are `undefined` on the next state.\n return state.setQueryParameters(Object.keys(widgetParams.searchParameters).reduce(function (acc, key) {\n return _objectSpread({}, acc, _defineProperty({}, key, undefined));\n }, {}));\n}\n\nvar connectConfigure = function connectConfigure() {\n var renderFn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n var unmountFn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n return function (widgetParams) {\n if (!widgetParams || !isPlainObject(widgetParams.searchParameters)) {\n throw new Error(withUsage('The `searchParameters` option expects an object.'));\n }\n\n var connectorState = {};\n\n function refine(helper) {\n return function (searchParameters) {\n // Merge new `searchParameters` with the ones set from other widgets\n var actualState = getInitialSearchParameters(helper.state, widgetParams);\n var nextSearchParameters = mergeSearchParameters(actualState, new algoliasearchHelper.SearchParameters(searchParameters)); // Update original `widgetParams.searchParameters` to the new refined one\n\n widgetParams.searchParameters = searchParameters; // Trigger a search with the resolved search parameters\n\n helper.setState(nextSearchParameters).search();\n };\n }\n\n return {\n $$type: 'ais.configure',\n init: function init(initOptions) {\n var instantSearchInstance = initOptions.instantSearchInstance;\n renderFn(_objectSpread({}, this.getWidgetRenderState(initOptions), {\n instantSearchInstance: instantSearchInstance\n }), true);\n },\n render: function render(renderOptions) {\n var instantSearchInstance = renderOptions.instantSearchInstance;\n renderFn(_objectSpread({}, this.getWidgetRenderState(renderOptions), {\n instantSearchInstance: instantSearchInstance\n }), false);\n },\n dispose: function dispose(_ref) {\n var state = _ref.state;\n unmountFn();\n return getInitialSearchParameters(state, widgetParams);\n },\n getRenderState: function getRenderState(renderState, renderOptions) {\n var _renderState$configur;\n\n var widgetRenderState = this.getWidgetRenderState(renderOptions);\n return _objectSpread({}, renderState, {\n configure: _objectSpread({}, widgetRenderState, {\n widgetParams: _objectSpread({}, widgetRenderState.widgetParams, {\n searchParameters: mergeSearchParameters(new algoliasearchHelper.SearchParameters((_renderState$configur = renderState.configure) === null || _renderState$configur === void 0 ? void 0 : _renderState$configur.widgetParams.searchParameters), new algoliasearchHelper.SearchParameters(widgetRenderState.widgetParams.searchParameters)).getQueryParams()\n })\n })\n });\n },\n getWidgetRenderState: function getWidgetRenderState(_ref2) {\n var helper = _ref2.helper;\n\n if (!connectorState.refine) {\n connectorState.refine = refine(helper);\n }\n\n return {\n refine: connectorState.refine,\n widgetParams: widgetParams\n };\n },\n getWidgetSearchParameters: function getWidgetSearchParameters(state, _ref3) {\n var uiState = _ref3.uiState;\n return mergeSearchParameters(state, new algoliasearchHelper.SearchParameters(_objectSpread({}, uiState.configure, {}, widgetParams.searchParameters)));\n },\n getWidgetUiState: function getWidgetUiState(uiState) {\n return _objectSpread({}, uiState, {\n configure: _objectSpread({}, uiState.configure, {}, widgetParams.searchParameters)\n });\n }\n };\n };\n};\n\nexport default connectConfigure;", "import connectConfigure from '../../connectors/configure/connectConfigure';\nimport { noop } from '../../lib/utils';\n/**\n * A list of [search parameters](https://www.algolia.com/doc/api-reference/search-api-parameters/)\n * to enable when the widget mounts.\n */\n\nvar configure = function configure(widgetParams) {\n // This is a renderless widget that falls back to the connector's\n // noop render and unmount functions.\n var makeWidget = connectConfigure(noop);\n return makeWidget({\n searchParameters: widgetParams\n });\n};\n\nexport default configure;", "import \"selectize/dist/js/selectize.js\";\nimport \"selectize/dist/css/selectize.css\";\n\nimport instantsearch from \"instantsearch.js/es\";\nimport { connectAutocomplete } from \"instantsearch.js/es/connectors\";\nimport { configure } from \"instantsearch.js/es/widgets\";\n\nconst algoliasearch = require(\"algoliasearch\");\n\nexport default function posFinder(\n algoliaKey,\n algoliaSecret,\n algoliaIndex,\n algoliaValueField,\n selectID = \"pos_name\"\n) {\n const searchClient = algoliasearch(`${algoliaKey}`, `${algoliaSecret}`);\n\n const autocomplete = connectAutocomplete(\n ({ indices, refine, widgetParams }, isFirstRendering) => {\n const { container, onSelectChange } = widgetParams;\n\n if (isFirstRendering) {\n container.html(``);\n\n $(`#${selectID}`).selectize({\n options: [],\n valueField: `${algoliaValueField}`,\n labelField: \"name\",\n highlight: false,\n maxItems: 1,\n onType: refine,\n onBlur() {\n refine(this.getValue());\n },\n score() {\n return function () {\n return 1;\n };\n },\n onChange(value) {\n onSelectChange(value);\n refine(value);\n },\n });\n return;\n }\n\n const [select] = $(`#${selectID}`);\n\n indices.forEach((index) => {\n select.selectize.clearOptions();\n index.results.hits.forEach((h) => select.selectize.addOption(h));\n select.selectize.refreshOptions(select.selectize.isOpen);\n });\n }\n );\n\n const search = instantsearch({\n indexName: `${algoliaIndex}`,\n searchClient,\n });\n\n const suggestions = instantsearch({\n indexName: `${algoliaIndex}`,\n searchClient,\n });\n\n suggestions.addWidgets([\n configure({\n hitsPerPage: 5,\n }),\n autocomplete({\n container: $(`#${selectID}`),\n onSelectChange(value) {\n search.helper.setQuery(value).search();\n },\n }),\n ]);\n\n suggestions.start();\n search.start();\n}\n", "import datePicker from \"./date-picker\";\nimport phoneChecker from \"./phone-checker\";\nimport posFinder from \"./pos-finder\";\nimport paramsCopier from \"./params-copier\";\nimport paramsLinker from \"./params-linker\";\n\nclass FormHelper {\n constructor() {}\n}\n\nFormHelper.prototype.datePicker = datePicker;\nFormHelper.prototype.phoneChecker = phoneChecker;\nFormHelper.prototype.posFinder = posFinder;\nFormHelper.prototype.paramsCopier = paramsCopier;\nFormHelper.prototype.paramsLinker = paramsLinker;\n\nexport default FormHelper;\n", "import \"jquery-mask-plugin\";\nimport \"jquery-ui/ui/widgets/datepicker\";\n\nimport \"jquery-ui/themes/base/base.css\";\nimport \"jquery-ui/themes/base/theme.css\";\n\nexport default function datePicker(inputId) {\n $(document).ready(function () {\n $(`#${inputId}`).datepicker({\n changeMonth: true,\n changeYear: true,\n dateFormat: \"dd/mm/yy\",\n yearRange: \"-100:+0\",\n });\n $(`#${inputId}`).mask(\"99/99/9999\");\n });\n}\n", "import \"intl-tel-input/build/css/intlTelInput.css\";\nimport * as utilsScript from \"intl-tel-input/build/js/utils.js\";\nimport intlTelInput from \"intl-tel-input\";\n\nexport default function phoneChecker(\n phoneInputId = \"phone\",\n hiddenInputId = \"phone-international\"\n) {\n var phoneInput = document.querySelector(`#${phoneInputId}`);\n var iti = intlTelInput(phoneInput, {\n utilsScript: utilsScript,\n initialCountry: \"auto\",\n geoIpLookup: function (success, failure) {\n $.get(\"https://ipinfo.io?token=9f8ce4f77cc869\", function () {}).always(\n function (resp) {\n var countryCode = resp && resp.country ? resp.country : \"fr\";\n success(countryCode);\n }\n );\n },\n preferredCountries: [\"fr\", \"be\", \"de\", \"es\", \"it\", \"pt\", \"sk\"],\n hiddenInput: hiddenInputId,\n });\n\n phoneInput.addEventListener(\"focusout\", function () {\n if (iti.isValidNumber()) {\n phoneInput.setCustomValidity(\"\");\n } else {\n var countryCode = iti.getSelectedCountryData()[\"iso2\"];\n var national = true;\n var numberType = intlTelInputUtils.numberType.MOBILE;\n\n var example = intlTelInputUtils.getExampleNumber(\n countryCode,\n national,\n numberType\n );\n phoneInput.setCustomValidity(`Ex. ${example}`);\n }\n });\n}\n", "export default function paramsCopier(params = []) {\n params.forEach(function (param) {\n document.getElementById(param).value = unescape(\n window.location.search.replace(\n new RegExp(\n \"^(?:.*[&\\\\?]\" +\n escape(param).replace(/[\\.\\+\\*]/g, \"\\\\$&\") +\n \"(?:\\\\=([^&]*))?)?.*$\",\n \"i\"\n ),\n \"$1\"\n )\n );\n });\n}\n", "export default function paramsLinker(linkId) {\n var myLink = document.getElementById(linkId);\n\n if (window.location.search) {\n myLink.href += window.location.search;\n }\n}\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"../img/flags.png\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"../img/flags@2x.png\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".iti {\\n position: relative;\\n display: inline-block; }\\n .iti * {\\n box-sizing: border-box;\\n -moz-box-sizing: border-box; }\\n .iti__hide {\\n display: none; }\\n .iti__v-hide {\\n visibility: hidden; }\\n .iti input, .iti input[type=text], .iti input[type=tel] {\\n position: relative;\\n z-index: 0;\\n margin-top: 0 !important;\\n margin-bottom: 0 !important;\\n padding-right: 36px;\\n margin-right: 0; }\\n .iti__flag-container {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n right: 0;\\n padding: 1px; }\\n .iti__selected-flag {\\n z-index: 1;\\n position: relative;\\n display: flex;\\n align-items: center;\\n height: 100%;\\n padding: 0 6px 0 8px; }\\n .iti__arrow {\\n margin-left: 6px;\\n width: 0;\\n height: 0;\\n border-left: 3px solid transparent;\\n border-right: 3px solid transparent;\\n border-top: 4px solid #555; }\\n .iti__arrow--up {\\n border-top: none;\\n border-bottom: 4px solid #555; }\\n .iti__country-list {\\n position: absolute;\\n z-index: 2;\\n list-style: none;\\n text-align: left;\\n padding: 0;\\n margin: 0 0 0 -1px;\\n box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2);\\n background-color: white;\\n border: 1px solid #CCC;\\n white-space: nowrap;\\n max-height: 200px;\\n overflow-y: scroll;\\n -webkit-overflow-scrolling: touch; }\\n .iti__country-list--dropup {\\n bottom: 100%;\\n margin-bottom: -1px; }\\n @media (max-width: 500px) {\\n .iti__country-list {\\n white-space: normal; } }\\n .iti__flag-box {\\n display: inline-block;\\n width: 20px; }\\n .iti__divider {\\n padding-bottom: 5px;\\n margin-bottom: 5px;\\n border-bottom: 1px solid #CCC; }\\n .iti__country {\\n padding: 5px 10px;\\n outline: none; }\\n .iti__dial-code {\\n color: #999; }\\n .iti__country.iti__highlight {\\n background-color: rgba(0, 0, 0, 0.05); }\\n .iti__flag-box, .iti__country-name, .iti__dial-code {\\n vertical-align: middle; }\\n .iti__flag-box, .iti__country-name {\\n margin-right: 6px; }\\n .iti--allow-dropdown input, .iti--allow-dropdown input[type=text], .iti--allow-dropdown input[type=tel], .iti--separate-dial-code input, .iti--separate-dial-code input[type=text], .iti--separate-dial-code input[type=tel] {\\n padding-right: 6px;\\n padding-left: 52px;\\n margin-left: 0; }\\n .iti--allow-dropdown .iti__flag-container, .iti--separate-dial-code .iti__flag-container {\\n right: auto;\\n left: 0; }\\n .iti--allow-dropdown .iti__flag-container:hover {\\n cursor: pointer; }\\n .iti--allow-dropdown .iti__flag-container:hover .iti__selected-flag {\\n background-color: rgba(0, 0, 0, 0.05); }\\n .iti--allow-dropdown input[disabled] + .iti__flag-container:hover,\\n .iti--allow-dropdown input[readonly] + .iti__flag-container:hover {\\n cursor: default; }\\n .iti--allow-dropdown input[disabled] + .iti__flag-container:hover .iti__selected-flag,\\n .iti--allow-dropdown input[readonly] + .iti__flag-container:hover .iti__selected-flag {\\n background-color: transparent; }\\n .iti--separate-dial-code .iti__selected-flag {\\n background-color: rgba(0, 0, 0, 0.05); }\\n .iti--separate-dial-code .iti__selected-dial-code {\\n margin-left: 6px; }\\n .iti--container {\\n position: absolute;\\n top: -1000px;\\n left: -1000px;\\n z-index: 1060;\\n padding: 1px; }\\n .iti--container:hover {\\n cursor: pointer; }\\n\\n.iti-mobile .iti--container {\\n top: 30px;\\n bottom: 30px;\\n left: 30px;\\n right: 30px;\\n position: fixed; }\\n\\n.iti-mobile .iti__country-list {\\n max-height: 100%;\\n width: 100%; }\\n\\n.iti-mobile .iti__country {\\n padding: 10px 10px;\\n line-height: 1.5em; }\\n\\n.iti__flag {\\n width: 20px; }\\n .iti__flag.iti__be {\\n width: 18px; }\\n .iti__flag.iti__ch {\\n width: 15px; }\\n .iti__flag.iti__mc {\\n width: 19px; }\\n .iti__flag.iti__ne {\\n width: 18px; }\\n .iti__flag.iti__np {\\n width: 13px; }\\n .iti__flag.iti__va {\\n width: 15px; }\\n @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\\n .iti__flag {\\n background-size: 5652px 15px; } }\\n .iti__flag.iti__ac {\\n height: 10px;\\n background-position: 0px 0px; }\\n .iti__flag.iti__ad {\\n height: 14px;\\n background-position: -22px 0px; }\\n .iti__flag.iti__ae {\\n height: 10px;\\n background-position: -44px 0px; }\\n .iti__flag.iti__af {\\n height: 14px;\\n background-position: -66px 0px; }\\n .iti__flag.iti__ag {\\n height: 14px;\\n background-position: -88px 0px; }\\n .iti__flag.iti__ai {\\n height: 10px;\\n background-position: -110px 0px; }\\n .iti__flag.iti__al {\\n height: 15px;\\n background-position: -132px 0px; }\\n .iti__flag.iti__am {\\n height: 10px;\\n background-position: -154px 0px; }\\n .iti__flag.iti__ao {\\n height: 14px;\\n background-position: -176px 0px; }\\n .iti__flag.iti__aq {\\n height: 14px;\\n background-position: -198px 0px; }\\n .iti__flag.iti__ar {\\n height: 13px;\\n background-position: -220px 0px; }\\n .iti__flag.iti__as {\\n height: 10px;\\n background-position: -242px 0px; }\\n .iti__flag.iti__at {\\n height: 14px;\\n background-position: -264px 0px; }\\n .iti__flag.iti__au {\\n height: 10px;\\n background-position: -286px 0px; }\\n .iti__flag.iti__aw {\\n height: 14px;\\n background-position: -308px 0px; }\\n .iti__flag.iti__ax {\\n height: 13px;\\n background-position: -330px 0px; }\\n .iti__flag.iti__az {\\n height: 10px;\\n background-position: -352px 0px; }\\n .iti__flag.iti__ba {\\n height: 10px;\\n background-position: -374px 0px; }\\n .iti__flag.iti__bb {\\n height: 14px;\\n background-position: -396px 0px; }\\n .iti__flag.iti__bd {\\n height: 12px;\\n background-position: -418px 0px; }\\n .iti__flag.iti__be {\\n height: 15px;\\n background-position: -440px 0px; }\\n .iti__flag.iti__bf {\\n height: 14px;\\n background-position: -460px 0px; }\\n .iti__flag.iti__bg {\\n height: 12px;\\n background-position: -482px 0px; }\\n .iti__flag.iti__bh {\\n height: 12px;\\n background-position: -504px 0px; }\\n .iti__flag.iti__bi {\\n height: 12px;\\n background-position: -526px 0px; }\\n .iti__flag.iti__bj {\\n height: 14px;\\n background-position: -548px 0px; }\\n .iti__flag.iti__bl {\\n height: 14px;\\n background-position: -570px 0px; }\\n .iti__flag.iti__bm {\\n height: 10px;\\n background-position: -592px 0px; }\\n .iti__flag.iti__bn {\\n height: 10px;\\n background-position: -614px 0px; }\\n .iti__flag.iti__bo {\\n height: 14px;\\n background-position: -636px 0px; }\\n .iti__flag.iti__bq {\\n height: 14px;\\n background-position: -658px 0px; }\\n .iti__flag.iti__br {\\n height: 14px;\\n background-position: -680px 0px; }\\n .iti__flag.iti__bs {\\n height: 10px;\\n background-position: -702px 0px; }\\n .iti__flag.iti__bt {\\n height: 14px;\\n background-position: -724px 0px; }\\n .iti__flag.iti__bv {\\n height: 15px;\\n background-position: -746px 0px; }\\n .iti__flag.iti__bw {\\n height: 14px;\\n background-position: -768px 0px; }\\n .iti__flag.iti__by {\\n height: 10px;\\n background-position: -790px 0px; }\\n .iti__flag.iti__bz {\\n height: 14px;\\n background-position: -812px 0px; }\\n .iti__flag.iti__ca {\\n height: 10px;\\n background-position: -834px 0px; }\\n .iti__flag.iti__cc {\\n height: 10px;\\n background-position: -856px 0px; }\\n .iti__flag.iti__cd {\\n height: 15px;\\n background-position: -878px 0px; }\\n .iti__flag.iti__cf {\\n height: 14px;\\n background-position: -900px 0px; }\\n .iti__flag.iti__cg {\\n height: 14px;\\n background-position: -922px 0px; }\\n .iti__flag.iti__ch {\\n height: 15px;\\n background-position: -944px 0px; }\\n .iti__flag.iti__ci {\\n height: 14px;\\n background-position: -961px 0px; }\\n .iti__flag.iti__ck {\\n height: 10px;\\n background-position: -983px 0px; }\\n .iti__flag.iti__cl {\\n height: 14px;\\n background-position: -1005px 0px; }\\n .iti__flag.iti__cm {\\n height: 14px;\\n background-position: -1027px 0px; }\\n .iti__flag.iti__cn {\\n height: 14px;\\n background-position: -1049px 0px; }\\n .iti__flag.iti__co {\\n height: 14px;\\n background-position: -1071px 0px; }\\n .iti__flag.iti__cp {\\n height: 14px;\\n background-position: -1093px 0px; }\\n .iti__flag.iti__cr {\\n height: 12px;\\n background-position: -1115px 0px; }\\n .iti__flag.iti__cu {\\n height: 10px;\\n background-position: -1137px 0px; }\\n .iti__flag.iti__cv {\\n height: 12px;\\n background-position: -1159px 0px; }\\n .iti__flag.iti__cw {\\n height: 14px;\\n background-position: -1181px 0px; }\\n .iti__flag.iti__cx {\\n height: 10px;\\n background-position: -1203px 0px; }\\n .iti__flag.iti__cy {\\n height: 14px;\\n background-position: -1225px 0px; }\\n .iti__flag.iti__cz {\\n height: 14px;\\n background-position: -1247px 0px; }\\n .iti__flag.iti__de {\\n height: 12px;\\n background-position: -1269px 0px; }\\n .iti__flag.iti__dg {\\n height: 10px;\\n background-position: -1291px 0px; }\\n .iti__flag.iti__dj {\\n height: 14px;\\n background-position: -1313px 0px; }\\n .iti__flag.iti__dk {\\n height: 15px;\\n background-position: -1335px 0px; }\\n .iti__flag.iti__dm {\\n height: 10px;\\n background-position: -1357px 0px; }\\n .iti__flag.iti__do {\\n height: 14px;\\n background-position: -1379px 0px; }\\n .iti__flag.iti__dz {\\n height: 14px;\\n background-position: -1401px 0px; }\\n .iti__flag.iti__ea {\\n height: 14px;\\n background-position: -1423px 0px; }\\n .iti__flag.iti__ec {\\n height: 14px;\\n background-position: -1445px 0px; }\\n .iti__flag.iti__ee {\\n height: 13px;\\n background-position: -1467px 0px; }\\n .iti__flag.iti__eg {\\n height: 14px;\\n background-position: -1489px 0px; }\\n .iti__flag.iti__eh {\\n height: 10px;\\n background-position: -1511px 0px; }\\n .iti__flag.iti__er {\\n height: 10px;\\n background-position: -1533px 0px; }\\n .iti__flag.iti__es {\\n height: 14px;\\n background-position: -1555px 0px; }\\n .iti__flag.iti__et {\\n height: 10px;\\n background-position: -1577px 0px; }\\n .iti__flag.iti__eu {\\n height: 14px;\\n background-position: -1599px 0px; }\\n .iti__flag.iti__fi {\\n height: 12px;\\n background-position: -1621px 0px; }\\n .iti__flag.iti__fj {\\n height: 10px;\\n background-position: -1643px 0px; }\\n .iti__flag.iti__fk {\\n height: 10px;\\n background-position: -1665px 0px; }\\n .iti__flag.iti__fm {\\n height: 11px;\\n background-position: -1687px 0px; }\\n .iti__flag.iti__fo {\\n height: 15px;\\n background-position: -1709px 0px; }\\n .iti__flag.iti__fr {\\n height: 14px;\\n background-position: -1731px 0px; }\\n .iti__flag.iti__ga {\\n height: 15px;\\n background-position: -1753px 0px; }\\n .iti__flag.iti__gb {\\n height: 10px;\\n background-position: -1775px 0px; }\\n .iti__flag.iti__gd {\\n height: 12px;\\n background-position: -1797px 0px; }\\n .iti__flag.iti__ge {\\n height: 14px;\\n background-position: -1819px 0px; }\\n .iti__flag.iti__gf {\\n height: 14px;\\n background-position: -1841px 0px; }\\n .iti__flag.iti__gg {\\n height: 14px;\\n background-position: -1863px 0px; }\\n .iti__flag.iti__gh {\\n height: 14px;\\n background-position: -1885px 0px; }\\n .iti__flag.iti__gi {\\n height: 10px;\\n background-position: -1907px 0px; }\\n .iti__flag.iti__gl {\\n height: 14px;\\n background-position: -1929px 0px; }\\n .iti__flag.iti__gm {\\n height: 14px;\\n background-position: -1951px 0px; }\\n .iti__flag.iti__gn {\\n height: 14px;\\n background-position: -1973px 0px; }\\n .iti__flag.iti__gp {\\n height: 14px;\\n background-position: -1995px 0px; }\\n .iti__flag.iti__gq {\\n height: 14px;\\n background-position: -2017px 0px; }\\n .iti__flag.iti__gr {\\n height: 14px;\\n background-position: -2039px 0px; }\\n .iti__flag.iti__gs {\\n height: 10px;\\n background-position: -2061px 0px; }\\n .iti__flag.iti__gt {\\n height: 13px;\\n background-position: -2083px 0px; }\\n .iti__flag.iti__gu {\\n height: 11px;\\n background-position: -2105px 0px; }\\n .iti__flag.iti__gw {\\n height: 10px;\\n background-position: -2127px 0px; }\\n .iti__flag.iti__gy {\\n height: 12px;\\n background-position: -2149px 0px; }\\n .iti__flag.iti__hk {\\n height: 14px;\\n background-position: -2171px 0px; }\\n .iti__flag.iti__hm {\\n height: 10px;\\n background-position: -2193px 0px; }\\n .iti__flag.iti__hn {\\n height: 10px;\\n background-position: -2215px 0px; }\\n .iti__flag.iti__hr {\\n height: 10px;\\n background-position: -2237px 0px; }\\n .iti__flag.iti__ht {\\n height: 12px;\\n background-position: -2259px 0px; }\\n .iti__flag.iti__hu {\\n height: 10px;\\n background-position: -2281px 0px; }\\n .iti__flag.iti__ic {\\n height: 14px;\\n background-position: -2303px 0px; }\\n .iti__flag.iti__id {\\n height: 14px;\\n background-position: -2325px 0px; }\\n .iti__flag.iti__ie {\\n height: 10px;\\n background-position: -2347px 0px; }\\n .iti__flag.iti__il {\\n height: 15px;\\n background-position: -2369px 0px; }\\n .iti__flag.iti__im {\\n height: 10px;\\n background-position: -2391px 0px; }\\n .iti__flag.iti__in {\\n height: 14px;\\n background-position: -2413px 0px; }\\n .iti__flag.iti__io {\\n height: 10px;\\n background-position: -2435px 0px; }\\n .iti__flag.iti__iq {\\n height: 14px;\\n background-position: -2457px 0px; }\\n .iti__flag.iti__ir {\\n height: 12px;\\n background-position: -2479px 0px; }\\n .iti__flag.iti__is {\\n height: 15px;\\n background-position: -2501px 0px; }\\n .iti__flag.iti__it {\\n height: 14px;\\n background-position: -2523px 0px; }\\n .iti__flag.iti__je {\\n height: 12px;\\n background-position: -2545px 0px; }\\n .iti__flag.iti__jm {\\n height: 10px;\\n background-position: -2567px 0px; }\\n .iti__flag.iti__jo {\\n height: 10px;\\n background-position: -2589px 0px; }\\n .iti__flag.iti__jp {\\n height: 14px;\\n background-position: -2611px 0px; }\\n .iti__flag.iti__ke {\\n height: 14px;\\n background-position: -2633px 0px; }\\n .iti__flag.iti__kg {\\n height: 12px;\\n background-position: -2655px 0px; }\\n .iti__flag.iti__kh {\\n height: 13px;\\n background-position: -2677px 0px; }\\n .iti__flag.iti__ki {\\n height: 10px;\\n background-position: -2699px 0px; }\\n .iti__flag.iti__km {\\n height: 12px;\\n background-position: -2721px 0px; }\\n .iti__flag.iti__kn {\\n height: 14px;\\n background-position: -2743px 0px; }\\n .iti__flag.iti__kp {\\n height: 10px;\\n background-position: -2765px 0px; }\\n .iti__flag.iti__kr {\\n height: 14px;\\n background-position: -2787px 0px; }\\n .iti__flag.iti__kw {\\n height: 10px;\\n background-position: -2809px 0px; }\\n .iti__flag.iti__ky {\\n height: 10px;\\n background-position: -2831px 0px; }\\n .iti__flag.iti__kz {\\n height: 10px;\\n background-position: -2853px 0px; }\\n .iti__flag.iti__la {\\n height: 14px;\\n background-position: -2875px 0px; }\\n .iti__flag.iti__lb {\\n height: 14px;\\n background-position: -2897px 0px; }\\n .iti__flag.iti__lc {\\n height: 10px;\\n background-position: -2919px 0px; }\\n .iti__flag.iti__li {\\n height: 12px;\\n background-position: -2941px 0px; }\\n .iti__flag.iti__lk {\\n height: 10px;\\n background-position: -2963px 0px; }\\n .iti__flag.iti__lr {\\n height: 11px;\\n background-position: -2985px 0px; }\\n .iti__flag.iti__ls {\\n height: 14px;\\n background-position: -3007px 0px; }\\n .iti__flag.iti__lt {\\n height: 12px;\\n background-position: -3029px 0px; }\\n .iti__flag.iti__lu {\\n height: 12px;\\n background-position: -3051px 0px; }\\n .iti__flag.iti__lv {\\n height: 10px;\\n background-position: -3073px 0px; }\\n .iti__flag.iti__ly {\\n height: 10px;\\n background-position: -3095px 0px; }\\n .iti__flag.iti__ma {\\n height: 14px;\\n background-position: -3117px 0px; }\\n .iti__flag.iti__mc {\\n height: 15px;\\n background-position: -3139px 0px; }\\n .iti__flag.iti__md {\\n height: 10px;\\n background-position: -3160px 0px; }\\n .iti__flag.iti__me {\\n height: 10px;\\n background-position: -3182px 0px; }\\n .iti__flag.iti__mf {\\n height: 14px;\\n background-position: -3204px 0px; }\\n .iti__flag.iti__mg {\\n height: 14px;\\n background-position: -3226px 0px; }\\n .iti__flag.iti__mh {\\n height: 11px;\\n background-position: -3248px 0px; }\\n .iti__flag.iti__mk {\\n height: 10px;\\n background-position: -3270px 0px; }\\n .iti__flag.iti__ml {\\n height: 14px;\\n background-position: -3292px 0px; }\\n .iti__flag.iti__mm {\\n height: 14px;\\n background-position: -3314px 0px; }\\n .iti__flag.iti__mn {\\n height: 10px;\\n background-position: -3336px 0px; }\\n .iti__flag.iti__mo {\\n height: 14px;\\n background-position: -3358px 0px; }\\n .iti__flag.iti__mp {\\n height: 10px;\\n background-position: -3380px 0px; }\\n .iti__flag.iti__mq {\\n height: 14px;\\n background-position: -3402px 0px; }\\n .iti__flag.iti__mr {\\n height: 14px;\\n background-position: -3424px 0px; }\\n .iti__flag.iti__ms {\\n height: 10px;\\n background-position: -3446px 0px; }\\n .iti__flag.iti__mt {\\n height: 14px;\\n background-position: -3468px 0px; }\\n .iti__flag.iti__mu {\\n height: 14px;\\n background-position: -3490px 0px; }\\n .iti__flag.iti__mv {\\n height: 14px;\\n background-position: -3512px 0px; }\\n .iti__flag.iti__mw {\\n height: 14px;\\n background-position: -3534px 0px; }\\n .iti__flag.iti__mx {\\n height: 12px;\\n background-position: -3556px 0px; }\\n .iti__flag.iti__my {\\n height: 10px;\\n background-position: -3578px 0px; }\\n .iti__flag.iti__mz {\\n height: 14px;\\n background-position: -3600px 0px; }\\n .iti__flag.iti__na {\\n height: 14px;\\n background-position: -3622px 0px; }\\n .iti__flag.iti__nc {\\n height: 10px;\\n background-position: -3644px 0px; }\\n .iti__flag.iti__ne {\\n height: 15px;\\n background-position: -3666px 0px; }\\n .iti__flag.iti__nf {\\n height: 10px;\\n background-position: -3686px 0px; }\\n .iti__flag.iti__ng {\\n height: 10px;\\n background-position: -3708px 0px; }\\n .iti__flag.iti__ni {\\n height: 12px;\\n background-position: -3730px 0px; }\\n .iti__flag.iti__nl {\\n height: 14px;\\n background-position: -3752px 0px; }\\n .iti__flag.iti__no {\\n height: 15px;\\n background-position: -3774px 0px; }\\n .iti__flag.iti__np {\\n height: 15px;\\n background-position: -3796px 0px; }\\n .iti__flag.iti__nr {\\n height: 10px;\\n background-position: -3811px 0px; }\\n .iti__flag.iti__nu {\\n height: 10px;\\n background-position: -3833px 0px; }\\n .iti__flag.iti__nz {\\n height: 10px;\\n background-position: -3855px 0px; }\\n .iti__flag.iti__om {\\n height: 10px;\\n background-position: -3877px 0px; }\\n .iti__flag.iti__pa {\\n height: 14px;\\n background-position: -3899px 0px; }\\n .iti__flag.iti__pe {\\n height: 14px;\\n background-position: -3921px 0px; }\\n .iti__flag.iti__pf {\\n height: 14px;\\n background-position: -3943px 0px; }\\n .iti__flag.iti__pg {\\n height: 15px;\\n background-position: -3965px 0px; }\\n .iti__flag.iti__ph {\\n height: 10px;\\n background-position: -3987px 0px; }\\n .iti__flag.iti__pk {\\n height: 14px;\\n background-position: -4009px 0px; }\\n .iti__flag.iti__pl {\\n height: 13px;\\n background-position: -4031px 0px; }\\n .iti__flag.iti__pm {\\n height: 14px;\\n background-position: -4053px 0px; }\\n .iti__flag.iti__pn {\\n height: 10px;\\n background-position: -4075px 0px; }\\n .iti__flag.iti__pr {\\n height: 14px;\\n background-position: -4097px 0px; }\\n .iti__flag.iti__ps {\\n height: 10px;\\n background-position: -4119px 0px; }\\n .iti__flag.iti__pt {\\n height: 14px;\\n background-position: -4141px 0px; }\\n .iti__flag.iti__pw {\\n height: 13px;\\n background-position: -4163px 0px; }\\n .iti__flag.iti__py {\\n height: 11px;\\n background-position: -4185px 0px; }\\n .iti__flag.iti__qa {\\n height: 8px;\\n background-position: -4207px 0px; }\\n .iti__flag.iti__re {\\n height: 14px;\\n background-position: -4229px 0px; }\\n .iti__flag.iti__ro {\\n height: 14px;\\n background-position: -4251px 0px; }\\n .iti__flag.iti__rs {\\n height: 14px;\\n background-position: -4273px 0px; }\\n .iti__flag.iti__ru {\\n height: 14px;\\n background-position: -4295px 0px; }\\n .iti__flag.iti__rw {\\n height: 14px;\\n background-position: -4317px 0px; }\\n .iti__flag.iti__sa {\\n height: 14px;\\n background-position: -4339px 0px; }\\n .iti__flag.iti__sb {\\n height: 10px;\\n background-position: -4361px 0px; }\\n .iti__flag.iti__sc {\\n height: 10px;\\n background-position: -4383px 0px; }\\n .iti__flag.iti__sd {\\n height: 10px;\\n background-position: -4405px 0px; }\\n .iti__flag.iti__se {\\n height: 13px;\\n background-position: -4427px 0px; }\\n .iti__flag.iti__sg {\\n height: 14px;\\n background-position: -4449px 0px; }\\n .iti__flag.iti__sh {\\n height: 10px;\\n background-position: -4471px 0px; }\\n .iti__flag.iti__si {\\n height: 10px;\\n background-position: -4493px 0px; }\\n .iti__flag.iti__sj {\\n height: 15px;\\n background-position: -4515px 0px; }\\n .iti__flag.iti__sk {\\n height: 14px;\\n background-position: -4537px 0px; }\\n .iti__flag.iti__sl {\\n height: 14px;\\n background-position: -4559px 0px; }\\n .iti__flag.iti__sm {\\n height: 15px;\\n background-position: -4581px 0px; }\\n .iti__flag.iti__sn {\\n height: 14px;\\n background-position: -4603px 0px; }\\n .iti__flag.iti__so {\\n height: 14px;\\n background-position: -4625px 0px; }\\n .iti__flag.iti__sr {\\n height: 14px;\\n background-position: -4647px 0px; }\\n .iti__flag.iti__ss {\\n height: 10px;\\n background-position: -4669px 0px; }\\n .iti__flag.iti__st {\\n height: 10px;\\n background-position: -4691px 0px; }\\n .iti__flag.iti__sv {\\n height: 12px;\\n background-position: -4713px 0px; }\\n .iti__flag.iti__sx {\\n height: 14px;\\n background-position: -4735px 0px; }\\n .iti__flag.iti__sy {\\n height: 14px;\\n background-position: -4757px 0px; }\\n .iti__flag.iti__sz {\\n height: 14px;\\n background-position: -4779px 0px; }\\n .iti__flag.iti__ta {\\n height: 10px;\\n background-position: -4801px 0px; }\\n .iti__flag.iti__tc {\\n height: 10px;\\n background-position: -4823px 0px; }\\n .iti__flag.iti__td {\\n height: 14px;\\n background-position: -4845px 0px; }\\n .iti__flag.iti__tf {\\n height: 14px;\\n background-position: -4867px 0px; }\\n .iti__flag.iti__tg {\\n height: 13px;\\n background-position: -4889px 0px; }\\n .iti__flag.iti__th {\\n height: 14px;\\n background-position: -4911px 0px; }\\n .iti__flag.iti__tj {\\n height: 10px;\\n background-position: -4933px 0px; }\\n .iti__flag.iti__tk {\\n height: 10px;\\n background-position: -4955px 0px; }\\n .iti__flag.iti__tl {\\n height: 10px;\\n background-position: -4977px 0px; }\\n .iti__flag.iti__tm {\\n height: 14px;\\n background-position: -4999px 0px; }\\n .iti__flag.iti__tn {\\n height: 14px;\\n background-position: -5021px 0px; }\\n .iti__flag.iti__to {\\n height: 10px;\\n background-position: -5043px 0px; }\\n .iti__flag.iti__tr {\\n height: 14px;\\n background-position: -5065px 0px; }\\n .iti__flag.iti__tt {\\n height: 12px;\\n background-position: -5087px 0px; }\\n .iti__flag.iti__tv {\\n height: 10px;\\n background-position: -5109px 0px; }\\n .iti__flag.iti__tw {\\n height: 14px;\\n background-position: -5131px 0px; }\\n .iti__flag.iti__tz {\\n height: 14px;\\n background-position: -5153px 0px; }\\n .iti__flag.iti__ua {\\n height: 14px;\\n background-position: -5175px 0px; }\\n .iti__flag.iti__ug {\\n height: 14px;\\n background-position: -5197px 0px; }\\n .iti__flag.iti__um {\\n height: 11px;\\n background-position: -5219px 0px; }\\n .iti__flag.iti__un {\\n height: 14px;\\n background-position: -5241px 0px; }\\n .iti__flag.iti__us {\\n height: 11px;\\n background-position: -5263px 0px; }\\n .iti__flag.iti__uy {\\n height: 14px;\\n background-position: -5285px 0px; }\\n .iti__flag.iti__uz {\\n height: 10px;\\n background-position: -5307px 0px; }\\n .iti__flag.iti__va {\\n height: 15px;\\n background-position: -5329px 0px; }\\n .iti__flag.iti__vc {\\n height: 14px;\\n background-position: -5346px 0px; }\\n .iti__flag.iti__ve {\\n height: 14px;\\n background-position: -5368px 0px; }\\n .iti__flag.iti__vg {\\n height: 10px;\\n background-position: -5390px 0px; }\\n .iti__flag.iti__vi {\\n height: 14px;\\n background-position: -5412px 0px; }\\n .iti__flag.iti__vn {\\n height: 14px;\\n background-position: -5434px 0px; }\\n .iti__flag.iti__vu {\\n height: 12px;\\n background-position: -5456px 0px; }\\n .iti__flag.iti__wf {\\n height: 14px;\\n background-position: -5478px 0px; }\\n .iti__flag.iti__ws {\\n height: 10px;\\n background-position: -5500px 0px; }\\n .iti__flag.iti__xk {\\n height: 15px;\\n background-position: -5522px 0px; }\\n .iti__flag.iti__ye {\\n height: 14px;\\n background-position: -5544px 0px; }\\n .iti__flag.iti__yt {\\n height: 14px;\\n background-position: -5566px 0px; }\\n .iti__flag.iti__za {\\n height: 14px;\\n background-position: -5588px 0px; }\\n .iti__flag.iti__zm {\\n height: 14px;\\n background-position: -5610px 0px; }\\n .iti__flag.iti__zw {\\n height: 10px;\\n background-position: -5632px 0px; }\\n\\n.iti__flag {\\n height: 15px;\\n box-shadow: 0px 0px 1px 0px #888;\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n background-repeat: no-repeat;\\n background-color: #DBDBDB;\\n background-position: 20px 0; }\\n @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\\n .iti__flag {\\n background-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \"); } }\\n\\n.iti__flag.iti__np {\\n background-color: transparent; }\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/intl-tel-input/build/css/intlTelInput.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,qBAAqB,EAAE;EACvB;IACE,sBAAsB;IACtB,2BAA2B,EAAE;EAC/B;IACE,aAAa,EAAE;EACjB;IACE,kBAAkB,EAAE;EACtB;IACE,kBAAkB;IAClB,UAAU;IACV,wBAAwB;IACxB,2BAA2B;IAC3B,mBAAmB;IACnB,eAAe,EAAE;EACnB;IACE,kBAAkB;IAClB,MAAM;IACN,SAAS;IACT,QAAQ;IACR,YAAY,EAAE;EAChB;IACE,UAAU;IACV,kBAAkB;IAClB,aAAa;IACb,mBAAmB;IACnB,YAAY;IACZ,oBAAoB,EAAE;EACxB;IACE,gBAAgB;IAChB,QAAQ;IACR,SAAS;IACT,kCAAkC;IAClC,mCAAmC;IACnC,0BAA0B,EAAE;IAC5B;MACE,gBAAgB;MAChB,6BAA6B,EAAE;EACnC;IACE,kBAAkB;IAClB,UAAU;IACV,gBAAgB;IAChB,gBAAgB;IAChB,UAAU;IACV,kBAAkB;IAClB,0CAA0C;IAC1C,uBAAuB;IACvB,sBAAsB;IACtB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,iCAAiC,EAAE;IACnC;MACE,YAAY;MACZ,mBAAmB,EAAE;IACvB;MACE;QACE,mBAAmB,EAAE,EAAE;EAC7B;IACE,qBAAqB;IACrB,WAAW,EAAE;EACf;IACE,mBAAmB;IACnB,kBAAkB;IAClB,6BAA6B,EAAE;EACjC;IACE,iBAAiB;IACjB,aAAa,EAAE;EACjB;IACE,WAAW,EAAE;EACf;IACE,qCAAqC,EAAE;EACzC;IACE,sBAAsB,EAAE;EAC1B;IACE,iBAAiB,EAAE;EACrB;IACE,kBAAkB;IAClB,kBAAkB;IAClB,cAAc,EAAE;EAClB;IACE,WAAW;IACX,OAAO,EAAE;EACX;IACE,eAAe,EAAE;IACjB;MACE,qCAAqC,EAAE;EAC3C;;IAEE,eAAe,EAAE;IACjB;;MAEE,6BAA6B,EAAE;EACnC;IACE,qCAAqC,EAAE;EACzC;IACE,gBAAgB,EAAE;EACpB;IACE,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,aAAa;IACb,YAAY,EAAE;IACd;MACE,eAAe,EAAE;;AAEvB;EACE,SAAS;EACT,YAAY;EACZ,UAAU;EACV,WAAW;EACX,eAAe,EAAE;;AAEnB;EACE,gBAAgB;EAChB,WAAW,EAAE;;AAEf;EACE,kBAAkB;EAClB,kBAAkB,EAAE;;AAEtB;EACE,WAAW,EAAE;EACb;IACE,WAAW,EAAE;EACf;IACE,WAAW,EAAE;EACf;IACE,WAAW,EAAE;EACf;IACE,WAAW,EAAE;EACf;IACE,WAAW,EAAE;EACf;IACE,WAAW,EAAE;EACf;IACE;MACE,4BAA4B,EAAE,EAAE;EACpC;IACE,YAAY;IACZ,4BAA4B,EAAE;EAChC;IACE,YAAY;IACZ,8BAA8B,EAAE;EAClC;IACE,YAAY;IACZ,8BAA8B,EAAE;EAClC;IACE,YAAY;IACZ,8BAA8B,EAAE;EAClC;IACE,YAAY;IACZ,8BAA8B,EAAE;EAClC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,+BAA+B,EAAE;EACnC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,WAAW;IACX,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;EACpC;IACE,YAAY;IACZ,gCAAgC,EAAE;;AAEtC;EACE,YAAY;EACZ,gCAAgC;EAChC,yDAAyC;EACzC,4BAA4B;EAC5B,yBAAyB;EACzB,2BAA2B,EAAE;EAC7B;IACE;MACE,yDAA4C,EAAE,EAAE;;AAEtD;EACE,6BAA6B,EAAE\",\"sourcesContent\":[\".iti {\\n position: relative;\\n display: inline-block; }\\n .iti * {\\n box-sizing: border-box;\\n -moz-box-sizing: border-box; }\\n .iti__hide {\\n display: none; }\\n .iti__v-hide {\\n visibility: hidden; }\\n .iti input, .iti input[type=text], .iti input[type=tel] {\\n position: relative;\\n z-index: 0;\\n margin-top: 0 !important;\\n margin-bottom: 0 !important;\\n padding-right: 36px;\\n margin-right: 0; }\\n .iti__flag-container {\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n right: 0;\\n padding: 1px; }\\n .iti__selected-flag {\\n z-index: 1;\\n position: relative;\\n display: flex;\\n align-items: center;\\n height: 100%;\\n padding: 0 6px 0 8px; }\\n .iti__arrow {\\n margin-left: 6px;\\n width: 0;\\n height: 0;\\n border-left: 3px solid transparent;\\n border-right: 3px solid transparent;\\n border-top: 4px solid #555; }\\n .iti__arrow--up {\\n border-top: none;\\n border-bottom: 4px solid #555; }\\n .iti__country-list {\\n position: absolute;\\n z-index: 2;\\n list-style: none;\\n text-align: left;\\n padding: 0;\\n margin: 0 0 0 -1px;\\n box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2);\\n background-color: white;\\n border: 1px solid #CCC;\\n white-space: nowrap;\\n max-height: 200px;\\n overflow-y: scroll;\\n -webkit-overflow-scrolling: touch; }\\n .iti__country-list--dropup {\\n bottom: 100%;\\n margin-bottom: -1px; }\\n @media (max-width: 500px) {\\n .iti__country-list {\\n white-space: normal; } }\\n .iti__flag-box {\\n display: inline-block;\\n width: 20px; }\\n .iti__divider {\\n padding-bottom: 5px;\\n margin-bottom: 5px;\\n border-bottom: 1px solid #CCC; }\\n .iti__country {\\n padding: 5px 10px;\\n outline: none; }\\n .iti__dial-code {\\n color: #999; }\\n .iti__country.iti__highlight {\\n background-color: rgba(0, 0, 0, 0.05); }\\n .iti__flag-box, .iti__country-name, .iti__dial-code {\\n vertical-align: middle; }\\n .iti__flag-box, .iti__country-name {\\n margin-right: 6px; }\\n .iti--allow-dropdown input, .iti--allow-dropdown input[type=text], .iti--allow-dropdown input[type=tel], .iti--separate-dial-code input, .iti--separate-dial-code input[type=text], .iti--separate-dial-code input[type=tel] {\\n padding-right: 6px;\\n padding-left: 52px;\\n margin-left: 0; }\\n .iti--allow-dropdown .iti__flag-container, .iti--separate-dial-code .iti__flag-container {\\n right: auto;\\n left: 0; }\\n .iti--allow-dropdown .iti__flag-container:hover {\\n cursor: pointer; }\\n .iti--allow-dropdown .iti__flag-container:hover .iti__selected-flag {\\n background-color: rgba(0, 0, 0, 0.05); }\\n .iti--allow-dropdown input[disabled] + .iti__flag-container:hover,\\n .iti--allow-dropdown input[readonly] + .iti__flag-container:hover {\\n cursor: default; }\\n .iti--allow-dropdown input[disabled] + .iti__flag-container:hover .iti__selected-flag,\\n .iti--allow-dropdown input[readonly] + .iti__flag-container:hover .iti__selected-flag {\\n background-color: transparent; }\\n .iti--separate-dial-code .iti__selected-flag {\\n background-color: rgba(0, 0, 0, 0.05); }\\n .iti--separate-dial-code .iti__selected-dial-code {\\n margin-left: 6px; }\\n .iti--container {\\n position: absolute;\\n top: -1000px;\\n left: -1000px;\\n z-index: 1060;\\n padding: 1px; }\\n .iti--container:hover {\\n cursor: pointer; }\\n\\n.iti-mobile .iti--container {\\n top: 30px;\\n bottom: 30px;\\n left: 30px;\\n right: 30px;\\n position: fixed; }\\n\\n.iti-mobile .iti__country-list {\\n max-height: 100%;\\n width: 100%; }\\n\\n.iti-mobile .iti__country {\\n padding: 10px 10px;\\n line-height: 1.5em; }\\n\\n.iti__flag {\\n width: 20px; }\\n .iti__flag.iti__be {\\n width: 18px; }\\n .iti__flag.iti__ch {\\n width: 15px; }\\n .iti__flag.iti__mc {\\n width: 19px; }\\n .iti__flag.iti__ne {\\n width: 18px; }\\n .iti__flag.iti__np {\\n width: 13px; }\\n .iti__flag.iti__va {\\n width: 15px; }\\n @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\\n .iti__flag {\\n background-size: 5652px 15px; } }\\n .iti__flag.iti__ac {\\n height: 10px;\\n background-position: 0px 0px; }\\n .iti__flag.iti__ad {\\n height: 14px;\\n background-position: -22px 0px; }\\n .iti__flag.iti__ae {\\n height: 10px;\\n background-position: -44px 0px; }\\n .iti__flag.iti__af {\\n height: 14px;\\n background-position: -66px 0px; }\\n .iti__flag.iti__ag {\\n height: 14px;\\n background-position: -88px 0px; }\\n .iti__flag.iti__ai {\\n height: 10px;\\n background-position: -110px 0px; }\\n .iti__flag.iti__al {\\n height: 15px;\\n background-position: -132px 0px; }\\n .iti__flag.iti__am {\\n height: 10px;\\n background-position: -154px 0px; }\\n .iti__flag.iti__ao {\\n height: 14px;\\n background-position: -176px 0px; }\\n .iti__flag.iti__aq {\\n height: 14px;\\n background-position: -198px 0px; }\\n .iti__flag.iti__ar {\\n height: 13px;\\n background-position: -220px 0px; }\\n .iti__flag.iti__as {\\n height: 10px;\\n background-position: -242px 0px; }\\n .iti__flag.iti__at {\\n height: 14px;\\n background-position: -264px 0px; }\\n .iti__flag.iti__au {\\n height: 10px;\\n background-position: -286px 0px; }\\n .iti__flag.iti__aw {\\n height: 14px;\\n background-position: -308px 0px; }\\n .iti__flag.iti__ax {\\n height: 13px;\\n background-position: -330px 0px; }\\n .iti__flag.iti__az {\\n height: 10px;\\n background-position: -352px 0px; }\\n .iti__flag.iti__ba {\\n height: 10px;\\n background-position: -374px 0px; }\\n .iti__flag.iti__bb {\\n height: 14px;\\n background-position: -396px 0px; }\\n .iti__flag.iti__bd {\\n height: 12px;\\n background-position: -418px 0px; }\\n .iti__flag.iti__be {\\n height: 15px;\\n background-position: -440px 0px; }\\n .iti__flag.iti__bf {\\n height: 14px;\\n background-position: -460px 0px; }\\n .iti__flag.iti__bg {\\n height: 12px;\\n background-position: -482px 0px; }\\n .iti__flag.iti__bh {\\n height: 12px;\\n background-position: -504px 0px; }\\n .iti__flag.iti__bi {\\n height: 12px;\\n background-position: -526px 0px; }\\n .iti__flag.iti__bj {\\n height: 14px;\\n background-position: -548px 0px; }\\n .iti__flag.iti__bl {\\n height: 14px;\\n background-position: -570px 0px; }\\n .iti__flag.iti__bm {\\n height: 10px;\\n background-position: -592px 0px; }\\n .iti__flag.iti__bn {\\n height: 10px;\\n background-position: -614px 0px; }\\n .iti__flag.iti__bo {\\n height: 14px;\\n background-position: -636px 0px; }\\n .iti__flag.iti__bq {\\n height: 14px;\\n background-position: -658px 0px; }\\n .iti__flag.iti__br {\\n height: 14px;\\n background-position: -680px 0px; }\\n .iti__flag.iti__bs {\\n height: 10px;\\n background-position: -702px 0px; }\\n .iti__flag.iti__bt {\\n height: 14px;\\n background-position: -724px 0px; }\\n .iti__flag.iti__bv {\\n height: 15px;\\n background-position: -746px 0px; }\\n .iti__flag.iti__bw {\\n height: 14px;\\n background-position: -768px 0px; }\\n .iti__flag.iti__by {\\n height: 10px;\\n background-position: -790px 0px; }\\n .iti__flag.iti__bz {\\n height: 14px;\\n background-position: -812px 0px; }\\n .iti__flag.iti__ca {\\n height: 10px;\\n background-position: -834px 0px; }\\n .iti__flag.iti__cc {\\n height: 10px;\\n background-position: -856px 0px; }\\n .iti__flag.iti__cd {\\n height: 15px;\\n background-position: -878px 0px; }\\n .iti__flag.iti__cf {\\n height: 14px;\\n background-position: -900px 0px; }\\n .iti__flag.iti__cg {\\n height: 14px;\\n background-position: -922px 0px; }\\n .iti__flag.iti__ch {\\n height: 15px;\\n background-position: -944px 0px; }\\n .iti__flag.iti__ci {\\n height: 14px;\\n background-position: -961px 0px; }\\n .iti__flag.iti__ck {\\n height: 10px;\\n background-position: -983px 0px; }\\n .iti__flag.iti__cl {\\n height: 14px;\\n background-position: -1005px 0px; }\\n .iti__flag.iti__cm {\\n height: 14px;\\n background-position: -1027px 0px; }\\n .iti__flag.iti__cn {\\n height: 14px;\\n background-position: -1049px 0px; }\\n .iti__flag.iti__co {\\n height: 14px;\\n background-position: -1071px 0px; }\\n .iti__flag.iti__cp {\\n height: 14px;\\n background-position: -1093px 0px; }\\n .iti__flag.iti__cr {\\n height: 12px;\\n background-position: -1115px 0px; }\\n .iti__flag.iti__cu {\\n height: 10px;\\n background-position: -1137px 0px; }\\n .iti__flag.iti__cv {\\n height: 12px;\\n background-position: -1159px 0px; }\\n .iti__flag.iti__cw {\\n height: 14px;\\n background-position: -1181px 0px; }\\n .iti__flag.iti__cx {\\n height: 10px;\\n background-position: -1203px 0px; }\\n .iti__flag.iti__cy {\\n height: 14px;\\n background-position: -1225px 0px; }\\n .iti__flag.iti__cz {\\n height: 14px;\\n background-position: -1247px 0px; }\\n .iti__flag.iti__de {\\n height: 12px;\\n background-position: -1269px 0px; }\\n .iti__flag.iti__dg {\\n height: 10px;\\n background-position: -1291px 0px; }\\n .iti__flag.iti__dj {\\n height: 14px;\\n background-position: -1313px 0px; }\\n .iti__flag.iti__dk {\\n height: 15px;\\n background-position: -1335px 0px; }\\n .iti__flag.iti__dm {\\n height: 10px;\\n background-position: -1357px 0px; }\\n .iti__flag.iti__do {\\n height: 14px;\\n background-position: -1379px 0px; }\\n .iti__flag.iti__dz {\\n height: 14px;\\n background-position: -1401px 0px; }\\n .iti__flag.iti__ea {\\n height: 14px;\\n background-position: -1423px 0px; }\\n .iti__flag.iti__ec {\\n height: 14px;\\n background-position: -1445px 0px; }\\n .iti__flag.iti__ee {\\n height: 13px;\\n background-position: -1467px 0px; }\\n .iti__flag.iti__eg {\\n height: 14px;\\n background-position: -1489px 0px; }\\n .iti__flag.iti__eh {\\n height: 10px;\\n background-position: -1511px 0px; }\\n .iti__flag.iti__er {\\n height: 10px;\\n background-position: -1533px 0px; }\\n .iti__flag.iti__es {\\n height: 14px;\\n background-position: -1555px 0px; }\\n .iti__flag.iti__et {\\n height: 10px;\\n background-position: -1577px 0px; }\\n .iti__flag.iti__eu {\\n height: 14px;\\n background-position: -1599px 0px; }\\n .iti__flag.iti__fi {\\n height: 12px;\\n background-position: -1621px 0px; }\\n .iti__flag.iti__fj {\\n height: 10px;\\n background-position: -1643px 0px; }\\n .iti__flag.iti__fk {\\n height: 10px;\\n background-position: -1665px 0px; }\\n .iti__flag.iti__fm {\\n height: 11px;\\n background-position: -1687px 0px; }\\n .iti__flag.iti__fo {\\n height: 15px;\\n background-position: -1709px 0px; }\\n .iti__flag.iti__fr {\\n height: 14px;\\n background-position: -1731px 0px; }\\n .iti__flag.iti__ga {\\n height: 15px;\\n background-position: -1753px 0px; }\\n .iti__flag.iti__gb {\\n height: 10px;\\n background-position: -1775px 0px; }\\n .iti__flag.iti__gd {\\n height: 12px;\\n background-position: -1797px 0px; }\\n .iti__flag.iti__ge {\\n height: 14px;\\n background-position: -1819px 0px; }\\n .iti__flag.iti__gf {\\n height: 14px;\\n background-position: -1841px 0px; }\\n .iti__flag.iti__gg {\\n height: 14px;\\n background-position: -1863px 0px; }\\n .iti__flag.iti__gh {\\n height: 14px;\\n background-position: -1885px 0px; }\\n .iti__flag.iti__gi {\\n height: 10px;\\n background-position: -1907px 0px; }\\n .iti__flag.iti__gl {\\n height: 14px;\\n background-position: -1929px 0px; }\\n .iti__flag.iti__gm {\\n height: 14px;\\n background-position: -1951px 0px; }\\n .iti__flag.iti__gn {\\n height: 14px;\\n background-position: -1973px 0px; }\\n .iti__flag.iti__gp {\\n height: 14px;\\n background-position: -1995px 0px; }\\n .iti__flag.iti__gq {\\n height: 14px;\\n background-position: -2017px 0px; }\\n .iti__flag.iti__gr {\\n height: 14px;\\n background-position: -2039px 0px; }\\n .iti__flag.iti__gs {\\n height: 10px;\\n background-position: -2061px 0px; }\\n .iti__flag.iti__gt {\\n height: 13px;\\n background-position: -2083px 0px; }\\n .iti__flag.iti__gu {\\n height: 11px;\\n background-position: -2105px 0px; }\\n .iti__flag.iti__gw {\\n height: 10px;\\n background-position: -2127px 0px; }\\n .iti__flag.iti__gy {\\n height: 12px;\\n background-position: -2149px 0px; }\\n .iti__flag.iti__hk {\\n height: 14px;\\n background-position: -2171px 0px; }\\n .iti__flag.iti__hm {\\n height: 10px;\\n background-position: -2193px 0px; }\\n .iti__flag.iti__hn {\\n height: 10px;\\n background-position: -2215px 0px; }\\n .iti__flag.iti__hr {\\n height: 10px;\\n background-position: -2237px 0px; }\\n .iti__flag.iti__ht {\\n height: 12px;\\n background-position: -2259px 0px; }\\n .iti__flag.iti__hu {\\n height: 10px;\\n background-position: -2281px 0px; }\\n .iti__flag.iti__ic {\\n height: 14px;\\n background-position: -2303px 0px; }\\n .iti__flag.iti__id {\\n height: 14px;\\n background-position: -2325px 0px; }\\n .iti__flag.iti__ie {\\n height: 10px;\\n background-position: -2347px 0px; }\\n .iti__flag.iti__il {\\n height: 15px;\\n background-position: -2369px 0px; }\\n .iti__flag.iti__im {\\n height: 10px;\\n background-position: -2391px 0px; }\\n .iti__flag.iti__in {\\n height: 14px;\\n background-position: -2413px 0px; }\\n .iti__flag.iti__io {\\n height: 10px;\\n background-position: -2435px 0px; }\\n .iti__flag.iti__iq {\\n height: 14px;\\n background-position: -2457px 0px; }\\n .iti__flag.iti__ir {\\n height: 12px;\\n background-position: -2479px 0px; }\\n .iti__flag.iti__is {\\n height: 15px;\\n background-position: -2501px 0px; }\\n .iti__flag.iti__it {\\n height: 14px;\\n background-position: -2523px 0px; }\\n .iti__flag.iti__je {\\n height: 12px;\\n background-position: -2545px 0px; }\\n .iti__flag.iti__jm {\\n height: 10px;\\n background-position: -2567px 0px; }\\n .iti__flag.iti__jo {\\n height: 10px;\\n background-position: -2589px 0px; }\\n .iti__flag.iti__jp {\\n height: 14px;\\n background-position: -2611px 0px; }\\n .iti__flag.iti__ke {\\n height: 14px;\\n background-position: -2633px 0px; }\\n .iti__flag.iti__kg {\\n height: 12px;\\n background-position: -2655px 0px; }\\n .iti__flag.iti__kh {\\n height: 13px;\\n background-position: -2677px 0px; }\\n .iti__flag.iti__ki {\\n height: 10px;\\n background-position: -2699px 0px; }\\n .iti__flag.iti__km {\\n height: 12px;\\n background-position: -2721px 0px; }\\n .iti__flag.iti__kn {\\n height: 14px;\\n background-position: -2743px 0px; }\\n .iti__flag.iti__kp {\\n height: 10px;\\n background-position: -2765px 0px; }\\n .iti__flag.iti__kr {\\n height: 14px;\\n background-position: -2787px 0px; }\\n .iti__flag.iti__kw {\\n height: 10px;\\n background-position: -2809px 0px; }\\n .iti__flag.iti__ky {\\n height: 10px;\\n background-position: -2831px 0px; }\\n .iti__flag.iti__kz {\\n height: 10px;\\n background-position: -2853px 0px; }\\n .iti__flag.iti__la {\\n height: 14px;\\n background-position: -2875px 0px; }\\n .iti__flag.iti__lb {\\n height: 14px;\\n background-position: -2897px 0px; }\\n .iti__flag.iti__lc {\\n height: 10px;\\n background-position: -2919px 0px; }\\n .iti__flag.iti__li {\\n height: 12px;\\n background-position: -2941px 0px; }\\n .iti__flag.iti__lk {\\n height: 10px;\\n background-position: -2963px 0px; }\\n .iti__flag.iti__lr {\\n height: 11px;\\n background-position: -2985px 0px; }\\n .iti__flag.iti__ls {\\n height: 14px;\\n background-position: -3007px 0px; }\\n .iti__flag.iti__lt {\\n height: 12px;\\n background-position: -3029px 0px; }\\n .iti__flag.iti__lu {\\n height: 12px;\\n background-position: -3051px 0px; }\\n .iti__flag.iti__lv {\\n height: 10px;\\n background-position: -3073px 0px; }\\n .iti__flag.iti__ly {\\n height: 10px;\\n background-position: -3095px 0px; }\\n .iti__flag.iti__ma {\\n height: 14px;\\n background-position: -3117px 0px; }\\n .iti__flag.iti__mc {\\n height: 15px;\\n background-position: -3139px 0px; }\\n .iti__flag.iti__md {\\n height: 10px;\\n background-position: -3160px 0px; }\\n .iti__flag.iti__me {\\n height: 10px;\\n background-position: -3182px 0px; }\\n .iti__flag.iti__mf {\\n height: 14px;\\n background-position: -3204px 0px; }\\n .iti__flag.iti__mg {\\n height: 14px;\\n background-position: -3226px 0px; }\\n .iti__flag.iti__mh {\\n height: 11px;\\n background-position: -3248px 0px; }\\n .iti__flag.iti__mk {\\n height: 10px;\\n background-position: -3270px 0px; }\\n .iti__flag.iti__ml {\\n height: 14px;\\n background-position: -3292px 0px; }\\n .iti__flag.iti__mm {\\n height: 14px;\\n background-position: -3314px 0px; }\\n .iti__flag.iti__mn {\\n height: 10px;\\n background-position: -3336px 0px; }\\n .iti__flag.iti__mo {\\n height: 14px;\\n background-position: -3358px 0px; }\\n .iti__flag.iti__mp {\\n height: 10px;\\n background-position: -3380px 0px; }\\n .iti__flag.iti__mq {\\n height: 14px;\\n background-position: -3402px 0px; }\\n .iti__flag.iti__mr {\\n height: 14px;\\n background-position: -3424px 0px; }\\n .iti__flag.iti__ms {\\n height: 10px;\\n background-position: -3446px 0px; }\\n .iti__flag.iti__mt {\\n height: 14px;\\n background-position: -3468px 0px; }\\n .iti__flag.iti__mu {\\n height: 14px;\\n background-position: -3490px 0px; }\\n .iti__flag.iti__mv {\\n height: 14px;\\n background-position: -3512px 0px; }\\n .iti__flag.iti__mw {\\n height: 14px;\\n background-position: -3534px 0px; }\\n .iti__flag.iti__mx {\\n height: 12px;\\n background-position: -3556px 0px; }\\n .iti__flag.iti__my {\\n height: 10px;\\n background-position: -3578px 0px; }\\n .iti__flag.iti__mz {\\n height: 14px;\\n background-position: -3600px 0px; }\\n .iti__flag.iti__na {\\n height: 14px;\\n background-position: -3622px 0px; }\\n .iti__flag.iti__nc {\\n height: 10px;\\n background-position: -3644px 0px; }\\n .iti__flag.iti__ne {\\n height: 15px;\\n background-position: -3666px 0px; }\\n .iti__flag.iti__nf {\\n height: 10px;\\n background-position: -3686px 0px; }\\n .iti__flag.iti__ng {\\n height: 10px;\\n background-position: -3708px 0px; }\\n .iti__flag.iti__ni {\\n height: 12px;\\n background-position: -3730px 0px; }\\n .iti__flag.iti__nl {\\n height: 14px;\\n background-position: -3752px 0px; }\\n .iti__flag.iti__no {\\n height: 15px;\\n background-position: -3774px 0px; }\\n .iti__flag.iti__np {\\n height: 15px;\\n background-position: -3796px 0px; }\\n .iti__flag.iti__nr {\\n height: 10px;\\n background-position: -3811px 0px; }\\n .iti__flag.iti__nu {\\n height: 10px;\\n background-position: -3833px 0px; }\\n .iti__flag.iti__nz {\\n height: 10px;\\n background-position: -3855px 0px; }\\n .iti__flag.iti__om {\\n height: 10px;\\n background-position: -3877px 0px; }\\n .iti__flag.iti__pa {\\n height: 14px;\\n background-position: -3899px 0px; }\\n .iti__flag.iti__pe {\\n height: 14px;\\n background-position: -3921px 0px; }\\n .iti__flag.iti__pf {\\n height: 14px;\\n background-position: -3943px 0px; }\\n .iti__flag.iti__pg {\\n height: 15px;\\n background-position: -3965px 0px; }\\n .iti__flag.iti__ph {\\n height: 10px;\\n background-position: -3987px 0px; }\\n .iti__flag.iti__pk {\\n height: 14px;\\n background-position: -4009px 0px; }\\n .iti__flag.iti__pl {\\n height: 13px;\\n background-position: -4031px 0px; }\\n .iti__flag.iti__pm {\\n height: 14px;\\n background-position: -4053px 0px; }\\n .iti__flag.iti__pn {\\n height: 10px;\\n background-position: -4075px 0px; }\\n .iti__flag.iti__pr {\\n height: 14px;\\n background-position: -4097px 0px; }\\n .iti__flag.iti__ps {\\n height: 10px;\\n background-position: -4119px 0px; }\\n .iti__flag.iti__pt {\\n height: 14px;\\n background-position: -4141px 0px; }\\n .iti__flag.iti__pw {\\n height: 13px;\\n background-position: -4163px 0px; }\\n .iti__flag.iti__py {\\n height: 11px;\\n background-position: -4185px 0px; }\\n .iti__flag.iti__qa {\\n height: 8px;\\n background-position: -4207px 0px; }\\n .iti__flag.iti__re {\\n height: 14px;\\n background-position: -4229px 0px; }\\n .iti__flag.iti__ro {\\n height: 14px;\\n background-position: -4251px 0px; }\\n .iti__flag.iti__rs {\\n height: 14px;\\n background-position: -4273px 0px; }\\n .iti__flag.iti__ru {\\n height: 14px;\\n background-position: -4295px 0px; }\\n .iti__flag.iti__rw {\\n height: 14px;\\n background-position: -4317px 0px; }\\n .iti__flag.iti__sa {\\n height: 14px;\\n background-position: -4339px 0px; }\\n .iti__flag.iti__sb {\\n height: 10px;\\n background-position: -4361px 0px; }\\n .iti__flag.iti__sc {\\n height: 10px;\\n background-position: -4383px 0px; }\\n .iti__flag.iti__sd {\\n height: 10px;\\n background-position: -4405px 0px; }\\n .iti__flag.iti__se {\\n height: 13px;\\n background-position: -4427px 0px; }\\n .iti__flag.iti__sg {\\n height: 14px;\\n background-position: -4449px 0px; }\\n .iti__flag.iti__sh {\\n height: 10px;\\n background-position: -4471px 0px; }\\n .iti__flag.iti__si {\\n height: 10px;\\n background-position: -4493px 0px; }\\n .iti__flag.iti__sj {\\n height: 15px;\\n background-position: -4515px 0px; }\\n .iti__flag.iti__sk {\\n height: 14px;\\n background-position: -4537px 0px; }\\n .iti__flag.iti__sl {\\n height: 14px;\\n background-position: -4559px 0px; }\\n .iti__flag.iti__sm {\\n height: 15px;\\n background-position: -4581px 0px; }\\n .iti__flag.iti__sn {\\n height: 14px;\\n background-position: -4603px 0px; }\\n .iti__flag.iti__so {\\n height: 14px;\\n background-position: -4625px 0px; }\\n .iti__flag.iti__sr {\\n height: 14px;\\n background-position: -4647px 0px; }\\n .iti__flag.iti__ss {\\n height: 10px;\\n background-position: -4669px 0px; }\\n .iti__flag.iti__st {\\n height: 10px;\\n background-position: -4691px 0px; }\\n .iti__flag.iti__sv {\\n height: 12px;\\n background-position: -4713px 0px; }\\n .iti__flag.iti__sx {\\n height: 14px;\\n background-position: -4735px 0px; }\\n .iti__flag.iti__sy {\\n height: 14px;\\n background-position: -4757px 0px; }\\n .iti__flag.iti__sz {\\n height: 14px;\\n background-position: -4779px 0px; }\\n .iti__flag.iti__ta {\\n height: 10px;\\n background-position: -4801px 0px; }\\n .iti__flag.iti__tc {\\n height: 10px;\\n background-position: -4823px 0px; }\\n .iti__flag.iti__td {\\n height: 14px;\\n background-position: -4845px 0px; }\\n .iti__flag.iti__tf {\\n height: 14px;\\n background-position: -4867px 0px; }\\n .iti__flag.iti__tg {\\n height: 13px;\\n background-position: -4889px 0px; }\\n .iti__flag.iti__th {\\n height: 14px;\\n background-position: -4911px 0px; }\\n .iti__flag.iti__tj {\\n height: 10px;\\n background-position: -4933px 0px; }\\n .iti__flag.iti__tk {\\n height: 10px;\\n background-position: -4955px 0px; }\\n .iti__flag.iti__tl {\\n height: 10px;\\n background-position: -4977px 0px; }\\n .iti__flag.iti__tm {\\n height: 14px;\\n background-position: -4999px 0px; }\\n .iti__flag.iti__tn {\\n height: 14px;\\n background-position: -5021px 0px; }\\n .iti__flag.iti__to {\\n height: 10px;\\n background-position: -5043px 0px; }\\n .iti__flag.iti__tr {\\n height: 14px;\\n background-position: -5065px 0px; }\\n .iti__flag.iti__tt {\\n height: 12px;\\n background-position: -5087px 0px; }\\n .iti__flag.iti__tv {\\n height: 10px;\\n background-position: -5109px 0px; }\\n .iti__flag.iti__tw {\\n height: 14px;\\n background-position: -5131px 0px; }\\n .iti__flag.iti__tz {\\n height: 14px;\\n background-position: -5153px 0px; }\\n .iti__flag.iti__ua {\\n height: 14px;\\n background-position: -5175px 0px; }\\n .iti__flag.iti__ug {\\n height: 14px;\\n background-position: -5197px 0px; }\\n .iti__flag.iti__um {\\n height: 11px;\\n background-position: -5219px 0px; }\\n .iti__flag.iti__un {\\n height: 14px;\\n background-position: -5241px 0px; }\\n .iti__flag.iti__us {\\n height: 11px;\\n background-position: -5263px 0px; }\\n .iti__flag.iti__uy {\\n height: 14px;\\n background-position: -5285px 0px; }\\n .iti__flag.iti__uz {\\n height: 10px;\\n background-position: -5307px 0px; }\\n .iti__flag.iti__va {\\n height: 15px;\\n background-position: -5329px 0px; }\\n .iti__flag.iti__vc {\\n height: 14px;\\n background-position: -5346px 0px; }\\n .iti__flag.iti__ve {\\n height: 14px;\\n background-position: -5368px 0px; }\\n .iti__flag.iti__vg {\\n height: 10px;\\n background-position: -5390px 0px; }\\n .iti__flag.iti__vi {\\n height: 14px;\\n background-position: -5412px 0px; }\\n .iti__flag.iti__vn {\\n height: 14px;\\n background-position: -5434px 0px; }\\n .iti__flag.iti__vu {\\n height: 12px;\\n background-position: -5456px 0px; }\\n .iti__flag.iti__wf {\\n height: 14px;\\n background-position: -5478px 0px; }\\n .iti__flag.iti__ws {\\n height: 10px;\\n background-position: -5500px 0px; }\\n .iti__flag.iti__xk {\\n height: 15px;\\n background-position: -5522px 0px; }\\n .iti__flag.iti__ye {\\n height: 14px;\\n background-position: -5544px 0px; }\\n .iti__flag.iti__yt {\\n height: 14px;\\n background-position: -5566px 0px; }\\n .iti__flag.iti__za {\\n height: 14px;\\n background-position: -5588px 0px; }\\n .iti__flag.iti__zm {\\n height: 14px;\\n background-position: -5610px 0px; }\\n .iti__flag.iti__zw {\\n height: 10px;\\n background-position: -5632px 0px; }\\n\\n.iti__flag {\\n height: 15px;\\n box-shadow: 0px 0px 1px 0px #888;\\n background-image: url(\\\"../img/flags.png\\\");\\n background-repeat: no-repeat;\\n background-color: #DBDBDB;\\n background-position: 20px 0; }\\n @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\\n .iti__flag {\\n background-image: url(\\\"../img/flags@2x.png\\\"); } }\\n\\n.iti__flag.iti__np {\\n background-color: transparent; }\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Accordion 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/accordion/#theming\\n */\\n.ui-accordion .ui-accordion-header {\\n\\tdisplay: block;\\n\\tcursor: pointer;\\n\\tposition: relative;\\n\\tmargin: 2px 0 0 0;\\n\\tpadding: .5em .5em .5em .7em;\\n\\tfont-size: 100%;\\n}\\n.ui-accordion .ui-accordion-content {\\n\\tpadding: 1em 2.2em;\\n\\tborder-top: 0;\\n\\toverflow: auto;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/accordion.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,cAAc;CACd,eAAe;CACf,kBAAkB;CAClB,iBAAiB;CACjB,4BAA4B;CAC5B,eAAe;AAChB;AACA;CACC,kBAAkB;CAClB,aAAa;CACb,cAAc;AACf\",\"sourcesContent\":[\"/*!\\n * jQuery UI Accordion 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/accordion/#theming\\n */\\n.ui-accordion .ui-accordion-header {\\n\\tdisplay: block;\\n\\tcursor: pointer;\\n\\tposition: relative;\\n\\tmargin: 2px 0 0 0;\\n\\tpadding: .5em .5em .5em .7em;\\n\\tfont-size: 100%;\\n}\\n.ui-accordion .ui-accordion-content {\\n\\tpadding: 1em 2.2em;\\n\\tborder-top: 0;\\n\\toverflow: auto;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Autocomplete 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/autocomplete/#theming\\n */\\n.ui-autocomplete {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tcursor: default;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/autocomplete.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,kBAAkB;CAClB,MAAM;CACN,OAAO;CACP,eAAe;AAChB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Autocomplete 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/autocomplete/#theming\\n */\\n.ui-autocomplete {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tcursor: default;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_0___ from \"-!../../../css-loader/dist/cjs.js!./core.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_1___ from \"-!../../../css-loader/dist/cjs.js!./accordion.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_2___ from \"-!../../../css-loader/dist/cjs.js!./autocomplete.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_3___ from \"-!../../../css-loader/dist/cjs.js!./button.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_4___ from \"-!../../../css-loader/dist/cjs.js!./checkboxradio.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_5___ from \"-!../../../css-loader/dist/cjs.js!./controlgroup.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_6___ from \"-!../../../css-loader/dist/cjs.js!./datepicker.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_7___ from \"-!../../../css-loader/dist/cjs.js!./dialog.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_8___ from \"-!../../../css-loader/dist/cjs.js!./draggable.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_9___ from \"-!../../../css-loader/dist/cjs.js!./menu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_10___ from \"-!../../../css-loader/dist/cjs.js!./progressbar.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_11___ from \"-!../../../css-loader/dist/cjs.js!./resizable.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_12___ from \"-!../../../css-loader/dist/cjs.js!./selectable.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_13___ from \"-!../../../css-loader/dist/cjs.js!./selectmenu.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_14___ from \"-!../../../css-loader/dist/cjs.js!./sortable.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_15___ from \"-!../../../css-loader/dist/cjs.js!./slider.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_16___ from \"-!../../../css-loader/dist/cjs.js!./spinner.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_17___ from \"-!../../../css-loader/dist/cjs.js!./tabs.css\";\nimport ___CSS_LOADER_AT_RULE_IMPORT_18___ from \"-!../../../css-loader/dist/cjs.js!./tooltip.css\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_1___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_2___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_3___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_4___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_5___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_6___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_7___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_8___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_9___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_10___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_11___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_12___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_13___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_14___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_15___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_16___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_17___);\n___CSS_LOADER_EXPORT___.i(___CSS_LOADER_AT_RULE_IMPORT_18___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI CSS Framework 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/category/theming/\\n */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/base.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE\",\"sourcesContent\":[\"/*!\\n * jQuery UI CSS Framework 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/category/theming/\\n */\\n@import url(\\\"core.css\\\");\\n\\n@import url(\\\"accordion.css\\\");\\n@import url(\\\"autocomplete.css\\\");\\n@import url(\\\"button.css\\\");\\n@import url(\\\"checkboxradio.css\\\");\\n@import url(\\\"controlgroup.css\\\");\\n@import url(\\\"datepicker.css\\\");\\n@import url(\\\"dialog.css\\\");\\n@import url(\\\"draggable.css\\\");\\n@import url(\\\"menu.css\\\");\\n@import url(\\\"progressbar.css\\\");\\n@import url(\\\"resizable.css\\\");\\n@import url(\\\"selectable.css\\\");\\n@import url(\\\"selectmenu.css\\\");\\n@import url(\\\"sortable.css\\\");\\n@import url(\\\"slider.css\\\");\\n@import url(\\\"spinner.css\\\");\\n@import url(\\\"tabs.css\\\");\\n@import url(\\\"tooltip.css\\\");\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Button 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/button/#theming\\n */\\n.ui-button {\\n\\tpadding: .4em 1em;\\n\\tdisplay: inline-block;\\n\\tposition: relative;\\n\\tline-height: normal;\\n\\tmargin-right: .1em;\\n\\tcursor: pointer;\\n\\tvertical-align: middle;\\n\\ttext-align: center;\\n\\t-webkit-user-select: none;\\n\\t-moz-user-select: none;\\n\\t-ms-user-select: none;\\n\\tuser-select: none;\\n\\n\\t/* Support: IE <= 11 */\\n\\toverflow: visible;\\n}\\n\\n.ui-button,\\n.ui-button:link,\\n.ui-button:visited,\\n.ui-button:hover,\\n.ui-button:active {\\n\\ttext-decoration: none;\\n}\\n\\n/* to make room for the icon, a width needs to be set here */\\n.ui-button-icon-only {\\n\\twidth: 2em;\\n\\tbox-sizing: border-box;\\n\\ttext-indent: -9999px;\\n\\twhite-space: nowrap;\\n}\\n\\n/* no icon support for input elements */\\ninput.ui-button.ui-button-icon-only {\\n\\ttext-indent: 0;\\n}\\n\\n/* button icon element(s) */\\n.ui-button-icon-only .ui-icon {\\n\\tposition: absolute;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\tmargin-top: -8px;\\n\\tmargin-left: -8px;\\n}\\n\\n.ui-button.ui-icon-notext .ui-icon {\\n\\tpadding: 0;\\n\\twidth: 2.1em;\\n\\theight: 2.1em;\\n\\ttext-indent: -9999px;\\n\\twhite-space: nowrap;\\n\\n}\\n\\ninput.ui-button.ui-icon-notext .ui-icon {\\n\\twidth: auto;\\n\\theight: auto;\\n\\ttext-indent: 0;\\n\\twhite-space: normal;\\n\\tpadding: .4em 1em;\\n}\\n\\n/* workarounds */\\n/* Support: Firefox 5 - 40 */\\ninput.ui-button::-moz-focus-inner,\\nbutton.ui-button::-moz-focus-inner {\\n\\tborder: 0;\\n\\tpadding: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/button.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,iBAAiB;CACjB,qBAAqB;CACrB,kBAAkB;CAClB,mBAAmB;CACnB,kBAAkB;CAClB,eAAe;CACf,sBAAsB;CACtB,kBAAkB;CAClB,yBAAyB;CACzB,sBAAsB;CACtB,qBAAqB;CACrB,iBAAiB;;CAEjB,sBAAsB;CACtB,iBAAiB;AAClB;;AAEA;;;;;CAKC,qBAAqB;AACtB;;AAEA,4DAA4D;AAC5D;CACC,UAAU;CACV,sBAAsB;CACtB,oBAAoB;CACpB,mBAAmB;AACpB;;AAEA,uCAAuC;AACvC;CACC,cAAc;AACf;;AAEA,2BAA2B;AAC3B;CACC,kBAAkB;CAClB,QAAQ;CACR,SAAS;CACT,gBAAgB;CAChB,iBAAiB;AAClB;;AAEA;CACC,UAAU;CACV,YAAY;CACZ,aAAa;CACb,oBAAoB;CACpB,mBAAmB;;AAEpB;;AAEA;CACC,WAAW;CACX,YAAY;CACZ,cAAc;CACd,mBAAmB;CACnB,iBAAiB;AAClB;;AAEA,gBAAgB;AAChB,4BAA4B;AAC5B;;CAEC,SAAS;CACT,UAAU;AACX\",\"sourcesContent\":[\"/*!\\n * jQuery UI Button 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/button/#theming\\n */\\n.ui-button {\\n\\tpadding: .4em 1em;\\n\\tdisplay: inline-block;\\n\\tposition: relative;\\n\\tline-height: normal;\\n\\tmargin-right: .1em;\\n\\tcursor: pointer;\\n\\tvertical-align: middle;\\n\\ttext-align: center;\\n\\t-webkit-user-select: none;\\n\\t-moz-user-select: none;\\n\\t-ms-user-select: none;\\n\\tuser-select: none;\\n\\n\\t/* Support: IE <= 11 */\\n\\toverflow: visible;\\n}\\n\\n.ui-button,\\n.ui-button:link,\\n.ui-button:visited,\\n.ui-button:hover,\\n.ui-button:active {\\n\\ttext-decoration: none;\\n}\\n\\n/* to make room for the icon, a width needs to be set here */\\n.ui-button-icon-only {\\n\\twidth: 2em;\\n\\tbox-sizing: border-box;\\n\\ttext-indent: -9999px;\\n\\twhite-space: nowrap;\\n}\\n\\n/* no icon support for input elements */\\ninput.ui-button.ui-button-icon-only {\\n\\ttext-indent: 0;\\n}\\n\\n/* button icon element(s) */\\n.ui-button-icon-only .ui-icon {\\n\\tposition: absolute;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\tmargin-top: -8px;\\n\\tmargin-left: -8px;\\n}\\n\\n.ui-button.ui-icon-notext .ui-icon {\\n\\tpadding: 0;\\n\\twidth: 2.1em;\\n\\theight: 2.1em;\\n\\ttext-indent: -9999px;\\n\\twhite-space: nowrap;\\n\\n}\\n\\ninput.ui-button.ui-icon-notext .ui-icon {\\n\\twidth: auto;\\n\\theight: auto;\\n\\ttext-indent: 0;\\n\\twhite-space: normal;\\n\\tpadding: .4em 1em;\\n}\\n\\n/* workarounds */\\n/* Support: Firefox 5 - 40 */\\ninput.ui-button::-moz-focus-inner,\\nbutton.ui-button::-moz-focus-inner {\\n\\tborder: 0;\\n\\tpadding: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Checkboxradio 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/checkboxradio/#theming\\n */\\n\\n.ui-checkboxradio-label .ui-icon-background {\\n\\tbox-shadow: inset 1px 1px 1px #ccc;\\n\\tborder-radius: .12em;\\n\\tborder: none;\\n}\\n.ui-checkboxradio-radio-label .ui-icon-background {\\n\\twidth: 16px;\\n\\theight: 16px;\\n\\tborder-radius: 1em;\\n\\toverflow: visible;\\n\\tborder: none;\\n}\\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\\n\\tbackground-image: none;\\n\\twidth: 8px;\\n\\theight: 8px;\\n\\tborder-width: 4px;\\n\\tborder-style: solid;\\n}\\n.ui-checkboxradio-disabled {\\n\\tpointer-events: none;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/checkboxradio.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;;AAEF;CACC,kCAAkC;CAClC,oBAAoB;CACpB,YAAY;AACb;AACA;CACC,WAAW;CACX,YAAY;CACZ,kBAAkB;CAClB,iBAAiB;CACjB,YAAY;AACb;AACA;;CAEC,sBAAsB;CACtB,UAAU;CACV,WAAW;CACX,iBAAiB;CACjB,mBAAmB;AACpB;AACA;CACC,oBAAoB;AACrB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Checkboxradio 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/checkboxradio/#theming\\n */\\n\\n.ui-checkboxradio-label .ui-icon-background {\\n\\tbox-shadow: inset 1px 1px 1px #ccc;\\n\\tborder-radius: .12em;\\n\\tborder: none;\\n}\\n.ui-checkboxradio-radio-label .ui-icon-background {\\n\\twidth: 16px;\\n\\theight: 16px;\\n\\tborder-radius: 1em;\\n\\toverflow: visible;\\n\\tborder: none;\\n}\\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\\n\\tbackground-image: none;\\n\\twidth: 8px;\\n\\theight: 8px;\\n\\tborder-width: 4px;\\n\\tborder-style: solid;\\n}\\n.ui-checkboxradio-disabled {\\n\\tpointer-events: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Controlgroup 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/controlgroup/#theming\\n */\\n\\n.ui-controlgroup {\\n\\tvertical-align: middle;\\n\\tdisplay: inline-block;\\n}\\n.ui-controlgroup > .ui-controlgroup-item {\\n\\tfloat: left;\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\n.ui-controlgroup > .ui-controlgroup-item:focus,\\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\\n\\tz-index: 9999;\\n}\\n.ui-controlgroup-vertical > .ui-controlgroup-item {\\n\\tdisplay: block;\\n\\tfloat: none;\\n\\twidth: 100%;\\n\\tmargin-top: 0;\\n\\tmargin-bottom: 0;\\n\\ttext-align: left;\\n}\\n.ui-controlgroup-vertical .ui-controlgroup-item {\\n\\tbox-sizing: border-box;\\n}\\n.ui-controlgroup .ui-controlgroup-label {\\n\\tpadding: .4em 1em;\\n}\\n.ui-controlgroup .ui-controlgroup-label span {\\n\\tfont-size: 80%;\\n}\\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\\n\\tborder-left: none;\\n}\\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\\n\\tborder-top: none;\\n}\\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\\n\\tborder-right: none;\\n}\\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\\n\\tborder-bottom: none;\\n}\\n\\n/* Spinner specific style fixes */\\n.ui-controlgroup-vertical .ui-spinner-input {\\n\\n\\t/* Support: IE8 only, Android < 4.4 only */\\n\\twidth: 75%;\\n\\twidth: calc( 100% - 2.4em );\\n}\\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\\n\\tborder-top-style: solid;\\n}\\n\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/controlgroup.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;;AAEF;CACC,sBAAsB;CACtB,qBAAqB;AACtB;AACA;CACC,WAAW;CACX,cAAc;CACd,eAAe;AAChB;AACA;;CAEC,aAAa;AACd;AACA;CACC,cAAc;CACd,WAAW;CACX,WAAW;CACX,aAAa;CACb,gBAAgB;CAChB,gBAAgB;AACjB;AACA;CACC,sBAAsB;AACvB;AACA;CACC,iBAAiB;AAClB;AACA;CACC,cAAc;AACf;AACA;CACC,iBAAiB;AAClB;AACA;CACC,gBAAgB;AACjB;AACA;CACC,kBAAkB;AACnB;AACA;CACC,mBAAmB;AACpB;;AAEA,iCAAiC;AACjC;;CAEC,0CAA0C;CAC1C,UAAU;CACV,2BAA2B;AAC5B;AACA;CACC,uBAAuB;AACxB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Controlgroup 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/controlgroup/#theming\\n */\\n\\n.ui-controlgroup {\\n\\tvertical-align: middle;\\n\\tdisplay: inline-block;\\n}\\n.ui-controlgroup > .ui-controlgroup-item {\\n\\tfloat: left;\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\n.ui-controlgroup > .ui-controlgroup-item:focus,\\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\\n\\tz-index: 9999;\\n}\\n.ui-controlgroup-vertical > .ui-controlgroup-item {\\n\\tdisplay: block;\\n\\tfloat: none;\\n\\twidth: 100%;\\n\\tmargin-top: 0;\\n\\tmargin-bottom: 0;\\n\\ttext-align: left;\\n}\\n.ui-controlgroup-vertical .ui-controlgroup-item {\\n\\tbox-sizing: border-box;\\n}\\n.ui-controlgroup .ui-controlgroup-label {\\n\\tpadding: .4em 1em;\\n}\\n.ui-controlgroup .ui-controlgroup-label span {\\n\\tfont-size: 80%;\\n}\\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\\n\\tborder-left: none;\\n}\\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\\n\\tborder-top: none;\\n}\\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\\n\\tborder-right: none;\\n}\\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\\n\\tborder-bottom: none;\\n}\\n\\n/* Spinner specific style fixes */\\n.ui-controlgroup-vertical .ui-spinner-input {\\n\\n\\t/* Support: IE8 only, Android < 4.4 only */\\n\\twidth: 75%;\\n\\twidth: calc( 100% - 2.4em );\\n}\\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\\n\\tborder-top-style: solid;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI CSS Framework 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/category/theming/\\n */\\n\\n/* Layout helpers\\n----------------------------------*/\\n.ui-helper-hidden {\\n\\tdisplay: none;\\n}\\n.ui-helper-hidden-accessible {\\n\\tborder: 0;\\n\\tclip: rect(0 0 0 0);\\n\\theight: 1px;\\n\\tmargin: -1px;\\n\\toverflow: hidden;\\n\\tpadding: 0;\\n\\tposition: absolute;\\n\\twidth: 1px;\\n}\\n.ui-helper-reset {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tborder: 0;\\n\\toutline: 0;\\n\\tline-height: 1.3;\\n\\ttext-decoration: none;\\n\\tfont-size: 100%;\\n\\tlist-style: none;\\n}\\n.ui-helper-clearfix:before,\\n.ui-helper-clearfix:after {\\n\\tcontent: \\\"\\\";\\n\\tdisplay: table;\\n\\tborder-collapse: collapse;\\n}\\n.ui-helper-clearfix:after {\\n\\tclear: both;\\n}\\n.ui-helper-zfix {\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\tfilter:Alpha(Opacity=0); /* support: IE8 */\\n}\\n\\n.ui-front {\\n\\tz-index: 100;\\n}\\n\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-disabled {\\n\\tcursor: default !important;\\n\\tpointer-events: none;\\n}\\n\\n\\n/* Icons\\n----------------------------------*/\\n.ui-icon {\\n\\tdisplay: inline-block;\\n\\tvertical-align: middle;\\n\\tmargin-top: -.25em;\\n\\tposition: relative;\\n\\ttext-indent: -99999px;\\n\\toverflow: hidden;\\n\\tbackground-repeat: no-repeat;\\n}\\n\\n.ui-widget-icon-block {\\n\\tleft: 50%;\\n\\tmargin-left: -8px;\\n\\tdisplay: block;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/core.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;;AAEF;mCACmC;AACnC;CACC,aAAa;AACd;AACA;CACC,SAAS;CACT,mBAAmB;CACnB,WAAW;CACX,YAAY;CACZ,gBAAgB;CAChB,UAAU;CACV,kBAAkB;CAClB,UAAU;AACX;AACA;CACC,SAAS;CACT,UAAU;CACV,SAAS;CACT,UAAU;CACV,gBAAgB;CAChB,qBAAqB;CACrB,eAAe;CACf,gBAAgB;AACjB;AACA;;CAEC,WAAW;CACX,cAAc;CACd,yBAAyB;AAC1B;AACA;CACC,WAAW;AACZ;AACA;CACC,WAAW;CACX,YAAY;CACZ,MAAM;CACN,OAAO;CACP,kBAAkB;CAClB,UAAU;CACV,uBAAuB,EAAE,iBAAiB;AAC3C;;AAEA;CACC,YAAY;AACb;;;AAGA;mCACmC;AACnC;CACC,0BAA0B;CAC1B,oBAAoB;AACrB;;;AAGA;mCACmC;AACnC;CACC,qBAAqB;CACrB,sBAAsB;CACtB,kBAAkB;CAClB,kBAAkB;CAClB,qBAAqB;CACrB,gBAAgB;CAChB,4BAA4B;AAC7B;;AAEA;CACC,SAAS;CACT,iBAAiB;CACjB,cAAc;AACf;;AAEA;mCACmC;;AAEnC,aAAa;AACb;CACC,eAAe;CACf,MAAM;CACN,OAAO;CACP,WAAW;CACX,YAAY;AACb\",\"sourcesContent\":[\"/*!\\n * jQuery UI CSS Framework 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/category/theming/\\n */\\n\\n/* Layout helpers\\n----------------------------------*/\\n.ui-helper-hidden {\\n\\tdisplay: none;\\n}\\n.ui-helper-hidden-accessible {\\n\\tborder: 0;\\n\\tclip: rect(0 0 0 0);\\n\\theight: 1px;\\n\\tmargin: -1px;\\n\\toverflow: hidden;\\n\\tpadding: 0;\\n\\tposition: absolute;\\n\\twidth: 1px;\\n}\\n.ui-helper-reset {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\tborder: 0;\\n\\toutline: 0;\\n\\tline-height: 1.3;\\n\\ttext-decoration: none;\\n\\tfont-size: 100%;\\n\\tlist-style: none;\\n}\\n.ui-helper-clearfix:before,\\n.ui-helper-clearfix:after {\\n\\tcontent: \\\"\\\";\\n\\tdisplay: table;\\n\\tborder-collapse: collapse;\\n}\\n.ui-helper-clearfix:after {\\n\\tclear: both;\\n}\\n.ui-helper-zfix {\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tposition: absolute;\\n\\topacity: 0;\\n\\tfilter:Alpha(Opacity=0); /* support: IE8 */\\n}\\n\\n.ui-front {\\n\\tz-index: 100;\\n}\\n\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-disabled {\\n\\tcursor: default !important;\\n\\tpointer-events: none;\\n}\\n\\n\\n/* Icons\\n----------------------------------*/\\n.ui-icon {\\n\\tdisplay: inline-block;\\n\\tvertical-align: middle;\\n\\tmargin-top: -.25em;\\n\\tposition: relative;\\n\\ttext-indent: -99999px;\\n\\toverflow: hidden;\\n\\tbackground-repeat: no-repeat;\\n}\\n\\n.ui-widget-icon-block {\\n\\tleft: 50%;\\n\\tmargin-left: -8px;\\n\\tdisplay: block;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Datepicker 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/datepicker/#theming\\n */\\n.ui-datepicker {\\n\\twidth: 17em;\\n\\tpadding: .2em .2em 0;\\n\\tdisplay: none;\\n}\\n.ui-datepicker .ui-datepicker-header {\\n\\tposition: relative;\\n\\tpadding: .2em 0;\\n}\\n.ui-datepicker .ui-datepicker-prev,\\n.ui-datepicker .ui-datepicker-next {\\n\\tposition: absolute;\\n\\ttop: 2px;\\n\\twidth: 1.8em;\\n\\theight: 1.8em;\\n}\\n.ui-datepicker .ui-datepicker-prev-hover,\\n.ui-datepicker .ui-datepicker-next-hover {\\n\\ttop: 1px;\\n}\\n.ui-datepicker .ui-datepicker-prev {\\n\\tleft: 2px;\\n}\\n.ui-datepicker .ui-datepicker-next {\\n\\tright: 2px;\\n}\\n.ui-datepicker .ui-datepicker-prev-hover {\\n\\tleft: 1px;\\n}\\n.ui-datepicker .ui-datepicker-next-hover {\\n\\tright: 1px;\\n}\\n.ui-datepicker .ui-datepicker-prev span,\\n.ui-datepicker .ui-datepicker-next span {\\n\\tdisplay: block;\\n\\tposition: absolute;\\n\\tleft: 50%;\\n\\tmargin-left: -8px;\\n\\ttop: 50%;\\n\\tmargin-top: -8px;\\n}\\n.ui-datepicker .ui-datepicker-title {\\n\\tmargin: 0 2.3em;\\n\\tline-height: 1.8em;\\n\\ttext-align: center;\\n}\\n.ui-datepicker .ui-datepicker-title select {\\n\\tfont-size: 1em;\\n\\tmargin: 1px 0;\\n}\\n.ui-datepicker select.ui-datepicker-month,\\n.ui-datepicker select.ui-datepicker-year {\\n\\twidth: 45%;\\n}\\n.ui-datepicker table {\\n\\twidth: 100%;\\n\\tfont-size: .9em;\\n\\tborder-collapse: collapse;\\n\\tmargin: 0 0 .4em;\\n}\\n.ui-datepicker th {\\n\\tpadding: .7em .3em;\\n\\ttext-align: center;\\n\\tfont-weight: bold;\\n\\tborder: 0;\\n}\\n.ui-datepicker td {\\n\\tborder: 0;\\n\\tpadding: 1px;\\n}\\n.ui-datepicker td span,\\n.ui-datepicker td a {\\n\\tdisplay: block;\\n\\tpadding: .2em;\\n\\ttext-align: right;\\n\\ttext-decoration: none;\\n}\\n.ui-datepicker .ui-datepicker-buttonpane {\\n\\tbackground-image: none;\\n\\tmargin: .7em 0 0 0;\\n\\tpadding: 0 .2em;\\n\\tborder-left: 0;\\n\\tborder-right: 0;\\n\\tborder-bottom: 0;\\n}\\n.ui-datepicker .ui-datepicker-buttonpane button {\\n\\tfloat: right;\\n\\tmargin: .5em .2em .4em;\\n\\tcursor: pointer;\\n\\tpadding: .2em .6em .3em .6em;\\n\\twidth: auto;\\n\\toverflow: visible;\\n}\\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\\n\\tfloat: left;\\n}\\n\\n/* with multiple calendars */\\n.ui-datepicker.ui-datepicker-multi {\\n\\twidth: auto;\\n}\\n.ui-datepicker-multi .ui-datepicker-group {\\n\\tfloat: left;\\n}\\n.ui-datepicker-multi .ui-datepicker-group table {\\n\\twidth: 95%;\\n\\tmargin: 0 auto .4em;\\n}\\n.ui-datepicker-multi-2 .ui-datepicker-group {\\n\\twidth: 50%;\\n}\\n.ui-datepicker-multi-3 .ui-datepicker-group {\\n\\twidth: 33.3%;\\n}\\n.ui-datepicker-multi-4 .ui-datepicker-group {\\n\\twidth: 25%;\\n}\\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\\n\\tborder-left-width: 0;\\n}\\n.ui-datepicker-multi .ui-datepicker-buttonpane {\\n\\tclear: left;\\n}\\n.ui-datepicker-row-break {\\n\\tclear: both;\\n\\twidth: 100%;\\n\\tfont-size: 0;\\n}\\n\\n/* RTL support */\\n.ui-datepicker-rtl {\\n\\tdirection: rtl;\\n}\\n.ui-datepicker-rtl .ui-datepicker-prev {\\n\\tright: 2px;\\n\\tleft: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-next {\\n\\tleft: 2px;\\n\\tright: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\\n\\tright: 1px;\\n\\tleft: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-next:hover {\\n\\tleft: 1px;\\n\\tright: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\\n\\tclear: right;\\n}\\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\\n\\tfloat: left;\\n}\\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\\n.ui-datepicker-rtl .ui-datepicker-group {\\n\\tfloat: right;\\n}\\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\\n\\tborder-right-width: 0;\\n\\tborder-left-width: 1px;\\n}\\n\\n/* Icons */\\n.ui-datepicker .ui-icon {\\n\\tdisplay: block;\\n\\ttext-indent: -99999px;\\n\\toverflow: hidden;\\n\\tbackground-repeat: no-repeat;\\n\\tleft: .5em;\\n\\ttop: .3em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/datepicker.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,WAAW;CACX,oBAAoB;CACpB,aAAa;AACd;AACA;CACC,kBAAkB;CAClB,eAAe;AAChB;AACA;;CAEC,kBAAkB;CAClB,QAAQ;CACR,YAAY;CACZ,aAAa;AACd;AACA;;CAEC,QAAQ;AACT;AACA;CACC,SAAS;AACV;AACA;CACC,UAAU;AACX;AACA;CACC,SAAS;AACV;AACA;CACC,UAAU;AACX;AACA;;CAEC,cAAc;CACd,kBAAkB;CAClB,SAAS;CACT,iBAAiB;CACjB,QAAQ;CACR,gBAAgB;AACjB;AACA;CACC,eAAe;CACf,kBAAkB;CAClB,kBAAkB;AACnB;AACA;CACC,cAAc;CACd,aAAa;AACd;AACA;;CAEC,UAAU;AACX;AACA;CACC,WAAW;CACX,eAAe;CACf,yBAAyB;CACzB,gBAAgB;AACjB;AACA;CACC,kBAAkB;CAClB,kBAAkB;CAClB,iBAAiB;CACjB,SAAS;AACV;AACA;CACC,SAAS;CACT,YAAY;AACb;AACA;;CAEC,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,qBAAqB;AACtB;AACA;CACC,sBAAsB;CACtB,kBAAkB;CAClB,eAAe;CACf,cAAc;CACd,eAAe;CACf,gBAAgB;AACjB;AACA;CACC,YAAY;CACZ,sBAAsB;CACtB,eAAe;CACf,4BAA4B;CAC5B,WAAW;CACX,iBAAiB;AAClB;AACA;CACC,WAAW;AACZ;;AAEA,4BAA4B;AAC5B;CACC,WAAW;AACZ;AACA;CACC,WAAW;AACZ;AACA;CACC,UAAU;CACV,mBAAmB;AACpB;AACA;CACC,UAAU;AACX;AACA;CACC,YAAY;AACb;AACA;CACC,UAAU;AACX;AACA;;CAEC,oBAAoB;AACrB;AACA;CACC,WAAW;AACZ;AACA;CACC,WAAW;CACX,WAAW;CACX,YAAY;AACb;;AAEA,gBAAgB;AAChB;CACC,cAAc;AACf;AACA;CACC,UAAU;CACV,UAAU;AACX;AACA;CACC,SAAS;CACT,WAAW;AACZ;AACA;CACC,UAAU;CACV,UAAU;AACX;AACA;CACC,SAAS;CACT,WAAW;AACZ;AACA;CACC,YAAY;AACb;AACA;CACC,WAAW;AACZ;AACA;;CAEC,YAAY;AACb;AACA;;CAEC,qBAAqB;CACrB,sBAAsB;AACvB;;AAEA,UAAU;AACV;CACC,cAAc;CACd,qBAAqB;CACrB,gBAAgB;CAChB,4BAA4B;CAC5B,UAAU;CACV,SAAS;AACV\",\"sourcesContent\":[\"/*!\\n * jQuery UI Datepicker 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/datepicker/#theming\\n */\\n.ui-datepicker {\\n\\twidth: 17em;\\n\\tpadding: .2em .2em 0;\\n\\tdisplay: none;\\n}\\n.ui-datepicker .ui-datepicker-header {\\n\\tposition: relative;\\n\\tpadding: .2em 0;\\n}\\n.ui-datepicker .ui-datepicker-prev,\\n.ui-datepicker .ui-datepicker-next {\\n\\tposition: absolute;\\n\\ttop: 2px;\\n\\twidth: 1.8em;\\n\\theight: 1.8em;\\n}\\n.ui-datepicker .ui-datepicker-prev-hover,\\n.ui-datepicker .ui-datepicker-next-hover {\\n\\ttop: 1px;\\n}\\n.ui-datepicker .ui-datepicker-prev {\\n\\tleft: 2px;\\n}\\n.ui-datepicker .ui-datepicker-next {\\n\\tright: 2px;\\n}\\n.ui-datepicker .ui-datepicker-prev-hover {\\n\\tleft: 1px;\\n}\\n.ui-datepicker .ui-datepicker-next-hover {\\n\\tright: 1px;\\n}\\n.ui-datepicker .ui-datepicker-prev span,\\n.ui-datepicker .ui-datepicker-next span {\\n\\tdisplay: block;\\n\\tposition: absolute;\\n\\tleft: 50%;\\n\\tmargin-left: -8px;\\n\\ttop: 50%;\\n\\tmargin-top: -8px;\\n}\\n.ui-datepicker .ui-datepicker-title {\\n\\tmargin: 0 2.3em;\\n\\tline-height: 1.8em;\\n\\ttext-align: center;\\n}\\n.ui-datepicker .ui-datepicker-title select {\\n\\tfont-size: 1em;\\n\\tmargin: 1px 0;\\n}\\n.ui-datepicker select.ui-datepicker-month,\\n.ui-datepicker select.ui-datepicker-year {\\n\\twidth: 45%;\\n}\\n.ui-datepicker table {\\n\\twidth: 100%;\\n\\tfont-size: .9em;\\n\\tborder-collapse: collapse;\\n\\tmargin: 0 0 .4em;\\n}\\n.ui-datepicker th {\\n\\tpadding: .7em .3em;\\n\\ttext-align: center;\\n\\tfont-weight: bold;\\n\\tborder: 0;\\n}\\n.ui-datepicker td {\\n\\tborder: 0;\\n\\tpadding: 1px;\\n}\\n.ui-datepicker td span,\\n.ui-datepicker td a {\\n\\tdisplay: block;\\n\\tpadding: .2em;\\n\\ttext-align: right;\\n\\ttext-decoration: none;\\n}\\n.ui-datepicker .ui-datepicker-buttonpane {\\n\\tbackground-image: none;\\n\\tmargin: .7em 0 0 0;\\n\\tpadding: 0 .2em;\\n\\tborder-left: 0;\\n\\tborder-right: 0;\\n\\tborder-bottom: 0;\\n}\\n.ui-datepicker .ui-datepicker-buttonpane button {\\n\\tfloat: right;\\n\\tmargin: .5em .2em .4em;\\n\\tcursor: pointer;\\n\\tpadding: .2em .6em .3em .6em;\\n\\twidth: auto;\\n\\toverflow: visible;\\n}\\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\\n\\tfloat: left;\\n}\\n\\n/* with multiple calendars */\\n.ui-datepicker.ui-datepicker-multi {\\n\\twidth: auto;\\n}\\n.ui-datepicker-multi .ui-datepicker-group {\\n\\tfloat: left;\\n}\\n.ui-datepicker-multi .ui-datepicker-group table {\\n\\twidth: 95%;\\n\\tmargin: 0 auto .4em;\\n}\\n.ui-datepicker-multi-2 .ui-datepicker-group {\\n\\twidth: 50%;\\n}\\n.ui-datepicker-multi-3 .ui-datepicker-group {\\n\\twidth: 33.3%;\\n}\\n.ui-datepicker-multi-4 .ui-datepicker-group {\\n\\twidth: 25%;\\n}\\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\\n\\tborder-left-width: 0;\\n}\\n.ui-datepicker-multi .ui-datepicker-buttonpane {\\n\\tclear: left;\\n}\\n.ui-datepicker-row-break {\\n\\tclear: both;\\n\\twidth: 100%;\\n\\tfont-size: 0;\\n}\\n\\n/* RTL support */\\n.ui-datepicker-rtl {\\n\\tdirection: rtl;\\n}\\n.ui-datepicker-rtl .ui-datepicker-prev {\\n\\tright: 2px;\\n\\tleft: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-next {\\n\\tleft: 2px;\\n\\tright: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\\n\\tright: 1px;\\n\\tleft: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-next:hover {\\n\\tleft: 1px;\\n\\tright: auto;\\n}\\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\\n\\tclear: right;\\n}\\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\\n\\tfloat: left;\\n}\\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\\n.ui-datepicker-rtl .ui-datepicker-group {\\n\\tfloat: right;\\n}\\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\\n\\tborder-right-width: 0;\\n\\tborder-left-width: 1px;\\n}\\n\\n/* Icons */\\n.ui-datepicker .ui-icon {\\n\\tdisplay: block;\\n\\ttext-indent: -99999px;\\n\\toverflow: hidden;\\n\\tbackground-repeat: no-repeat;\\n\\tleft: .5em;\\n\\ttop: .3em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Dialog 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/dialog/#theming\\n */\\n.ui-dialog {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tpadding: .2em;\\n\\toutline: 0;\\n}\\n.ui-dialog .ui-dialog-titlebar {\\n\\tpadding: .4em 1em;\\n\\tposition: relative;\\n}\\n.ui-dialog .ui-dialog-title {\\n\\tfloat: left;\\n\\tmargin: .1em 0;\\n\\twhite-space: nowrap;\\n\\twidth: 90%;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.ui-dialog .ui-dialog-titlebar-close {\\n\\tposition: absolute;\\n\\tright: .3em;\\n\\ttop: 50%;\\n\\twidth: 20px;\\n\\tmargin: -10px 0 0 0;\\n\\tpadding: 1px;\\n\\theight: 20px;\\n}\\n.ui-dialog .ui-dialog-content {\\n\\tposition: relative;\\n\\tborder: 0;\\n\\tpadding: .5em 1em;\\n\\tbackground: none;\\n\\toverflow: auto;\\n}\\n.ui-dialog .ui-dialog-buttonpane {\\n\\ttext-align: left;\\n\\tborder-width: 1px 0 0 0;\\n\\tbackground-image: none;\\n\\tmargin-top: .5em;\\n\\tpadding: .3em 1em .5em .4em;\\n}\\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\\n\\tfloat: right;\\n}\\n.ui-dialog .ui-dialog-buttonpane button {\\n\\tmargin: .5em .4em .5em 0;\\n\\tcursor: pointer;\\n}\\n.ui-dialog .ui-resizable-n {\\n\\theight: 2px;\\n\\ttop: 0;\\n}\\n.ui-dialog .ui-resizable-e {\\n\\twidth: 2px;\\n\\tright: 0;\\n}\\n.ui-dialog .ui-resizable-s {\\n\\theight: 2px;\\n\\tbottom: 0;\\n}\\n.ui-dialog .ui-resizable-w {\\n\\twidth: 2px;\\n\\tleft: 0;\\n}\\n.ui-dialog .ui-resizable-se,\\n.ui-dialog .ui-resizable-sw,\\n.ui-dialog .ui-resizable-ne,\\n.ui-dialog .ui-resizable-nw {\\n\\twidth: 7px;\\n\\theight: 7px;\\n}\\n.ui-dialog .ui-resizable-se {\\n\\tright: 0;\\n\\tbottom: 0;\\n}\\n.ui-dialog .ui-resizable-sw {\\n\\tleft: 0;\\n\\tbottom: 0;\\n}\\n.ui-dialog .ui-resizable-ne {\\n\\tright: 0;\\n\\ttop: 0;\\n}\\n.ui-dialog .ui-resizable-nw {\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n.ui-draggable .ui-dialog-titlebar {\\n\\tcursor: move;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/dialog.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,kBAAkB;CAClB,MAAM;CACN,OAAO;CACP,aAAa;CACb,UAAU;AACX;AACA;CACC,iBAAiB;CACjB,kBAAkB;AACnB;AACA;CACC,WAAW;CACX,cAAc;CACd,mBAAmB;CACnB,UAAU;CACV,gBAAgB;CAChB,uBAAuB;AACxB;AACA;CACC,kBAAkB;CAClB,WAAW;CACX,QAAQ;CACR,WAAW;CACX,mBAAmB;CACnB,YAAY;CACZ,YAAY;AACb;AACA;CACC,kBAAkB;CAClB,SAAS;CACT,iBAAiB;CACjB,gBAAgB;CAChB,cAAc;AACf;AACA;CACC,gBAAgB;CAChB,uBAAuB;CACvB,sBAAsB;CACtB,gBAAgB;CAChB,2BAA2B;AAC5B;AACA;CACC,YAAY;AACb;AACA;CACC,wBAAwB;CACxB,eAAe;AAChB;AACA;CACC,WAAW;CACX,MAAM;AACP;AACA;CACC,UAAU;CACV,QAAQ;AACT;AACA;CACC,WAAW;CACX,SAAS;AACV;AACA;CACC,UAAU;CACV,OAAO;AACR;AACA;;;;CAIC,UAAU;CACV,WAAW;AACZ;AACA;CACC,QAAQ;CACR,SAAS;AACV;AACA;CACC,OAAO;CACP,SAAS;AACV;AACA;CACC,QAAQ;CACR,MAAM;AACP;AACA;CACC,OAAO;CACP,MAAM;AACP;AACA;CACC,YAAY;AACb\",\"sourcesContent\":[\"/*!\\n * jQuery UI Dialog 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/dialog/#theming\\n */\\n.ui-dialog {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tpadding: .2em;\\n\\toutline: 0;\\n}\\n.ui-dialog .ui-dialog-titlebar {\\n\\tpadding: .4em 1em;\\n\\tposition: relative;\\n}\\n.ui-dialog .ui-dialog-title {\\n\\tfloat: left;\\n\\tmargin: .1em 0;\\n\\twhite-space: nowrap;\\n\\twidth: 90%;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.ui-dialog .ui-dialog-titlebar-close {\\n\\tposition: absolute;\\n\\tright: .3em;\\n\\ttop: 50%;\\n\\twidth: 20px;\\n\\tmargin: -10px 0 0 0;\\n\\tpadding: 1px;\\n\\theight: 20px;\\n}\\n.ui-dialog .ui-dialog-content {\\n\\tposition: relative;\\n\\tborder: 0;\\n\\tpadding: .5em 1em;\\n\\tbackground: none;\\n\\toverflow: auto;\\n}\\n.ui-dialog .ui-dialog-buttonpane {\\n\\ttext-align: left;\\n\\tborder-width: 1px 0 0 0;\\n\\tbackground-image: none;\\n\\tmargin-top: .5em;\\n\\tpadding: .3em 1em .5em .4em;\\n}\\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\\n\\tfloat: right;\\n}\\n.ui-dialog .ui-dialog-buttonpane button {\\n\\tmargin: .5em .4em .5em 0;\\n\\tcursor: pointer;\\n}\\n.ui-dialog .ui-resizable-n {\\n\\theight: 2px;\\n\\ttop: 0;\\n}\\n.ui-dialog .ui-resizable-e {\\n\\twidth: 2px;\\n\\tright: 0;\\n}\\n.ui-dialog .ui-resizable-s {\\n\\theight: 2px;\\n\\tbottom: 0;\\n}\\n.ui-dialog .ui-resizable-w {\\n\\twidth: 2px;\\n\\tleft: 0;\\n}\\n.ui-dialog .ui-resizable-se,\\n.ui-dialog .ui-resizable-sw,\\n.ui-dialog .ui-resizable-ne,\\n.ui-dialog .ui-resizable-nw {\\n\\twidth: 7px;\\n\\theight: 7px;\\n}\\n.ui-dialog .ui-resizable-se {\\n\\tright: 0;\\n\\tbottom: 0;\\n}\\n.ui-dialog .ui-resizable-sw {\\n\\tleft: 0;\\n\\tbottom: 0;\\n}\\n.ui-dialog .ui-resizable-ne {\\n\\tright: 0;\\n\\ttop: 0;\\n}\\n.ui-dialog .ui-resizable-nw {\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n.ui-draggable .ui-dialog-titlebar {\\n\\tcursor: move;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Draggable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-draggable-handle {\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/draggable.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;EAOE;AACF;CACC,sBAAsB;CACtB,kBAAkB;AACnB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Draggable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-draggable-handle {\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Menu 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/menu/#theming\\n */\\n.ui-menu {\\n\\tlist-style: none;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tdisplay: block;\\n\\toutline: 0;\\n}\\n.ui-menu .ui-menu {\\n\\tposition: absolute;\\n}\\n.ui-menu .ui-menu-item {\\n\\tmargin: 0;\\n\\tcursor: pointer;\\n\\t/* support: IE10, see #8844 */\\n\\tlist-style-image: url(\\\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\\\");\\n}\\n.ui-menu .ui-menu-item-wrapper {\\n\\tposition: relative;\\n\\tpadding: 3px 1em 3px .4em;\\n}\\n.ui-menu .ui-menu-divider {\\n\\tmargin: 5px 0;\\n\\theight: 0;\\n\\tfont-size: 0;\\n\\tline-height: 0;\\n\\tborder-width: 1px 0 0 0;\\n}\\n.ui-menu .ui-state-focus,\\n.ui-menu .ui-state-active {\\n\\tmargin: -1px;\\n}\\n\\n/* icon support */\\n.ui-menu-icons {\\n\\tposition: relative;\\n}\\n.ui-menu-icons .ui-menu-item-wrapper {\\n\\tpadding-left: 2em;\\n}\\n\\n/* left-aligned */\\n.ui-menu .ui-icon {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tleft: .2em;\\n\\tmargin: auto 0;\\n}\\n\\n/* right-aligned */\\n.ui-menu .ui-menu-icon {\\n\\tleft: auto;\\n\\tright: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/menu.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,gBAAgB;CAChB,UAAU;CACV,SAAS;CACT,cAAc;CACd,UAAU;AACX;AACA;CACC,kBAAkB;AACnB;AACA;CACC,SAAS;CACT,eAAe;CACf,6BAA6B;CAC7B,uGAAuG;AACxG;AACA;CACC,kBAAkB;CAClB,yBAAyB;AAC1B;AACA;CACC,aAAa;CACb,SAAS;CACT,YAAY;CACZ,cAAc;CACd,uBAAuB;AACxB;AACA;;CAEC,YAAY;AACb;;AAEA,iBAAiB;AACjB;CACC,kBAAkB;AACnB;AACA;CACC,iBAAiB;AAClB;;AAEA,iBAAiB;AACjB;CACC,kBAAkB;CAClB,MAAM;CACN,SAAS;CACT,UAAU;CACV,cAAc;AACf;;AAEA,kBAAkB;AAClB;CACC,UAAU;CACV,QAAQ;AACT\",\"sourcesContent\":[\"/*!\\n * jQuery UI Menu 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/menu/#theming\\n */\\n.ui-menu {\\n\\tlist-style: none;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tdisplay: block;\\n\\toutline: 0;\\n}\\n.ui-menu .ui-menu {\\n\\tposition: absolute;\\n}\\n.ui-menu .ui-menu-item {\\n\\tmargin: 0;\\n\\tcursor: pointer;\\n\\t/* support: IE10, see #8844 */\\n\\tlist-style-image: url(\\\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\\\");\\n}\\n.ui-menu .ui-menu-item-wrapper {\\n\\tposition: relative;\\n\\tpadding: 3px 1em 3px .4em;\\n}\\n.ui-menu .ui-menu-divider {\\n\\tmargin: 5px 0;\\n\\theight: 0;\\n\\tfont-size: 0;\\n\\tline-height: 0;\\n\\tborder-width: 1px 0 0 0;\\n}\\n.ui-menu .ui-state-focus,\\n.ui-menu .ui-state-active {\\n\\tmargin: -1px;\\n}\\n\\n/* icon support */\\n.ui-menu-icons {\\n\\tposition: relative;\\n}\\n.ui-menu-icons .ui-menu-item-wrapper {\\n\\tpadding-left: 2em;\\n}\\n\\n/* left-aligned */\\n.ui-menu .ui-icon {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tbottom: 0;\\n\\tleft: .2em;\\n\\tmargin: auto 0;\\n}\\n\\n/* right-aligned */\\n.ui-menu .ui-menu-icon {\\n\\tleft: auto;\\n\\tright: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Progressbar 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/progressbar/#theming\\n */\\n.ui-progressbar {\\n\\theight: 2em;\\n\\ttext-align: left;\\n\\toverflow: hidden;\\n}\\n.ui-progressbar .ui-progressbar-value {\\n\\tmargin: -1px;\\n\\theight: 100%;\\n}\\n.ui-progressbar .ui-progressbar-overlay {\\n\\tbackground: url(\\\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\\\");\\n\\theight: 100%;\\n\\tfilter: alpha(opacity=25); /* support: IE8 */\\n\\topacity: 0.25;\\n}\\n.ui-progressbar-indeterminate .ui-progressbar-value {\\n\\tbackground-image: none;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/progressbar.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,WAAW;CACX,gBAAgB;CAChB,gBAAgB;AACjB;AACA;CACC,YAAY;CACZ,YAAY;AACb;AACA;CACC,yzEAAyzE;CACzzE,YAAY;CACZ,yBAAyB,EAAE,iBAAiB;CAC5C,aAAa;AACd;AACA;CACC,sBAAsB;AACvB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Progressbar 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/progressbar/#theming\\n */\\n.ui-progressbar {\\n\\theight: 2em;\\n\\ttext-align: left;\\n\\toverflow: hidden;\\n}\\n.ui-progressbar .ui-progressbar-value {\\n\\tmargin: -1px;\\n\\theight: 100%;\\n}\\n.ui-progressbar .ui-progressbar-overlay {\\n\\tbackground: url(\\\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\\\");\\n\\theight: 100%;\\n\\tfilter: alpha(opacity=25); /* support: IE8 */\\n\\topacity: 0.25;\\n}\\n.ui-progressbar-indeterminate .ui-progressbar-value {\\n\\tbackground-image: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Resizable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-resizable {\\n\\tposition: relative;\\n}\\n.ui-resizable-handle {\\n\\tposition: absolute;\\n\\tfont-size: 0.1px;\\n\\tdisplay: block;\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n.ui-resizable-disabled .ui-resizable-handle,\\n.ui-resizable-autohide .ui-resizable-handle {\\n\\tdisplay: none;\\n}\\n.ui-resizable-n {\\n\\tcursor: n-resize;\\n\\theight: 7px;\\n\\twidth: 100%;\\n\\ttop: -5px;\\n\\tleft: 0;\\n}\\n.ui-resizable-s {\\n\\tcursor: s-resize;\\n\\theight: 7px;\\n\\twidth: 100%;\\n\\tbottom: -5px;\\n\\tleft: 0;\\n}\\n.ui-resizable-e {\\n\\tcursor: e-resize;\\n\\twidth: 7px;\\n\\tright: -5px;\\n\\ttop: 0;\\n\\theight: 100%;\\n}\\n.ui-resizable-w {\\n\\tcursor: w-resize;\\n\\twidth: 7px;\\n\\tleft: -5px;\\n\\ttop: 0;\\n\\theight: 100%;\\n}\\n.ui-resizable-se {\\n\\tcursor: se-resize;\\n\\twidth: 12px;\\n\\theight: 12px;\\n\\tright: 1px;\\n\\tbottom: 1px;\\n}\\n.ui-resizable-sw {\\n\\tcursor: sw-resize;\\n\\twidth: 9px;\\n\\theight: 9px;\\n\\tleft: -5px;\\n\\tbottom: -5px;\\n}\\n.ui-resizable-nw {\\n\\tcursor: nw-resize;\\n\\twidth: 9px;\\n\\theight: 9px;\\n\\tleft: -5px;\\n\\ttop: -5px;\\n}\\n.ui-resizable-ne {\\n\\tcursor: ne-resize;\\n\\twidth: 9px;\\n\\theight: 9px;\\n\\tright: -5px;\\n\\ttop: -5px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/resizable.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;EAOE;AACF;CACC,kBAAkB;AACnB;AACA;CACC,kBAAkB;CAClB,gBAAgB;CAChB,cAAc;CACd,sBAAsB;CACtB,kBAAkB;AACnB;AACA;;CAEC,aAAa;AACd;AACA;CACC,gBAAgB;CAChB,WAAW;CACX,WAAW;CACX,SAAS;CACT,OAAO;AACR;AACA;CACC,gBAAgB;CAChB,WAAW;CACX,WAAW;CACX,YAAY;CACZ,OAAO;AACR;AACA;CACC,gBAAgB;CAChB,UAAU;CACV,WAAW;CACX,MAAM;CACN,YAAY;AACb;AACA;CACC,gBAAgB;CAChB,UAAU;CACV,UAAU;CACV,MAAM;CACN,YAAY;AACb;AACA;CACC,iBAAiB;CACjB,WAAW;CACX,YAAY;CACZ,UAAU;CACV,WAAW;AACZ;AACA;CACC,iBAAiB;CACjB,UAAU;CACV,WAAW;CACX,UAAU;CACV,YAAY;AACb;AACA;CACC,iBAAiB;CACjB,UAAU;CACV,WAAW;CACX,UAAU;CACV,SAAS;AACV;AACA;CACC,iBAAiB;CACjB,UAAU;CACV,WAAW;CACX,WAAW;CACX,SAAS;AACV\",\"sourcesContent\":[\"/*!\\n * jQuery UI Resizable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-resizable {\\n\\tposition: relative;\\n}\\n.ui-resizable-handle {\\n\\tposition: absolute;\\n\\tfont-size: 0.1px;\\n\\tdisplay: block;\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n.ui-resizable-disabled .ui-resizable-handle,\\n.ui-resizable-autohide .ui-resizable-handle {\\n\\tdisplay: none;\\n}\\n.ui-resizable-n {\\n\\tcursor: n-resize;\\n\\theight: 7px;\\n\\twidth: 100%;\\n\\ttop: -5px;\\n\\tleft: 0;\\n}\\n.ui-resizable-s {\\n\\tcursor: s-resize;\\n\\theight: 7px;\\n\\twidth: 100%;\\n\\tbottom: -5px;\\n\\tleft: 0;\\n}\\n.ui-resizable-e {\\n\\tcursor: e-resize;\\n\\twidth: 7px;\\n\\tright: -5px;\\n\\ttop: 0;\\n\\theight: 100%;\\n}\\n.ui-resizable-w {\\n\\tcursor: w-resize;\\n\\twidth: 7px;\\n\\tleft: -5px;\\n\\ttop: 0;\\n\\theight: 100%;\\n}\\n.ui-resizable-se {\\n\\tcursor: se-resize;\\n\\twidth: 12px;\\n\\theight: 12px;\\n\\tright: 1px;\\n\\tbottom: 1px;\\n}\\n.ui-resizable-sw {\\n\\tcursor: sw-resize;\\n\\twidth: 9px;\\n\\theight: 9px;\\n\\tleft: -5px;\\n\\tbottom: -5px;\\n}\\n.ui-resizable-nw {\\n\\tcursor: nw-resize;\\n\\twidth: 9px;\\n\\theight: 9px;\\n\\tleft: -5px;\\n\\ttop: -5px;\\n}\\n.ui-resizable-ne {\\n\\tcursor: ne-resize;\\n\\twidth: 9px;\\n\\theight: 9px;\\n\\tright: -5px;\\n\\ttop: -5px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Selectable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-selectable {\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n.ui-selectable-helper {\\n\\tposition: absolute;\\n\\tz-index: 100;\\n\\tborder: 1px dotted black;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/selectable.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;EAOE;AACF;CACC,sBAAsB;CACtB,kBAAkB;AACnB;AACA;CACC,kBAAkB;CAClB,YAAY;CACZ,wBAAwB;AACzB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Selectable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-selectable {\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n.ui-selectable-helper {\\n\\tposition: absolute;\\n\\tz-index: 100;\\n\\tborder: 1px dotted black;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Selectmenu 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/selectmenu/#theming\\n */\\n.ui-selectmenu-menu {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tdisplay: none;\\n}\\n.ui-selectmenu-menu .ui-menu {\\n\\toverflow: auto;\\n\\toverflow-x: hidden;\\n\\tpadding-bottom: 1px;\\n}\\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\\n\\tfont-size: 1em;\\n\\tfont-weight: bold;\\n\\tline-height: 1.5;\\n\\tpadding: 2px 0.4em;\\n\\tmargin: 0.5em 0 0 0;\\n\\theight: auto;\\n\\tborder: 0;\\n}\\n.ui-selectmenu-open {\\n\\tdisplay: block;\\n}\\n.ui-selectmenu-text {\\n\\tdisplay: block;\\n\\tmargin-right: 20px;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.ui-selectmenu-button.ui-button {\\n\\ttext-align: left;\\n\\twhite-space: nowrap;\\n\\twidth: 14em;\\n}\\n.ui-selectmenu-icon.ui-icon {\\n\\tfloat: right;\\n\\tmargin-top: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/selectmenu.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,UAAU;CACV,SAAS;CACT,kBAAkB;CAClB,MAAM;CACN,OAAO;CACP,aAAa;AACd;AACA;CACC,cAAc;CACd,kBAAkB;CAClB,mBAAmB;AACpB;AACA;CACC,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,mBAAmB;CACnB,YAAY;CACZ,SAAS;AACV;AACA;CACC,cAAc;AACf;AACA;CACC,cAAc;CACd,kBAAkB;CAClB,gBAAgB;CAChB,uBAAuB;AACxB;AACA;CACC,gBAAgB;CAChB,mBAAmB;CACnB,WAAW;AACZ;AACA;CACC,YAAY;CACZ,aAAa;AACd\",\"sourcesContent\":[\"/*!\\n * jQuery UI Selectmenu 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/selectmenu/#theming\\n */\\n.ui-selectmenu-menu {\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\tdisplay: none;\\n}\\n.ui-selectmenu-menu .ui-menu {\\n\\toverflow: auto;\\n\\toverflow-x: hidden;\\n\\tpadding-bottom: 1px;\\n}\\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\\n\\tfont-size: 1em;\\n\\tfont-weight: bold;\\n\\tline-height: 1.5;\\n\\tpadding: 2px 0.4em;\\n\\tmargin: 0.5em 0 0 0;\\n\\theight: auto;\\n\\tborder: 0;\\n}\\n.ui-selectmenu-open {\\n\\tdisplay: block;\\n}\\n.ui-selectmenu-text {\\n\\tdisplay: block;\\n\\tmargin-right: 20px;\\n\\toverflow: hidden;\\n\\ttext-overflow: ellipsis;\\n}\\n.ui-selectmenu-button.ui-button {\\n\\ttext-align: left;\\n\\twhite-space: nowrap;\\n\\twidth: 14em;\\n}\\n.ui-selectmenu-icon.ui-icon {\\n\\tfloat: right;\\n\\tmargin-top: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Slider 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/slider/#theming\\n */\\n.ui-slider {\\n\\tposition: relative;\\n\\ttext-align: left;\\n}\\n.ui-slider .ui-slider-handle {\\n\\tposition: absolute;\\n\\tz-index: 2;\\n\\twidth: 1.2em;\\n\\theight: 1.2em;\\n\\tcursor: default;\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n.ui-slider .ui-slider-range {\\n\\tposition: absolute;\\n\\tz-index: 1;\\n\\tfont-size: .7em;\\n\\tdisplay: block;\\n\\tborder: 0;\\n\\tbackground-position: 0 0;\\n}\\n\\n/* support: IE8 - See #6727 */\\n.ui-slider.ui-state-disabled .ui-slider-handle,\\n.ui-slider.ui-state-disabled .ui-slider-range {\\n\\tfilter: inherit;\\n}\\n\\n.ui-slider-horizontal {\\n\\theight: .8em;\\n}\\n.ui-slider-horizontal .ui-slider-handle {\\n\\ttop: -.3em;\\n\\tmargin-left: -.6em;\\n}\\n.ui-slider-horizontal .ui-slider-range {\\n\\ttop: 0;\\n\\theight: 100%;\\n}\\n.ui-slider-horizontal .ui-slider-range-min {\\n\\tleft: 0;\\n}\\n.ui-slider-horizontal .ui-slider-range-max {\\n\\tright: 0;\\n}\\n\\n.ui-slider-vertical {\\n\\twidth: .8em;\\n\\theight: 100px;\\n}\\n.ui-slider-vertical .ui-slider-handle {\\n\\tleft: -.3em;\\n\\tmargin-left: 0;\\n\\tmargin-bottom: -.6em;\\n}\\n.ui-slider-vertical .ui-slider-range {\\n\\tleft: 0;\\n\\twidth: 100%;\\n}\\n.ui-slider-vertical .ui-slider-range-min {\\n\\tbottom: 0;\\n}\\n.ui-slider-vertical .ui-slider-range-max {\\n\\ttop: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/slider.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,kBAAkB;CAClB,gBAAgB;AACjB;AACA;CACC,kBAAkB;CAClB,UAAU;CACV,YAAY;CACZ,aAAa;CACb,eAAe;CACf,sBAAsB;CACtB,kBAAkB;AACnB;AACA;CACC,kBAAkB;CAClB,UAAU;CACV,eAAe;CACf,cAAc;CACd,SAAS;CACT,wBAAwB;AACzB;;AAEA,6BAA6B;AAC7B;;CAEC,eAAe;AAChB;;AAEA;CACC,YAAY;AACb;AACA;CACC,UAAU;CACV,kBAAkB;AACnB;AACA;CACC,MAAM;CACN,YAAY;AACb;AACA;CACC,OAAO;AACR;AACA;CACC,QAAQ;AACT;;AAEA;CACC,WAAW;CACX,aAAa;AACd;AACA;CACC,WAAW;CACX,cAAc;CACd,oBAAoB;AACrB;AACA;CACC,OAAO;CACP,WAAW;AACZ;AACA;CACC,SAAS;AACV;AACA;CACC,MAAM;AACP\",\"sourcesContent\":[\"/*!\\n * jQuery UI Slider 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/slider/#theming\\n */\\n.ui-slider {\\n\\tposition: relative;\\n\\ttext-align: left;\\n}\\n.ui-slider .ui-slider-handle {\\n\\tposition: absolute;\\n\\tz-index: 2;\\n\\twidth: 1.2em;\\n\\theight: 1.2em;\\n\\tcursor: default;\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n.ui-slider .ui-slider-range {\\n\\tposition: absolute;\\n\\tz-index: 1;\\n\\tfont-size: .7em;\\n\\tdisplay: block;\\n\\tborder: 0;\\n\\tbackground-position: 0 0;\\n}\\n\\n/* support: IE8 - See #6727 */\\n.ui-slider.ui-state-disabled .ui-slider-handle,\\n.ui-slider.ui-state-disabled .ui-slider-range {\\n\\tfilter: inherit;\\n}\\n\\n.ui-slider-horizontal {\\n\\theight: .8em;\\n}\\n.ui-slider-horizontal .ui-slider-handle {\\n\\ttop: -.3em;\\n\\tmargin-left: -.6em;\\n}\\n.ui-slider-horizontal .ui-slider-range {\\n\\ttop: 0;\\n\\theight: 100%;\\n}\\n.ui-slider-horizontal .ui-slider-range-min {\\n\\tleft: 0;\\n}\\n.ui-slider-horizontal .ui-slider-range-max {\\n\\tright: 0;\\n}\\n\\n.ui-slider-vertical {\\n\\twidth: .8em;\\n\\theight: 100px;\\n}\\n.ui-slider-vertical .ui-slider-handle {\\n\\tleft: -.3em;\\n\\tmargin-left: 0;\\n\\tmargin-bottom: -.6em;\\n}\\n.ui-slider-vertical .ui-slider-range {\\n\\tleft: 0;\\n\\twidth: 100%;\\n}\\n.ui-slider-vertical .ui-slider-range-min {\\n\\tbottom: 0;\\n}\\n.ui-slider-vertical .ui-slider-range-max {\\n\\ttop: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Sortable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-sortable-handle {\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/sortable.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;EAOE;AACF;CACC,sBAAsB;CACtB,kBAAkB;AACnB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Sortable 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n */\\n.ui-sortable-handle {\\n\\t-ms-touch-action: none;\\n\\ttouch-action: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Spinner 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/spinner/#theming\\n */\\n.ui-spinner {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\toverflow: hidden;\\n\\tpadding: 0;\\n\\tvertical-align: middle;\\n}\\n.ui-spinner-input {\\n\\tborder: none;\\n\\tbackground: none;\\n\\tcolor: inherit;\\n\\tpadding: .222em 0;\\n\\tmargin: .2em 0;\\n\\tvertical-align: middle;\\n\\tmargin-left: .4em;\\n\\tmargin-right: 2em;\\n}\\n.ui-spinner-button {\\n\\twidth: 1.6em;\\n\\theight: 50%;\\n\\tfont-size: .5em;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\ttext-align: center;\\n\\tposition: absolute;\\n\\tcursor: default;\\n\\tdisplay: block;\\n\\toverflow: hidden;\\n\\tright: 0;\\n}\\n/* more specificity required here to override default borders */\\n.ui-spinner a.ui-spinner-button {\\n\\tborder-top-style: none;\\n\\tborder-bottom-style: none;\\n\\tborder-right-style: none;\\n}\\n.ui-spinner-up {\\n\\ttop: 0;\\n}\\n.ui-spinner-down {\\n\\tbottom: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/spinner.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,kBAAkB;CAClB,qBAAqB;CACrB,gBAAgB;CAChB,UAAU;CACV,sBAAsB;AACvB;AACA;CACC,YAAY;CACZ,gBAAgB;CAChB,cAAc;CACd,iBAAiB;CACjB,cAAc;CACd,sBAAsB;CACtB,iBAAiB;CACjB,iBAAiB;AAClB;AACA;CACC,YAAY;CACZ,WAAW;CACX,eAAe;CACf,UAAU;CACV,SAAS;CACT,kBAAkB;CAClB,kBAAkB;CAClB,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,QAAQ;AACT;AACA,+DAA+D;AAC/D;CACC,sBAAsB;CACtB,yBAAyB;CACzB,wBAAwB;AACzB;AACA;CACC,MAAM;AACP;AACA;CACC,SAAS;AACV\",\"sourcesContent\":[\"/*!\\n * jQuery UI Spinner 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/spinner/#theming\\n */\\n.ui-spinner {\\n\\tposition: relative;\\n\\tdisplay: inline-block;\\n\\toverflow: hidden;\\n\\tpadding: 0;\\n\\tvertical-align: middle;\\n}\\n.ui-spinner-input {\\n\\tborder: none;\\n\\tbackground: none;\\n\\tcolor: inherit;\\n\\tpadding: .222em 0;\\n\\tmargin: .2em 0;\\n\\tvertical-align: middle;\\n\\tmargin-left: .4em;\\n\\tmargin-right: 2em;\\n}\\n.ui-spinner-button {\\n\\twidth: 1.6em;\\n\\theight: 50%;\\n\\tfont-size: .5em;\\n\\tpadding: 0;\\n\\tmargin: 0;\\n\\ttext-align: center;\\n\\tposition: absolute;\\n\\tcursor: default;\\n\\tdisplay: block;\\n\\toverflow: hidden;\\n\\tright: 0;\\n}\\n/* more specificity required here to override default borders */\\n.ui-spinner a.ui-spinner-button {\\n\\tborder-top-style: none;\\n\\tborder-bottom-style: none;\\n\\tborder-right-style: none;\\n}\\n.ui-spinner-up {\\n\\ttop: 0;\\n}\\n.ui-spinner-down {\\n\\tbottom: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Tabs 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/tabs/#theming\\n */\\n.ui-tabs {\\n\\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \\\"fixed\\\") */\\n\\tpadding: .2em;\\n}\\n.ui-tabs .ui-tabs-nav {\\n\\tmargin: 0;\\n\\tpadding: .2em .2em 0;\\n}\\n.ui-tabs .ui-tabs-nav li {\\n\\tlist-style: none;\\n\\tfloat: left;\\n\\tposition: relative;\\n\\ttop: 0;\\n\\tmargin: 1px .2em 0 0;\\n\\tborder-bottom-width: 0;\\n\\tpadding: 0;\\n\\twhite-space: nowrap;\\n}\\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\\n\\tfloat: left;\\n\\tpadding: .5em 1em;\\n\\ttext-decoration: none;\\n}\\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\\n\\tmargin-bottom: -1px;\\n\\tpadding-bottom: 1px;\\n}\\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\\n\\tcursor: text;\\n}\\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\\n\\tcursor: pointer;\\n}\\n.ui-tabs .ui-tabs-panel {\\n\\tdisplay: block;\\n\\tborder-width: 0;\\n\\tpadding: 1em 1.4em;\\n\\tbackground: none;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/tabs.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,kBAAkB,CAAC,uIAAuI;CAC1J,aAAa;AACd;AACA;CACC,SAAS;CACT,oBAAoB;AACrB;AACA;CACC,gBAAgB;CAChB,WAAW;CACX,kBAAkB;CAClB,MAAM;CACN,oBAAoB;CACpB,sBAAsB;CACtB,UAAU;CACV,mBAAmB;AACpB;AACA;CACC,WAAW;CACX,iBAAiB;CACjB,qBAAqB;AACtB;AACA;CACC,mBAAmB;CACnB,mBAAmB;AACpB;AACA;;;CAGC,YAAY;AACb;AACA;CACC,eAAe;AAChB;AACA;CACC,cAAc;CACd,eAAe;CACf,kBAAkB;CAClB,gBAAgB;AACjB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Tabs 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/tabs/#theming\\n */\\n.ui-tabs {\\n\\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \\\"fixed\\\") */\\n\\tpadding: .2em;\\n}\\n.ui-tabs .ui-tabs-nav {\\n\\tmargin: 0;\\n\\tpadding: .2em .2em 0;\\n}\\n.ui-tabs .ui-tabs-nav li {\\n\\tlist-style: none;\\n\\tfloat: left;\\n\\tposition: relative;\\n\\ttop: 0;\\n\\tmargin: 1px .2em 0 0;\\n\\tborder-bottom-width: 0;\\n\\tpadding: 0;\\n\\twhite-space: nowrap;\\n}\\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\\n\\tfloat: left;\\n\\tpadding: .5em 1em;\\n\\ttext-decoration: none;\\n}\\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\\n\\tmargin-bottom: -1px;\\n\\tpadding-bottom: 1px;\\n}\\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\\n\\tcursor: text;\\n}\\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\\n\\tcursor: pointer;\\n}\\n.ui-tabs .ui-tabs-panel {\\n\\tdisplay: block;\\n\\tborder-width: 0;\\n\\tpadding: 1em 1.4em;\\n\\tbackground: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"./images/ui-icons_444444_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"./images/ui-icons_555555_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"./images/ui-icons_ffffff_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"./images/ui-icons_777620_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_4___ from \"./images/ui-icons_cc0000_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_5___ from \"./images/ui-icons_777777_256x240.png\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI CSS Framework 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/category/theming/\\n *\\n * To view and modify this theme, visit http://jqueryui.com/themeroller/\\n */\\n\\n\\n/* Component containers\\n----------------------------------*/\\n.ui-widget {\\n\\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\\n\\tfont-size: 1em/*{fsDefault}*/;\\n}\\n.ui-widget .ui-widget {\\n\\tfont-size: 1em;\\n}\\n.ui-widget input,\\n.ui-widget select,\\n.ui-widget textarea,\\n.ui-widget button {\\n\\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\\n\\tfont-size: 1em;\\n}\\n.ui-widget.ui-widget-content {\\n\\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\\n}\\n.ui-widget-content {\\n\\tborder: 1px solid #dddddd/*{borderColorContent}*/;\\n\\tbackground: #ffffff/*{bgColorContent}*/ /*{bgImgUrlContent}*/ /*{bgContentXPos}*/ /*{bgContentYPos}*/ /*{bgContentRepeat}*/;\\n\\tcolor: #333333/*{fcContent}*/;\\n}\\n.ui-widget-content a {\\n\\tcolor: #333333/*{fcContent}*/;\\n}\\n.ui-widget-header {\\n\\tborder: 1px solid #dddddd/*{borderColorHeader}*/;\\n\\tbackground: #e9e9e9/*{bgColorHeader}*/ /*{bgImgUrlHeader}*/ /*{bgHeaderXPos}*/ /*{bgHeaderYPos}*/ /*{bgHeaderRepeat}*/;\\n\\tcolor: #333333/*{fcHeader}*/;\\n\\tfont-weight: bold;\\n}\\n.ui-widget-header a {\\n\\tcolor: #333333/*{fcHeader}*/;\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default,\\n.ui-button,\\n\\n/* We use html here because we need a greater specificity to make sure disabled\\nworks properly when clicked or hovered */\\nhtml .ui-button.ui-state-disabled:hover,\\nhtml .ui-button.ui-state-disabled:active {\\n\\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\\n\\tbackground: #f6f6f6/*{bgColorDefault}*/ /*{bgImgUrlDefault}*/ /*{bgDefaultXPos}*/ /*{bgDefaultYPos}*/ /*{bgDefaultRepeat}*/;\\n\\tfont-weight: normal/*{fwDefault}*/;\\n\\tcolor: #454545/*{fcDefault}*/;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited,\\na.ui-button,\\na:link.ui-button,\\na:visited.ui-button,\\n.ui-button {\\n\\tcolor: #454545/*{fcDefault}*/;\\n\\ttext-decoration: none;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus,\\n.ui-button:hover,\\n.ui-button:focus {\\n\\tborder: 1px solid #cccccc/*{borderColorHover}*/;\\n\\tbackground: #ededed/*{bgColorHover}*/ /*{bgImgUrlHover}*/ /*{bgHoverXPos}*/ /*{bgHoverYPos}*/ /*{bgHoverRepeat}*/;\\n\\tfont-weight: normal/*{fwDefault}*/;\\n\\tcolor: #2b2b2b/*{fcHover}*/;\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited,\\n.ui-state-focus a,\\n.ui-state-focus a:hover,\\n.ui-state-focus a:link,\\n.ui-state-focus a:visited,\\na.ui-button:hover,\\na.ui-button:focus {\\n\\tcolor: #2b2b2b/*{fcHover}*/;\\n\\ttext-decoration: none;\\n}\\n\\n.ui-visual-focus {\\n\\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active,\\na.ui-button:active,\\n.ui-button:active,\\n.ui-button.ui-state-active:hover {\\n\\tborder: 1px solid #003eff/*{borderColorActive}*/;\\n\\tbackground: #007fff/*{bgColorActive}*/ /*{bgImgUrlActive}*/ /*{bgActiveXPos}*/ /*{bgActiveYPos}*/ /*{bgActiveRepeat}*/;\\n\\tfont-weight: normal/*{fwDefault}*/;\\n\\tcolor: #ffffff/*{fcActive}*/;\\n}\\n.ui-icon-background,\\n.ui-state-active .ui-icon-background {\\n\\tborder: #003eff/*{borderColorActive}*/;\\n\\tbackground-color: #ffffff/*{fcActive}*/;\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: #ffffff/*{fcActive}*/;\\n\\ttext-decoration: none;\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\\n\\tbackground: #fffa90/*{bgColorHighlight}*/ /*{bgImgUrlHighlight}*/ /*{bgHighlightXPos}*/ /*{bgHighlightYPos}*/ /*{bgHighlightRepeat}*/;\\n\\tcolor: #777620/*{fcHighlight}*/;\\n}\\n.ui-state-checked {\\n\\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\\n\\tbackground: #fffa90/*{bgColorHighlight}*/;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: #777620/*{fcHighlight}*/;\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: 1px solid #f1a899/*{borderColorError}*/;\\n\\tbackground: #fddfdf/*{bgColorError}*/ /*{bgImgUrlError}*/ /*{bgErrorXPos}*/ /*{bgErrorYPos}*/ /*{bgErrorRepeat}*/;\\n\\tcolor: #5f3f3f/*{fcError}*/;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #5f3f3f/*{fcError}*/;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #5f3f3f/*{fcError}*/;\\n}\\n.ui-priority-primary,\\n.ui-widget-content .ui-priority-primary,\\n.ui-widget-header .ui-priority-primary {\\n\\tfont-weight: bold;\\n}\\n.ui-priority-secondary,\\n.ui-widget-content .ui-priority-secondary,\\n.ui-widget-header .ui-priority-secondary {\\n\\topacity: .7;\\n\\tfilter:Alpha(Opacity=70); /* support: IE8 */\\n\\tfont-weight: normal;\\n}\\n.ui-state-disabled,\\n.ui-widget-content .ui-state-disabled,\\n.ui-widget-header .ui-state-disabled {\\n\\topacity: .35;\\n\\tfilter:Alpha(Opacity=35); /* support: IE8 */\\n\\tbackground-image: none;\\n}\\n.ui-state-disabled .ui-icon {\\n\\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\\n}\\n\\n/* Icons\\n----------------------------------*/\\n\\n/* states and images */\\n.ui-icon {\\n\\twidth: 16px;\\n\\theight: 16px;\\n}\\n.ui-icon,\\n.ui-widget-content .ui-icon {\\n\\tbackground-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n}\\n.ui-widget-header .ui-icon {\\n\\tbackground-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \");\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon,\\n.ui-button:hover .ui-icon,\\n.ui-button:focus .ui-icon {\\n\\tbackground-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \");\\n}\\n.ui-state-active .ui-icon,\\n.ui-button:active .ui-icon {\\n\\tbackground-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \");\\n}\\n.ui-state-highlight .ui-icon,\\n.ui-button .ui-state-highlight.ui-icon {\\n\\tbackground-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \");\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \");\\n}\\n.ui-button .ui-icon {\\n\\tbackground-image: url(\" + ___CSS_LOADER_URL_REPLACEMENT_5___ + \");\\n}\\n\\n/* positioning */\\n.ui-icon-blank { background-position: 16px 16px; }\\n.ui-icon-caret-1-n { background-position: 0 0; }\\n.ui-icon-caret-1-ne { background-position: -16px 0; }\\n.ui-icon-caret-1-e { background-position: -32px 0; }\\n.ui-icon-caret-1-se { background-position: -48px 0; }\\n.ui-icon-caret-1-s { background-position: -65px 0; }\\n.ui-icon-caret-1-sw { background-position: -80px 0; }\\n.ui-icon-caret-1-w { background-position: -96px 0; }\\n.ui-icon-caret-1-nw { background-position: -112px 0; }\\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\\n.ui-icon-arrow-4 { background-position: 0 -80px; }\\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\\n.ui-icon-extlink { background-position: -32px -80px; }\\n.ui-icon-newwin { background-position: -48px -80px; }\\n.ui-icon-refresh { background-position: -64px -80px; }\\n.ui-icon-shuffle { background-position: -80px -80px; }\\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\\n.ui-icon-folder-open { background-position: -16px -96px; }\\n.ui-icon-document { background-position: -32px -96px; }\\n.ui-icon-document-b { background-position: -48px -96px; }\\n.ui-icon-note { background-position: -64px -96px; }\\n.ui-icon-mail-closed { background-position: -80px -96px; }\\n.ui-icon-mail-open { background-position: -96px -96px; }\\n.ui-icon-suitcase { background-position: -112px -96px; }\\n.ui-icon-comment { background-position: -128px -96px; }\\n.ui-icon-person { background-position: -144px -96px; }\\n.ui-icon-print { background-position: -160px -96px; }\\n.ui-icon-trash { background-position: -176px -96px; }\\n.ui-icon-locked { background-position: -192px -96px; }\\n.ui-icon-unlocked { background-position: -208px -96px; }\\n.ui-icon-bookmark { background-position: -224px -96px; }\\n.ui-icon-tag { background-position: -240px -96px; }\\n.ui-icon-home { background-position: 0 -112px; }\\n.ui-icon-flag { background-position: -16px -112px; }\\n.ui-icon-calendar { background-position: -32px -112px; }\\n.ui-icon-cart { background-position: -48px -112px; }\\n.ui-icon-pencil { background-position: -64px -112px; }\\n.ui-icon-clock { background-position: -80px -112px; }\\n.ui-icon-disk { background-position: -96px -112px; }\\n.ui-icon-calculator { background-position: -112px -112px; }\\n.ui-icon-zoomin { background-position: -128px -112px; }\\n.ui-icon-zoomout { background-position: -144px -112px; }\\n.ui-icon-search { background-position: -160px -112px; }\\n.ui-icon-wrench { background-position: -176px -112px; }\\n.ui-icon-gear { background-position: -192px -112px; }\\n.ui-icon-heart { background-position: -208px -112px; }\\n.ui-icon-star { background-position: -224px -112px; }\\n.ui-icon-link { background-position: -240px -112px; }\\n.ui-icon-cancel { background-position: 0 -128px; }\\n.ui-icon-plus { background-position: -16px -128px; }\\n.ui-icon-plusthick { background-position: -32px -128px; }\\n.ui-icon-minus { background-position: -48px -128px; }\\n.ui-icon-minusthick { background-position: -64px -128px; }\\n.ui-icon-close { background-position: -80px -128px; }\\n.ui-icon-closethick { background-position: -96px -128px; }\\n.ui-icon-key { background-position: -112px -128px; }\\n.ui-icon-lightbulb { background-position: -128px -128px; }\\n.ui-icon-scissors { background-position: -144px -128px; }\\n.ui-icon-clipboard { background-position: -160px -128px; }\\n.ui-icon-copy { background-position: -176px -128px; }\\n.ui-icon-contact { background-position: -192px -128px; }\\n.ui-icon-image { background-position: -208px -128px; }\\n.ui-icon-video { background-position: -224px -128px; }\\n.ui-icon-script { background-position: -240px -128px; }\\n.ui-icon-alert { background-position: 0 -144px; }\\n.ui-icon-info { background-position: -16px -144px; }\\n.ui-icon-notice { background-position: -32px -144px; }\\n.ui-icon-help { background-position: -48px -144px; }\\n.ui-icon-check { background-position: -64px -144px; }\\n.ui-icon-bullet { background-position: -80px -144px; }\\n.ui-icon-radio-on { background-position: -96px -144px; }\\n.ui-icon-radio-off { background-position: -112px -144px; }\\n.ui-icon-pin-w { background-position: -128px -144px; }\\n.ui-icon-pin-s { background-position: -144px -144px; }\\n.ui-icon-play { background-position: 0 -160px; }\\n.ui-icon-pause { background-position: -16px -160px; }\\n.ui-icon-seek-next { background-position: -32px -160px; }\\n.ui-icon-seek-prev { background-position: -48px -160px; }\\n.ui-icon-seek-end { background-position: -64px -160px; }\\n.ui-icon-seek-start { background-position: -80px -160px; }\\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\\n.ui-icon-seek-first { background-position: -80px -160px; }\\n.ui-icon-stop { background-position: -96px -160px; }\\n.ui-icon-eject { background-position: -112px -160px; }\\n.ui-icon-volume-off { background-position: -128px -160px; }\\n.ui-icon-volume-on { background-position: -144px -160px; }\\n.ui-icon-power { background-position: 0 -176px; }\\n.ui-icon-signal-diag { background-position: -16px -176px; }\\n.ui-icon-signal { background-position: -32px -176px; }\\n.ui-icon-battery-0 { background-position: -48px -176px; }\\n.ui-icon-battery-1 { background-position: -64px -176px; }\\n.ui-icon-battery-2 { background-position: -80px -176px; }\\n.ui-icon-battery-3 { background-position: -96px -176px; }\\n.ui-icon-circle-plus { background-position: 0 -192px; }\\n.ui-icon-circle-minus { background-position: -16px -192px; }\\n.ui-icon-circle-close { background-position: -32px -192px; }\\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\\n.ui-icon-circle-check { background-position: -208px -192px; }\\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\\n\\n\\n/* Misc visuals\\n----------------------------------*/\\n\\n/* Corner radius */\\n.ui-corner-all,\\n.ui-corner-top,\\n.ui-corner-left,\\n.ui-corner-tl {\\n\\tborder-top-left-radius: 3px/*{cornerRadius}*/;\\n}\\n.ui-corner-all,\\n.ui-corner-top,\\n.ui-corner-right,\\n.ui-corner-tr {\\n\\tborder-top-right-radius: 3px/*{cornerRadius}*/;\\n}\\n.ui-corner-all,\\n.ui-corner-bottom,\\n.ui-corner-left,\\n.ui-corner-bl {\\n\\tborder-bottom-left-radius: 3px/*{cornerRadius}*/;\\n}\\n.ui-corner-all,\\n.ui-corner-bottom,\\n.ui-corner-right,\\n.ui-corner-br {\\n\\tborder-bottom-right-radius: 3px/*{cornerRadius}*/;\\n}\\n\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #aaaaaa/*{bgColorOverlay}*/ /*{bgImgUrlOverlay}*/ /*{bgOverlayXPos}*/ /*{bgOverlayYPos}*/ /*{bgOverlayRepeat}*/;\\n\\topacity: .3/*{opacityOverlay}*/;\\n\\tfilter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; /* support: IE8 */\\n}\\n.ui-widget-shadow {\\n\\t-webkit-box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\\n\\tbox-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/theme.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;;;EAWE;;;AAGF;mCACmC;AACnC;CACC,sDAAsD;CACtD,6BAA6B;AAC9B;AACA;CACC,cAAc;AACf;AACA;;;;CAIC,sDAAsD;CACtD,cAAc;AACf;AACA;CACC,iDAAiD;AAClD;AACA;CACC,iDAAiD;CACjD,2HAA2H;CAC3H,6BAA6B;AAC9B;AACA;CACC,6BAA6B;AAC9B;AACA;CACC,gDAAgD;CAChD,sHAAsH;CACtH,4BAA4B;CAC5B,iBAAiB;AAClB;AACA;CACC,4BAA4B;AAC7B;;AAEA;mCACmC;AACnC;;;;;;;;;CASC,iDAAiD;CACjD,2HAA2H;CAC3H,kCAAkC;CAClC,6BAA6B;AAC9B;AACA;;;;;;;CAOC,6BAA6B;CAC7B,qBAAqB;AACtB;AACA;;;;;;;;CAQC,+CAA+C;CAC/C,iHAAiH;CACjH,kCAAkC;CAClC,2BAA2B;AAC5B;AACA;;;;;;;;;;CAUC,2BAA2B;CAC3B,qBAAqB;AACtB;;AAEA;CACC,yCAAyC;AAC1C;AACA;;;;;;CAMC,gDAAgD;CAChD,sHAAsH;CACtH,kCAAkC;CAClC,4BAA4B;AAC7B;AACA;;CAEC,sCAAsC;CACtC,uCAAuC;AACxC;AACA;;;CAGC,4BAA4B;CAC5B,qBAAqB;AACtB;;AAEA;mCACmC;AACnC;;;CAGC,mDAAmD;CACnD,qIAAqI;CACrI,+BAA+B;AAChC;AACA;CACC,mDAAmD;CACnD,yCAAyC;AAC1C;AACA;;;CAGC,+BAA+B;AAChC;AACA;;;CAGC,+CAA+C;CAC/C,iHAAiH;CACjH,2BAA2B;AAC5B;AACA;;;CAGC,2BAA2B;AAC5B;AACA;;;CAGC,2BAA2B;AAC5B;AACA;;;CAGC,iBAAiB;AAClB;AACA;;;CAGC,WAAW;CACX,wBAAwB,EAAE,iBAAiB;CAC3C,mBAAmB;AACpB;AACA;;;CAGC,YAAY;CACZ,wBAAwB,EAAE,iBAAiB;CAC3C,sBAAsB;AACvB;AACA;CACC,wBAAwB,EAAE,6BAA6B;AACxD;;AAEA;mCACmC;;AAEnC,sBAAsB;AACtB;CACC,WAAW;CACX,YAAY;AACb;AACA;;CAEC,yDAA6E;AAC9E;AACA;CACC,yDAA4E;AAC7E;AACA;;;;CAIC,yDAA2E;AAC5E;AACA;;CAEC,yDAA4E;AAC7E;AACA;;CAEC,yDAA+E;AAChF;AACA;;CAEC,yDAA2E;AAC5E;AACA;CACC,yDAA6E;AAC9E;;AAEA,gBAAgB;AAChB,iBAAiB,8BAA8B,EAAE;AACjD,qBAAqB,wBAAwB,EAAE;AAC/C,sBAAsB,4BAA4B,EAAE;AACpD,qBAAqB,4BAA4B,EAAE;AACnD,sBAAsB,4BAA4B,EAAE;AACpD,qBAAqB,4BAA4B,EAAE;AACnD,sBAAsB,4BAA4B,EAAE;AACpD,qBAAqB,4BAA4B,EAAE;AACnD,sBAAsB,6BAA6B,EAAE;AACrD,uBAAuB,6BAA6B,EAAE;AACtD,uBAAuB,6BAA6B,EAAE;AACtD,wBAAwB,4BAA4B,EAAE;AACtD,yBAAyB,gCAAgC,EAAE;AAC3D,wBAAwB,gCAAgC,EAAE;AAC1D,yBAAyB,gCAAgC,EAAE;AAC3D,wBAAwB,gCAAgC,EAAE;AAC1D,yBAAyB,gCAAgC,EAAE;AAC3D,wBAAwB,gCAAgC,EAAE;AAC1D,yBAAyB,iCAAiC,EAAE;AAC5D,0BAA0B,iCAAiC,EAAE;AAC7D,0BAA0B,iCAAiC,EAAE;AAC7D,qBAAqB,4BAA4B,EAAE;AACnD,sBAAsB,gCAAgC,EAAE;AACxD,qBAAqB,gCAAgC,EAAE;AACvD,sBAAsB,gCAAgC,EAAE;AACxD,qBAAqB,gCAAgC,EAAE;AACvD,sBAAsB,gCAAgC,EAAE;AACxD,qBAAqB,gCAAgC,EAAE;AACvD,sBAAsB,iCAAiC,EAAE;AACzD,uBAAuB,iCAAiC,EAAE;AAC1D,yBAAyB,iCAAiC,EAAE;AAC5D,uBAAuB,iCAAiC,EAAE;AAC1D,yBAAyB,iCAAiC,EAAE;AAC5D,yBAAyB,iCAAiC,EAAE;AAC5D,yBAAyB,iCAAiC,EAAE;AAC5D,yBAAyB,iCAAiC,EAAE;AAC5D,yBAAyB,iCAAiC,EAAE;AAC5D,0BAA0B,8BAA8B,EAAE;AAC1D,2BAA2B,gCAAgC,EAAE;AAC7D,0BAA0B,gCAAgC,EAAE;AAC5D,2BAA2B,gCAAgC,EAAE;AAC7D,0BAA0B,gCAAgC,EAAE;AAC5D,2BAA2B,gCAAgC,EAAE;AAC7D,0BAA0B,gCAAgC,EAAE;AAC5D,2BAA2B,iCAAiC,EAAE;AAC9D,4BAA4B,iCAAiC,EAAE;AAC/D,8BAA8B,iCAAiC,EAAE;AACjE,4BAA4B,iCAAiC,EAAE;AAC/D,8BAA8B,iCAAiC,EAAE;AACjE,8BAA8B,iCAAiC,EAAE;AACjE,8BAA8B,iCAAiC,EAAE;AACjE,8BAA8B,iCAAiC,EAAE;AACjE,8BAA8B,iCAAiC,EAAE;AACjE,gCAAgC,4BAA4B,EAAE;AAC9D,gCAAgC,gCAAgC,EAAE;AAClE,gCAAgC,gCAAgC,EAAE;AAClE,gCAAgC,gCAAgC,EAAE;AAClE,2BAA2B,gCAAgC,EAAE;AAC7D,2BAA2B,gCAAgC,EAAE;AAC7D,2BAA2B,gCAAgC,EAAE;AAC7D,2BAA2B,iCAAiC,EAAE;AAC9D,4BAA4B,iCAAiC,EAAE;AAC/D,4BAA4B,iCAAiC,EAAE;AAC/D,4BAA4B,iCAAiC,EAAE;AAC/D,4BAA4B,iCAAiC,EAAE;AAC/D,mBAAmB,4BAA4B,EAAE;AACjD,wBAAwB,gCAAgC,EAAE;AAC1D,mBAAmB,gCAAgC,EAAE;AACrD,kBAAkB,gCAAgC,EAAE;AACpD,mBAAmB,gCAAgC,EAAE;AACrD,mBAAmB,gCAAgC,EAAE;AACrD,wBAAwB,gCAAgC,EAAE;AAC1D,6BAA6B,iCAAiC,EAAE;AAChE,4BAA4B,4BAA4B,EAAE;AAC1D,uBAAuB,gCAAgC,EAAE;AACzD,oBAAoB,gCAAgC,EAAE;AACtD,sBAAsB,gCAAgC,EAAE;AACxD,gBAAgB,gCAAgC,EAAE;AAClD,uBAAuB,gCAAgC,EAAE;AACzD,qBAAqB,gCAAgC,EAAE;AACvD,oBAAoB,iCAAiC,EAAE;AACvD,mBAAmB,iCAAiC,EAAE;AACtD,kBAAkB,iCAAiC,EAAE;AACrD,iBAAiB,iCAAiC,EAAE;AACpD,iBAAiB,iCAAiC,EAAE;AACpD,kBAAkB,iCAAiC,EAAE;AACrD,oBAAoB,iCAAiC,EAAE;AACvD,oBAAoB,iCAAiC,EAAE;AACvD,eAAe,iCAAiC,EAAE;AAClD,gBAAgB,6BAA6B,EAAE;AAC/C,gBAAgB,iCAAiC,EAAE;AACnD,oBAAoB,iCAAiC,EAAE;AACvD,gBAAgB,iCAAiC,EAAE;AACnD,kBAAkB,iCAAiC,EAAE;AACrD,iBAAiB,iCAAiC,EAAE;AACpD,gBAAgB,iCAAiC,EAAE;AACnD,sBAAsB,kCAAkC,EAAE;AAC1D,kBAAkB,kCAAkC,EAAE;AACtD,mBAAmB,kCAAkC,EAAE;AACvD,kBAAkB,kCAAkC,EAAE;AACtD,kBAAkB,kCAAkC,EAAE;AACtD,gBAAgB,kCAAkC,EAAE;AACpD,iBAAiB,kCAAkC,EAAE;AACrD,gBAAgB,kCAAkC,EAAE;AACpD,gBAAgB,kCAAkC,EAAE;AACpD,kBAAkB,6BAA6B,EAAE;AACjD,gBAAgB,iCAAiC,EAAE;AACnD,qBAAqB,iCAAiC,EAAE;AACxD,iBAAiB,iCAAiC,EAAE;AACpD,sBAAsB,iCAAiC,EAAE;AACzD,iBAAiB,iCAAiC,EAAE;AACpD,sBAAsB,iCAAiC,EAAE;AACzD,eAAe,kCAAkC,EAAE;AACnD,qBAAqB,kCAAkC,EAAE;AACzD,oBAAoB,kCAAkC,EAAE;AACxD,qBAAqB,kCAAkC,EAAE;AACzD,gBAAgB,kCAAkC,EAAE;AACpD,mBAAmB,kCAAkC,EAAE;AACvD,iBAAiB,kCAAkC,EAAE;AACrD,iBAAiB,kCAAkC,EAAE;AACrD,kBAAkB,kCAAkC,EAAE;AACtD,iBAAiB,6BAA6B,EAAE;AAChD,gBAAgB,iCAAiC,EAAE;AACnD,kBAAkB,iCAAiC,EAAE;AACrD,gBAAgB,iCAAiC,EAAE;AACnD,iBAAiB,iCAAiC,EAAE;AACpD,kBAAkB,iCAAiC,EAAE;AACrD,oBAAoB,iCAAiC,EAAE;AACvD,qBAAqB,kCAAkC,EAAE;AACzD,iBAAiB,kCAAkC,EAAE;AACrD,iBAAiB,kCAAkC,EAAE;AACrD,gBAAgB,6BAA6B,EAAE;AAC/C,iBAAiB,iCAAiC,EAAE;AACpD,qBAAqB,iCAAiC,EAAE;AACxD,qBAAqB,iCAAiC,EAAE;AACxD,oBAAoB,iCAAiC,EAAE;AACvD,sBAAsB,iCAAiC,EAAE;AACzD,qEAAqE;AACrE,sBAAsB,iCAAiC,EAAE;AACzD,gBAAgB,iCAAiC,EAAE;AACnD,iBAAiB,kCAAkC,EAAE;AACrD,sBAAsB,kCAAkC,EAAE;AAC1D,qBAAqB,kCAAkC,EAAE;AACzD,iBAAiB,6BAA6B,EAAE;AAChD,uBAAuB,iCAAiC,EAAE;AAC1D,kBAAkB,iCAAiC,EAAE;AACrD,qBAAqB,iCAAiC,EAAE;AACxD,qBAAqB,iCAAiC,EAAE;AACxD,qBAAqB,iCAAiC,EAAE;AACxD,qBAAqB,iCAAiC,EAAE;AACxD,uBAAuB,6BAA6B,EAAE;AACtD,wBAAwB,iCAAiC,EAAE;AAC3D,wBAAwB,iCAAiC,EAAE;AAC3D,6BAA6B,iCAAiC,EAAE;AAChE,6BAA6B,iCAAiC,EAAE;AAChE,6BAA6B,iCAAiC,EAAE;AAChE,6BAA6B,iCAAiC,EAAE;AAChE,0BAA0B,kCAAkC,EAAE;AAC9D,0BAA0B,kCAAkC,EAAE;AAC9D,0BAA0B,kCAAkC,EAAE;AAC9D,0BAA0B,kCAAkC,EAAE;AAC9D,yBAAyB,kCAAkC,EAAE;AAC7D,0BAA0B,kCAAkC,EAAE;AAC9D,wBAAwB,kCAAkC,EAAE;AAC5D,4BAA4B,6BAA6B,EAAE;AAC3D,6BAA6B,iCAAiC,EAAE;AAChE,6BAA6B,iCAAiC,EAAE;AAChE,4BAA4B,iCAAiC,EAAE;AAC/D,6BAA6B,iCAAiC,EAAE;AAChE,6BAA6B,iCAAiC,EAAE;AAChE,gCAAgC,6BAA6B,EAAE;AAC/D,kCAAkC,iCAAiC,EAAE;AACrE,+BAA+B,iCAAiC,EAAE;AAClE,iCAAiC,iCAAiC,EAAE;AACpE,iCAAiC,iCAAiC,EAAE;AACpE,4BAA4B,iCAAiC,EAAE;;;AAG/D;mCACmC;;AAEnC,kBAAkB;AAClB;;;;CAIC,6CAA6C;AAC9C;AACA;;;;CAIC,8CAA8C;AAC/C;AACA;;;;CAIC,gDAAgD;AACjD;AACA;;;;CAIC,iDAAiD;AAClD;;AAEA,aAAa;AACb;CACC,2HAA2H;CAC3H,+BAA+B;CAC/B,mDAAmD,EAAE,iBAAiB;AACvE;AACA;CACC,sHAAsH;CACtH,8GAA8G;AAC/G\",\"sourcesContent\":[\"/*!\\n * jQuery UI CSS Framework 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/category/theming/\\n *\\n * To view and modify this theme, visit http://jqueryui.com/themeroller/\\n */\\n\\n\\n/* Component containers\\n----------------------------------*/\\n.ui-widget {\\n\\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\\n\\tfont-size: 1em/*{fsDefault}*/;\\n}\\n.ui-widget .ui-widget {\\n\\tfont-size: 1em;\\n}\\n.ui-widget input,\\n.ui-widget select,\\n.ui-widget textarea,\\n.ui-widget button {\\n\\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\\n\\tfont-size: 1em;\\n}\\n.ui-widget.ui-widget-content {\\n\\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\\n}\\n.ui-widget-content {\\n\\tborder: 1px solid #dddddd/*{borderColorContent}*/;\\n\\tbackground: #ffffff/*{bgColorContent}*/ /*{bgImgUrlContent}*/ /*{bgContentXPos}*/ /*{bgContentYPos}*/ /*{bgContentRepeat}*/;\\n\\tcolor: #333333/*{fcContent}*/;\\n}\\n.ui-widget-content a {\\n\\tcolor: #333333/*{fcContent}*/;\\n}\\n.ui-widget-header {\\n\\tborder: 1px solid #dddddd/*{borderColorHeader}*/;\\n\\tbackground: #e9e9e9/*{bgColorHeader}*/ /*{bgImgUrlHeader}*/ /*{bgHeaderXPos}*/ /*{bgHeaderYPos}*/ /*{bgHeaderRepeat}*/;\\n\\tcolor: #333333/*{fcHeader}*/;\\n\\tfont-weight: bold;\\n}\\n.ui-widget-header a {\\n\\tcolor: #333333/*{fcHeader}*/;\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default,\\n.ui-button,\\n\\n/* We use html here because we need a greater specificity to make sure disabled\\nworks properly when clicked or hovered */\\nhtml .ui-button.ui-state-disabled:hover,\\nhtml .ui-button.ui-state-disabled:active {\\n\\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\\n\\tbackground: #f6f6f6/*{bgColorDefault}*/ /*{bgImgUrlDefault}*/ /*{bgDefaultXPos}*/ /*{bgDefaultYPos}*/ /*{bgDefaultRepeat}*/;\\n\\tfont-weight: normal/*{fwDefault}*/;\\n\\tcolor: #454545/*{fcDefault}*/;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited,\\na.ui-button,\\na:link.ui-button,\\na:visited.ui-button,\\n.ui-button {\\n\\tcolor: #454545/*{fcDefault}*/;\\n\\ttext-decoration: none;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus,\\n.ui-button:hover,\\n.ui-button:focus {\\n\\tborder: 1px solid #cccccc/*{borderColorHover}*/;\\n\\tbackground: #ededed/*{bgColorHover}*/ /*{bgImgUrlHover}*/ /*{bgHoverXPos}*/ /*{bgHoverYPos}*/ /*{bgHoverRepeat}*/;\\n\\tfont-weight: normal/*{fwDefault}*/;\\n\\tcolor: #2b2b2b/*{fcHover}*/;\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited,\\n.ui-state-focus a,\\n.ui-state-focus a:hover,\\n.ui-state-focus a:link,\\n.ui-state-focus a:visited,\\na.ui-button:hover,\\na.ui-button:focus {\\n\\tcolor: #2b2b2b/*{fcHover}*/;\\n\\ttext-decoration: none;\\n}\\n\\n.ui-visual-focus {\\n\\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active,\\na.ui-button:active,\\n.ui-button:active,\\n.ui-button.ui-state-active:hover {\\n\\tborder: 1px solid #003eff/*{borderColorActive}*/;\\n\\tbackground: #007fff/*{bgColorActive}*/ /*{bgImgUrlActive}*/ /*{bgActiveXPos}*/ /*{bgActiveYPos}*/ /*{bgActiveRepeat}*/;\\n\\tfont-weight: normal/*{fwDefault}*/;\\n\\tcolor: #ffffff/*{fcActive}*/;\\n}\\n.ui-icon-background,\\n.ui-state-active .ui-icon-background {\\n\\tborder: #003eff/*{borderColorActive}*/;\\n\\tbackground-color: #ffffff/*{fcActive}*/;\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: #ffffff/*{fcActive}*/;\\n\\ttext-decoration: none;\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\\n\\tbackground: #fffa90/*{bgColorHighlight}*/ /*{bgImgUrlHighlight}*/ /*{bgHighlightXPos}*/ /*{bgHighlightYPos}*/ /*{bgHighlightRepeat}*/;\\n\\tcolor: #777620/*{fcHighlight}*/;\\n}\\n.ui-state-checked {\\n\\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\\n\\tbackground: #fffa90/*{bgColorHighlight}*/;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: #777620/*{fcHighlight}*/;\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: 1px solid #f1a899/*{borderColorError}*/;\\n\\tbackground: #fddfdf/*{bgColorError}*/ /*{bgImgUrlError}*/ /*{bgErrorXPos}*/ /*{bgErrorYPos}*/ /*{bgErrorRepeat}*/;\\n\\tcolor: #5f3f3f/*{fcError}*/;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #5f3f3f/*{fcError}*/;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #5f3f3f/*{fcError}*/;\\n}\\n.ui-priority-primary,\\n.ui-widget-content .ui-priority-primary,\\n.ui-widget-header .ui-priority-primary {\\n\\tfont-weight: bold;\\n}\\n.ui-priority-secondary,\\n.ui-widget-content .ui-priority-secondary,\\n.ui-widget-header .ui-priority-secondary {\\n\\topacity: .7;\\n\\tfilter:Alpha(Opacity=70); /* support: IE8 */\\n\\tfont-weight: normal;\\n}\\n.ui-state-disabled,\\n.ui-widget-content .ui-state-disabled,\\n.ui-widget-header .ui-state-disabled {\\n\\topacity: .35;\\n\\tfilter:Alpha(Opacity=35); /* support: IE8 */\\n\\tbackground-image: none;\\n}\\n.ui-state-disabled .ui-icon {\\n\\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\\n}\\n\\n/* Icons\\n----------------------------------*/\\n\\n/* states and images */\\n.ui-icon {\\n\\twidth: 16px;\\n\\theight: 16px;\\n}\\n.ui-icon,\\n.ui-widget-content .ui-icon {\\n\\tbackground-image: url(\\\"images/ui-icons_444444_256x240.png\\\")/*{iconsContent}*/;\\n}\\n.ui-widget-header .ui-icon {\\n\\tbackground-image: url(\\\"images/ui-icons_444444_256x240.png\\\")/*{iconsHeader}*/;\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon,\\n.ui-button:hover .ui-icon,\\n.ui-button:focus .ui-icon {\\n\\tbackground-image: url(\\\"images/ui-icons_555555_256x240.png\\\")/*{iconsHover}*/;\\n}\\n.ui-state-active .ui-icon,\\n.ui-button:active .ui-icon {\\n\\tbackground-image: url(\\\"images/ui-icons_ffffff_256x240.png\\\")/*{iconsActive}*/;\\n}\\n.ui-state-highlight .ui-icon,\\n.ui-button .ui-state-highlight.ui-icon {\\n\\tbackground-image: url(\\\"images/ui-icons_777620_256x240.png\\\")/*{iconsHighlight}*/;\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url(\\\"images/ui-icons_cc0000_256x240.png\\\")/*{iconsError}*/;\\n}\\n.ui-button .ui-icon {\\n\\tbackground-image: url(\\\"images/ui-icons_777777_256x240.png\\\")/*{iconsDefault}*/;\\n}\\n\\n/* positioning */\\n.ui-icon-blank { background-position: 16px 16px; }\\n.ui-icon-caret-1-n { background-position: 0 0; }\\n.ui-icon-caret-1-ne { background-position: -16px 0; }\\n.ui-icon-caret-1-e { background-position: -32px 0; }\\n.ui-icon-caret-1-se { background-position: -48px 0; }\\n.ui-icon-caret-1-s { background-position: -65px 0; }\\n.ui-icon-caret-1-sw { background-position: -80px 0; }\\n.ui-icon-caret-1-w { background-position: -96px 0; }\\n.ui-icon-caret-1-nw { background-position: -112px 0; }\\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\\n.ui-icon-arrow-4 { background-position: 0 -80px; }\\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\\n.ui-icon-extlink { background-position: -32px -80px; }\\n.ui-icon-newwin { background-position: -48px -80px; }\\n.ui-icon-refresh { background-position: -64px -80px; }\\n.ui-icon-shuffle { background-position: -80px -80px; }\\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\\n.ui-icon-folder-open { background-position: -16px -96px; }\\n.ui-icon-document { background-position: -32px -96px; }\\n.ui-icon-document-b { background-position: -48px -96px; }\\n.ui-icon-note { background-position: -64px -96px; }\\n.ui-icon-mail-closed { background-position: -80px -96px; }\\n.ui-icon-mail-open { background-position: -96px -96px; }\\n.ui-icon-suitcase { background-position: -112px -96px; }\\n.ui-icon-comment { background-position: -128px -96px; }\\n.ui-icon-person { background-position: -144px -96px; }\\n.ui-icon-print { background-position: -160px -96px; }\\n.ui-icon-trash { background-position: -176px -96px; }\\n.ui-icon-locked { background-position: -192px -96px; }\\n.ui-icon-unlocked { background-position: -208px -96px; }\\n.ui-icon-bookmark { background-position: -224px -96px; }\\n.ui-icon-tag { background-position: -240px -96px; }\\n.ui-icon-home { background-position: 0 -112px; }\\n.ui-icon-flag { background-position: -16px -112px; }\\n.ui-icon-calendar { background-position: -32px -112px; }\\n.ui-icon-cart { background-position: -48px -112px; }\\n.ui-icon-pencil { background-position: -64px -112px; }\\n.ui-icon-clock { background-position: -80px -112px; }\\n.ui-icon-disk { background-position: -96px -112px; }\\n.ui-icon-calculator { background-position: -112px -112px; }\\n.ui-icon-zoomin { background-position: -128px -112px; }\\n.ui-icon-zoomout { background-position: -144px -112px; }\\n.ui-icon-search { background-position: -160px -112px; }\\n.ui-icon-wrench { background-position: -176px -112px; }\\n.ui-icon-gear { background-position: -192px -112px; }\\n.ui-icon-heart { background-position: -208px -112px; }\\n.ui-icon-star { background-position: -224px -112px; }\\n.ui-icon-link { background-position: -240px -112px; }\\n.ui-icon-cancel { background-position: 0 -128px; }\\n.ui-icon-plus { background-position: -16px -128px; }\\n.ui-icon-plusthick { background-position: -32px -128px; }\\n.ui-icon-minus { background-position: -48px -128px; }\\n.ui-icon-minusthick { background-position: -64px -128px; }\\n.ui-icon-close { background-position: -80px -128px; }\\n.ui-icon-closethick { background-position: -96px -128px; }\\n.ui-icon-key { background-position: -112px -128px; }\\n.ui-icon-lightbulb { background-position: -128px -128px; }\\n.ui-icon-scissors { background-position: -144px -128px; }\\n.ui-icon-clipboard { background-position: -160px -128px; }\\n.ui-icon-copy { background-position: -176px -128px; }\\n.ui-icon-contact { background-position: -192px -128px; }\\n.ui-icon-image { background-position: -208px -128px; }\\n.ui-icon-video { background-position: -224px -128px; }\\n.ui-icon-script { background-position: -240px -128px; }\\n.ui-icon-alert { background-position: 0 -144px; }\\n.ui-icon-info { background-position: -16px -144px; }\\n.ui-icon-notice { background-position: -32px -144px; }\\n.ui-icon-help { background-position: -48px -144px; }\\n.ui-icon-check { background-position: -64px -144px; }\\n.ui-icon-bullet { background-position: -80px -144px; }\\n.ui-icon-radio-on { background-position: -96px -144px; }\\n.ui-icon-radio-off { background-position: -112px -144px; }\\n.ui-icon-pin-w { background-position: -128px -144px; }\\n.ui-icon-pin-s { background-position: -144px -144px; }\\n.ui-icon-play { background-position: 0 -160px; }\\n.ui-icon-pause { background-position: -16px -160px; }\\n.ui-icon-seek-next { background-position: -32px -160px; }\\n.ui-icon-seek-prev { background-position: -48px -160px; }\\n.ui-icon-seek-end { background-position: -64px -160px; }\\n.ui-icon-seek-start { background-position: -80px -160px; }\\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\\n.ui-icon-seek-first { background-position: -80px -160px; }\\n.ui-icon-stop { background-position: -96px -160px; }\\n.ui-icon-eject { background-position: -112px -160px; }\\n.ui-icon-volume-off { background-position: -128px -160px; }\\n.ui-icon-volume-on { background-position: -144px -160px; }\\n.ui-icon-power { background-position: 0 -176px; }\\n.ui-icon-signal-diag { background-position: -16px -176px; }\\n.ui-icon-signal { background-position: -32px -176px; }\\n.ui-icon-battery-0 { background-position: -48px -176px; }\\n.ui-icon-battery-1 { background-position: -64px -176px; }\\n.ui-icon-battery-2 { background-position: -80px -176px; }\\n.ui-icon-battery-3 { background-position: -96px -176px; }\\n.ui-icon-circle-plus { background-position: 0 -192px; }\\n.ui-icon-circle-minus { background-position: -16px -192px; }\\n.ui-icon-circle-close { background-position: -32px -192px; }\\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\\n.ui-icon-circle-check { background-position: -208px -192px; }\\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\\n\\n\\n/* Misc visuals\\n----------------------------------*/\\n\\n/* Corner radius */\\n.ui-corner-all,\\n.ui-corner-top,\\n.ui-corner-left,\\n.ui-corner-tl {\\n\\tborder-top-left-radius: 3px/*{cornerRadius}*/;\\n}\\n.ui-corner-all,\\n.ui-corner-top,\\n.ui-corner-right,\\n.ui-corner-tr {\\n\\tborder-top-right-radius: 3px/*{cornerRadius}*/;\\n}\\n.ui-corner-all,\\n.ui-corner-bottom,\\n.ui-corner-left,\\n.ui-corner-bl {\\n\\tborder-bottom-left-radius: 3px/*{cornerRadius}*/;\\n}\\n.ui-corner-all,\\n.ui-corner-bottom,\\n.ui-corner-right,\\n.ui-corner-br {\\n\\tborder-bottom-right-radius: 3px/*{cornerRadius}*/;\\n}\\n\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #aaaaaa/*{bgColorOverlay}*/ /*{bgImgUrlOverlay}*/ /*{bgOverlayXPos}*/ /*{bgOverlayYPos}*/ /*{bgOverlayRepeat}*/;\\n\\topacity: .3/*{opacityOverlay}*/;\\n\\tfilter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; /* support: IE8 */\\n}\\n.ui-widget-shadow {\\n\\t-webkit-box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\\n\\tbox-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/*!\\n * jQuery UI Tooltip 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/tooltip/#theming\\n */\\n.ui-tooltip {\\n\\tpadding: 8px;\\n\\tposition: absolute;\\n\\tz-index: 9999;\\n\\tmax-width: 300px;\\n}\\nbody .ui-tooltip {\\n\\tborder-width: 2px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/jquery-ui/themes/base/tooltip.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;EASE;AACF;CACC,YAAY;CACZ,kBAAkB;CAClB,aAAa;CACb,gBAAgB;AACjB;AACA;CACC,iBAAiB;AAClB\",\"sourcesContent\":[\"/*!\\n * jQuery UI Tooltip 1.12.1\\n * http://jqueryui.com\\n *\\n * Copyright jQuery Foundation and other contributors\\n * Released under the MIT license.\\n * http://jquery.org/license\\n *\\n * http://api.jqueryui.com/tooltip/#theming\\n */\\n.ui-tooltip {\\n\\tpadding: 8px;\\n\\tposition: absolute;\\n\\tz-index: 9999;\\n\\tmax-width: 300px;\\n}\\nbody .ui-tooltip {\\n\\tborder-width: 2px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/**\\n * selectize.css (v0.12.6)\\n * Copyright (c) 2013–2015 Brian Reavis & contributors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use this\\n * file except in compliance with the License. You may obtain a copy of the License at:\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software distributed under\\n * the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\\n * ANY KIND, either express or implied. See the License for the specific language\\n * governing permissions and limitations under the License.\\n *\\n * @author Brian Reavis \\n */\\n\\n.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {\\n visibility: visible !important;\\n background: #f2f2f2 !important;\\n background: rgba(0, 0, 0, 0.06) !important;\\n border: 0 none !important;\\n -webkit-box-shadow: inset 0 0 12px 4px #fff;\\n box-shadow: inset 0 0 12px 4px #fff;\\n}\\n.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {\\n content: '!';\\n visibility: hidden;\\n}\\n.selectize-control.plugin-drag_drop .ui-sortable-helper {\\n -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\\n}\\n.selectize-dropdown-header {\\n position: relative;\\n padding: 5px 8px;\\n border-bottom: 1px solid #d0d0d0;\\n background: #f8f8f8;\\n -webkit-border-radius: 3px 3px 0 0;\\n -moz-border-radius: 3px 3px 0 0;\\n border-radius: 3px 3px 0 0;\\n}\\n.selectize-dropdown-header-close {\\n position: absolute;\\n right: 8px;\\n top: 50%;\\n color: #303030;\\n opacity: 0.4;\\n margin-top: -12px;\\n line-height: 20px;\\n font-size: 20px !important;\\n}\\n.selectize-dropdown-header-close:hover {\\n color: #000000;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup {\\n border-right: 1px solid #f2f2f2;\\n border-top: 0 none;\\n float: left;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {\\n border-right: 0 none;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup:before {\\n display: none;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup-header {\\n border-top: 0 none;\\n}\\n.selectize-control.plugin-remove_button [data-value] {\\n position: relative;\\n padding-right: 24px !important;\\n}\\n.selectize-control.plugin-remove_button [data-value] .remove {\\n z-index: 1;\\n /* fixes ie bug (see #392) */\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n width: 17px;\\n text-align: center;\\n font-weight: bold;\\n font-size: 12px;\\n color: inherit;\\n text-decoration: none;\\n vertical-align: middle;\\n display: inline-block;\\n padding: 2px 0 0 0;\\n border-left: 1px solid #d0d0d0;\\n -webkit-border-radius: 0 2px 2px 0;\\n -moz-border-radius: 0 2px 2px 0;\\n border-radius: 0 2px 2px 0;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.selectize-control.plugin-remove_button [data-value] .remove:hover {\\n background: rgba(0, 0, 0, 0.05);\\n}\\n.selectize-control.plugin-remove_button [data-value].active .remove {\\n border-left-color: #cacaca;\\n}\\n.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {\\n background: none;\\n}\\n.selectize-control.plugin-remove_button .disabled [data-value] .remove {\\n border-left-color: #ffffff;\\n}\\n.selectize-control.plugin-remove_button .remove-single {\\n position: absolute;\\n right: 0;\\n top: 0;\\n font-size: 23px;\\n}\\n.selectize-control {\\n position: relative;\\n}\\n.selectize-dropdown,\\n.selectize-input,\\n.selectize-input input {\\n color: #303030;\\n font-family: inherit;\\n font-size: 13px;\\n line-height: 18px;\\n -webkit-font-smoothing: inherit;\\n}\\n.selectize-input,\\n.selectize-control.single .selectize-input.input-active {\\n background: #fff;\\n cursor: text;\\n display: inline-block;\\n}\\n.selectize-input {\\n border: 1px solid #d0d0d0;\\n padding: 8px 8px;\\n display: inline-block;\\n width: 100%;\\n overflow: hidden;\\n position: relative;\\n z-index: 1;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);\\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);\\n -webkit-border-radius: 3px;\\n -moz-border-radius: 3px;\\n border-radius: 3px;\\n}\\n.selectize-control.multi .selectize-input.has-items {\\n padding: 6px 8px 3px;\\n}\\n.selectize-input.full {\\n background-color: #fff;\\n}\\n.selectize-input.disabled,\\n.selectize-input.disabled * {\\n cursor: default !important;\\n}\\n.selectize-input.focus {\\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);\\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);\\n}\\n.selectize-input.dropdown-active {\\n -webkit-border-radius: 3px 3px 0 0;\\n -moz-border-radius: 3px 3px 0 0;\\n border-radius: 3px 3px 0 0;\\n}\\n.selectize-input > * {\\n vertical-align: baseline;\\n display: -moz-inline-stack;\\n display: inline-block;\\n zoom: 1;\\n *display: inline;\\n}\\n.selectize-control.multi .selectize-input > div {\\n cursor: pointer;\\n margin: 0 3px 3px 0;\\n padding: 2px 6px;\\n background: #f2f2f2;\\n color: #303030;\\n border: 0 solid #d0d0d0;\\n}\\n.selectize-control.multi .selectize-input > div.active {\\n background: #e8e8e8;\\n color: #303030;\\n border: 0 solid #cacaca;\\n}\\n.selectize-control.multi .selectize-input.disabled > div,\\n.selectize-control.multi .selectize-input.disabled > div.active {\\n color: #7d7d7d;\\n background: #ffffff;\\n border: 0 solid #ffffff;\\n}\\n.selectize-input > input {\\n display: inline-block !important;\\n padding: 0 !important;\\n min-height: 0 !important;\\n max-height: none !important;\\n max-width: 100% !important;\\n margin: 0 2px 0 0 !important;\\n text-indent: 0 !important;\\n border: 0 none !important;\\n background: none !important;\\n line-height: inherit !important;\\n -webkit-user-select: auto !important;\\n -webkit-box-shadow: none !important;\\n box-shadow: none !important;\\n}\\n.selectize-input > input::-ms-clear {\\n display: none;\\n}\\n.selectize-input > input:focus {\\n outline: none !important;\\n}\\n.selectize-input::after {\\n content: ' ';\\n display: block;\\n clear: left;\\n}\\n.selectize-input.dropdown-active::before {\\n content: ' ';\\n display: block;\\n position: absolute;\\n background: #f0f0f0;\\n height: 1px;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n}\\n.selectize-dropdown {\\n position: absolute;\\n z-index: 10;\\n border: 1px solid #d0d0d0;\\n background: #fff;\\n margin: -1px 0 0 0;\\n border-top: 0 none;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\\n -webkit-border-radius: 0 0 3px 3px;\\n -moz-border-radius: 0 0 3px 3px;\\n border-radius: 0 0 3px 3px;\\n}\\n.selectize-dropdown [data-selectable] {\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.selectize-dropdown [data-selectable] .highlight {\\n background: rgba(125, 168, 208, 0.2);\\n -webkit-border-radius: 1px;\\n -moz-border-radius: 1px;\\n border-radius: 1px;\\n}\\n.selectize-dropdown .option,\\n.selectize-dropdown .optgroup-header {\\n padding: 5px 8px;\\n}\\n.selectize-dropdown .option,\\n.selectize-dropdown [data-disabled],\\n.selectize-dropdown [data-disabled] [data-selectable].option {\\n cursor: inherit;\\n opacity: 0.5;\\n}\\n.selectize-dropdown [data-selectable].option {\\n opacity: 1;\\n}\\n.selectize-dropdown .optgroup:first-child .optgroup-header {\\n border-top: 0 none;\\n}\\n.selectize-dropdown .optgroup-header {\\n color: #303030;\\n background: #fff;\\n cursor: default;\\n}\\n.selectize-dropdown .active {\\n background-color: #f5fafd;\\n color: #495c68;\\n}\\n.selectize-dropdown .active.create {\\n color: #495c68;\\n}\\n.selectize-dropdown .create {\\n color: rgba(48, 48, 48, 0.5);\\n}\\n.selectize-dropdown-content {\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 200px;\\n -webkit-overflow-scrolling: touch;\\n}\\n.selectize-control.single .selectize-input,\\n.selectize-control.single .selectize-input input {\\n cursor: pointer;\\n}\\n.selectize-control.single .selectize-input.input-active,\\n.selectize-control.single .selectize-input.input-active input {\\n cursor: text;\\n}\\n.selectize-control.single .selectize-input:after {\\n content: ' ';\\n display: block;\\n position: absolute;\\n top: 50%;\\n right: 15px;\\n margin-top: -3px;\\n width: 0;\\n height: 0;\\n border-style: solid;\\n border-width: 5px 5px 0 5px;\\n border-color: #808080 transparent transparent transparent;\\n}\\n.selectize-control.single .selectize-input.dropdown-active:after {\\n margin-top: -4px;\\n border-width: 0 5px 5px 5px;\\n border-color: transparent transparent #808080 transparent;\\n}\\n.selectize-control.rtl.single .selectize-input:after {\\n left: 15px;\\n right: auto;\\n}\\n.selectize-control.rtl .selectize-input > input {\\n margin: 0 4px 0 -2px !important;\\n}\\n.selectize-control .selectize-input.disabled {\\n opacity: 0.5;\\n background-color: #fafafa;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/selectize/dist/css/selectize.css\"],\"names\":[],\"mappings\":\"AAAA;;;;;;;;;;;;;;EAcE;;AAEF;EACE,8BAA8B;EAC9B,8BAA8B;EAC9B,0CAA0C;EAC1C,yBAAyB;EACzB,2CAA2C;EAC3C,mCAAmC;AACrC;AACA;EACE,YAAY;EACZ,kBAAkB;AACpB;AACA;EACE,gDAAgD;EAChD,wCAAwC;AAC1C;AACA;EACE,kBAAkB;EAClB,gBAAgB;EAChB,gCAAgC;EAChC,mBAAmB;EACnB,kCAAkC;EAClC,+BAA+B;EAC/B,0BAA0B;AAC5B;AACA;EACE,kBAAkB;EAClB,UAAU;EACV,QAAQ;EACR,cAAc;EACd,YAAY;EACZ,iBAAiB;EACjB,iBAAiB;EACjB,0BAA0B;AAC5B;AACA;EACE,cAAc;AAChB;AACA;EACE,+BAA+B;EAC/B,kBAAkB;EAClB,WAAW;EACX,8BAA8B;EAC9B,2BAA2B;EAC3B,sBAAsB;AACxB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,aAAa;AACf;AACA;EACE,kBAAkB;AACpB;AACA;EACE,kBAAkB;EAClB,8BAA8B;AAChC;AACA;EACE,UAAU;EACV,4BAA4B;EAC5B,kBAAkB;EAClB,MAAM;EACN,QAAQ;EACR,SAAS;EACT,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,eAAe;EACf,cAAc;EACd,qBAAqB;EACrB,sBAAsB;EACtB,qBAAqB;EACrB,kBAAkB;EAClB,8BAA8B;EAC9B,kCAAkC;EAClC,+BAA+B;EAC/B,0BAA0B;EAC1B,8BAA8B;EAC9B,2BAA2B;EAC3B,sBAAsB;AACxB;AACA;EACE,+BAA+B;AACjC;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,gBAAgB;AAClB;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,kBAAkB;EAClB,QAAQ;EACR,MAAM;EACN,eAAe;AACjB;AACA;EACE,kBAAkB;AACpB;AACA;;;EAGE,cAAc;EACd,oBAAoB;EACpB,eAAe;EACf,iBAAiB;EACjB,+BAA+B;AACjC;AACA;;EAEE,gBAAgB;EAChB,YAAY;EACZ,qBAAqB;AACvB;AACA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,qBAAqB;EACrB,WAAW;EACX,gBAAgB;EAChB,kBAAkB;EAClB,UAAU;EACV,8BAA8B;EAC9B,2BAA2B;EAC3B,sBAAsB;EACtB,sDAAsD;EACtD,8CAA8C;EAC9C,0BAA0B;EAC1B,uBAAuB;EACvB,kBAAkB;AACpB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,sBAAsB;AACxB;AACA;;EAEE,0BAA0B;AAC5B;AACA;EACE,uDAAuD;EACvD,+CAA+C;AACjD;AACA;EACE,kCAAkC;EAClC,+BAA+B;EAC/B,0BAA0B;AAC5B;AACA;EACE,wBAAwB;EACxB,0BAA0B;EAC1B,qBAAqB;EACrB,OAAO;GACP,eAAgB;AAClB;AACA;EACE,eAAe;EACf,mBAAmB;EACnB,gBAAgB;EAChB,mBAAmB;EACnB,cAAc;EACd,uBAAuB;AACzB;AACA;EACE,mBAAmB;EACnB,cAAc;EACd,uBAAuB;AACzB;AACA;;EAEE,cAAc;EACd,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,gCAAgC;EAChC,qBAAqB;EACrB,wBAAwB;EACxB,2BAA2B;EAC3B,0BAA0B;EAC1B,4BAA4B;EAC5B,yBAAyB;EACzB,yBAAyB;EACzB,2BAA2B;EAC3B,+BAA+B;EAC/B,oCAAoC;EACpC,mCAAmC;EACnC,2BAA2B;AAC7B;AACA;EACE,aAAa;AACf;AACA;EACE,wBAAwB;AAC1B;AACA;EACE,YAAY;EACZ,cAAc;EACd,WAAW;AACb;AACA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,mBAAmB;EACnB,WAAW;EACX,SAAS;EACT,OAAO;EACP,QAAQ;AACV;AACA;EACE,kBAAkB;EAClB,WAAW;EACX,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,kBAAkB;EAClB,8BAA8B;EAC9B,2BAA2B;EAC3B,sBAAsB;EACtB,gDAAgD;EAChD,wCAAwC;EACxC,kCAAkC;EAClC,+BAA+B;EAC/B,0BAA0B;AAC5B;AACA;EACE,eAAe;EACf,gBAAgB;AAClB;AACA;EACE,oCAAoC;EACpC,0BAA0B;EAC1B,uBAAuB;EACvB,kBAAkB;AACpB;AACA;;EAEE,gBAAgB;AAClB;AACA;;;EAGE,eAAe;EACf,YAAY;AACd;AACA;EACE,UAAU;AACZ;AACA;EACE,kBAAkB;AACpB;AACA;EACE,cAAc;EACd,gBAAgB;EAChB,eAAe;AACjB;AACA;EACE,yBAAyB;EACzB,cAAc;AAChB;AACA;EACE,cAAc;AAChB;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,gBAAgB;EAChB,kBAAkB;EAClB,iBAAiB;EACjB,iCAAiC;AACnC;AACA;;EAEE,eAAe;AACjB;AACA;;EAEE,YAAY;AACd;AACA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,WAAW;EACX,gBAAgB;EAChB,QAAQ;EACR,SAAS;EACT,mBAAmB;EACnB,2BAA2B;EAC3B,yDAAyD;AAC3D;AACA;EACE,gBAAgB;EAChB,2BAA2B;EAC3B,yDAAyD;AAC3D;AACA;EACE,UAAU;EACV,WAAW;AACb;AACA;EACE,+BAA+B;AACjC;AACA;EACE,YAAY;EACZ,yBAAyB;AAC3B\",\"sourcesContent\":[\"/**\\n * selectize.css (v0.12.6)\\n * Copyright (c) 2013–2015 Brian Reavis & contributors\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use this\\n * file except in compliance with the License. You may obtain a copy of the License at:\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software distributed under\\n * the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\\n * ANY KIND, either express or implied. See the License for the specific language\\n * governing permissions and limitations under the License.\\n *\\n * @author Brian Reavis \\n */\\n\\n.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {\\n visibility: visible !important;\\n background: #f2f2f2 !important;\\n background: rgba(0, 0, 0, 0.06) !important;\\n border: 0 none !important;\\n -webkit-box-shadow: inset 0 0 12px 4px #fff;\\n box-shadow: inset 0 0 12px 4px #fff;\\n}\\n.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {\\n content: '!';\\n visibility: hidden;\\n}\\n.selectize-control.plugin-drag_drop .ui-sortable-helper {\\n -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);\\n}\\n.selectize-dropdown-header {\\n position: relative;\\n padding: 5px 8px;\\n border-bottom: 1px solid #d0d0d0;\\n background: #f8f8f8;\\n -webkit-border-radius: 3px 3px 0 0;\\n -moz-border-radius: 3px 3px 0 0;\\n border-radius: 3px 3px 0 0;\\n}\\n.selectize-dropdown-header-close {\\n position: absolute;\\n right: 8px;\\n top: 50%;\\n color: #303030;\\n opacity: 0.4;\\n margin-top: -12px;\\n line-height: 20px;\\n font-size: 20px !important;\\n}\\n.selectize-dropdown-header-close:hover {\\n color: #000000;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup {\\n border-right: 1px solid #f2f2f2;\\n border-top: 0 none;\\n float: left;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {\\n border-right: 0 none;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup:before {\\n display: none;\\n}\\n.selectize-dropdown.plugin-optgroup_columns .optgroup-header {\\n border-top: 0 none;\\n}\\n.selectize-control.plugin-remove_button [data-value] {\\n position: relative;\\n padding-right: 24px !important;\\n}\\n.selectize-control.plugin-remove_button [data-value] .remove {\\n z-index: 1;\\n /* fixes ie bug (see #392) */\\n position: absolute;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n width: 17px;\\n text-align: center;\\n font-weight: bold;\\n font-size: 12px;\\n color: inherit;\\n text-decoration: none;\\n vertical-align: middle;\\n display: inline-block;\\n padding: 2px 0 0 0;\\n border-left: 1px solid #d0d0d0;\\n -webkit-border-radius: 0 2px 2px 0;\\n -moz-border-radius: 0 2px 2px 0;\\n border-radius: 0 2px 2px 0;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n}\\n.selectize-control.plugin-remove_button [data-value] .remove:hover {\\n background: rgba(0, 0, 0, 0.05);\\n}\\n.selectize-control.plugin-remove_button [data-value].active .remove {\\n border-left-color: #cacaca;\\n}\\n.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {\\n background: none;\\n}\\n.selectize-control.plugin-remove_button .disabled [data-value] .remove {\\n border-left-color: #ffffff;\\n}\\n.selectize-control.plugin-remove_button .remove-single {\\n position: absolute;\\n right: 0;\\n top: 0;\\n font-size: 23px;\\n}\\n.selectize-control {\\n position: relative;\\n}\\n.selectize-dropdown,\\n.selectize-input,\\n.selectize-input input {\\n color: #303030;\\n font-family: inherit;\\n font-size: 13px;\\n line-height: 18px;\\n -webkit-font-smoothing: inherit;\\n}\\n.selectize-input,\\n.selectize-control.single .selectize-input.input-active {\\n background: #fff;\\n cursor: text;\\n display: inline-block;\\n}\\n.selectize-input {\\n border: 1px solid #d0d0d0;\\n padding: 8px 8px;\\n display: inline-block;\\n width: 100%;\\n overflow: hidden;\\n position: relative;\\n z-index: 1;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);\\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);\\n -webkit-border-radius: 3px;\\n -moz-border-radius: 3px;\\n border-radius: 3px;\\n}\\n.selectize-control.multi .selectize-input.has-items {\\n padding: 6px 8px 3px;\\n}\\n.selectize-input.full {\\n background-color: #fff;\\n}\\n.selectize-input.disabled,\\n.selectize-input.disabled * {\\n cursor: default !important;\\n}\\n.selectize-input.focus {\\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);\\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);\\n}\\n.selectize-input.dropdown-active {\\n -webkit-border-radius: 3px 3px 0 0;\\n -moz-border-radius: 3px 3px 0 0;\\n border-radius: 3px 3px 0 0;\\n}\\n.selectize-input > * {\\n vertical-align: baseline;\\n display: -moz-inline-stack;\\n display: inline-block;\\n zoom: 1;\\n *display: inline;\\n}\\n.selectize-control.multi .selectize-input > div {\\n cursor: pointer;\\n margin: 0 3px 3px 0;\\n padding: 2px 6px;\\n background: #f2f2f2;\\n color: #303030;\\n border: 0 solid #d0d0d0;\\n}\\n.selectize-control.multi .selectize-input > div.active {\\n background: #e8e8e8;\\n color: #303030;\\n border: 0 solid #cacaca;\\n}\\n.selectize-control.multi .selectize-input.disabled > div,\\n.selectize-control.multi .selectize-input.disabled > div.active {\\n color: #7d7d7d;\\n background: #ffffff;\\n border: 0 solid #ffffff;\\n}\\n.selectize-input > input {\\n display: inline-block !important;\\n padding: 0 !important;\\n min-height: 0 !important;\\n max-height: none !important;\\n max-width: 100% !important;\\n margin: 0 2px 0 0 !important;\\n text-indent: 0 !important;\\n border: 0 none !important;\\n background: none !important;\\n line-height: inherit !important;\\n -webkit-user-select: auto !important;\\n -webkit-box-shadow: none !important;\\n box-shadow: none !important;\\n}\\n.selectize-input > input::-ms-clear {\\n display: none;\\n}\\n.selectize-input > input:focus {\\n outline: none !important;\\n}\\n.selectize-input::after {\\n content: ' ';\\n display: block;\\n clear: left;\\n}\\n.selectize-input.dropdown-active::before {\\n content: ' ';\\n display: block;\\n position: absolute;\\n background: #f0f0f0;\\n height: 1px;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n}\\n.selectize-dropdown {\\n position: absolute;\\n z-index: 10;\\n border: 1px solid #d0d0d0;\\n background: #fff;\\n margin: -1px 0 0 0;\\n border-top: 0 none;\\n -webkit-box-sizing: border-box;\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\\n -webkit-border-radius: 0 0 3px 3px;\\n -moz-border-radius: 0 0 3px 3px;\\n border-radius: 0 0 3px 3px;\\n}\\n.selectize-dropdown [data-selectable] {\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.selectize-dropdown [data-selectable] .highlight {\\n background: rgba(125, 168, 208, 0.2);\\n -webkit-border-radius: 1px;\\n -moz-border-radius: 1px;\\n border-radius: 1px;\\n}\\n.selectize-dropdown .option,\\n.selectize-dropdown .optgroup-header {\\n padding: 5px 8px;\\n}\\n.selectize-dropdown .option,\\n.selectize-dropdown [data-disabled],\\n.selectize-dropdown [data-disabled] [data-selectable].option {\\n cursor: inherit;\\n opacity: 0.5;\\n}\\n.selectize-dropdown [data-selectable].option {\\n opacity: 1;\\n}\\n.selectize-dropdown .optgroup:first-child .optgroup-header {\\n border-top: 0 none;\\n}\\n.selectize-dropdown .optgroup-header {\\n color: #303030;\\n background: #fff;\\n cursor: default;\\n}\\n.selectize-dropdown .active {\\n background-color: #f5fafd;\\n color: #495c68;\\n}\\n.selectize-dropdown .active.create {\\n color: #495c68;\\n}\\n.selectize-dropdown .create {\\n color: rgba(48, 48, 48, 0.5);\\n}\\n.selectize-dropdown-content {\\n overflow-y: auto;\\n overflow-x: hidden;\\n max-height: 200px;\\n -webkit-overflow-scrolling: touch;\\n}\\n.selectize-control.single .selectize-input,\\n.selectize-control.single .selectize-input input {\\n cursor: pointer;\\n}\\n.selectize-control.single .selectize-input.input-active,\\n.selectize-control.single .selectize-input.input-active input {\\n cursor: text;\\n}\\n.selectize-control.single .selectize-input:after {\\n content: ' ';\\n display: block;\\n position: absolute;\\n top: 50%;\\n right: 15px;\\n margin-top: -3px;\\n width: 0;\\n height: 0;\\n border-style: solid;\\n border-width: 5px 5px 0 5px;\\n border-color: #808080 transparent transparent transparent;\\n}\\n.selectize-control.single .selectize-input.dropdown-active:after {\\n margin-top: -4px;\\n border-width: 0 5px 5px 5px;\\n border-color: transparent transparent #808080 transparent;\\n}\\n.selectize-control.rtl.single .selectize-input:after {\\n left: 15px;\\n right: auto;\\n}\\n.selectize-control.rtl .selectize-input > input {\\n margin: 0 4px 0 -2px !important;\\n}\\n.selectize-control .selectize-input.disabled {\\n opacity: 0.5;\\n background-color: #fafafa;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n", "\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};", "\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\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.\"); }\n\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); }\n\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; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (typeof btoa === 'function') {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n};", "\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== 'string') {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n }\n\n return url;\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\nEventEmitter.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", "/*\n * International Telephone Input v17.0.8\n * https://github.com/jackocnr/intl-tel-input.git\n * Licensed under the MIT license\n */\n\n// wrap in UMD\n(function(factory) {\n if (typeof module === \"object\" && module.exports) module.exports = factory(); else window.intlTelInput = factory();\n})(function(undefined) {\n \"use strict\";\n return function() {\n // Array of country objects for the flag dropdown.\n // Here is the criteria for the plugin to support a given country/territory\n // - It has an iso2 code: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n // - It has it's own country calling code (it is not a sub-region of another country): https://en.wikipedia.org/wiki/List_of_country_calling_codes\n // - It has a flag in the region-flags project: https://github.com/behdad/region-flags/tree/gh-pages/png\n // - It is supported by libphonenumber (it must be listed on this page): https://github.com/googlei18n/libphonenumber/blob/master/resources/ShortNumberMetadata.xml\n // Each country array has the following information:\n // [\n // Country name,\n // iso2 code,\n // International dial code,\n // Order (if >1 country with same dial code),\n // Area codes\n // ]\n var allCountries = [ [ \"Afghanistan (‫افغانستان‬‎)\", \"af\", \"93\" ], [ \"Albania (Shqipëri)\", \"al\", \"355\" ], [ \"Algeria (‫الجزائر‬‎)\", \"dz\", \"213\" ], [ \"American Samoa\", \"as\", \"1\", 5, [ \"684\" ] ], [ \"Andorra\", \"ad\", \"376\" ], [ \"Angola\", \"ao\", \"244\" ], [ \"Anguilla\", \"ai\", \"1\", 6, [ \"264\" ] ], [ \"Antigua and Barbuda\", \"ag\", \"1\", 7, [ \"268\" ] ], [ \"Argentina\", \"ar\", \"54\" ], [ \"Armenia (Հայաստան)\", \"am\", \"374\" ], [ \"Aruba\", \"aw\", \"297\" ], [ \"Australia\", \"au\", \"61\", 0 ], [ \"Austria (Österreich)\", \"at\", \"43\" ], [ \"Azerbaijan (Azərbaycan)\", \"az\", \"994\" ], [ \"Bahamas\", \"bs\", \"1\", 8, [ \"242\" ] ], [ \"Bahrain (‫البحرين‬‎)\", \"bh\", \"973\" ], [ \"Bangladesh (বাংলাদেশ)\", \"bd\", \"880\" ], [ \"Barbados\", \"bb\", \"1\", 9, [ \"246\" ] ], [ \"Belarus (Беларусь)\", \"by\", \"375\" ], [ \"Belgium (België)\", \"be\", \"32\" ], [ \"Belize\", \"bz\", \"501\" ], [ \"Benin (Bénin)\", \"bj\", \"229\" ], [ \"Bermuda\", \"bm\", \"1\", 10, [ \"441\" ] ], [ \"Bhutan (འབྲུག)\", \"bt\", \"975\" ], [ \"Bolivia\", \"bo\", \"591\" ], [ \"Bosnia and Herzegovina (Босна и Херцеговина)\", \"ba\", \"387\" ], [ \"Botswana\", \"bw\", \"267\" ], [ \"Brazil (Brasil)\", \"br\", \"55\" ], [ \"British Indian Ocean Territory\", \"io\", \"246\" ], [ \"British Virgin Islands\", \"vg\", \"1\", 11, [ \"284\" ] ], [ \"Brunei\", \"bn\", \"673\" ], [ \"Bulgaria (България)\", \"bg\", \"359\" ], [ \"Burkina Faso\", \"bf\", \"226\" ], [ \"Burundi (Uburundi)\", \"bi\", \"257\" ], [ \"Cambodia (កម្ពុជា)\", \"kh\", \"855\" ], [ \"Cameroon (Cameroun)\", \"cm\", \"237\" ], [ \"Canada\", \"ca\", \"1\", 1, [ \"204\", \"226\", \"236\", \"249\", \"250\", \"289\", \"306\", \"343\", \"365\", \"387\", \"403\", \"416\", \"418\", \"431\", \"437\", \"438\", \"450\", \"506\", \"514\", \"519\", \"548\", \"579\", \"581\", \"587\", \"604\", \"613\", \"639\", \"647\", \"672\", \"705\", \"709\", \"742\", \"778\", \"780\", \"782\", \"807\", \"819\", \"825\", \"867\", \"873\", \"902\", \"905\" ] ], [ \"Cape Verde (Kabu Verdi)\", \"cv\", \"238\" ], [ \"Caribbean Netherlands\", \"bq\", \"599\", 1, [ \"3\", \"4\", \"7\" ] ], [ \"Cayman Islands\", \"ky\", \"1\", 12, [ \"345\" ] ], [ \"Central African Republic (République centrafricaine)\", \"cf\", \"236\" ], [ \"Chad (Tchad)\", \"td\", \"235\" ], [ \"Chile\", \"cl\", \"56\" ], [ \"China (中国)\", \"cn\", \"86\" ], [ \"Christmas Island\", \"cx\", \"61\", 2, [ \"89164\" ] ], [ \"Cocos (Keeling) Islands\", \"cc\", \"61\", 1, [ \"89162\" ] ], [ \"Colombia\", \"co\", \"57\" ], [ \"Comoros (‫جزر القمر‬‎)\", \"km\", \"269\" ], [ \"Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)\", \"cd\", \"243\" ], [ \"Congo (Republic) (Congo-Brazzaville)\", \"cg\", \"242\" ], [ \"Cook Islands\", \"ck\", \"682\" ], [ \"Costa Rica\", \"cr\", \"506\" ], [ \"Côte d’Ivoire\", \"ci\", \"225\" ], [ \"Croatia (Hrvatska)\", \"hr\", \"385\" ], [ \"Cuba\", \"cu\", \"53\" ], [ \"Curaçao\", \"cw\", \"599\", 0 ], [ \"Cyprus (Κύπρος)\", \"cy\", \"357\" ], [ \"Czech Republic (Česká republika)\", \"cz\", \"420\" ], [ \"Denmark (Danmark)\", \"dk\", \"45\" ], [ \"Djibouti\", \"dj\", \"253\" ], [ \"Dominica\", \"dm\", \"1\", 13, [ \"767\" ] ], [ \"Dominican Republic (República Dominicana)\", \"do\", \"1\", 2, [ \"809\", \"829\", \"849\" ] ], [ \"Ecuador\", \"ec\", \"593\" ], [ \"Egypt (‫مصر‬‎)\", \"eg\", \"20\" ], [ \"El Salvador\", \"sv\", \"503\" ], [ \"Equatorial Guinea (Guinea Ecuatorial)\", \"gq\", \"240\" ], [ \"Eritrea\", \"er\", \"291\" ], [ \"Estonia (Eesti)\", \"ee\", \"372\" ], [ \"Ethiopia\", \"et\", \"251\" ], [ \"Falkland Islands (Islas Malvinas)\", \"fk\", \"500\" ], [ \"Faroe Islands (Føroyar)\", \"fo\", \"298\" ], [ \"Fiji\", \"fj\", \"679\" ], [ \"Finland (Suomi)\", \"fi\", \"358\", 0 ], [ \"France\", \"fr\", \"33\" ], [ \"French Guiana (Guyane française)\", \"gf\", \"594\" ], [ \"French Polynesia (Polynésie française)\", \"pf\", \"689\" ], [ \"Gabon\", \"ga\", \"241\" ], [ \"Gambia\", \"gm\", \"220\" ], [ \"Georgia (საქართველო)\", \"ge\", \"995\" ], [ \"Germany (Deutschland)\", \"de\", \"49\" ], [ \"Ghana (Gaana)\", \"gh\", \"233\" ], [ \"Gibraltar\", \"gi\", \"350\" ], [ \"Greece (Ελλάδα)\", \"gr\", \"30\" ], [ \"Greenland (Kalaallit Nunaat)\", \"gl\", \"299\" ], [ \"Grenada\", \"gd\", \"1\", 14, [ \"473\" ] ], [ \"Guadeloupe\", \"gp\", \"590\", 0 ], [ \"Guam\", \"gu\", \"1\", 15, [ \"671\" ] ], [ \"Guatemala\", \"gt\", \"502\" ], [ \"Guernsey\", \"gg\", \"44\", 1, [ \"1481\", \"7781\", \"7839\", \"7911\" ] ], [ \"Guinea (Guinée)\", \"gn\", \"224\" ], [ \"Guinea-Bissau (Guiné Bissau)\", \"gw\", \"245\" ], [ \"Guyana\", \"gy\", \"592\" ], [ \"Haiti\", \"ht\", \"509\" ], [ \"Honduras\", \"hn\", \"504\" ], [ \"Hong Kong (香港)\", \"hk\", \"852\" ], [ \"Hungary (Magyarország)\", \"hu\", \"36\" ], [ \"Iceland (Ísland)\", \"is\", \"354\" ], [ \"India (भारत)\", \"in\", \"91\" ], [ \"Indonesia\", \"id\", \"62\" ], [ \"Iran (‫ایران‬‎)\", \"ir\", \"98\" ], [ \"Iraq (‫العراق‬‎)\", \"iq\", \"964\" ], [ \"Ireland\", \"ie\", \"353\" ], [ \"Isle of Man\", \"im\", \"44\", 2, [ \"1624\", \"74576\", \"7524\", \"7924\", \"7624\" ] ], [ \"Israel (‫ישראל‬‎)\", \"il\", \"972\" ], [ \"Italy (Italia)\", \"it\", \"39\", 0 ], [ \"Jamaica\", \"jm\", \"1\", 4, [ \"876\", \"658\" ] ], [ \"Japan (日本)\", \"jp\", \"81\" ], [ \"Jersey\", \"je\", \"44\", 3, [ \"1534\", \"7509\", \"7700\", \"7797\", \"7829\", \"7937\" ] ], [ \"Jordan (‫الأردن‬‎)\", \"jo\", \"962\" ], [ \"Kazakhstan (Казахстан)\", \"kz\", \"7\", 1, [ \"33\", \"7\" ] ], [ \"Kenya\", \"ke\", \"254\" ], [ \"Kiribati\", \"ki\", \"686\" ], [ \"Kosovo\", \"xk\", \"383\" ], [ \"Kuwait (‫الكويت‬‎)\", \"kw\", \"965\" ], [ \"Kyrgyzstan (Кыргызстан)\", \"kg\", \"996\" ], [ \"Laos (ລາວ)\", \"la\", \"856\" ], [ \"Latvia (Latvija)\", \"lv\", \"371\" ], [ \"Lebanon (‫لبنان‬‎)\", \"lb\", \"961\" ], [ \"Lesotho\", \"ls\", \"266\" ], [ \"Liberia\", \"lr\", \"231\" ], [ \"Libya (‫ليبيا‬‎)\", \"ly\", \"218\" ], [ \"Liechtenstein\", \"li\", \"423\" ], [ \"Lithuania (Lietuva)\", \"lt\", \"370\" ], [ \"Luxembourg\", \"lu\", \"352\" ], [ \"Macau (澳門)\", \"mo\", \"853\" ], [ \"Macedonia (FYROM) (Македонија)\", \"mk\", \"389\" ], [ \"Madagascar (Madagasikara)\", \"mg\", \"261\" ], [ \"Malawi\", \"mw\", \"265\" ], [ \"Malaysia\", \"my\", \"60\" ], [ \"Maldives\", \"mv\", \"960\" ], [ \"Mali\", \"ml\", \"223\" ], [ \"Malta\", \"mt\", \"356\" ], [ \"Marshall Islands\", \"mh\", \"692\" ], [ \"Martinique\", \"mq\", \"596\" ], [ \"Mauritania (‫موريتانيا‬‎)\", \"mr\", \"222\" ], [ \"Mauritius (Moris)\", \"mu\", \"230\" ], [ \"Mayotte\", \"yt\", \"262\", 1, [ \"269\", \"639\" ] ], [ \"Mexico (México)\", \"mx\", \"52\" ], [ \"Micronesia\", \"fm\", \"691\" ], [ \"Moldova (Republica Moldova)\", \"md\", \"373\" ], [ \"Monaco\", \"mc\", \"377\" ], [ \"Mongolia (Монгол)\", \"mn\", \"976\" ], [ \"Montenegro (Crna Gora)\", \"me\", \"382\" ], [ \"Montserrat\", \"ms\", \"1\", 16, [ \"664\" ] ], [ \"Morocco (‫المغرب‬‎)\", \"ma\", \"212\", 0 ], [ \"Mozambique (Moçambique)\", \"mz\", \"258\" ], [ \"Myanmar (Burma) (မြန်မာ)\", \"mm\", \"95\" ], [ \"Namibia (Namibië)\", \"na\", \"264\" ], [ \"Nauru\", \"nr\", \"674\" ], [ \"Nepal (नेपाल)\", \"np\", \"977\" ], [ \"Netherlands (Nederland)\", \"nl\", \"31\" ], [ \"New Caledonia (Nouvelle-Calédonie)\", \"nc\", \"687\" ], [ \"New Zealand\", \"nz\", \"64\" ], [ \"Nicaragua\", \"ni\", \"505\" ], [ \"Niger (Nijar)\", \"ne\", \"227\" ], [ \"Nigeria\", \"ng\", \"234\" ], [ \"Niue\", \"nu\", \"683\" ], [ \"Norfolk Island\", \"nf\", \"672\" ], [ \"North Korea (조선 민주주의 인민 공화국)\", \"kp\", \"850\" ], [ \"Northern Mariana Islands\", \"mp\", \"1\", 17, [ \"670\" ] ], [ \"Norway (Norge)\", \"no\", \"47\", 0 ], [ \"Oman (‫عُمان‬‎)\", \"om\", \"968\" ], [ \"Pakistan (‫پاکستان‬‎)\", \"pk\", \"92\" ], [ \"Palau\", \"pw\", \"680\" ], [ \"Palestine (‫فلسطين‬‎)\", \"ps\", \"970\" ], [ \"Panama (Panamá)\", \"pa\", \"507\" ], [ \"Papua New Guinea\", \"pg\", \"675\" ], [ \"Paraguay\", \"py\", \"595\" ], [ \"Peru (Perú)\", \"pe\", \"51\" ], [ \"Philippines\", \"ph\", \"63\" ], [ \"Poland (Polska)\", \"pl\", \"48\" ], [ \"Portugal\", \"pt\", \"351\" ], [ \"Puerto Rico\", \"pr\", \"1\", 3, [ \"787\", \"939\" ] ], [ \"Qatar (‫قطر‬‎)\", \"qa\", \"974\" ], [ \"Réunion (La Réunion)\", \"re\", \"262\", 0 ], [ \"Romania (România)\", \"ro\", \"40\" ], [ \"Russia (Россия)\", \"ru\", \"7\", 0 ], [ \"Rwanda\", \"rw\", \"250\" ], [ \"Saint Barthélemy\", \"bl\", \"590\", 1 ], [ \"Saint Helena\", \"sh\", \"290\" ], [ \"Saint Kitts and Nevis\", \"kn\", \"1\", 18, [ \"869\" ] ], [ \"Saint Lucia\", \"lc\", \"1\", 19, [ \"758\" ] ], [ \"Saint Martin (Saint-Martin (partie française))\", \"mf\", \"590\", 2 ], [ \"Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)\", \"pm\", \"508\" ], [ \"Saint Vincent and the Grenadines\", \"vc\", \"1\", 20, [ \"784\" ] ], [ \"Samoa\", \"ws\", \"685\" ], [ \"San Marino\", \"sm\", \"378\" ], [ \"São Tomé and Príncipe (São Tomé e Príncipe)\", \"st\", \"239\" ], [ \"Saudi Arabia (‫المملكة العربية السعودية‬‎)\", \"sa\", \"966\" ], [ \"Senegal (Sénégal)\", \"sn\", \"221\" ], [ \"Serbia (Србија)\", \"rs\", \"381\" ], [ \"Seychelles\", \"sc\", \"248\" ], [ \"Sierra Leone\", \"sl\", \"232\" ], [ \"Singapore\", \"sg\", \"65\" ], [ \"Sint Maarten\", \"sx\", \"1\", 21, [ \"721\" ] ], [ \"Slovakia (Slovensko)\", \"sk\", \"421\" ], [ \"Slovenia (Slovenija)\", \"si\", \"386\" ], [ \"Solomon Islands\", \"sb\", \"677\" ], [ \"Somalia (Soomaaliya)\", \"so\", \"252\" ], [ \"South Africa\", \"za\", \"27\" ], [ \"South Korea (대한민국)\", \"kr\", \"82\" ], [ \"South Sudan (‫جنوب السودان‬‎)\", \"ss\", \"211\" ], [ \"Spain (España)\", \"es\", \"34\" ], [ \"Sri Lanka (ශ්‍රී ලංකාව)\", \"lk\", \"94\" ], [ \"Sudan (‫السودان‬‎)\", \"sd\", \"249\" ], [ \"Suriname\", \"sr\", \"597\" ], [ \"Svalbard and Jan Mayen\", \"sj\", \"47\", 1, [ \"79\" ] ], [ \"Swaziland\", \"sz\", \"268\" ], [ \"Sweden (Sverige)\", \"se\", \"46\" ], [ \"Switzerland (Schweiz)\", \"ch\", \"41\" ], [ \"Syria (‫سوريا‬‎)\", \"sy\", \"963\" ], [ \"Taiwan (台灣)\", \"tw\", \"886\" ], [ \"Tajikistan\", \"tj\", \"992\" ], [ \"Tanzania\", \"tz\", \"255\" ], [ \"Thailand (ไทย)\", \"th\", \"66\" ], [ \"Timor-Leste\", \"tl\", \"670\" ], [ \"Togo\", \"tg\", \"228\" ], [ \"Tokelau\", \"tk\", \"690\" ], [ \"Tonga\", \"to\", \"676\" ], [ \"Trinidad and Tobago\", \"tt\", \"1\", 22, [ \"868\" ] ], [ \"Tunisia (‫تونس‬‎)\", \"tn\", \"216\" ], [ \"Turkey (Türkiye)\", \"tr\", \"90\" ], [ \"Turkmenistan\", \"tm\", \"993\" ], [ \"Turks and Caicos Islands\", \"tc\", \"1\", 23, [ \"649\" ] ], [ \"Tuvalu\", \"tv\", \"688\" ], [ \"U.S. Virgin Islands\", \"vi\", \"1\", 24, [ \"340\" ] ], [ \"Uganda\", \"ug\", \"256\" ], [ \"Ukraine (Україна)\", \"ua\", \"380\" ], [ \"United Arab Emirates (‫الإمارات العربية المتحدة‬‎)\", \"ae\", \"971\" ], [ \"United Kingdom\", \"gb\", \"44\", 0 ], [ \"United States\", \"us\", \"1\", 0 ], [ \"Uruguay\", \"uy\", \"598\" ], [ \"Uzbekistan (Oʻzbekiston)\", \"uz\", \"998\" ], [ \"Vanuatu\", \"vu\", \"678\" ], [ \"Vatican City (Città del Vaticano)\", \"va\", \"39\", 1, [ \"06698\" ] ], [ \"Venezuela\", \"ve\", \"58\" ], [ \"Vietnam (Việt Nam)\", \"vn\", \"84\" ], [ \"Wallis and Futuna (Wallis-et-Futuna)\", \"wf\", \"681\" ], [ \"Western Sahara (‫الصحراء الغربية‬‎)\", \"eh\", \"212\", 1, [ \"5288\", \"5289\" ] ], [ \"Yemen (‫اليمن‬‎)\", \"ye\", \"967\" ], [ \"Zambia\", \"zm\", \"260\" ], [ \"Zimbabwe\", \"zw\", \"263\" ], [ \"Åland Islands\", \"ax\", \"358\", 1, [ \"18\" ] ] ];\n // loop over all of the countries above, restructuring the data to be objects with named keys\n for (var i = 0; i < allCountries.length; i++) {\n var c = allCountries[i];\n allCountries[i] = {\n name: c[0],\n iso2: c[1],\n dialCode: c[2],\n priority: c[3] || 0,\n areaCodes: c[4] || null\n };\n }\n \"use strict\";\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n var intlTelInputGlobals = {\n getInstance: function getInstance(input) {\n var id = input.getAttribute(\"data-intl-tel-input-id\");\n return window.intlTelInputGlobals.instances[id];\n },\n instances: {},\n // using a global like this allows us to mock it in the tests\n documentReady: function documentReady() {\n return document.readyState === \"complete\";\n }\n };\n if (typeof window === \"object\") window.intlTelInputGlobals = intlTelInputGlobals;\n // these vars persist through all instances of the plugin\n var id = 0;\n var defaults = {\n // whether or not to allow the dropdown\n allowDropdown: true,\n // if there is just a dial code in the input: remove it on blur\n autoHideDialCode: true,\n // add a placeholder in the input with an example number for the selected country\n autoPlaceholder: \"polite\",\n // modify the parentClass\n customContainer: \"\",\n // modify the auto placeholder\n customPlaceholder: null,\n // append menu to specified element\n dropdownContainer: null,\n // don't display these countries\n excludeCountries: [],\n // format the input value during initialisation and on setNumber\n formatOnDisplay: true,\n // geoIp lookup function\n geoIpLookup: null,\n // inject a hidden input with this name, and on submit, populate it with the result of getNumber\n hiddenInput: \"\",\n // initial country\n initialCountry: \"\",\n // localized country names e.g. { 'de': 'Deutschland' }\n localizedCountries: null,\n // don't insert international dial codes\n nationalMode: true,\n // display only these countries\n onlyCountries: [],\n // number type to use for placeholders\n placeholderNumberType: \"MOBILE\",\n // the countries at the top of the list. defaults to united states and united kingdom\n preferredCountries: [ \"us\", \"gb\" ],\n // display the country dial code next to the selected flag so it's not part of the typed number\n separateDialCode: false,\n // specify the path to the libphonenumber script to enable validation/formatting\n utilsScript: \"\"\n };\n // https://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes#Non-geographic_area_codes\n var regionlessNanpNumbers = [ \"800\", \"822\", \"833\", \"844\", \"855\", \"866\", \"877\", \"880\", \"881\", \"882\", \"883\", \"884\", \"885\", \"886\", \"887\", \"888\", \"889\" ];\n // utility function to iterate over an object. can't use Object.entries or native forEach because\n // of IE11\n var forEachProp = function forEachProp(obj, callback) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n callback(keys[i], obj[keys[i]]);\n }\n };\n // run a method on each instance of the plugin\n var forEachInstance = function forEachInstance(method) {\n forEachProp(window.intlTelInputGlobals.instances, function(key) {\n window.intlTelInputGlobals.instances[key][method]();\n });\n };\n // this is our plugin class that we will create an instance of\n // eslint-disable-next-line no-unused-vars\n var Iti = /*#__PURE__*/\n function() {\n function Iti(input, options) {\n var _this = this;\n _classCallCheck(this, Iti);\n this.id = id++;\n this.telInput = input;\n this.activeItem = null;\n this.highlightedItem = null;\n // process specified options / defaults\n // alternative to Object.assign, which isn't supported by IE11\n var customOptions = options || {};\n this.options = {};\n forEachProp(defaults, function(key, value) {\n _this.options[key] = customOptions.hasOwnProperty(key) ? customOptions[key] : value;\n });\n this.hadInitialPlaceholder = Boolean(input.getAttribute(\"placeholder\"));\n }\n _createClass(Iti, [ {\n key: \"_init\",\n value: function _init() {\n var _this2 = this;\n // if in nationalMode, disable options relating to dial codes\n if (this.options.nationalMode) this.options.autoHideDialCode = false;\n // if separateDialCode then doesn't make sense to A) insert dial code into input\n // (autoHideDialCode), and B) display national numbers (because we're displaying the country\n // dial code next to them)\n if (this.options.separateDialCode) {\n this.options.autoHideDialCode = this.options.nationalMode = false;\n }\n // we cannot just test screen size as some smartphones/website meta tags will report desktop\n // resolutions\n // Note: for some reason jasmine breaks if you put this in the main Plugin function with the\n // rest of these declarations\n // Note: to target Android Mobiles (and not Tablets), we must find 'Android' and 'Mobile'\n this.isMobile = /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n if (this.isMobile) {\n // trigger the mobile dropdown css\n document.body.classList.add(\"iti-mobile\");\n // on mobile, we want a full screen dropdown, so we must append it to the body\n if (!this.options.dropdownContainer) this.options.dropdownContainer = document.body;\n }\n // these promises get resolved when their individual requests complete\n // this way the dev can do something like iti.promise.then(...) to know when all requests are\n // complete\n if (typeof Promise !== \"undefined\") {\n var autoCountryPromise = new Promise(function(resolve, reject) {\n _this2.resolveAutoCountryPromise = resolve;\n _this2.rejectAutoCountryPromise = reject;\n });\n var utilsScriptPromise = new Promise(function(resolve, reject) {\n _this2.resolveUtilsScriptPromise = resolve;\n _this2.rejectUtilsScriptPromise = reject;\n });\n this.promise = Promise.all([ autoCountryPromise, utilsScriptPromise ]);\n } else {\n // prevent errors when Promise doesn't exist\n this.resolveAutoCountryPromise = this.rejectAutoCountryPromise = function() {};\n this.resolveUtilsScriptPromise = this.rejectUtilsScriptPromise = function() {};\n }\n // in various situations there could be no country selected initially, but we need to be able\n // to assume this variable exists\n this.selectedCountryData = {};\n // process all the data: onlyCountries, excludeCountries, preferredCountries etc\n this._processCountryData();\n // generate the markup\n this._generateMarkup();\n // set the initial state of the input value and the selected flag\n this._setInitialState();\n // start all of the event listeners: autoHideDialCode, input keydown, selectedFlag click\n this._initListeners();\n // utils script, and auto country\n this._initRequests();\n }\n }, {\n key: \"_processCountryData\",\n value: function _processCountryData() {\n // process onlyCountries or excludeCountries array if present\n this._processAllCountries();\n // process the countryCodes map\n this._processCountryCodes();\n // process the preferredCountries\n this._processPreferredCountries();\n // translate countries according to localizedCountries option\n if (this.options.localizedCountries) this._translateCountriesByLocale();\n // sort countries by name\n if (this.options.onlyCountries.length || this.options.localizedCountries) {\n this.countries.sort(this._countryNameSort);\n }\n }\n }, {\n key: \"_addCountryCode\",\n value: function _addCountryCode(iso2, countryCode, priority) {\n if (countryCode.length > this.countryCodeMaxLen) {\n this.countryCodeMaxLen = countryCode.length;\n }\n if (!this.countryCodes.hasOwnProperty(countryCode)) {\n this.countryCodes[countryCode] = [];\n }\n // bail if we already have this country for this countryCode\n for (var i = 0; i < this.countryCodes[countryCode].length; i++) {\n if (this.countryCodes[countryCode][i] === iso2) return;\n }\n // check for undefined as 0 is falsy\n var index = priority !== undefined ? priority : this.countryCodes[countryCode].length;\n this.countryCodes[countryCode][index] = iso2;\n }\n }, {\n key: \"_processAllCountries\",\n value: function _processAllCountries() {\n if (this.options.onlyCountries.length) {\n var lowerCaseOnlyCountries = this.options.onlyCountries.map(function(country) {\n return country.toLowerCase();\n });\n this.countries = allCountries.filter(function(country) {\n return lowerCaseOnlyCountries.indexOf(country.iso2) > -1;\n });\n } else if (this.options.excludeCountries.length) {\n var lowerCaseExcludeCountries = this.options.excludeCountries.map(function(country) {\n return country.toLowerCase();\n });\n this.countries = allCountries.filter(function(country) {\n return lowerCaseExcludeCountries.indexOf(country.iso2) === -1;\n });\n } else {\n this.countries = allCountries;\n }\n }\n }, {\n key: \"_translateCountriesByLocale\",\n value: function _translateCountriesByLocale() {\n for (var i = 0; i < this.countries.length; i++) {\n var iso = this.countries[i].iso2.toLowerCase();\n if (this.options.localizedCountries.hasOwnProperty(iso)) {\n this.countries[i].name = this.options.localizedCountries[iso];\n }\n }\n }\n }, {\n key: \"_countryNameSort\",\n value: function _countryNameSort(a, b) {\n return a.name.localeCompare(b.name);\n }\n }, {\n key: \"_processCountryCodes\",\n value: function _processCountryCodes() {\n this.countryCodeMaxLen = 0;\n // here we store just dial codes\n this.dialCodes = {};\n // here we store \"country codes\" (both dial codes and their area codes)\n this.countryCodes = {};\n // first: add dial codes\n for (var i = 0; i < this.countries.length; i++) {\n var c = this.countries[i];\n if (!this.dialCodes[c.dialCode]) this.dialCodes[c.dialCode] = true;\n this._addCountryCode(c.iso2, c.dialCode, c.priority);\n }\n // next: add area codes\n // this is a second loop over countries, to make sure we have all of the \"root\" countries\n // already in the map, so that we can access them, as each time we add an area code substring\n // to the map, we also need to include the \"root\" country's code, as that also matches\n for (var _i = 0; _i < this.countries.length; _i++) {\n var _c = this.countries[_i];\n // area codes\n if (_c.areaCodes) {\n var rootCountryCode = this.countryCodes[_c.dialCode][0];\n // for each area code\n for (var j = 0; j < _c.areaCodes.length; j++) {\n var areaCode = _c.areaCodes[j];\n // for each digit in the area code to add all partial matches as well\n for (var k = 1; k < areaCode.length; k++) {\n var partialDialCode = _c.dialCode + areaCode.substr(0, k);\n // start with the root country, as that also matches this dial code\n this._addCountryCode(rootCountryCode, partialDialCode);\n this._addCountryCode(_c.iso2, partialDialCode);\n }\n // add the full area code\n this._addCountryCode(_c.iso2, _c.dialCode + areaCode);\n }\n }\n }\n }\n }, {\n key: \"_processPreferredCountries\",\n value: function _processPreferredCountries() {\n this.preferredCountries = [];\n for (var i = 0; i < this.options.preferredCountries.length; i++) {\n var countryCode = this.options.preferredCountries[i].toLowerCase();\n var countryData = this._getCountryData(countryCode, false, true);\n if (countryData) this.preferredCountries.push(countryData);\n }\n }\n }, {\n key: \"_createEl\",\n value: function _createEl(name, attrs, container) {\n var el = document.createElement(name);\n if (attrs) forEachProp(attrs, function(key, value) {\n return el.setAttribute(key, value);\n });\n if (container) container.appendChild(el);\n return el;\n }\n }, {\n key: \"_generateMarkup\",\n value: function _generateMarkup() {\n // if autocomplete does not exist on the element and its form, then\n // prevent autocomplete as there's no safe, cross-browser event we can react to, so it can\n // easily put the plugin in an inconsistent state e.g. the wrong flag selected for the\n // autocompleted number, which on submit could mean wrong number is saved (esp in nationalMode)\n if (!this.telInput.hasAttribute(\"autocomplete\") && !(this.telInput.form && this.telInput.form.hasAttribute(\"autocomplete\"))) {\n this.telInput.setAttribute(\"autocomplete\", \"off\");\n }\n // containers (mostly for positioning)\n var parentClass = \"iti\";\n if (this.options.allowDropdown) parentClass += \" iti--allow-dropdown\";\n if (this.options.separateDialCode) parentClass += \" iti--separate-dial-code\";\n if (this.options.customContainer) {\n parentClass += \" \";\n parentClass += this.options.customContainer;\n }\n var wrapper = this._createEl(\"div\", {\n \"class\": parentClass\n });\n this.telInput.parentNode.insertBefore(wrapper, this.telInput);\n this.flagsContainer = this._createEl(\"div\", {\n \"class\": \"iti__flag-container\"\n }, wrapper);\n wrapper.appendChild(this.telInput);\n // selected flag (displayed to left of input)\n this.selectedFlag = this._createEl(\"div\", {\n \"class\": \"iti__selected-flag\",\n role: \"combobox\",\n \"aria-controls\": \"iti-\".concat(this.id, \"__country-listbox\"),\n \"aria-owns\": \"iti-\".concat(this.id, \"__country-listbox\"),\n \"aria-expanded\": \"false\"\n }, this.flagsContainer);\n this.selectedFlagInner = this._createEl(\"div\", {\n \"class\": \"iti__flag\"\n }, this.selectedFlag);\n if (this.options.separateDialCode) {\n this.selectedDialCode = this._createEl(\"div\", {\n \"class\": \"iti__selected-dial-code\"\n }, this.selectedFlag);\n }\n if (this.options.allowDropdown) {\n // make element focusable and tab navigable\n this.selectedFlag.setAttribute(\"tabindex\", \"0\");\n this.dropdownArrow = this._createEl(\"div\", {\n \"class\": \"iti__arrow\"\n }, this.selectedFlag);\n // country dropdown: preferred countries, then divider, then all countries\n this.countryList = this._createEl(\"ul\", {\n \"class\": \"iti__country-list iti__hide\",\n id: \"iti-\".concat(this.id, \"__country-listbox\"),\n role: \"listbox\",\n \"aria-label\": \"List of countries\"\n });\n if (this.preferredCountries.length) {\n this._appendListItems(this.preferredCountries, \"iti__preferred\", true);\n this._createEl(\"li\", {\n \"class\": \"iti__divider\",\n role: \"separator\",\n \"aria-disabled\": \"true\"\n }, this.countryList);\n }\n this._appendListItems(this.countries, \"iti__standard\");\n // create dropdownContainer markup\n if (this.options.dropdownContainer) {\n this.dropdown = this._createEl(\"div\", {\n \"class\": \"iti iti--container\"\n });\n this.dropdown.appendChild(this.countryList);\n } else {\n this.flagsContainer.appendChild(this.countryList);\n }\n }\n if (this.options.hiddenInput) {\n var hiddenInputName = this.options.hiddenInput;\n var name = this.telInput.getAttribute(\"name\");\n if (name) {\n var i = name.lastIndexOf(\"[\");\n // if input name contains square brackets, then give the hidden input the same name,\n // replacing the contents of the last set of brackets with the given hiddenInput name\n if (i !== -1) hiddenInputName = \"\".concat(name.substr(0, i), \"[\").concat(hiddenInputName, \"]\");\n }\n this.hiddenInput = this._createEl(\"input\", {\n type: \"hidden\",\n name: hiddenInputName\n });\n wrapper.appendChild(this.hiddenInput);\n }\n }\n }, {\n key: \"_appendListItems\",\n value: function _appendListItems(countries, className, preferred) {\n // we create so many DOM elements, it is faster to build a temp string\n // and then add everything to the DOM in one go at the end\n var tmp = \"\";\n // for each country\n for (var i = 0; i < countries.length; i++) {\n var c = countries[i];\n var idSuffix = preferred ? \"-preferred\" : \"\";\n // open the list item\n tmp += \"
  • \");\n // add the flag\n tmp += \"
    \");\n // and the country name and dial code\n tmp += \"\".concat(c.name, \"\");\n tmp += \"+\".concat(c.dialCode, \"\");\n // close the list item\n tmp += \"
  • \";\n }\n this.countryList.insertAdjacentHTML(\"beforeend\", tmp);\n }\n }, {\n key: \"_setInitialState\",\n value: function _setInitialState() {\n var val = this.telInput.value;\n var dialCode = this._getDialCode(val);\n var isRegionlessNanp = this._isRegionlessNanp(val);\n var _this$options = this.options, initialCountry = _this$options.initialCountry, nationalMode = _this$options.nationalMode, autoHideDialCode = _this$options.autoHideDialCode, separateDialCode = _this$options.separateDialCode;\n // if we already have a dial code, and it's not a regionlessNanp, we can go ahead and set the\n // flag, else fall back to the default country\n if (dialCode && !isRegionlessNanp) {\n this._updateFlagFromNumber(val);\n } else if (initialCountry !== \"auto\") {\n // see if we should select a flag\n if (initialCountry) {\n this._setFlag(initialCountry.toLowerCase());\n } else {\n if (dialCode && isRegionlessNanp) {\n // has intl dial code, is regionless nanp, and no initialCountry, so default to US\n this._setFlag(\"us\");\n } else {\n // no dial code and no initialCountry, so default to first in list\n this.defaultCountry = this.preferredCountries.length ? this.preferredCountries[0].iso2 : this.countries[0].iso2;\n if (!val) {\n this._setFlag(this.defaultCountry);\n }\n }\n }\n // if empty and no nationalMode and no autoHideDialCode then insert the default dial code\n if (!val && !nationalMode && !autoHideDialCode && !separateDialCode) {\n this.telInput.value = \"+\".concat(this.selectedCountryData.dialCode);\n }\n }\n // NOTE: if initialCountry is set to auto, that will be handled separately\n // format - note this wont be run after _updateDialCode as that's only called if no val\n if (val) this._updateValFromNumber(val);\n }\n }, {\n key: \"_initListeners\",\n value: function _initListeners() {\n this._initKeyListeners();\n if (this.options.autoHideDialCode) this._initBlurListeners();\n if (this.options.allowDropdown) this._initDropdownListeners();\n if (this.hiddenInput) this._initHiddenInputListener();\n }\n }, {\n key: \"_initHiddenInputListener\",\n value: function _initHiddenInputListener() {\n var _this3 = this;\n this._handleHiddenInputSubmit = function() {\n _this3.hiddenInput.value = _this3.getNumber();\n };\n if (this.telInput.form) this.telInput.form.addEventListener(\"submit\", this._handleHiddenInputSubmit);\n }\n }, {\n key: \"_getClosestLabel\",\n value: function _getClosestLabel() {\n var el = this.telInput;\n while (el && el.tagName !== \"LABEL\") {\n el = el.parentNode;\n }\n return el;\n }\n }, {\n key: \"_initDropdownListeners\",\n value: function _initDropdownListeners() {\n var _this4 = this;\n // hack for input nested inside label (which is valid markup): clicking the selected-flag to\n // open the dropdown would then automatically trigger a 2nd click on the input which would\n // close it again\n this._handleLabelClick = function(e) {\n // if the dropdown is closed, then focus the input, else ignore the click\n if (_this4.countryList.classList.contains(\"iti__hide\")) _this4.telInput.focus(); else e.preventDefault();\n };\n var label = this._getClosestLabel();\n if (label) label.addEventListener(\"click\", this._handleLabelClick);\n // toggle country dropdown on click\n this._handleClickSelectedFlag = function() {\n // only intercept this event if we're opening the dropdown\n // else let it bubble up to the top (\"click-off-to-close\" listener)\n // we cannot just stopPropagation as it may be needed to close another instance\n if (_this4.countryList.classList.contains(\"iti__hide\") && !_this4.telInput.disabled && !_this4.telInput.readOnly) {\n _this4._showDropdown();\n }\n };\n this.selectedFlag.addEventListener(\"click\", this._handleClickSelectedFlag);\n // open dropdown list if currently focused\n this._handleFlagsContainerKeydown = function(e) {\n var isDropdownHidden = _this4.countryList.classList.contains(\"iti__hide\");\n if (isDropdownHidden && [ \"ArrowUp\", \"Up\", \"ArrowDown\", \"Down\", \" \", \"Enter\" ].indexOf(e.key) !== -1) {\n // prevent form from being submitted if \"ENTER\" was pressed\n e.preventDefault();\n // prevent event from being handled again by document\n e.stopPropagation();\n _this4._showDropdown();\n }\n // allow navigation from dropdown to input on TAB\n if (e.key === \"Tab\") _this4._closeDropdown();\n };\n this.flagsContainer.addEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n }\n }, {\n key: \"_initRequests\",\n value: function _initRequests() {\n var _this5 = this;\n // if the user has specified the path to the utils script, fetch it on window.load, else resolve\n if (this.options.utilsScript && !window.intlTelInputUtils) {\n // if the plugin is being initialised after the window.load event has already been fired\n if (window.intlTelInputGlobals.documentReady()) {\n window.intlTelInputGlobals.loadUtils(this.options.utilsScript);\n } else {\n // wait until the load event so we don't block any other requests e.g. the flags image\n window.addEventListener(\"load\", function() {\n window.intlTelInputGlobals.loadUtils(_this5.options.utilsScript);\n });\n }\n } else this.resolveUtilsScriptPromise();\n if (this.options.initialCountry === \"auto\") this._loadAutoCountry(); else this.resolveAutoCountryPromise();\n }\n }, {\n key: \"_loadAutoCountry\",\n value: function _loadAutoCountry() {\n // 3 options:\n // 1) already loaded (we're done)\n // 2) not already started loading (start)\n // 3) already started loading (do nothing - just wait for loading callback to fire)\n if (window.intlTelInputGlobals.autoCountry) {\n this.handleAutoCountry();\n } else if (!window.intlTelInputGlobals.startedLoadingAutoCountry) {\n // don't do this twice!\n window.intlTelInputGlobals.startedLoadingAutoCountry = true;\n if (typeof this.options.geoIpLookup === \"function\") {\n this.options.geoIpLookup(function(countryCode) {\n window.intlTelInputGlobals.autoCountry = countryCode.toLowerCase();\n // tell all instances the auto country is ready\n // TODO: this should just be the current instances\n // UPDATE: use setTimeout in case their geoIpLookup function calls this callback straight\n // away (e.g. if they have already done the geo ip lookup somewhere else). Using\n // setTimeout means that the current thread of execution will finish before executing\n // this, which allows the plugin to finish initialising.\n setTimeout(function() {\n return forEachInstance(\"handleAutoCountry\");\n });\n }, function() {\n return forEachInstance(\"rejectAutoCountryPromise\");\n });\n }\n }\n }\n }, {\n key: \"_initKeyListeners\",\n value: function _initKeyListeners() {\n var _this6 = this;\n // update flag on keyup\n this._handleKeyupEvent = function() {\n if (_this6._updateFlagFromNumber(_this6.telInput.value)) {\n _this6._triggerCountryChange();\n }\n };\n this.telInput.addEventListener(\"keyup\", this._handleKeyupEvent);\n // update flag on cut/paste events (now supported in all major browsers)\n this._handleClipboardEvent = function() {\n // hack because \"paste\" event is fired before input is updated\n setTimeout(_this6._handleKeyupEvent);\n };\n this.telInput.addEventListener(\"cut\", this._handleClipboardEvent);\n this.telInput.addEventListener(\"paste\", this._handleClipboardEvent);\n }\n }, {\n key: \"_cap\",\n value: function _cap(number) {\n var max = this.telInput.getAttribute(\"maxlength\");\n return max && number.length > max ? number.substr(0, max) : number;\n }\n }, {\n key: \"_initBlurListeners\",\n value: function _initBlurListeners() {\n var _this7 = this;\n // on blur or form submit: if just a dial code then remove it\n this._handleSubmitOrBlurEvent = function() {\n _this7._removeEmptyDialCode();\n };\n if (this.telInput.form) this.telInput.form.addEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n this.telInput.addEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n }\n }, {\n key: \"_removeEmptyDialCode\",\n value: function _removeEmptyDialCode() {\n if (this.telInput.value.charAt(0) === \"+\") {\n var numeric = this._getNumeric(this.telInput.value);\n // if just a plus, or if just a dial code\n if (!numeric || this.selectedCountryData.dialCode === numeric) {\n this.telInput.value = \"\";\n }\n }\n }\n }, {\n key: \"_getNumeric\",\n value: function _getNumeric(s) {\n return s.replace(/\\D/g, \"\");\n }\n }, {\n key: \"_trigger\",\n value: function _trigger(name) {\n // have to use old school document.createEvent as IE11 doesn't support `new Event()` syntax\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n // can bubble, and is cancellable\n this.telInput.dispatchEvent(e);\n }\n }, {\n key: \"_showDropdown\",\n value: function _showDropdown() {\n this.countryList.classList.remove(\"iti__hide\");\n this.selectedFlag.setAttribute(\"aria-expanded\", \"true\");\n this._setDropdownPosition();\n // update highlighting and scroll to active list item\n if (this.activeItem) {\n this._highlightListItem(this.activeItem, false);\n this._scrollTo(this.activeItem, true);\n }\n // bind all the dropdown-related listeners: mouseover, click, click-off, keydown\n this._bindDropdownListeners();\n // update the arrow\n this.dropdownArrow.classList.add(\"iti__arrow--up\");\n this._trigger(\"open:countrydropdown\");\n }\n }, {\n key: \"_toggleClass\",\n value: function _toggleClass(el, className, shouldHaveClass) {\n if (shouldHaveClass && !el.classList.contains(className)) el.classList.add(className); else if (!shouldHaveClass && el.classList.contains(className)) el.classList.remove(className);\n }\n }, {\n key: \"_setDropdownPosition\",\n value: function _setDropdownPosition() {\n var _this8 = this;\n if (this.options.dropdownContainer) {\n this.options.dropdownContainer.appendChild(this.dropdown);\n }\n if (!this.isMobile) {\n var pos = this.telInput.getBoundingClientRect();\n // windowTop from https://stackoverflow.com/a/14384091/217866\n var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n var inputTop = pos.top + windowTop;\n var dropdownHeight = this.countryList.offsetHeight;\n // dropdownFitsBelow = (dropdownBottom < windowBottom)\n var dropdownFitsBelow = inputTop + this.telInput.offsetHeight + dropdownHeight < windowTop + window.innerHeight;\n var dropdownFitsAbove = inputTop - dropdownHeight > windowTop;\n // by default, the dropdown will be below the input. If we want to position it above the\n // input, we add the dropup class.\n this._toggleClass(this.countryList, \"iti__country-list--dropup\", !dropdownFitsBelow && dropdownFitsAbove);\n // if dropdownContainer is enabled, calculate postion\n if (this.options.dropdownContainer) {\n // by default the dropdown will be directly over the input because it's not in the flow.\n // If we want to position it below, we need to add some extra top value.\n var extraTop = !dropdownFitsBelow && dropdownFitsAbove ? 0 : this.telInput.offsetHeight;\n // calculate placement\n this.dropdown.style.top = \"\".concat(inputTop + extraTop, \"px\");\n this.dropdown.style.left = \"\".concat(pos.left + document.body.scrollLeft, \"px\");\n // close menu on window scroll\n this._handleWindowScroll = function() {\n return _this8._closeDropdown();\n };\n window.addEventListener(\"scroll\", this._handleWindowScroll);\n }\n }\n }\n }, {\n key: \"_getClosestListItem\",\n value: function _getClosestListItem(target) {\n var el = target;\n while (el && el !== this.countryList && !el.classList.contains(\"iti__country\")) {\n el = el.parentNode;\n }\n // if we reached the countryList element, then return null\n return el === this.countryList ? null : el;\n }\n }, {\n key: \"_bindDropdownListeners\",\n value: function _bindDropdownListeners() {\n var _this9 = this;\n // when mouse over a list item, just highlight that one\n // we add the class \"highlight\", so if they hit \"enter\" we know which one to select\n this._handleMouseoverCountryList = function(e) {\n // handle event delegation, as we're listening for this event on the countryList\n var listItem = _this9._getClosestListItem(e.target);\n if (listItem) _this9._highlightListItem(listItem, false);\n };\n this.countryList.addEventListener(\"mouseover\", this._handleMouseoverCountryList);\n // listen for country selection\n this._handleClickCountryList = function(e) {\n var listItem = _this9._getClosestListItem(e.target);\n if (listItem) _this9._selectListItem(listItem);\n };\n this.countryList.addEventListener(\"click\", this._handleClickCountryList);\n // click off to close\n // (except when this initial opening click is bubbling up)\n // we cannot just stopPropagation as it may be needed to close another instance\n var isOpening = true;\n this._handleClickOffToClose = function() {\n if (!isOpening) _this9._closeDropdown();\n isOpening = false;\n };\n document.documentElement.addEventListener(\"click\", this._handleClickOffToClose);\n // listen for up/down scrolling, enter to select, or letters to jump to country name.\n // use keydown as keypress doesn't fire for non-char keys and we want to catch if they\n // just hit down and hold it to scroll down (no keyup event).\n // listen on the document because that's where key events are triggered if no input has focus\n var query = \"\";\n var queryTimer = null;\n this._handleKeydownOnDropdown = function(e) {\n // prevent down key from scrolling the whole page,\n // and enter key from submitting a form etc\n e.preventDefault();\n // up and down to navigate\n if (e.key === \"ArrowUp\" || e.key === \"Up\" || e.key === \"ArrowDown\" || e.key === \"Down\") _this9._handleUpDownKey(e.key); else if (e.key === \"Enter\") _this9._handleEnterKey(); else if (e.key === \"Escape\") _this9._closeDropdown(); else if (/^[a-zA-ZÀ-ÿа-яА-Я ]$/.test(e.key)) {\n // jump to countries that start with the query string\n if (queryTimer) clearTimeout(queryTimer);\n query += e.key.toLowerCase();\n _this9._searchForCountry(query);\n // if the timer hits 1 second, reset the query\n queryTimer = setTimeout(function() {\n query = \"\";\n }, 1e3);\n }\n };\n document.addEventListener(\"keydown\", this._handleKeydownOnDropdown);\n }\n }, {\n key: \"_handleUpDownKey\",\n value: function _handleUpDownKey(key) {\n var next = key === \"ArrowUp\" || key === \"Up\" ? this.highlightedItem.previousElementSibling : this.highlightedItem.nextElementSibling;\n if (next) {\n // skip the divider\n if (next.classList.contains(\"iti__divider\")) {\n next = key === \"ArrowUp\" || key === \"Up\" ? next.previousElementSibling : next.nextElementSibling;\n }\n this._highlightListItem(next, true);\n }\n }\n }, {\n key: \"_handleEnterKey\",\n value: function _handleEnterKey() {\n if (this.highlightedItem) this._selectListItem(this.highlightedItem);\n }\n }, {\n key: \"_searchForCountry\",\n value: function _searchForCountry(query) {\n for (var i = 0; i < this.countries.length; i++) {\n if (this._startsWith(this.countries[i].name, query)) {\n var listItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(this.countries[i].iso2));\n // update highlighting and scroll\n this._highlightListItem(listItem, false);\n this._scrollTo(listItem, true);\n break;\n }\n }\n }\n }, {\n key: \"_startsWith\",\n value: function _startsWith(a, b) {\n return a.substr(0, b.length).toLowerCase() === b;\n }\n }, {\n key: \"_updateValFromNumber\",\n value: function _updateValFromNumber(originalNumber) {\n var number = originalNumber;\n if (this.options.formatOnDisplay && window.intlTelInputUtils && this.selectedCountryData) {\n var useNational = !this.options.separateDialCode && (this.options.nationalMode || number.charAt(0) !== \"+\");\n var _intlTelInputUtils$nu = intlTelInputUtils.numberFormat, NATIONAL = _intlTelInputUtils$nu.NATIONAL, INTERNATIONAL = _intlTelInputUtils$nu.INTERNATIONAL;\n var format = useNational ? NATIONAL : INTERNATIONAL;\n number = intlTelInputUtils.formatNumber(number, this.selectedCountryData.iso2, format);\n }\n number = this._beforeSetNumber(number);\n this.telInput.value = number;\n }\n }, {\n key: \"_updateFlagFromNumber\",\n value: function _updateFlagFromNumber(originalNumber) {\n // if we're in nationalMode and we already have US/Canada selected, make sure the number starts\n // with a +1 so _getDialCode will be able to extract the area code\n // update: if we dont yet have selectedCountryData, but we're here (trying to update the flag\n // from the number), that means we're initialising the plugin with a number that already has a\n // dial code, so fine to ignore this bit\n var number = originalNumber;\n var selectedDialCode = this.selectedCountryData.dialCode;\n var isNanp = selectedDialCode === \"1\";\n if (number && this.options.nationalMode && isNanp && number.charAt(0) !== \"+\") {\n if (number.charAt(0) !== \"1\") number = \"1\".concat(number);\n number = \"+\".concat(number);\n }\n // update flag if user types area code for another country\n if (this.options.separateDialCode && selectedDialCode && number.charAt(0) !== \"+\") {\n number = \"+\".concat(selectedDialCode).concat(number);\n }\n // try and extract valid dial code from input\n var dialCode = this._getDialCode(number, true);\n var numeric = this._getNumeric(number);\n var countryCode = null;\n if (dialCode) {\n var countryCodes = this.countryCodes[this._getNumeric(dialCode)];\n // check if the right country is already selected. this should be false if the number is\n // longer than the matched dial code because in this case we need to make sure that if\n // there are multiple country matches, that the first one is selected (note: we could\n // just check that here, but it requires the same loop that we already have later)\n var alreadySelected = countryCodes.indexOf(this.selectedCountryData.iso2) !== -1 && numeric.length <= dialCode.length - 1;\n var isRegionlessNanpNumber = selectedDialCode === \"1\" && this._isRegionlessNanp(numeric);\n // only update the flag if:\n // A) NOT (we currently have a NANP flag selected, and the number is a regionlessNanp)\n // AND\n // B) the right country is not already selected\n if (!isRegionlessNanpNumber && !alreadySelected) {\n // if using onlyCountries option, countryCodes[0] may be empty, so we must find the first\n // non-empty index\n for (var j = 0; j < countryCodes.length; j++) {\n if (countryCodes[j]) {\n countryCode = countryCodes[j];\n break;\n }\n }\n }\n } else if (number.charAt(0) === \"+\" && numeric.length) {\n // invalid dial code, so empty\n // Note: use getNumeric here because the number has not been formatted yet, so could contain\n // bad chars\n countryCode = \"\";\n } else if (!number || number === \"+\") {\n // empty, or just a plus, so default\n countryCode = this.defaultCountry;\n }\n if (countryCode !== null) {\n return this._setFlag(countryCode);\n }\n return false;\n }\n }, {\n key: \"_isRegionlessNanp\",\n value: function _isRegionlessNanp(number) {\n var numeric = this._getNumeric(number);\n if (numeric.charAt(0) === \"1\") {\n var areaCode = numeric.substr(1, 3);\n return regionlessNanpNumbers.indexOf(areaCode) !== -1;\n }\n return false;\n }\n }, {\n key: \"_highlightListItem\",\n value: function _highlightListItem(listItem, shouldFocus) {\n var prevItem = this.highlightedItem;\n if (prevItem) prevItem.classList.remove(\"iti__highlight\");\n this.highlightedItem = listItem;\n this.highlightedItem.classList.add(\"iti__highlight\");\n if (shouldFocus) this.highlightedItem.focus();\n }\n }, {\n key: \"_getCountryData\",\n value: function _getCountryData(countryCode, ignoreOnlyCountriesOption, allowFail) {\n var countryList = ignoreOnlyCountriesOption ? allCountries : this.countries;\n for (var i = 0; i < countryList.length; i++) {\n if (countryList[i].iso2 === countryCode) {\n return countryList[i];\n }\n }\n if (allowFail) {\n return null;\n }\n throw new Error(\"No country data for '\".concat(countryCode, \"'\"));\n }\n }, {\n key: \"_setFlag\",\n value: function _setFlag(countryCode) {\n var prevCountry = this.selectedCountryData.iso2 ? this.selectedCountryData : {};\n // do this first as it will throw an error and stop if countryCode is invalid\n this.selectedCountryData = countryCode ? this._getCountryData(countryCode, false, false) : {};\n // update the defaultCountry - we only need the iso2 from now on, so just store that\n if (this.selectedCountryData.iso2) {\n this.defaultCountry = this.selectedCountryData.iso2;\n }\n this.selectedFlagInner.setAttribute(\"class\", \"iti__flag iti__\".concat(countryCode));\n // update the selected country's title attribute\n var title = countryCode ? \"\".concat(this.selectedCountryData.name, \": +\").concat(this.selectedCountryData.dialCode) : \"Unknown\";\n this.selectedFlag.setAttribute(\"title\", title);\n if (this.options.separateDialCode) {\n var dialCode = this.selectedCountryData.dialCode ? \"+\".concat(this.selectedCountryData.dialCode) : \"\";\n this.selectedDialCode.innerHTML = dialCode;\n // offsetWidth is zero if input is in a hidden container during initialisation\n var selectedFlagWidth = this.selectedFlag.offsetWidth || this._getHiddenSelectedFlagWidth();\n // add 6px of padding after the grey selected-dial-code box, as this is what we use in the css\n this.telInput.style.paddingLeft = \"\".concat(selectedFlagWidth + 6, \"px\");\n }\n // and the input's placeholder\n this._updatePlaceholder();\n // update the active list item\n if (this.options.allowDropdown) {\n var prevItem = this.activeItem;\n if (prevItem) {\n prevItem.classList.remove(\"iti__active\");\n prevItem.setAttribute(\"aria-selected\", \"false\");\n }\n if (countryCode) {\n // check if there is a preferred item first, else fall back to standard\n var nextItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode, \"-preferred\")) || this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode));\n nextItem.setAttribute(\"aria-selected\", \"true\");\n nextItem.classList.add(\"iti__active\");\n this.activeItem = nextItem;\n this.selectedFlag.setAttribute(\"aria-activedescendant\", nextItem.getAttribute(\"id\"));\n }\n }\n // return if the flag has changed or not\n return prevCountry.iso2 !== countryCode;\n }\n }, {\n key: \"_getHiddenSelectedFlagWidth\",\n value: function _getHiddenSelectedFlagWidth() {\n // to get the right styling to apply, all we need is a shallow clone of the container,\n // and then to inject a deep clone of the selectedFlag element\n var containerClone = this.telInput.parentNode.cloneNode();\n containerClone.style.visibility = \"hidden\";\n document.body.appendChild(containerClone);\n var flagsContainerClone = this.flagsContainer.cloneNode();\n containerClone.appendChild(flagsContainerClone);\n var selectedFlagClone = this.selectedFlag.cloneNode(true);\n flagsContainerClone.appendChild(selectedFlagClone);\n var width = selectedFlagClone.offsetWidth;\n containerClone.parentNode.removeChild(containerClone);\n return width;\n }\n }, {\n key: \"_updatePlaceholder\",\n value: function _updatePlaceholder() {\n var shouldSetPlaceholder = this.options.autoPlaceholder === \"aggressive\" || !this.hadInitialPlaceholder && this.options.autoPlaceholder === \"polite\";\n if (window.intlTelInputUtils && shouldSetPlaceholder) {\n var numberType = intlTelInputUtils.numberType[this.options.placeholderNumberType];\n var placeholder = this.selectedCountryData.iso2 ? intlTelInputUtils.getExampleNumber(this.selectedCountryData.iso2, this.options.nationalMode, numberType) : \"\";\n placeholder = this._beforeSetNumber(placeholder);\n if (typeof this.options.customPlaceholder === \"function\") {\n placeholder = this.options.customPlaceholder(placeholder, this.selectedCountryData);\n }\n this.telInput.setAttribute(\"placeholder\", placeholder);\n }\n }\n }, {\n key: \"_selectListItem\",\n value: function _selectListItem(listItem) {\n // update selected flag and active list item\n var flagChanged = this._setFlag(listItem.getAttribute(\"data-country-code\"));\n this._closeDropdown();\n this._updateDialCode(listItem.getAttribute(\"data-dial-code\"), true);\n // focus the input\n this.telInput.focus();\n // put cursor at end - this fix is required for FF and IE11 (with nationalMode=false i.e. auto\n // inserting dial code), who try to put the cursor at the beginning the first time\n var len = this.telInput.value.length;\n this.telInput.setSelectionRange(len, len);\n if (flagChanged) {\n this._triggerCountryChange();\n }\n }\n }, {\n key: \"_closeDropdown\",\n value: function _closeDropdown() {\n this.countryList.classList.add(\"iti__hide\");\n this.selectedFlag.setAttribute(\"aria-expanded\", \"false\");\n // update the arrow\n this.dropdownArrow.classList.remove(\"iti__arrow--up\");\n // unbind key events\n document.removeEventListener(\"keydown\", this._handleKeydownOnDropdown);\n document.documentElement.removeEventListener(\"click\", this._handleClickOffToClose);\n this.countryList.removeEventListener(\"mouseover\", this._handleMouseoverCountryList);\n this.countryList.removeEventListener(\"click\", this._handleClickCountryList);\n // remove menu from container\n if (this.options.dropdownContainer) {\n if (!this.isMobile) window.removeEventListener(\"scroll\", this._handleWindowScroll);\n if (this.dropdown.parentNode) this.dropdown.parentNode.removeChild(this.dropdown);\n }\n this._trigger(\"close:countrydropdown\");\n }\n }, {\n key: \"_scrollTo\",\n value: function _scrollTo(element, middle) {\n var container = this.countryList;\n // windowTop from https://stackoverflow.com/a/14384091/217866\n var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n var containerHeight = container.offsetHeight;\n var containerTop = container.getBoundingClientRect().top + windowTop;\n var containerBottom = containerTop + containerHeight;\n var elementHeight = element.offsetHeight;\n var elementTop = element.getBoundingClientRect().top + windowTop;\n var elementBottom = elementTop + elementHeight;\n var newScrollTop = elementTop - containerTop + container.scrollTop;\n var middleOffset = containerHeight / 2 - elementHeight / 2;\n if (elementTop < containerTop) {\n // scroll up\n if (middle) newScrollTop -= middleOffset;\n container.scrollTop = newScrollTop;\n } else if (elementBottom > containerBottom) {\n // scroll down\n if (middle) newScrollTop += middleOffset;\n var heightDifference = containerHeight - elementHeight;\n container.scrollTop = newScrollTop - heightDifference;\n }\n }\n }, {\n key: \"_updateDialCode\",\n value: function _updateDialCode(newDialCodeBare, hasSelectedListItem) {\n var inputVal = this.telInput.value;\n // save having to pass this every time\n var newDialCode = \"+\".concat(newDialCodeBare);\n var newNumber;\n if (inputVal.charAt(0) === \"+\") {\n // there's a plus so we're dealing with a replacement (doesn't matter if nationalMode or not)\n var prevDialCode = this._getDialCode(inputVal);\n if (prevDialCode) {\n // current number contains a valid dial code, so replace it\n newNumber = inputVal.replace(prevDialCode, newDialCode);\n } else {\n // current number contains an invalid dial code, so ditch it\n // (no way to determine where the invalid dial code ends and the rest of the number begins)\n newNumber = newDialCode;\n }\n } else if (this.options.nationalMode || this.options.separateDialCode) {\n // don't do anything\n return;\n } else {\n // nationalMode is disabled\n if (inputVal) {\n // there is an existing value with no dial code: prefix the new dial code\n newNumber = newDialCode + inputVal;\n } else if (hasSelectedListItem || !this.options.autoHideDialCode) {\n // no existing value and either they've just selected a list item, or autoHideDialCode is\n // disabled: insert new dial code\n newNumber = newDialCode;\n } else {\n return;\n }\n }\n this.telInput.value = newNumber;\n }\n }, {\n key: \"_getDialCode\",\n value: function _getDialCode(number, includeAreaCode) {\n var dialCode = \"\";\n // only interested in international numbers (starting with a plus)\n if (number.charAt(0) === \"+\") {\n var numericChars = \"\";\n // iterate over chars\n for (var i = 0; i < number.length; i++) {\n var c = number.charAt(i);\n // if char is number (https://stackoverflow.com/a/8935649/217866)\n if (!isNaN(parseInt(c, 10))) {\n numericChars += c;\n // if current numericChars make a valid dial code\n if (includeAreaCode) {\n if (this.countryCodes[numericChars]) {\n // store the actual raw string (useful for matching later)\n dialCode = number.substr(0, i + 1);\n }\n } else {\n if (this.dialCodes[numericChars]) {\n dialCode = number.substr(0, i + 1);\n // if we're just looking for a dial code, we can break as soon as we find one\n break;\n }\n }\n // stop searching as soon as we can - in this case when we hit max len\n if (numericChars.length === this.countryCodeMaxLen) {\n break;\n }\n }\n }\n }\n return dialCode;\n }\n }, {\n key: \"_getFullNumber\",\n value: function _getFullNumber() {\n var val = this.telInput.value.trim();\n var dialCode = this.selectedCountryData.dialCode;\n var prefix;\n var numericVal = this._getNumeric(val);\n if (this.options.separateDialCode && val.charAt(0) !== \"+\" && dialCode && numericVal) {\n // when using separateDialCode, it is visible so is effectively part of the typed number\n prefix = \"+\".concat(dialCode);\n } else {\n prefix = \"\";\n }\n return prefix + val;\n }\n }, {\n key: \"_beforeSetNumber\",\n value: function _beforeSetNumber(originalNumber) {\n var number = originalNumber;\n if (this.options.separateDialCode) {\n var dialCode = this._getDialCode(number);\n // if there is a valid dial code\n if (dialCode) {\n // in case _getDialCode returned an area code as well\n dialCode = \"+\".concat(this.selectedCountryData.dialCode);\n // a lot of numbers will have a space separating the dial code and the main number, and\n // some NANP numbers will have a hyphen e.g. +1 684-733-1234 - in both cases we want to get\n // rid of it\n // NOTE: don't just trim all non-numerics as may want to preserve an open parenthesis etc\n var start = number[dialCode.length] === \" \" || number[dialCode.length] === \"-\" ? dialCode.length + 1 : dialCode.length;\n number = number.substr(start);\n }\n }\n return this._cap(number);\n }\n }, {\n key: \"_triggerCountryChange\",\n value: function _triggerCountryChange() {\n this._trigger(\"countrychange\");\n }\n }, {\n key: \"handleAutoCountry\",\n value: function handleAutoCountry() {\n if (this.options.initialCountry === \"auto\") {\n // we must set this even if there is an initial val in the input: in case the initial val is\n // invalid and they delete it - they should see their auto country\n this.defaultCountry = window.intlTelInputGlobals.autoCountry;\n // if there's no initial value in the input, then update the flag\n if (!this.telInput.value) {\n this.setCountry(this.defaultCountry);\n }\n this.resolveAutoCountryPromise();\n }\n }\n }, {\n key: \"handleUtils\",\n value: function handleUtils() {\n // if the request was successful\n if (window.intlTelInputUtils) {\n // if there's an initial value in the input, then format it\n if (this.telInput.value) {\n this._updateValFromNumber(this.telInput.value);\n }\n this._updatePlaceholder();\n }\n this.resolveUtilsScriptPromise();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var form = this.telInput.form;\n if (this.options.allowDropdown) {\n // make sure the dropdown is closed (and unbind listeners)\n this._closeDropdown();\n this.selectedFlag.removeEventListener(\"click\", this._handleClickSelectedFlag);\n this.flagsContainer.removeEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n // label click hack\n var label = this._getClosestLabel();\n if (label) label.removeEventListener(\"click\", this._handleLabelClick);\n }\n // unbind hiddenInput listeners\n if (this.hiddenInput && form) form.removeEventListener(\"submit\", this._handleHiddenInputSubmit);\n // unbind autoHideDialCode listeners\n if (this.options.autoHideDialCode) {\n if (form) form.removeEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n this.telInput.removeEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n }\n // unbind key events, and cut/paste events\n this.telInput.removeEventListener(\"keyup\", this._handleKeyupEvent);\n this.telInput.removeEventListener(\"cut\", this._handleClipboardEvent);\n this.telInput.removeEventListener(\"paste\", this._handleClipboardEvent);\n // remove attribute of id instance: data-intl-tel-input-id\n this.telInput.removeAttribute(\"data-intl-tel-input-id\");\n // remove markup (but leave the original input)\n var wrapper = this.telInput.parentNode;\n wrapper.parentNode.insertBefore(this.telInput, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n delete window.intlTelInputGlobals.instances[this.id];\n }\n }, {\n key: \"getExtension\",\n value: function getExtension() {\n if (window.intlTelInputUtils) {\n return intlTelInputUtils.getExtension(this._getFullNumber(), this.selectedCountryData.iso2);\n }\n return \"\";\n }\n }, {\n key: \"getNumber\",\n value: function getNumber(format) {\n if (window.intlTelInputUtils) {\n var iso2 = this.selectedCountryData.iso2;\n return intlTelInputUtils.formatNumber(this._getFullNumber(), iso2, format);\n }\n return \"\";\n }\n }, {\n key: \"getNumberType\",\n value: function getNumberType() {\n if (window.intlTelInputUtils) {\n return intlTelInputUtils.getNumberType(this._getFullNumber(), this.selectedCountryData.iso2);\n }\n return -99;\n }\n }, {\n key: \"getSelectedCountryData\",\n value: function getSelectedCountryData() {\n return this.selectedCountryData;\n }\n }, {\n key: \"getValidationError\",\n value: function getValidationError() {\n if (window.intlTelInputUtils) {\n var iso2 = this.selectedCountryData.iso2;\n return intlTelInputUtils.getValidationError(this._getFullNumber(), iso2);\n }\n return -99;\n }\n }, {\n key: \"isValidNumber\",\n value: function isValidNumber() {\n var val = this._getFullNumber().trim();\n var countryCode = this.options.nationalMode ? this.selectedCountryData.iso2 : \"\";\n return window.intlTelInputUtils ? intlTelInputUtils.isValidNumber(val, countryCode) : null;\n }\n }, {\n key: \"setCountry\",\n value: function setCountry(originalCountryCode) {\n var countryCode = originalCountryCode.toLowerCase();\n // check if already selected\n if (!this.selectedFlagInner.classList.contains(\"iti__\".concat(countryCode))) {\n this._setFlag(countryCode);\n this._updateDialCode(this.selectedCountryData.dialCode, false);\n this._triggerCountryChange();\n }\n }\n }, {\n key: \"setNumber\",\n value: function setNumber(number) {\n // we must update the flag first, which updates this.selectedCountryData, which is used for\n // formatting the number before displaying it\n var flagChanged = this._updateFlagFromNumber(number);\n this._updateValFromNumber(number);\n if (flagChanged) {\n this._triggerCountryChange();\n }\n }\n }, {\n key: \"setPlaceholderNumberType\",\n value: function setPlaceholderNumberType(type) {\n this.options.placeholderNumberType = type;\n this._updatePlaceholder();\n }\n } ]);\n return Iti;\n }();\n /********************\n * STATIC METHODS\n ********************/\n // get the country data object\n intlTelInputGlobals.getCountryData = function() {\n return allCountries;\n };\n // inject a \n * @example\n * ```typescript\n * const collection = autofill({\n * accessToken: 'pk.my.token',\n * options\n * })\n *\n * myClientSideRouter.on('route', () => collection.update());\n * ```\n */\nexport function autofill(\n optionsArg: AutofillCollectionOptions\n): AutofillCollectionType {\n return new AutofillCollection(optionsArg);\n}\n", "const candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]:not(slot)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n];\nconst candidateSelector = /* #__PURE__ */ candidateSelectors.join(',');\n\nconst NoElement = typeof Element === 'undefined';\n\nconst matches = NoElement\n ? function () {}\n : Element.prototype.matches ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n\nconst getRootNode =\n !NoElement && Element.prototype.getRootNode\n ? (element) => element.getRootNode()\n : (element) => element.ownerDocument;\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nconst getCandidates = function (el, includeContainer, filter) {\n let candidates = Array.prototype.slice.apply(\n el.querySelectorAll(candidateSelector)\n );\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidatesScope\n * @property {Element} scope contains inner candidates\n * @property {Element[]} candidates\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidatesScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.}\n */\nconst getCandidatesIteratively = function (\n elements,\n includeContainer,\n options\n) {\n const candidates = [];\n const elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n const element = elementsToCheck.shift();\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n const assigned = element.assignedElements();\n const content = assigned.length ? assigned : element.children;\n const nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // check candidate element\n const validCandidate = matches.call(element, candidateSelector);\n if (\n validCandidate &&\n options.filter(element) &&\n (includeContainer || !elements.includes(element))\n ) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n const shadowRoot =\n element.shadowRoot ||\n // check for an undisclosed shadow\n (typeof options.getShadowRoot === 'function' &&\n options.getShadowRoot(element));\n\n const validShadowRoot =\n !options.shadowRootFilter || options.shadowRootFilter(element);\n\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n const nestedCandidates = getCandidatesIteratively(\n shadowRoot === true ? element.children : shadowRoot.children,\n true,\n options\n );\n\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift(...element.children);\n }\n }\n }\n return candidates;\n};\n\nconst getTabindex = function (node, isScope) {\n if (node.tabIndex < 0) {\n // in Chrome,
    ,