{ "version": 3, "sources": ["../../../../../shared/node_modules/@rails/actioncable/src/adapters.js", "../../../../../shared/node_modules/@rails/actioncable/src/logger.js", "../../../../../shared/node_modules/@rails/actioncable/src/connection_monitor.js", "../../../../../shared/node_modules/@rails/actioncable/src/internal.js", "../../../../../shared/node_modules/@rails/actioncable/src/connection.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscription.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../../../shared/node_modules/@rails/actioncable/src/subscriptions.js", "../../../../../shared/node_modules/@rails/actioncable/src/consumer.js", "../../../../../shared/node_modules/@rails/actioncable/src/index.js", "../../../../../shared/node_modules/debounce/index.js", "../../javascript/controllers/search_controller.js", "../../../../../shared/node_modules/slim-select/dist/slimselect.js", "../../../../../shared/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../../../shared/node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../../../../shared/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/category_filter_controller.js", "../../javascript/controllers/clipboard_controller.js", "../../javascript/controllers/closable_controller.js", "../../javascript/controllers/compare_controller.js", "../../javascript/controllers/dismissable_controller.js", "../../javascript/utils/transitions.js", "../../javascript/controllers/dropdown_controller.js", "../../javascript/controllers/external_link_controller.js", "../../javascript/controllers/fade_out_controller.js", "../../javascript/controllers/filter_controller.js", "../../javascript/controllers/flash_controller.js", "../../javascript/controllers/modal_controller.js", "../../../../../shared/node_modules/@popperjs/core/lib/enums.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/math.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/within.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../../../shared/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../../../shared/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/debounce.js", "../../../../../shared/node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../../../shared/node_modules/@popperjs/core/lib/createPopper.js", "../../../../../shared/node_modules/@popperjs/core/lib/popper.js", "../../javascript/controllers/popper_controller.js", "../../javascript/controllers/rotating_dropdown_controller.js", "../../javascript/controllers/scroll_spy_controller.js", "../../javascript/controllers/index.js", "../../javascript/controllers/show_more_controller.js", "../../javascript/controllers/slideover_controller.js", "../../javascript/controllers/slim_select_controller.js", "../../../../../shared/node_modules/swiper/shared/ssr-window.esm.mjs", "../../../../../shared/node_modules/swiper/shared/utils.mjs", "../../../../../shared/node_modules/swiper/shared/swiper-core.mjs", "../../../../../shared/node_modules/swiper/modules/virtual.mjs", "../../../../../shared/node_modules/swiper/modules/keyboard.mjs", "../../../../../shared/node_modules/swiper/modules/mousewheel.mjs", "../../../../../shared/node_modules/swiper/shared/create-element-if-not-defined.mjs", "../../../../../shared/node_modules/swiper/modules/navigation.mjs", "../../../../../shared/node_modules/swiper/shared/classes-to-selector.mjs", "../../../../../shared/node_modules/swiper/modules/pagination.mjs", "../../../../../shared/node_modules/swiper/modules/scrollbar.mjs", "../../../../../shared/node_modules/swiper/modules/parallax.mjs", "../../../../../shared/node_modules/swiper/modules/zoom.mjs", "../../../../../shared/node_modules/swiper/modules/controller.mjs", "../../../../../shared/node_modules/swiper/modules/a11y.mjs", "../../../../../shared/node_modules/swiper/modules/history.mjs", "../../../../../shared/node_modules/swiper/modules/hash-navigation.mjs", "../../../../../shared/node_modules/swiper/modules/autoplay.mjs", "../../../../../shared/node_modules/swiper/modules/thumbs.mjs", "../../../../../shared/node_modules/swiper/modules/free-mode.mjs", "../../../../../shared/node_modules/swiper/modules/grid.mjs", "../../../../../shared/node_modules/swiper/modules/manipulation.mjs", "../../../../../shared/node_modules/swiper/shared/effect-init.mjs", "../../../../../shared/node_modules/swiper/shared/effect-target.mjs", "../../../../../shared/node_modules/swiper/shared/effect-virtual-transition-end.mjs", "../../../../../shared/node_modules/swiper/modules/effect-fade.mjs", "../../../../../shared/node_modules/swiper/modules/effect-cube.mjs", "../../../../../shared/node_modules/swiper/shared/create-shadow.mjs", "../../../../../shared/node_modules/swiper/modules/effect-flip.mjs", "../../../../../shared/node_modules/swiper/modules/effect-coverflow.mjs", "../../../../../shared/node_modules/swiper/modules/effect-creative.mjs", "../../../../../shared/node_modules/swiper/modules/effect-cards.mjs", "../../../../../shared/node_modules/swiper/swiper-bundle.mjs", "../../javascript/controllers/swiper_controller.js", "../../javascript/controllers/tabs_controller.js", "../../javascript/controllers/theme_controller.js", "../../javascript/controllers/translate_controller.js", "../../javascript/controllers/upload_controller.js", "../../../../../shared/node_modules/@sentry/core/src/debug-build.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/version.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/worldwide.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/debug-build.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/logger.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/stacktrace.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/instrument/handlers.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/instrument/globalError.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/instrument/globalUnhandledRejection.ts", "../../../../../shared/node_modules/@sentry/core/src/carrier.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/is.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/browser.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/string.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/object.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/time.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/misc.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/syncpromise.ts", "../../../../../shared/node_modules/@sentry/core/src/session.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/propagationContext.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/merge.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/spanOnScope.ts", "../../../../../shared/node_modules/@sentry/core/src/scope.ts", "../../../../../shared/node_modules/@sentry/core/src/defaultScopes.ts", "../../../../../shared/node_modules/@sentry/core/src/asyncContext/stackStrategy.ts", "../../../../../shared/node_modules/@sentry/core/src/asyncContext/index.ts", "../../../../../shared/node_modules/@sentry/core/src/currentScopes.ts", "../../../../../shared/node_modules/@sentry/core/src/metrics/metric-summary.ts", "../../../../../shared/node_modules/@sentry/core/src/semanticAttributes.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/spanstatus.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/baggage.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/tracing.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/spanUtils.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/errors.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/utils.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/hasTracingEnabled.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/sentryNonRecordingSpan.ts", "../../../../../shared/node_modules/@sentry/core/src/constants.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/dynamicSamplingContext.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/logSpans.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/parseSampleRate.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/sampling.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/dsn.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/memo.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/normalize.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/envelope.ts", "../../../../../shared/node_modules/@sentry/core/src/envelope.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/measurement.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/sentrySpan.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/trace.ts", "../../../../../shared/node_modules/@sentry/core/src/tracing/idleSpan.ts", "../../../../../shared/node_modules/@sentry/core/src/eventProcessors.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/debug-ids.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/applyScopeDataToEvent.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/prepareEvent.ts", "../../../../../shared/node_modules/@sentry/core/src/exports.ts", "../../../../../shared/node_modules/@sentry/core/src/api.ts", "../../../../../shared/node_modules/@sentry/core/src/integration.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/clientreport.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/error.ts", "../../../../../shared/node_modules/@sentry/core/src/baseclient.ts", "../../../../../shared/node_modules/@sentry/core/src/sdk.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/promisebuffer.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/ratelimit.ts", "../../../../../shared/node_modules/@sentry/core/src/transports/base.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/isSentryRequestUrl.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/sdkMetadata.ts", "../../../../../shared/node_modules/@sentry/core/src/utils/traceData.ts", "../../../../../shared/node_modules/@sentry/core/src/breadcrumbs.ts", "../../../../../shared/node_modules/@sentry/core/src/integrations/functiontostring.ts", "../../../../../shared/node_modules/@sentry/core/src/integrations/inboundfilters.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/aggregate-errors.ts", "../../../../../shared/node_modules/@sentry/core/src/metadata.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/url.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/instrument/console.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/severity.ts", "../../../../../shared/node_modules/@sentry/core/src/integrations/dedupe.ts", "../../../../../shared/node_modules/@sentry/core/src/integrations/third-party-errors-filter.ts", "../../../../../shared/node_modules/@sentry/core/src/fetch.ts", "../../../../../shared/node_modules/@sentry/core/src/feedback.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/breadcrumb-log-level.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/supports.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/instrument/fetch.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/env.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/node.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/isBrowser.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/vendor/supportsHistory.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/buildPolyfills/_nullishCoalesce.ts", "../../../../../shared/node_modules/@sentry/core/src/utils-hoist/buildPolyfills/_optionalChain.ts", "../../../../../shared/node_modules/@sentry/browser/src/helpers.ts", "../../../../../shared/node_modules/@sentry/browser/src/debug-build.ts", "../../../../../shared/node_modules/@sentry/browser/src/eventbuilder.ts", "../../../../../shared/node_modules/@sentry/browser/src/userfeedback.ts", "../../../../../shared/node_modules/@sentry/browser/src/client.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/debug-build.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/bindReporter.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/types.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/generateUniqueID.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getNavigationEntry.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getActivationStart.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/initMetric.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/observe.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/onHidden.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/runOnce.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/getVisibilityWatcher.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/whenActivated.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/onFCP.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getCLS.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getFID.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/interactions.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/lib/whenIdle.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getINP.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/getLCP.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/web-vitals/onTTFB.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/instrument.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/utils.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/cls.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/browserMetrics.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/instrument/dom.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/instrument/history.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/getNativeImplementation.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/instrument/xhr.ts", "../../../../../shared/node_modules/@sentry-internal/browser-utils/src/metrics/inp.ts", "../../../../../shared/node_modules/@sentry/browser/src/transports/fetch.ts", "../../../../../shared/node_modules/@sentry/browser/src/stack-parsers.ts", "../../../../../shared/node_modules/@sentry/browser/src/integrations/breadcrumbs.ts", "../../../../../shared/node_modules/@sentry/browser/src/integrations/browserapierrors.ts", "../../../../../shared/node_modules/@sentry/browser/src/integrations/browsersession.ts", "../../../../../shared/node_modules/@sentry/browser/src/integrations/globalhandlers.ts", "../../../../../shared/node_modules/@sentry/browser/src/integrations/httpcontext.ts", "../../../../../shared/node_modules/@sentry/browser/src/integrations/linkederrors.ts", "../../../../../shared/node_modules/@sentry/browser/src/sdk.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/constants.ts", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/utils.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/types/dist/rrweb-types.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrdom/es/rrdom.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/error-handler.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observer.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/processed-node-manager.js", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb/es/rrweb/packages/rrweb/src/record/index.js", "../../../../../shared/node_modules/@sentry-internal/replay/src/types/rrweb.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/timestamp.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/addBreadcrumbEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/domUtils.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/onWindowOpen.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleClick.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/createBreadcrumb.ts", "../../../../../shared/node_modules/node_modules/@sentry-internal/rrweb-snapshot/es/rrweb-snapshot.js", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/getAttributesToRecord.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleDom.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleKeyboardEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/createPerformanceEntries.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/performanceObserver.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/debug-build.ts", "../../../../../shared/node_modules/@sentry-internal/replay-worker/build/esm/worker.ts", "../../../../../shared/node_modules/@sentry-internal/replay-worker/build/esm/index.js", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/logger.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/eventBuffer/error.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferArray.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/eventBuffer/WorkerHandler.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferCompressionWorker.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/eventBuffer/EventBufferProxy.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/eventBuffer/index.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/hasSessionStorage.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/session/clearSession.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/isSampled.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/session/Session.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/session/saveSession.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/session/createSession.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/session/fetchSession.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/isExpired.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/isSessionExpired.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/session/shouldRefreshSession.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/session/loadOrCreateSession.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/addEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/eventUtils.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleAfterSendEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleBeforeSendEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleBreadcrumbs.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/isRrwebError.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/resetReplayIdOnDynamicSamplingContext.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/addFeedbackBreadcrumb.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/shouldSampleForBufferEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleGlobalEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/createPerformanceSpans.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleHistory.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/shouldFilterRequest.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/addNetworkBreadcrumb.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/networkUtils.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/fetchUtils.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/util/xhrUtils.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/coreHandlers/handleNetworkBreadcrumbs.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/addGlobalListeners.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/addMemoryEntry.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/debounce.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/getRecordingSamplingOptions.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/handleRecordingEmit.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/createReplayEnvelope.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/prepareRecordingData.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/prepareReplayEvent.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/sendReplayRequest.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/sendReplay.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/throttle.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/replay.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/getPrivacyOptions.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/maskAttribute.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/integration.ts", "../../../../../shared/node_modules/@sentry-internal/replay/src/util/getReplay.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/constants/index.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/core/sendFeedback.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/util/debug-build.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/util/isScreenshotSupported.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/util/mergeOptions.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/core/components/Actor.css.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/util/setAttributesNS.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/core/components/FeedbackIcon.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/core/components/Actor.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/core/createMainStyles.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/core/integration.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/core/getFeedback.ts", "../../../../../shared/node_modules/node_modules/preact/dist/preact.mjs", "../../../../../shared/node_modules/node_modules/preact/hooks/dist/hooks.mjs", "../../../../../shared/node_modules/@sentry-internal/feedback/src/modal/components/SentryLogo.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/modal/components/DialogHeader.tsx", "../../../../../shared/node_modules/@sentry-internal/feedback/src/util/validate.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/modal/components/Form.tsx", "../../../../../shared/node_modules/@sentry-internal/feedback/src/modal/components/SuccessIcon.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/modal/components/Dialog.tsx", "../../../../../shared/node_modules/@sentry-internal/feedback/src/modal/components/Dialog.css.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/modal/integration.tsx", "../../../../../shared/node_modules/@sentry-internal/feedback/src/screenshot/components/CropCorner.tsx", "../../../../../shared/node_modules/@sentry-internal/feedback/src/screenshot/components/ScreenshotInput.css.ts", "../../../../../shared/node_modules/@sentry-internal/feedback/src/screenshot/components/useTakeScreenshot.tsx", "../../../../../shared/node_modules/@sentry-internal/feedback/src/screenshot/components/ScreenshotEditor.tsx", "../../../../../shared/node_modules/@sentry-internal/feedback/src/screenshot/integration.ts", "../../../../../shared/node_modules/@sentry/browser/src/feedbackSync.ts", "../../../../../shared/node_modules/@sentry/browser/src/tracing/request.ts", "../../../../../shared/node_modules/@sentry/browser/src/tracing/backgroundtab.ts", "../../../../../shared/node_modules/@sentry/browser/src/tracing/browserTracingIntegration.ts", "../../javascript/vendors/sentry.js", "../../../../../shared/node_modules/posthog-js/src/utils/globals.ts", "../../../../../shared/node_modules/posthog-js/src/types.ts", "../../../../../shared/node_modules/posthog-js/src/config.ts", "../../../../../shared/node_modules/posthog-js/src/utils/index.ts", "../../../../../shared/node_modules/posthog-js/src/utils/string-utils.ts", "../../../../../shared/node_modules/posthog-js/src/utils/type-utils.ts", "../../../../../shared/node_modules/posthog-js/src/utils/logger.ts", "../../../../../shared/node_modules/posthog-js/src/entrypoints/external-scripts-loader.ts", "../../../../../shared/node_modules/posthog-js/src/constants.ts", "../../../../../shared/node_modules/posthog-js/src/posthog-featureflags.ts", "../../../../../shared/node_modules/posthog-js/src/uuidv7.ts", "../../../../../shared/node_modules/posthog-js/src/storage.ts", "../../../../../shared/node_modules/posthog-js/src/utils/request-utils.ts", "../../../../../shared/node_modules/posthog-js/src/utils/user-agent-utils.ts", "../../../../../shared/node_modules/posthog-js/src/utils/event-utils.ts", "../../../../../shared/node_modules/posthog-js/src/posthog-persistence.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/replay/sessionrecording-utils.ts", "../../../../../shared/node_modules/posthog-js/node_modules/.pnpm/@rrweb+types@2.0.0-alpha.17/node_modules/@rrweb/types/dist/types.js", "../../../../../shared/node_modules/posthog-js/src/utils/element-utils.ts", "../../../../../shared/node_modules/posthog-js/src/autocapture-utils.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/replay/config.ts", "../../../../../shared/node_modules/posthog-js/src/utils/number-utils.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/replay/mutation-rate-limiter.ts", "../../../../../shared/node_modules/posthog-js/node_modules/.pnpm/fflate@0.4.8/node_modules/fflate/esm/browser.js", "../../../../../shared/node_modules/posthog-js/src/extensions/sampling.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/replay/sessionrecording.ts", "../../../../../shared/node_modules/posthog-js/src/remote-config.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/toolbar.ts", "../../../../../shared/node_modules/posthog-js/src/request-queue.ts", "../../../../../shared/node_modules/posthog-js/src/utils/encode-utils.ts", "../../../../../shared/node_modules/posthog-js/src/request.ts", "../../../../../shared/node_modules/posthog-js/src/retry-queue.ts", "../../../../../shared/node_modules/posthog-js/src/sessionid.ts", "../../../../../shared/node_modules/posthog-js/src/utils/request-router.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/sentry-integration.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/segment-integration.ts", "../../../../../shared/node_modules/posthog-js/src/page-view.ts", "../../../../../shared/node_modules/posthog-js/node_modules/.pnpm/preact@10.19.3/node_modules/preact/dist/preact.module.js", "../../../../../shared/node_modules/posthog-js/src/extensions/surveys/surveys-utils.tsx", "../../../../../shared/node_modules/posthog-js/src/posthog-surveys-types.ts", "../../../../../shared/node_modules/posthog-js/src/utils/simple-event-emitter.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/surveys/action-matcher.ts", "../../../../../shared/node_modules/posthog-js/src/utils/survey-event-receiver.ts", "../../../../../shared/node_modules/posthog-js/src/posthog-surveys.ts", "../../../../../shared/node_modules/posthog-js/src/rate-limiter.ts", "../../../../../shared/node_modules/posthog-js/src/session-props.ts", "../../../../../shared/node_modules/posthog-js/src/utils/blocked-uas.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/rageclick.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/dead-clicks-autocapture.ts", "../../../../../shared/node_modules/posthog-js/src/heatmaps.ts", "../../../../../shared/node_modules/posthog-js/src/scroll-manager.ts", "../../../../../shared/node_modules/posthog-js/src/autocapture.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/tracing-headers.ts", "../../../../../shared/node_modules/posthog-js/src/consent.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/exception-autocapture/index.ts", "../../../../../shared/node_modules/posthog-js/src/extensions/web-vitals/index.ts", "../../../../../shared/node_modules/posthog-js/src/web-experiments.ts", "../../../../../shared/node_modules/posthog-js/src/posthog-exceptions.ts", "../../../../../shared/node_modules/posthog-js/src/site-apps.ts", "../../../../../shared/node_modules/posthog-js/src/utils/identify-utils.ts", "../../../../../shared/node_modules/posthog-js/src/posthog-core.ts", "../../../../../shared/node_modules/posthog-js/src/entrypoints/module.no-external.es.ts", "../../javascript/vendors/posthog.js"], "sourcesContent": ["export default {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordMessage() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\",\n \"remote\": \"remote\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n this.monitor.recordMessage()\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true\n }\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return null\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n }\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n this.subprotocols = []\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n\n addSubProtocol(subprotocol) {\n this.subprotocols = [...this.subprotocols, subprotocol]\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n", "function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n", "// import { Controller } from \"@hotwired/stimulus\"\n\n// export default class extends Controller {\n// static targets = ['container', 'input', 'categoryContainer', 'productContainer', 'noResults', 'overlay'];\n\n// // connect() {\n// // this.inputTarget.addEventListener('focus', this.showOverlay.bind(this));\n// // this.inputTarget.addEventListener('blur', this.hideOverlay.bind(this));\n// // this.handleClickedOutside();\n// // }\n\n// // disconnect() {\n// // this.inputTarget.removeEventListener('focus', this.showOverlay.bind(this));\n// // this.inputTarget.removeEventListener('blur', this.hideOverlay.bind(this));\n// // }\n\n// submit() {\n// const query = this.inputTarget.value;\n// if (query.length < 3) {\n// this.hideElement(this.containerTarget);\n// return;\n// }\n// this.performSearch('Product', query);\n// this.performSearch('Category', query);\n// }\n\n\n// async performSearch(index, query) {\n// const searchUrl = `/search/${index.toLowerCase()}?query=${encodeURIComponent(query)}`;\n// this.searching();\n// this.displayNoResults();\n// try {\n// const response = await fetch(searchUrl);\n// const content = await response.json();\n// if (content.hits && content.hits.length > 0) {\n// this.showElement(this.containerTarget);\n// this.undisplayNoResults();\n// this.displayResults(index, content.hits);\n// }\n// } catch (err) {\n// console.error(err);\n// }\n// this.searching_done();\n// }\n\n// displayResults(index, hits) {\n// const containerTarget = this[`${index.toLowerCase()}ContainerTarget`];\n// this.showElement(containerTarget);\n// const list = containerTarget.querySelector(\"ul\");\n// list.innerHTML = '';\n// hits.forEach((hit) => {\n// if (index === 'Product') {\n// const dealEnv = this.productContainerTarget.dataset.dealEnv;\n// const dealAvailable = hit.deal_availability_tags.includes(dealEnv);\n// if (!dealAvailable && dealEnv !== \"marketplace\") return;\n// }\n// list.append(this.buildListItem(hit, index === 'Category', index === 'Product'));\n// });\n// if (list.children.length === 0 && index === 'Product') {\n// this.hideElement(this.productContainerTarget);\n// }\n// }\n\n// displayNoResults() {\n// this.showElement(this.containerTarget);\n// this.showElement(this.noResultsTarget);\n// this.hideElement(this.categoryContainerTarget);\n// this.hideElement(this.productContainerTarget);\n// }\n\n// undisplayNoResults() { this.hideElement(this.noResultsTarget); }\n\n// buildListItem(hit, translate = false, logo = false) {\n// const item = document.createElement('li');\n// const link = document.createElement('a');\n// const locale = this.element.dataset.locale;\n// const name = translate ? hit.name_i18n[locale] : hit.name;\n// link.href = `/${locale}${hit.path}`;\n// item.classList.add('py-1', 'px-4', 'hover:bg-cloud-darker');\n\n// item.innerHTML = logo ? this.buildLogoElement(hit, name, locale) : this.buildTextElement(name);\n// link.append(item);\n// return link;\n// }\n\n// buildLogoElement(hit, name, locale) {\n// const src = hit.logo.url;\n// const tagline = hit.tagline_i18n[locale];\n// const dealEnv = this.productContainerTarget.dataset.dealEnv;\n// const dealAvailable = hit.deal_availability_tags.includes(dealEnv);\n// const dealTagContent = this.productContainerTarget.dataset.dealAvailable;\n// const dealTag = dealAvailable ? `
${dealTagContent}
` : '';\n// return `${name}
\n//${tagline}
\n//