{ "version": 3, "sources": ["../../../../pistachio/utils/visibility.js", "../../../../pistachio/node_modules/@rails/request.js/src/fetch_response.js", "../../../../pistachio/node_modules/@rails/request.js/src/request_interceptor.js", "../../../../pistachio/node_modules/@rails/request.js/src/lib/utils.js", "../../../../pistachio/node_modules/@rails/request.js/src/fetch_request.js", "../../../../pistachio/node_modules/@rails/request.js/src/verbs.js", "../../../../pistachio/node_modules/@rails/request.js/src/index.js", "../../../../pistachio/utils/helpers.js", "../../../../pistachio/utils/polyfills.js", "../../../../pistachio/index.js", "../../../../pistachio/app/components/pistachio/button_component.css", "../../../../pistachio/app/components/pistachio/button_group_component.css", "../../../../pistachio/app/components/pistachio/button_group_select_component.css", "../../../../pistachio/app/components/pistachio/date_picker_component.css", "../../../../pistachio/app/components/pistachio/dropdown_component.css", "../../../../pistachio/app/components/pistachio/form/password_input_component.css", "../../../../pistachio/app/components/pistachio/grid_picker_component.css", "../../../../pistachio/app/components/pistachio/icon_component.css", "../../../../pistachio/app/components/pistachio/label_component.css", "../../../../pistachio/app/components/pistachio/modal_component.css", "../../../../pistachio/app/components/pistachio/multi_select_component.css", "../../../../pistachio/app/components/pistachio/notice_component.css", "../../../../pistachio/app/components/pistachio/popovers_component.css", "../../../../pistachio/app/components/pistachio/search_field_component.css", "../../../../pistachio/app/components/pistachio/select_component.css", "../../../../pistachio/app/components/pistachio/suggestions_component.css", "../../../../pistachio/app/components/pistachio/table_component.css", "../../../../pistachio/app/components/pistachio/tabs_component.css", "../../../../pistachio/app/components/pistachio/tooltips_component.css", "../../../../pistachio/app/components/pistachio/unsupported_browser_component.css", "import-glob:./pistachio/**/*_component.css", "../../../../pistachio/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js", "import-glob:../../utils/*_controller.js", "../../../../pistachio/app/components/pistachio/button/handler_component_controller.js", "../../../../pistachio/app/components/pistachio/button_group_select_component_controller.js", "../../../../pistachio/app/components/pistachio/confirm/handler_component_controller.js", "../../../../pistachio/app/components/pistachio/date_picker/range_component_controller.js", "../../../../pistachio/node_modules/flatpickr/dist/flatpickr.js", "../../../../pistachio/node_modules/flatpickr/dist/plugins/labelPlugin/labelPlugin.js", "../../../../pistachio/node_modules/flatpickr/dist/l10n/de.js", "../../../../pistachio/app/components/pistachio/date_picker_component_controller.js", "../../../../pistachio/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs", "../../../../pistachio/node_modules/@floating-ui/core/dist/floating-ui.core.mjs", "../../../../pistachio/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs", "../../../../pistachio/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs", "../../../../pistachio/app/components/pistachio/dropdown_component_controller.js", "../../../../pistachio/app/components/pistachio/dropdown_select_component_controller.js", "../../../../pistachio/app/components/pistachio/flash_component_controller.js", "../../../../pistachio/node_modules/currency.js/dist/currency.min.js", "../../../../pistachio/app/components/pistachio/form/currency_field_component_controller.js", "../../../../pistachio/app/components/pistachio/form/duration_field_component_controller.js", "../../../../pistachio/app/components/pistachio/form/file_field_component_controller.js", "../../../../pistachio/app/components/pistachio/form/password_input_component_controller.js", "../../../../pistachio/app/components/pistachio/form_component_controller.js", "../../../../pistachio/app/components/pistachio/form_preview_component_controller.js", "../../../../pistachio/app/components/pistachio/form_with_steps_component_controller.js", "../../../../pistachio/app/components/pistachio/grid_picker_component_controller.js", "../../../../pistachio/app/components/pistachio/modal_component_controller.js", "../../../../pistachio/app/components/pistachio/multi_select_component_controller.js", "../../../../pistachio/app/components/pistachio/multi_toggle_component_controller.js", "../../../../pistachio/app/components/pistachio/popovers_component_controller.js", "../../../../pistachio/app/components/pistachio/remote_content_component_controller.js", "../../../../pistachio/app/components/pistachio/remote_modal/handler_component_controller.js", "../../../../pistachio/app/components/pistachio/search_field_component_controller.js", "../../../../pistachio/app/components/pistachio/select_component_controller.js", "../../../../pistachio/app/components/pistachio/suggestions/url_handler_component_controller.js", "../../../../pistachio/app/components/pistachio/suggestions_component_controller.js", "../../../../pistachio/app/components/pistachio/toggle_component_controller.js", "../../../../pistachio/app/components/pistachio/tooltips_component_controller.js", "import-glob:../../app/components/**/*_component_controller.js", "../../../../pistachio/app/components/stimulus_controllers.js", "../../../../pistachio/app/components/index.js", "../../../app/components/example_box_component.css", "../../../app/components/guide_component.css", "../../../app/components/hakuna/work_calculator_component.css", "../../../app/components/hakuna_breadcrumb_component.css", "../../../app/components/mini_cta_component.css", "../../../app/components/page_title_component.css", "../../../app/components/timeline_component.css", "../../../app/components/vacation_calculator/disclaimer_component.css", "../../../app/components/vacation_calculator/faq_component.css", "../../../app/components/vacation_calculator/intro_component.css", "../../../app/components/vacation_calculator/watermark_component.css", "import-glob:../components/**/*_component.css", "../../../app/frontend/component_styles.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../../app/frontend/stimulus_application.js", "../../../node_modules/fuse.js/dist/fuse.esm.js", "../../../app/components/cms/docs/search_component_controller.js", "../../../app/components/cms/docs_component_controller.js", "../../../app/components/cms/help/search_component_controller.js", "../../../app/components/guide_component_controller.js", "../../../app/components/hakuna/break_calculator_component_controller.js", "../../../app/components/hakuna/feature_spotlight_component_controller.js", "../../../app/components/hakuna/pricing/calculator_component_controller.js", "../../../app/components/hakuna/work_calculator_component_controller.js", "../../../app/components/koleo/pricing_component_controller.js", "../../../app/components/koleo/qr_generator_component_controller.js", "../../../app/components/vacation_calculator/calculator_component_controller.js", "../../../app/components/vacation_calculator/faq_component_controller.js", "import-glob:../components/**/*_component_controller.js", "import-glob:./utils/*_controller.js", "../../../app/frontend/stimulus_controllers.js", "../../../node_modules/@sentry/browser/build/npm/esm/index.js", "../../../node_modules/@sentry/core/src/debug-build.ts", "../../../node_modules/@sentry/core/src/utils-hoist/version.ts", "../../../node_modules/@sentry/core/src/utils-hoist/worldwide.ts", "../../../node_modules/@sentry/core/src/utils-hoist/debug-build.ts", "../../../node_modules/@sentry/core/src/utils-hoist/logger.ts", "../../../node_modules/@sentry/core/src/utils-hoist/stacktrace.ts", "../../../node_modules/@sentry/core/src/utils-hoist/instrument/handlers.ts", "../../../node_modules/@sentry/core/src/utils-hoist/instrument/globalError.ts", "../../../node_modules/@sentry/core/src/utils-hoist/instrument/globalUnhandledRejection.ts", "../../../node_modules/@sentry/core/src/carrier.ts", "../../../node_modules/@sentry/core/src/utils-hoist/is.ts", "../../../node_modules/@sentry/core/src/utils-hoist/browser.ts", "../../../node_modules/@sentry/core/src/utils-hoist/string.ts", "../../../node_modules/@sentry/core/src/utils-hoist/object.ts", "../../../node_modules/@sentry/core/src/utils-hoist/time.ts", "../../../node_modules/@sentry/core/src/utils-hoist/misc.ts", "../../../node_modules/@sentry/core/src/utils-hoist/syncpromise.ts", "../../../node_modules/@sentry/core/src/session.ts", "../../../node_modules/@sentry/core/src/utils-hoist/propagationContext.ts", "../../../node_modules/@sentry/core/src/utils/merge.ts", "../../../node_modules/@sentry/core/src/utils/spanOnScope.ts", "../../../node_modules/@sentry/core/src/scope.ts", "../../../node_modules/@sentry/core/src/defaultScopes.ts", "../../../node_modules/@sentry/core/src/asyncContext/stackStrategy.ts", "../../../node_modules/@sentry/core/src/asyncContext/index.ts", "../../../node_modules/@sentry/core/src/currentScopes.ts", "../../../node_modules/@sentry/core/src/metrics/metric-summary.ts", "../../../node_modules/@sentry/core/src/semanticAttributes.ts", "../../../node_modules/@sentry/core/src/tracing/spanstatus.ts", "../../../node_modules/@sentry/core/src/utils-hoist/baggage.ts", "../../../node_modules/@sentry/core/src/utils-hoist/tracing.ts", "../../../node_modules/@sentry/core/src/utils/spanUtils.ts", "../../../node_modules/@sentry/core/src/tracing/errors.ts", "../../../node_modules/@sentry/core/src/tracing/utils.ts", "../../../node_modules/@sentry/core/src/tracing/hubextensions.ts", "../../../node_modules/@sentry/core/src/utils/hasTracingEnabled.ts", "../../../node_modules/@sentry/core/src/tracing/sentryNonRecordingSpan.ts", "../../../node_modules/@sentry/core/src/utils/handleCallbackErrors.ts", "../../../node_modules/@sentry/core/src/constants.ts", "../../../node_modules/@sentry/core/src/tracing/dynamicSamplingContext.ts", "../../../node_modules/@sentry/core/src/tracing/logSpans.ts", "../../../node_modules/@sentry/core/src/utils/parseSampleRate.ts", "../../../node_modules/@sentry/core/src/tracing/sampling.ts", "../../../node_modules/@sentry/core/src/utils-hoist/dsn.ts", "../../../node_modules/@sentry/core/src/utils-hoist/memo.ts", "../../../node_modules/@sentry/core/src/utils-hoist/normalize.ts", "../../../node_modules/@sentry/core/src/utils-hoist/envelope.ts", "../../../node_modules/@sentry/core/src/envelope.ts", "../../../node_modules/@sentry/core/src/tracing/measurement.ts", "../../../node_modules/@sentry/core/src/tracing/sentrySpan.ts", "../../../node_modules/@sentry/core/src/tracing/trace.ts", "../../../node_modules/@sentry/core/src/tracing/idleSpan.ts", "../../../node_modules/@sentry/core/src/eventProcessors.ts", "../../../node_modules/@sentry/core/src/utils-hoist/debug-ids.ts", "../../../node_modules/@sentry/core/src/utils/applyScopeDataToEvent.ts", "../../../node_modules/@sentry/core/src/utils/prepareEvent.ts", "../../../node_modules/@sentry/core/src/exports.ts", "../../../node_modules/@sentry/core/src/api.ts", "../../../node_modules/@sentry/core/src/integration.ts", "../../../node_modules/@sentry/core/src/utils-hoist/clientreport.ts", "../../../node_modules/@sentry/core/src/utils-hoist/error.ts", "../../../node_modules/@sentry/core/src/baseclient.ts", "../../../node_modules/@sentry/core/src/sdk.ts", "../../../node_modules/@sentry/core/src/utils-hoist/promisebuffer.ts", "../../../node_modules/@sentry/core/src/utils-hoist/ratelimit.ts", "../../../node_modules/@sentry/core/src/transports/base.ts", "../../../node_modules/@sentry/core/src/transports/offline.ts", "../../../node_modules/@sentry/core/src/transports/multiplexed.ts", "../../../node_modules/@sentry/core/src/utils/isSentryRequestUrl.ts", "../../../node_modules/@sentry/core/src/utils/parameterize.ts", "../../../node_modules/@sentry/core/src/utils/sdkMetadata.ts", "../../../node_modules/@sentry/core/src/utils/traceData.ts", "../../../node_modules/@sentry/core/src/breadcrumbs.ts", "../../../node_modules/@sentry/core/src/integrations/functiontostring.ts", "../../../node_modules/@sentry/core/src/integrations/inboundfilters.ts", "../../../node_modules/@sentry/core/src/utils-hoist/aggregate-errors.ts", "../../../node_modules/@sentry/core/src/metadata.ts", "../../../node_modules/@sentry/core/src/integrations/metadata.ts", "../../../node_modules/@sentry/core/src/utils-hoist/url.ts", "../../../node_modules/@sentry/core/src/utils-hoist/instrument/console.ts", "../../../node_modules/@sentry/core/src/utils-hoist/severity.ts", "../../../node_modules/@sentry/core/src/integrations/captureconsole.ts", "../../../node_modules/@sentry/core/src/integrations/debug.ts", "../../../node_modules/@sentry/core/src/integrations/dedupe.ts", "../../../node_modules/@sentry/core/src/integrations/extraerrordata.ts", "../../../node_modules/@sentry/core/src/utils-hoist/path.ts", "../../../node_modules/@sentry/core/src/integrations/rewriteframes.ts", "../../../node_modules/@sentry/core/src/integrations/sessiontiming.ts", "../../../node_modules/@sentry/core/src/integrations/zoderrors.ts", "../../../node_modules/@sentry/core/src/integrations/third-party-errors-filter.ts", "../../../node_modules/@sentry/core/src/metrics/constants.ts", "../../../node_modules/@sentry/core/src/metrics/exports.ts", "../../../node_modules/@sentry/core/src/metrics/utils.ts", "../../../node_modules/@sentry/core/src/metrics/envelope.ts", "../../../node_modules/@sentry/core/src/metrics/instance.ts", "../../../node_modules/@sentry/core/src/metrics/browser-aggregator.ts", "../../../node_modules/@sentry/core/src/fetch.ts", "../../../node_modules/@sentry/core/src/feedback.ts", "../../../node_modules/@sentry/core/src/getCurrentHubShim.ts", "../../../node_modules/@sentry/core/src/utils-hoist/breadcrumb-log-level.ts", "../../../node_modules/@sentry/core/src/utils-hoist/supports.ts", "../../../node_modules/@sentry/core/src/utils-hoist/instrument/fetch.ts", "../../../node_modules/@sentry/core/src/utils-hoist/env.ts", "../../../node_modules/@sentry/core/src/utils-hoist/node.ts", "../../../node_modules/@sentry/core/src/utils-hoist/isBrowser.ts", "../../../node_modules/@sentry/core/src/utils-hoist/vendor/supportsHistory.ts", "../../../node_modules/@sentry/core/src/utils-hoist/buildPolyfills/_nullishCoalesce.ts", "../../../node_modules/@sentry/core/src/utils-hoist/buildPolyfills/_optionalChain.ts", "../../../node_modules/@sentry/browser/src/helpers.ts", "../../../node_modules/@sentry/browser/src/debug-build.ts", "../../../node_modules/@sentry/browser/src/eventbuilder.ts", "../../../node_modules/@sentry/browser/src/userfeedback.ts", "../../../node_modules/@sentry/browser/src/client.ts", "../../../node_modules/@sentry-internal/browser-utils/src/debug-build.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/bindReporter.ts", "../../../node_modules/@sentry-internal/browser-utils/src/types.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/generateUniqueID.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getNavigationEntry.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getActivationStart.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/initMetric.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/observe.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/onHidden.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/runOnce.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getVisibilityWatcher.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/whenActivated.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/onFCP.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getCLS.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getFID.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/interactions.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/whenIdle.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getINP.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getLCP.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/onTTFB.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/instrument.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/utils.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/cls.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/browserMetrics.ts", "../../../node_modules/@sentry-internal/browser-utils/src/instrument/dom.ts", "../../../node_modules/@sentry-internal/browser-utils/src/instrument/history.ts", "../../../node_modules/@sentry-internal/browser-utils/src/getNativeImplementation.ts", "../../../node_modules/@sentry-internal/browser-utils/src/instrument/xhr.ts", "../../../node_modules/@sentry-internal/browser-utils/src/metrics/inp.ts", "../../../node_modules/@sentry/browser/src/transports/fetch.ts", "../../../node_modules/@sentry/browser/src/stack-parsers.ts", "../../../node_modules/@sentry/browser/src/integrations/breadcrumbs.ts", "../../../node_modules/@sentry/browser/src/integrations/browserapierrors.ts", "../../../node_modules/@sentry/browser/src/integrations/browsersession.ts", "../../../node_modules/@sentry/browser/src/integrations/globalhandlers.ts", "../../../node_modules/@sentry/browser/src/integrations/httpcontext.ts", "../../../node_modules/@sentry/browser/src/integrations/linkederrors.ts", "../../../node_modules/@sentry/browser/src/sdk.ts", "../../../node_modules/@sentry/browser/src/utils/lazyLoadIntegration.ts", "../../../node_modules/@sentry/browser/src/integrations/reportingobserver.ts", "../../../node_modules/@sentry/browser/src/integrations/httpclient.ts", "../../../node_modules/@sentry/browser/src/integrations/contextlines.ts", "../../../node_modules/@sentry-internal/replay/src/constants.ts", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrdom/es/rrdom.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js", "../../../node_modules/@sentry-internal/replay/src/types/rrweb.ts", "../../../node_modules/@sentry-internal/replay/src/util/timestamp.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/addBreadcrumbEvent.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/domUtils.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/onWindowOpen.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleClick.ts", "../../../node_modules/@sentry-internal/replay/src/util/createBreadcrumb.ts", "../../../node_modules/node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/getAttributesToRecord.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleDom.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleKeyboardEvent.ts", "../../../node_modules/@sentry-internal/replay/src/util/createPerformanceEntries.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/performanceObserver.ts", "../../../node_modules/@sentry-internal/replay/src/debug-build.ts", "../../../node_modules/@sentry-internal/replay-worker/build/esm/worker.ts", "../../../node_modules/@sentry-internal/replay-worker/build/esm/index.js", "../../../node_modules/@sentry-internal/replay/src/util/logger.ts", "../../../node_modules/@sentry-internal/replay/src/eventBuffer/error.ts", "../../../node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferArray.ts", "../../../node_modules/@sentry-internal/replay/src/eventBuffer/WorkerHandler.ts", "../../../node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferCompressionWorker.ts", "../../../node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferProxy.ts", "../../../node_modules/@sentry-internal/replay/src/eventBuffer/index.ts", "../../../node_modules/@sentry-internal/replay/src/util/hasSessionStorage.ts", "../../../node_modules/@sentry-internal/replay/src/session/clearSession.ts", "../../../node_modules/@sentry-internal/replay/src/util/isSampled.ts", "../../../node_modules/@sentry-internal/replay/src/session/Session.ts", "../../../node_modules/@sentry-internal/replay/src/session/saveSession.ts", "../../../node_modules/@sentry-internal/replay/src/session/createSession.ts", "../../../node_modules/@sentry-internal/replay/src/session/fetchSession.ts", "../../../node_modules/@sentry-internal/replay/src/util/isExpired.ts", "../../../node_modules/@sentry-internal/replay/src/util/isSessionExpired.ts", "../../../node_modules/@sentry-internal/replay/src/session/shouldRefreshSession.ts", "../../../node_modules/@sentry-internal/replay/src/session/loadOrCreateSession.ts", "../../../node_modules/@sentry-internal/replay/src/util/addEvent.ts", "../../../node_modules/@sentry-internal/replay/src/util/eventUtils.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleAfterSendEvent.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleBeforeSendEvent.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleBreadcrumbs.ts", "../../../node_modules/@sentry-internal/replay/src/util/isRrwebError.ts", "../../../node_modules/@sentry-internal/replay/src/util/resetReplayIdOnDynamicSamplingContext.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/addFeedbackBreadcrumb.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/shouldSampleForBufferEvent.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleGlobalEvent.ts", "../../../node_modules/@sentry-internal/replay/src/util/createPerformanceSpans.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleHistory.ts", "../../../node_modules/@sentry-internal/replay/src/util/shouldFilterRequest.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/addNetworkBreadcrumb.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/networkUtils.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/fetchUtils.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/util/xhrUtils.ts", "../../../node_modules/@sentry-internal/replay/src/coreHandlers/handleNetworkBreadcrumbs.ts", "../../../node_modules/@sentry-internal/replay/src/util/addGlobalListeners.ts", "../../../node_modules/@sentry-internal/replay/src/util/addMemoryEntry.ts", "../../../node_modules/@sentry-internal/replay/src/util/debounce.ts", "../../../node_modules/@sentry-internal/replay/src/util/getRecordingSamplingOptions.ts", "../../../node_modules/@sentry-internal/replay/src/util/handleRecordingEmit.ts", "../../../node_modules/@sentry-internal/replay/src/util/createReplayEnvelope.ts", "../../../node_modules/@sentry-internal/replay/src/util/prepareRecordingData.ts", "../../../node_modules/@sentry-internal/replay/src/util/prepareReplayEvent.ts", "../../../node_modules/@sentry-internal/replay/src/util/sendReplayRequest.ts", "../../../node_modules/@sentry-internal/replay/src/util/sendReplay.ts", "../../../node_modules/@sentry-internal/replay/src/util/throttle.ts", "../../../node_modules/@sentry-internal/replay/src/replay.ts", "../../../node_modules/@sentry-internal/replay/src/util/getPrivacyOptions.ts", "../../../node_modules/@sentry-internal/replay/src/util/maskAttribute.ts", "../../../node_modules/@sentry-internal/replay/src/integration.ts", "../../../node_modules/@sentry-internal/replay/src/util/getReplay.ts", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-worker/es/rrweb-worker/image-bitmap-data-url-worker.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-worker/es/rrweb-worker/index.js", "../../../node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js", "../../../node_modules/@sentry-internal/replay-canvas/src/canvas.ts", "../../../node_modules/@sentry-internal/feedback/src/constants/index.ts", "../../../node_modules/@sentry-internal/feedback/src/core/sendFeedback.ts", "../../../node_modules/@sentry-internal/feedback/src/util/debug-build.ts", "../../../node_modules/@sentry-internal/feedback/src/util/isScreenshotSupported.ts", "../../../node_modules/@sentry-internal/feedback/src/util/mergeOptions.ts", "../../../node_modules/@sentry-internal/feedback/src/core/components/Actor.css.ts", "../../../node_modules/@sentry-internal/feedback/src/util/setAttributesNS.ts", "../../../node_modules/@sentry-internal/feedback/src/core/components/FeedbackIcon.ts", "../../../node_modules/@sentry-internal/feedback/src/core/components/Actor.ts", "../../../node_modules/@sentry-internal/feedback/src/core/createMainStyles.ts", "../../../node_modules/@sentry-internal/feedback/src/core/integration.ts", "../../../node_modules/@sentry-internal/feedback/src/core/getFeedback.ts", "../../../node_modules/node_modules/preact/dist/preact.mjs", "../../../node_modules/node_modules/preact/hooks/dist/hooks.mjs", "../../../node_modules/@sentry-internal/feedback/src/modal/components/SentryLogo.ts", "../../../node_modules/@sentry-internal/feedback/src/modal/components/DialogHeader.tsx", "../../../node_modules/@sentry-internal/feedback/src/util/validate.ts", "../../../node_modules/@sentry-internal/feedback/src/modal/components/Form.tsx", "../../../node_modules/@sentry-internal/feedback/src/modal/components/SuccessIcon.ts", "../../../node_modules/@sentry-internal/feedback/src/modal/components/Dialog.tsx", "../../../node_modules/@sentry-internal/feedback/src/modal/components/Dialog.css.ts", "../../../node_modules/@sentry-internal/feedback/src/modal/integration.tsx", "../../../node_modules/@sentry-internal/feedback/src/screenshot/components/CropCorner.tsx", "../../../node_modules/@sentry-internal/feedback/src/screenshot/components/ScreenshotInput.css.ts", "../../../node_modules/@sentry-internal/feedback/src/screenshot/components/useTakeScreenshot.tsx", "../../../node_modules/@sentry-internal/feedback/src/screenshot/components/ScreenshotEditor.tsx", "../../../node_modules/@sentry-internal/feedback/src/screenshot/integration.ts", "../../../node_modules/@sentry/browser/src/feedbackAsync.ts", "../../../node_modules/@sentry/browser/src/feedbackSync.ts", "../../../node_modules/@sentry/browser/src/metrics.ts", "../../../node_modules/@sentry/browser/src/tracing/request.ts", "../../../node_modules/@sentry/browser/src/tracing/backgroundtab.ts", "../../../node_modules/@sentry/browser/src/tracing/browserTracingIntegration.ts", "../../../node_modules/@sentry/browser/src/transports/offline.ts", "../../../node_modules/@sentry/browser/src/profiling/utils.ts", "../../../node_modules/@sentry/browser/src/profiling/startProfileForSpan.ts", "../../../node_modules/@sentry/browser/src/profiling/integration.ts", "../../../node_modules/@sentry/browser/src/integrations/spotlight.ts", "../../../node_modules/@sentry/browser/src/utils/featureFlags.ts", "../../../node_modules/@sentry/browser/src/integrations/featureFlags/featureFlagsIntegration.ts", "../../../node_modules/@sentry/browser/src/integrations/featureFlags/launchdarkly/integration.ts", "../../../node_modules/@sentry/browser/src/integrations/featureFlags/openfeature/integration.ts", "../../../node_modules/@sentry/browser/src/integrations/featureFlags/unleash/integration.ts", "../../../app/frontend/packs/application.js", "import-glob:../images/**/*"], "sourcesContent": ["// Inspired by jQuery show and hide\n// https://github.com/jquery/jquery/blob/e743cbd28553267f955f71ea7248377915613fd9/src/css/showHide.js\n\nlet defaultDisplayMap = {}\n\nfunction getDefaultDisplay(elem) {\n let temp,\n doc = elem.ownerDocument,\n nodeName = elem.nodeName,\n display = defaultDisplayMap[nodeName]\n\n if (display)\n return display\n\n temp = doc.body.appendChild(doc.createElement(nodeName))\n display = window.getComputedStyle(temp).display\n\n temp.parentNode.removeChild(temp)\n if (display === 'none') {\n display = 'block'\n }\n defaultDisplayMap[nodeName] = display\n\n return display\n}\n\nfunction showHide(elem, show, defaultDisplay = null) {\n if (!elem.style) return elem\n\n const display = getDisplay(elem)\n if (show) {\n // Show elem\n if (display === 'none') {\n // Current elem is hidden\n const old = elem.getAttribute('data-prev-display') || null\n\n if (!old) {\n elem.style.display = ''\n } else {\n elem.style.display = old\n }\n }\n\n if (elem.style.display == '' && display === 'none') {\n elem.style.display = defaultDisplay || getDefaultDisplay(elem)\n }\n } else {\n // Hide elem\n if (display !== 'none') {\n // Current elem is displayed\n elem.setAttribute('data-prev-display', display)\n elem.style.display = 'none'\n }\n }\n\n return elem\n}\n\nfunction getDisplay(elem) {\n return window.getComputedStyle(elem, null).getPropertyValue('display')\n}\n\nexport function show(elem) {\n return showHide(elem, true)\n}\n\nexport function hide(elem) {\n return showHide(elem, false)\n}\n\n// Use the proposed solution from the link below\n// Won't work with fixed elements, but is blazing fast\n//\n// https://stackoverflow.com/a/21696585\nexport function isHidden(elem) {\n return elem.offsetParent === null\n}\n\nexport function isVisible(elem) {\n return !isHidden(elem)\n}\n\nexport function toggle(elem, show = null, defaultDisplay = null) {\n if (typeof show !== 'boolean') {\n show = isHidden(elem)\n }\n\n return showHide(elem, show, defaultDisplay)\n}\n", "export class FetchResponse {\n constructor (response) {\n this.response = response\n }\n\n get statusCode () {\n return this.response.status\n }\n\n get redirected () {\n return this.response.redirected\n }\n\n get ok () {\n return this.response.ok\n }\n\n get unauthenticated () {\n return this.statusCode === 401\n }\n\n get unprocessableEntity () {\n return this.statusCode === 422\n }\n\n get authenticationURL () {\n return this.response.headers.get('WWW-Authenticate')\n }\n\n get contentType () {\n const contentType = this.response.headers.get('Content-Type') || ''\n\n return contentType.replace(/;.*$/, '')\n }\n\n get headers () {\n return this.response.headers\n }\n\n get html () {\n if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n return this.text\n }\n\n return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n }\n\n get json () {\n if (this.contentType.match(/^application\\/.*json$/)) {\n return this.responseJson || (this.responseJson = this.response.json())\n }\n\n return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n }\n\n get text () {\n return this.responseText || (this.responseText = this.response.text())\n }\n\n get isTurboStream () {\n return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n }\n\n get isScript () {\n return this.contentType.match(/\\b(?:java|ecma)script\\b/)\n }\n\n async renderTurboStream () {\n if (this.isTurboStream) {\n if (window.Turbo) {\n await window.Turbo.renderStreamMessage(await this.text)\n } else {\n console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n }\n } else {\n return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n }\n }\n\n async activeScript () {\n if (this.isScript) {\n const script = document.createElement('script')\n const metaTag = document.querySelector('meta[name=csp-nonce]')\n const nonce = metaTag && metaTag.content\n if (nonce) { script.setAttribute('nonce', nonce) }\n script.innerHTML = await this.text\n document.body.appendChild(script)\n } else {\n return Promise.reject(new Error(`Expected a Script response but got \"${this.contentType}\" instead`))\n }\n }\n}\n", "export class RequestInterceptor {\n static register (interceptor) {\n this.interceptor = interceptor\n }\n\n static get () {\n return this.interceptor\n }\n\n static reset () {\n this.interceptor = undefined\n }\n}\n", "export function getCookie (name) {\n const cookies = document.cookie ? document.cookie.split('; ') : []\n const prefix = `${encodeURIComponent(name)}=`\n const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n if (cookie) {\n const value = cookie.split('=').slice(1).join('=')\n\n if (value) {\n return decodeURIComponent(value)\n }\n }\n}\n\nexport function compact (object) {\n const result = {}\n\n for (const key in object) {\n const value = object[key]\n if (value !== undefined) {\n result[key] = value\n }\n }\n\n return result\n}\n\nexport function metaContent (name) {\n const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n return [...formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n for (const [name, value] of entries) {\n if (value instanceof window.File) continue\n\n if (searchParams.has(name) && !name.includes('[]')) {\n searchParams.delete(name)\n searchParams.set(name, value)\n } else {\n searchParams.append(name, value)\n }\n }\n}\n", "import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n constructor (method, url, options = {}) {\n this.method = method\n this.options = options\n this.originalUrl = url.toString()\n }\n\n async perform () {\n try {\n const requestInterceptor = RequestInterceptor.get()\n if (requestInterceptor) {\n await requestInterceptor(this)\n }\n } catch (error) {\n console.error(error)\n }\n\n const fetch = (this.responseKind === 'turbo-stream' && window.Turbo)\n ? window.Turbo.fetch\n : window.fetch\n\n const response = new FetchResponse(await fetch(this.url, this.fetchOptions))\n\n if (response.unauthenticated && response.authenticationURL) {\n return Promise.reject(window.location.href = response.authenticationURL)\n }\n\n if (response.isScript) {\n await response.activeScript()\n }\n\n const responseStatusIsTurboStreamable = response.ok || response.unprocessableEntity\n\n if (responseStatusIsTurboStreamable && response.isTurboStream) {\n await response.renderTurboStream()\n }\n\n return response\n }\n\n addHeader (key, value) {\n const headers = this.additionalHeaders\n headers[key] = value\n this.options.headers = headers\n }\n\n sameHostname () {\n if (!this.originalUrl.startsWith('http:')) {\n return true\n }\n\n try {\n return new URL(this.originalUrl).hostname === window.location.hostname\n } catch (_) {\n return true\n }\n }\n\n get fetchOptions () {\n return {\n method: this.method.toUpperCase(),\n headers: this.headers,\n body: this.formattedBody,\n signal: this.signal,\n credentials: this.credentials,\n redirect: this.redirect\n }\n }\n\n get headers () {\n const baseHeaders = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'Content-Type': this.contentType,\n Accept: this.accept\n }\n\n if (this.sameHostname()) {\n baseHeaders['X-CSRF-Token'] = this.csrfToken\n }\n\n return compact(\n Object.assign(baseHeaders, this.additionalHeaders)\n )\n }\n\n get csrfToken () {\n return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n }\n\n get contentType () {\n if (this.options.contentType) {\n return this.options.contentType\n } else if (this.body == null || this.body instanceof window.FormData) {\n return undefined\n } else if (this.body instanceof window.File) {\n return this.body.type\n }\n\n return 'application/json'\n }\n\n get accept () {\n switch (this.responseKind) {\n case 'html':\n return 'text/html, application/xhtml+xml'\n case 'turbo-stream':\n return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n case 'json':\n return 'application/json, application/vnd.api+json'\n case 'script':\n return 'text/javascript, application/javascript'\n default:\n return '*/*'\n }\n }\n\n get body () {\n return this.options.body\n }\n\n get query () {\n const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n const params = new URLSearchParams(originalQuery)\n\n let requestQuery = this.options.query\n if (requestQuery instanceof window.FormData) {\n requestQuery = stringEntriesFromFormData(requestQuery)\n } else if (requestQuery instanceof window.URLSearchParams) {\n requestQuery = requestQuery.entries()\n } else {\n requestQuery = Object.entries(requestQuery || {})\n }\n\n mergeEntries(params, requestQuery)\n\n const query = params.toString()\n return (query.length > 0 ? `?${query}` : '')\n }\n\n get url () {\n return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n }\n\n get responseKind () {\n return this.options.responseKind || 'html'\n }\n\n get signal () {\n return this.options.signal\n }\n\n get redirect () {\n return this.options.redirect || 'follow'\n }\n\n get credentials () {\n return this.options.credentials || 'same-origin'\n }\n\n get additionalHeaders () {\n return this.options.headers || {}\n }\n\n get formattedBody () {\n const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n if (contentTypeIsJson && !bodyIsAString) {\n return JSON.stringify(this.body)\n }\n\n return this.body\n }\n}\n", "import { FetchRequest } from './fetch_request'\n\nasync function get (url, options) {\n const request = new FetchRequest('get', url, options)\n return request.perform()\n}\n\nasync function post (url, options) {\n const request = new FetchRequest('post', url, options)\n return request.perform()\n}\n\nasync function put (url, options) {\n const request = new FetchRequest('put', url, options)\n return request.perform()\n}\n\nasync function patch (url, options) {\n const request = new FetchRequest('patch', url, options)\n return request.perform()\n}\n\nasync function destroy (url, options) {\n const request = new FetchRequest('delete', url, options)\n return request.perform()\n}\n\nexport { get, post, put, patch, destroy }\n", "import { FetchRequest } from './fetch_request'\nimport { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { get, post, put, patch, destroy } from './verbs'\n\nexport { FetchRequest, FetchResponse, RequestInterceptor, get, post, put, patch, destroy }\n", "import { toggle } from './visibility'\nimport { FetchRequest } from '@rails/request.js'\n\nexport class Helpers {\n static deobfuscateAttributesOnPage = () => {\n document.querySelectorAll('[data-obfuscated-attributes]').forEach(el => {\n const attributes = JSON.parse(atob(el.getAttribute('data-obfuscated-attributes')))\n\n // assign deobfuscated attributes\n Object.keys(attributes).forEach(key => {\n el[key] = attributes[key]\n })\n })\n }\n\n static clarifyEmailAddresses = (defaultDomain = 'hakuna.ch') => {\n const links = document.getElementsByClassName('obfuscated-email-address')\n\n Array.prototype.forEach.call(links, link => {\n const recipient = atob(link.getAttribute('data-recipient'))\n const domain = link.getAttribute('data-domain') ? atob(link.getAttribute('data-domain')) : defaultDomain\n const address = recipient + atob('QA==') + domain\n\n link.href = `mailto:${address}`\n\n if (link.textContent.length == 0) {\n link.textContent = address\n }\n })\n }\n\n static pollAndForward = () => {\n const link = document.querySelector('a[data-poll-and-forward]')\n\n if (!link) {\n return\n }\n\n const targetUrl = link.href\n const pollUrl = link.getAttribute('data-poll-url')\n ;(function poll() {\n setTimeout(function() {\n Helpers.fetch('get', pollUrl).then(response => {\n if (response.ok) {\n response.json.then(json => {\n if (json.done == true) {\n window.location.href = targetUrl\n } else {\n poll()\n }\n })\n }\n })\n }, 1000)\n })()\n }\n\n static loadScript = (src, done) => {\n const js = document.createElement('script')\n js.src = src\n js.onload = function() {\n done()\n }\n js.onerror = function() {\n done(new Error('Failed to load script ' + src))\n }\n document.head.appendChild(js)\n }\n\n static escapeRegExp = string => {\n // Welcome to stone age\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n // https://github.com/harvesthq/chosen/blob/be0a298f528ec59ce97889eaeeeb47a2dca9ca79/coffee/lib/abstract-chosen.coffee#L168\n return string.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\")\n }\n\n static deviceHasSmallScreen() {\n const screenWidth = window.screen.availWidth\n\n if (!screenWidth) {\n return false\n }\n return screenWidth <= 850\n }\n\n static deviceHasNativeFormControls() {\n if (/HakunaApp|android|iPhone|iPad|iPod/i.test(navigator.userAgent)) {\n return true\n }\n return false\n }\n\n // submit using cmd+enter/ctrl+enter\n static checkKeyDownForFormSubmitIntent(event) {\n if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {\n const form = event.target.closest('form')\n const submit = form && form.querySelector('input[type=\"submit\"], button')\n\n // always submit via button as `form.submit()` does not fire any events\n if (submit) {\n submit.focus()\n submit.click()\n }\n\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n\n static emit(element, eventName, eventData = null) {\n const event = new CustomEvent(eventName, {\n bubbles: true,\n detail: eventData,\n })\n\n // setTimeout to make sure stimulus dispatcher is running\n // otherwise events emitted in connect() are not handled\n // cf. https://github.com/stimulusjs/stimulus/issues/222#issuecomment-456192679\n setTimeout(() => element.dispatchEvent(event), 0)\n }\n\n // https://stackoverflow.com/a/53048030\n static objectToQueryString(params = {}, prefix) {\n const query = Object.keys(params).map((k) => {\n let key = k;\n let value = params[key];\n\n if (!value && (value === null || value === undefined || isNaN(value))) {\n value = '';\n }\n\n switch (params.constructor) {\n case Array:\n key = `${prefix}[]`;\n break;\n case Object:\n key = (prefix ? `${prefix}[${key}]` : key);\n break;\n }\n\n if (typeof value === 'object') {\n return Helpers.objectToQueryString(value, key)\n }\n\n return `${key}=${encodeURIComponent(value)}`\n })\n\n return query.join('&')\n }\n\n static getFormDataForXHR(form) {\n const params = new FormData(form)\n params.delete('_method')\n params.delete('utf8')\n params.delete('authenticity_token')\n return params\n }\n\n static visit(url) {\n if (window.Turbo) {\n window.Turbo.visit(url)\n } else {\n window.location.href = url\n }\n }\n\n static reload() {\n Helpers.visit(window.location.href)\n }\n\n static disableFields(element, disabled) {\n // Element itself\n if (element.matches('input, select, textarea')) {\n element.disabled = disabled\n }\n\n if (element.matches('.c-select')) {\n element.disabled = disabled\n Helpers.emit(element, 'select:update!')\n }\n\n // Children\n element.querySelectorAll('input, select, textarea').forEach(input => {\n input.disabled = disabled\n })\n\n element.querySelectorAll('.c-select').forEach(select => {\n select.disabled = disabled\n Helpers.emit(select, 'select:update!')\n })\n }\n\n static toggleVisibilityAndState(element, enabled) {\n toggle(element, enabled)\n this.disableFields(element, !enabled)\n }\n\n // Custom ajax method around Rails.ajax to add our global error handling.\n static ajax(options) {\n throw('Rails.ajax is not available anymore.')\n }\n\n static fetch(method, url, options = {}) {\n return new FetchRequest(method, url, options)\n .perform()\n .then(response => {\n if(!response.ok) {\n Helpers.emit(document, 'fetch:error', response.response)\n }\n\n return response\n })\n .catch(error => {\n // request.js has redirected to the login page, so we don't need to raise an error\n if (typeof error === 'string' && error.endsWith('/login')) {\n // return a never resolving promise to signal that the request was aborted\n // subsequent .then() calls will not be executed\n return new Promise(() => {})\n }\n throw error\n })\n }\n\n // Make sure that requester (i.e. a stimulus controller) only has one pending request\n // And previous requests are aborted gracefully\n // This stops race conditions (form updates etc.)\n static fetchAbortPrevious(requester, method, url, options = {}) {\n const abortController = new AbortController()\n\n options.signal = abortController.signal\n\n if (requester.pendingRequestAbortController) {\n requester.pendingRequestAbortController.abort()\n }\n\n requester.pendingRequestAbortController = abortController\n\n return new FetchRequest(method, url, options)\n .perform()\n .then(response => {\n requester.pendingRequestAbortController = null\n\n if (!response.ok) {\n Helpers.emit(document, 'fetch:error', response.response)\n }\n\n return response\n })\n .catch(error => {\n // the request was aborted or request.js has redirected to the login page, so we don't need to raise an error\n if (error.name === 'AbortError' || (typeof error === 'string' && error.endsWith('/login'))) {\n // return a never resolving promise to signal that the request was aborted\n // subsequent .then() calls will not be executed\n return new Promise(() => {})\n }\n\n throw error\n }).finally(() => {\n requester.pendingRequestAbortController = null\n })\n }\n\n // clones elements and makes sure id is unique\n // i.e. checkbox label which specifies unique id in `for` is copied from a template\n static clone(element) {\n const cloned = element.cloneNode(true)\n\n cloned.querySelectorAll('[id]').forEach(element => {\n const oldId = element.id\n const newId = Helpers.generateUniqueId()\n\n element.id = newId\n cloned.querySelectorAll(`label[for='${oldId}']`).forEach(label => label.setAttribute('for', newId))\n })\n\n return cloned\n }\n\n\n // auto expand field\n static autoExpand(field) {\n // Fix scrolling issue in large resized areas (causing scroll up and down):\n // https://stackoverflow.com/a/18262927\n var scrollLeft = window.pageXOffset ||\n (document.documentElement || document.body.parentNode || document.body).scrollLeft\n\n var scrollTop = window.pageYOffset ||\n (document.documentElement || document.body.parentNode || document.body).scrollTop\n\n field.style.height = 'auto'\n field.style.height = (field.scrollHeight + 20) + 'px'\n\n window.scrollTo(scrollLeft, scrollTop)\n }\n\n // change input value only if there's a change,\n // plus emit a 'change' event so hidden fields etc. can get updated gracefully\n static changeInputValue(input, newValue) {\n if (input.value != newValue) {\n input.value = newValue\n this.emit(input, 'change')\n }\n }\n\n static generateUniqueId() {\n return Date.now().toString(36) + Math.random().toString(36).substring(2)\n }\n\n // Outlets selectors are global CSS selectors\n // To use inner outlets, we use this helper in connect()\n // This ensures that multiple components with nested outlets can be safely used + cloned\n static connectTargetAsOutlet(controller, targetName, outletName) {\n const id = Helpers.generateUniqueId()\n controller[`${targetName}Target`].setAttribute('data-inner-outlet-id', id)\n controller.element.setAttribute(`data-${controller.identifier}-${outletName}-outlet`, `[data-inner-outlet-id=\"${id}\"]`)\n }\n\n // new Date('2024-12-31') in Canada returns Mon Dec 30 2024 16:00:00 GMT-0800 (Pacific Standard Time)\n // This is because the date is parsed in UTC and then converted to local time\n // We want to get a the date in local time -> Mon Dec 31 2024 00:00:00 GMT-0800 (Pacific Standard Time)\n static dateFromISO(isoDateString) {\n if (!isoDateString) return null\n\n // If dateString matches YYYY-MM-DD format\n const [year, month, day] = isoDateString.split('-').map(Number)\n return new Date(year, month - 1, day)\n }\n\n static dateToISO(date) {\n if (!date) return null\n\n const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))\n return utcDate.toISOString().split('T')[0]\n }\n\n static appendParamToUrl(rawUrl, key, value) {\n let url = new URL(rawUrl)\n url.searchParams.append(key, value)\n return url.toString()\n }\n\n}\n", "import { Helpers } from './helpers'\n\n// Available:\n// https://polyfill.io/v3/url-builder\nconst POLYFILL_REQUEST_LIST = [\n 'default',\n 'es5',\n 'es6',\n\n // Additional requires\n 'NodeList.prototype.forEach',\n 'Array.prototype.flat',\n]\n\nconst FEATURE_CHECK_LIST = {\n 'window.Promise': window.Promise,\n 'window.fetch': window.fetch,\n 'window.Symbol': window.Symbol,\n 'NodeList.prototype.forEach': NodeList.prototype.forEach,\n 'Array.prototype.flat': Array.prototype.flat,\n 'Element.prototype.append': Element.prototype.append\n}\n\nconst POLYFILL_SERVICE_URL = 'https://polyfill.io/v3/polyfill.min.js?flags=gated&features='\n\nexport class Polyfills {\n\n // https://gist.github.com/bendc/d7f3dbc83d0f65ca0433caf90378cd95\n static supportsES6() {\n try {\n new Function(\"(a = 0) => a\")\n return true\n }\n catch (err) {\n return false\n }\n }\n\n static browserSupportsAllFeatures() {\n for (const feature in FEATURE_CHECK_LIST) {\n if (!this.isFeatureSupported(FEATURE_CHECK_LIST[feature])) return false\n }\n\n if(!this.supportsES6()) return false\n\n return true\n }\n\n static featureSupportList() {\n let features = {}\n\n features['userAgent'] = navigator.userAgent\n features['ES6'] = this.supportsES6()\n\n for (const feature in FEATURE_CHECK_LIST) {\n features[feature] = this.isFeatureSupported(FEATURE_CHECK_LIST[feature])\n }\n\n return features\n }\n\n static isFeatureSupported(feature) {\n return typeof(feature) !== 'undefined'\n }\n\n static checkAndRun(main) {\n if (this.browserSupportsAllFeatures()) {\n console.log('[Polyfills] Browser supports all features, smooth sailing ahead.')\n main()\n } else {\n console.log('[Polyfills] Browser does NOT support all features, request polyfills.')\n\n const features = POLYFILL_REQUEST_LIST.join(',')\n const url = POLYFILL_SERVICE_URL + escape(features)\n\n Helpers.loadScript(url, main)\n }\n }\n\n}\n", "export { Helpers } from './utils/helpers'\nexport { Polyfills } from './utils/polyfills'\nexport * from './utils/visibility'\n", ".c-button {\n --background: #1d4ed8;\n --background-hover: #2563eb;\n --background-hover-inverted: #eff6ff;\n --background-active: #1d4ed8;\n --background-active-inverted: #dbeafe;\n --text-color: white;\n --text-color-inverted: #1d4ed8;\n --border-color-inverted: #60a5fa;\n --disabled-opacity: 0.5;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n column-gap: 0.25rem;\n border-radius: 0.5rem;\n border-width: 0px;\n --tw-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.2);\n --tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n white-space: nowrap;\n text-align: center;\n text-decoration-line: none;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n\n color: var(--text-color);\n background: var(--background);\n}\n\n .c-button.c-button--icon-only .icon3000 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding: 2px 0px;\n}\n\n .c-button:hover, .c-button.hover {\n color: var(--text-color);\n }\n\n /* enabled */\n\n .c-button:hover:not(:disabled):not(.disabled), .c-button.hover:not(:disabled):not(.disabled) {\n background: var(--background-hover);\n cursor: pointer;\n }\n\n .c-button:active, .c-button.active {\n color: var(--text-color);\n }\n\n .c-button:active:not(:disabled):not(.disabled), .c-button.active:not(:disabled):not(.disabled) {\n background: var(--background-active);\n box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.15),\n inset 0 1px 3px rgba(0, 0, 0, 0.2);\n }\n\n .c-button:focus, .c-button.focus {\n color: var(--text-color);\n outline: none;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n\n z-index: 1;\n }\n\n .c-button:disabled, .c-button.disabled {\n color: var(--text-color);\n opacity: var(--disabled-opacity);\n cursor: not-allowed;\n }\n\n .c-button .icon {\n margin-right: 0.25em;\n }\n\n .c-button--xs {\n font-size: 0.75rem;\n line-height: 1rem;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n\n .c-button--xs.c-button--icon-only .icon3000 {\n font-size: 0.875rem;\n line-height: 1.25rem;\n padding: 1px 0px;\n}\n\n .c-button--sm {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n\n .c-button--sm.c-button--icon-only .icon3000 {\n font-size: 1rem;\n line-height: 1.5rem;\n padding: 2px 0px;\n}\n\n .c-button--lg {\n padding-left: 0.875rem;\n padding-right: 0.875rem;\n padding-top: 0.625rem;\n padding-bottom: 0.625rem;\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n .c-button--lg.c-button--icon-only .icon3000 {\n font-size: 1.125rem;\n line-height: 1.75rem;\n padding: 3px 0px;\n}\n\n .c-button--secondary {\n --background: #f4f4f5;\n --background-hover: #e4e4e7;\n --background-hover-inverted: #f4f4f5;\n --background-active: #e4e4e7;\n --background-active-inverted: #f4f4f5;\n --text-color: #52525b;\n --text-color-inverted: #3f3f46;\n --border-color-inverted: #d4d4d8;\n --disabled-opacity: 0.6;\n }\n\n .c-button--positive {\n --background: #16a34a;\n --background-hover: #15803d;\n --background-hover-inverted: #f0fdf4;\n --background-active: #15803d;\n --background-active-inverted: #dcfce7;\n --text-color: white;\n --text-color-inverted: #15803d;\n --border-color-inverted: #22c55e;\n --disabled-opacity: 0.5;\n }\n\n .c-button--negative {\n --background: #dc2626;\n --background-hover: #ef4444;\n --background-hover-inverted: #fef2f2;\n --background-active: #ef4444;\n --background-active-inverted: #fee2e2;\n --text-color: white;\n --text-color-inverted: #dc2626;\n --border-color-inverted: #ef4444;\n --disabled-opacity: 0.5;\n }\n\n .c-button--inverted {\n --background: transparent;\n --background-hover: var(--background-hover-inverted);\n --background-active: var(--background-active-inverted);\n --text-color: var(--text-color-inverted);\n --disabled-opacity: 0.6;\n\n box-shadow: inset 0 0 0 1px var(--border-color-inverted);\n }\n\n .c-button--plain {\n --background: transparent;\n --background-hover: transparent;\n --background-active: transparent;\n --text-color: #52525b;\n --disabled-opacity: 0.6;\n\n box-shadow: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .c-button--plain:hover:not(:disabled):not(.disabled), .c-button--plain.hover:not(:disabled):not(.disabled) {\n --tw-text-opacity: 1;\n color: rgb(82 82 91 / var(--tw-text-opacity, 1));\n}\n\n .c-button--plain:focus, .c-button--plain.focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));\n}\n\n .c-button--plain:active, .c-button--plain.active {\n --tw-text-opacity: 1;\n color: rgb(82 82 91 / var(--tw-text-opacity, 1));\n}\n\n .c-button--plain:active:not(:disabled):not(.disabled), .c-button--plain.active:not(:disabled):not(.disabled) {\n --tw-text-opacity: 1;\n color: rgb(82 82 91 / var(--tw-text-opacity, 1));\n box-shadow: none;\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vYnV0dG9uX2NvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxxQkFBc0M7RUFDdEMsMkJBQTRDO0VBQzVDLG9DQUFvRDtFQUNwRCw0QkFBNkM7RUFDN0MscUNBQXNEO0VBQ3RELG1CQUFtQjtFQUNuQiw4QkFBK0M7RUFDL0MsZ0NBQWlEO0VBQ2pELHVCQUF1QjtFQUV2QixvQkFBc0Q7RUFBdEQsbUJBQXNEO0VBQXRELHVCQUFzRDtFQUF0RCxtQkFBc0Q7RUFDdEQscUJBQXdDO0VBQXhDLGlCQUF3QztFQUF4QywrQ0FBd0M7RUFBeEMsMkRBQXdDO0VBQXhDLHVHQUF3QztFQUN4QyxtQkFBd0M7RUFBeEMsb0JBQXdDO0VBQXhDLGdCQUF3QztFQUF4QyxtQ0FBd0M7RUFBeEMsa0NBQXdDO0VBQ3hDLG1CQUFpRDtFQUFqRCxrQkFBaUQ7RUFBakQsMEJBQWlEO0VBQ2pELHFCQUFnQjtFQUFoQixzQkFBZ0I7RUFBaEIsbUJBQWdCO0VBQWhCLHNCQUFnQjs7RUFFaEIsd0JBQXdCO0VBQ3hCLDZCQUE2QjtBQXNKL0I7O0VBbkpJO0VBQUEsZUFBZ0I7RUFBaEIsbUJBQWdCO0lBQ2hCO0FBRGdCOztFQUlsQjtJQUNFLHdCQUF3QjtFQU8xQjs7RUFMRSxZQUFZOztFQUNaO01BQ0UsbUNBQW1DO01BQ25DLGVBQWU7SUFDakI7O0VBR0Y7SUFDRSx3QkFBd0I7RUFPMUI7O0VBTEU7TUFDRSxvQ0FBb0M7TUFDcEM7b0RBQzhDO0lBQ2hEOztFQUdGO0lBQ0Usd0JBQXdCO0lBQ3hCLGFBQWE7SUFDYiwyR0FBeUI7SUFBekIseUdBQXlCO0lBQXpCLDRGQUF5QjtJQUF6QixvQkFBeUI7SUFBekIsNkRBQXlCOztJQUV6QixVQUFVO0VBQ1o7O0VBRUE7SUFDRSx3QkFBd0I7SUFDeEIsZ0NBQWdDO0lBQ2hDLG1CQUFtQjtFQUNyQjs7RUFFQTtJQUNFLG9CQUFvQjtFQUN0Qjs7RUFHRTtFQUFBLGtCQUFjO0VBQWQsaUJBQWM7RUFDZCxvQkFBZ0I7RUFBaEIscUJBQWdCO0VBQWhCLG9CQUFnQjtFQUFoQjtBQURjOztFQUlaO0VBQUEsbUJBQWM7RUFBZCxvQkFBYztNQUNkO0FBRGM7O0VBTWhCO0VBQUEsc0JBQW9CO0VBQXBCLHVCQUFvQjtFQUFwQixxQkFBb0I7RUFBcEI7QUFBb0I7O0VBR2xCO0VBQUEsZUFBZ0I7RUFBaEIsbUJBQWdCO01BQ2hCO0FBRGdCOztFQU1sQjtFQUFBLHNCQUFvQjtFQUFwQix1QkFBb0I7RUFBcEIscUJBQW9CO0VBQXBCLHdCQUFvQjtFQUNwQixlQUFnQjtFQUFoQjtBQURvQjs7RUFJbEI7RUFBQSxtQkFBYztFQUFkLG9CQUFjO01BQ2Q7QUFEYzs7RUFLbEI7SUFDRSxxQkFBc0M7SUFDdEMsMkJBQTRDO0lBQzVDLG9DQUFxRDtJQUNyRCw0QkFBNkM7SUFDN0MscUNBQXNEO0lBQ3RELHFCQUFzQztJQUN0Qyw4QkFBK0M7SUFDL0MsZ0NBQWlEO0lBQ2pELHVCQUF1QjtFQUN6Qjs7RUFFQTtJQUNFLHFCQUF1QztJQUN2Qyw0QkFBOEM7SUFDOUMsb0NBQXFEO0lBQ3JELDRCQUE4QztJQUM5QyxxQ0FBdUQ7SUFDdkQsbUJBQW1CO0lBQ25CLDhCQUFnRDtJQUNoRCxnQ0FBa0Q7SUFDbEQsdUJBQXVCO0VBQ3pCOztFQUVBO0lBQ0UscUJBQXFDO0lBQ3JDLDJCQUEyQztJQUMzQyxvQ0FBbUQ7SUFDbkQsNEJBQTRDO0lBQzVDLHFDQUFxRDtJQUNyRCxtQkFBbUI7SUFDbkIsOEJBQThDO0lBQzlDLGdDQUFnRDtJQUNoRCx1QkFBdUI7RUFDekI7O0VBRUE7SUFDRSx5QkFBeUI7SUFDekIsb0RBQW9EO0lBQ3BELHNEQUFzRDtJQUN0RCx3Q0FBd0M7SUFDeEMsdUJBQXVCOztJQUV2Qix3REFBd0Q7RUFDMUQ7O0VBRUE7SUFDRSx5QkFBeUI7SUFDekIsK0JBQStCO0lBQy9CLGdDQUFnQztJQUNoQyxxQkFBc0M7SUFDdEMsdUJBQXVCOztJQUV2QixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGdCQUFnQjtFQW9CbEI7O0VBaEJNO0VBQUEsb0JBQW9CO0VBQXBCO0FBQW9COztFQUt0QjtFQUFBLDJHQUF5QjtFQUF6Qix5R0FBeUI7RUFBekIsNEZBQXlCO0VBQXpCLG9CQUF5QjtFQUF6QjtBQUF5Qjs7RUFJekI7RUFBQSxvQkFBb0I7RUFBcEI7QUFBb0I7O0VBR2xCO0VBQUEsb0JBQW9CO0VBQXBCLGdEQUFvQjtRQUNwQjtBQURvQiIsImZpbGUiOiIuLi9waXN0YWNoaW8vYXBwL2NvbXBvbmVudHMvcGlzdGFjaGlvL2J1dHRvbl9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmMtYnV0dG9uIHtcbiAgLS1iYWNrZ3JvdW5kOiB0aGVtZSgnY29sb3JzLmJsdWUuNzAwJyk7XG4gIC0tYmFja2dyb3VuZC1ob3ZlcjogdGhlbWUoJ2NvbG9ycy5ibHVlLjYwMCcpO1xuICAtLWJhY2tncm91bmQtaG92ZXItaW52ZXJ0ZWQ6IHRoZW1lKCdjb2xvcnMuYmx1ZS41MCcpO1xuICAtLWJhY2tncm91bmQtYWN0aXZlOiB0aGVtZSgnY29sb3JzLmJsdWUuNzAwJyk7XG4gIC0tYmFja2dyb3VuZC1hY3RpdmUtaW52ZXJ0ZWQ6IHRoZW1lKCdjb2xvcnMuYmx1ZS4xMDAnKTtcbiAgLS10ZXh0LWNvbG9yOiB3aGl0ZTtcbiAgLS10ZXh0LWNvbG9yLWludmVydGVkOiB0aGVtZSgnY29sb3JzLmJsdWUuNzAwJyk7XG4gIC0tYm9yZGVyLWNvbG9yLWludmVydGVkOiB0aGVtZSgnY29sb3JzLmJsdWUuNDAwJyk7XG4gIC0tZGlzYWJsZWQtb3BhY2l0eTogMC41O1xuXG4gIEBhcHBseSBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLXgtMTtcbiAgQGFwcGx5IHJvdW5kZWQtbGcgYm9yZGVyLTAgc2hhZG93LWJvcmRlcjtcbiAgQGFwcGx5IHRleHQtc20gYW50aWFsaWFzZWQgZm9udC1zZW1pYm9sZDtcbiAgQGFwcGx5IHRleHQtY2VudGVyIG5vLXVuZGVybGluZSB3aGl0ZXNwYWNlLW5vd3JhcDtcbiAgQGFwcGx5IHB4LTMgcHktMjtcblxuICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQpO1xuXG4gICYuYy1idXR0b24tLWljb24tb25seSAuaWNvbjMwMDAge1xuICAgIEBhcHBseSB0ZXh0LWJhc2U7XG4gICAgcGFkZGluZzogMnB4IDBweDtcbiAgfVxuXG4gICY6aG92ZXIsICYuaG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LWNvbG9yKTtcblxuICAgIC8qIGVuYWJsZWQgKi9cbiAgICAmOm5vdCg6ZGlzYWJsZWQpOm5vdCguZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQtaG92ZXIpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgfVxuXG4gICY6YWN0aXZlLCAmLmFjdGl2ZSB7XG4gICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpO1xuXG4gICAgJjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLWFjdGl2ZSk7XG4gICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjE1KSxcbiAgICAgICAgICAgICAgICAgIGluc2V0IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1cywgJi5mb2N1cyB7XG4gICAgY29sb3I6IHZhcigtLXRleHQtY29sb3IpO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgQGFwcGx5IHJpbmcgcmluZy1ibHVlLTIwMDtcblxuICAgIHotaW5kZXg6IDE7XG4gIH1cblxuICAmOmRpc2FibGVkLCAmLmRpc2FibGVkIHtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1jb2xvcik7XG4gICAgb3BhY2l0eTogdmFyKC0tZGlzYWJsZWQtb3BhY2l0eSk7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgfVxuXG4gIC5pY29uIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuMjVlbTtcbiAgfVxuXG4gICYtLXhzIHtcbiAgICBAYXBwbHkgdGV4dC14cztcbiAgICBAYXBwbHkgcHgtMiBweS0xO1xuXG4gICAgJi5jLWJ1dHRvbi0taWNvbi1vbmx5IC5pY29uMzAwMCB7XG4gICAgICBAYXBwbHkgdGV4dC1zbTtcbiAgICAgIHBhZGRpbmc6IDFweCAwcHg7XG4gICAgfVxuICB9XG5cbiAgJi0tc20ge1xuICAgIEBhcHBseSBweC0yLjUgcHktMS41O1xuXG4gICAgJi5jLWJ1dHRvbi0taWNvbi1vbmx5IC5pY29uMzAwMCB7XG4gICAgICBAYXBwbHkgdGV4dC1iYXNlO1xuICAgICAgcGFkZGluZzogMnB4IDBweDtcbiAgICB9XG4gIH1cblxuICAmLS1sZyB7XG4gICAgQGFwcGx5IHB4LTMuNSBweS0yLjU7XG4gICAgQGFwcGx5IHRleHQtYmFzZTtcblxuICAgICYuYy1idXR0b24tLWljb24tb25seSAuaWNvbjMwMDAge1xuICAgICAgQGFwcGx5IHRleHQtbGc7XG4gICAgICBwYWRkaW5nOiAzcHggMHB4O1xuICAgIH1cbiAgfVxuXG4gICYtLXNlY29uZGFyeSB7XG4gICAgLS1iYWNrZ3JvdW5kOiB0aGVtZSgnY29sb3JzLmdyYXkuMTAwJyk7XG4gICAgLS1iYWNrZ3JvdW5kLWhvdmVyOiB0aGVtZSgnY29sb3JzLmdyYXkuMjAwJyk7XG4gICAgLS1iYWNrZ3JvdW5kLWhvdmVyLWludmVydGVkOiB0aGVtZSgnY29sb3JzLmdyYXkuMTAwJyk7XG4gICAgLS1iYWNrZ3JvdW5kLWFjdGl2ZTogdGhlbWUoJ2NvbG9ycy5ncmF5LjIwMCcpO1xuICAgIC0tYmFja2dyb3VuZC1hY3RpdmUtaW52ZXJ0ZWQ6IHRoZW1lKCdjb2xvcnMuZ3JheS4xMDAnKTtcbiAgICAtLXRleHQtY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS42MDAnKTtcbiAgICAtLXRleHQtY29sb3ItaW52ZXJ0ZWQ6IHRoZW1lKCdjb2xvcnMuZ3JheS43MDAnKTtcbiAgICAtLWJvcmRlci1jb2xvci1pbnZlcnRlZDogdGhlbWUoJ2NvbG9ycy5ncmF5LjMwMCcpO1xuICAgIC0tZGlzYWJsZWQtb3BhY2l0eTogMC42O1xuICB9XG5cbiAgJi0tcG9zaXRpdmUge1xuICAgIC0tYmFja2dyb3VuZDogdGhlbWUoJ2NvbG9ycy5ncmVlbi42MDAnKTtcbiAgICAtLWJhY2tncm91bmQtaG92ZXI6ICB0aGVtZSgnY29sb3JzLmdyZWVuLjcwMCcpO1xuICAgIC0tYmFja2dyb3VuZC1ob3Zlci1pbnZlcnRlZDogdGhlbWUoJ2NvbG9ycy5ncmVlbi41MCcpO1xuICAgIC0tYmFja2dyb3VuZC1hY3RpdmU6IHRoZW1lKCdjb2xvcnMuZ3JlZW4uNzAwJyk7XG4gICAgLS1iYWNrZ3JvdW5kLWFjdGl2ZS1pbnZlcnRlZDogdGhlbWUoJ2NvbG9ycy5ncmVlbi4xMDAnKTtcbiAgICAtLXRleHQtY29sb3I6IHdoaXRlO1xuICAgIC0tdGV4dC1jb2xvci1pbnZlcnRlZDogdGhlbWUoJ2NvbG9ycy5ncmVlbi43MDAnKTtcbiAgICAtLWJvcmRlci1jb2xvci1pbnZlcnRlZDogdGhlbWUoJ2NvbG9ycy5ncmVlbi41MDAnKTtcbiAgICAtLWRpc2FibGVkLW9wYWNpdHk6IDAuNTtcbiAgfVxuXG4gICYtLW5lZ2F0aXZlIHtcbiAgICAtLWJhY2tncm91bmQ6IHRoZW1lKCdjb2xvcnMucmVkLjYwMCcpO1xuICAgIC0tYmFja2dyb3VuZC1ob3ZlcjogdGhlbWUoJ2NvbG9ycy5yZWQuNTAwJyk7XG4gICAgLS1iYWNrZ3JvdW5kLWhvdmVyLWludmVydGVkOiB0aGVtZSgnY29sb3JzLnJlZC41MCcpO1xuICAgIC0tYmFja2dyb3VuZC1hY3RpdmU6IHRoZW1lKCdjb2xvcnMucmVkLjUwMCcpO1xuICAgIC0tYmFja2dyb3VuZC1hY3RpdmUtaW52ZXJ0ZWQ6IHRoZW1lKCdjb2xvcnMucmVkLjEwMCcpO1xuICAgIC0tdGV4dC1jb2xvcjogd2hpdGU7XG4gICAgLS10ZXh0LWNvbG9yLWludmVydGVkOiB0aGVtZSgnY29sb3JzLnJlZC42MDAnKTtcbiAgICAtLWJvcmRlci1jb2xvci1pbnZlcnRlZDogdGhlbWUoJ2NvbG9ycy5yZWQuNTAwJyk7XG4gICAgLS1kaXNhYmxlZC1vcGFjaXR5OiAwLjU7XG4gIH1cblxuICAmLS1pbnZlcnRlZCB7XG4gICAgLS1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAtLWJhY2tncm91bmQtaG92ZXI6IHZhcigtLWJhY2tncm91bmQtaG92ZXItaW52ZXJ0ZWQpO1xuICAgIC0tYmFja2dyb3VuZC1hY3RpdmU6IHZhcigtLWJhY2tncm91bmQtYWN0aXZlLWludmVydGVkKTtcbiAgICAtLXRleHQtY29sb3I6IHZhcigtLXRleHQtY29sb3ItaW52ZXJ0ZWQpO1xuICAgIC0tZGlzYWJsZWQtb3BhY2l0eTogMC42O1xuXG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLWJvcmRlci1jb2xvci1pbnZlcnRlZCk7XG4gIH1cblxuICAmLS1wbGFpbiB7XG4gICAgLS1iYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAtLWJhY2tncm91bmQtaG92ZXI6IHRyYW5zcGFyZW50O1xuICAgIC0tYmFja2dyb3VuZC1hY3RpdmU6IHRyYW5zcGFyZW50O1xuICAgIC0tdGV4dC1jb2xvcjogdGhlbWUoJ2NvbG9ycy5ncmF5LjYwMCcpO1xuICAgIC0tZGlzYWJsZWQtb3BhY2l0eTogMC42O1xuXG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICY6aG92ZXIsICYuaG92ZXIge1xuICAgICAgJjpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKSB7XG4gICAgICAgIEBhcHBseSB0ZXh0LWdyYXktNjAwO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6Zm9jdXMsICYuZm9jdXMge1xuICAgICAgQGFwcGx5IHJpbmcgcmluZy1ibHVlLTIwMDtcbiAgICB9XG5cbiAgICAmOmFjdGl2ZSwgJi5hY3RpdmUge1xuICAgICAgQGFwcGx5IHRleHQtZ3JheS02MDA7XG5cbiAgICAgICY6bm90KDpkaXNhYmxlZCk6bm90KC5kaXNhYmxlZCkge1xuICAgICAgICBAYXBwbHkgdGV4dC1ncmF5LTYwMDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ== */", ".c-button-group {\n display: inline-flex;\n}\n\n .c-button-group > .c-button,\n .c-button-group > form {\n margin-left: 0 !important;\n }\n\n .c-button-group > :first-child,\n .c-button-group > :first-child > .c-button {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n .c-button-group > :last-child,\n .c-button-group > :last-child > .c-button {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n .c-button-group > :not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n\n .c-button-group > *:not(:last-child),\n .c-button-group > *:not(:last-child) > form > .c-button {\n margin-right: -1px;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vYnV0dG9uX2dyb3VwX2NvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxvQkFBb0I7QUEyQnRCOztFQXpCRTs7SUFFRSx5QkFBeUI7RUFDM0I7O0VBRUE7O0lBRUUsMEJBQTBCO0lBQzFCLDZCQUE2QjtFQUMvQjs7RUFFQTs7SUFFRSx5QkFBeUI7SUFDekIsNEJBQTRCO0VBQzlCOztFQUVBO0lBQ0UsZ0JBQWdCO0VBQ2xCOztFQUVBOztJQUVFLGtCQUFrQjtFQUNwQiIsImZpbGUiOiIuLi9waXN0YWNoaW8vYXBwL2NvbXBvbmVudHMvcGlzdGFjaGlvL2J1dHRvbl9ncm91cF9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmMtYnV0dG9uLWdyb3VwIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG5cbiAgPiAuYy1idXR0b24sXG4gID4gZm9ybSB7XG4gICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcbiAgfVxuXG4gID4gOmZpcnN0LWNoaWxkLFxuICA+IDpmaXJzdC1jaGlsZCA+IC5jLWJ1dHRvbiB7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIH1cblxuICA+IDpsYXN0LWNoaWxkLFxuICA+IDpsYXN0LWNoaWxkID4gLmMtYnV0dG9uIHtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIH1cblxuICA+IDpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICB9XG5cbiAgPiAqOm5vdCg6bGFzdC1jaGlsZCksXG4gID4gKjpub3QoOmxhc3QtY2hpbGQpID4gZm9ybSA+IC5jLWJ1dHRvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xuICB9XG59XG4iXX0= */", ".c-button-group-select > label:first-of-type > .c-button {\n border-top-right-radius: 0px;\n border-bottom-right-radius: 0px\n}\n .c-button-group-select > label:last-of-type > .c-button {\n border-top-left-radius: 0px;\n border-bottom-left-radius: 0px\n}\n .c-button-group-select > label:not(:first-of-type):not(:last-of-type) > .c-button {\n border-radius: 0px\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vYnV0dG9uX2dyb3VwX3NlbGVjdF9jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJO0lBQUEsNEJBQXNCO0lBQ3RCO0FBRHNCO0VBS3RCO0lBQUEsMkJBQXNCO0lBQ3RCO0FBRHNCO0VBS3RCO0lBQUE7QUFBbUIiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9idXR0b25fZ3JvdXBfc2VsZWN0X2NvbXBvbmVudC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYy1idXR0b24tZ3JvdXAtc2VsZWN0IHtcbiAgPiBsYWJlbDpmaXJzdC1vZi10eXBlID4gLmMtYnV0dG9uIHtcbiAgICBAYXBwbHkgcm91bmRlZC10ci1ub25lO1xuICAgIEBhcHBseSByb3VuZGVkLWJyLW5vbmU7XG4gIH1cblxuICA+IGxhYmVsOmxhc3Qtb2YtdHlwZSA+IC5jLWJ1dHRvbiB7XG4gICAgQGFwcGx5IHJvdW5kZWQtdGwtbm9uZTtcbiAgICBAYXBwbHkgcm91bmRlZC1ibC1ub25lO1xuICB9XG5cbiAgPiBsYWJlbDpub3QoOmZpcnN0LW9mLXR5cGUpOm5vdCg6bGFzdC1vZi10eXBlKSA+IC5jLWJ1dHRvbiB7XG4gICAgQGFwcGx5IHJvdW5kZWQtbm9uZTtcbiAgfVxufVxuIl19 */", ".flatpickr-calendar {\n opacity: 0;\n display: none;\n visibility: hidden;\n position: absolute;\n background: #fff;\n padding: 8px;\n min-width: 240px;\n max-width: 250px;\n box-shadow: var(--dropdown-box-shadow);\n color: #27272a;\n border-radius: 0.5rem;\n\n}@media (max-width: 767px) {.flatpickr-calendar {\n position: fixed;\n inset: 0px !important;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n border-radius: 0px;\n border-width: 0px;\n width: 100%;\n max-width: 100%;\n height: 100vh;\n\n }\n\n}\n\n.flatpickr-calendar.open {\n opacity: 1;\n visibility: visible;\n display: inline-block;\n z-index: calc(var(--z-index-top) + 1);\n}\n\n.flatpickr-months {\n display: flex;\n align-items: center;\n margin-bottom: 5px;\n}\n\n@media (max-width: 767px) {.flatpickr-months {\n margin-bottom: 0.75rem;\n\n }\n\n}\n\n.flatpickr-months .flatpickr-prev-month,\n .flatpickr-months .flatpickr-next-month {\n display: flex;\n padding: 6px;\n border-radius: 0.5rem;\n }\n\n@media (min-width: 1024px) {.flatpickr-months .flatpickr-prev-month:hover, .flatpickr-months .flatpickr-next-month:hover {\n cursor: pointer;\n --tw-bg-opacity: 1;\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n\n }\n\n}\n\n.flatpickr-months .flatpickr-prev-month svg, .flatpickr-months .flatpickr-next-month svg {\n width: 1rem;\n height: 1rem;\n }\n\n@media (max-width: 767px) {.flatpickr-months .flatpickr-prev-month svg, .flatpickr-months .flatpickr-next-month svg {\n height: 1.5rem;\n width: 1.5rem;\n\n }\n\n}\n\n.flatpickr-months .flatpickr-month {\n margin: 0 auto;\n }\n\n.flatpickr-months .flatpickr-monthDropdown-months {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n\n}\n\n.flatpickr-months .flatpickr-current-month {\n display: flex;\n align-items: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n.flatpickr-months .cur-month {\n font-weight: 600;\n padding-left: 10px;\n\n}\n\n.flatpickr-months .numInput {\n width: 40px !important;\n border: 0;\n box-shadow: none;\n margin: 0 0 0 12px;\n padding: 0;\n -moz-appearance: textfield;\n }\n\n.flatpickr-months .numInput:hover,\n .flatpickr-months .numInput:focus {\n box-shadow: none;\n }\n\n.flatpickr-months .numInput:disabled {\n background: white;\n }\n\n.flatpickr-months .numInput::-webkit-inner-spin-button,\n .flatpickr-months .numInput::-webkit-outer-spin-button {\n margin: 0;\n -webkit-appearance: none;\n }\n\n.flatpickr-weekdays {\n margin-top: 0.75rem;\n margin-bottom: 0.25rem;\n\n}\n\n.flatpickr-weekdays .flatpickr-weekdaycontainer {\n display: flex;\n width: 100%;\n }\n\n.flatpickr-weekdays .flatpickr-weekday {\n text-align: center;\n font-size: 0.75rem;\n line-height: 1rem;\n color: #52525b;\n text-transform: uppercase;\n width: calc(100% / 7);\n }\n\n.flatpickr-days .dayContainer {\n display: flex;\n flex-wrap: wrap;\n }\n\n.flatpickr-days .flatpickr-day {\n width: 14.2857143%;\n text-align: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n border-width: 2px;\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n font-weight: 600;\n\n}\n\n@media (max-width: 767px) {.flatpickr-days .flatpickr-day {\n font-size: 1rem;\n line-height: 1.5rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0px;\n padding-right: 0px;\n\n }\n\n}\n\n.flatpickr-days .flatpickr-day.today {\n position: relative;\n }\n\n.flatpickr-days .flatpickr-day.today::after {\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n border-top: 8px solid #2563eb;\n border-right: 0 solid transparent;\n border-bottom: 0 solid transparent;\n border-left: 8px solid transparent;\n }\n\n.flatpickr-days .flatpickr-day:hover,\n .flatpickr-days .flatpickr-day:focus {\n background: #dbeafe;\n border-color: #dbeafe;\n cursor: pointer;\n outline: none;\n }\n\n.flatpickr-days .flatpickr-day.selected {\n background: #2563eb;\n border-color: #2563eb;\n color: white;\n }\n\n.flatpickr-days .flatpickr-day.selected.flatpickr-day.today::after {\n border-top-color: white;\n }\n\n.flatpickr-days .flatpickr-day.flatpickr-disabled {\n background: #f4f4f5;\n border-color: #f4f4f5;\n }\n\n.flatpickr-days .flatpickr-day.flatpickr-disabled:hover {\n cursor: not-allowed;\n background: #f4f4f5;\n border-color: #f4f4f5;\n }\n\n.flatpickr-days .prevMonthDay,\n .flatpickr-days .nextMonthDay {\n color: #52525b;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vZGF0ZV9waWNrZXJfY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLFVBQVU7RUFDVixhQUFhO0VBQ2Isa0JBQWtCO0VBQ2xCLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixnQkFBZ0I7RUFDaEIsc0NBQXNDO0VBQ3RDLGNBQStCO0VBRS9CLHFCQUFpQjs7QUFTbkIsQ0FQRSwyQkFBQTtJQUFBLGVBQWU7SUFDZixxQkFBNEI7SUFDNUIsbUJBQXNCO0lBQXRCLHNCQUFzQjtJQUF0QixxQkFBc0I7SUFBdEIsc0JBQXNCO0lBQ3RCLGtCQUFrQztJQUFsQyxpQkFBa0M7SUFDbEMsV0FBOEI7SUFBOUIsZUFBOEI7SUFDOUI7O0VBTGU7O0FBQUE7O0FBU2pCO0VBQ0UsVUFBVTtFQUNWLG1CQUFtQjtFQUNuQixxQkFBcUI7RUFDckIscUNBQXFDO0FBQ3ZDOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixrQkFBa0I7QUFrRXBCOztBQWhFRSwyQkFBQTtJQUFBOztFQUFjOztBQUFBOztBQUVkOztJQUVFLGFBQWE7SUFDYixZQUFZO0lBRVoscUJBQWlCO0VBYW5COztBQVZJLDRCQUFBO0lBQUEsZUFBd0I7SUFDeEIsa0JBQXFCO0lBQXJCOztFQUR3Qjs7QUFBQTs7QUFJMUI7TUFDRSxXQUFXO01BQ1gsWUFBWTtJQUdkOztBQURFLDJCQUFBO0lBQUEsY0FBb0I7SUFBcEI7O0VBQW9COztBQUFBOztBQUl4QjtJQUNFLGNBQWM7RUFDaEI7O0FBR0U7RUFBQSxvQkFBVztFQUFYOztBQUFXOztBQUdiO0lBQ0UsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixtQkFBYztJQUFkLG9CQUFjO0VBQ2hCOztBQUdFO0VBQUEsZ0JBQW9CO0lBQ3BCOztBQURvQjs7QUFJdEI7SUFDRSxzQkFBc0I7SUFDdEIsU0FBUztJQUNULGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLDBCQUEwQjtFQWdCNUI7O0FBZEU7O01BRUUsZ0JBQWdCO0lBQ2xCOztBQUVBO01BQ0UsaUJBQWlCO0lBQ25COztBQUVBOztNQUVFLFNBQVM7TUFDVCx3QkFBd0I7SUFDMUI7O0FBS0Y7RUFBQSxtQkFBZ0I7RUFBaEI7O0FBQWdCOztBQUNoQjtJQUNFLGFBQWE7SUFDYixXQUFXO0VBQ2I7O0FBRUE7SUFDRSxrQkFBa0I7SUFDbEIsa0JBQWM7SUFBZCxpQkFBYztJQUNkLGNBQStCO0lBQy9CLHlCQUF5QjtJQUN6QixxQkFBcUI7RUFDdkI7O0FBSUE7SUFDRSxhQUFhO0lBQ2IsZUFBZTtFQUNqQjs7QUFHRTtFQUFBLGtCQUFZO0VBQ1osa0JBQTBCO0VBQTFCLG1CQUEwQjtFQUExQixvQkFBMEI7RUFDMUIsaUJBQTRCO0VBQTVCLHNCQUE0QjtFQUE1Qiw0REFBNEI7RUFDNUI7O0FBSFk7O0FBSVosMkJBQUE7SUFBQSxlQUFtQjtJQUFuQixtQkFBbUI7SUFDbkIsb0JBQXNCO0lBQXRCLHVCQUFzQjtJQUF0QixpQkFBc0I7SUFBdEI7O0VBRG1COztBQUFBOztBQUduQjtNQUNFLGtCQUFrQjtJQVlwQjs7QUFWRTtRQUNFLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsTUFBTTtRQUNOLFFBQVE7UUFDUiw2QkFBOEM7UUFDOUMsaUNBQWlDO1FBQ2pDLGtDQUFrQztRQUNsQyxrQ0FBa0M7TUFDcEM7O0FBR0Y7O01BRUUsbUJBQW9DO01BQ3BDLHFCQUFzQztNQUN0QyxlQUFlO01BQ2YsYUFBYTtJQUNmOztBQUVBO01BQ0UsbUJBQW9DO01BQ3BDLHFCQUFzQztNQUN0QyxZQUFZO0lBT2Q7O0FBSkk7VUFDRSx1QkFBdUI7UUFDekI7O0FBSUo7TUFDRSxtQkFBb0M7TUFDcEMscUJBQXNDO0lBT3hDOztBQUxFO1FBQ0UsbUJBQW1CO1FBQ25CLG1CQUFvQztRQUNwQyxxQkFBc0M7TUFDeEM7O0FBSUo7O0lBRUUsY0FBK0I7RUFDakMiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9kYXRlX3BpY2tlcl9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmZsYXRwaWNrci1jYWxlbmRhciB7XG4gIG9wYWNpdHk6IDA7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICBwYWRkaW5nOiA4cHg7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIG1heC13aWR0aDogMjUwcHg7XG4gIGJveC1zaGFkb3c6IHZhcigtLWRyb3Bkb3duLWJveC1zaGFkb3cpO1xuICBjb2xvcjogdGhlbWUoJ2NvbG9ycy5ncmF5LjgwMCcpO1xuXG4gIEBhcHBseSByb3VuZGVkLWxnO1xuXG4gIEBhcHBseSBzbTpmaXhlZDtcbiAgQGFwcGx5IHNtOmluc2V0LTAgIWltcG9ydGFudDtcbiAgQGFwcGx5IHNtOnB5LTIgc206cHgtMTtcbiAgQGFwcGx5IHNtOmJvcmRlci0wIHNtOnJvdW5kZWQtbm9uZTtcbiAgQGFwcGx5IHNtOnctZnVsbCBzbTptYXgtdy1mdWxsO1xuICBAYXBwbHkgc206aC1zY3JlZW47XG5cbn1cblxuLmZsYXRwaWNrci1jYWxlbmRhci5vcGVuIHtcbiAgb3BhY2l0eTogMTtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB6LWluZGV4OiBjYWxjKHZhcigtLXotaW5kZXgtdG9wKSArIDEpO1xufVxuXG4uZmxhdHBpY2tyLW1vbnRocyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcblxuICBAYXBwbHkgc206bWItMztcblxuICAuZmxhdHBpY2tyLXByZXYtbW9udGgsXG4gIC5mbGF0cGlja3ItbmV4dC1tb250aCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nOiA2cHg7XG5cbiAgICBAYXBwbHkgcm91bmRlZC1sZztcblxuICAgICY6aG92ZXIge1xuICAgICAgQGFwcGx5IGxnOmN1cnNvci1wb2ludGVyO1xuICAgICAgQGFwcGx5IGxnOmJnLWJsdWUtMTAwO1xuICAgIH1cblxuICAgIHN2ZyB7XG4gICAgICB3aWR0aDogMXJlbTtcbiAgICAgIGhlaWdodDogMXJlbTtcblxuICAgICAgQGFwcGx5IHNtOnctNiBzbTpoLTY7XG4gICAgfVxuICB9XG5cbiAgLmZsYXRwaWNrci1tb250aCB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gIH1cblxuICAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzIHtcbiAgICBAYXBwbHkgcHktMTtcbiAgfVxuXG4gIC5mbGF0cGlja3ItY3VycmVudC1tb250aCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIEBhcHBseSB0ZXh0LXNtO1xuICB9XG5cbiAgLmN1ci1tb250aCB7XG4gICAgQGFwcGx5IGZvbnQtc2VtaWJvbGQ7XG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICB9XG5cbiAgLm51bUlucHV0IHtcbiAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50O1xuICAgIGJvcmRlcjogMDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIG1hcmdpbjogMCAwIDAgMTJweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIC1tb3otYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuXG4gICAgJjpkaXNhYmxlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIH1cbiAgfVxufVxuXG4uZmxhdHBpY2tyLXdlZWtkYXlzIHtcbiAgQGFwcGx5IG10LTMgbWItMTtcbiAgLmZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmZsYXRwaWNrci13ZWVrZGF5IHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgQGFwcGx5IHRleHQteHM7XG4gICAgY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS42MDAnKTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyA3KTtcbiAgfVxufVxuXG4uZmxhdHBpY2tyLWRheXMge1xuICAuZGF5Q29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgfVxuXG4gIC5mbGF0cGlja3ItZGF5IHtcbiAgICBAYXBwbHkgdy0xLzc7XG4gICAgQGFwcGx5IHRleHQtc20gdGV4dC1jZW50ZXI7XG4gICAgQGFwcGx5IGJvcmRlci0yIGJvcmRlci13aGl0ZTtcbiAgICBAYXBwbHkgZm9udC1zZW1pYm9sZDtcbiAgICBAYXBwbHkgc206dGV4dC1iYXNlO1xuICAgIEBhcHBseSBzbTpweS0xIHNtOnB4LTA7XG5cbiAgICAmLnRvZGF5IHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3JkZXItdG9wOiA4cHggc29saWQgdGhlbWUoJ2NvbG9ycy5ibHVlLjYwMCcpO1xuICAgICAgICBib3JkZXItcmlnaHQ6IDAgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDAgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1sZWZ0OiA4cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lKCdjb2xvcnMuYmx1ZS4xMDAnKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdGhlbWUoJ2NvbG9ycy5ibHVlLjEwMCcpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICB9XG5cbiAgICAmLnNlbGVjdGVkIHtcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lKCdjb2xvcnMuYmx1ZS42MDAnKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdGhlbWUoJ2NvbG9ycy5ibHVlLjYwMCcpO1xuICAgICAgY29sb3I6IHdoaXRlO1xuXG4gICAgICAmLmZsYXRwaWNrci1kYXkudG9kYXkge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogd2hpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLmZsYXRwaWNrci1kaXNhYmxlZCB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZSgnY29sb3JzLmdyYXkuMTAwJyk7XG4gICAgICBib3JkZXItY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS4xMDAnKTtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRoZW1lKCdjb2xvcnMuZ3JheS4xMDAnKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0aGVtZSgnY29sb3JzLmdyYXkuMTAwJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLnByZXZNb250aERheSxcbiAgLm5leHRNb250aERheSB7XG4gICAgY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS42MDAnKTtcbiAgfVxufVxuIl19 */", ".c-dropdown {\n display: inline-block;\n}\n\n .c-dropdown .c-dropdown__toggle {\n width: inherit;\n cursor: pointer;\n }\n\n .c-dropdown__window {\n position: absolute;\n top: 0px;\n left: 0px;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n\n z-index: calc(var(--z-index-top) + 1);\n}\n\n .c-dropdown__link a,\n .c-dropdown__link .button_to > [type=\"submit\"] {\n display: block;\n width: 100%;\n text-align: left;\n text-transform: none;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n font-size: 0.875rem;\n --tw-text-opacity: 1;\n color: rgb(63 63 70 / var(--tw-text-opacity, 1));\n line-height: 1.25rem;\n}\n\n @media (min-width: 1024px) {\n\n .c-dropdown__link a,\n .c-dropdown__link .button_to > [type=\"submit\"] {\n white-space: nowrap;\n }\n}\n\n .c-dropdown__link a:hover, .c-dropdown__link .button_to > [type=\"submit\"]:hover {\n color: white;\n background: #2563eb;\n }\n\n .c-dropdown__link a.disabled, .c-dropdown__link .button_to > [type=\"submit\"].disabled {\n --tw-text-opacity: 1;\n color: rgb(161 161 170 / var(--tw-text-opacity, 1));\n cursor: not-allowed;\n}\n\n .c-dropdown__link .button_to {\n display: block;\n width: 100%;\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vZHJvcGRvd25fY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHFCQUFxQjtBQXdDdkI7O0VBdENFO0lBQ0UsY0FBYztJQUNkLGVBQWU7RUFDakI7O0VBR0U7RUFBQSxrQkFBNEI7RUFBNUIsUUFBNEI7RUFBNUIsU0FBNEI7RUFDNUIsb0JBQVc7RUFBWCx1QkFBVzs7SUFFWDtBQUg0Qjs7RUFTMUI7O0VBQUEsY0FBbUI7RUFBbkIsV0FBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLG9CQUFrQjtFQUNsQixrQkFBZ0I7RUFBaEIsbUJBQWdCO0VBQWhCLG1CQUFnQjtFQUFoQixzQkFBZ0I7RUFDaEIsbUJBQTRCO0VBQTVCLG9CQUE0QjtFQUE1QixnREFBNEI7RUFDNUI7QUFMbUI7O0VBTW5COztFQUFBOztJQUFBO0VBQTJCO0FBQUE7O0VBRTNCO1FBQ0UsWUFBWTtRQUNaLG1CQUFvQztNQUN0Qzs7RUFHRTtFQUFBLG9CQUFvQjtFQUFwQixtREFBb0I7RUFDcEI7QUFEb0I7O0VBTXRCO0VBQUEsY0FBbUI7RUFBbkI7QUFBbUIiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9kcm9wZG93bl9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmMtZHJvcGRvd24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmMtZHJvcGRvd25fX3RvZ2dsZSB7XG4gICAgd2lkdGg6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgJl9fd2luZG93IHtcbiAgICBAYXBwbHkgYWJzb2x1dGUgdG9wLTAgbGVmdC0wO1xuICAgIEBhcHBseSBweS0xO1xuXG4gICAgei1pbmRleDogY2FsYyh2YXIoLS16LWluZGV4LXRvcCkgKyAxKTtcbiAgfVxuXG4gICZfX2xpbmsge1xuICAgIGEsXG4gICAgLmJ1dHRvbl90byA+IFt0eXBlPVwic3VibWl0XCJdIHtcbiAgICAgIEBhcHBseSBibG9jayB3LWZ1bGw7XG4gICAgICBAYXBwbHkgdGV4dC1sZWZ0O1xuICAgICAgQGFwcGx5IG5vcm1hbC1jYXNlO1xuICAgICAgQGFwcGx5IHB4LTQgcHktMjtcbiAgICAgIEBhcHBseSB0ZXh0LXNtIHRleHQtZ3JheS03MDA7XG4gICAgICBAYXBwbHkgbGVhZGluZy01O1xuICAgICAgQGFwcGx5IGxnOndoaXRlc3BhY2Utbm93cmFwO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0aGVtZSgnY29sb3JzLmJsdWUuNjAwJyk7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICBAYXBwbHkgdGV4dC1ncmF5LTQwMDtcbiAgICAgICAgQGFwcGx5IGN1cnNvci1ub3QtYWxsb3dlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYnV0dG9uX3RvIHtcbiAgICAgIEBhcHBseSBibG9jayB3LWZ1bGw7XG4gICAgfVxuICB9XG59XG4iXX0= */", "/* Hide password reveal for Microsoft browsers */\n .c-form-password-input input[type=password]::-ms-reveal,\n .c-form-password-input input[type=password]::-ms-clear {\n display: none;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vZm9ybS9wYXNzd29yZF9pbnB1dF9jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNFLGdEQUFnRDtFQUNoRDs7TUFFSSxhQUFhO0VBQ2pCIiwiZmlsZSI6Ii4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vZm9ybS9wYXNzd29yZF9pbnB1dF9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmMtZm9ybS1wYXNzd29yZC1pbnB1dCB7XG4gIC8qIEhpZGUgcGFzc3dvcmQgcmV2ZWFsIGZvciBNaWNyb3NvZnQgYnJvd3NlcnMgKi9cbiAgaW5wdXRbdHlwZT1wYXNzd29yZF06Oi1tcy1yZXZlYWwsXG4gIGlucHV0W3R5cGU9cGFzc3dvcmRdOjotbXMtY2xlYXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuIl19 */", ".c-grid-picker {\n --option-size: 1.75rem;\n\n display: flex;\n justify-content: flex-start;\n position: relative;\n\n}\n\n .c-grid-picker__value {\n width: 2.625em;\n height: 2.625em;\n border: 1px solid #d4d4d8;\n border-radius: 0.25rem;\n padding: 0.25em;\n background: white;\n }\n\n .c-grid-picker__options {\n padding: 0 0.5em;\n display: grid;\n grid: auto-flow / repeat(6, var(--option-size));\n grid-column-gap: 3px;\n grid-row-gap: 3px;\n }\n\n .c-grid-picker__option {\n border: 1px solid white;\n border-radius: 0.25rem;\n width: var(--option-size);\n height: var(--option-size);\n color: #27272a;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 3px;\n }\n\n .c-grid-picker__option:hover {\n border-color: #d4d4d8;\n color: #27272a;\n }\n\n .c-grid-picker__option:visited,\n .c-grid-picker__option:active,\n .c-grid-picker__option:focus {\n color: #27272a;\n }\n\n .c-grid-picker__option--blank {\n background: linear-gradient(-45deg, #fff 48%, #d4d4d8 48%, #d4d4d8 52%, #fff 53%);\n border-color: #a1a1aa;\n }\n\n .c-grid-picker__value > *, .c-grid-picker__option > * {\n width: 100%;\n height: 100%;\n display: flex !important;\n justify-content: center;\n align-items: center;\n }\n\n .c-grid-picker .c-dropdown {\n display: flex;\n position: initial;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vZ3JpZF9waWNrZXJfY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHNCQUFzQjs7RUFFdEIsYUFBYTtFQUNiLDJCQUEyQjtFQUMzQixrQkFBa0I7O0FBZ0VwQjs7RUE5REU7SUFDRSxjQUFjO0lBQ2QsZUFBZTtJQUNmLHlCQUEwQztJQUMxQyxzQkFBYztJQUNkLGVBQWU7SUFDZixpQkFBaUI7RUFDbkI7O0VBRUE7SUFDRSxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLCtDQUErQztJQUMvQyxvQkFBb0I7SUFDcEIsaUJBQWlCO0VBQ25COztFQUVBO0lBQ0UsdUJBQXVCO0lBQ3ZCLHNCQUFjO0lBQ2QseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQixjQUErQjtJQUMvQixhQUFhO0lBQ2IsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsWUFBWTtFQWlCZDs7RUFmRTtNQUNFLHFCQUFzQztNQUN0QyxjQUErQjtJQUNqQzs7RUFFQTs7O01BR0UsY0FBK0I7SUFDakM7O0VBRUE7TUFDRSxpRkFBbUg7TUFDbkgscUJBQXNDO0lBQ3hDOztFQUtBO01BQ0UsV0FBVztNQUNYLFlBQVk7TUFDWix3QkFBd0I7TUFDeEIsdUJBQXVCO01BQ3ZCLG1CQUFtQjtJQUNyQjs7RUFHRjtJQUNFLGFBQWE7SUFDYixpQkFBaUI7RUFDbkIiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9ncmlkX3BpY2tlcl9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmMtZ3JpZC1waWNrZXIge1xuICAtLW9wdGlvbi1zaXplOiAxLjc1cmVtO1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX3ZhbHVlIHtcbiAgICB3aWR0aDogMi42MjVlbTtcbiAgICBoZWlnaHQ6IDIuNjI1ZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgdGhlbWUoJ2NvbG9ycy5ncmF5LjMwMCcpO1xuICAgIEBhcHBseSByb3VuZGVkO1xuICAgIHBhZGRpbmc6IDAuMjVlbTtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgfVxuXG4gICZfX29wdGlvbnMge1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkOiBhdXRvLWZsb3cgLyByZXBlYXQoNiwgdmFyKC0tb3B0aW9uLXNpemUpKTtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDNweDtcbiAgICBncmlkLXJvdy1nYXA6IDNweDtcbiAgfVxuXG4gICZfX29wdGlvbiB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7XG4gICAgQGFwcGx5IHJvdW5kZWQ7XG4gICAgd2lkdGg6IHZhcigtLW9wdGlvbi1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLW9wdGlvbi1zaXplKTtcbiAgICBjb2xvcjogdGhlbWUoJ2NvbG9ycy5ncmF5LjgwMCcpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogM3B4O1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBib3JkZXItY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS4zMDAnKTtcbiAgICAgIGNvbG9yOiB0aGVtZSgnY29sb3JzLmdyYXkuODAwJyk7XG4gICAgfVxuXG4gICAgJjp2aXNpdGVkLFxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMge1xuICAgICAgY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS44MDAnKTtcbiAgICB9XG5cbiAgICAmLS1ibGFuayB7XG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCAjZmZmIDQ4JSwgdGhlbWUoJ2NvbG9ycy5ncmF5LjMwMCcpIDQ4JSwgdGhlbWUoJ2NvbG9ycy5ncmF5LjMwMCcpIDUyJSwgI2ZmZiA1MyUpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB0aGVtZSgnY29sb3JzLmdyYXkuNDAwJyk7XG4gICAgfVxuICB9XG5cbiAgJl9fdmFsdWUsXG4gICZfX29wdGlvbiB7XG4gICAgPiAqIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cbiAgfVxuXG4gIC5jLWRyb3Bkb3duIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiBpbml0aWFsO1xuICB9XG5cbn1cbiJdfQ== */", ".icon3000 {\n\n display: inline-flex;\n\n justify-content: center;\n\n height: 1em;\n width: 1em;\n vertical-align: -0.125em;\n overflow: visible;\n box-sizing: content-box\n}\n\n .icon3000 svg {\n\n height: 100%;\n\n width: 100%;\n\n pointer-events: none\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vaWNvbl9jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNFOztFQUFBLG9CQUFpQzs7RUFBakMsdUJBQWlDOztFQUVqQyxXQUFXO0VBQ1gsVUFBVTtFQUNWLHdCQUF3QjtFQUN4QixpQkFBaUI7RUFDakI7QUFOaUM7O0VBUy9COztFQUFBLFlBQW9COztFQUFwQixXQUFvQjs7RUFDcEI7QUFEb0IiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9pY29uX2NvbXBvbmVudC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuaWNvbjMwMDAge1xuICBAYXBwbHkgaW5saW5lLWZsZXgganVzdGlmeS1jZW50ZXI7XG5cbiAgaGVpZ2h0OiAxZW07XG4gIHdpZHRoOiAxZW07XG4gIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuXG4gIHN2ZyB7XG4gICAgQGFwcGx5IGgtZnVsbCB3LWZ1bGw7XG4gICAgQGFwcGx5IHBvaW50ZXItZXZlbnRzLW5vbmU7XG4gIH1cbn1cbiJdfQ== */", ".c-label {\n\n display: inline-flex;\n\n align-items: center;\n\n justify-content: center;\n\n padding-left: 0.5rem;\n\n padding-right: 0.5rem;\n\n padding-top: 0.25rem;\n\n padding-bottom: 0.25rem;\n\n border-radius: 0.375rem;\n\n --tw-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05);\n\n --tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color);\n\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n\n font-weight: 500;\n\n line-height: 1 !important;\n\n --tw-border-opacity: 1;\n\n border-color: rgb(161 161 170 / var(--tw-border-opacity, 1));\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(113 113 122 / var(--tw-text-opacity, 1));\n\n cursor: default\n}\n\n .c-label[data-tooltip]:not([data-tooltip=\"\"]) {\n\n cursor: help\n}\n\n .c-label--positive,\n .c-label--green {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(21 128 61 / var(--tw-text-opacity, 1))\n}\n\n .c-label--orange {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(194 65 12 / var(--tw-text-opacity, 1))\n}\n\n .c-label--yellow {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(161 98 7 / var(--tw-text-opacity, 1))\n}\n\n .c-label--blue {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(29 78 216 / var(--tw-text-opacity, 1))\n}\n\n .c-label--purple {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(237 233 254 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(109 40 217 / var(--tw-text-opacity, 1))\n}\n\n .c-label--negative,\n .c-label--red {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(185 28 28 / var(--tw-text-opacity, 1))\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vbGFiZWxfY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDRTs7SUFBQSxvQkFBOEM7O0lBQTlDLG1CQUE4Qzs7SUFBOUMsdUJBQThDOztJQUM5QyxvQkFBZ0I7O0lBQWhCLHFCQUFnQjs7SUFBaEIsb0JBQWdCOztJQUFoQix1QkFBZ0I7O0lBQ2hCLHVCQUFrQzs7SUFBbEMsZ0RBQWtDOztJQUFsQywyREFBa0M7O0lBQWxDLHVHQUFrQzs7SUFDbEMsZ0JBQWdDOztJQUFoQyx5QkFBZ0M7O0lBQ2hDLHNCQUFnRDs7SUFBaEQsNERBQWdEOztJQUFoRCxrQkFBZ0Q7O0lBQWhELDREQUFnRDs7SUFBaEQsb0JBQWdEOztJQUFoRCxtREFBZ0Q7O0lBQ2hEO0FBTDhDOztFQVE1Qzs7SUFBQTtBQUFrQjs7RUFLbEI7OztJQUFBLGtCQUFrQzs7SUFBbEMsNERBQWtDOztJQUFsQyxvQkFBa0M7O0lBQWxDO0FBQWtDOztFQUlsQzs7SUFBQSxrQkFBb0M7O0lBQXBDLDREQUFvQzs7SUFBcEMsb0JBQW9DOztJQUFwQztBQUFvQzs7RUFJcEM7O0lBQUEsa0JBQW9DOztJQUFwQyw0REFBb0M7O0lBQXBDLG9CQUFvQzs7SUFBcEM7QUFBb0M7O0VBSXBDOztJQUFBLGtCQUFnQzs7SUFBaEMsNERBQWdDOztJQUFoQyxvQkFBZ0M7O0lBQWhDO0FBQWdDOztFQUloQzs7SUFBQSxrQkFBb0M7O0lBQXBDLDREQUFvQzs7SUFBcEMsb0JBQW9DOztJQUFwQztBQUFvQzs7RUFLcEM7OztJQUFBLGtCQUE4Qjs7SUFBOUIsNERBQThCOztJQUE5QixvQkFBOEI7O0lBQTlCO0FBQThCIiwiZmlsZSI6Ii4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vbGFiZWxfY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jLWxhYmVsIHtcbiAgQGFwcGx5IGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcjtcbiAgQGFwcGx5IHB4LTIgcHktMTtcbiAgQGFwcGx5IHNoYWRvdy1ib3JkZXIteHMgcm91bmRlZC1tZDtcbiAgQGFwcGx5IGZvbnQtbWVkaXVtICFsZWFkaW5nLW5vbmU7XG4gIEBhcHBseSBiZy1ncmF5LTEwMCBib3JkZXItZ3JheS00MDAgdGV4dC1ncmF5LTUwMDtcbiAgQGFwcGx5IGN1cnNvci1kZWZhdWx0O1xuXG4gICZbZGF0YS10b29sdGlwXTpub3QoW2RhdGEtdG9vbHRpcD1cIlwiXSkge1xuICAgIEBhcHBseSBjdXJzb3ItaGVscDtcbiAgfVxuXG4gICYtLXBvc2l0aXZlLFxuICAmLS1ncmVlbiB7XG4gICAgQGFwcGx5IGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTcwMDtcbiAgfVxuXG4gICYtLW9yYW5nZSB7XG4gICAgQGFwcGx5IGJnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtNzAwO1xuICB9XG5cbiAgJi0teWVsbG93IHtcbiAgICBAYXBwbHkgYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy03MDA7XG4gIH1cblxuICAmLS1ibHVlIHtcbiAgICBAYXBwbHkgYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTcwMDtcbiAgfVxuXG4gICYtLXB1cnBsZSB7XG4gICAgQGFwcGx5IGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtNzAwO1xuICB9XG5cbiAgJi0tbmVnYXRpdmUsXG4gICYtLXJlZCB7XG4gICAgQGFwcGx5IGJnLXJlZC0xMDAgdGV4dC1yZWQtNzAwO1xuICB9XG59XG4iXX0= */", ".c-modal {\n transition: opacity 0.25s ease;\n z-index: calc(var(--z-index-top) + 1);\n display: none;\n align-items: flex-start;\n justify-content: center;\n position: fixed;\n inset: 0px;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity, 1));\n --tw-bg-opacity: 0.4;\n overflow: auto;\n}\n\n .c-modal__inner {\n transition: opacity 0.25s ease;\n max-width: 850px;\n max-height: 95%;\n position: relative;\n overflow: visible;\n padding: 0px;\n margin-top: 0.5rem;\n\n }\n\n @media (min-width: 1024px) {\n\n .c-modal__inner {\n margin-top: 6rem;\n }\n}\n\n @media (max-width: 767px) {\n\n .c-modal__inner {\n width: 97%;\n }\n}\n\n .c-modal__content {\n border-radius: 0.5rem;\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n padding: 1rem;\n}\n\n @media (min-width: 1024px) {\n\n .c-modal__content {\n padding: 1.5rem;\n }\n}\n\n .c-modal__content {\n overflow: visible;\n}\n\n @media (max-width: 767px) {\n\n .c-modal__content {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n}\n\n .c-modal__content h1 {\n margin-bottom: 1rem;\n font-size: 1.5rem;\n line-height: 2rem;\n font-weight: 600;\n}\n\n @media (max-width: 767px) {\n\n .c-modal__content h1 {\n font-size: 1.125rem;\n line-height: 1.75rem;\n }\n}\n\n .c-modal__title {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-top: -1rem;\n margin-left: -1rem;\n margin-right: -1rem;\n}\n\n @media (min-width: 1024px) {\n\n .c-modal__title {\n margin-top: -1.5rem;\n margin-left: -1.5rem;\n margin-right: -1.5rem;\n }\n}\n\n .c-modal__title {\n margin-bottom: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n padding-right: 1rem;\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n --tw-bg-opacity: 1;\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n text-align: center;\n font-weight: 600;\n --tw-text-opacity: 1;\n color: rgb(82 82 91 / var(--tw-text-opacity, 1));\n border-bottom-width: 1px;\n --tw-border-opacity: 1;\n border-color: rgb(212 212 216 / var(--tw-border-opacity, 1));\n position: relative;\n}\n\n .c-modal__actions,\n .c-modal .c-modal__content .form-actions {\n display: flex;\n width: auto;\n margin-bottom: -1rem;\n margin-left: -1rem;\n margin-right: -1rem;\n}\n\n @media (min-width: 1024px) {\n\n .c-modal__actions,\n .c-modal .c-modal__content .form-actions {\n margin-bottom: -1.5rem;\n margin-left: -1.5rem;\n margin-right: -1.5rem;\n }\n}\n\n .c-modal__actions,\n .c-modal .c-modal__content .form-actions {\n margin-top: 2rem;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n @media (min-width: 1024px) {\n\n .c-modal__actions,\n .c-modal .c-modal__content .form-actions {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n }\n}\n\n .c-modal__actions,\n .c-modal .c-modal__content .form-actions {\n border-bottom-right-radius: 0.5rem;\n border-bottom-left-radius: 0.5rem;\n --tw-bg-opacity: 1;\n background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1));\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vbW9kYWxfY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLDhCQUE4QjtFQUM5QixxQ0FBcUM7RUFFckMsYUFBYTtFQUNiLHVCQUFpQztFQUFqQyx1QkFBaUM7RUFDakMsZUFBb0I7RUFBcEIsVUFBb0I7RUFDcEIsc0RBQTZCO0VBQTdCLG9CQUE2QjtFQUM3QixjQUFvQjtBQWtEdEI7O0VBaERFO0lBQ0UsOEJBQThCO0lBQzlCLGdCQUFnQjtJQUNoQixlQUFlO0lBRWYsa0JBQWU7SUFDZixpQkFBdUI7SUFDdkIsWUFBVTtJQUNWLGtCQUFvQjs7RUFHdEI7O0VBSEU7O0VBQUE7SUFBQTtFQUFvQjtBQUFBOztFQUNwQjs7RUFBQTtJQUFBO0VBQWtCO0FBQUE7O0VBS2xCO0VBQUEscUJBQTJCO0VBQTNCLGdGQUEyQjtFQUEzQixvR0FBMkI7RUFBM0IsdUdBQTJCO0VBQzNCLGtCQUFlO0VBQWYsNERBQWU7RUFDZjtBQUYyQjs7RUFFM0I7O0VBQUE7SUFBQTtFQUFpQjtBQUFBOztFQUNqQjtFQUFBO0FBQXVCOztFQUN2Qjs7RUFBQTtJQUFBLG1CQUFpQjtJQUFqQjtFQUFpQjtBQUFBOztFQUdmO0VBQUEsbUJBQVc7RUFDWCxpQkFBd0M7RUFBeEMsaUJBQXdDO0VBQXhDO0FBRFc7O0VBQ1g7O0VBQUE7SUFBQSxtQkFBd0M7SUFBeEM7RUFBd0M7QUFBQTs7RUFLMUM7RUFBQSxhQUF1QztFQUF2QyxtQkFBdUM7RUFBdkMsdUJBQXVDO0VBQ3ZDLGlCQUFtRDtFQUFuRCxrQkFBbUQ7RUFBbkQ7QUFEdUM7O0VBQ3ZDOztFQUFBO0lBQUEsbUJBQW1EO0lBQW5ELG9CQUFtRDtJQUFuRDtFQUFtRDtBQUFBOztFQUNuRDtFQUFBLG1CQUFXO0VBQ1gsbUJBQWdCO0VBQWhCLHNCQUFnQjtFQUFoQixrQkFBZ0I7RUFBaEIsbUJBQWdCO0VBQ2hCLDhCQUFtQjtFQUFuQiwrQkFBbUI7RUFDbkIsa0JBQWtCO0VBQWxCLDREQUFrQjtFQUNsQixrQkFBOEM7RUFBOUMsZ0JBQThDO0VBQTlDLG9CQUE4QztFQUE5QyxnREFBOEM7RUFDOUMsd0JBQStCO0VBQS9CLHNCQUErQjtFQUEvQiw0REFBK0I7RUFDL0I7QUFOVzs7RUFXWDs7RUFBQSxhQUFXO0VBQ1gsV0FBYTtFQUNiLG9CQUFtRDtFQUFuRCxrQkFBbUQ7RUFBbkQ7QUFGVzs7RUFFWDs7RUFBQTs7SUFBQSxzQkFBbUQ7SUFBbkQsb0JBQW1EO0lBQW5EO0VBQW1EO0FBQUE7O0VBQ25EOztFQUFBLGdCQUFXO0VBQ1gsb0JBQXdCO0VBQXhCLHVCQUF3QjtFQUF4QixrQkFBd0I7RUFBeEI7QUFEVzs7RUFDWDs7RUFBQTs7SUFBQSxvQkFBd0I7SUFBeEI7RUFBd0I7QUFBQTs7RUFDeEI7O0VBQUEsa0NBQW1CO0VBQW5CLGlDQUFtQjtFQUNuQixrQkFBaUI7RUFBakI7QUFEbUIiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9tb2RhbF9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmMtbW9kYWwge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzIGVhc2U7XG4gIHotaW5kZXg6IGNhbGModmFyKC0tei1pbmRleC10b3ApICsgMSk7XG5cbiAgQGFwcGx5IGhpZGRlbjtcbiAgQGFwcGx5IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0O1xuICBAYXBwbHkgZml4ZWQgaW5zZXQtMDtcbiAgQGFwcGx5IGJnLWJsYWNrIGJnLW9wYWNpdHktNDA7XG4gIEBhcHBseSBvdmVyZmxvdy1hdXRvO1xuXG4gICZfX2lubmVyIHtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzIGVhc2U7XG4gICAgbWF4LXdpZHRoOiA4NTBweDtcbiAgICBtYXgtaGVpZ2h0OiA5NSU7XG5cbiAgICBAYXBwbHkgcmVsYXRpdmU7XG4gICAgQGFwcGx5IG92ZXJmbG93LXZpc2libGU7XG4gICAgQGFwcGx5IHAtMDtcbiAgICBAYXBwbHkgbXQtMiBsZzptdC0yNDtcbiAgICBAYXBwbHkgc206dy1wY3QtOTc7XG5cbiAgfVxuXG4gICZfX2NvbnRlbnQge1xuICAgIEBhcHBseSByb3VuZGVkLWxnIHNoYWRvdy14bDtcbiAgICBAYXBwbHkgYmctd2hpdGU7XG4gICAgQGFwcGx5IHAtNCBsZzpwLTY7XG4gICAgQGFwcGx5IG92ZXJmbG93LXZpc2libGU7XG4gICAgQGFwcGx5IHNtOnRleHQtc207XG5cbiAgICBoMSB7XG4gICAgICBAYXBwbHkgbWItNDtcbiAgICAgIEBhcHBseSB0ZXh0LTJ4bCBmb250LXNlbWlib2xkIHNtOnRleHQtbGc7XG4gICAgfVxuICB9XG5cbiAgJl9fdGl0bGUge1xuICAgIEBhcHBseSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlcjtcbiAgICBAYXBwbHkgLW10LTQgLW1sLTQgLW1yLTQgbGc6LW10LTYgbGc6LW1sLTYgbGc6LW1yLTY7XG4gICAgQGFwcGx5IG1iLTQ7XG4gICAgQGFwcGx5IHB5LTIgcHgtNDtcbiAgICBAYXBwbHkgcm91bmRlZC10LWxnO1xuICAgIEBhcHBseSBiZy1ncmF5LTEwMDtcbiAgICBAYXBwbHkgdGV4dC1ncmF5LTYwMCB0ZXh0LWNlbnRlciBmb250LXNlbWlib2xkO1xuICAgIEBhcHBseSBib3JkZXItYiBib3JkZXItZ3JheS0zMDA7XG4gICAgQGFwcGx5IHJlbGF0aXZlO1xuICB9XG5cbiAgJl9fYWN0aW9ucyxcbiAgLmMtbW9kYWxfX2NvbnRlbnQgLmZvcm0tYWN0aW9ucyB7XG4gICAgQGFwcGx5IGZsZXg7XG4gICAgQGFwcGx5IHctYXV0bztcbiAgICBAYXBwbHkgLW1iLTQgLW1sLTQgLW1yLTQgbGc6LW1iLTYgbGc6LW1sLTYgbGc6LW1yLTY7XG4gICAgQGFwcGx5IG10LTg7XG4gICAgQGFwcGx5IHB5LTMgcHgtNCBsZzpweC02O1xuICAgIEBhcHBseSByb3VuZGVkLWItbGc7XG4gICAgQGFwcGx5IGJnLWdyYXktNTA7XG4gIH1cbn1cbiJdfQ== */", ".c-multi-select {\n position: relative;\n cursor: text;\n width: 100%;\n}\n\n .c-multi-select__list {\n border-radius: 0.375rem;\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: rgb(212 212 216 / var(--tw-border-opacity, 1));\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n padding: var(--input-padding);\n}\n\n .c-multi-select__list.disabled {\n cursor: not-allowed;\n --tw-bg-opacity: 1;\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n --tw-text-opacity: 1;\n color: rgb(113 113 122 / var(--tw-text-opacity, 1));\n}\n\n .c-multi-select__list {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.25rem;\n row-gap: 0.75rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n .c-multi-select__list[data-focus] {\n --tw-border-opacity: 1;\n border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n --tw-ring-opacity: 0.5;\n}\n\n .c-multi-select.invalid .c-multi-select__list {\n /* make sure this matches with the invalid styling in forms.css */\n --tw-border-opacity: 1 !important;\n border-color: rgb(248 113 113 / var(--tw-border-opacity, 1)) !important;\n --tw-text-opacity: 1 !important;\n color: rgb(127 29 29 / var(--tw-text-opacity, 1)) !important;\n }\n\n .c-multi-select.invalid .c-multi-select__list::placeholder {\n --tw-placeholder-opacity: 1 !important;\n color: rgb(252 165 165 / var(--tw-placeholder-opacity, 1)) !important;\n}\n\n .c-multi-select.invalid .c-multi-select__list:focus {\n --tw-border-opacity: 1 !important;\n border-color: rgb(239 68 68 / var(--tw-border-opacity, 1)) !important;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1)) !important;\n --tw-ring-opacity: 0.5 !important;\n}\n\n .c-multi-select [data-list-entry='item'] {\n border-radius: 0.75rem;\n --tw-bg-opacity: 1;\n background-color: rgb(228 228 231 / var(--tw-bg-opacity, 1));\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n font-size: 0.75rem;\n line-height: 1rem;\n --tw-text-opacity: 1;\n color: rgb(39 39 42 / var(--tw-text-opacity, 1));\n overflow: hidden;\n cursor: auto;\n margin-top: -0.25rem;\n margin-bottom: -0.25rem;\n display: flex;\n align-items: center;\n}\n\n .c-multi-select [data-list-entry='item'] span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n .c-multi-select [data-list-entry='item'] a {\n margin-left: 0.25rem;\n flex-shrink: 0;\n pointer-events: auto;\n cursor: pointer;\n}\n\n .c-multi-select [data-list-entry='item'] a::after {\n height: 0.75rem;\n width: 0.75rem;\n opacity: 0.5;\n /* FontAwesome xmark */\n background-image: url(\"data:image/svg+xml;utf8,\");\n background-position: center;\n background-repeat: no-repeat;\n content: \"\";\n display: block;\n}\n\n @media print {\n\n .c-multi-select [data-list-entry='item'] a::after {\n display: none;\n }\n}\n\n .c-multi-select [data-list-entry='item'] a:hover::after {\n opacity: 1;\n}\n\n .c-multi-select [data-list-entry='search'] input {\n margin: 0px;\n border-radius: 0px;\n padding: 0px;\n}\n\n .c-multi-select [data-list-entry='search'] input, .c-multi-select [data-list-entry='search'] input:focus {\n border-width: 0px;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n outline: 2px solid transparent;\n outline-offset: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n .c-multi-select__dropdown {\n background: white;\n border-radius: 0.25rem;\n box-shadow: var(--dropdown-box-shadow);\n display: none;\n margin: 2px 0 0 0;\n padding: 0;\n position: absolute;\n width: 100%;\n z-index: var(--z-index-top);\n font-size: 1rem;\n overflow: hidden;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vbXVsdGlfc2VsZWN0X2NvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxrQkFBa0I7RUFFbEIsWUFBa0I7RUFDbEIsV0FBYTtBQXNGZjs7RUFuRkk7RUFBQSx1QkFBMkQ7RUFBM0QsaUJBQTJEO0VBQTNELHNCQUEyRDtFQUEzRCw0REFBMkQ7RUFBM0Qsa0JBQTJEO0VBQTNELDREQUEyRDtFQUEzRCwwQ0FBMkQ7RUFBM0QsdURBQTJEO0VBQTNELHVHQUEyRDtJQUMzRDtBQUQyRDs7RUFJekQ7RUFBQSxtQkFBbUQ7RUFBbkQsa0JBQW1EO0VBQW5ELDREQUFtRDtFQUFuRCxvQkFBbUQ7RUFBbkQ7QUFBbUQ7O0VBR3JEO0VBQUEsYUFBZ0Q7RUFBaEQsZUFBZ0Q7RUFBaEQsbUJBQWdEO0VBQWhELFlBQWdEO0VBQWhELGdCQUFnRDtFQUNoRCxtQkFBYztFQUFkO0FBRGdEOztFQUk5QztFQUFBLHNCQUFzQjtFQUF0QiwyREFBc0I7RUFDdEIsMkdBQTJDO0VBQTNDLHlHQUEyQztFQUEzQyw0RkFBMkM7RUFBM0MsNERBQTJDO0VBQTNDO0FBRHNCOztFQUsxQjtJQUNFLGlFQUFpRTtJQUNqRSxpQ0FBZ0M7SUFBaEMsdUVBQWdDO0lBQ2hDLCtCQUFrRDtJQUFsRCw0REFBa0Q7RUFHcEQ7O0VBSEU7RUFBQSxzQ0FBa0Q7RUFBbEQ7QUFBa0Q7O0VBQ2xEO0VBQUEsaUNBQXNDO0VBQXRDLHFFQUFzQztFQUN0QyxzRUFBMEQ7RUFBMUQ7QUFEc0M7O0VBS3RDO0VBQUEsc0JBQTZEO0VBQTdELGtCQUE2RDtFQUE3RCw0REFBNkQ7RUFBN0Qsb0JBQTZEO0VBQTdELHFCQUE2RDtFQUE3RCxvQkFBNkQ7RUFBN0QsdUJBQTZEO0VBQTdELGtCQUE2RDtFQUE3RCxpQkFBNkQ7RUFBN0Qsb0JBQTZEO0VBQTdELGdEQUE2RDtFQUM3RCxnQkFBc0I7RUFDdEIsWUFBa0I7RUFDbEIsb0JBQVk7RUFBWix1QkFBWTtFQUVaLGFBQXdCO0VBQXhCO0FBTDZEOztFQVEzRDtFQUFBLGdCQUFlO0VBQWYsdUJBQWU7RUFBZjtBQUFlOztFQUlmO0VBQUEsb0JBQW9CO0VBQXBCLGNBQW9CO0VBQ3BCLG9CQUEwQjtFQUMxQjtBQUZvQjs7RUFLbEI7RUFBQSxlQUFjO0VBQWQsY0FBYztFQUNkLFlBQWlCO1FBQ2pCLHNCQUFzQjtRQUN0QixrWUFBa1k7UUFDbFksMkJBQTJCO1FBQzNCLDRCQUE0QjtRQUM1QixXQUFXO1FBQ1g7QUFQYzs7RUFTZDs7RUFBQTtJQUFBO0VBQW1CO0FBQUE7O0VBR2pCO0VBQUE7QUFBa0I7O0VBUXRCO0VBQUEsV0FBMkI7RUFBM0Isa0JBQTJCO0VBQTNCO0FBQTJCOztFQUd6QjtFQUFBLGlCQUErQztFQUEvQyxzQkFBK0M7RUFBL0MsOEJBQStDO0VBQS9DLHVHQUErQztFQUEvQyw4QkFBK0M7RUFBL0MsbUJBQStDO0VBQS9DLDJHQUErQztFQUEvQyx5R0FBK0M7RUFBL0M7QUFBK0M7O0VBS3JEO0lBQ0UsaUJBQWlCO0lBQ2pCLHNCQUFjO0lBQ2Qsc0NBQXNDO0lBQ3RDLGFBQWE7SUFDYixpQkFBaUI7SUFDakIsVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsMkJBQTJCO0lBQzNCLGVBQWU7SUFDZixnQkFBZ0I7RUFDbEIiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9tdWx0aV9zZWxlY3RfY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jLW11bHRpLXNlbGVjdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBAYXBwbHkgY3Vyc29yLXRleHQ7XG4gIEBhcHBseSB3LWZ1bGw7XG5cbiAgJl9fbGlzdCB7XG4gICAgQGFwcGx5IGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCBzaGFkb3ctc20gYmctd2hpdGU7XG4gICAgcGFkZGluZzogdmFyKC0taW5wdXQtcGFkZGluZyk7XG5cbiAgICAmLmRpc2FibGVkIHtcbiAgICAgIEBhcHBseSBiZy1ncmF5LTEwMCB0ZXh0LWdyYXktNTAwIGN1cnNvci1ub3QtYWxsb3dlZDtcbiAgICB9XG5cbiAgICBAYXBwbHkgZmxleCBmbGV4LXdyYXAgZ2FwLTEgaXRlbXMtY2VudGVyIGdhcC15LTM7XG4gICAgQGFwcGx5IHRleHQtc207XG5cbiAgICAmW2RhdGEtZm9jdXNdIHtcbiAgICAgIEBhcHBseSBib3JkZXItYmx1ZS01MDA7XG4gICAgICBAYXBwbHkgcmluZy0yIHJpbmctYmx1ZS01MDAgcmluZy1vcGFjaXR5LTUwO1xuICAgIH1cbiAgfVxuXG4gICYuaW52YWxpZCAmX19saXN0IHtcbiAgICAvKiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzIHdpdGggdGhlIGludmFsaWQgc3R5bGluZyBpbiBmb3Jtcy5jc3MgKi9cbiAgICBAYXBwbHkgYm9yZGVyLXJlZC00MDAgIWltcG9ydGFudDtcbiAgICBAYXBwbHkgdGV4dC1yZWQtOTAwIHBsYWNlaG9sZGVyLXJlZC0zMDAgIWltcG9ydGFudDtcbiAgICBAYXBwbHkgZm9jdXM6Ym9yZGVyLXJlZC01MDAgIWltcG9ydGFudDtcbiAgICBAYXBwbHkgZm9jdXM6cmluZy1yZWQtNTAwIGZvY3VzOnJpbmctb3BhY2l0eS01MCAhaW1wb3J0YW50O1xuICB9XG5cbiAgW2RhdGEtbGlzdC1lbnRyeT0naXRlbSddIHtcbiAgICBAYXBwbHkgYmctZ3JheS0yMDAgdGV4dC1ncmF5LTgwMCByb3VuZGVkLXhsIHB4LTIgcHktMSB0ZXh0LXhzO1xuICAgIEBhcHBseSBvdmVyZmxvdy1oaWRkZW47XG4gICAgQGFwcGx5IGN1cnNvci1hdXRvO1xuICAgIEBhcHBseSAtbXktMTtcblxuICAgIEBhcHBseSBmbGV4IGl0ZW1zLWNlbnRlcjtcblxuICAgIHNwYW4ge1xuICAgICAgQGFwcGx5IHRydW5jYXRlO1xuICAgIH1cblxuICAgIGEge1xuICAgICAgQGFwcGx5IHNocmluay0wIG1sLTE7XG4gICAgICBAYXBwbHkgcG9pbnRlci1ldmVudHMtYXV0bztcbiAgICAgIEBhcHBseSBjdXJzb3ItcG9pbnRlcjtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAYXBwbHkgdy0zIGgtMztcbiAgICAgICAgQGFwcGx5IG9wYWNpdHktNTA7XG4gICAgICAgIC8qIEZvbnRBd2Vzb21lIHhtYXJrICovXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzg0IDUxMic+PHBhdGggZmlsbD0nY3VycmVudENvbG9yJyBkPSdNMzQ1IDEzN2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xMTkgMTE5TDczIDEwM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxMTkgMTE5TDM5IDM3NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDExOS0xMTlMMzExIDQwOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTExOS0xMTlMMzQ1IDEzN3onLz48L3N2Zz5cIik7XG4gICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgY29udGVudDogXCJcIjtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgQGFwcGx5IHByaW50OmhpZGRlbjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBAYXBwbHkgb3BhY2l0eS0xMDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBbZGF0YS1saXN0LWVudHJ5PSdzZWFyY2gnXSB7XG4gICAgaW5wdXQge1xuICAgICAgQGFwcGx5IHAtMCBtLTAgcm91bmRlZC1ub25lO1xuXG4gICAgICAmLCAmOmZvY3VzIHtcbiAgICAgICAgQGFwcGx5IGJvcmRlci0wIHNoYWRvdy1ub25lIG91dGxpbmUtbm9uZSByaW5nLTA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9fZHJvcGRvd24ge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIEBhcHBseSByb3VuZGVkO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLWRyb3Bkb3duLWJveC1zaGFkb3cpO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgbWFyZ2luOiAycHggMCAwIDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgei1pbmRleDogdmFyKC0tei1pbmRleC10b3ApO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG59XG4iXX0= */", ".c-notice {\n\n display: flex;\n\n align-items: center;\n\n padding: 1rem;\n\n border-radius: 0.5rem;\n\n font-size: 0.875rem;\n\n line-height: 1.25rem;\n\n font-weight: 500;\n\n cursor: default\n}\n\n .c-notice p {\n\n font-size: 0.875rem;\n\n line-height: 1.25rem\n}\n\n .c-notice a {\n\n font-weight: 600;\n\n text-decoration-line: underline\n}\n\n .c-notice .icon3000 {\n\n min-height: 1rem;\n\n min-width: 1rem;\n\n margin-right: 0.5rem;\n\n margin-top: 2px;\n\n font-size: 1rem;\n\n line-height: 1.25rem\n}\n\n .c-notice--notice {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(29 78 216 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--notice a {\n\n --tw-text-opacity: 1;\n\n color: rgb(30 64 175 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--notice a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(30 58 138 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--notice .icon3000 {\n\n --tw-text-opacity: 1;\n\n color: rgb(59 130 246 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--alert {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(254 249 195 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(161 98 7 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--alert a {\n\n --tw-text-opacity: 1;\n\n color: rgb(133 77 14 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--alert a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(113 63 18 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--alert .icon3000 {\n\n --tw-text-opacity: 1;\n\n color: rgb(234 179 8 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--error {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(220 38 38 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--error a {\n\n --tw-text-opacity: 1;\n\n color: rgb(185 28 28 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--error a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(153 27 27 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--error .icon3000 {\n\n --tw-text-opacity: 1;\n\n color: rgb(248 113 113 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--success {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(21 128 61 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--success a {\n\n --tw-text-opacity: 1;\n\n color: rgb(21 128 61 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--success a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(22 101 52 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--success .icon3000 {\n\n --tw-text-opacity: 1;\n\n color: rgb(74 222 128 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--neutral {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(82 82 91 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--neutral a {\n\n --tw-text-opacity: 1;\n\n color: rgb(82 82 91 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--neutral a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(63 63 70 / var(--tw-text-opacity, 1))\n}\n\n .c-notice--neutral .icon3000 {\n\n --tw-text-opacity: 1;\n\n color: rgb(113 113 122 / var(--tw-text-opacity, 1))\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vbm90aWNlX2NvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0U7O0lBQUEsYUFBd0I7O0lBQXhCLG1CQUF3Qjs7SUFDeEIsYUFBVTs7SUFDVixxQkFBaUI7O0lBQ2pCLG1CQUEwQjs7SUFBMUIsb0JBQTBCOztJQUExQixnQkFBMEI7O0lBQzFCO0FBSndCOztFQU90Qjs7SUFBQSxtQkFBYzs7SUFBZDtBQUFjOztFQUlkOztJQUFBLGdCQUE4Qjs7SUFBOUI7QUFBOEI7O0VBSTlCOztJQUFBLGdCQUFzQjs7SUFBdEIsZUFBc0I7O0lBQ3RCLG9CQUFvQjs7SUFBcEIsZUFBb0I7O0lBQ3BCLGVBQTBCOztJQUExQjtBQUZzQjs7RUFNdEI7O0lBQUEsa0JBQWlCOztJQUFqQiw0REFBaUI7O0lBQ2pCLG9CQUFvQjs7SUFBcEI7QUFEaUI7O0VBSWY7O0lBQUEsb0JBQW9COztJQUFwQjtBQUFvQjs7RUFHbEI7O0lBQUEsb0JBQW9COztJQUFwQjtBQUFvQjs7RUFLdEI7O0lBQUEsb0JBQW9COztJQUFwQjtBQUFvQjs7RUFLdEI7O0lBQUEsa0JBQW9COztJQUFwQiw0REFBb0I7O0lBQ3BCLG9CQUFzQjs7SUFBdEI7QUFEb0I7O0VBSWxCOztJQUFBLG9CQUFzQjs7SUFBdEI7QUFBc0I7O0VBR3BCOztJQUFBLG9CQUFzQjs7SUFBdEI7QUFBc0I7O0VBS3hCOztJQUFBLG9CQUFzQjs7SUFBdEI7QUFBc0I7O0VBS3hCOztJQUFBLGtCQUFpQjs7SUFBakIsNERBQWlCOztJQUNqQixvQkFBbUI7O0lBQW5CO0FBRGlCOztFQUlmOztJQUFBLG9CQUFtQjs7SUFBbkI7QUFBbUI7O0VBR2pCOztJQUFBLG9CQUFtQjs7SUFBbkI7QUFBbUI7O0VBS3JCOztJQUFBLG9CQUFtQjs7SUFBbkI7QUFBbUI7O0VBTXJCOztJQUFBLGtCQUFtQjs7SUFBbkIsNERBQW1COztJQUNuQixvQkFBcUI7O0lBQXJCO0FBRG1COztFQUlqQjs7SUFBQSxvQkFBcUI7O0lBQXJCO0FBQXFCOztFQUduQjs7SUFBQSxvQkFBcUI7O0lBQXJCO0FBQXFCOztFQUt2Qjs7SUFBQSxvQkFBcUI7O0lBQXJCO0FBQXFCOztFQUt2Qjs7SUFBQSxrQkFBa0I7O0lBQWxCLDREQUFrQjs7SUFDbEIsb0JBQW9COztJQUFwQjtBQURrQjs7RUFJaEI7O0lBQUEsb0JBQW9COztJQUFwQjtBQUFvQjs7RUFHbEI7O0lBQUEsb0JBQW9COztJQUFwQjtBQUFvQjs7RUFLdEI7O0lBQUEsb0JBQW9COztJQUFwQjtBQUFvQiIsImZpbGUiOiIuLi9waXN0YWNoaW8vYXBwL2NvbXBvbmVudHMvcGlzdGFjaGlvL25vdGljZV9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmMtbm90aWNlIHtcbiAgQGFwcGx5IGZsZXggaXRlbXMtY2VudGVyO1xuICBAYXBwbHkgcC00O1xuICBAYXBwbHkgcm91bmRlZC1sZztcbiAgQGFwcGx5IHRleHQtc20gZm9udC1tZWRpdW07XG4gIEBhcHBseSBjdXJzb3ItZGVmYXVsdDtcblxuICBwIHtcbiAgICBAYXBwbHkgdGV4dC1zbTtcbiAgfVxuXG4gIGEge1xuICAgIEBhcHBseSB1bmRlcmxpbmUgZm9udC1zZW1pYm9sZDtcbiAgfVxuXG4gIC5pY29uMzAwMCB7XG4gICAgQGFwcGx5IG1pbi1oLTQgbWluLXctNDtcbiAgICBAYXBwbHkgbXItMiBtdC1bMnB4XTtcbiAgICBAYXBwbHkgdGV4dC1iYXNlIGxlYWRpbmctNTtcbiAgfVxuXG4gICYtLW5vdGljZSB7XG4gICAgQGFwcGx5IGJnLWJsdWUtNTA7XG4gICAgQGFwcGx5IHRleHQtYmx1ZS03MDA7XG5cbiAgICBhIHtcbiAgICAgIEBhcHBseSB0ZXh0LWJsdWUtODAwO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgQGFwcGx5IHRleHQtYmx1ZS05MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmljb24zMDAwIHtcbiAgICAgIEBhcHBseSB0ZXh0LWJsdWUtNTAwO1xuICAgIH1cbiAgfVxuXG4gICYtLWFsZXJ0IHtcbiAgICBAYXBwbHkgYmcteWVsbG93LTEwMDtcbiAgICBAYXBwbHkgdGV4dC15ZWxsb3ctNzAwO1xuXG4gICAgYSB7XG4gICAgICBAYXBwbHkgdGV4dC15ZWxsb3ctODAwO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgQGFwcGx5IHRleHQteWVsbG93LTkwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuaWNvbjMwMDAge1xuICAgICAgQGFwcGx5IHRleHQteWVsbG93LTUwMDtcbiAgICB9XG4gIH1cblxuICAmLS1lcnJvciB7XG4gICAgQGFwcGx5IGJnLXJlZC0xMDA7XG4gICAgQGFwcGx5IHRleHQtcmVkLTYwMDtcblxuICAgIGEge1xuICAgICAgQGFwcGx5IHRleHQtcmVkLTcwMDtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIEBhcHBseSB0ZXh0LXJlZC04MDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmljb24zMDAwIHtcbiAgICAgIEBhcHBseSB0ZXh0LXJlZC00MDA7XG4gICAgfVxuICB9XG5cblxuICAmLS1zdWNjZXNzIHtcbiAgICBAYXBwbHkgYmctZ3JlZW4tMTAwO1xuICAgIEBhcHBseSB0ZXh0LWdyZWVuLTcwMDtcblxuICAgIGEge1xuICAgICAgQGFwcGx5IHRleHQtZ3JlZW4tNzAwO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgQGFwcGx5IHRleHQtZ3JlZW4tODAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pY29uMzAwMCB7XG4gICAgICBAYXBwbHkgdGV4dC1ncmVlbi00MDA7XG4gICAgfVxuICB9XG5cbiAgJi0tbmV1dHJhbCB7XG4gICAgQGFwcGx5IGJnLWdyYXktMTAwO1xuICAgIEBhcHBseSB0ZXh0LWdyYXktNjAwO1xuXG4gICAgYSB7XG4gICAgICBAYXBwbHkgdGV4dC1ncmF5LTYwMDtcblxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIEBhcHBseSB0ZXh0LWdyYXktNzAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5pY29uMzAwMCB7XG4gICAgICBAYXBwbHkgdGV4dC1ncmF5LTUwMDtcbiAgICB9XG4gIH1cbn1cbiJdfQ== */", "\n.c-popover {\n max-width: 600px;\n overflow: initial;\n}\n\n .c-popover__title {\n padding: 0.5rem;\n border-top-left-radius: 0.5rem;\n border-top-right-radius: 0.5rem;\n --tw-bg-opacity: 1;\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n border-bottom-width: 1px;\n --tw-border-opacity: 1;\n border-color: rgb(212 212 216 / var(--tw-border-opacity, 1));\n text-align: center;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 600;\n --tw-text-opacity: 1;\n color: rgb(82 82 91 / var(--tw-text-opacity, 1));\n}\n\n .c-popover__content {\n overflow: hidden;\n\n min-width: 150px;\n}\n\n .c-popover__loading {\n padding: 0.5rem;\n text-align: center;\n\n min-width: 150px;\n}\n\n @media (max-width: 767px) {\n\n .c-popover {\n top: unset !important;\n left: 0px !important;\n right: 0px !important;\n bottom: 0px !important;\n margin: 0px !important;\n position: fixed !important;\n transform: none !important;\n border-width: 0px;\n border-top-width: 2px;\n border-radius: 0px;\n }\n\n .c-popover[data-placement=\"top\"],\n .c-popover[data-placement=\"bottom\"] {\n top: unset !important;\n }\n\n .c-popover[data-placement=\"left\"],\n .c-popover[data-placement=\"right\"] {\n left: 0px !important;\n }\n\n .c-popover [data-arrow] {\n display: none !important;\n }\n\n .c-popover .c-button {\n width: 100%;\n max-width: 24rem;\n }\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vcG9wb3ZlcnNfY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0E7RUFDRSxnQkFBZ0I7RUFDaEIsaUJBQWlCO0FBbURuQjs7RUFoREk7RUFBQSxlQUFVO0VBQ1YsOEJBQStCO0VBQS9CLCtCQUErQjtFQUEvQixrQkFBK0I7RUFBL0IsNERBQStCO0VBQy9CLHdCQUErQjtFQUEvQixzQkFBK0I7RUFBL0IsNERBQStCO0VBQy9CLGtCQUFzRDtFQUF0RCxrQkFBc0Q7RUFBdEQsaUJBQXNEO0VBQXRELGdCQUFzRDtFQUF0RCxvQkFBc0Q7RUFBdEQ7QUFIVTs7RUFPVjtFQUFBLGdCQUFzQjs7SUFFdEI7QUFGc0I7O0VBTXRCO0VBQUEsZUFBVTtFQUNWLGtCQUFrQjs7SUFFbEI7QUFIVTs7RUFPWjs7RUFBQTtJQUFBLHFCQUE4QjtJQUM5QixvQkFBMkI7SUFDM0IscUJBQTRCO0lBQzVCLHNCQUE2QjtJQUM3QixzQkFBd0I7SUFDeEIsMEJBQTBCO0lBQzFCLDBCQUFtQztJQUNuQyxpQkFBZ0M7SUFBaEMscUJBQWdDO0lBQ2hDO0VBUjhCOztFQWE1Qjs7SUFBQTtFQUE4Qjs7RUFLOUI7O0lBQUE7RUFBMkI7O0VBSTNCO0lBQUE7RUFBMkI7O0VBSTNCO0lBQUEsV0FBNEI7SUFBNUI7RUFBNEI7QUExQkEiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9wb3BvdmVyc19jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiXG4uYy1wb3BvdmVyIHtcbiAgbWF4LXdpZHRoOiA2MDBweDtcbiAgb3ZlcmZsb3c6IGluaXRpYWw7XG5cbiAgJl9fdGl0bGUge1xuICAgIEBhcHBseSBwLTI7XG4gICAgQGFwcGx5IGJnLWdyYXktMTAwIHJvdW5kZWQtdC1sZztcbiAgICBAYXBwbHkgYm9yZGVyLWIgYm9yZGVyLWdyYXktMzAwO1xuICAgIEBhcHBseSB0ZXh0LWdyYXktNjAwIHRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWNlbnRlcjtcbiAgfVxuXG4gICZfX2NvbnRlbnQge1xuICAgIEBhcHBseSBvdmVyZmxvdy1oaWRkZW47XG5cbiAgICBtaW4td2lkdGg6IDE1MHB4O1xuICB9XG5cbiAgJl9fbG9hZGluZyB7XG4gICAgQGFwcGx5IHAtMjtcbiAgICBAYXBwbHkgdGV4dC1jZW50ZXI7XG5cbiAgICBtaW4td2lkdGg6IDE1MHB4O1xuICB9XG5cblxuICBAYXBwbHkgc206dG9wLXVuc2V0ICFpbXBvcnRhbnQ7XG4gIEBhcHBseSBzbTpsZWZ0LTAgIWltcG9ydGFudDtcbiAgQGFwcGx5IHNtOnJpZ2h0LTAgIWltcG9ydGFudDtcbiAgQGFwcGx5IHNtOmJvdHRvbS0wICFpbXBvcnRhbnQ7XG4gIEBhcHBseSBzbTptLTAgIWltcG9ydGFudDtcbiAgQGFwcGx5IHNtOmZpeGVkICFpbXBvcnRhbnQ7XG4gIEBhcHBseSBzbTp0cmFuc2Zvcm0tbm9uZSAhaW1wb3J0YW50O1xuICBAYXBwbHkgc206Ym9yZGVyLTAgc206Ym9yZGVyLXQtMjtcbiAgQGFwcGx5IHNtOnJvdW5kZWQtbm9uZTtcblxuXG4gICZbZGF0YS1wbGFjZW1lbnQ9XCJ0b3BcIl0sXG4gICZbZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIl0ge1xuICAgIEBhcHBseSBzbTp0b3AtdW5zZXQgIWltcG9ydGFudDtcbiAgfVxuXG4gICZbZGF0YS1wbGFjZW1lbnQ9XCJsZWZ0XCJdLFxuICAmW2RhdGEtcGxhY2VtZW50PVwicmlnaHRcIl0ge1xuICAgIEBhcHBseSBzbTpsZWZ0LTAgIWltcG9ydGFudDtcbiAgfVxuXG4gIFtkYXRhLWFycm93XSB7XG4gICAgQGFwcGx5IHNtOmhpZGRlbiAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmMtYnV0dG9uIHtcbiAgICBAYXBwbHkgc206dy1mdWxsIHNtOm1heC13LXNtO1xuICB9XG59XG4iXX0= */", ".c-search-field {\n position: relative;\n}@media (max-width: 767px) {.c-search-field {\n width: 100%;\n }\n}\n\n .c-search-field__dropdown {\n margin: 4px 0 0 0;\n width: 100%;\n max-width: 350px;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vc2VhcmNoX2ZpZWxkX2NvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxrQkFBa0I7QUFTcEIsQ0FQRSwyQkFBQTtJQUFBO0VBQWdCO0FBQUE7O0VBRWhCO0lBQ0UsaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxnQkFBZ0I7RUFDbEIiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9zZWFyY2hfZmllbGRfY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jLXNlYXJjaC1maWVsZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBAYXBwbHkgc206dy1mdWxsO1xuXG4gICZfX2Ryb3Bkb3duIHtcbiAgICBtYXJnaW46IDRweCAwIDAgMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDM1MHB4O1xuICB9XG59XG4iXX0= */", ".c-select {\n --value-right-padding: 2rem;\n width: 100%;\n\n min-width: 0; /* Important to adjust to parent size (https:/*css-tricks.com/flexbox-truncated-text/) */ font-weight: 400;\n}\n\n .c-select__dropdown {\n position: relative;\n }\n\n .c-select__value {\n cursor: pointer;\n text-align: left;\n width: 100%;\n display: flex;\n align-items: center;\n white-space: nowrap;\n user-select: none;\n\n padding-right: var(--value-right-padding);\n }\n\n @media print {\n\n .c-select__value {\n padding-right: 0.625rem;\n }\n}\n\n .c-select__value::after {\n width: 0.95em;\n height: 0.95em;\n opacity: 0.5;\n /* fa-angle-down */\n background-image: url(\"data:image/svg+xml;utf8,\");\n background-position: center;\n background-repeat: no-repeat;\n content: \"\";\n display: block;\n position: absolute;\n right: 13px;\n }\n\n @media print {\n\n .c-select__value::after {\n display: none;\n }\n}\n\n .c-select__label,\n .c-select__placeholder {\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n /* ensure empty select takes the regular input height */\n\n .c-select__label:empty::after, .c-select__placeholder:empty::after {\n content: '\\feff';\n }\n\n .c-select__placeholder {\n color: #71717a;\n }\n\n .c-select__deselect {\n font-size: 1.25rem;\n line-height: 1.75rem;\n padding: 0 3px;\n position: absolute;\n top: 0;\n right: 1.3em;\n display: none;\n height: 100%;\n align-items: center;\n outline: none;\n}\n\n .c-select__deselect::after {\n width: 0.75em;\n height: 0.75em;\n opacity: 0.5;\n /* FontAwesome xmark */\n background-image: url(\"data:image/svg+xml;utf8,\");\n background-position: center;\n background-repeat: no-repeat;\n content: \"\";\n display: block;\n }\n\n @media print {\n\n .c-select__deselect::after {\n display: none;\n }\n}\n\n .c-select__deselect:hover::after {\n opacity: 0.7;\n }\n\n .c-select__list {\n margin: 4px 0 0 0;\n min-width: 100% !important; /* override .dropdown min-width */\n max-width: 300px;\n }\n\n .c-select__select {\n /* Make invisible, using this instead of display:none to make sure */\n /* the focus events still work on the select. */\n opacity: 0;\n height: 0 !important;\n width: 0 !important;\n overflow: hidden;\n position: absolute;\n border: 0;\n }\n\n .c-select.open .c-select__list {\n display: block;\n }\n\n .c-select.open:not(.c-select--as-button) .c-select__value {\n --tw-border-opacity: 1 !important;\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1)) !important;\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1));\n --tw-ring-opacity: 0.5;\n outline: 0;\n}\n\n .c-select.disabled .c-select__value {\n --tw-bg-opacity: 1 !important;\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1)) !important;\n --tw-text-opacity: 1 !important;\n color: rgb(113 113 122 / var(--tw-text-opacity, 1)) !important;\n cursor: not-allowed;\n}\n\n .c-select.invalid .c-select__value {\n /* make sure this matches with the invalid styling in forms.css */\n --tw-border-opacity: 1 !important;\n border-color: rgb(248 113 113 / var(--tw-border-opacity, 1)) !important;\n --tw-text-opacity: 1 !important;\n color: rgb(127 29 29 / var(--tw-text-opacity, 1)) !important;\n }\n\n .c-select.invalid .c-select__value::placeholder {\n --tw-placeholder-opacity: 1 !important;\n color: rgb(252 165 165 / var(--tw-placeholder-opacity, 1)) !important;\n}\n\n .c-select.invalid .c-select__value:focus {\n --tw-border-opacity: 1 !important;\n border-color: rgb(239 68 68 / var(--tw-border-opacity, 1)) !important;\n --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1)) !important;\n --tw-ring-opacity: 0.5 !important;\n}\n\n .c-select--with-deselect .c-select__value {\n padding-right: 2.6rem;\n }\n\n @media print {\n\n .c-select--with-deselect .c-select__value {\n padding-right: 0.625rem;\n }\n}\n\n .c-select--as-button .c-select__label,\n .c-select--as-button .c-select__placeholder {\n font-weight: 600;\n --tw-text-opacity: 1;\n color: rgb(82 82 91 / var(--tw-text-opacity, 1));\n\n line-height: 1.25rem;\n padding: 8px 32px 8px 9px;\n max-width: 250px;\n text-overflow: ellipsis;\n min-height: initial;\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vc2VsZWN0X2NvbXBvbmVudC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSwyQkFBMkI7RUFFM0IsV0FBYTs7RUFFYixZQUFZLEVBQUUsd0ZBQXdGLEVBQ3RHLGdCQUFrQjtBQXVKcEI7O0VBckpFO0lBQ0Usa0JBQWtCO0VBQ3BCOztFQUVBO0lBQ0UsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixXQUFXO0lBQ1gsYUFBYTtJQUNiLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsaUJBQWlCOztJQUVqQix5Q0FBeUM7RUFtQjNDOztFQWpCRTs7RUFBQTtJQUFBO0VBQW1CO0FBQUE7O0VBRW5CO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxZQUFZO01BQ1osa0JBQWtCO01BQ2xCLGtWQUFrVjtNQUNsViwyQkFBMkI7TUFDM0IsNEJBQTRCO01BQzVCLFdBQVc7TUFDWCxjQUFjO01BQ2Qsa0JBQWtCO01BQ2xCLFdBQVc7SUFHYjs7RUFERTs7RUFBQTtJQUFBO0VBQW1CO0FBQUE7O0VBSXZCOztJQUVFLHVCQUF1QjtJQUN2QixnQkFBZ0I7RUFNbEI7O0VBSkUsdURBQXVEOztFQUN2RDtNQUNFLGdCQUFnQjtJQUNsQjs7RUFHRjtJQUNFLGNBQStCO0VBQ2pDOztFQUdFO0VBQUEsa0JBQWM7RUFBZCxvQkFBYztJQUNkLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsTUFBTTtJQUNOLFlBQVk7SUFDWixhQUFhO0lBQ2IsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQjtBQVJjOztFQVVkO01BQ0UsYUFBYTtNQUNiLGNBQWM7TUFDZCxZQUFZO01BQ1osc0JBQXNCO01BQ3RCLDhXQUE4VztNQUM5VywyQkFBMkI7TUFDM0IsNEJBQTRCO01BQzVCLFdBQVc7TUFDWCxjQUFjO0lBR2hCOztFQURFOztFQUFBO0lBQUE7RUFBbUI7QUFBQTs7RUFJbkI7UUFDRSxZQUFZO01BQ2Q7O0VBSUo7SUFDRSxpQkFBaUI7SUFDakIsMEJBQTBCLEVBQUUsaUNBQWlDO0lBQzdELGdCQUFnQjtFQUNsQjs7RUFFQTtJQUNFLG9FQUFvRTtJQUNwRSwrQ0FBK0M7SUFDL0MsVUFBVTtJQUNWLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixTQUFTO0VBQ1g7O0VBR0U7TUFDRSxjQUFjO0lBQ2hCOztFQUdFO0VBQUEsaUNBQWlDO0VBQWpDLHFFQUFpQztFQUNqQywyR0FBMkM7RUFBM0MseUdBQTJDO0VBQTNDLDRGQUEyQztFQUEzQyw0REFBMkM7RUFBM0Msc0JBQTJDO01BQzNDO0FBRmlDOztFQVFqQztFQUFBLDZCQUFtQjtFQUFuQix1RUFBbUI7RUFDbkIsK0JBQXFCO0VBQXJCLDhEQUFxQjtFQUNyQjtBQUZtQjs7RUFPckI7TUFDRSxpRUFBaUU7TUFDakUsaUNBQWdDO01BQWhDLHVFQUFnQztNQUNoQywrQkFBa0Q7TUFBbEQsNERBQWtEO0lBR3BEOztFQUhFO0VBQUEsc0NBQWtEO0VBQWxEO0FBQWtEOztFQUNsRDtFQUFBLGlDQUFzQztFQUF0QyxxRUFBc0M7RUFDdEMsc0VBQTBEO0VBQTFEO0FBRHNDOztFQU14QztNQUNFLHFCQUFxQjtJQUd2Qjs7RUFERTs7RUFBQTtJQUFBO0VBQW1CO0FBQUE7O0VBT25COztFQUFBLGdCQUFvQjtFQUNwQixvQkFBb0I7RUFBcEIsZ0RBQW9COztNQUVwQixvQkFBb0I7TUFDcEIseUJBQXlCO01BQ3pCLGdCQUFnQjtNQUNoQix1QkFBdUI7TUFDdkI7QUFQb0IiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby9zZWxlY3RfY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jLXNlbGVjdCB7XG4gIC0tdmFsdWUtcmlnaHQtcGFkZGluZzogMnJlbTtcblxuICBAYXBwbHkgdy1mdWxsO1xuXG4gIG1pbi13aWR0aDogMDsgLyogSW1wb3J0YW50IHRvIGFkanVzdCB0byBwYXJlbnQgc2l6ZSAoaHR0cHM6Lypjc3MtdHJpY2tzLmNvbS9mbGV4Ym94LXRydW5jYXRlZC10ZXh0LykgKi9cbiAgQGFwcGx5IGZvbnQtbm9ybWFsO1xuXG4gICZfX2Ryb3Bkb3duIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAmX192YWx1ZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG5cbiAgICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS12YWx1ZS1yaWdodC1wYWRkaW5nKTtcblxuICAgIEBhcHBseSBwcmludDpwci0yLjU7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICB3aWR0aDogMC45NWVtO1xuICAgICAgaGVpZ2h0OiAwLjk1ZW07XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAvKiBmYS1hbmdsZS1kb3duICovXG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDM4NCA1MTInPjxwYXRoIGQ9J00xOTIgMzg0Yy04LjE4OCAwLTE2LjM4LTMuMTI1LTIyLjYyLTkuMzc1bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi43NSAwLTQ1LjI1czMyLjc1LTEyLjUgNDUuMjUgMEwxOTIgMzA2LjhsMTM3LjQtMTM3LjRjMTIuNS0xMi41IDMyLjc1LTEyLjUgNDUuMjUgMHMxMi41IDMyLjc1IDAgNDUuMjVsLTE2MCAxNjBDMjA4LjQgMzgwLjkgMjAwLjIgMzg0IDE5MiAzODR6Jy8+PC9zdmc+XCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAxM3B4O1xuXG4gICAgICBAYXBwbHkgcHJpbnQ6aGlkZGVuO1xuICAgIH1cbiAgfVxuXG4gICZfX2xhYmVsLFxuICAmX19wbGFjZWhvbGRlciB7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC8qIGVuc3VyZSBlbXB0eSBzZWxlY3QgdGFrZXMgdGhlIHJlZ3VsYXIgaW5wdXQgaGVpZ2h0ICovXG4gICAgJjplbXB0eTo6YWZ0ZXIge1xuICAgICAgY29udGVudDogJ1xcZmVmZic7XG4gICAgfVxuICB9XG5cbiAgJl9fcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiB0aGVtZSgnY29sb3JzLmdyYXkuNTAwJyk7XG4gIH1cblxuICAmX19kZXNlbGVjdCB7XG4gICAgQGFwcGx5IHRleHQteGw7XG4gICAgcGFkZGluZzogMCAzcHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMS4zZW07XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgd2lkdGg6IDAuNzVlbTtcbiAgICAgIGhlaWdodDogMC43NWVtO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgLyogRm9udEF3ZXNvbWUgeG1hcmsgKi9cbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzg0IDUxMic+PHBhdGggZD0nTTM0NSAxMzdjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMTE5IDExOUw3MyAxMDNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTE5IDExOUwzOSAzNzVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxMTktMTE5TDMxMSA0MDljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xMTktMTE5TDM0NSAxMzd6Jy8+PC9zdmc+XCIpO1xuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgQGFwcGx5IHByaW50OmhpZGRlbjtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX2xpc3Qge1xuICAgIG1hcmdpbjogNHB4IDAgMCAwO1xuICAgIG1pbi13aWR0aDogMTAwJSAhaW1wb3J0YW50OyAvKiBvdmVycmlkZSAuZHJvcGRvd24gbWluLXdpZHRoICovXG4gICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgfVxuXG4gICZfX3NlbGVjdCB7XG4gICAgLyogTWFrZSBpbnZpc2libGUsIHVzaW5nIHRoaXMgaW5zdGVhZCBvZiBkaXNwbGF5Om5vbmUgdG8gbWFrZSBzdXJlICovXG4gICAgLyogdGhlIGZvY3VzIGV2ZW50cyBzdGlsbCB3b3JrIG9uIHRoZSBzZWxlY3QuICovXG4gICAgb3BhY2l0eTogMDtcbiAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvcmRlcjogMDtcbiAgfVxuXG4gICYub3BlbiB7XG4gICAgLmMtc2VsZWN0X19saXN0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgICY6bm90KC5jLXNlbGVjdC0tYXMtYnV0dG9uKSAuYy1zZWxlY3RfX3ZhbHVlIHtcbiAgICAgIEBhcHBseSBib3JkZXItYmx1ZS02MDAgIWltcG9ydGFudDtcbiAgICAgIEBhcHBseSByaW5nLTIgcmluZy1ibHVlLTUwMCByaW5nLW9wYWNpdHktNTA7XG4gICAgICBvdXRsaW5lOiAwO1xuICAgIH1cbiAgfVxuXG4gICYuZGlzYWJsZWQge1xuICAgIC5jLXNlbGVjdF9fdmFsdWUge1xuICAgICAgQGFwcGx5ICFiZy1ncmF5LTEwMDtcbiAgICAgIEBhcHBseSAhdGV4dC1ncmF5LTUwMDtcbiAgICAgIEBhcHBseSBjdXJzb3Itbm90LWFsbG93ZWQ7XG4gICAgfVxuICB9XG5cbiAgJi5pbnZhbGlkIHtcbiAgICAuYy1zZWxlY3RfX3ZhbHVlIHtcbiAgICAgIC8qIG1ha2Ugc3VyZSB0aGlzIG1hdGNoZXMgd2l0aCB0aGUgaW52YWxpZCBzdHlsaW5nIGluIGZvcm1zLmNzcyAqL1xuICAgICAgQGFwcGx5IGJvcmRlci1yZWQtNDAwICFpbXBvcnRhbnQ7XG4gICAgICBAYXBwbHkgdGV4dC1yZWQtOTAwIHBsYWNlaG9sZGVyLXJlZC0zMDAgIWltcG9ydGFudDtcbiAgICAgIEBhcHBseSBmb2N1czpib3JkZXItcmVkLTUwMCAhaW1wb3J0YW50O1xuICAgICAgQGFwcGx5IGZvY3VzOnJpbmctcmVkLTUwMCBmb2N1czpyaW5nLW9wYWNpdHktNTAgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cblxuICAmLS13aXRoLWRlc2VsZWN0IHtcbiAgICAuYy1zZWxlY3RfX3ZhbHVlIHtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDIuNnJlbTtcblxuICAgICAgQGFwcGx5IHByaW50OnByLTIuNTtcbiAgICB9XG4gIH1cblxuICAmLS1hcy1idXR0b24ge1xuICAgIC5jLXNlbGVjdF9fbGFiZWwsXG4gICAgLmMtc2VsZWN0X19wbGFjZWhvbGRlciB7XG4gICAgICBAYXBwbHkgZm9udC1zZW1pYm9sZDtcbiAgICAgIEBhcHBseSB0ZXh0LWdyYXktNjAwO1xuXG4gICAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcbiAgICAgIHBhZGRpbmc6IDhweCAzMnB4IDhweCA5cHg7XG4gICAgICBtYXgtd2lkdGg6IDI1MHB4O1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBtaW4taGVpZ2h0OiBpbml0aWFsO1xuICAgIH1cbiAgfVxufVxuIl19 */", ".c-suggestions__entry,\n .c-suggestions__entry:active,\n .c-suggestions__entry:focus,\n .c-suggestions__entry:hover {\n /* override default anchor styles */\n color: #27272a;\n }\n .c-suggestions__entry {\n\n cursor: pointer;\n display: block;\n padding: 0 0.4rem;\n text-align: left;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n -webkit-tap-highlight-color: #2563eb;\n width: 100%;\n}\n .c-suggestions__entry em {\n text-decoration: underline;\n font-style: normal;\n }\n .c-suggestions__entry__label {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n .c-suggestions__entry__details {\n font-size: 0.75rem;\n line-height: 1rem;\n --tw-text-opacity: 1;\n color: rgb(113 113 122 / var(--tw-text-opacity, 1));\n margin-top: -0.125rem;\n}\n .c-suggestions__entry__selected {\n visibility: hidden;\n font-size: 0.875rem;\n line-height: 1.25rem;\n display: flex;\n align-items: center;\n --tw-text-opacity: 1;\n color: rgb(37 99 235 / var(--tw-text-opacity, 1));\n padding-left: 0.25rem;\n padding-right: 0.5rem;\n}\n .c-suggestions__entry[data-highlighted] {\n background-color: #dbeafe;\n }\n .c-suggestions__entry[data-selected] .c-suggestions__entry__label {\n font-weight: 700;\n}\n .c-suggestions__entry[data-selected] .c-suggestions__entry__selected {\n visibility: visible;\n}\n .c-suggestions__entry[data-type='group'] .c-suggestions__entry__selected {\n display: none;\n}\n .c-suggestions__entry[data-type='group'] {\n color: #71717a;\n font-weight: 500;\n font-size: 0.875rem;\n line-height: 1.25rem;\n padding-left: 0.75em;\n cursor: default;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n .c-suggestions__no-entries {\n padding: 0.5em;\n color: #52525b;\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n overflow: hidden;\n white-space: nowrap;\n }\n .c-suggestions__search {\n padding: 0.5em 0 0.5em 0;\n border-bottom-width: 1px;\n --tw-border-opacity: 1;\n border-color: rgb(212 212 216 / var(--tw-border-opacity, 1));\n position: relative;\n }\n .c-suggestions__search input {\n width: 100% !important;\n font-size: 0.875rem;\n line-height: 1.25rem;\n padding: 0.3em 0.5em 0.3em 2.3em;\n }\n .c-suggestions__search input, .c-suggestions__search input:focus {\n border: none;\n box-shadow: none;\n outline: none;\n }\n .c-suggestions__search-icon {\n position: absolute;\n left: 0.75em;\n height: 100%;\n top: 0;\n display: flex;\n align-items: center;\n }\n .c-suggestions__search-icon::after {\n width: 0.8em;\n height: 0.8em;\n opacity: 0.5;\n /* FontAwesome magnifying-glass */\n background-image: url(\"data:image/svg+xml;utf8,\");\n background-repeat: no-repeat;\n content: \"\";\n display: block;\n }\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vc3VnZ2VzdGlvbnNfY29tcG9uZW50LmNzcyIsIjxubyBzb3VyY2U+Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVJOzs7O01BSUUsbUNBQW1DO01BQ25DLGNBQStCO0lBQ2pDO0lDUko7O0lEVUksZUFBZTtJQUNmLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLG9DQUFxRDtJQUNyRDtDQ2xCSjtJRG9CSTtNQUNFLDBCQUEwQjtNQUMxQixrQkFBa0I7SUFDcEI7SUFHRTtNQUFBLG1CQUFjO01BQWQ7QUFBYztJQUlkO01BQUEsa0JBQTRCO01BQTVCLGlCQUE0QjtNQUE1QixvQkFBNEI7TUFBNUIsbURBQTRCO01BQzVCO0FBRDRCO0lBSzVCO01BQUEsa0JBQWdCO01BQ2hCLG1CQUFjO01BQWQsb0JBQWM7TUFDZCxhQUF3QjtNQUF4QixtQkFBd0I7TUFDeEIsb0JBQW9CO01BQXBCLGlEQUFvQjtNQUNwQixxQkFBZ0I7TUFBaEI7QUFKZ0I7SUFPbEI7TUFDRSx5QkFBMEM7SUFDNUM7SUFHRTtNQUFBO0FBQWdCO0lBSWhCO01BQUE7QUFBYztJQUlkO01BQUE7QUFBYTtJQUdmO01BQ0UsY0FBK0I7TUFDL0IsZ0JBQWtCO01BQ2xCLG1CQUFjO01BQWQsb0JBQWM7TUFDZCxvQkFBb0I7TUFDcEIsZUFBZTtNQUNmLG1CQUFtQjtNQUNuQix1QkFBdUI7TUFDdkIsZ0JBQWdCO0lBQ2xCO0VBR0Y7SUFDRSxjQUFjO0lBQ2QsY0FBK0I7SUFDL0IsbUJBQW1CO0lBQW5CLHNCQUFtQjtJQUFuQixtQkFBbUI7SUFBbkIsb0JBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixtQkFBbUI7RUFDckI7RUFFQTtJQUNFLHdCQUF3QjtJQUN4Qix3QkFBZTtJQUNmLHNCQUFzQjtJQUF0Qiw0REFBc0I7SUFDdEIsa0JBQWtCO0VBYXBCO0VBWEU7TUFDRSxzQkFBc0I7TUFDdEIsbUJBQWM7TUFBZCxvQkFBYztNQUNkLGdDQUFnQztJQU9sQztFQUxFO1FBQ0UsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixhQUFhO01BQ2Y7RUFJSjtJQUNFLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osWUFBWTtJQUNaLE1BQU07SUFDTixhQUFhO0lBQ2IsbUJBQW1CO0VBWXJCO0VBVkU7TUFDRSxZQUFZO01BQ1osYUFBYTtNQUNiLFlBQVk7TUFDWixpQ0FBaUM7TUFDakMsNFdBQTRXO01BQzVXLDRCQUE0QjtNQUM1QixXQUFXO01BQ1gsY0FBYztJQUNoQiIsImZpbGUiOiIuLi9waXN0YWNoaW8vYXBwL2NvbXBvbmVudHMvcGlzdGFjaGlvL3N1Z2dlc3Rpb25zX2NvbXBvbmVudC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYy1zdWdnZXN0aW9ucyB7XG4gICZfX2VudHJ5IHtcbiAgICAmLFxuICAgICY6YWN0aXZlLFxuICAgICY6Zm9jdXMsXG4gICAgJjpob3ZlciB7XG4gICAgICAvKiBvdmVycmlkZSBkZWZhdWx0IGFuY2hvciBzdHlsZXMgKi9cbiAgICAgIGNvbG9yOiB0aGVtZSgnY29sb3JzLmdyYXkuODAwJyk7XG4gICAgfVxuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC40cmVtO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdGhlbWUoJ2NvbG9ycy5ibHVlLjYwMCcpO1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgZW0ge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgfVxuXG4gICAgJl9fbGFiZWwge1xuICAgICAgQGFwcGx5IHRleHQtc207XG4gICAgfVxuXG4gICAgJl9fZGV0YWlscyB7XG4gICAgICBAYXBwbHkgdGV4dC14cyB0ZXh0LWdyYXktNTAwO1xuICAgICAgQGFwcGx5IC1tdC0wLjU7XG4gICAgfVxuXG4gICAgJl9fc2VsZWN0ZWQge1xuICAgICAgQGFwcGx5IGludmlzaWJsZTtcbiAgICAgIEBhcHBseSB0ZXh0LXNtO1xuICAgICAgQGFwcGx5IGZsZXggaXRlbXMtY2VudGVyO1xuICAgICAgQGFwcGx5IHRleHQtYmx1ZS02MDA7XG4gICAgICBAYXBwbHkgcGwtMSBwci0yO1xuICAgIH1cblxuICAgICZbZGF0YS1oaWdobGlnaHRlZF0ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdGhlbWUoJ2NvbG9ycy5ibHVlLjEwMCcpO1xuICAgIH1cblxuICAgICZbZGF0YS1zZWxlY3RlZF0gJl9fbGFiZWwge1xuICAgICAgQGFwcGx5IGZvbnQtYm9sZDtcbiAgICB9XG5cbiAgICAmW2RhdGEtc2VsZWN0ZWRdICZfX3NlbGVjdGVkIHtcbiAgICAgIEBhcHBseSB2aXNpYmxlO1xuICAgIH1cblxuICAgICZbZGF0YS10eXBlPSdncm91cCddICZfX3NlbGVjdGVkIHtcbiAgICAgIEBhcHBseSBoaWRkZW47XG4gICAgfVxuXG4gICAgJltkYXRhLXR5cGU9J2dyb3VwJ10ge1xuICAgICAgY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS41MDAnKTtcbiAgICAgIEBhcHBseSBmb250LW1lZGl1bTtcbiAgICAgIEBhcHBseSB0ZXh0LXNtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjc1ZW07XG4gICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgfVxuXG4gICZfX25vLWVudHJpZXMge1xuICAgIHBhZGRpbmc6IDAuNWVtO1xuICAgIGNvbG9yOiB0aGVtZSgnY29sb3JzLmdyYXkuNjAwJyk7XG4gICAgQGFwcGx5IHRleHQtc20gbXktMTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAmX19zZWFyY2gge1xuICAgIHBhZGRpbmc6IDAuNWVtIDAgMC41ZW0gMDtcbiAgICBAYXBwbHkgYm9yZGVyLWI7XG4gICAgQGFwcGx5IGJvcmRlci1ncmF5LTMwMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgQGFwcGx5IHRleHQtc207XG4gICAgICBwYWRkaW5nOiAwLjNlbSAwLjVlbSAwLjNlbSAyLjNlbTtcblxuICAgICAgJiwgJjpmb2N1cyB7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19zZWFyY2gtaWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDAuNzVlbTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgdG9wOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIHdpZHRoOiAwLjhlbTtcbiAgICAgIGhlaWdodDogMC44ZW07XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICAvKiBGb250QXdlc29tZSBtYWduaWZ5aW5nLWdsYXNzICovXG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDUxMiA1MTInPjxwYXRoIGQ9J00zNjggMjA4QTE2MCAxNjAgMCAxIDAgNDggMjA4YTE2MCAxNjAgMCAxIDAgMzIwIDB6TTMzNy4xIDM3MS4xQzMwMS43IDM5OS4yIDI1Ni44IDQxNiAyMDggNDE2QzkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwUzQxNiA5My4xIDQxNiAyMDhjMCA0OC44LTE2LjggOTMuNy00NC45IDEyOS4xTDUwNSA0NzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwzMzcuMSAzNzEuMXonLz48L3N2Zz5cIik7XG4gICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuIixudWxsXX0= */", "table.c-table {font-size: 0.875rem;line-height: 1.25rem\n}table.c-table > :not([hidden]) ~ :not([hidden]) {--tw-divide-y-reverse: 0;border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width: calc(1px * var(--tw-divide-y-reverse));--tw-divide-opacity: 1;border-color: rgb(228 228 231 / var(--tw-divide-opacity, 1))\n}@media (max-width: 767px) {table.c-table {table-layout: fixed\n }\n}\n\n table.c-table[data-border-top] {border-top-width: 1px;--tw-border-opacity: 1;border-color: rgb(228 228 231 / var(--tw-border-opacity, 1))\n}\n\n table.c-table[data-box] {border-radius: 0.5rem;--tw-bg-opacity: 1;background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1))\n}\n\n table.c-table[data-box] thead:first-child > tr:first-child > th:first-child,\n table.c-table[data-box] tbody:first-child > tr:first-child > td:first-child {border-top-left-radius: 0.5rem\n}\n\n table.c-table[data-box] thead:first-child > tr:first-child > th:last-child,\n table.c-table[data-box] tbody:first-child > tr:first-child > td:last-child {border-top-right-radius: 0.5rem\n}\n\n table.c-table[data-box] tbody:last-child > tr:last-child > td:first-child,\n table.c-table[data-box] tfoot > tr:last-child > td:first-child,\n table.c-table[data-rounded-bottom] tbody:last-child > tr:last-child > td:first-child,\n table.c-table[data-rounded-bottom] tfoot > tr:last-child > td:first-child {border-bottom-left-radius: 0.5rem\n}\n\n table.c-table[data-box] tbody:last-child > tr:last-child > td:last-child,\n table.c-table[data-box] tfoot > tr:last-child > td:last-child,\n table.c-table[data-rounded-bottom] tbody:last-child > tr:last-child > td:last-child,\n table.c-table[data-rounded-bottom] tfoot > tr:last-child > td:last-child {border-bottom-right-radius: 0.5rem\n}\n\n table.c-table[data-compact] > tbody > tr > td {padding-top: 0.4rem;padding-bottom: 0.4rem\n}\n\n table.c-table[data-compact] > thead > tr > th:first-child,\n table.c-table[data-compact] > tbody > tr > td:first-child,\n table.c-table[data-compact] > tfoot > tr > td:first-child {padding-left: 0.5rem\n}\n\n table.c-table[data-compact] > thead > tr > th:last-child,\n table.c-table[data-compact] > tbody > tr > td:last-child,\n table.c-table[data-compact] > tfoot > tr > td:last-child {padding-right: 0.5rem\n}\n\n table.c-table > thead > tr {--tw-bg-opacity: 1;background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1))\n}\n\n table.c-table > thead > tr > th {padding-left: 1.5rem;padding-right: 1.5rem;padding-top: 0.75rem;padding-bottom: 0.75rem;text-align: left;font-weight: 500;line-height: 1.25rem;--tw-text-opacity: 1;color: rgb(113 113 122 / var(--tw-text-opacity, 1))\n}\n\n table.c-table > tbody > :not([hidden]) ~ :not([hidden]) {--tw-divide-y-reverse: 0;border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width: calc(1px * var(--tw-divide-y-reverse));--tw-divide-opacity: 1;border-color: rgb(228 228 231 / var(--tw-divide-opacity, 1))\n}\n\n @media (max-width: 767px) {table.c-table > tbody {border-top-width: 0px !important\n }\n}\n\n table.c-table > tbody > tr > td {line-height: 1.25rem;padding-left: 1.5rem;padding-right: 1.5rem;padding-top: 1rem;padding-bottom: 1rem\n}\n\n @media (max-width: 767px) {table.c-table > tbody > tr > td {padding-left: 1rem;padding-right: 1rem\n }\n}\n\n table.c-table > tbody > tr.clickable-row:hover {--tw-bg-opacity: 1;background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1))\n}\n\n table.c-table > tbody > tr.clickable-row td {position: relative\n}\n\n table.c-table > tbody > tr .marker {visibility: hidden\n}\n\n table.c-table > tbody > tr.selected {--tw-bg-opacity: 1;background-color: rgb(250 250 250 / var(--tw-bg-opacity, 1))\n}\n\n table.c-table > tbody > tr.selected .marker {visibility: visible;position: absolute;top: 0px;bottom: 0px;left: 0px;width: 0.25rem\n}\n\n @media (min-width: 1024px) {table.c-table > tfoot {--tw-bg-opacity: 1;background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1))\n }\n}\n\n table.c-table > tfoot > tr > td {padding-left: 1.5rem;padding-right: 1.5rem;padding-top: 0.5rem;padding-bottom: 0.5rem\n}\n\n @media (max-width: 767px) {table.c-table > tfoot > tr > td {padding-left: 1rem;padding-right: 1rem\n }\n}\n\n table.c-table > tfoot > tr > td {font-weight: 600\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vdGFibGVfY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDRSxlQUFBLG1CQUFjLENBQWQ7QUFBYyxDQUNkLGlEQUFBLHdCQUErQixDQUEvQixrRUFBK0IsQ0FBL0IsMkRBQStCLENBQS9CLHNCQUErQixDQUEvQjtBQUErQixDQUMvQiwyQkFBQSxlQUFBO0lBQXFCO0FBQUE7O0VBR25CLGdDQUFBLHFCQUErQixDQUEvQixzQkFBK0IsQ0FBL0I7QUFBK0I7O0VBSS9CLHlCQUFBLHFCQUEwQixDQUExQixrQkFBMEIsQ0FBMUI7QUFBMEI7O0VBSXhCO2lGQUFBO0FBQW9COztFQUlwQjtnRkFBQTtBQUFvQjs7RUFRcEI7OzsrRUFBQTtBQUFvQjs7RUFJcEI7Ozs4RUFBQTtBQUFvQjs7RUFNcEIsK0NBQUEsbUJBQWtCLENBQWxCO0FBQWtCOztFQU1sQjs7K0RBQUE7QUFBVzs7RUFNWDs7OERBQUE7QUFBVzs7RUFLYiw0QkFBQSxrQkFBa0IsQ0FBbEI7QUFBa0I7O0VBR2hCLGlDQUFBLG9CQUFnQixDQUFoQixxQkFBZ0IsQ0FBaEIsb0JBQWdCLENBQWhCLHVCQUFnQixDQUNoQixnQkFBb0QsQ0FBcEQsZ0JBQW9ELENBQXBELG9CQUFvRCxDQUFwRCxvQkFBb0QsQ0FBcEQ7QUFEZ0I7O0VBTWxCLHlEQUFBLHdCQUErQixDQUEvQixrRUFBK0IsQ0FBL0IsMkRBQStCLENBQS9CLHNCQUErQixDQUEvQjtBQUErQjs7RUFDL0IsMkJBQUEsdUJBQUE7SUFBK0I7QUFBQTs7RUFHN0IsaUNBQUEsb0JBQWdCLENBQ2hCLG9CQUF3QixDQUF4QixxQkFBd0IsQ0FBeEIsaUJBQXdCLENBQXhCO0FBRGdCOztFQUNoQiwyQkFBQSxpQ0FBQSxrQkFBd0IsQ0FBeEI7SUFBd0I7QUFBQTs7RUFJeEIsZ0RBQUEsa0JBQXVCLENBQXZCO0FBQXVCOztFQUdyQiw2Q0FBQTtBQUFlOztFQU1mLG9DQUFBO0FBQWdCOztFQUtsQixxQ0FBQSxrQkFBaUIsQ0FBakI7QUFBaUI7O0VBR2YsNkNBQUEsbUJBQWMsQ0FDZCxrQkFBb0MsQ0FBcEMsUUFBb0MsQ0FBcEMsV0FBb0MsQ0FBcEMsU0FBb0MsQ0FBcEM7QUFEYzs7RUFPbEIsNEJBQUEsdUJBQUEsa0JBQWtCLENBQWxCO0lBQWtCO0FBQUE7O0VBR2hCLGlDQUFBLG9CQUF3QixDQUF4QixxQkFBd0IsQ0FBeEIsbUJBQXdCLENBQXhCO0FBQXdCOztFQUF4QiwyQkFBQSxpQ0FBQSxrQkFBd0IsQ0FBeEI7SUFBd0I7QUFBQTs7RUFDeEIsaUNBQUE7QUFBb0IiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby90YWJsZV9jb21wb25lbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsidGFibGUuYy10YWJsZSB7XG4gIEBhcHBseSB0ZXh0LXNtO1xuICBAYXBwbHkgZGl2aWRlLXkgZGl2aWRlLWdyYXktMjAwO1xuICBAYXBwbHkgc206dGFibGUtZml4ZWQ7XG5cbiAgJltkYXRhLWJvcmRlci10b3BdIHtcbiAgICBAYXBwbHkgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwO1xuICB9XG5cbiAgJltkYXRhLWJveF0ge1xuICAgIEBhcHBseSBiZy13aGl0ZSByb3VuZGVkLWxnO1xuXG4gICAgdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoOmZpcnN0LWNoaWxkLFxuICAgIHRib2R5OmZpcnN0LWNoaWxkID4gdHI6Zmlyc3QtY2hpbGQgPiB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICBAYXBwbHkgcm91bmRlZC10bC1sZztcbiAgICB9XG4gICAgdGhlYWQ6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRoOmxhc3QtY2hpbGQsXG4gICAgdGJvZHk6Zmlyc3QtY2hpbGQgPiB0cjpmaXJzdC1jaGlsZCA+IHRkOmxhc3QtY2hpbGQge1xuICAgICAgQGFwcGx5IHJvdW5kZWQtdHItbGc7XG4gICAgfVxuICB9XG5cbiAgJltkYXRhLWJveF0sXG4gICZbZGF0YS1yb3VuZGVkLWJvdHRvbV0ge1xuICAgIHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkID4gdGQ6Zmlyc3QtY2hpbGQsXG4gICAgdGZvb3QgPiB0cjpsYXN0LWNoaWxkID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAgICAgQGFwcGx5IHJvdW5kZWQtYmwtbGc7XG4gICAgfVxuICAgIHRib2R5Omxhc3QtY2hpbGQgPiB0cjpsYXN0LWNoaWxkID4gdGQ6bGFzdC1jaGlsZCxcbiAgICB0Zm9vdCA+IHRyOmxhc3QtY2hpbGQgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgIEBhcHBseSByb3VuZGVkLWJyLWxnO1xuICAgIH1cbiAgfVxuXG4gICZbZGF0YS1jb21wYWN0XSB7XG4gICAgPiB0Ym9keSA+IHRyID4gdGQge1xuICAgICAgQGFwcGx5IHB5LVswLjRyZW1dO1xuICAgIH1cblxuICAgID4gdGhlYWQgPiB0ciA+IHRoOmZpcnN0LWNoaWxkLFxuICAgID4gdGJvZHkgPiB0ciA+IHRkOmZpcnN0LWNoaWxkLFxuICAgID4gdGZvb3QgPiB0ciA+IHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgIEBhcHBseSBwbC0yO1xuICAgIH1cblxuICAgID4gdGhlYWQgPiB0ciA+IHRoOmxhc3QtY2hpbGQsXG4gICAgPiB0Ym9keSA+IHRyID4gdGQ6bGFzdC1jaGlsZCxcbiAgICA+IHRmb290ID4gdHIgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgIEBhcHBseSBwci0yO1xuICAgIH1cbiAgfVxuXG4gID4gdGhlYWQgPiB0ciB7XG4gICAgQGFwcGx5IGJnLWdyYXktMTAwO1xuXG4gICAgPiB0aCB7XG4gICAgICBAYXBwbHkgcHgtNiBweS0zO1xuICAgICAgQGFwcGx5IHRleHQtbGVmdCBsZWFkaW5nLTUgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMDtcbiAgICB9XG4gIH1cblxuICA+IHRib2R5IHtcbiAgICBAYXBwbHkgZGl2aWRlLXkgZGl2aWRlLWdyYXktMjAwO1xuICAgIEBhcHBseSBzbTpib3JkZXItdC0wICFpbXBvcnRhbnQ7XG5cbiAgICA+IHRyID4gdGQge1xuICAgICAgQGFwcGx5IGxlYWRpbmctNTtcbiAgICAgIEBhcHBseSBweC02IHB5LTQgc206cHgtNDtcbiAgICB9XG5cbiAgICA+IHRyLmNsaWNrYWJsZS1yb3cge1xuICAgICAgQGFwcGx5IGhvdmVyOmJnLWdyYXktNTA7XG5cbiAgICAgIHRkIHtcbiAgICAgICAgQGFwcGx5IHJlbGF0aXZlO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gdHIge1xuICAgICAgLm1hcmtlciB7XG4gICAgICAgIEBhcHBseSBpbnZpc2libGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiB0ci5zZWxlY3RlZCB7XG4gICAgICBAYXBwbHkgYmctZ3JheS01MDtcblxuICAgICAgLm1hcmtlciB7XG4gICAgICAgIEBhcHBseSB2aXNpYmxlO1xuICAgICAgICBAYXBwbHkgYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCB3LTE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiB0Zm9vdCB7XG4gICAgQGFwcGx5IGxnOmJnLXdoaXRlO1xuXG4gICAgPiB0ciA+IHRkIHtcbiAgICAgIEBhcHBseSBweC02IHB5LTIgc206cHgtNDtcbiAgICAgIEBhcHBseSBmb250LXNlbWlib2xkO1xuICAgIH1cbiAgfVxufVxuIl19 */", ".c-tabs {\n\n display: flex;\n\n flex-wrap: wrap;\n\n align-self: flex-start\n}\n\n .c-tabs > label,\n .c-tabs > a {\n\n display: flex;\n\n cursor: pointer;\n\n z-index: 10;\n\n padding-left: 0.75rem;\n\n padding-right: 0.75rem;\n\n padding-top: 0.5rem;\n\n padding-bottom: 0.5rem;\n\n font-size: 0.875rem;\n\n font-weight: 500;\n\n line-height: 1.25rem\n}\n\n @media print {\n\n .c-tabs > label,\n .c-tabs > a {\n\n display: none\n }\n}\n\n .c-tabs > label > span, .c-tabs > a > span {\n\n display: inline-block;\n\n margin-left: 0.75rem;\n\n padding-left: 0.625rem;\n\n padding-right: 0.625rem;\n\n border-radius: 9999px;\n\n font-size: 0.75rem;\n\n font-weight: 500;\n\n line-height: 1.25rem\n}\n\n .c-tabs > input {\n\n position: absolute;\n\n opacity: 0\n}\n\n .c-tabs > div {\n\n display: none;\n\n width: 100%;\n\n order: 9999;\n\n margin-top: 1px\n}\n\n .c-tabs > input:checked + label + div {\n\n display: block\n}\n\n .c-tabs--cards > label,\n .c-tabs--cards > a {\n\n border-top-left-radius: 0.5rem;\n\n border-top-right-radius: 0.5rem;\n\n border-width: 1px;\n\n border-bottom-width: 0px;\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(82 82 91 / var(--tw-text-opacity, 1));\n\n margin-left: -1px;\n\n margin-right: 0.5rem;\n\n padding-left: 1rem;\n\n padding-right: 1rem;\n\n padding-top: 0.75rem;\n\n padding-bottom: 0.75rem\n}\n\n .c-tabs--cards > label span,\n .c-tabs--cards > a span {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(228 228 231 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(24 24 27 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--cards > label:hover,\n .c-tabs--cards > a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(39 39 42 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--cards > label:active {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(29 78 216 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--cards > input:checked + label,\n .c-tabs--cards > a.active {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(29 78 216 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--cards > input:checked + label span, .c-tabs--cards > a.active span {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(30 58 138 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--cards > input:focus + label {\n\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n\n z-index: 10\n}\n\n .c-tabs--cards > div {\n\n margin-top: 0px;\n\n border-top-left-radius: 0px;\n\n border-top-right-radius: 0px\n}\n\n .c-tabs--pills > label,\n .c-tabs--pills > a {\n\n border-radius: 0.375rem;\n\n --tw-text-opacity: 1;\n\n color: rgb(82 82 91 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--pills > label span,\n .c-tabs--pills > a span {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(228 228 231 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(24 24 27 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--pills > label:hover,\n .c-tabs--pills > a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(39 39 42 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--pills > label:active {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(228 228 231 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(39 39 42 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--pills > input:checked + label,\n .c-tabs--pills > a.active {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(228 228 231 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(39 39 42 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--pills > input:checked + label span, .c-tabs--pills > a.active span {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(212 212 216 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(82 82 91 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--pills > input:focus + label {\n\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n\n z-index: 10\n}\n\n .c-tabs--pills > div {\n\n margin-top: 0.5rem\n}\n\n .c-tabs--underline > label,\n .c-tabs--underline > a {\n\n --tw-text-opacity: 1;\n\n color: rgb(113 113 122 / var(--tw-text-opacity, 1));\n\n border-bottom-width: 2px;\n\n --tw-border-opacity: 1;\n\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n\n padding-top: 0.5rem;\n\n padding-bottom: 0.5rem;\n\n padding-left: 0.75rem;\n\n padding-right: 0.75rem;\n\n margin-right: 0.5rem\n}\n\n .c-tabs--underline > label span,\n .c-tabs--underline > a span {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(244 244 245 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(24 24 27 / var(--tw-text-opacity, 1))\n}\n\n .c-tabs--underline > label:hover,\n .c-tabs--underline > a:hover {\n\n --tw-text-opacity: 1;\n\n color: rgb(63 63 70 / var(--tw-text-opacity, 1));\n\n --tw-border-opacity: 1;\n\n border-color: rgb(212 212 216 / var(--tw-border-opacity, 1))\n}\n\n .c-tabs--underline > label:active,\n .c-tabs--underline > a.active,\n .c-tabs--underline > input:checked + label {\n\n --tw-text-opacity: 1;\n\n color: rgb(30 58 138 / var(--tw-text-opacity, 1));\n\n --tw-border-opacity: 1;\n\n border-color: rgb(37 99 235 / var(--tw-border-opacity, 1))\n}\n\n .c-tabs--underline > label:active span, .c-tabs--underline > a.active span, .c-tabs--underline > input:checked + label span {\n\n --tw-bg-opacity: 1;\n\n background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));\n\n --tw-text-opacity: 1;\n\n color: rgb(30 58 138 / var(--tw-text-opacity, 1))\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vdGFic19jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNFOztJQUFBLGFBQVc7O0lBQ1gsZUFBZ0I7O0lBQ2hCO0FBRlc7O0VBTVQ7OztJQUFBLGFBQVc7O0lBQ1gsZUFBcUI7O0lBQ3JCLFdBQVc7O0lBQ1gscUJBQWdCOztJQUFoQixzQkFBZ0I7O0lBQWhCLG1CQUFnQjs7SUFBaEIsc0JBQWdCOztJQUNoQixtQkFBMEI7O0lBQTFCLGdCQUEwQjs7SUFDMUI7QUFMVzs7RUFNWDs7SUFBQTs7O1FBQUE7SUFBbUI7QUFBQTs7RUFHakI7O0lBQUEscUJBQW1COztJQUNuQixvQkFBVzs7SUFDWCxzQkFBYTs7SUFBYix1QkFBYTs7SUFDYixxQkFBbUI7O0lBQ25CLGtCQUFvQzs7SUFBcEMsZ0JBQW9DOztJQUFwQztBQUptQjs7RUFTckI7O0lBQUEsa0JBQWU7O0lBQ2Y7QUFEZTs7RUFLZjs7SUFBQSxhQUFhOztJQUNiLFdBQWE7O0lBQ2IsV0FBaUI7O0lBQ2pCO0FBSGE7O0VBT2I7O0lBQUE7QUFBWTs7RUFNVjs7O0lBQUEsOEJBQW1COztJQUFuQiwrQkFBbUI7O0lBQ25CLGlCQUF3Qjs7SUFBeEIsd0JBQXdCOztJQUN4QixrQkFBZ0M7O0lBQWhDLDREQUFnQzs7SUFBaEMsb0JBQWdDOztJQUFoQyxnREFBZ0M7O0lBQ2hDLGlCQUFrQjs7SUFBbEIsb0JBQWtCOztJQUNsQixrQkFBZ0I7O0lBQWhCLG1CQUFnQjs7SUFBaEIsb0JBQWdCOztJQUFoQjtBQUptQjs7RUFTbkI7OztJQUFBLGtCQUFrQjs7SUFBbEIsNERBQWtCOztJQUNsQixvQkFBb0I7O0lBQXBCO0FBRGtCOztFQU1sQjs7O0lBQUEsb0JBQW9COztJQUFwQjtBQUFvQjs7RUFJcEI7O0lBQUEsa0JBQWU7O0lBQWYsNERBQWU7O0lBQ2Ysb0JBQW9COztJQUFwQjtBQURlOztFQU1mOzs7SUFBQSxrQkFBZTs7SUFBZiw0REFBZTs7SUFDZixvQkFBb0I7O0lBQXBCO0FBRGU7O0VBSWI7O0lBQUEsa0JBQWtCOztJQUFsQiw0REFBa0I7O0lBQ2xCLG9CQUFvQjs7SUFBcEI7QUFEa0I7O0VBTXBCOztJQUFBLDJHQUFXOztJQUFYLHlHQUFXOztJQUFYLDRGQUFXOztJQUNYO0FBRFc7O0VBS1g7O0lBQUEsZUFBMEI7O0lBQTFCLDJCQUEwQjs7SUFBMUI7QUFBMEI7O0VBTzFCOzs7SUFBQSx1QkFBaUI7O0lBQ2pCLG9CQUFvQjs7SUFBcEI7QUFEaUI7O0VBTWpCOzs7SUFBQSxrQkFBa0I7O0lBQWxCLDREQUFrQjs7SUFDbEIsb0JBQW9COztJQUFwQjtBQURrQjs7RUFNbEI7OztJQUFBLG9CQUFvQjs7SUFBcEI7QUFBb0I7O0VBSXBCOztJQUFBLGtCQUFrQjs7SUFBbEIsNERBQWtCOztJQUNsQixvQkFBb0I7O0lBQXBCO0FBRGtCOztFQU1sQjs7O0lBQUEsa0JBQWtCOztJQUFsQiw0REFBa0I7O0lBQ2xCLG9CQUFvQjs7SUFBcEI7QUFEa0I7O0VBSWhCOztJQUFBLGtCQUFrQjs7SUFBbEIsNERBQWtCOztJQUNsQixvQkFBb0I7O0lBQXBCO0FBRGtCOztFQU1wQjs7SUFBQSwyR0FBVzs7SUFBWCx5R0FBVzs7SUFBWCw0RkFBVzs7SUFDWDtBQURXOztFQUtYOztJQUFBO0FBQVc7O0VBT1g7OztJQUFBLG9CQUFvQjs7SUFBcEIsbURBQW9COztJQUNwQix3QkFBOEI7O0lBQTlCLHNCQUE4Qjs7SUFBOUIsNERBQThCOztJQUM5QixtQkFBZ0I7O0lBQWhCLHNCQUFnQjs7SUFBaEIscUJBQWdCOztJQUFoQixzQkFBZ0I7O0lBQ2hCO0FBSG9COztFQVFwQjs7O0lBQUEsa0JBQWtCOztJQUFsQiw0REFBa0I7O0lBQ2xCLG9CQUFvQjs7SUFBcEI7QUFEa0I7O0VBTWxCOzs7SUFBQSxvQkFBb0I7O0lBQXBCLGdEQUFvQjs7SUFDcEIsc0JBQXNCOztJQUF0QjtBQURvQjs7RUFPcEI7Ozs7SUFBQSxvQkFBb0I7O0lBQXBCLGlEQUFvQjs7SUFDcEIsc0JBQXNCOztJQUF0QjtBQURvQjs7RUFJbEI7O0lBQUEsa0JBQWtCOztJQUFsQiw0REFBa0I7O0lBQ2xCLG9CQUFvQjs7SUFBcEI7QUFEa0IiLCJmaWxlIjoiLi4vcGlzdGFjaGlvL2FwcC9jb21wb25lbnRzL3Bpc3RhY2hpby90YWJzX2NvbXBvbmVudC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuYy10YWJzIHtcbiAgQGFwcGx5IGZsZXg7XG4gIEBhcHBseSBmbGV4LXdyYXA7XG4gIEBhcHBseSBzZWxmLXN0YXJ0O1xuXG4gID4gbGFiZWwsXG4gID4gYSB7XG4gICAgQGFwcGx5IGZsZXg7XG4gICAgQGFwcGx5IGN1cnNvci1wb2ludGVyO1xuICAgIEBhcHBseSB6LTEwO1xuICAgIEBhcHBseSBweC0zIHB5LTI7XG4gICAgQGFwcGx5IGZvbnQtbWVkaXVtIHRleHQtc207XG4gICAgQGFwcGx5IGxlYWRpbmctNTtcbiAgICBAYXBwbHkgcHJpbnQ6aGlkZGVuO1xuXG4gICAgPiBzcGFuIHtcbiAgICAgIEBhcHBseSBpbmxpbmUtYmxvY2s7XG4gICAgICBAYXBwbHkgbWwtMztcbiAgICAgIEBhcHBseSBweC0yLjU7XG4gICAgICBAYXBwbHkgcm91bmRlZC1mdWxsO1xuICAgICAgQGFwcGx5IHRleHQteHMgZm9udC1tZWRpdW0gbGVhZGluZy01O1xuICAgIH1cbiAgfVxuXG4gID4gaW5wdXQge1xuICAgIEBhcHBseSBhYnNvbHV0ZTtcbiAgICBAYXBwbHkgb3BhY2l0eS0wO1xuICB9XG5cbiAgPiBkaXYge1xuICAgIEBhcHBseSBoaWRkZW47XG4gICAgQGFwcGx5IHctZnVsbDtcbiAgICBAYXBwbHkgb3JkZXItbGFzdDtcbiAgICBAYXBwbHkgbXQtcHg7XG4gIH1cblxuICA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCArIGRpdiB7XG4gICAgQGFwcGx5IGJsb2NrO1xuICB9XG5cbiAgJi0tY2FyZHMge1xuICAgID4gbGFiZWwsXG4gICAgPiBhIHtcbiAgICAgIEBhcHBseSByb3VuZGVkLXQtbGc7XG4gICAgICBAYXBwbHkgYm9yZGVyIGJvcmRlci1iLTA7XG4gICAgICBAYXBwbHkgYmctZ3JheS0xMDAgdGV4dC1ncmF5LTYwMDtcbiAgICAgIEBhcHBseSAtbWwtcHggbXItMjtcbiAgICAgIEBhcHBseSBweC00IHB5LTM7XG4gICAgfVxuXG4gICAgPiBsYWJlbCBzcGFuLFxuICAgID4gYSBzcGFuIHtcbiAgICAgIEBhcHBseSBiZy1ncmF5LTIwMDtcbiAgICAgIEBhcHBseSB0ZXh0LWdyYXktOTAwO1xuICAgIH1cblxuICAgID4gbGFiZWw6aG92ZXIsXG4gICAgPiBhOmhvdmVyIHtcbiAgICAgIEBhcHBseSB0ZXh0LWdyYXktODAwO1xuICAgIH1cblxuICAgID4gbGFiZWw6YWN0aXZlIHtcbiAgICAgIEBhcHBseSBiZy13aGl0ZTtcbiAgICAgIEBhcHBseSB0ZXh0LWJsdWUtNzAwO1xuICAgIH1cblxuICAgID4gaW5wdXQ6Y2hlY2tlZCArIGxhYmVsLFxuICAgID4gYS5hY3RpdmUge1xuICAgICAgQGFwcGx5IGJnLXdoaXRlO1xuICAgICAgQGFwcGx5IHRleHQtYmx1ZS03MDA7XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBAYXBwbHkgYmctYmx1ZS0xMDA7XG4gICAgICAgIEBhcHBseSB0ZXh0LWJsdWUtOTAwO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gaW5wdXQ6Zm9jdXMgKyBsYWJlbCB7XG4gICAgICBAYXBwbHkgcmluZztcbiAgICAgIEBhcHBseSB6LTEwO1xuICAgIH1cblxuICAgID4gZGl2IHtcbiAgICAgIEBhcHBseSBtdC0wIHJvdW5kZWQtdC1ub25lO1xuICAgIH1cbiAgfVxuXG4gICYtLXBpbGxzIHtcbiAgICA+IGxhYmVsLFxuICAgID4gYSB7XG4gICAgICBAYXBwbHkgcm91bmRlZC1tZDtcbiAgICAgIEBhcHBseSB0ZXh0LWdyYXktNjAwO1xuICAgIH1cblxuICAgID4gbGFiZWwgc3BhbixcbiAgICA+IGEgc3BhbiB7XG4gICAgICBAYXBwbHkgYmctZ3JheS0yMDA7XG4gICAgICBAYXBwbHkgdGV4dC1ncmF5LTkwMDtcbiAgICB9XG5cbiAgICA+IGxhYmVsOmhvdmVyLFxuICAgID4gYTpob3ZlciB7XG4gICAgICBAYXBwbHkgdGV4dC1ncmF5LTgwMDtcbiAgICB9XG5cbiAgICA+IGxhYmVsOmFjdGl2ZSB7XG4gICAgICBAYXBwbHkgYmctZ3JheS0yMDA7XG4gICAgICBAYXBwbHkgdGV4dC1ncmF5LTgwMDtcbiAgICB9XG5cbiAgICA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCxcbiAgICA+IGEuYWN0aXZlIHtcbiAgICAgIEBhcHBseSBiZy1ncmF5LTIwMDtcbiAgICAgIEBhcHBseSB0ZXh0LWdyYXktODAwO1xuXG4gICAgICBzcGFuIHtcbiAgICAgICAgQGFwcGx5IGJnLWdyYXktMzAwO1xuICAgICAgICBAYXBwbHkgdGV4dC1ncmF5LTYwMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IGlucHV0OmZvY3VzICsgbGFiZWwge1xuICAgICAgQGFwcGx5IHJpbmc7XG4gICAgICBAYXBwbHkgei0xMDtcbiAgICB9XG5cbiAgICA+IGRpdiB7XG4gICAgICBAYXBwbHkgbXQtMjtcbiAgICB9XG4gIH1cblxuICAmLS11bmRlcmxpbmUge1xuICAgID4gbGFiZWwsXG4gICAgPiBhIHtcbiAgICAgIEBhcHBseSB0ZXh0LWdyYXktNTAwO1xuICAgICAgQGFwcGx5IGJvcmRlci1iLTIgYm9yZGVyLXdoaXRlO1xuICAgICAgQGFwcGx5IHB5LTIgcHgtMztcbiAgICAgIEBhcHBseSBtci0yO1xuICAgIH1cblxuICAgID4gbGFiZWwgc3BhbixcbiAgICA+IGEgc3BhbiB7XG4gICAgICBAYXBwbHkgYmctZ3JheS0xMDA7XG4gICAgICBAYXBwbHkgdGV4dC1ncmF5LTkwMDtcbiAgICB9XG5cbiAgICA+IGxhYmVsOmhvdmVyLFxuICAgID4gYTpob3ZlciB7XG4gICAgICBAYXBwbHkgdGV4dC1ncmF5LTcwMDtcbiAgICAgIEBhcHBseSBib3JkZXItZ3JheS0zMDA7XG4gICAgfVxuXG4gICAgPiBsYWJlbDphY3RpdmUsXG4gICAgPiBhLmFjdGl2ZSxcbiAgICA+IGlucHV0OmNoZWNrZWQgKyBsYWJlbCB7XG4gICAgICBAYXBwbHkgdGV4dC1ibHVlLTkwMDtcbiAgICAgIEBhcHBseSBib3JkZXItYmx1ZS02MDA7XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBAYXBwbHkgYmctYmx1ZS0xMDA7XG4gICAgICAgIEBhcHBseSB0ZXh0LWJsdWUtOTAwO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG4iXX0= */", "\n.c-tooltip {\n --background-color: #27272a;\n --border-color: #27272a;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 500;\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n\n overflow: initial;\n max-width: 350px;\n z-index: calc(var(--z-index-top) + 1);\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vdG9vbHRpcHNfY29tcG9uZW50LmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0E7RUFDRSwyQkFBNEM7RUFDNUMsdUJBQXdDO0VBRXhDLG9CQUFnQjtFQUFoQix1QkFBZ0I7RUFBaEIsb0JBQWdCO0VBQWhCLHFCQUFnQjtFQUNoQixtQkFBcUM7RUFBckMsb0JBQXFDO0VBQXJDLGdCQUFxQztFQUFyQyxvQkFBcUM7RUFBckMsbURBQXFDOztFQUVyQyxpQkFBaUI7RUFDakIsZ0JBQWdCO0VBQ2hCLHFDQUFxQztBQUN2QyIsImZpbGUiOiIuLi9waXN0YWNoaW8vYXBwL2NvbXBvbmVudHMvcGlzdGFjaGlvL3Rvb2x0aXBzX2NvbXBvbmVudC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJcbi5jLXRvb2x0aXAge1xuICAtLWJhY2tncm91bmQtY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS44MDAnKTtcbiAgLS1ib3JkZXItY29sb3I6IHRoZW1lKCdjb2xvcnMuZ3JheS44MDAnKTtcblxuICBAYXBwbHkgcHktMSBweC0yO1xuICBAYXBwbHkgdGV4dC1zbSB0ZXh0LXdoaXRlIGZvbnQtbWVkaXVtO1xuXG4gIG92ZXJmbG93OiBpbml0aWFsO1xuICBtYXgtd2lkdGg6IDM1MHB4O1xuICB6LWluZGV4OiBjYWxjKHZhcigtLXotaW5kZXgtdG9wKSArIDEpO1xufVxuIl19 */", ".c-unsupported-browser {\n /* No magic and no Tailwind here, we want this to work in all the old crappy browsers. */\n\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n border-bottom: 1px solid #e4e4e7;\n padding: 8em 1em;\n z-index: 10000;\n font-size: 24px;\n font-weight: 700;\n text-align: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;\n color: #000;\n background-color: #fff;\n}\n\n .c-unsupported-browser__banner {\n position: relative;\n height: initial;\n width: initial;\n padding: 4em 1em;\n background: #fef9c3;\n border-bottom: 1px solid #fef08a;\n }\n\n .c-unsupported-browser a {\n text-decoration: underline;\n color: #000;\n }\n\n .c-unsupported-browser p {\n margin: 0 auto;\n max-width: 975px;\n }\n\n .c-unsupported-browser table {\n width: auto;\n margin: 0 auto;\n margin-top: 2em;\n }\n\n .c-unsupported-browser table td {\n padding: 0 1em;\n }\n\n @media (max-width: 767px) {\n\n .c-unsupported-browser table td {\n\n padding-top: 0px;\n\n padding-bottom: 0px;\n\n padding-left: 0.75rem;\n\n padding-right: 0.75rem;\n\n font-size: 1rem;\n\n line-height: 1.5rem;\n }\n\n .c-unsupported-browser table td img {\n\n height: 2.25rem;\n\n width: 2.25rem;\n }\n}\n\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3Bpc3RhY2hpby9hcHAvY29tcG9uZW50cy9waXN0YWNoaW8vdW5zdXBwb3J0ZWRfYnJvd3Nlcl9jb21wb25lbnQuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0Usd0ZBQXdGOztFQUV4RixlQUFlO0VBQ2YsV0FBVztFQUNYLFlBQVk7RUFDWixNQUFNO0VBQ04sZ0NBQWlEO0VBQ2pELGdCQUFnQjtFQUNoQixjQUFjO0VBQ2QsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixrQkFBa0I7RUFDbEIsZ0lBQWdJO0VBQ2hJLFdBQVc7RUFDWCxzQkFBc0I7QUFxQ3hCOztFQW5DRTtJQUNFLGtCQUFrQjtJQUNsQixlQUFlO0lBQ2YsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixtQkFBc0M7SUFDdEMsZ0NBQW1EO0VBQ3JEOztFQUVBO0lBQ0UsMEJBQTBCO0lBQzFCLFdBQVc7RUFDYjs7RUFFQTtJQUNFLGNBQWM7SUFDZCxnQkFBZ0I7RUFDbEI7O0VBRUE7SUFDRSxXQUFXO0lBQ1gsY0FBYztJQUNkLGVBQWU7RUFZakI7O0VBVkU7TUFDRSxjQUFjO0lBUWhCOztFQU5FOztFQUFBOztJQUFBLGdCQUFzQjs7SUFBdEIsbUJBQXNCOztJQUF0QixxQkFBc0I7O0lBQXRCLHNCQUFzQjs7SUFDdEIsZUFBbUI7O0lBQW5CO0VBRHNCOztFQUlwQjs7SUFBQSxlQUFvQjs7SUFBcEI7RUFBb0I7QUFKQSIsImZpbGUiOiIuLi9waXN0YWNoaW8vYXBwL2NvbXBvbmVudHMvcGlzdGFjaGlvL3Vuc3VwcG9ydGVkX2Jyb3dzZXJfY29tcG9uZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi5jLXVuc3VwcG9ydGVkLWJyb3dzZXIge1xuICAvKiBObyBtYWdpYyBhbmQgbm8gVGFpbHdpbmQgaGVyZSwgd2Ugd2FudCB0aGlzIHRvIHdvcmsgaW4gYWxsIHRoZSBvbGQgY3JhcHB5IGJyb3dzZXJzLiAqL1xuXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgdG9wOiAwO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdGhlbWUoJ2NvbG9ycy5ncmF5LjIwMCcpO1xuICBwYWRkaW5nOiA4ZW0gMWVtO1xuICB6LWluZGV4OiAxMDAwMDtcbiAgZm9udC1zaXplOiAyNHB4O1xuICBmb250LXdlaWdodDogNzAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogIzAwMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblxuICAmX19iYW5uZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IGluaXRpYWw7XG4gICAgd2lkdGg6IGluaXRpYWw7XG4gICAgcGFkZGluZzogNGVtIDFlbTtcbiAgICBiYWNrZ3JvdW5kOiB0aGVtZSgnY29sb3JzLnllbGxvdy4xMDAnKTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdGhlbWUoJ2NvbG9ycy55ZWxsb3cuMjAwJyk7XG4gIH1cblxuICBhIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBjb2xvcjogIzAwMDtcbiAgfVxuXG4gIHAge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIG1heC13aWR0aDogOTc1cHg7XG4gIH1cblxuICB0YWJsZSB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgbWFyZ2luLXRvcDogMmVtO1xuXG4gICAgdGQge1xuICAgICAgcGFkZGluZzogMCAxZW07XG5cbiAgICAgIEBhcHBseSBzbTpweS0wIHNtOnB4LTM7XG4gICAgICBAYXBwbHkgc206dGV4dC1iYXNlO1xuXG4gICAgICBpbWcge1xuICAgICAgICBAYXBwbHkgc206dy05IHNtOmgtOTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ== */", "\n import * as module0 from './pistachio/button_component.css';import * as module1 from './pistachio/button_group_component.css';import * as module2 from './pistachio/button_group_select_component.css';import * as module3 from './pistachio/date_picker_component.css';import * as module4 from './pistachio/dropdown_component.css';import * as module5 from './pistachio/form/password_input_component.css';import * as module6 from './pistachio/grid_picker_component.css';import * as module7 from './pistachio/icon_component.css';import * as module8 from './pistachio/label_component.css';import * as module9 from './pistachio/modal_component.css';import * as module10 from './pistachio/multi_select_component.css';import * as module11 from './pistachio/notice_component.css';import * as module12 from './pistachio/popovers_component.css';import * as module13 from './pistachio/search_field_component.css';import * as module14 from './pistachio/select_component.css';import * as module15 from './pistachio/suggestions_component.css';import * as module16 from './pistachio/table_component.css';import * as module17 from './pistachio/tabs_component.css';import * as module18 from './pistachio/tooltips_component.css';import * as module19 from './pistachio/unsupported_browser_component.css'\n\n const modules = [module0,module1,module2,module3,module4,module5,module6,module7,module8,module9,module10,module11,module12,module13,module14,module15,module16,module17,module18,module19];\n\n export default modules;\n export const filenames = ['./pistachio/button_component.css','./pistachio/button_group_component.css','./pistachio/button_group_select_component.css','./pistachio/date_picker_component.css','./pistachio/dropdown_component.css','./pistachio/form/password_input_component.css','./pistachio/grid_picker_component.css','./pistachio/icon_component.css','./pistachio/label_component.css','./pistachio/modal_component.css','./pistachio/multi_select_component.css','./pistachio/notice_component.css','./pistachio/popovers_component.css','./pistachio/search_field_component.css','./pistachio/select_component.css','./pistachio/suggestions_component.css','./pistachio/table_component.css','./pistachio/tabs_component.css','./pistachio/tooltips_component.css','./pistachio/unsupported_browser_component.css']\n ", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "/*\nStimulus Webpack Helpers 1.0.0\nCopyright \u00A9 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n", "\n \n\n const modules = [];\n\n export default modules;\n export const filenames = []\n ", "import { Controller } from \"@hotwired/stimulus\"\n\n// Handles clicks on buttons with data-turbo-method and disables\n// them while the request is being processed.\nexport default class extends Controller {\n BUTTON_SELECTOR = \"a.c-button[data-turbo-method]:not([data-turbo-confirm])\"\n SUBMITTING_SELECTOR = \"a.c-button[data-submitting]\"\n\n connect() {\n document.addEventListener(\"click\", this.onClick.bind(this))\n document.addEventListener(\"turbo:submit-end\", this.onSubmitEnd.bind(this))\n }\n\n onClick(event) {\n const button = event.target.closest(this.BUTTON_SELECTOR)\n\n if(!button) {\n return\n }\n\n if(button.hasAttribute(\"data-submitting\")) {\n event.preventDefault()\n return false\n }\n else {\n // Add data-turbo=\"false\" so that Turbo doesn't handle future clicks\n button.dataset.turbo = false\n button.dataset.submitting = true\n button.classList.add(\"disabled\")\n }\n }\n\n // As turbo doesn't have a way to retrieve the submitter for a form link\n // we listen for the turbo:submit-end event and remove the submitting state\n // from all buttons with the data-submitting attribute.\n onSubmitEnd(event) {\n document.querySelectorAll(this.SUBMITTING_SELECTOR).forEach(button => {\n delete button.dataset.turbo\n delete button.dataset.submitting\n button.classList.remove(\"disabled\")\n })\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = [\n 'button',\n 'input',\n ]\n\n connect() {\n this.value = this.inputTargets.find(input => input.checked).value\n this.update()\n }\n\n onSelect(event) {\n this.value = event.target.value\n this.update()\n }\n\n update() {\n this.buttonTargets.forEach(button => {\n button.classList.toggle('active', button.dataset.value == this.value)\n })\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Helpers } from \"../../../../utils/helpers\"\n\nexport default class extends Controller {\n static targets = [\n \"modal\",\n \"message\",\n \"title\",\n \"ok\",\n \"cancel\",\n ]\n\n connect() {\n if (window.Turbo) {\n window.Turbo.config.forms.confirm = this.confirm.bind(this)\n }\n }\n\n confirm(confirm, element, submitter) {\n if(!submitter) {\n submitter = document.querySelector(`[data-turbo-confirm=\"${confirm}\"]`)\n }\n\n if(!submitter) {\n throw new Error(\"No submitter for confirm dialog, make sure you don't use data-turbo-confirm on a non-submitting element (e.g. )\")\n }\n\n if(element.disabled) {\n return false\n }\n\n this.confirmElement = submitter\n\n this.messageTarget.innerHTML = submitter.getAttribute(\"data-confirm-message\")\n this.titleTarget.innerHTML = submitter.getAttribute(\"data-confirm-title\")\n\n this.okTarget.innerHTML = submitter.getAttribute(\"data-confirm-ok\")\n this.okTarget.className = `c-button ${submitter.getAttribute(\"data-confirm-ok-class\")}`\n\n this.cancelTarget.innerHTML = submitter.getAttribute(\"data-confirm-cancel\")\n this.cancelTarget.className = `c-button c-button--secondary ${submitter.getAttribute(\"data-confirm-cancel-class\")}`\n\n Helpers.emit(this.modalTarget, \"modal:open!\")\n }\n\n ok() {\n Helpers.emit(this.modalTarget, \"modal:close!\")\n\n if (this.confirmElement) {\n this.confirmElement.removeAttribute(\"data-turbo-confirm\")\n this.confirmElement.click()\n }\n }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport { Helpers } from '../../../../utils/helpers'\n\nexport default class extends Controller {\n static targets = [\n 'minDate',\n 'maxDate',\n 'dateMustBeWithinRange',\n 'dateMustBeAfterRange',\n ]\n\n connect() {\n this.minDateTarget.addEventListener('date:set', (event) => this.setMinDate(event.detail))\n this.maxDateTarget.addEventListener('date:set', (event) => this.setMaxDate(event.detail))\n }\n\n disconnect() {\n }\n\n setMinDate(date) {\n // setting min sets the minimum on max\n if (date) {\n this.maxDateTarget.dataset.datePickerMinimumDate = date\n } else {\n delete this.maxDateTarget.dataset.datePickerMinimumDate\n }\n Helpers.emit(this.maxDateTarget, 'date:update!')\n\n this.minDate = date\n this.updateFieldsRestrictedByRange()\n }\n\n setMaxDate(date) {\n // setting max date does nothing for the minimum (minimum has 'free range')\n\n // additional dates might be restricted by this date range min/max\n this.maxDate = date\n\n this.updateFieldsRestrictedByRange()\n }\n\n updateFieldsRestrictedByRange() {\n this.dateMustBeWithinRangeTargets.forEach(dateField => {\n if (this.minDate) {\n dateField.setAttribute('data-date-picker-minimum-date', this.minDate)\n } else {\n dateField.removeAttribute('data-date-picker-minimum-date')\n }\n\n if (this.maxDate) {\n dateField.setAttribute('data-date-picker-maximum-date', this.maxDate)\n } else {\n dateField.removeAttribute('data-date-picker-maximum-date')\n }\n\n Helpers.emit(dateField, 'date:update!')\n })\n\n this.dateMustBeAfterRangeTargets.forEach(dateField => {\n if (this.minDate || this.maxDate) {\n dateField.setAttribute('data-date-picker-minimum-date', this.maxDate || this.minDate)\n } else {\n dateField.removeAttribute('data-date-picker-minimum-date')\n }\n\n Helpers.emit(dateField, 'date:update!')\n })\n }\n}\n", "/* flatpickr v4.6.13, @license MIT */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.flatpickr = factory());\n}(this, (function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation.\r\n\r\n Permission to use, copy, modify, and/or distribute this software for any\r\n purpose with or without fee is hereby granted.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n PERFORMANCE OF THIS SOFTWARE.\r\n ***************************************************************************** */\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\r\n\r\n function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n }\n\n var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n ];\n var defaults = {\n _disable: [],\n allowInput: false,\n allowInvalidPreload: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n autoFillDefaultTime: true,\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n // Thursday in current week decides the year.\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n // January 4 is always in week 1.\n var week1 = new Date(date.getFullYear(), 0, 4);\n // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n monthSelectorType: \"dropdown\",\n nextArrow: \"\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false,\n };\n\n var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n monthAriaLabel: \"Month\",\n hourAriaLabel: \"Hour\",\n minuteAriaLabel: \"Minute\",\n time_24hr: false,\n };\n\n var pad = function (number, length) {\n if (length === void 0) { length = 2; }\n return (\"000\" + number).slice(length * -1);\n };\n var int = function (bool) { return (bool === true ? 1 : 0); };\n /* istanbul ignore next */\n function debounce(fn, wait) {\n var t;\n return function () {\n var _this = this;\n var args = arguments;\n clearTimeout(t);\n t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n };\n }\n var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n };\n\n function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n }\n function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n }\n function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n }\n function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined; // nothing found\n }\n function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n }\n function getEventTarget(event) {\n try {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n catch (error) {\n return event.target;\n }\n }\n\n var doNothing = function () { return undefined; };\n var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n },\n };\n var tokenRegex = {\n D: \"\",\n F: \"\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\",\n };\n var formats = {\n // get the date in UTC\n Z: function (date) { return date.toISOString(); },\n // weekday name, short, e.g. Thu\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n // full month name e.g. January\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n // padded hour 1-12\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n // hours with leading zero e.g. 03\n H: function (date) { return pad(date.getHours()); },\n // day (1-30) with ordinal suffix e.g. 1st, 2nd\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n // AM/PM\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n // shorthand month e.g. Jan, Sep, Oct, etc\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n // seconds 00-59\n S: function (date) { return pad(date.getSeconds()); },\n // unix timestamp\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n // full year e.g. 2016, padded (0001-9999)\n Y: function (date) { return pad(date.getFullYear(), 4); },\n // day in month, padded (01-30)\n d: function (date) { return pad(date.getDate()); },\n // hour from 1-12 (am/pm)\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n // minutes, padded with leading zero e.g. 09\n i: function (date) { return pad(date.getMinutes()); },\n // day in month (1-30)\n j: function (date) { return date.getDate(); },\n // weekday name, full, e.g. Thursday\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n // padded month number (01-12)\n m: function (date) { return pad(date.getMonth() + 1); },\n // the month number (1-12)\n n: function (date) { return date.getMonth() + 1; },\n // seconds 0-59\n s: function (date) { return date.getSeconds(); },\n // Unix Milliseconds\n u: function (date) { return date.getTime(); },\n // number of the day of the week\n w: function (date) { return date.getDay(); },\n // last two digits of year e.g. 16 for 2016\n y: function (date) { return String(date.getFullYear()).substring(2); },\n };\n\n var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined && !isMobile) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n };\n var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined // timestamp\n )\n // create a copy\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n // date string\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (config && config.parseDate) {\n parsedDate = config.parseDate(date, format);\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr) // datestrings w/ timezone\n ) {\n parsedDate = new Date(date);\n }\n else {\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token_1 = format[i];\n var isBackSlash = token_1 === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token_1] && !escaped) {\n regexStr += tokenRegex[token_1];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token_1],\n val: match[++matchIndex],\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\"; // don't really care\n }\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n /* istanbul ignore next */\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n };\n /**\n * Compute the difference in dates, measured in ms\n */\n function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n }\n var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n };\n var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n return hours * 3600 + minutes * 60 + seconds;\n };\n var parseSeconds = function (secondsSinceMidnight) {\n var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n };\n var duration = {\n DAY: 86400000,\n };\n function getDefaultHours(config) {\n var hours = config.defaultHour;\n var minutes = config.defaultMinute;\n var seconds = config.defaultSeconds;\n if (config.minDate !== undefined) {\n var minHour = config.minDate.getHours();\n var minMinutes = config.minDate.getMinutes();\n var minSeconds = config.minDate.getSeconds();\n if (hours < minHour) {\n hours = minHour;\n }\n if (hours === minHour && minutes < minMinutes) {\n minutes = minMinutes;\n }\n if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n seconds = config.minDate.getSeconds();\n }\n if (config.maxDate !== undefined) {\n var maxHr = config.maxDate.getHours();\n var maxMinutes = config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = config.maxDate.getSeconds();\n }\n return { hours: hours, minutes: minutes, seconds: seconds };\n }\n\n if (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n }\n\n var DEBOUNCED_CHANGE_MS = 300;\n function FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign(__assign({}, defaults), flatpickr.defaultConfig),\n l10n: english,\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self.onMouseOver = onMouseOver;\n self._createElement = createElement;\n self.createDay = createDay;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.updateValue = updateValue;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n },\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n /* TODO: investigate this further\n \n Currently, there is weird positioning behavior in safari causing pages\n to scroll up. https://github.com/chmln/flatpickr/issues/563\n \n However, most browsers are not Safari and positioning is expensive when used\n in scale. https://github.com/chmln/flatpickr/issues/1096\n */\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function getClosestActiveElement() {\n var _a;\n return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n .activeElement || document.activeElement);\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1) {\n return;\n }\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n /**\n * The handler for all events targeting the time inputs\n */\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n var defaultDate = self.config.minDate === undefined ||\n compareDates(new Date(), self.config.minDate) >= 0\n ? new Date()\n : new Date(self.config.minDate.getTime());\n var defaults = getDefaultHours(self.config);\n defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n self.selectedDates = [defaultDate];\n self.latestSelectedDateObj = defaultDate;\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n /**\n * Syncs the selected date object time with user's time input\n */\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (self.config.maxTime !== undefined &&\n self.config.minTime !== undefined &&\n self.config.minTime > self.config.maxTime) {\n var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n if (currentTime > maxBound && currentTime < minBound) {\n var result = parseSeconds(minBound);\n hours = result[0];\n minutes = result[1];\n seconds = result[2];\n }\n }\n else {\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n minutes = minTime.getMinutes();\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Syncs time input values with a date\n */\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date && date instanceof Date) {\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n }\n /**\n * Sets the hours, minutes, and optionally seconds\n * of the latest selected date object and the\n * corresponding time inputs\n * @param {Number} hours the hour. whether its military\n * or am-pm gets inferred from config\n * @param {Number} minutes the minutes\n * @param {Number} seconds the seconds (optional)\n */\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n /**\n * Handles the year input and incrementing events\n * @param {Event} event the keyup or increment event\n */\n function onYearInput(event) {\n var eventTarget = getEventTarget(event);\n var year = parseInt(eventTarget.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n /**\n * Essentially addEventListener + tracking\n * @param {Element} element the element to addEventListener to\n * @param {String} event the event name\n * @param {Function} handler the event handler\n */\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n remove: function () { return element.removeEventListener(event, handler, options); },\n });\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n /**\n * Adds all the necessary event listeners\n */\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(getEventTarget(e));\n });\n bind(self._input, \"keydown\", onKeyDown);\n if (self.calendarContainer !== undefined) {\n bind(self.calendarContainer, \"keydown\", onKeyDown);\n }\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", documentClick);\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"click\", onMonthNavClick);\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"click\", selectDate);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return getEventTarget(e).select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"click\", timeIncrement);\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"click\", function (e) {\n updateTime(e);\n });\n }\n }\n if (self.config.allowInput) {\n bind(self._input, \"blur\", onBlur);\n }\n }\n /**\n * Set the calendar view to a particular date.\n * @param {Date} jumpDate the date to set the view to\n * @param {boolean} triggerChange if change events should be triggered\n */\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n /* istanbul ignore next */\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n /**\n * The up/down arrow handler for time inputs\n * @param {Event} e the click event\n */\n function timeIncrement(e) {\n var eventTarget = getEventTarget(e);\n if (~eventTarget.className.indexOf(\"arrow\"))\n incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n /**\n * Increments/decrements the value of input associ-\n * ated with the up/down arrow by dispatching an\n * \"increment\" event on the input.\n *\n * @param {Event} e the click event\n * @param {Number} delta the diff (usually 1 or -1)\n * @param {Element} inputElem the input element\n */\n function incrementNumInput(e, delta, inputElem) {\n var target = e && getEventTarget(e);\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, _dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n i % 7 === 6) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"\" + self.config.getWeek(date) + \"\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var activeElement = getClosestActiveElement();\n var dayFocused = isInView(activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined) {\n self._input.focus();\n }\n else if (!dayFocused) {\n focusOnDayElem(startElem);\n }\n else {\n getNextAvailableDay(startElem, offset);\n }\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n // prepend days from the ending of previous month\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n // Start at 1 since there is no 0th day\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n // append days from the next month\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n //updateNavigationCurrentMonth();\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n // TODO: week numbers for each month\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType !== \"dropdown\")\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = getEventTarget(e);\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement,\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n },\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n },\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n var defaults = getDefaultHours(self.config);\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\", {\n \"aria-label\": self.l10n.hourAriaLabel,\n });\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\", {\n \"aria-label\": self.l10n.minuteAriaLabel,\n });\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? defaults.hours\n : military2ampm(defaults.hours));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : defaults.minutes);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.hourElement.setAttribute(\"maxlength\", \"2\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.minuteElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : defaults.seconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.secondElement.setAttribute(\"maxlength\", \"2\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n // add self.amPM if appropriate\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n if (!self.weekdayContainer) {\n return;\n }\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n \\n \" + weekdays.join(\"\") + \"\\n \\n \";\n }\n }\n /* istanbul ignore next */\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers,\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n if (self.config.enableTime === true) {\n var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n setHours(hours, minutes, seconds);\n }\n self.redraw();\n if (triggerChangeEvent)\n // triggerChangeEvent is true (default) or an Event\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n self._handlers[i].remove();\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n // web components\n // e.path is not present in all browsers. circumventing typechecks\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n if (self.config.allowInput) {\n self.setDate(self._input.value, false, self.config.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined &&\n self.input.value !== \"\" &&\n self.input.value !== undefined) {\n updateTime();\n }\n self.close();\n if (self.config &&\n self.config.mode === \"range\" &&\n self.selectedDates.length === 1)\n self.clear(false);\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n var _a;\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless); // timeless\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (!self.config.enable && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck) // disabled by function\n )\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n // disabled by date\n return bool;\n else if (typeof d === \"string\") {\n // disabled by date string\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (\n // disabled by range\n typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onBlur(e) {\n var isInput = e.target === self._input;\n var valueChanged = self._input.value.trimEnd() !== getDateStr();\n if (isInput &&\n valueChanged &&\n !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n }\n }\n function onKeyDown(e) {\n // e.key e.keyCode\n // \"Backspace\" 8\n // \"Tab\" 9\n // \"Enter\" 13\n // \"Escape\" (IE \"Esc\") 27\n // \"ArrowLeft\" (IE \"Left\") 37\n // \"ArrowUp\" (IE \"Up\") 38\n // \"ArrowRight\" (IE \"Right\") 39\n // \"ArrowDown\" (IE \"Down\") 40\n // \"Delete\" (IE \"Del\") 46\n var eventTarget = getEventTarget(e);\n var isInput = self.config.wrap\n ? element.contains(eventTarget)\n : eventTarget === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, eventTarget === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n self.close();\n return eventTarget.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(eventTarget) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(eventTarget);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27: // escape\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n var activeElement = getClosestActiveElement();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (activeElement && isInView(activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer &&\n eventTarget.$i !== undefined) ||\n eventTarget === self.input ||\n eventTarget === self.altInput) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (eventTarget === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(eventTarget);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(eventTarget) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n }\n }\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(eventTarget)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem, cellClass) {\n if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(cellClass) ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n hoverableCells.forEach(function (dayElem) {\n var date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return;\n }\n else if (containsDisabled && !outOfRange)\n return;\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n });\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n var eventTarget = getEventTarget(e);\n if (eventTarget) {\n eventTarget.blur();\n }\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n else if (self._input.disabled || self.config.inline) {\n return;\n }\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"allowInvalidPreload\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n },\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n },\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\"),\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\"),\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\"),\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n // https://github.com/microsoft/TypeScript/issues/31663\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n getInputElem().className + \" \" + self.config.altInputClass;\n }\n triggerEvent(\"onParseConfig\");\n }\n function getInputElem() {\n return self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (typeof self.config.position === \"function\") {\n return void self.config.position(self, customPositionElement);\n }\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset + inputBounds.left;\n var isCenter = false;\n var isRight = false;\n if (configPosHorizontal === \"center\") {\n left -= (calendarWidth - inputBounds.width) / 2;\n isCenter = true;\n }\n else if (configPosHorizontal === \"right\") {\n left -= calendarWidth - inputBounds.width;\n isRight = true;\n }\n toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n var right = window.document.body.offsetWidth -\n (window.pageXOffset + inputBounds.right);\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = getDocumentStyleSheet();\n // some testing environments don't have css support\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function getDocumentStyleSheet() {\n var editableSheet = null;\n for (var i = 0; i < document.styleSheets.length; i++) {\n var sheet = document.styleSheets[i];\n if (!sheet.cssRules)\n continue;\n try {\n sheet.cssRules;\n }\n catch (err) {\n continue;\n }\n editableSheet = sheet;\n break;\n }\n return editableSheet != null ? editableSheet : createStyleSheet();\n }\n function createStyleSheet() {\n var style = document.createElement(\"style\");\n document.head.appendChild(style);\n return style.sheet;\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n buildMonthSwitch();\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n // hack - bugs in the way IE handles focus keeps the calendar open\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(getEventTarget(e), isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n // unless selecting same date twice, sort ascendingly\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n // maintain focus\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate],\n positionElement: [updatePositionElement],\n clickOpens: [\n function () {\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"click\", self.open);\n }\n else {\n self._input.removeEventListener(\"focus\", self.open);\n self._input.removeEventListener(\"click\", self.open);\n }\n },\n ],\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(true);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = (self.config.allowInvalidPreload\n ? dates\n : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.latestSelectedDateObj =\n self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate(undefined, triggerChange);\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined),\n };\n return rule;\n })\n .filter(function (x) { return x; }); // remove falsy values\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n // Workaround IE11 setting placeholder as the input's value\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n }\n function setupInputs() {\n self.input = getInputElem();\n /* istanbul ignore next */\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n // hack: store previous type to restore it after destroy()\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n // replicate self.element\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n updatePositionElement();\n }\n function updatePositionElement() {\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n if (self.input.getAttribute(\"step\"))\n self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n // If the instance has been destroyed already, all hooks have been removed\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n // many front-end frameworks bind to the input event\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n var selectedDate = self.selectedDates[i];\n if (selectedDate instanceof Date &&\n compareDates(selectedDate, date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1 ||\n self.config.monthSelectorType === \"static\") {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(specificFormat) {\n var format = specificFormat ||\n (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n /**\n * Updates the values of inputs associated with the calendar\n */\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var eventTarget = getEventTarget(e);\n var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n var isNextMonth = self.nextMonthNav.contains(eventTarget);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(eventTarget) >= 0) {\n eventTarget.select();\n }\n else if (eventTarget.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (eventTarget.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n if (self.amPM !== undefined && eventTarget === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n }\n /* istanbul ignore next */\n function _flatpickr(nodeList, config) {\n // static list\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n }\n /* istanbul ignore next */\n if (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n // browser env\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n }\n /* istanbul ignore next */\n var flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n };\n /* istanbul ignore next */\n flatpickr.defaultConfig = {};\n flatpickr.l10ns = {\n en: __assign({}, english),\n default: __assign({}, english),\n };\n flatpickr.localize = function (l10n) {\n flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n };\n flatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n };\n flatpickr.parseDate = createDateParser({});\n flatpickr.formatDate = createDateFormatter({});\n flatpickr.compareDates = compareDates;\n /* istanbul ignore next */\n if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n }\n Date.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n };\n if (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n }\n\n return flatpickr;\n\n})));\n", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.labelPlugin = factory());\n}(this, (function () { 'use strict';\n\n function labelPlugin() {\n return function (fp) {\n return {\n onReady: function () {\n var id = fp.input.id;\n if (!id) {\n return;\n }\n if (fp.mobileInput) {\n fp.input.removeAttribute(\"id\");\n fp.mobileInput.id = id;\n }\n else if (fp.altInput) {\n fp.input.removeAttribute(\"id\");\n fp.altInput.id = id;\n }\n fp.loadedPlugins.push(\"labelPlugin\");\n },\n };\n };\n }\n\n return labelPlugin;\n\n})));\n", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.de = {}));\n}(this, (function (exports) { 'use strict';\n\n var fp = typeof window !== \"undefined\" && window.flatpickr !== undefined\n ? window.flatpickr\n : {\n l10ns: {},\n };\n var German = {\n weekdays: {\n shorthand: [\"So\", \"Mo\", \"Di\", \"Mi\", \"Do\", \"Fr\", \"Sa\"],\n longhand: [\n \"Sonntag\",\n \"Montag\",\n \"Dienstag\",\n \"Mittwoch\",\n \"Donnerstag\",\n \"Freitag\",\n \"Samstag\",\n ],\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"M\u00E4r\",\n \"Apr\",\n \"Mai\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Okt\",\n \"Nov\",\n \"Dez\",\n ],\n longhand: [\n \"Januar\",\n \"Februar\",\n \"M\u00E4rz\",\n \"April\",\n \"Mai\",\n \"Juni\",\n \"Juli\",\n \"August\",\n \"September\",\n \"Oktober\",\n \"November\",\n \"Dezember\",\n ],\n },\n firstDayOfWeek: 1,\n weekAbbreviation: \"KW\",\n rangeSeparator: \" bis \",\n scrollTitle: \"Zum \u00C4ndern scrollen\",\n toggleTitle: \"Zum Umschalten klicken\",\n time_24hr: true,\n };\n fp.l10ns.de = German;\n var de = fp.l10ns;\n\n exports.German = German;\n exports.default = de;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "import { Controller } from '@hotwired/stimulus'\nimport flatpickr from 'flatpickr/dist/flatpickr'\nimport labelPlugin from 'flatpickr/dist/plugins/labelPlugin/labelPlugin'\nimport 'flatpickr/dist/l10n/de'\n\nimport { Helpers } from '../../../utils/helpers'\n\nexport default class extends Controller {\n DATE_FORMATS = {\n default: 'D, j. M Y',\n short: 'd.m.Y',\n }\n\n connect() {\n flatpickr(this.element, {\n locale: window.lang || 'de',\n dateFormat: 'Y-m-d', // ISO\n altInput: true,\n altInputClass: this.altInputClass,\n altFormat: this.dateFormat,\n ariaDateFormat: this.dateFormat,\n allowInput: this.allowInput,\n now: new Date(),\n position: this.element.dataset.datePickerPosition || 'below center',\n disableMobile: this.element.dataset.datePickerDisableOnMobile,\n appendTo: this.appendTo,\n plugins: [new labelPlugin()],\n onReady: (selectedDates, dateStr, instance) => {\n this.picker = instance\n this.registerEvents()\n this.update()\n\n // initial set\n Helpers.emit(this.element, 'date:set', dateStr)\n },\n onChange: (selectedDates, dateStr, instance) => {\n // changed\n Helpers.emit(this.element, 'date:changed', dateStr)\n // as well as set\n Helpers.emit(this.element, 'date:set', dateStr)\n },\n })\n\n return false\n }\n\n disconnect() {\n this.picker.destroy()\n }\n\n\n registerEvents() {\n // Listen to custom events\n this.element.addEventListener('date:set!', (event) => {\n const date = Helpers.dateFromISO(event.detail)\n\n // date:set! should always override range limits imposed by minDate/maxDate\n // (i.e.setting both start_end and end_date at the same time should ignore ranges,\n // since the ranges are updated AFTER the new dates have been set, which would clear\n // the new end_date since it does not fall in the old range)\n const minDate = this.picker.config.minDate\n if (date && minDate && date < minDate) {\n this.picker.set('minDate', date)\n }\n\n const maxDate = this.picker.config.maxDate\n if (date && maxDate && date > maxDate) {\n this.picker.set('maxDate', date)\n }\n\n this.picker.setDate(date, true) // true => trigger onChange\n })\n this.element.addEventListener('date:toggle!', () => this.toggle())\n this.element.addEventListener('date:update!', () => this.update())\n this.element.addEventListener('date:clear!', () => this.clear())\n }\n\n update() {\n // check disabled\n this.picker._input.disabled = this.element.disabled\n\n const selectedDate = Helpers.dateToISO(this.picker.selectedDates[0])\n\n // check min/max\n const minDate = this.element.dataset.datePickerMinimumDate\n const maxDate = this.element.dataset.datePickerMaximumDate\n\n if (minDate && selectedDate < minDate) {\n this.picker.setDate(minDate, true) // true => trigger onChange\n }\n\n if (maxDate && selectedDate > maxDate) {\n this.picker.setDate(maxDate, true) // true => trigger onChange\n }\n\n this.picker.set('minDate', minDate)\n this.picker.set('maxDate', maxDate)\n }\n\n toggle() {\n this.picker.toggle()\n }\n\n clear() {\n this.picker.clear()\n }\n\n get appendTo() {\n const selector = this.element.dataset.datePickerAppendSelector\n if (!selector) return\n return document.querySelector(selector)\n }\n\n get dateFormat() {\n const format = this.element.dataset.datePickerFormat || 'default'\n return this.DATE_FORMATS[format]\n }\n\n get allowInput() {\n return ('allowInput' in this.element.dataset)\n }\n}\n", "/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n", "import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element \u2014\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n", "function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n return [':popover-open', ':modal'].some(selector => {\n try {\n return element.matches(selector);\n } catch (e) {\n return false;\n }\n });\n}\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n", "import { rectToClientRect, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {\n if (ignoreScrollbarX === void 0) {\n ignoreScrollbarX = false;\n }\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :\n // RTL scrollbar.\n getWindowScrollBarX(documentElement, htmlRect));\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n // If the scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the element as the offsetParent if it's non-static,\n // while Chrome and Safari return the element. The element must\n // be used to perform the correct calculations even if the element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle