@sprig-technologies/sprig-browser 2.19.6 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +687 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +6580 -0
- package/dist/index.js.map +1 -0
- package/dist/sprig-browser/index.d.ts +168 -0
- package/dist/src/constants/css.d.ts +43 -0
- package/dist/src/constants/sprigEvents.d.ts +62 -0
- package/dist/src/constants/sprigRecordingEvents.d.ts +40 -0
- package/dist/src/controller/OptimizelyIntegration.d.ts +40 -0
- package/dist/src/controller/Queue.d.ts +18 -0
- package/dist/src/controller/controller.d.ts +9 -0
- package/dist/src/controller/iframe.d.ts +17 -0
- package/dist/src/helpers/Deferred.d.ts +9 -0
- package/dist/src/helpers/conflicting_widgets/index.d.ts +4 -0
- package/dist/src/helpers/conflicting_widgets/intercom.d.ts +2 -0
- package/dist/src/helpers/document.d.ts +6 -0
- package/dist/src/helpers/eventEmitter.d.ts +85 -0
- package/dist/src/helpers/general.d.ts +9 -0
- package/dist/src/helpers/network.d.ts +15 -0
- package/dist/src/types/card.d.ts +292 -0
- package/dist/src/types/config.d.ts +232 -0
- package/dist/src/types/event.d.ts +18 -0
- package/dist/src/types/global.d.ts +179 -0
- package/dist/src/view/app.d.ts +3 -0
- package/dist/src/view/cards/consentLegalCard.d.ts +6 -0
- package/dist/src/view/cards/index.d.ts +10 -0
- package/dist/src/view/cards/likertCard/index.d.ts +1 -0
- package/dist/src/view/cards/likertCard/likertCard.d.ts +6 -0
- package/dist/src/view/cards/likertCard/likertOption.d.ts +16 -0
- package/dist/src/view/cards/multipleChoice/baseMultiChoiceCard.d.ts +15 -0
- package/dist/src/view/cards/multipleChoice/index.d.ts +2 -0
- package/dist/src/view/cards/multipleChoice/multiSelectCard.d.ts +5 -0
- package/dist/src/view/cards/multipleChoice/singleSelectCard.d.ts +5 -0
- package/dist/src/view/cards/npsCard.d.ts +8 -0
- package/dist/src/view/cards/openTextCard.d.ts +6 -0
- package/dist/src/view/cards/recordedTask/actions.d.ts +21 -0
- package/dist/src/view/cards/recordedTask/card.d.ts +5 -0
- package/dist/src/view/cards/recordedTask/components.d.ts +37 -0
- package/dist/src/view/cards/recordedTask/constants.d.ts +5 -0
- package/dist/src/view/cards/recordedTask/helpers.d.ts +6 -0
- package/dist/src/view/cards/recordedTask/index.d.ts +1 -0
- package/dist/src/view/cards/recordedTask/store.d.ts +24 -0
- package/dist/src/view/cards/textUrlPromptCard.d.ts +6 -0
- package/dist/src/view/cards/thanksCard.d.ts +5 -0
- package/dist/src/view/cards/types.d.ts +34 -0
- package/dist/src/view/cards/uploadingCard.d.ts +5 -0
- package/dist/src/view/cards/videoVoiceCard.d.ts +6 -0
- package/dist/src/view/components/header.d.ts +8 -0
- package/dist/src/view/components/index.d.ts +3 -0
- package/dist/src/view/components/mobileEmbedView.d.ts +19 -0
- package/dist/src/view/components/select.d.ts +25 -0
- package/dist/src/view/footer.d.ts +2 -0
- package/dist/src/view/helpers/card.d.ts +6 -0
- package/dist/src/view/helpers/getAttributedUrl.d.ts +6 -0
- package/dist/src/view/helpers/skipLogicHelpers.d.ts +34 -0
- package/dist/src/view/hooks/index.d.ts +1 -0
- package/dist/src/view/hooks/useAutoSize.d.ts +2 -0
- package/dist/src/view/logo.d.ts +5 -0
- package/dist/src/view/recorder/recorder.d.ts +2 -0
- package/dist/src/view/store.d.ts +2 -0
- package/dist/src/view/view.d.ts +6 -0
- package/dist/style.css +1 -0
- package/package.json +12 -10
- package/LICENSE.md +0 -176
- package/index.d.ts +0 -160
- package/index.js +0 -680
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/constants/sprigEvents.ts","../../node_modules/uuid/dist/esm-browser/rng.js","../../node_modules/uuid/dist/esm-browser/stringify.js","../../node_modules/uuid/dist/esm-browser/native.js","../../node_modules/uuid/dist/esm-browser/v4.js","../../src/constants/css.ts","../../src/helpers/conflicting_widgets/intercom.ts","../../src/helpers/conflicting_widgets/index.ts","../../src/helpers/document.ts","../../node_modules/strict-event-emitter/node_modules/events/events.js","../../node_modules/strict-event-emitter/lib/StrictEventEmitter.js","../../node_modules/strict-event-emitter/lib/index.js","../../src/helpers/eventEmitter.ts","../../src/types/config.ts","../../src/helpers/general.ts","../../src/helpers/Deferred.ts","../../src/helpers/network.ts","../../node_modules/preact/dist/preact.module.js","../../src/types/card.ts","../../src/constants/sprigRecordingEvents.ts","../../node_modules/zustand/esm/vanilla.mjs","../../node_modules/preact/hooks/dist/hooks.module.js","../../node_modules/preact/compat/dist/compat.module.js","../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../node_modules/use-sync-external-store/shim/index.js","../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../node_modules/use-sync-external-store/shim/with-selector.js","../../node_modules/zustand/esm/index.mjs","../../src/view/helpers/skipLogicHelpers.ts","../../src/view/store.ts","../../src/view/recorder/recorder.ts","../../node_modules/clsx/dist/clsx.m.js","../../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../../src/view/components/header.tsx","../../src/view/components/mobileEmbedView.tsx","../../src/view/hooks/useAutoSize.ts","../../src/view/components/select.tsx","../../src/view/helpers/card.ts","../../src/view/cards/consentLegalCard.tsx","../../src/view/cards/likertCard/likertOption.tsx","../../src/view/cards/likertCard/likertCard.tsx","../../src/view/cards/multipleChoice/baseMultiChoiceCard.tsx","../../src/view/cards/multipleChoice/singleSelectCard.tsx","../../src/view/cards/multipleChoice/multiSelectCard.tsx","../../src/view/cards/npsCard.tsx","../../src/view/cards/openTextCard.tsx","../../src/view/cards/recordedTask/constants.ts","../../src/view/cards/recordedTask/helpers.ts","../../src/view/cards/recordedTask/store.ts","../../src/view/cards/recordedTask/actions.ts","../../src/view/cards/recordedTask/components.tsx","../../src/view/cards/recordedTask/card.tsx","../../src/view/helpers/getAttributedUrl.ts","../../src/view/cards/textUrlPromptCard.tsx","../../src/view/cards/thanksCard.tsx","../../node_modules/@userleap/video-player-recorder/videoPlayer.js","../../src/view/cards/videoVoiceCard.tsx","../../src/view/cards/uploadingCard.tsx","../../src/view/logo.tsx","../../src/view/footer.tsx","../../src/view/app.tsx","../../src/view/view.tsx","../../src/controller/iframe.ts","../../src/controller/OptimizelyIntegration.ts","../../src/controller/Queue.ts","../../src/controller/controller.ts","../index.ts"],"sourcesContent":["export const enum DismissReason {\n Closed = \"close.click\", // user clicked the close button\n Complete = \"survey.completed\", // user answered all questions\n PageChange = \"page.change\", // productConfig.dismissOnPageChange == true and we detected a page change (excludes hash/query param changes)\n API = \"api\", // JS called Sprig('dismissActiveSurvey')\n Override = \"override\", // JS called Sprig('displaySurvey', SURVEY_ID)\n}\n\nexport enum SprigEvent {\n // for controller\n SDKReady = \"sdk.ready\",\n SurveyAppeared = \"survey.appeared\",\n SurveyClosed = \"survey.closed\",\n SurveyDimensions = \"survey.dimensions\",\n SurveyFadingOut = \"survey.fadingOut\",\n SurveyHeight = \"survey.height\",\n SurveyPresented = \"survey.presented\",\n SurveyLifeCycle = \"survey.lifeCycle\",\n SurveyWillClose = \"survey.willClose\",\n SurveyWillPresent = \"survey.will.present\",\n\n // for view\n CloseSurveyOnOverlayClick = \"close.survey.overlayClick\",\n VisitorIDUpdated = \"visitor.id.updated\",\n}\n\nexport const enum SprigEventData {\n SurveyId = \"survey.id\",\n}\n\n// UserLeap event constants\n// event convention\n// event name: descriptive name of the event that happened\n// payload: {\n// name: 'event name',\n// descriptiveDataName: data\n// }\n// TODO: remove in favor of enum above (breaking change)\nexport const EVENTS = {\n // for controller\n SDK_READY: SprigEvent.SDKReady,\n SURVEY_APPEARED: SprigEvent.SurveyAppeared,\n SURVEY_CLOSED: SprigEvent.SurveyClosed,\n SURVEY_DIMENSIONS: SprigEvent.SurveyDimensions,\n SURVEY_FADING_OUT: SprigEvent.SurveyFadingOut,\n SURVEY_HEIGHT: SprigEvent.SurveyHeight,\n SURVEY_PRESENTED: SprigEvent.SurveyPresented,\n SURVEY_LIFE_CYCLE: SprigEvent.SurveyLifeCycle,\n SURVEY_WILL_CLOSE: SprigEvent.SurveyWillClose,\n SURVEY_WILL_PRESENT: SprigEvent.SurveyWillPresent,\n\n // for view\n CLOSE_SURVEY_ON_OVERLAY_CLICK: SprigEvent.CloseSurveyOnOverlayClick,\n VISITOR_ID_UPDATED: SprigEvent.VisitorIDUpdated,\n\n // data - TODO: separate data e.g. export const enum SprigEventData { SurveyID } (breaking change)\n DATA: {\n DISMISS_REASONS: {\n API: DismissReason.API, // JS called Sprig('dismissActiveSurvey')\n CLOSED: DismissReason.Closed, // user clicked the close button\n COMPLETE: DismissReason.Complete, // user answered all questions\n PAGE_CHANGE: DismissReason.PageChange, // productConfig.dismissOnPageChange:= true and we detected a page change (excludes hash/query param changes)\n OVERRIDE: DismissReason.Override, // JS called Sprig('displaySurvey', SURVEY_ID)\n },\n SURVEY_ID: SprigEventData.SurveyId,\n },\n};\n\n// events not intended to be used externally and not in the documentation\nexport const enum InternalEventName {\n VerifyViewVersion = \"verify.view.version\",\n CurrentQuestion = \"survey.question\",\n ViewPrototypeClick = \"question.prototype.click\",\n ViewAgreementClick = \"question.agreement.click\",\n RecordedTaskStart = \"recorded.task.start\",\n RecordedTaskPermissionScreen = \"recorded.task.permission.screen\",\n SurveyComplete = \"survey.complete\",\n}\n\nexport const enum InternalEventData {\n ViewVersion = \"view.version\",\n QuestionId = \"qid\",\n Props = \"props\",\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","// used to control the top-level app frame, eg destroying it after the study is completed or closed\nexport const APP_ID = \"ul-app\";\n\nexport const enum CssConstant {\n Caption = \"ul-caption\",\n CardContainer = \"ul-card__container\",\n CardMainContent = \"ul-card-main-content\",\n Choice = \"choice\",\n ChoiceCheckbox = \"select-checkbox\",\n ChoiceGroup = \"ul-card__choices\",\n ChoiceLabel = \"select-label\",\n ChoiceLabelContainer = \"choice-label-container\",\n ChoiceRadio = \"select-radio\",\n ChoiceTextEntryContainer = \"choice-text-entry-container\",\n ChoiceTextInput = \"choice-text-input\",\n CloseButton = \"close-btn\",\n CloseContainer = \"close-container\",\n ConsentLegalNameInput = \"ul-consent-legal__name-input\",\n CustomStyle = \"ul-custom-style\",\n DesktopSuffix = \"--desktop\",\n FadeInTransition = \"fade-in-transition\",\n LikertNumber = \"likert-number\",\n LikertSmiley = \"likert-smiley\",\n LikertStar = \"likert-star\",\n LoadingSpinner = \"ul-loading-spinner\",\n LoadingSpinnerContainer = \"ul-loading-spinner-container\",\n LoadingSpinnerFirst = \"first\",\n LoadingSpinnerFourth = \"fourth\",\n LoadingSpinnerSecond = \"second\",\n LoadingSpinnerThird = \"third\",\n MobileSuffix = \"--mobile\",\n NPSNumber = \"nps-number\",\n OpenTextInput = \"ul-card-text__input\",\n QuestionHeader = \"ul-question\",\n VideoCard = \"ul-card--video\",\n\n // buttons\n CheckmarkButton = \"ul-button-checkmark\",\n InactiveButton = \"ul-button-inactive\",\n LeftAlignButton = \"ul-button-left-align\",\n SubmitButtonDisabled = \"submit-button-disabled\",\n}\n\nexport const DEFAULT_BORDER_COLOR = \"#e6e6e6\";\nexport const DEFAULT_TRANSPARENT_COLOR = \"#ffffff\";\nexport const ERROR_BORDER_COLOR = \"#bd282a\";\n\n// for phone styling (thicker borders, etc)\nexport const MOBILE_MAX_WIDTH = 500;\n\n// embeds should display in mobile mode under 1030px\nexport const EMBED_MOBILE_MAX_WIDTH = 1030;\n","const getIntercom = () => {\n try {\n return window.parent.Intercom;\n } catch (err) {\n console.error(err);\n return null;\n }\n};\n\nexport const enable = () => {\n const Intercom = getIntercom();\n if (!Intercom) return;\n\n if (Intercom.ul_wasVisible) {\n Intercom(\"update\", { hide_default_launcher: false });\n }\n\n delete Intercom.ul_wasVisible;\n};\n\nexport const disable = () => {\n const Intercom = getIntercom();\n if (!Intercom) return;\n\n Intercom.ul_wasVisible = !!document.querySelector(\n \"iframe.intercom-launcher-frame\"\n );\n\n if (Intercom.ul_wasVisible) {\n Intercom(\"update\", { hide_default_launcher: true });\n }\n};\n","import * as Intercom from \"./intercom\";\n\nconst widgets = [Intercom];\n\nexport default class ConflictingWidgets {\n static disable() {\n widgets.forEach((w) => w.disable());\n }\n\n static enable() {\n widgets.forEach((w) => w.enable());\n }\n}\n","// for shared functions across the sdk\nimport { CssConstant } from \"../constants/css\";\nconst FRAME_HEIGHT_PADDING_PIXELS = 1;\n\nexport const isTargetElement = (\n element: EventTarget | null\n): element is HTMLElement => {\n return element instanceof HTMLElement;\n};\n\nexport const isTargetInputElement = (\n element: EventTarget | null\n): element is HTMLInputElement => {\n return element instanceof HTMLInputElement;\n};\n\nexport const isTargetTextAreaElement = (\n element: EventTarget | null\n): element is HTMLTextAreaElement => {\n return element instanceof HTMLTextAreaElement;\n};\n\nexport const overrideStyles = (\n document: Document,\n styleString: string,\n nonce?: string\n) => {\n const overrideStyles = document.createElement(\"style\");\n if (nonce) overrideStyles.nonce = nonce;\n overrideStyles.textContent = styleString;\n overrideStyles.id = CssConstant.CustomStyle;\n document.head.appendChild(overrideStyles);\n};\n\nexport const calculateFrameHeight = (document: Document) => {\n const container = document.querySelector(`.${CssConstant.CardContainer}`);\n const containerHeight = container ? container.scrollHeight : 600;\n const whiteSpace =\n container && container.parentElement\n ? container.parentElement.clientHeight - container.clientHeight\n : 0;\n return containerHeight + whiteSpace + FRAME_HEIGHT_PADDING_PIXELS;\n};\n\nexport const resetScrollPosition = (document: Document) => {\n const container = document.querySelector(`.${CssConstant.CardContainer}`);\n if (container) container.scrollTop = 0;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nexports.__esModule = true;\nexports.StrictEventEmitter = void 0;\nvar events_1 = require(\"events\");\nvar StrictEventEmitter = /** @class */ (function (_super) {\n __extends(StrictEventEmitter, _super);\n function StrictEventEmitter() {\n return _super.call(this) || this;\n }\n StrictEventEmitter.prototype.on = function (event, listener) {\n return _super.prototype.on.call(this, event.toString(), listener);\n };\n StrictEventEmitter.prototype.once = function (event, listener) {\n return _super.prototype.once.call(this, event.toString(), listener);\n };\n StrictEventEmitter.prototype.off = function (event, listener) {\n return _super.prototype.off.call(this, event.toString(), listener);\n };\n StrictEventEmitter.prototype.emit = function (event) {\n var data = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n data[_i - 1] = arguments[_i];\n }\n return _super.prototype.emit.apply(this, __spreadArrays([event.toString()], data));\n };\n StrictEventEmitter.prototype.addListener = function (event, listener) {\n return _super.prototype.addListener.call(this, event.toString(), listener);\n };\n StrictEventEmitter.prototype.prependListener = function (event, listener) {\n return _super.prototype.prependListener.call(this, event.toString(), listener);\n };\n StrictEventEmitter.prototype.prependOnceListener = function (event, listener) {\n return _super.prototype.prependOnceListener.call(this, event.toString(), listener);\n };\n StrictEventEmitter.prototype.removeListener = function (event, listener) {\n return _super.prototype.removeListener.call(this, event.toString(), listener);\n };\n StrictEventEmitter.prototype.removeAllListeners = function (event) {\n if (event) {\n return _super.prototype.removeAllListeners.call(this, event.toString());\n }\n return _super.prototype.removeAllListeners.call(this);\n };\n StrictEventEmitter.prototype.eventNames = function () {\n return _super.prototype.eventNames.call(this);\n };\n StrictEventEmitter.prototype.listeners = function (event) {\n return _super.prototype.listeners.call(this, event.toString());\n };\n StrictEventEmitter.prototype.rawListeners = function (event) {\n return _super.prototype.rawListeners.call(this, event.toString());\n };\n StrictEventEmitter.prototype.listenerCount = function (event) {\n return _super.prototype.listenerCount.call(this, event.toString());\n };\n return StrictEventEmitter;\n}(events_1.EventEmitter));\nexports.StrictEventEmitter = StrictEventEmitter;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nexports.__esModule = true;\n__exportStar(require(\"./StrictEventEmitter\"), exports);\n","import { StrictEventEmitter } from \"strict-event-emitter\";\n\nimport {\n SprigEvent,\n InternalEventName,\n InternalEventData,\n DismissReason,\n} from \"../constants/sprigEvents\";\nimport {\n MediaType,\n PassthroughData,\n SprigRecordingEvent,\n SprigRecordingEventData,\n} from \"../constants/sprigRecordingEvents\";\nimport { AvPermission } from \"../types/card\";\nimport { RecordedTaskResponseType } from \"../view/cards/recordedTask/store\";\n\ninterface SprigEventMap {\n // internal events\n [InternalEventName.CurrentQuestion]: (data: {\n [InternalEventData.QuestionId]: number;\n [InternalEventData.Props]: unknown;\n }) => void;\n [InternalEventName.RecordedTaskPermissionScreen]: () => void;\n [InternalEventName.RecordedTaskStart]: () => void;\n [InternalEventName.SurveyComplete]: () => void;\n [InternalEventName.VerifyViewVersion]: (data: {\n [InternalEventData.ViewVersion]: string;\n }) => void;\n\n // sprig events\n [SprigEvent.CloseSurveyOnOverlayClick]: () => void;\n [SprigEvent.SDKReady]: () => void;\n [SprigEvent.SurveyAppeared]: () => void;\n [SprigEvent.SurveyDimensions]: (data: {\n contentFrameHeight: number;\n contentFrameWidth: number;\n name: string;\n }) => void;\n [SprigEvent.SurveyClosed]: (data: {\n initiator?: unknown; // TODO: determine type\n name: string;\n }) => void;\n [SprigEvent.SurveyFadingOut]: () => void;\n [SprigEvent.SurveyHeight]: (data: {\n name: string;\n contentFrameHeight: number;\n }) => void;\n [SprigEvent.SurveyLifeCycle]: (data: { state: string }) => void;\n [SprigEvent.SurveyPresented]: (data: { name: string }) => void;\n [SprigEvent.SurveyWillClose]: (data: {\n initiator: DismissReason;\n name?: string;\n }) => void;\n [SprigEvent.SurveyWillPresent]: (data: {\n name: string;\n \"survey.id\": number;\n }) => void;\n [SprigEvent.VisitorIDUpdated]: (data: { visitorId: string | null }) => void;\n\n // recording events\n [SprigRecordingEvent.AvPermission]: (data: {\n [SprigRecordingEventData.StreamCanceledCallback]: () => void;\n [SprigRecordingEventData.StreamReadyCallback]: (\n avStream: MediaStream | null,\n captureStream?: MediaStream | null\n ) => void;\n [SprigRecordingEventData.PermissionDescriptors]: AvPermission[];\n }) => void;\n [SprigRecordingEvent.BeginRecording]: (data: {\n [SprigRecordingEventData.RecordingMediaTypes]: MediaType[];\n [SprigRecordingEventData.StartRecordingCallback]: (\n mediaRecordingUids: UUID[]\n ) => void;\n }) => void;\n [SprigRecordingEvent.FinishTask]: (data: {\n [SprigRecordingEventData.BeginCallback]: (mediaRecordingUid: UUID) => void;\n [SprigRecordingEventData.CurrentIndex]: number;\n [SprigRecordingEventData.PassthroughData]: PassthroughData;\n [SprigRecordingEventData.ProgressCallback]: (\n mediaRecordingUid: UUID,\n data: { detail: number }\n ) => void;\n [SprigRecordingEventData.TaskCompleteCallback]: (\n taskDurationMillisecond: number\n ) => void;\n [SprigRecordingEventData.TaskResponse]: RecordedTaskResponseType;\n [SprigRecordingEventData.UploadCallback]: (\n mediaRecordingUid: UUID | null,\n successOrError: true | unknown\n ) => void;\n }) => void;\n [SprigRecordingEvent.PermissionStatus]: (data: {\n [SprigRecordingEventData.PermissionStatusCallback]: (\n avStream: MediaStream | undefined,\n hasVideoPermission: boolean,\n hasScreenPermission: boolean\n ) => void;\n }) => void;\n [SprigRecordingEvent.ScreenPermission]: (data: {\n [SprigRecordingEventData.StreamCanceledCallback]: () => void;\n [SprigRecordingEventData.StreamReadyCallback]: (\n avStream: MediaStream | null,\n captureStream: MediaStream | null\n ) => void;\n }) => void;\n [SprigRecordingEvent.StartTask]: () => void;\n}\n\nexport type EventPayload = {\n [Property in keyof SprigEventMap]: Parameters<SprigEventMap[Property]>[0];\n};\n\nexport type SprigEventEmitter = StrictEventEmitter<SprigEventMap>;\n\nconst eventEmitter = new StrictEventEmitter<SprigEventMap>();\n\nexport default eventEmitter;\n","import { DismissReason, SprigEvent } from \"../constants/sprigEvents\";\nimport { SprigEventEmitter } from \"../helpers/eventEmitter\";\nimport { AppCard, Card, CardType } from \"./card\";\nimport { InteractiveEvent, PageUrlEvent } from \"./event\";\n\nexport const enum FramePosition {\n BottomLeft = \"bottomLeft\",\n BottomRight = \"bottomRight\",\n Center = \"center\",\n TopLeft = \"topLeft\",\n TopRight = \"topRight\",\n}\n\nexport const enum HttpHeader {\n Error = \"x-ul-error\",\n EnvironmentID = \"x-ul-environment-id\",\n InstallationMethod = \"x-ul-installation-method\",\n PartnerAnonymousId = \"x-ul-anonymous-id\",\n Platform = \"userleap-platform\",\n PreviewMode = \"x-ul-preview-mode\",\n UserID = \"x-ul-user-id\",\n VisitorID = \"x-ul-visitor-id\",\n}\n\nexport const enum Platform {\n Email = \"email\",\n Link = \"link\",\n Web = \"web\",\n}\n\nexport const enum InstallationMethod {\n Npm = \"web-npm\",\n Gtm = \"web-gtm\",\n Segment = \"web-segment\",\n Snippet = \"web-snippet\",\n}\n\ninterface Answer {\n questionId: number;\n value: unknown; // TODO: improve\n}\n\nexport interface Config {\n answers?: Answer[];\n apiURL: string;\n /** @example \"#000000\" */\n border: string;\n cards: Card[];\n configureExitOnOverlayClick: (cb: () => void) => void;\n context: {\n outcome: string;\n product: { name: string };\n visitor: { outcome: string };\n };\n customMetadata?: Record<string, unknown>;\n customStyles: string;\n dismissOnPageChange: boolean;\n endCard: { headline: string; subheader?: string };\n /** @example \"SJcVfq-7QQ\" */\n envId: string;\n environmentId?: string;\n eventEmitFn: SprigEventEmitter[\"emit\"];\n fontFamily?: string;\n fontFamilyURL: undefined;\n frame: HTMLIFrameElement & {\n eventEmitter?: SprigEventEmitter;\n setHeight?: (height: number) => void;\n };\n framePosition: FramePosition;\n headers: {\n \"accept-language\"?: string;\n /** @example \"Bearer 123\" */\n Authorization?: string;\n \"Content-Type\": string;\n \"userleap-platform\": Platform;\n /** @example \"SJcVfq-7QQ\" */\n [HttpHeader.EnvironmentID]?: string;\n [HttpHeader.InstallationMethod]: InstallationMethod;\n [HttpHeader.PartnerAnonymousId]?: string;\n [HttpHeader.PreviewMode]?: string;\n /** @example \"2.18.0\" */\n \"x-ul-sdk-version\": string;\n [HttpHeader.UserID]?: string;\n [HttpHeader.VisitorID]?: UUID;\n };\n installationMethod?: InstallationMethod;\n interactiveEvents: InteractiveEvent[];\n interactiveEventsHandler?: (e: MouseEvent) => void;\n isPreview?: boolean;\n locale: string;\n marketingUrl?: string;\n maxAttrNameLength: number;\n maxAttrValueLength: number;\n maxEmailLength: number;\n maxEventLength: number;\n maxUserIdLength: number;\n mobileSDKVersion: undefined;\n mode?: string;\n mute?: boolean;\n optimizelyEnabled: boolean;\n overlayStyle: \"light\";\n overlayStyleMobile: \"none\";\n pageUrlEvents: PageUrlEvent[];\n path?: string;\n platform?: Platform;\n requireUserIdForTracking: boolean;\n responseGroupUid: UUID;\n showStripes: boolean;\n showSurveyBrand: boolean;\n slugName: null;\n startingQuestionIdx?: number | null;\n styleNonce?: string;\n surveyId: number;\n tabTitle: string;\n ulEvents: SprigEvent;\n UpChunk: Window[\"UpChunk\"];\n useDesktopPrototype?: boolean;\n useMobileStyling: boolean;\n userId: UUID | null;\n visitorId: UUID | null;\n viewDocument: Document;\n viewWindow: Window;\n visitorAttributes: {\n email?: string;\n externalUserId?: string;\n };\n}\n\nexport interface ResponseData {\n answeredAt?: number;\n questionId: number;\n value: unknown;\n type: CardType;\n}\n\nexport interface Submission {\n completedAt: number;\n response: {\n answeredAt?: number;\n value: unknown;\n };\n responseGroupUid: AppConfig[\"responseGroupUid\"];\n}\n\nexport interface AppConfig {\n apiURL: Config[\"apiURL\"];\n answers: Config[\"answers\"];\n border: Config[\"border\"];\n cards: AppCard[];\n configureExitOnOverlayClick: Config[\"configureExitOnOverlayClick\"];\n customMetadata: Config[\"customMetadata\"];\n endCard: Config[\"endCard\"];\n envId: Config[\"envId\"];\n eventEmitFn: Config[\"eventEmitFn\"];\n fontFamily?: Config[\"fontFamily\"];\n frame: Config[\"frame\"];\n headers: Config[\"headers\"];\n index: number;\n hasViewedEmbed: boolean;\n isPreview: Config[\"isPreview\"];\n marketingUrl: Config[\"marketingUrl\"];\n meta: {\n ch: number;\n cw: number;\n l: string;\n mode: Config[\"mode\"] | null;\n p: string;\n sh: number;\n sw: number;\n };\n mode: Config[\"mode\"];\n recorderEventEmitter: SprigEventEmitter;\n responseGroupUid: Config[\"responseGroupUid\"];\n slugName: Config[\"slugName\"];\n showStripes: Config[\"showStripes\"];\n showSurveyBrand: Config[\"showSurveyBrand\"];\n styleNonce: Config[\"styleNonce\"];\n surveyId: Config[\"surveyId\"];\n tabTitle: Config[\"tabTitle\"];\n uploadingCardViewed: boolean;\n uploadProgress: Record<\n string,\n {\n isComplete: boolean;\n isSubmitted: boolean;\n progressPct: number;\n }\n >;\n useDesktopPrototype: Config[\"useDesktopPrototype\"];\n useMobileStyling: Config[\"useMobileStyling\"];\n userId: Config[\"userId\"];\n viewDocument: Config[\"viewDocument\"];\n viewedCardCount: number;\n visitorAttributes?: Config[\"visitorAttributes\"];\n close: (id?: string) => void;\n handleClickEmbedButton: (id: string) => void;\n /**\n * If the current card is not the uploading card, update the given upload state for this mediaRecordingUid directly in state,\n * without using update, which would reset video player.\n * If the current card is the uploading card,\n * check if upload is complete: if so and there's no end card, destroy the app.\n * since we're on the end card, update the state using store, which allows for dynamic progress updates.\n */\n handleUploadUpdate: (options: {\n mediaRecordingUid: UUID;\n isComplete?: boolean;\n progressPct?: number;\n isSubmitted?: boolean;\n }) => void;\n destroy: (id: string) => void;\n fadeout: (id: string) => void;\n recorder: () => void;\n remove: (options: { initiator: DismissReason }) => void;\n next: (options: {\n completeSurvey: () => void;\n data: ResponseData;\n endCard?: AppConfig[\"endCard\"];\n }) => void;\n submit: (submission: Submission) => Promise<void>;\n trackHistory: (options: {\n event: string;\n index?: number;\n isNew?: boolean;\n }) => void;\n update: (id?: string) => void;\n}\n\nexport interface ProductConfig {\n customStyles: string;\n exitOnOverlayClick: boolean;\n exitOnOverlayClickMobile: boolean;\n framePosition: FramePosition;\n overlayStyle: \"dark\" | \"light\";\n overlayStyleMobile: \"dark\" | \"light\" | \"none\";\n}\n","import { CssConstant } from \"../constants/css\";\nimport { Config, Platform } from \"../types/config\";\n\nexport const delay = (ms: number) =>\n new Promise<void>((res) => {\n setTimeout(() => {\n res();\n }, ms);\n });\n\n/**\n * Get true or false for whether to direct embed from platform headers\n * @returns user meta information\n */\nexport const shouldDirectEmbed = ({\n \"userleap-platform\": platform,\n}: Config[\"headers\"]) => {\n return platform !== Platform.Web;\n};\n\nexport const getClasses = (baseClass: string, useMobileStyling: boolean) => {\n const suffix = useMobileStyling\n ? CssConstant.MobileSuffix\n : CssConstant.DesktopSuffix;\n\n return [baseClass + suffix, baseClass];\n};\n\nexport const getPlatformClass = (baseClass: string, platform: string) => {\n return [baseClass, `${baseClass}__${platform}`];\n};\n","class Deferred<T = unknown, R = unknown> {\n payload: T;\n promise: Promise<R>;\n reject: (reason?: unknown) => void = () => {};\n resolve: (value: R) => void = () => {};\n\n constructor(payload: T) {\n this.payload = payload;\n this.promise = new Promise((resolve, reject) => {\n this.reject = reject;\n this.resolve = resolve;\n });\n }\n\n resolveRequest(result: R) {\n this.resolve(result);\n }\n}\n\nexport default Deferred;\n","import { delay } from \"../helpers/general\";\nimport {\n Config,\n HttpHeader,\n InstallationMethod,\n Platform,\n} from \"../types/config\";\nimport Deferred from \"./Deferred\";\n\nexport const NETWORK_CONFIG = {\n RATELIMIT_RESET_DEFAULT: 10, // 10s to restart rate limit retry\n};\n\ninterface RequestInfo {\n url: string;\n options: RequestInit;\n attempt: number;\n shouldDropOnRateLimit: boolean;\n}\ntype Result = {\n error?: Error;\n ok?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n json?: any;\n reportError?: boolean;\n status?: number;\n} & Partial<Response>;\n\nlet killswitch = false;\nlet killswitchReason = \"\";\nlet isRateLimited = false;\nlet pendingRequestQueue: Deferred<RequestInfo, Result>[] = [];\n\nconst getInstallationMethodHeader = (Sprig: Partial<WindowSprig>) => {\n if (Sprig._config && Sprig._config.installationMethod)\n return Sprig._config.installationMethod;\n if (Sprig._gtm) return InstallationMethod.Gtm;\n if (Sprig._segment) return InstallationMethod.Segment;\n return InstallationMethod.Snippet;\n};\n\nexport const killNetworkRequests = (reason = \"\") => {\n killswitch = true;\n killswitchReason = reason;\n};\n\nexport function getHttpHeaders(\n Sprig: Partial<WindowSprig> = {}\n): Config[\"headers\"] {\n const headers: Config[\"headers\"] = {\n \"Content-Type\": \"application/json\",\n \"userleap-platform\": Platform.Web,\n \"x-ul-sdk-version\": __SDK_VERSION__,\n [HttpHeader.InstallationMethod]: getInstallationMethodHeader(Sprig),\n };\n if (Sprig.envId) headers[HttpHeader.EnvironmentID] = Sprig.envId;\n if (Sprig.token) headers[\"Authorization\"] = \"Bearer \" + Sprig.token;\n if (Sprig.userId) headers[HttpHeader.UserID] = Sprig.userId;\n if (Sprig.visitorId) headers[HttpHeader.VisitorID] = Sprig.visitorId;\n if (Sprig.partnerAnonymousId)\n headers[HttpHeader.PartnerAnonymousId] = Sprig.partnerAnonymousId;\n if (Sprig.mobileHeadersJSON) {\n const mobileHeaders = JSON.parse(Sprig.mobileHeadersJSON);\n Object.assign(headers, mobileHeaders);\n }\n if (Sprig.locale) headers[\"accept-language\"] = Sprig.locale; // custom set locale overrides original header locales\n if (window.previewMode) headers[HttpHeader.PreviewMode] = \"1\";\n\n return headers;\n}\n\nconst dropOrQueueRequest = async (\n shouldDropOnRateLimit: boolean,\n isRateLimitRetry: boolean,\n requestInfo: RequestInfo\n) => {\n if (shouldDropOnRateLimit) {\n return { status: 429 };\n } else {\n const deferredRequest = new Deferred<RequestInfo, Result>(requestInfo);\n pendingRequestQueue.push(deferredRequest);\n return deferredRequest.promise;\n }\n};\n\nexport const ulFetch = async (\n url: string,\n options: RequestInit,\n attempt = 0,\n shouldDropOnRateLimit = false,\n shouldRetryRequest = false\n): Promise<Result> => {\n // drop or queue request based on the current rate limit status\n const requestInfo = { url, options, attempt, shouldDropOnRateLimit };\n if (isRateLimited && !shouldRetryRequest) {\n return dropOrQueueRequest(\n shouldDropOnRateLimit,\n shouldRetryRequest,\n requestInfo\n );\n }\n const killswitchResponse = { ok: false, reportError: false };\n if (killswitch) {\n console.info(`UserLeap - ${killswitchReason}`);\n return killswitchResponse;\n }\n\n try {\n options.headers = Object.assign(getHttpHeaders(), options.headers);\n const result = await fetch(url, options);\n\n if (result.status === 429) {\n // retry if rate limit is not in effect yet and the request is not droppable\n const shouldRetryCurrentRequest =\n (!isRateLimited && !shouldDropOnRateLimit) || shouldRetryRequest;\n\n if (shouldRetryCurrentRequest) {\n isRateLimited = true;\n const rateLimitResetTime = result.headers.has(\"ratelimit-reset\")\n ? Number(result.headers.get(\"ratelimit-reset\"))\n : NETWORK_CONFIG.RATELIMIT_RESET_DEFAULT;\n\n await delay(rateLimitResetTime * 1000);\n return ulFetch(url, options, 0, shouldDropOnRateLimit, true);\n } else {\n return dropOrQueueRequest(shouldDropOnRateLimit, false, requestInfo);\n }\n }\n isRateLimited = false;\n if (pendingRequestQueue.length) {\n pendingRequestQueue.map((deferredRequest) => {\n const { url, options, attempt, shouldDropOnRateLimit } =\n deferredRequest.payload;\n ulFetch(url, options, attempt, shouldDropOnRateLimit).then((result) => {\n deferredRequest.resolveRequest(result);\n });\n });\n pendingRequestQueue = [];\n }\n if (result.ok) {\n if (result.status === 249) {\n killNetworkRequests();\n return killswitchResponse;\n }\n\n const responseText = await result.text();\n try {\n if (responseText && responseText !== \"OK\") {\n result.json = JSON.parse(responseText);\n }\n return result;\n } catch (err) {\n return {\n ok: false,\n reportError: false,\n error: new Error(\n `failed parsing response json for ${url} - ${responseText}`\n ),\n };\n }\n }\n return result;\n } catch (err) {\n // retry\n const newAttempt = attempt + 1;\n if (newAttempt > 5) {\n return {\n ok: false,\n reportError: false,\n error: err as Error,\n };\n }\n // 1s... 2s... 4s... 8s... 16s...\n await delay(Math.pow(2, attempt) * 1000);\n return ulFetch(url, options, newAttempt);\n }\n};\n","var n,l,u,i,t,o,r,f={},e=[],c=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function s(n,l){for(var u in l)n[u]=l[u];return n}function a(n){var l=n.parentNode;l&&l.removeChild(n)}function h(l,u,i){var t,o,r,f={};for(r in u)\"key\"==r?t=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return v(l,f,t,o,null)}function v(n,i,t,o,r){var f={type:n,props:i,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u:r};return null==r&&null!=l.vnode&&l.vnode(f),f}function y(){return{current:null}}function p(n){return n.children}function d(n,l){this.props=n,this.context=l}function _(n,l){if(null==l)return n.__?_(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?_(n):null}function k(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k(n)}}function b(n){(!n.__d&&(n.__d=!0)&&t.push(n)&&!g.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||setTimeout)(g)}function g(){for(var n;g.__r=t.length;)n=t.sort(function(n,l){return n.__v.__b-l.__v.__b}),t=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=s({},t)).__v=t.__v+1,j(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?_(t):o,t.__h),z(u,t),t.__e!=o&&k(t)))})}function w(n,l,u,i,t,o,r,c,s,a){var h,y,d,k,b,g,w,x=i&&i.__k||e,C=x.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(k=u.__k[h]=null==(k=l[h])||\"boolean\"==typeof k?null:\"string\"==typeof k||\"number\"==typeof k||\"bigint\"==typeof k?v(null,k,null,null,k):Array.isArray(k)?v(p,{children:k},null,null,null):k.__b>0?v(k.type,k.props,k.key,k.ref?k.ref:null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(d=x[h])||d&&k.key==d.key&&k.type===d.type)x[h]=void 0;else for(y=0;y<C;y++){if((d=x[y])&&k.key==d.key&&k.type===d.type){x[y]=void 0;break}d=null}j(n,k,d=d||f,t,o,r,c,s,a),b=k.__e,(y=k.ref)&&d.ref!=y&&(w||(w=[]),d.ref&&w.push(d.ref,null,k),w.push(y,k.__c||b,k)),null!=b?(null==g&&(g=b),\"function\"==typeof k.type&&k.__k===d.__k?k.__d=s=m(k,s,n):s=A(n,k,d,x,b,s),\"function\"==typeof u.type&&(u.__d=s)):s&&d.__e==s&&s.parentNode!=n&&(s=_(d))}for(u.__e=g,h=C;h--;)null!=x[h]&&N(x[h],x[h]);if(w)for(h=0;h<w.length;h++)M(w[h],w[++h],w[++h])}function m(n,l,u){for(var i,t=n.__k,o=0;t&&o<t.length;o++)(i=t[o])&&(i.__=n,l=\"function\"==typeof i.type?m(i,l,u):A(u,i,i,t,i.__e,l));return l}function x(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(Array.isArray(n)?n.some(function(n){x(n,l)}):l.push(n)),l}function A(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else{for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,o),r=o}return void 0!==r?r:t.nextSibling}function C(n,l,u,i,t){var o;for(o in u)\"children\"===o||\"key\"===o||o in l||H(n,o,null,u[o],i);for(o in l)t&&\"function\"!=typeof l[o]||\"children\"===o||\"key\"===o||\"value\"===o||\"checked\"===o||u[o]===l[o]||H(n,o,l[o],u[o],i)}function $(n,l,u){\"-\"===l[0]?n.setProperty(l,u):n[l]=null==u?\"\":\"number\"!=typeof u||c.test(l)?u:u+\"px\"}function H(n,l,u,i,t){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof i&&(n.style.cssText=i=\"\"),i)for(l in i)u&&l in u||$(n.style,l,\"\");if(u)for(l in u)i&&u[l]===i[l]||$(n.style,l,u[l])}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/Capture$/,\"\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?T:I,o):n.removeEventListener(l,o?T:I,o);else if(\"dangerouslySetInnerHTML\"!==l){if(t)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&-1==l.indexOf(\"-\")?n.removeAttribute(l):n.setAttribute(l,u))}}function I(n){this.l[n.type+!1](l.event?l.event(n):n)}function T(n){this.l[n.type+!0](l.event?l.event(n):n)}function j(n,u,i,t,o,r,f,e,c){var a,h,v,y,_,k,b,g,m,x,A,C,$,H,I,T=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=l.__b)&&a(u);try{n:if(\"function\"==typeof T){if(g=u.props,m=(a=T.contextType)&&t[a.__c],x=a?m?m.props.value:a.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:(\"prototype\"in T&&T.prototype.render?u.__c=h=new T(g,x):(u.__c=h=new d(g,x),h.constructor=T,h.render=O),m&&m.sub(h),h.props=g,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[],h._sb=[]),null==h.__s&&(h.__s=h.state),null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=s({},h.__s)),s(h.__s,T.getDerivedStateFromProps(g,h.__s))),y=h.props,_=h.state,v)null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==T.getDerivedStateFromProps&&g!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(g,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(g,h.__s,x)||u.__v===i.__v){for(h.props=g,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u)}),A=0;A<h._sb.length;A++)h.__h.push(h._sb[A]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(g,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,k)})}if(h.context=x,h.props=g,h.__v=u,h.__P=n,C=l.__r,$=0,\"prototype\"in T&&T.prototype.render){for(h.state=h.__s,h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++$<25);h.state=h.__s,null!=h.getChildContext&&(t=s(s({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,_)),I=null!=a&&a.type===p&&null==a.key?a.props.children:a,w(n,Array.isArray(I)?I:[I],u,i,t,o,r,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=L(i.__e,u,i,t,o,r,f,c);(a=l.diffed)&&a(u)}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l.__e(n,u,i)}}function z(n,u){l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function L(l,u,i,t,o,r,e,c){var s,h,v,y=i.props,p=u.props,d=u.type,k=0;if(\"svg\"===d&&(o=!0),null!=r)for(;k<r.length;k++)if((s=r[k])&&\"setAttribute\"in s==!!d&&(d?s.localName===d:3===s.nodeType)){l=s,r[k]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",d):document.createElement(d,p.is&&p),r=null,c=!1}if(null===d)y===p||c&&l.data===p||(l.data=p);else{if(r=r&&n.call(l.childNodes),h=(y=i.props||f).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=r)for(y={},k=0;k<l.attributes.length;k++)y[l.attributes[k].name]=l.attributes[k].value;(v||h)&&(v&&(h&&v.__html==h.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||\"\"))}if(C(l,p,y,o,c),v)u.__k=[];else if(k=u.props.children,w(l,Array.isArray(k)?k:[k],u,i,t,o&&\"foreignObject\"!==d,r,e,r?r[0]:i.__k&&_(i,0),c),null!=r)for(k=r.length;k--;)null!=r[k]&&a(r[k]);c||(\"value\"in p&&void 0!==(k=p.value)&&(k!==l.value||\"progress\"===d&&!k||\"option\"===d&&k!==y.value)&&H(l,\"value\",k,y.value,!1),\"checked\"in p&&void 0!==(k=p.checked)&&k!==l.checked&&H(l,\"checked\",k,y.checked,!1))}return l}function M(n,u,i){try{\"function\"==typeof n?n(u):n.current=u}catch(n){l.__e(n,i)}}function N(n,u,i){var t,o;if(l.unmount&&l.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||M(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount()}catch(n){l.__e(n,u)}t.base=t.__P=null,n.__c=void 0}if(t=n.__k)for(o=0;o<t.length;o++)t[o]&&N(t[o],u,i||\"function\"!=typeof n.type);i||null==n.__e||a(n.__e),n.__=n.__e=n.__d=void 0}function O(n,l,u){return this.constructor(n,u)}function P(u,i,t){var o,r,e;l.__&&l.__(u,i),r=(o=\"function\"==typeof t)?null:t&&t.__k||i.__k,e=[],j(i,u=(!o&&t||i).__k=h(p,null,[u]),r||f,f,void 0!==i.ownerSVGElement,!o&&t?[t]:r?null:i.firstChild?n.call(i.childNodes):null,e,!o&&t?t:r?r.__e:i.firstChild,o),z(e,u)}function S(n,l){P(n,l,S)}function q(l,u,i){var t,o,r,f=s({},l.props);for(r in u)\"key\"==r?t=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),v(l.type,f,t||l.key,o||l.ref,null)}function B(n,l){var u={__c:l=\"__cC\"+r++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(b)},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n)}}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=e.slice,l={__e:function(n,l,u,i){for(var t,o,r;l=l.__;)if((t=l.__c)&&!t.__)try{if((o=t.constructor)&&null!=o.getDerivedStateFromError&&(t.setState(o.getDerivedStateFromError(n)),r=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),r=t.__d),r)return t.__E=t}catch(l){n=l}throw n}},u=0,i=function(n){return null!=n&&void 0===n.constructor},d.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=s({},this.state),\"function\"==typeof n&&(n=n(s({},u),this.props)),n&&s(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),b(this))},d.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),b(this))},d.prototype.render=p,t=[],g.__r=0,r=0;export{d as Component,p as Fragment,q as cloneElement,B as createContext,h as createElement,y as createRef,h,S as hydrate,i as isValidElement,l as options,P as render,x as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","export const enum CardType {\n ConsentLegal = \"consentlegal\",\n Likert = \"likert\",\n MultipleChoice = \"multiplechoice\",\n MultipleSelect = \"multipleselect\",\n NPS = \"nps\",\n Open = \"open\",\n RecordedTask = \"recordedtask\",\n TextUrlPrompt = \"texturlprompt\",\n Thanks = \"thanks\",\n Uploading = \"uploading\",\n VideoVoice = \"videovoice\",\n}\n\nexport type ConceptUrl = string | null;\n\ninterface BaseCard {\n name: number;\n surveyId: number;\n updatedAt: string;\n value?: unknown;\n}\n\nexport const enum Comparator {\n Answered = \"answered\",\n Equal = \"eq\",\n NotEqual = \"neq\",\n Skipped = \"skipped\",\n LessThan = \"lt\",\n LessThanOrEqual = \"lte\",\n GivenUp = \"given_up\",\n GreaterThan = \"gt\",\n GreaterThanOrEqual = \"gte\",\n ListAll = \"list_all\",\n ListAtLeastOne = \"list_alo\",\n ListExact = \"list_exact\",\n}\n\nexport type DefaultComparator = Comparator.Answered | Comparator.Skipped;\n\nexport interface RoutingOption<C extends Comparator = DefaultComparator> {\n comparator: C;\n target: number;\n /** @example '', 'option_2', ['option_1'] */\n value: number | string | string[];\n}\ntype RoutingOptions<C extends Comparator = DefaultComparator> =\n | RoutingOption<C | DefaultComparator>[]\n | null;\n\n/** @example <p>Body</p> */\ntype RichTextBody = string;\n\nexport const enum PromptActionType {\n Continue = \"CONTINUE\",\n External = \"EXTERNAL\",\n}\n\nexport interface TextUrlPromptCard extends BaseCard {\n props: {\n message: string;\n options: [];\n properties: {\n body: string;\n buttonText?: string;\n buttonUrl?: string;\n conceptUrl: ConceptUrl;\n promptActionType: PromptActionType;\n required: boolean;\n richTextBody: RichTextBody;\n };\n routingOptions: RoutingOptions;\n };\n type: CardType.TextUrlPrompt;\n}\n\nexport const enum AvPermission {\n Camera = \"camera\",\n Microphone = \"microphone\",\n Screen = \"screen\",\n}\n\nexport interface ConsentLegalCard extends BaseCard {\n props: {\n message: string;\n options: [];\n properties: {\n body: string;\n captionText: string;\n collectName: boolean;\n conceptUrl: ConceptUrl;\n consentText: string;\n nameLabelText: string;\n required: boolean;\n richTextBody: RichTextBody;\n skipButtonText: string;\n submitButtonText: string;\n };\n routingOptions: RoutingOptions;\n };\n type: CardType.ConsentLegal;\n}\n\ninterface BaseTaskPage {\n buttonText: string;\n headline: string;\n}\n\nexport const enum RecordedTaskPageType {\n AvPermission = \"av_permission\",\n ScreenPermission = \"screen_permission\",\n StartTask = \"start_task\",\n CompleteTask = \"complete_task\",\n}\n\nexport interface PermissionTaskPage extends BaseTaskPage {\n captionText: string;\n headline: string;\n permissionDeniedBody: string;\n permissionDeniedHeadline: string;\n permissionDescriptors: AvPermission[];\n permissionGrantedCaptionText?: string;\n permissionGrantedHeadline?: string;\n skipButtonText?: string;\n svg: string;\n tryAgainButtonText: string;\n type: RecordedTaskPageType.AvPermission;\n}\nexport interface ScreenTaskPage extends BaseTaskPage {\n captionText: string;\n permissionDeniedCaptionText: string;\n permissionDeniedHeadline: string;\n selectTabText: string;\n skipButtonText: string;\n type: RecordedTaskPageType.ScreenPermission;\n}\nexport interface StartTaskPage extends BaseTaskPage {\n captionText?: string;\n taskDetail: string;\n type: RecordedTaskPageType.StartTask;\n}\nexport interface CompleteTaskPage extends BaseTaskPage {\n captionText?: string;\n skipButtonText: string;\n taskDetail: string;\n type: RecordedTaskPageType.CompleteTask;\n}\n\nexport type RecordedTaskPage =\n | PermissionTaskPage\n | ScreenTaskPage\n | StartTaskPage\n | CompleteTaskPage;\n\nexport interface RecordedTaskCardProperties {\n captionText: string;\n conceptUrl: ConceptUrl;\n pages: RecordedTaskPage[];\n permissions: AvPermission[];\n required: boolean;\n taskDetail: string;\n}\n\nexport interface RecordedTaskCard extends BaseCard {\n props: {\n message: string;\n options: [];\n properties: RecordedTaskCardProperties;\n routingOptions: RoutingOptions<Comparator.GivenUp>;\n };\n type: CardType.RecordedTask;\n}\n\ninterface Labels {\n left: string;\n right: string;\n}\n\nexport interface RatingIcon {\n idx?: number;\n svg: string;\n}\n\nexport enum ScaleLabelType {\n Number = \"number\",\n Smiley = \"smiley\",\n Star = \"star\",\n}\n\nexport interface LikertCard extends BaseCard {\n props: {\n labels: Labels;\n message: string;\n options: [];\n properties: {\n captionText: string;\n buttonText?: string;\n conceptUrl: ConceptUrl;\n labels: Labels;\n range: string;\n ratingIcons: RatingIcon[];\n scaleLabelType: ScaleLabelType;\n required: boolean;\n };\n routingOptions: RoutingOptions<\n | Comparator.Equal\n | Comparator.GivenUp\n | Comparator.GreaterThan\n | Comparator.GreaterThanOrEqual\n | Comparator.LessThan\n | Comparator.LessThanOrEqual\n | Comparator.NotEqual\n >;\n };\n type: CardType.Likert;\n}\n\nexport interface OpenTextCard extends BaseCard {\n props: {\n message: string;\n options: [];\n properties: {\n body: string;\n buttonText?: string;\n captionText?: string;\n conceptUrl: ConceptUrl;\n openTextPlaceholder?: string;\n required: boolean;\n richTextBody: RichTextBody;\n skipButtonText?: string;\n };\n routingOptions: RoutingOptions;\n };\n type: CardType.Open;\n}\n\nexport interface MultipleChoiceOption {\n createdAt: string;\n deletedAt: null;\n id: number;\n label: string;\n optionProperties: null | { allowsTextEntry: boolean };\n order: number;\n productId: number;\n surveyId: number;\n surveyQuestionId: number;\n updatedAt: string;\n value: string;\n}\n\nexport interface CommonMultipleChoiceProps {\n message: string;\n options: MultipleChoiceOption[];\n properties: {\n buttonText?: string;\n captionText: string;\n conceptUrl: ConceptUrl;\n randomize: \"none\" | \"keeplast\" | \"all\";\n required: true;\n };\n}\n\nexport interface MultiChoiceCard<C extends Comparator = DefaultComparator>\n extends BaseCard {\n props: CommonMultipleChoiceProps & {\n routingOptions: RoutingOptions<C>;\n };\n}\n\nexport interface MultipleChoiceSingleSelectCard\n extends MultiChoiceCard<Comparator.Equal | Comparator.NotEqual> {\n type: CardType.MultipleChoice;\n}\n\nexport interface MultipleChoiceMultiSelectCard\n extends MultiChoiceCard<\n Comparator.ListAll | Comparator.ListAtLeastOne | Comparator.ListExact\n > {\n type: CardType.MultipleSelect;\n}\n\nexport interface NPSCard extends BaseCard {\n props: {\n labels: { left: string; right: string };\n message: string;\n options: [];\n properties: {\n buttonText?: string;\n captionText: string;\n conceptUrl: null;\n labels: { left: string; right: string };\n required: boolean;\n };\n routingOptions: RoutingOptions<\n | Comparator.Equal\n | Comparator.GreaterThan\n | Comparator.GreaterThanOrEqual\n | Comparator.LessThan\n | Comparator.LessThanOrEqual\n | Comparator.NotEqual\n >;\n };\n type: CardType.NPS;\n}\n\nexport interface VideoVoiceCard extends BaseCard {\n props: {\n message: string;\n options: [];\n properties: {\n buttonText: string;\n captionText: string;\n conceptUrl: null;\n mediaType: \"video\" | \"audio\";\n required: boolean;\n skipButtonText: string;\n uploadId: string;\n videoUrl: string;\n };\n routingOptions: RoutingOptions;\n };\n type: CardType.VideoVoice;\n}\n\nexport interface UploadingCard extends Pick<BaseCard, \"name\"> {\n props: {\n routingOptions: [];\n };\n type: CardType.Uploading;\n}\n\nexport interface ThanksCard extends Pick<BaseCard, \"name\"> {\n props: {\n routingOptions: [];\n };\n type: CardType.Thanks;\n}\n\nexport type Card =\n | TextUrlPromptCard\n | ConsentLegalCard\n | RecordedTaskCard\n | LikertCard\n | OpenTextCard\n | MultipleChoiceSingleSelectCard\n | MultipleChoiceMultiSelectCard\n | NPSCard\n | VideoVoiceCard;\n\nexport type AppCard = Card | UploadingCard | ThanksCard;\n","export const enum MediaType {\n Video = \"video\",\n Audio = \"audio\",\n Screen = \"screen\",\n}\n\nexport const enum SprigRecordingEvent {\n PermissionStatus = \"permission.status\",\n AvPermission = \"av.permission\",\n ScreenPermission = \"screen.permission\",\n BeginRecording = \"begin.recording\",\n StartTask = \"start.task\",\n FinishTask = \"finish.task\",\n}\n\nexport const enum TaskStatus {\n Abandoned = \"abandoned\",\n GivenUp = \"given.up\",\n Completed = \"completed\",\n}\n\nexport const enum SprigRecordingEventData {\n // permissions\n PermissionDescriptors = \"permission.descriptors\",\n PermissionStatusCallback = \"permission.status.callback\",\n StreamReadyCallback = \"stream.ready.callback\", // callback to the view with the active stream if obtained\n StreamCanceledCallback = \"stream.canceled.callback\", // callback to the view when stream is cancelled after recording started\n\n // record task completion\n TaskCompleteCallback = \"task.complete.callback\",\n TaskResponse = \"task.response\",\n TaskStatus = \"task.status\",\n\n // start recording media types\n RecordingMediaTypes = \"recording.media.types\",\n StartRecordingCallback = \"start.recording.callback\",\n\n // completion payload for upload\n PassthroughData = \"passthrough.data\",\n CurrentIndex = \"current.index\",\n\n // upload status callbacks\n UploadCallback = \"upload.callback\",\n ProgressCallback = \"progress.callback\",\n BeginCallback = \"begin.callback\",\n}\n\nexport interface PassthroughData {\n questionId: number;\n surveyId: number;\n visitorId: string | null;\n responseGroupUid: UUID;\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\") ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => listeners.clear();\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore as default };\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=[],e=n.__b,a=n.__r,v=n.diffed,l=n.__c,m=n.unmount;function d(t,u){n.__h&&n.__h(r,t,o||u),o=0;var i=r.__H||(r.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({__V:c}),i.__[t]}function p(n){return o=1,y(B,n)}function y(n,u,i){var o=d(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):B(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.u)){r.u=!0;var f=r.shouldComponentUpdate;r.shouldComponentUpdate=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!f||f.call(this,n,t,r);var i=!1;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),!(!i&&o.__c.props===n)&&(!f||f.call(this,n,t,r))}}return o.__N||o.__}function h(u,i){var o=d(t++,3);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__H.__h.push(o))}function s(u,i){var o=d(t++,4);!n.__s&&z(o.__H,i)&&(o.__=u,o.i=i,r.__h.push(o))}function _(n){return o=5,F(function(){return{current:n}},[])}function A(n,t,r){o=6,s(function(){return\"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n))}function F(n,r){var u=d(t++,7);return z(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function T(n,t){return o=8,F(function(){return n},t)}function q(n){var u=r.context[n.__c],i=d(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function x(t,r){n.useDebugValue&&n.useDebugValue(r?r(t):t)}function P(n){var u=d(t++,10),i=p();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function V(){var n=d(t++,11);return n.__||(n.__=\"P\"+function(n){for(var t=0,r=n.length;r>0;)t=(t<<5)-t+n.charCodeAt(--r)|0;return t}(r.__v.__m)+t),n.__}function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w),t.__H.__h=[]}catch(r){t.__H.__h=[],n.__e(r,t.__v)}}n.__b=function(n){\"function\"!=typeof n.type||n.__m||null===n.__?n.__m||(n.__m=n.__&&n.__.__m?n.__.__m:\"\"):n.__m=(n.__&&n.__.__m?n.__.__m:\"\")+(n.__&&n.__.__k?n.__.__k.indexOf(n):0),r=null,e&&e(n)},n.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0})):(i.__h.forEach(k),i.__h.forEach(w),i.__h=[])),u=r},n.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===n.requestAnimationFrame||((i=n.requestAnimationFrame)||j)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c})),u=r=null},n.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return!n.__||w(n)})}catch(u){r.some(function(n){n.__h&&(n.__h=[])}),r=[],n.__e(u,t.__v)}}),l&&l(t,r)},n.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n)}catch(n){r=n}}),u.__H=void 0,r&&n.__e(r,u.__v))};var g=\"function\"==typeof requestAnimationFrame;function j(n){var t,r=function(){clearTimeout(u),g&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,100);g&&(t=requestAnimationFrame(r))}function k(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function w(n){var t=r;n.__c=n.__(),r=t}function z(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function B(n,t){return\"function\"==typeof t?t(n):t}export{T as useCallback,q as useContext,x as useDebugValue,h as useEffect,P as useErrorBoundary,V as useId,A as useImperativeHandle,s as useLayoutEffect,F as useMemo,y as useReducer,_ as useRef,p as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,createContext,createElement,createRef}from\"preact\";import{useState as a,useId as s,useReducer as h,useEffect as v,useLayoutEffect as d,useRef as p,useImperativeHandle as m,useMemo as y,useCallback as _,useContext as b,useDebugValue as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function E(n){this.props=n}function w(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:C(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u}(E.prototype=new n).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var R=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),R&&R(n)};var x=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function N(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=x,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var k=function(n,t){return null==n?null:r(r(n).map(t))},A={map:k,forEach:k,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},O=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);O(n,t,e,r)};var T=e.unmount;function I(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return I(n,t,e)})),n}function L(n,t,e){return n&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return L(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.insertBefore(n.__e,n.__d),n.__c.__e=!0,n.__c.__P=e)),n}function U(){this.__u=0,this.t=null,this.__b=null}function D(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function F(n){var e,r,u;function o(o){if(e||(e=n()).then(function(n){r=n.default||n},function(n){u=n}),u)throw u;if(!r)throw e;return t(r,o)}return o.displayName=\"Lazy\",o.__f=!0,o}function M(){this.u=null,this.o=null}e.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),T&&T(n)},(U.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=D(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=L(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}},c=!0===t.__h;r.__u++||c||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},U.prototype.componentWillUnmount=function(){this.t=[]},U.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=I(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__h=null),[t(u,null,e.__a?null:n.children),i]};var V=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2]}};function W(n){return this.getChildContext=function(){return n.context},n.children}function P(n){var e=this,r=n.i;e.componentWillUnmount=function(){o(null,e.l),e.l=null,e.i=null},e.i&&e.i!==r&&e.componentWillUnmount(),n.__v?(e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n)},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n)}}),o(t(W,{context:e.context},n.__v),e.l)):e.l&&e.componentWillUnmount()}function $(n,e){var r=t(P,{__v:n,i:e});return r.containerInfo=e,r}(M.prototype=new n).__a=function(n){var t=this,e=D(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),V(t,n,r)):u()};e?e(o):o()}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){V(n,e,t)})};var j=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,z=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,B=\"undefined\"!=typeof document,H=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};function Z(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function Y(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var q=e.event;function G(){}function J(){return this.cancelBubble}function K(){return this.defaultPrevented}e.event=function(n){return q&&(n=q(n)),n.persist=G,n.isPropagationStopped=J,n.isDefaultPrevented=K,n.nativeEvent=n};var Q,X={configurable:!0,get:function(){return this.class}},nn=e.vnode;e.vnode=function(n){var t=n.type,e=n.props,u=e;if(\"string\"==typeof t){var o=-1===t.indexOf(\"-\");for(var i in u={},e){var l=e[i];B&&\"children\"===i&&\"noscript\"===t||\"value\"===i&&\"defaultValue\"in e&&null==l||(\"defaultValue\"===i&&\"value\"in e&&null==e.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":/ondoubleclick/i.test(i)?i=\"ondblclick\":/^onchange(textarea|input)/i.test(i+t)&&!H(e.type)?i=\"oninput\":/^onfocus$/i.test(i)?i=\"onfocusin\":/^onblur$/i.test(i)?i=\"onfocusout\":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)?i=i.toLowerCase():o&&z.test(i)?i=i.replace(/[A-Z0-9]/g,\"-$&\").toLowerCase():null===l&&(l=void 0),/^oninput$/i.test(i)&&(i=i.toLowerCase(),u[i]&&(i=\"oninputCapture\")),u[i]=l)}\"select\"==t&&u.multiple&&Array.isArray(u.value)&&(u.value=r(e.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==t&&null!=u.defaultValue&&(u.value=r(e.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),n.props=u,e.class!=e.className&&(X.enumerable=\"className\"in e,null!=e.className&&(u.class=e.className),Object.defineProperty(u,\"className\",X))}n.$$typeof=j,nn&&nn(n)};var tn=e.__r;e.__r=function(n){tn&&tn(n),Q=n.__c};var en={ReactCurrentDispatcher:{current:{readContext:function(n){return Q.__n[n.__c].props.value}}}},rn=\"17.0.2\";function un(n){return t.bind(null,n)}function on(n){return!!n&&n.$$typeof===j}function ln(n){return on(n)?f.apply(null,arguments):n}function cn(n){return!!n.__k&&(o(null,n),!0)}function fn(n){return n&&(n.base||1===n.nodeType&&n)||null}var an=function(n,t){return n(t)},sn=function(n,t){return n(t)},hn=u;function vn(n){n()}function dn(n){return n}function pn(){return[!1,vn]}var mn=d;function yn(n,t){var e=t(),r=a({h:{__:e,v:t}}),u=r[0].h,o=r[1];return d(function(){u.__=e,u.v=t,u.__!==t()&&o({h:u})},[n,e,t]),v(function(){return u.__!==u.v()&&o({h:u}),n(function(){u.__!==u.v()&&o({h:u})})},[n]),e}var _n={useState:a,useId:s,useReducer:h,useEffect:v,useLayoutEffect:d,useInsertionEffect:mn,useTransition:pn,useDeferredValue:dn,useSyncExternalStore:yn,startTransition:vn,useRef:p,useImperativeHandle:m,useMemo:y,useCallback:_,useContext:b,useDebugValue:S,version:\"17.0.2\",Children:A,render:Z,hydrate:Y,unmountComponentAtNode:cn,createPortal:$,createElement:t,createContext:l,createFactory:un,cloneElement:ln,createRef:c,Fragment:u,isValidElement:on,findDOMNode:fn,Component:n,PureComponent:E,memo:w,forwardRef:N,flushSync:sn,unstable_batchedUpdates:an,StrictMode:hn,Suspense:U,SuspenseList:M,lazy:F,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:en};export{A as Children,E as PureComponent,hn as StrictMode,U as Suspense,M as SuspenseList,en as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,ln as cloneElement,un as createFactory,$ as createPortal,_n as default,fn as findDOMNode,sn as flushSync,N as forwardRef,Y as hydrate,on as isValidElement,F as lazy,w as memo,Z as render,vn as startTransition,cn as unmountComponentAtNode,an as unstable_batchedUpdates,dn as useDeferredValue,mn as useInsertionEffect,yn as useSyncExternalStore,pn as useTransition,rn as version};\n//# sourceMappingURL=compat.module.js.map\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import createStore__default from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nexport { default as createStore } from 'zustand/vanilla';\nimport { useDebugValue } from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nfunction useStore(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = typeof createState === \"function\" ? createStore__default(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\n\nexport { create as default, useStore };\n","import { TaskStatus } from \"../../constants/sprigRecordingEvents\";\nimport { AppCard, CardType, Comparator } from \"../../types/card\";\nimport { AppConfig } from \"../../types/config\";\nimport { SelectedValue } from \"../cards/types\";\n\nconst ANSWERED = 1;\n\nconst comparators = {\n eq(a: number, b: number) {\n return a == b;\n },\n\n neq(a: number, b: number) {\n return !this.eq(a, b);\n },\n\n gt(a: number, b: number) {\n return a > b;\n },\n\n gte(a: number, b: number) {\n return a >= b;\n },\n\n lt(a: number, b: number) {\n return a < b;\n },\n\n lte(a: number, b: number) {\n return a <= b;\n },\n\n // multiselect comparators\n list_exact(a: string[] | unknown, b: string[] | unknown) {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n return a.slice().sort().join(\",\") === b.slice().sort().join(\",\");\n },\n\n /**\n * a contains b\n */\n list_all(a: string[] | unknown, b: string[] | unknown) {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n // there's no some value in b that doesn't exist in a is logically equivalent to all value in b exist in a\n return !b.some((val) => a.indexOf(val) === -1);\n },\n\n /**\n * a has at least one value from b\n */\n list_alo(a: string[] | unknown, b: string[] | unknown) {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n // some value exist in b that also exist in a\n return b.some((val) => a.indexOf(val) != -1);\n },\n};\n\n/**\n * @param response response object submitted\n * @param type type of the question\n * @param routingValue value used to determine routing from skip logic\n * @returns\n */\nexport const getHasValidAnswer = (\n response: { value: unknown },\n type: CardType,\n routingValue: { taskStatus: unknown } | null | undefined\n) => {\n switch (type) {\n case CardType.VideoVoice:\n return Boolean(response && response.value);\n case CardType.Open:\n return !!routingValue;\n case CardType.MultipleSelect:\n return Boolean(routingValue && !!Object.keys(routingValue).length);\n case CardType.RecordedTask:\n return routingValue?.taskStatus === TaskStatus.Completed;\n case CardType.TextUrlPrompt:\n return !response.value;\n case CardType.ConsentLegal:\n return routingValue !== null;\n case CardType.MultipleChoice:\n return routingValue !== undefined;\n case CardType.NPS:\n return routingValue !== null;\n case CardType.Likert:\n return routingValue !== null;\n default:\n return true;\n }\n};\n\n/**\n * @param cards - Array of all cards\n * @param index - Current index in the cards\n * @param selectedValue - Value that was selected which determines routing options\n * @param hasEndCard - is the thanks card configured\n * @returns optional next index value, if next index is null, survey ends immediately\n */\nexport const getNextCardIndex = ({\n cards,\n index,\n hasEndCard,\n selectedValue,\n hasValidAnswer = true,\n uploadProgress = {},\n}: {\n cards: AppCard[];\n hasEndCard: boolean;\n hasValidAnswer?: boolean;\n index: number;\n selectedValue: SelectedValue;\n uploadProgress?: AppConfig[\"uploadProgress\"];\n}) => {\n if (index >= cards.length || index < 0) return null; // invalid scenario\n const card = cards[index];\n\n const routingOptions = card.props.routingOptions || [];\n\n let routingTargetStr = null;\n let routingTarget = null;\n for (let i = 0; i < routingOptions.length; i++) {\n const { comparator, target, value } = routingOptions[i];\n if (comparator === Comparator.Answered && hasValidAnswer) {\n routingTargetStr = target;\n break;\n } else if (\n comparator === Comparator.GivenUp &&\n selectedValue instanceof Object &&\n \"taskStatus\" in selectedValue &&\n selectedValue?.taskStatus === TaskStatus.GivenUp\n ) {\n routingTargetStr = target;\n break;\n } else if (\n comparator === Comparator.Skipped &&\n !hasValidAnswer &&\n !(\n selectedValue instanceof Object &&\n \"taskStatus\" in selectedValue &&\n selectedValue?.taskStatus === TaskStatus.GivenUp\n )\n ) {\n routingTargetStr = target;\n break;\n } else if (\n hasValidAnswer &&\n hasComparator(comparator) &&\n comparators[comparator](selectedValue as never, value as never)\n ) {\n routingTargetStr = target;\n break;\n }\n }\n\n // ignore a routingTarget which is not an int, or which leads to the current question index or earlier.\n const parsedRoutingTarget =\n routingTargetStr && parseInt(String(routingTargetStr), 10);\n if (\n routingTargetStr &&\n parsedRoutingTarget !== null &&\n !isNaN(parsedRoutingTarget) &&\n (parsedRoutingTarget === -1 || parsedRoutingTarget > index)\n ) {\n routingTarget = parsedRoutingTarget;\n }\n\n // -1 if not found, cannot be 0 because it's always uploaded after a real question, so at least 1 if present\n const uploadingCardIndex = cards.findIndex(\n (card) => card.type === CardType.Uploading\n );\n\n let lastQuestionIndex;\n if (uploadingCardIndex > 0 && hasEndCard) {\n lastQuestionIndex = cards.length - 3;\n } else if (uploadingCardIndex > 0 || hasEndCard) {\n lastQuestionIndex = cards.length - 2;\n } else {\n lastQuestionIndex = cards.length - 1;\n }\n\n // these are the two end scenarios:\n // 1. when we're at (or, in an error case, after) the last question (don't care about routing in this case)\n // 2. when the routing target is to skip to end (-1) or (error case) to an index after the last question.\n if (\n index >= lastQuestionIndex ||\n routingTarget === -1 ||\n (routingTarget !== null && routingTarget > lastQuestionIndex)\n ) {\n const showUploadingCardAtEnd =\n uploadingCardIndex > 0 &&\n Object.values(uploadProgress).some((v) => v.isSubmitted && !v.isComplete);\n if (showUploadingCardAtEnd) {\n return uploadingCardIndex;\n } else if (hasEndCard) {\n return cards.length - 1;\n } else {\n return null;\n }\n }\n\n // index + 1 is guaranteed to be <= lastQuestionIndex from the previous if statement.\n return routingTarget !== null ? routingTarget : index + 1;\n};\n\nconst MAX_LENGTH_TO_CALCULATE_SUBSETS = 13;\n// https://stackoverflow.com/questions/42773836/how-to-find-all-subsets-of-a-set-in-javascript-powerset-of-array\nconst getAllSubsets = (array: string[]) => {\n return array.reduce(\n (subsets: string[][], value) =>\n subsets.concat(subsets.map((set) => [...set, value])),\n [[]]\n );\n};\n\nconst isNonEmptyArrayOrTruthy = (arg: string[]) =>\n !!(Array.isArray(arg) ? arg.length : arg);\n\nconst generatePossibleSelectedValues = (card: AppCard) => {\n switch (card.type) {\n case CardType.MultipleSelect:\n // return null if invalid options\n if (!card || !card.props || !card.props.options) return null;\n if (card.props.options.length > MAX_LENGTH_TO_CALCULATE_SUBSETS) {\n // 2 ** MAX_LENGTH_TO_CALCULATE_SUBSETS (13) = 8192. above this limit, computation may be too slow.\n // We should almost never see more than 13 options, but in this edge case, only consider length-1 combinations.\n // This may lead to an inaccurate calculation, but we prefer that than poor performance.\n return card.props.options.map((option) => [option.value]);\n }\n return getAllSubsets(card.props.options.map((option) => option.value));\n case CardType.MultipleChoice:\n // return null if invalid options\n if (!card || !card.props || !card.props.options) return null;\n return card.props.options.map((option) => option.value);\n case CardType.Likert:\n return [1, 2, 3, 4, 5];\n case CardType.NPS:\n return [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n case CardType.VideoVoice:\n case CardType.Open:\n return [ANSWERED, \"\"];\n case CardType.RecordedTask:\n return [ANSWERED, TaskStatus.GivenUp, \"\"]; // the '' represents skipped\n case CardType.TextUrlPrompt:\n case CardType.ConsentLegal:\n default:\n return [ANSWERED];\n }\n};\n\nconst hasComparator = (\n comparator: Comparator\n): comparator is Extract<\n Comparator,\n | Comparator.Equal\n | Comparator.NotEqual\n | Comparator.GreaterThan\n | Comparator.GreaterThanOrEqual\n | Comparator.LessThan\n | Comparator.LessThanOrEqual\n | Comparator.ListAll\n | Comparator.ListAtLeastOne\n | Comparator.ListExact\n> => {\n return comparator in comparators;\n};\n\nexport const getMaxRemainingCards = (cards: AppCard[], index: number) => {\n const invalidCardTypes = new Set([CardType.Thanks, CardType.Uploading]);\n\n // returns the maximum number of remaining cards, including this card\n if (index >= cards.length || index < 0) return 0; // invalid scenario\n\n if (invalidCardTypes.has(cards[index].type)) {\n // this is the thank you or uploading card; survey is completed; no max remaining cards\n return 0;\n }\n\n // filter out thank you card and uploading card from calculation, if present\n const filteredCards = cards.filter(\n (card) => !invalidCardTypes.has(card.type)\n );\n\n // this is the last card, so we can short-circuit.\n if (index === filteredCards.length - 1) return 1;\n\n // routingTarget of end card is -1, in this case, there are no questions left.\n const cache = { [filteredCards.length - 1]: 1, [-1]: 0 };\n\n // for each card in reverse order, ending with the current desired index, compute the longest possible\n // number of remaining cards, considering the values of longest possible number of remaining cards after it.\n for (\n let currentIndex = filteredCards.length - 2;\n currentIndex >= index;\n currentIndex--\n ) {\n const card = filteredCards[currentIndex];\n const routingOptions = card.props.routingOptions || [];\n\n // if there aren't routing options, we have to go to the next question\n if (routingOptions.length === 0) {\n cache[currentIndex] = cache[currentIndex + 1] + 1;\n continue;\n }\n\n let maxRemainingCards = 0;\n let possibleSelectedValues = generatePossibleSelectedValues(card);\n\n if (possibleSelectedValues === null) {\n // invalid question options, short-circuit with remaining card count\n return filteredCards.length - 1 - index;\n }\n\n // consider each routing option: if it's possible for it to match,\n // consider where it leads as part of computing the longest possible number of remaining cards.\n for (\n let routingOptionIndex = 0;\n routingOptionIndex < routingOptions.length;\n routingOptionIndex++\n ) {\n if (possibleSelectedValues.length === 0) {\n // remaining routingOptions are never considered\n break;\n }\n\n const { comparator, target, value } = routingOptions[routingOptionIndex];\n // filter out any remaining possible values that match the current routing option\n const newPossibleSelectedValues: string[] | string[][] = (\n possibleSelectedValues as never[]\n ).filter(\n (selectedValue: never) =>\n !(\n (comparator === Comparator.Answered &&\n isNonEmptyArrayOrTruthy(selectedValue) &&\n selectedValue !== TaskStatus.GivenUp) ||\n (comparator === Comparator.Skipped &&\n !isNonEmptyArrayOrTruthy(selectedValue)) ||\n (comparator === Comparator.GivenUp &&\n selectedValue === TaskStatus.GivenUp) ||\n (hasComparator(comparator) &&\n comparators[comparator](selectedValue, value as never))\n )\n );\n\n // if anything was filtered out, it's possible to match the routing options, so use routing target\n if (newPossibleSelectedValues.length < possibleSelectedValues.length) {\n const routingTarget = parseInt(String(target), 10);\n if (\n (routingTarget !== -1 && routingTarget <= currentIndex) ||\n routingTarget >= filteredCards.length\n ) {\n // invalid routing target, short-circuit with remaining card count\n return filteredCards.length - 1 - index;\n }\n maxRemainingCards = Math.max(\n cache[routingTarget] + 1,\n maxRemainingCards\n );\n }\n\n possibleSelectedValues = newPossibleSelectedValues;\n }\n\n if (possibleSelectedValues.length > 0) {\n // it's possible to not match any of the routing values and go to the next question\n maxRemainingCards = Math.max(\n cache[currentIndex + 1] + 1,\n maxRemainingCards\n );\n }\n\n cache[currentIndex] = maxRemainingCards;\n }\n\n return cache[index];\n};\n","import create from \"zustand\";\n\nimport { APP_ID } from \"../constants/css\";\nimport {\n DismissReason,\n InternalEventName,\n InternalEventData,\n SprigEvent,\n} from \"../constants/sprigEvents\";\nimport ConflictingWidgets from \"../helpers/conflicting_widgets\";\nimport { calculateFrameHeight } from \"../helpers/document\";\nimport eventEmitter from \"../helpers/eventEmitter\";\nimport { shouldDirectEmbed } from \"../helpers/general\";\nimport { ulFetch } from \"../helpers/network\";\nimport {\n AppCard,\n Card,\n CardType,\n MultipleChoiceMultiSelectCard,\n} from \"../types/card\";\nimport {\n AppConfig,\n InstallationMethod,\n Platform,\n Submission,\n} from \"../types/config\";\nimport {\n getHasValidAnswer,\n getNextCardIndex,\n} from \"./helpers/skipLogicHelpers\";\n\nconst isQuestionCard = (card: AppCard): card is Card =>\n !(card.type === CardType.Thanks || card.type === CardType.Uploading);\n\nexport const useConfig = create<AppConfig>()((set, get) => ({\n answers: undefined,\n apiURL: \"\",\n border: \"#000000\",\n cards: [],\n close: async (id = APP_ID) => {\n const app = get();\n const { fadeout, remove, trackHistory } = app;\n\n await fadeout(id);\n\n if (!skipWriteForAction(app)) {\n trackHistory({ event: \"closed\" });\n }\n\n ConflictingWidgets.enable();\n remove({ initiator: DismissReason.Closed });\n },\n configureExitOnOverlayClick: () => {},\n customMetadata: {},\n destroy: async (id) => {\n const { eventEmitFn, fadeout, remove } = get();\n\n eventEmitFn(InternalEventName.SurveyComplete);\n await fadeout(id);\n ConflictingWidgets.enable();\n remove({ initiator: DismissReason.Complete });\n },\n endCard: { headline: \"\" },\n envId: \"\",\n eventEmitFn: eventEmitter.emit.bind(eventEmitter),\n fadeout: (id) => {\n const { eventEmitFn, headers, viewDocument } = get();\n\n if (shouldDirectEmbed(headers)) return;\n\n eventEmitFn(SprigEvent.SurveyFadingOut);\n return new Promise<void>((resolve) => {\n const el = viewDocument.getElementById(id);\n\n if (el) {\n el.addEventListener(\"transitionend\", ({ propertyName }) => {\n if (propertyName === \"opacity\") {\n resolve();\n }\n });\n el.classList.remove(\"ul-app--visible\");\n }\n });\n },\n frame: document.createElement(\"iframe\"),\n handleClickEmbedButton: (buttonEventName) => {\n const { cards, eventEmitFn, index } = get();\n\n eventEmitFn(buttonEventName as InternalEventName.CurrentQuestion, {\n [InternalEventData.QuestionId]: cards[index].name,\n [InternalEventData.Props]: cards[index].props, // Only return the upcoming card\n });\n\n set(() => ({ hasViewedEmbed: true }));\n },\n handleUploadUpdate: ({\n mediaRecordingUid,\n isComplete,\n progressPct,\n isSubmitted,\n }) => {\n const { cards, destroy, index, uploadProgress } = get();\n\n const newProgress = {\n ...uploadProgress,\n [mediaRecordingUid]: {\n progressPct:\n progressPct || progressPct === 0\n ? progressPct\n : uploadProgress[mediaRecordingUid]?.progressPct,\n isComplete: isComplete || uploadProgress[mediaRecordingUid]?.isComplete,\n isSubmitted:\n isSubmitted || uploadProgress[mediaRecordingUid]?.isSubmitted,\n },\n };\n\n if (cards[index].type !== CardType.Uploading) {\n set({\n uploadProgress: newProgress,\n });\n\n return;\n }\n\n const uploadComplete = Object.entries(uploadProgress).every(\n ([mRUid, v]) =>\n !v.isSubmitted ||\n v.isComplete ||\n (mediaRecordingUid == mRUid && isComplete)\n );\n\n if (uploadComplete && index >= cards.length - 1) {\n // if upload's complete and there's no end card, close the study. no need to update state\n destroy(APP_ID);\n return;\n }\n\n set({\n index: uploadComplete ? index + 1 : index,\n uploadingCardViewed: true,\n uploadProgress: newProgress,\n });\n },\n hasViewedEmbed: false,\n headers: {\n Authorization: \"\",\n \"Content-Type\": \"\",\n \"userleap-platform\": Platform.Web,\n \"x-ul-environment-id\": \"\",\n \"x-ul-installation-method\": InstallationMethod.Snippet,\n \"x-ul-sdk-version\": \"\",\n \"x-ul-visitor-id\": \"\",\n },\n index: 0,\n isPreview: false,\n marketingUrl: \"https://sprig.com\",\n meta: {\n ch: 0,\n cw: 0,\n l: \"\",\n mode: null,\n p: \"\",\n sh: 0,\n sw: 0,\n },\n mode: undefined,\n next: (params) => {\n const {\n cards,\n eventEmitFn,\n index,\n responseGroupUid,\n submit,\n trackHistory,\n uploadProgress,\n viewedCardCount,\n } = get();\n\n // Store the value into the cards\n const answeredAt = Date.now();\n const newCards = [...cards];\n const card = newCards[index];\n\n const { type } = params.data;\n\n const response: { type?: CardType } & Omit<typeof params[\"data\"], \"type\"> =\n {\n ...params.data,\n }; // avoid mutating input, though this is a shallow copy\n const value = response.value;\n\n if (isQuestionCard(card)) {\n card.value = value;\n }\n\n response.answeredAt = answeredAt;\n delete response.type;\n\n const submission: Submission = {\n response,\n responseGroupUid,\n completedAt: answeredAt, // TODO: validate this logic is correct\n };\n\n let routingValue =\n type === CardType.MultipleChoice\n ? Object.values(value as boolean[]).find((v) => v !== false)\n : value;\n\n // MultiChoice Multi Select, should test route based on the selected options\n if (type === CardType.MultipleSelect) {\n routingValue = (\n newCards[index] as MultipleChoiceMultiSelectCard\n ).props.options.reduce<string[]>((accumulator, option) => {\n if ((value as { [key: number]: string })[option.id]) {\n accumulator.push(option.value);\n }\n return accumulator;\n }, []);\n }\n\n const hasValidAnswer = getHasValidAnswer(\n response,\n type,\n routingValue as never\n );\n const routingTarget = getNextCardIndex({\n cards: newCards,\n index,\n selectedValue: routingValue as never,\n hasEndCard: !!params.endCard,\n hasValidAnswer,\n uploadProgress,\n });\n if (routingTarget === null) {\n // no more next index, survey completed\n submission.completedAt = answeredAt;\n submit(submission);\n params.completeSurvey();\n return;\n } else if (\n [CardType.Thanks, CardType.Uploading].includes(\n newCards[routingTarget].type\n )\n ) {\n submission.completedAt = answeredAt;\n }\n\n const p = submit(submission);\n if (\n ![CardType.Thanks, CardType.Uploading].includes(\n newCards[routingTarget].type\n )\n ) {\n p.finally(() => {\n trackHistory({ event: \"seen\", index: routingTarget });\n });\n }\n\n // Emit current question's property to the configured event subscriber.\n const newCard = newCards[routingTarget];\n if (newCards[routingTarget] && eventEmitFn) {\n eventEmitFn(InternalEventName.CurrentQuestion, {\n [InternalEventData.QuestionId]: newCard.name,\n [InternalEventData.Props]: newCard.props, // Only return the upcoming card\n });\n }\n\n set({\n cards: newCards,\n hasViewedEmbed: true,\n index: routingTarget,\n viewedCardCount: viewedCardCount + 1,\n });\n },\n recorder: () => {},\n recorderEventEmitter: eventEmitter,\n responseGroupUid: \"\",\n remove: ({ initiator }) => {\n const { frame, headers, eventEmitFn } = get();\n const isMobile = [\"ios\", \"android\"].includes(headers[\"userleap-platform\"]);\n if (isMobile)\n eventEmitFn(SprigEvent.SurveyWillClose, {\n name: SprigEvent.SurveyWillClose,\n initiator,\n });\n if (shouldDirectEmbed(headers)) return;\n eventEmitFn(SprigEvent.SurveyWillClose, {\n name: SprigEvent.SurveyWillClose,\n initiator,\n });\n frame.remove();\n },\n slugName: null,\n showStripes: false,\n showSurveyBrand: false,\n styleNonce: \"\",\n submit: async ({ completedAt, response, responseGroupUid }) => {\n const app = get();\n if (!responseGroupUid || skipWriteForAction(app)) {\n return;\n }\n\n const payload = {\n responseGroupUid,\n meta: app.meta,\n customMetadata: app.customMetadata,\n responses: [response],\n completedAt,\n };\n const result = await ulFetch(\n `${app.apiURL}/sdk/1/environments/${app.envId}/visitors/${app.userId}/responses/submit`,\n {\n body: JSON.stringify(payload),\n headers: app.headers,\n method: \"POST\",\n }\n );\n\n if (!result.ok) {\n if (result.reportError) {\n console.warn(\n `[Sprig] (ERR-427) Failed to submit response`,\n result.error\n );\n await reportError(app, \"submitResponse\", result.error);\n }\n return;\n }\n },\n surveyId: 0,\n tabTitle: \"\",\n trackHistory: async ({ event, index: idx, isNew = false }) => {\n const app = get();\n if (skipWriteForAction(app)) {\n return;\n }\n\n const { cards, index } = app;\n\n const card = idx !== undefined ? cards[idx] : cards[index];\n const hist = {\n sid: app.surveyId,\n qid: card.name,\n action: event,\n vid: app.userId,\n eid: app.envId,\n isNew,\n responseGroupUid: app.responseGroupUid,\n };\n const result = await ulFetch(\n `${app.apiURL}/sdk/1/visitors/${app.userId}/surveys/${app.surveyId}/history`,\n {\n body: JSON.stringify(hist),\n headers: app.headers,\n method: \"POST\",\n }\n );\n if (!result.ok && result.reportError) {\n console.warn(\n `[Sprig] (ERR-428) Failed to track survey event`,\n result.error\n );\n await reportError(app, \"trackHistory\", result.error);\n }\n },\n update: (id = APP_ID) => {\n const { headers, eventEmitFn, frame, viewDocument } = get();\n\n const element = viewDocument.getElementById(id || \"\");\n const { classList } = element || {};\n\n // Handle initial animation\n if (classList && !classList.contains(\"ul-app--visible\")) {\n if (shouldDirectEmbed(headers)) {\n classList.add(\"ul-app--visible\");\n } else {\n classList.add(\"ul-app--overlay\");\n setTimeout(() => {\n classList.add(\"ul-app--visible\");\n }, 100);\n }\n if (eventEmitFn) eventEmitFn(SprigEvent.SurveyAppeared);\n }\n // send height update after the initial animation to show the survey frame\n setTimeout(() => {\n const height = calculateFrameHeight(viewDocument);\n if (!shouldDirectEmbed(headers)) {\n frame.setHeight?.(height);\n } else {\n eventEmitFn(SprigEvent.SurveyHeight, {\n name: SprigEvent.SurveyHeight,\n contentFrameHeight: height,\n });\n }\n }, 100);\n },\n uploadingCardViewed: false,\n uploadProgress: {},\n useDesktopPrototype: undefined,\n useMobileStyling: false,\n userId: \"\",\n viewDocument: window.document,\n viewedCardCount: 0,\n}));\n\nconst skipWriteForAction = (app: AppConfig) => {\n return !app.userId || (app.meta && app.meta.mode === \"test\") || app.isPreview;\n};\n\nconst reportError = async (state: AppConfig, action: string, err?: Error) => {\n const { mode, userId: vid, envId, apiURL, headers, viewDocument } = state;\n const pde = viewDocument.documentElement;\n const meta = {\n mode,\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n clientWidth: pde.clientWidth,\n clientHeight: pde.clientHeight,\n location: window.location.href,\n language: window.navigator.language,\n };\n const body = {\n action,\n err: { message: err?.message, stack: err?.stack },\n meta,\n vid,\n envId,\n };\n const result = await ulFetch(`${apiURL}/sdk/1/errors`, {\n method: \"POST\",\n headers: Object.assign(\n { \"x-ul-error\": window.btoa(`userleap-${Date.now()}-error`) },\n headers\n ),\n body: JSON.stringify(body),\n });\n if (!result.ok) {\n console.warn(`[Sprig] (ERR-444) Failed to report error to API`, err);\n }\n};\n","import { v4 as uuid } from \"uuid\";\n\nimport {\n SprigRecordingEvent as EVENTS,\n SprigRecordingEventData as PAYLOAD,\n MediaType,\n SprigRecordingEvent,\n} from \"../../constants/sprigRecordingEvents\";\nimport { SprigEventEmitter, EventPayload } from \"../../helpers/eventEmitter\";\nimport { AppCard, AvPermission, CardType } from \"../../types/card\";\nimport { RecordedTaskResponseType } from \"../../view/cards/recordedTask/store\";\nimport { useConfig } from \"../../view/store\";\nimport {\n getHasValidAnswer,\n getNextCardIndex,\n} from \"../helpers/skipLogicHelpers\";\n\ntype UuidDecoratedMediaRecorder = MediaRecorder & {\n currentMediaRecordingUid?: UUID;\n};\n\n// media recorder state\nconst enum MediaRecorderState {\n Inactive = \"inactive\",\n Recording = \"recording\",\n}\nconst enum VideoFormat {\n Webm = \"video/webm\",\n Mp4 = \"video/mp4\",\n}\n\nconst createUploadUrl = async (body: unknown, uploadApiEndpoint: string) => {\n const response = await fetch(uploadApiEndpoint, {\n method: \"POST\",\n cache: \"no-cache\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n if (response.ok) {\n const uploadResponse = await response.json();\n return uploadResponse?.upload?.url;\n } else {\n return null;\n }\n};\n\nconst getSupportedMimeType = () => {\n return MediaRecorder.isTypeSupported(VideoFormat.Webm)\n ? VideoFormat.Webm\n : VideoFormat.Mp4;\n};\n\nconst createRecorder = (stream: MediaStream) => {\n const recordingOptions = {\n audioBitsPerSecond: 128000, //standard setting based on documentation's example\n videoBitsPerSecond: 2500000,\n mimeType: getSupportedMimeType(),\n };\n const recorder: UuidDecoratedMediaRecorder = new MediaRecorder(\n stream,\n recordingOptions\n );\n return recorder;\n};\n\nconst startRecording = (\n recorder: UuidDecoratedMediaRecorder,\n mediaRecordingUid: UUID,\n chunks: Record<string, Blob[]>\n) => {\n chunks[mediaRecordingUid] = [];\n recorder.ondataavailable = function (e) {\n chunks[mediaRecordingUid].push(e.data);\n };\n recorder.currentMediaRecordingUid = mediaRecordingUid;\n recorder.start();\n};\n\nfunction stopRecorderAndUpload(\n recorder: UuidDecoratedMediaRecorder,\n uploadApiEndpoint: string,\n mediaType: MediaType,\n payload: EventPayload[SprigRecordingEvent.FinishTask],\n UpChunk: Window[\"UpChunk\"],\n chunkData: Blob[]\n) {\n if (recorder && recorder.state !== MediaRecorderState.Inactive) {\n const { [PAYLOAD.BeginCallback]: beginCallback } = payload;\n const uuid = recorder.currentMediaRecordingUid;\n if (!uuid) return;\n if (beginCallback) {\n beginCallback(uuid);\n }\n recorder.onstop = () =>\n createUpload(\n uploadApiEndpoint,\n recorder,\n mediaType,\n payload,\n uuid,\n UpChunk,\n chunkData\n );\n recorder.stop();\n }\n}\n\nasync function createUpload(\n uploadApiEndpoint: string,\n recorder: UuidDecoratedMediaRecorder,\n mediaType: MediaType,\n payload: EventPayload[SprigRecordingEvent.FinishTask],\n mediaRecordingUid: string,\n UpChunk: Window[\"UpChunk\"],\n chunkData: Blob[]\n) {\n const viewDocument = useConfig.getState().viewDocument;\n\n const {\n [PAYLOAD.UploadCallback]: uploadCallback,\n [PAYLOAD.ProgressCallback]: progressCallback,\n } = payload;\n const body = {\n mediaType,\n updatedAt: new Date().toISOString(),\n mediaRecordingUid,\n ...payload[PAYLOAD.PassthroughData],\n };\n const url = await createUploadUrl(body, uploadApiEndpoint);\n if (!url) {\n uploadCallback &&\n uploadCallback(null, { message: \"failed to get upload url\" });\n return;\n }\n const blob = new Blob(chunkData, { type: getSupportedMimeType() });\n if (!viewDocument.defaultView) return;\n const file = new viewDocument.defaultView.File(\n [blob],\n `recording video ${Date.now()}`\n );\n\n if (blob.size === 0) return; // TODO add analytics\n\n const upload = UpChunk.createUpload({\n // endpoint computed from backend separately and hacked together\n endpoint: url,\n file,\n chunkSize: 5120, // Uploads the file in ~5mb chunks\n });\n upload.startTime = Date.now();\n\n // subscribe to events\n upload.on(\"error\", (err) => {\n uploadCallback && uploadCallback(null, err);\n });\n\n upload.on(\"progress\", (progress) => {\n progressCallback && progressCallback(mediaRecordingUid, progress);\n });\n\n upload.on(\"success\", () => {\n uploadCallback && uploadCallback(mediaRecordingUid, true);\n });\n}\n\ninterface RecorderState {\n uploadApiEndpoint?: string;\n avRecorder?: UuidDecoratedMediaRecorder;\n screenRecorder?: UuidDecoratedMediaRecorder;\n UpChunk?: Window[\"UpChunk\"];\n avStream?: MediaStream;\n captureStream?: MediaStream;\n chunks: Record<string, Blob[]>;\n startTime?: Date;\n cards?: AppCard[];\n hasEndCard?: boolean;\n}\n\nconst initialRecorderState: RecorderState = { chunks: {} };\n\nconst ULRecorder = {\n state: { ...initialRecorderState },\n stopRecording(payload: EventPayload[SprigRecordingEvent.FinishTask]) {\n const { uploadApiEndpoint, avRecorder, screenRecorder, UpChunk } =\n this.state;\n const mediaType =\n this.state.avStream && this.state.avStream.getVideoTracks().length > 0\n ? MediaType.Video\n : MediaType.Audio;\n if (this.state.chunks && uploadApiEndpoint && UpChunk) {\n if (avRecorder?.currentMediaRecordingUid) {\n stopRecorderAndUpload(\n avRecorder,\n uploadApiEndpoint,\n mediaType,\n payload,\n UpChunk,\n this.state.chunks[avRecorder?.currentMediaRecordingUid]\n );\n }\n if (screenRecorder?.currentMediaRecordingUid) {\n stopRecorderAndUpload(\n screenRecorder,\n uploadApiEndpoint,\n MediaType.Screen,\n payload,\n UpChunk,\n this.state.chunks[screenRecorder?.currentMediaRecordingUid]\n );\n }\n }\n },\n\n handleCancelledStream(stream: MediaStream, streamCancelled: () => void) {\n const videoTracks = stream.getVideoTracks();\n const audioTracks = stream.getAudioTracks();\n let track = videoTracks.length && videoTracks[0];\n track = track || (audioTracks.length && audioTracks[0]);\n if (track) {\n track.addEventListener(\"ended\", () => {\n let hasStartedRecording = false;\n [this.state.avRecorder, this.state.screenRecorder].map((recorder) => {\n if (recorder) {\n recorder.state === \"recording\" && recorder.stop();\n recorder.stream.getTracks().map((track) => {\n track.readyState === \"live\" && track.stop();\n });\n hasStartedRecording = true;\n }\n });\n Object.assign(this.state, {\n avStream: null,\n captureStream: null,\n avRecorder: null,\n screenRecorder: null,\n });\n hasStartedRecording && streamCancelled && streamCancelled();\n });\n }\n },\n taskDurationMillisecond() {\n if (!this.state.startTime) return 0;\n const currentTime = new Date();\n return currentTime.getTime() - this.state.startTime.getTime();\n },\n setUpChunk(UpChunk: Window[\"UpChunk\"]) {\n this.state.UpChunk = UpChunk;\n },\n configure(\n eventEmitter: SprigEventEmitter,\n initialState: Partial<RecorderState> & {\n cards: AppCard[];\n hasEndCard: boolean;\n apiURL: string;\n }\n ) {\n Object.assign(this.state, initialState); // options may be used to augment the settings for videos\n this.state.uploadApiEndpoint = `${initialState.apiURL}/2/environments/integrations/upload`;\n this.state.chunks = {};\n\n // defining event listener callbacks into object to reference once stream is done\n eventEmitter.on(\n EVENTS.PermissionStatus,\n this.permissionStatusCallback.bind(this)\n );\n eventEmitter.on(EVENTS.AvPermission, async (payload) => {\n // handle request AV permission\n this.avPermissionCallback(payload);\n });\n eventEmitter.on(\n EVENTS.BeginRecording,\n this.beginRecordingCallback.bind(this)\n );\n eventEmitter.on(EVENTS.StartTask, this.startTaskCallback.bind(this));\n eventEmitter.on(EVENTS.ScreenPermission, async (payload) => {\n // handle request screen permission\n this.screenPermissionCallback(payload);\n });\n eventEmitter.on(\n EVENTS.FinishTask,\n async (payload: EventPayload[SprigRecordingEvent.FinishTask]) => {\n // handle stop recording due to various reasons\n this.finishTaskCallback(payload);\n }\n );\n },\n async avPermissionCallback(\n payload: EventPayload[SprigRecordingEvent.AvPermission]\n ) {\n const {\n [PAYLOAD.StreamReadyCallback]: streamReady,\n [PAYLOAD.StreamCanceledCallback]: streamCancelled,\n [PAYLOAD.PermissionDescriptors]: permissionDescriptors,\n } = payload;\n try {\n if (this.state.avStream?.active) {\n // stop previous stream before opening a new one\n this.state.avStream\n .getTracks()\n .map((track) => track.readyState === \"live\" && track.stop());\n\n // remove track from capture stream and add it back again after getting new user media object below\n this.state.captureStream?.getAudioTracks().length === 1 &&\n this.state.captureStream.removeTrack(this.state.captureStream.getAudioTracks()[0]);\n }\n\n this.state.avStream = await navigator.mediaDevices.getUserMedia({\n video: permissionDescriptors.includes(AvPermission.Camera),\n audio: true,\n });\n\n this.state.captureStream?.getAudioTracks().length === 0 &&\n this.state.captureStream.addTrack(this.state.avStream.getAudioTracks()[0]);\n\n this.handleCancelledStream(this.state.avStream, streamCancelled);\n } catch (err) {\n console.warn(\"Error: failed to get permissions: \" + err);\n streamReady && streamReady(null, null);\n return;\n }\n streamReady && streamReady(this.state.avStream, this.state.captureStream);\n },\n async screenPermissionCallback(\n payload: EventPayload[SprigRecordingEvent.ScreenPermission]\n ) {\n const {\n [PAYLOAD.StreamReadyCallback]: streamReady,\n [PAYLOAD.StreamCanceledCallback]: streamCancelled,\n } = payload;\n try {\n this.state.captureStream = await navigator.mediaDevices.getDisplayMedia({\n video: true,\n cursor: \"always\",\n displaySurface: \"browser\",\n preferCurrentTab: true,\n } as DisplayMediaStreamConstraints); //typings do not support the cursor property\n } catch (err) {\n console.warn(\"Error: failed to get permissions: \" + err);\n streamReady && streamReady(null, null);\n return;\n }\n this.state.avStream &&\n this.state.avStream.getAudioTracks().length > 0 &&\n this.state.captureStream.addTrack(\n this.state.avStream.getAudioTracks()[0]\n );\n this.handleCancelledStream(this.state.captureStream, streamCancelled);\n streamReady &&\n streamReady(this.state.avStream || null, this.state.captureStream);\n },\n beginRecordingCallback(\n payload: EventPayload[SprigRecordingEvent.BeginRecording]\n ) {\n const {\n [PAYLOAD.RecordingMediaTypes]: mediaTypes,\n [PAYLOAD.StartRecordingCallback]: startRecordingCallback,\n } = payload;\n if (!mediaTypes) return;\n const mediaRecordingUids = [];\n if (mediaTypes.includes(MediaType.Video) && this.state.avStream) {\n // only need to record video if video is specified\n this.state.avRecorder = createRecorder(this.state.avStream);\n const mediaRecordingUid = uuid();\n startRecording(\n this.state.avRecorder,\n mediaRecordingUid,\n this.state.chunks\n );\n mediaRecordingUids.push(mediaRecordingUid);\n }\n if (mediaTypes.includes(MediaType.Screen) && this.state.captureStream) {\n this.state.screenRecorder = createRecorder(this.state.captureStream);\n const mediaRecordingUid = uuid();\n startRecording(\n this.state.screenRecorder,\n mediaRecordingUid,\n this.state.chunks\n );\n mediaRecordingUids.push(mediaRecordingUid);\n }\n mediaRecordingUids &&\n startRecordingCallback &&\n startRecordingCallback(mediaRecordingUids);\n },\n async finishTaskCallback(\n payload: EventPayload[SprigRecordingEvent.FinishTask]\n ) {\n const {\n [PAYLOAD.CurrentIndex]: currentIndex,\n [PAYLOAD.TaskResponse]: response,\n [PAYLOAD.TaskCompleteCallback]: taskCompleteCallback,\n } = payload;\n await this.stopRecording(payload);\n taskCompleteCallback &&\n taskCompleteCallback(this.taskDurationMillisecond());\n this.state.cards &&\n this.state.hasEndCard !== undefined &&\n this.lookAheadAndStopStream(\n currentIndex,\n response,\n this.state.cards,\n this.state.hasEndCard\n );\n },\n startTaskCallback() {\n this.state.startTime = new Date();\n },\n permissionStatusCallback(\n payload: EventPayload[SprigRecordingEvent.PermissionStatus]\n ) {\n const { [PAYLOAD.PermissionStatusCallback]: permissionStatusCallback } =\n payload;\n const avStream = this.state.avStream;\n permissionStatusCallback &&\n permissionStatusCallback(\n avStream,\n avStream ? avStream?.getVideoTracks().length > 0 : false,\n !!this.state.captureStream?.active\n );\n },\n lookAheadAndStopStream(\n currentIndex: number,\n response: RecordedTaskResponseType,\n cards: AppCard[],\n hasEndCard: boolean\n ) {\n // we don't have access to uploadProgress, but we don't need to pass it into getNextCardIndex\n // because uploadProgress is only used if currentIndex is the last question index\n // (in which case there's no recorded task after this question anyway)\n // TODO we need to revisit this scenario when we refactor skip logic to display logic.. quite buggy here..\n const { avRecorder, screenRecorder } = this.state;\n const nextCardIndex = getNextCardIndex({\n cards: cards,\n index: currentIndex,\n selectedValue: response.value,\n hasEndCard: hasEndCard,\n hasValidAnswer: getHasValidAnswer(\n response,\n response.type,\n response.value\n ),\n });\n if (\n nextCardIndex !== null &&\n cards[nextCardIndex].type === CardType.RecordedTask\n ) {\n // if the next card is a recorded task then don't stop the stream\n return;\n }\n // stops the active stream because the next question is not a recorded question\n [avRecorder, screenRecorder].map((recorder) => {\n if (recorder) {\n recorder.state === \"recording\" && recorder.stop();\n recorder.stream.getTracks().map((track) => {\n track.readyState === \"live\" && track.stop();\n });\n }\n });\n },\n};\n\nconst instance = Object.create(ULRecorder);\nObject.freeze(instance);\nexport default instance;\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import{options as r}from\"preact\";export{Fragment}from\"preact\";var _=0;function o(o,e,n,t,f){var l,s,u={};for(s in e)\"ref\"==s?l=e[s]:u[s]=e[s];var a={type:o,props:u,key:n,ref:l,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:--_,__source:f,__self:t};if(\"function\"==typeof o&&(l=o.defaultProps))for(s in l)void 0===u[s]&&(u[s]=l[s]);return r.vnode&&r.vnode(a),a}export{o as jsx,o as jsxDEV,o as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import { CssConstant } from \"../../constants/css\";\n\ninterface Props {\n message?: string;\n properties?: { captionText?: string };\n}\n\nconst Header = ({ message, properties }: Props) => {\n const caption = properties?.captionText;\n\n return (\n <>\n {message && (\n <p\n className={CssConstant.QuestionHeader}\n id={CssConstant.QuestionHeader}\n role=\"heading\"\n {...(caption\n ? {}\n : {\n style: {\n marginBottom: \"15px\",\n },\n })}\n >\n {message}\n </p>\n )}\n {caption && (\n <p className={CssConstant.Caption} id={CssConstant.Caption}>\n {caption}\n </p>\n )}\n </>\n );\n};\n\nexport default Header;\n","import { JSXInternal } from \"preact/src/jsx\";\n\nimport { EMBED_MOBILE_MAX_WIDTH } from \"../../constants/css\";\nimport { InternalEventName } from \"../../constants/sprigEvents\";\nimport { ConceptUrl } from \"../../types/card\";\nimport { Platform } from \"../../types/config\";\n\nconst ViewEmbedButton = ({\n buttonText = \"View Prototype\",\n handleClick,\n}: {\n buttonText?: string;\n handleClick: (e: JSXInternal.TargetedMouseEvent<HTMLButtonElement>) => void;\n}) => (\n <button\n className=\"prototype-button\"\n key=\"prototype-btn\"\n onClick={handleClick}\n >\n {buttonText}\n </button>\n);\n\n/*\n Used for every question type to check if there is any embedded content.\n The two embedded types are prototype and pdf.\n*/\nconst MobileEmbedView = ({\n defaultBody,\n embeddedType = \"prototype\",\n handleClickEmbedButton,\n hasViewedEmbed,\n platform = Platform.Web,\n properties,\n useDesktopPrototype = true,\n}: {\n defaultBody: () => JSXInternal.Element;\n embeddedType?: \"prototype\" | \"pdf\";\n handleClickEmbedButton: (name: string) => void;\n hasViewedEmbed: boolean;\n platform?: Platform;\n properties?: {\n conceptUrl: ConceptUrl;\n consentDocument?: {\n url: string;\n };\n viewDocumentText?: string;\n };\n useDesktopPrototype?: boolean;\n}) => {\n const isMobileEmbedViewportWidth = window.innerWidth < EMBED_MOBILE_MAX_WIDTH;\n\n const hasEmbed = properties?.conceptUrl || properties?.consentDocument?.url;\n\n /** handles the behavior when end user clicks on \"view prototype\" button in the mobile browser */\n const handleEmbedButtonClick = (\n event: JSXInternal.TargetedMouseEvent<HTMLButtonElement>,\n buttonEventName: string\n ) => {\n event.preventDefault();\n handleClickEmbedButton(buttonEventName);\n };\n\n if (\n !useDesktopPrototype &&\n isMobileEmbedViewportWidth &&\n !hasViewedEmbed &&\n hasEmbed &&\n [\"email\", \"link\"].includes(platform)\n ) {\n if (embeddedType === \"prototype\")\n return (\n <ViewEmbedButton\n handleClick={(e) => {\n handleEmbedButtonClick(e, InternalEventName.ViewPrototypeClick);\n }}\n />\n );\n else if (embeddedType === \"pdf\")\n return (\n <ViewEmbedButton\n buttonText={properties?.viewDocumentText || \"View Document\"}\n handleClick={(e) => {\n handleEmbedButtonClick(e, InternalEventName.ViewAgreementClick);\n }}\n />\n );\n }\n\n return defaultBody();\n};\n\nexport default MobileEmbedView;\n","import { Ref, useEffect, useRef } from \"preact/hooks\";\n\nexport const useAutoSize = (\n textAreaRef: Ref<HTMLTextAreaElement>,\n sizeUpdate: () => void\n) => {\n const heightRef = useRef(0);\n const autosizeHeight = () => {\n if (textAreaRef.current) {\n const elem = textAreaRef.current;\n // get the computed styles for the element\n elem.style.height = \"1px\";\n const scrollHeight = elem.scrollHeight;\n const extra = elem.offsetHeight - elem.clientHeight;\n const totalHeight = scrollHeight + extra;\n const maxHeight = parseInt(\n window.getComputedStyle(elem).getPropertyValue(\"max-height\")\n );\n\n // calculate the height\n const height = totalHeight <= maxHeight ? totalHeight : maxHeight;\n\n // row was added\n if (heightRef.current !== height) {\n sizeUpdate();\n }\n\n heightRef.current = height;\n elem.style.height = `${height}px`;\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(autosizeHeight, []);\n return autosizeHeight;\n};\n","import clsx from \"clsx\";\nimport { useState, useRef, useEffect } from \"preact/hooks\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { APP_ID, CssConstant, ERROR_BORDER_COLOR } from \"../../constants/css\";\nimport { isTargetTextAreaElement } from \"../../helpers/document\";\nimport { getClasses } from \"../../helpers/general\";\nimport { useConfig } from \"../../view/store\";\nimport { useAutoSize } from \"../hooks\";\n\n/**\n * Select component\n */\nconst Select = ({\n border,\n label,\n isSelected,\n value,\n text,\n id,\n isRadio,\n useMobileStyling,\n error,\n allowTextEntry,\n promptText,\n onUserInputChanged,\n}: {\n border: string;\n label: string;\n isSelected: boolean;\n value?: string;\n text?: string;\n index: number;\n id?: string;\n isRadio: boolean;\n useMobileStyling: boolean;\n error: boolean;\n allowTextEntry: boolean;\n promptText?: string;\n onUserInputChanged: (args: {\n id: string;\n selected: boolean;\n value?: string;\n userText?: string;\n }) => void;\n}) => {\n const { styleNonce, viewDocument } = useConfig((s) => ({\n styleNonce: s.styleNonce,\n viewDocument: s.viewDocument,\n }));\n const [isActive, setIsActive] = useState(false);\n createStyles(viewDocument, border, styleNonce);\n\n const onStateUpdated = ({\n isSelected: selected,\n userText,\n }: {\n isSelected: boolean;\n userText?: string;\n }) => {\n if (onUserInputChanged) {\n onUserInputChanged({\n id: id || \"\",\n selected,\n value,\n userText,\n });\n }\n };\n const onClickEvent = (e: JSXInternal.TargetedEvent) => {\n e.stopPropagation();\n onStateUpdated({ isSelected: isRadio || !isSelected, userText: text });\n setIsActive(false);\n };\n\n const onActive = () => {\n if (!isActive) {\n setIsActive(true);\n }\n };\n\n const onInactive = () => {\n if (isActive) {\n setIsActive(false);\n }\n };\n\n const onKeyPress = (e: JSXInternal.TargetedKeyboardEvent<HTMLElement>) => {\n if (isTargetTextAreaElement(e.target)) return;\n if (e.key === \"Enter\" || e.key === \" \") onClickEvent(e);\n };\n\n const clickArgs: Partial<JSXInternal.DOMAttributes<HTMLElement>> = {\n onClick: (e: JSXInternal.TargetedEvent) => onClickEvent(e),\n onKeyPress: (e: JSXInternal.TargetedKeyboardEvent<HTMLElement>) =>\n onKeyPress(e),\n };\n\n if (\"ontouchstart\" in viewDocument.documentElement) {\n clickArgs.onTouchStart = onInactive;\n clickArgs.onTouchCancel = onInactive;\n clickArgs.onTouchEnd = onInactive;\n } else {\n clickArgs.onMouseDown = onActive;\n clickArgs.onMouseLeave = onInactive;\n }\n\n const divId = isRadio ? `radio-${id}` : `checkbox-${id}`;\n const conditionalSelectedStyles =\n isSelected || isActive ? [SELECT_ACTIVE_STYLE_CLASS] : [];\n const additionalContainerStyles = [\n ...(error ? [SELECT_ERROR_STYLE_CLASS] : []),\n ...conditionalSelectedStyles,\n ];\n\n return (\n <div\n className={clsx([\n ...getClasses(CssConstant.Choice, useMobileStyling),\n ...additionalContainerStyles,\n ])}\n id={`choice-div-${id}`}\n style={error ? { borderColor: ERROR_BORDER_COLOR } : {}}\n {...clickArgs}\n >\n <div className={clsx([CssConstant.ChoiceLabelContainer])}>\n {!isRadio && (\n <div\n aria-checked={isSelected}\n aria-labelledby={`${CssConstant.QuestionHeader} label-${id}`}\n className={CssConstant.ChoiceCheckbox}\n id={divId}\n role=\"checkbox\"\n style={\n isSelected\n ? {\n backgroundColor: border,\n borderColor: border,\n boxShadow: \"none\",\n }\n : {}\n }\n tabIndex={0}\n >\n {isSelected && (\n <svg\n fill=\"none\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n width=\"10\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9.15377 1.30774L4.07685 8.23082L1.30762 5.00005\"\n stroke=\"white\"\n strokeLinecap=\"round\"\n strokeWidth=\"2\"\n />\n </svg>\n )}\n </div>\n )}\n {isRadio && (\n <div\n aria-labelledby={`${CssConstant.QuestionHeader} label-${id}`}\n className={clsx([\n CssConstant.ChoiceRadio,\n ...conditionalSelectedStyles,\n ])}\n id={divId}\n role=\"radio\"\n tabIndex={0}\n ></div>\n )}\n <label\n className={clsx(\n getClasses(CssConstant.ChoiceLabel, useMobileStyling)\n )}\n htmlFor={divId}\n id={`label-${id}`}\n >\n {label}\n </label>\n </div>\n {allowTextEntry && isSelected && (\n <div\n className={clsx([\n CssConstant.ChoiceTextEntryContainer,\n ...conditionalSelectedStyles,\n ])}\n >\n <TextEntryBox\n onTextChange={(userText: string) =>\n onStateUpdated({ isSelected, userText })\n }\n promptText={promptText || \"Please specify\"}\n textValue={text}\n useMobileStyling={useMobileStyling}\n />\n </div>\n )}\n </div>\n );\n};\n\nconst TextEntryBox = ({\n promptText,\n textValue,\n onTextChange,\n useMobileStyling,\n}: {\n promptText: string;\n textValue?: string;\n onTextChange: (value: string) => void;\n useMobileStyling: boolean;\n}) => {\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const { update } = useConfig((s) => ({\n update: s.update,\n }));\n const autosize = useAutoSize(inputRef, () => update(APP_ID));\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n }, []);\n\n return (\n <textarea\n aria-label={promptText}\n aria-labelledby={CssConstant.QuestionHeader}\n aria-multiline=\"true\"\n aria-placeholder={promptText}\n className={clsx(\n getClasses(CssConstant.ChoiceTextInput, useMobileStyling)\n )}\n contentEditable={true}\n data-gramm=\"false\"\n maxLength={5000}\n name=\"text\"\n onChange={(e) => {\n autosize();\n if (isTargetTextAreaElement(e.target)) {\n e.stopPropagation();\n onTextChange(e.target.value);\n }\n }}\n onClick={(e) => {\n e.stopPropagation();\n }}\n onKeyPress={(e) => {\n e.stopPropagation();\n }}\n placeholder={promptText}\n ref={inputRef}\n role=\"textbox\"\n rows={1}\n value={textValue}\n />\n );\n};\n\nconst SELECT_STYLE_ELEM_ID = \"ul-select-style-element\";\nconst SELECT_ACTIVE_STYLE_CLASS = \"ul-select-active-dynamic-style\";\nconst SELECT_ERROR_STYLE_CLASS = \"ul-select-error-dynamic-style\";\n\nconst isHtmlStyleElement = (\n element: HTMLElement\n): element is HTMLStyleElement => {\n return element.tagName.toLowerCase() === \"style\";\n};\n\nconst createStyles = (\n viewDocument: Document,\n border: string,\n nonce?: string\n) => {\n let selectStyle = viewDocument.getElementById(SELECT_STYLE_ELEM_ID);\n let elementCreated = false;\n if (!selectStyle) {\n selectStyle = viewDocument.createElement(\"style\");\n elementCreated = true;\n }\n if (isHtmlStyleElement(selectStyle)) {\n selectStyle.id = SELECT_STYLE_ELEM_ID;\n if (nonce) selectStyle.nonce = nonce;\n selectStyle.textContent = getSelectStyle(border);\n if (elementCreated) {\n viewDocument.head.appendChild(selectStyle);\n }\n }\n};\n\nconst getSelectStyle = (border: string) => {\n return `\n .${SELECT_ACTIVE_STYLE_CLASS} {\n border-color: ${border};\n }\n .${SELECT_ACTIVE_STYLE_CLASS} .${CssConstant.ChoiceRadio}, .${SELECT_ACTIVE_STYLE_CLASS}.${CssConstant.ChoiceRadio} {\n border: 6px solid ${border};\n box-shadow: none;\n }\n .${SELECT_ERROR_STYLE_CLASS} {\n border-color: ${ERROR_BORDER_COLOR};\n }\n `;\n};\n\nexport default Select;\n","export const getButtonText = (properties?: { buttonText?: string }) => {\n return properties?.buttonText || \"Next\";\n};\n\nexport const getSkipButtonText = (properties?: { skipButtonText?: string }) => {\n return properties?.skipButtonText || \"Skip\";\n};\n","import clsx from \"clsx\";\nimport { useState, useEffect } from \"preact/hooks\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport {\n CssConstant,\n DEFAULT_BORDER_COLOR,\n ERROR_BORDER_COLOR,\n} from \"../../constants/css\";\nimport { isTargetElement, isTargetInputElement } from \"../../helpers/document\";\nimport { getClasses, getPlatformClass } from \"../../helpers/general\";\nimport { ConsentLegalCard as ConsentLegalCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { MobileEmbedView, Select } from \"../components\";\nimport { getSkipButtonText } from \"../helpers/card\";\nimport { BaseCardProps } from \"./types\";\n\ntype Props = ConsentLegalCardType[\"props\"] & BaseCardProps;\n\nconst ConsentLegalCard = ({\n className,\n message,\n next,\n properties,\n questionId,\n type,\n}: Props) => {\n const {\n handleClickEmbedButton,\n hasViewedEmbed,\n headers,\n useDesktopPrototype,\n useMobileStyling,\n border,\n } = useConfig((s) => ({\n handleClickEmbedButton: s.handleClickEmbedButton,\n hasViewedEmbed: s.hasViewedEmbed,\n headers: s.headers,\n useDesktopPrototype: s.useDesktopPrototype,\n useMobileStyling: s.useMobileStyling,\n border: s.border,\n }));\n const [isConsentSelected, setIsConsentSelected] = useState(false);\n const [isNamePresent, setIsNamePresent] = useState(false);\n const [isSubmitEnabled, setIsSubmitEnabled] = useState(false);\n const [name, setName] = useState(\"\");\n const [hasValidationError, setHasValidationError] = useState(false);\n\n const platform = headers[\"userleap-platform\"];\n\n const collectName = properties?.collectName;\n const nameLabelText = properties?.nameLabelText || \"Full Name\";\n const consentText =\n properties?.consentText || \"I agree to the stated conditions\";\n const submitButtonText = properties?.submitButtonText || \"Submit\";\n\n useEffect(() => {\n const namePresent = !!name.trim();\n setIsNamePresent(namePresent);\n setIsSubmitEnabled(isConsentSelected && (!collectName || namePresent));\n }, [isConsentSelected, name, collectName]);\n\n const handleSubmit = (e: JSXInternal.TargetedEvent, skipped = false) => {\n e.preventDefault();\n e.stopPropagation();\n\n let value: { submitted: boolean; name?: string } | null = null;\n if (!skipped) {\n if (!isSubmitEnabled) {\n setHasValidationError(true);\n return;\n }\n value = { submitted: true };\n if (collectName) value.name = name;\n }\n\n next({ value, questionId, type });\n };\n\n const handleNameChange = (e: JSXInternal.TargetedEvent) => {\n if (isTargetInputElement(e.target)) {\n e.preventDefault();\n e.stopPropagation();\n setName(e.target.value);\n }\n };\n\n const handleConsentToggled = () => {\n setIsConsentSelected(!isConsentSelected);\n };\n\n const setActiveBorder = (e: JSXInternal.TargetedEvent) => {\n if (isTargetElement(e.target)) {\n e.target.style.borderColor =\n hasValidationError && !isNamePresent ? ERROR_BORDER_COLOR : border;\n }\n };\n const setDefaultBorder = (e: JSXInternal.TargetedEvent) => {\n if (isTargetElement(e.target)) {\n e.target.style.borderColor =\n hasValidationError && !isNamePresent\n ? ERROR_BORDER_COLOR\n : DEFAULT_BORDER_COLOR;\n }\n };\n\n const questionBody = () => {\n return (\n <div>\n <Select\n allowTextEntry={false}\n border={border}\n error={hasValidationError && !isConsentSelected}\n index={0}\n isRadio={false}\n isSelected={isConsentSelected}\n label={consentText}\n onUserInputChanged={({ selected }: { selected: boolean }) => {\n if (selected !== isConsentSelected) {\n handleConsentToggled();\n }\n }}\n useMobileStyling={useMobileStyling}\n />\n {collectName && (\n <input\n aria-label={nameLabelText}\n aria-placeholder={nameLabelText}\n className={clsx(\n getClasses(CssConstant.ConsentLegalNameInput, useMobileStyling)\n )}\n data-gramm=\"false\"\n maxLength={250}\n name=\"name\"\n onBlur={setDefaultBorder}\n onFocus={setActiveBorder}\n onInput={handleNameChange}\n placeholder={nameLabelText}\n style={\n hasValidationError && !isNamePresent\n ? { borderColor: ERROR_BORDER_COLOR }\n : {}\n }\n tabIndex={0}\n value={name}\n />\n )}\n <div className=\"ul-card__button-wrapper ul-card-vertical__button-wrapper\">\n <button\n aria-labelledby={`${CssConstant.QuestionHeader} ul-card-text__button`}\n className=\"ul-card-text__button\"\n id=\"ul-card-text__button\"\n onClick={handleSubmit}\n role=\"button\"\n style={\n isSubmitEnabled\n ? { backgroundColor: border }\n : {\n backgroundColor: \"rgba(0, 0, 0, 0.1)\",\n color: \"rgba(0, 0, 0, 0.2)\",\n }\n }\n >\n {submitButtonText}\n </button>\n {properties.required === false && (\n <button\n className=\"ul-card-skip__button vertical-skip__button\"\n onClick={(e) => handleSubmit(e, true)}\n >\n {getSkipButtonText(properties)}\n </button>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={clsx(getPlatformClass(CssConstant.CardMainContent, platform))}\n >\n <div\n className={clsx([\n className,\n \"ul-card__consent-legal\",\n CssConstant.FadeInTransition,\n ])}\n key={questionId}\n >\n <p\n className={CssConstant.QuestionHeader}\n id={CssConstant.QuestionHeader}\n >\n {message}\n </p>\n <div\n className=\"ul-rich-text-body\"\n dangerouslySetInnerHTML={\n properties && properties.richTextBody\n ? { __html: properties && properties.richTextBody }\n : undefined\n }\n id=\"ul-card__consent-legal-body-container\"\n />\n <MobileEmbedView\n {...{\n hasViewedEmbed,\n properties,\n handleClickEmbedButton,\n defaultBody: questionBody,\n platform,\n useDesktopPrototype,\n embeddedType: \"pdf\",\n }}\n />\n </div>\n </div>\n );\n};\n\nexport default ConsentLegalCard;\n","import clsx from \"clsx\";\n\nimport { CssConstant } from \"../../../constants/css\";\nimport { getClasses } from \"../../../helpers/general\";\nimport { ScaleLabelType } from \"../../../types/card\";\n\ninterface Props {\n activeValue: number;\n border: string;\n icon: string;\n isPressed: boolean;\n onSubmit: () => void;\n range: number;\n scaleLabelType: ScaleLabelType;\n setActiveValue: (value: number) => void;\n setIsPressed: (value: boolean) => void;\n useMobileStyling: boolean;\n value: number;\n}\n\nconst LikertOption = ({\n activeValue,\n border,\n icon,\n isPressed,\n onSubmit,\n range,\n scaleLabelType,\n setActiveValue,\n setIsPressed,\n useMobileStyling,\n value,\n}: Props) => {\n const id = `option-${value}`;\n const isNumber = scaleLabelType === ScaleLabelType.Number;\n const isStar = scaleLabelType === ScaleLabelType.Star;\n const isNumberActive = isNumber && value === activeValue;\n const [activeColor, activeOpacity] = (() => {\n if ((value <= activeValue && isStar) || value === activeValue) {\n if (isPressed) return [border, 1];\n\n // Once relative color syntax is widely supported we can do something like this:\n // See: https://drafts.csswg.org/css-color-5/#relative-colors\n // E.g. background: rgb(from var(--some-color) r g b / 80%);\n return [border, 0.3];\n }\n return [\"\", 1];\n })();\n\n const getClass = () => {\n switch (scaleLabelType) {\n case ScaleLabelType.Star:\n return clsx([\n ...getClasses(CssConstant.LikertStar, useMobileStyling),\n ...getClasses(`${CssConstant.LikertStar}-${value}`, useMobileStyling),\n ]);\n case ScaleLabelType.Smiley:\n return clsx([\n ...getClasses(CssConstant.LikertSmiley, useMobileStyling),\n ...getClasses(\n `${CssConstant.LikertSmiley}-${value}`,\n useMobileStyling\n ),\n ]);\n default: {\n if (value === range)\n return clsx([\n ...getClasses(CssConstant.LikertNumber, useMobileStyling),\n ...getClasses(\n `${CssConstant.LikertNumber}-${value}`,\n useMobileStyling\n ),\n ...getClasses(`likert-last-option`, useMobileStyling),\n ]);\n return clsx([\n ...getClasses(CssConstant.LikertNumber, useMobileStyling),\n ...getClasses(\n `${CssConstant.LikertNumber}-${value}`,\n useMobileStyling\n ),\n ]);\n }\n }\n };\n const clearActive = () => {\n setActiveValue(-1);\n setIsPressed(false);\n };\n return (\n <div\n aria-describedby={CssConstant.Caption}\n aria-labelledby={`${CssConstant.QuestionHeader} ${id}`}\n className={getClass()}\n dangerouslySetInnerHTML={{ __html: icon }}\n id={id}\n key={`${value}-${isNumberActive}`}\n onClick={() => onSubmit()}\n onMouseDown={() => setIsPressed(true)}\n onMouseLeave={clearActive}\n onMouseOver={() => setActiveValue(value)}\n onMouseUp={clearActive}\n onTouchEnd={clearActive}\n onTouchStart={() => {\n setIsPressed(true);\n setActiveValue(value);\n }}\n role=\"radio\"\n style={{\n color: isNumber ? \"\" : activeColor,\n borderColor: isNumberActive ? activeColor : \"\",\n fillOpacity: isNumberActive ? \"\" : activeOpacity,\n zIndex: isNumberActive ? 3 : 2,\n }}\n tabIndex={0}\n />\n );\n};\n\nexport default LikertOption;\n","import clsx from \"clsx\";\nimport { useState } from \"preact/hooks\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { CssConstant } from \"../../../constants/css\";\nimport { getPlatformClass } from \"../../../helpers/general\";\nimport {\n LikertCard as LikertCardType,\n ScaleLabelType,\n} from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport { Header, MobileEmbedView } from \"../../components\";\nimport { getButtonText } from \"../../helpers/card\";\nimport { BaseCardProps } from \"../types\";\nimport LikertOption from \"./likertOption\";\n\ntype Props = LikertCardType[\"props\"] & BaseCardProps;\n\nconst LikertCard = ({\n className,\n labels,\n message,\n next,\n properties,\n questionId,\n type,\n}: Props) => {\n const {\n border,\n handleClickEmbedButton,\n hasViewedEmbed,\n headers,\n useDesktopPrototype,\n useMobileStyling,\n } = useConfig((s) => ({\n border: s.border,\n handleClickEmbedButton: s.handleClickEmbedButton,\n hasViewedEmbed: s.hasViewedEmbed,\n headers: s.headers,\n useDesktopPrototype: s.useDesktopPrototype,\n useMobileStyling: s.useMobileStyling,\n }));\n const [activeValue, setActiveValue] = useState(-1);\n const [isPressed, setIsPressed] = useState(false);\n\n const platform = headers[\"userleap-platform\"];\n\n const leftLabel = labels && labels.left;\n const rightLabel = labels && labels.right;\n let scaleRange;\n\n const { range, scaleLabelType, ratingIcons } = properties;\n if (range) scaleRange = Number(range);\n\n const questionRange = scaleRange || 5;\n\n const getIcon = (index: number) => {\n switch (scaleLabelType) {\n case ScaleLabelType.Star:\n return ratingIcons[0]?.svg;\n case ScaleLabelType.Smiley:\n return ratingIcons[index]?.svg;\n default:\n return String(index + 1);\n }\n };\n\n const nums = [...Array(questionRange)].map((_, index) => {\n const value = index + 1;\n return (\n <LikertOption\n activeValue={activeValue}\n border={border}\n icon={getIcon(index)}\n isPressed={isPressed}\n key={index}\n onSubmit={() => next({ value, questionId, type })}\n range={questionRange}\n scaleLabelType={scaleLabelType}\n setActiveValue={setActiveValue}\n setIsPressed={setIsPressed}\n useMobileStyling={useMobileStyling}\n value={value}\n />\n );\n });\n\n const handleSkipped = (\n e: JSXInternal.TargetedMouseEvent<HTMLButtonElement>\n ) => {\n e.preventDefault();\n e.stopPropagation();\n next({ value: null, questionId, type });\n };\n\n const questionBody = () => {\n return (\n <div>\n <div className=\"ul-card--likert__numbers\">{nums}</div>\n <div className=\"ul-card--likert__labels\">\n <span>{leftLabel}</span>\n <span>{rightLabel}</span>\n </div>\n {!properties.required && (\n <div className=\"ul-vertical-centered-container\">\n <button\n aria-labelledby={`${CssConstant.QuestionHeader} ul-card-text__button`}\n className={clsx(\"ul-card-text__button\")}\n disabled={false}\n id=\"ul-card-text__button\"\n onClick={handleSkipped}\n role=\"button\"\n style={{\n backgroundColor: border,\n marginLeft: \"auto\",\n marginRight: \"auto\",\n }}\n >\n {getButtonText(properties)}\n </button>\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div\n className={clsx(getPlatformClass(CssConstant.CardMainContent, platform))}\n >\n <form\n className={clsx([\n className,\n \"ul-card--likert\",\n CssConstant.FadeInTransition,\n ])}\n key={questionId}\n >\n <Header message={message} properties={properties} />\n <MobileEmbedView\n {...{\n hasViewedEmbed,\n properties,\n handleClickEmbedButton,\n defaultBody: questionBody,\n platform,\n useDesktopPrototype,\n }}\n />\n </form>\n </div>\n );\n};\n\nexport default LikertCard;\n","import clsx from \"clsx\";\nimport { useState } from \"preact/hooks\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { CssConstant } from \"../../../constants/css\";\nimport { getClasses, getPlatformClass } from \"../../../helpers/general\";\nimport {\n CardType,\n CommonMultipleChoiceProps,\n MultipleChoiceOption,\n} from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport { Header, MobileEmbedView, Select } from \"../../components\";\nimport { getButtonText } from \"../../helpers/card\";\nimport { BaseCardProps } from \"../types\";\n\ntype MultiOptionProps = CommonMultipleChoiceProps & BaseCardProps & ExtraProps;\n\nexport interface OptionSelectedMap {\n [id: string]: { isSelected: boolean; userText?: string };\n}\ninterface ExtraProps {\n onSubmit: (state: OptionSelectedMap) => void;\n}\n\nexport const BaseMultiChoiceCard = ({\n className,\n message,\n onSubmit,\n options = [],\n properties,\n questionId,\n type,\n}: MultiOptionProps) => {\n const {\n border,\n handleClickEmbedButton,\n hasViewedEmbed,\n headers,\n useDesktopPrototype,\n useMobileStyling,\n } = useConfig((s) => ({\n border: s.border,\n handleClickEmbedButton: s.handleClickEmbedButton,\n hasViewedEmbed: s.hasViewedEmbed,\n headers: s.headers,\n useDesktopPrototype: s.useDesktopPrototype,\n useMobileStyling: s.useMobileStyling,\n }));\n\n const optionsMap = options.reduce(\n (prevMap: OptionSelectedMap, option: MultipleChoiceOption) => {\n prevMap[option.id] = { isSelected: false };\n return prevMap;\n },\n {}\n );\n const [optionSelectedMap, setOptionSelectedMap] = useState(optionsMap);\n\n const platform = headers[\"userleap-platform\"];\n const isRadio = type === CardType.MultipleChoice;\n const isRequired = properties.required;\n\n const isTextOptionSelectedWithoutTextEntered = Object.entries(\n optionSelectedMap\n ).some(([id, s]) => {\n const opt: MultipleChoiceOption | undefined = options.find(\n (o) => `${o.id}` === id\n );\n const isTextEmpty = s.userText === undefined || s.userText.trim() === \"\";\n return (\n opt?.optionProperties?.allowsTextEntry && isTextEmpty && s.isSelected\n );\n });\n\n const anyOptionsSelected = Object.values(optionSelectedMap).some(\n (o) => o.isSelected\n );\n\n const isSubmitDisabled =\n isTextOptionSelectedWithoutTextEntered ||\n (isRequired && !anyOptionsSelected);\n\n const choices = options.map(\n ({ id, label, value, optionProperties }, index) => {\n const idKey = `${id}`;\n const { allowsTextEntry } = optionProperties || {\n allowsTextEntry: false,\n };\n return (\n <Select\n allowTextEntry={allowsTextEntry}\n border={border}\n error={false}\n id={idKey}\n index={index}\n isRadio={isRadio}\n isSelected={!!optionSelectedMap[idKey]?.isSelected}\n key={idKey}\n label={label}\n onUserInputChanged={(v) =>\n setSelectedState(v.id, v.selected, v.userText)\n }\n promptText={\"Please specify\"}\n text={optionSelectedMap[id]?.userText}\n useMobileStyling={useMobileStyling}\n value={value}\n />\n );\n }\n );\n\n const handleSubmit = (e: JSXInternal.TargetedEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onSubmit(optionSelectedMap);\n };\n\n const setSelectedState = (\n id: string,\n isSelected: boolean,\n userText?: string\n ) => {\n const newState: OptionSelectedMap = Object.assign({}, optionSelectedMap);\n if (isRadio && isSelected) {\n for (const option of Object.values(newState)) {\n option.isSelected = false;\n delete option.userText;\n }\n }\n newState[id] = { isSelected, userText };\n setOptionSelectedMap(newState);\n };\n\n const questionBody = () => {\n return (\n <div>\n <div\n className={clsx(\n getClasses(CssConstant.ChoiceGroup, useMobileStyling)\n )}\n role=\"radiogroup\"\n >\n {choices}\n </div>\n <div className=\"ul-card__button-wrapper\">\n <button\n aria-labelledby={`${CssConstant.QuestionHeader} ul-card-text__button`}\n className={clsx([\n \"ul-card-text__button\",\n isSubmitDisabled && CssConstant.SubmitButtonDisabled,\n ])}\n disabled={isSubmitDisabled}\n id=\"ul-card-text__button\"\n onClick={handleSubmit}\n role=\"button\"\n style={{ backgroundColor: isSubmitDisabled ? \"\" : border }}\n >\n {getButtonText(properties)}\n </button>\n </div>\n </div>\n );\n };\n return (\n <div\n className={clsx(getPlatformClass(CssConstant.CardMainContent, platform))}\n >\n <form\n className={clsx([\n className,\n \"ul-card--multiple\",\n CssConstant.FadeInTransition,\n ])}\n id=\"text-form\"\n key={questionId}\n onSubmit={handleSubmit}\n >\n <Header message={message} properties={properties} />\n <MobileEmbedView\n {...{\n hasViewedEmbed,\n properties,\n handleClickEmbedButton,\n defaultBody: questionBody,\n platform,\n useDesktopPrototype,\n }}\n />\n </form>\n </div>\n );\n};\n","import { MultipleChoiceSingleSelectCard as SingleSelectCardProps } from \"../../../types/card\";\nimport { BaseCardProps } from \"../types\";\nimport { BaseMultiChoiceCard, OptionSelectedMap } from \"./baseMultiChoiceCard\";\n\ntype SingleSelectProps = SingleSelectCardProps[\"props\"] & BaseCardProps;\n\nconst SingleSelectCard = (props: SingleSelectProps) => {\n const { questionId, type, next, options } = props;\n\n const handleSubmit = (optionMap: OptionSelectedMap) => {\n const selectedEntry = Object.entries(optionMap).find(\n ([, value]) => value.isSelected\n ) || [undefined, undefined];\n\n const [selectedId, selectedState] = selectedEntry;\n const selectedOption = options.find((o) => `${o.id}` === selectedId);\n const secondaryValue = selectedState?.userText\n ? { [selectedId]: { userText: selectedState.userText } }\n : null;\n next({\n value:\n selectedOption && selectedId\n ? { [selectedId]: selectedOption.value }\n : {},\n secondaryValue,\n questionId,\n type,\n });\n };\n\n return <BaseMultiChoiceCard {...props} onSubmit={handleSubmit} />;\n};\n\nexport default SingleSelectCard;\n","import { MultipleChoiceMultiSelectCard as MultiSelectCardProps } from \"../../../types/card\";\nimport {\n BaseCardProps,\n MultiChoiceSecondaryValueType,\n MultiSelectValueType,\n} from \"../types\";\nimport { BaseMultiChoiceCard, OptionSelectedMap } from \"./baseMultiChoiceCard\";\n\ntype MultiSelectProps = MultiSelectCardProps[\"props\"] & BaseCardProps;\n\nconst MultiSelectCard = (props: MultiSelectProps) => {\n const { questionId, type, next } = props;\n\n const handleSubmit = (optionMap: OptionSelectedMap) => {\n const initialSelectedMap: MultiSelectValueType = {};\n const valueToSubmit = Object.entries(optionMap).reduce(\n (selectedMap, [key, value]) => {\n selectedMap[key] = value.isSelected;\n return selectedMap;\n },\n initialSelectedMap\n );\n const secondaryValue = Object.entries(optionMap).reduce(\n (textMap, [id, option]) => {\n if (!option.userText) return textMap;\n const newMap = textMap || {};\n newMap[id] = { userText: option.userText };\n return newMap;\n },\n null as MultiChoiceSecondaryValueType\n );\n next({ value: valueToSubmit, secondaryValue, questionId, type });\n };\n\n return <BaseMultiChoiceCard {...props} onSubmit={handleSubmit} />;\n};\n\nexport default MultiSelectCard;\n","import clsx from \"clsx\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { CssConstant, DEFAULT_BORDER_COLOR } from \"../../constants/css\";\nimport { isTargetElement } from \"../../helpers/document\";\nimport { getClasses, getPlatformClass } from \"../../helpers/general\";\nimport { NPSCard as NpsCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { Header, MobileEmbedView } from \"../components\";\nimport { getButtonText } from \"../helpers/card\";\nimport { BaseCardProps, TouchKeyEvents } from \"./types\";\n\ntype Props = { props: NpsCardType[\"props\"] } & BaseCardProps;\n\nconst NPSCard = ({\n className,\n props: { labels, message, properties },\n next,\n questionId,\n type,\n}: Props) => {\n const {\n border,\n handleClickEmbedButton,\n hasViewedEmbed,\n headers,\n useDesktopPrototype,\n useMobileStyling,\n viewDocument,\n } = useConfig((s) => ({\n border: s.border,\n handleClickEmbedButton: s.handleClickEmbedButton,\n hasViewedEmbed: s.hasViewedEmbed,\n headers: s.headers,\n useDesktopPrototype: s.useDesktopPrototype,\n useMobileStyling: s.useMobileStyling,\n viewDocument: s.viewDocument,\n }));\n\n const platform = headers[\"userleap-platform\"];\n const leftLabel = labels && labels.left;\n const rightLabel = labels && labels.right;\n\n const nums = [...Array(11)].map((_, index) => {\n const divId = `option-${index}`;\n\n const setActiveBorder = (\n e:\n | JSXInternal.TargetedTouchEvent<HTMLDivElement>\n | JSXInternal.TargetedMouseEvent<HTMLDivElement>\n ) => {\n if (isTargetElement(e.target)) {\n e.target.style.zIndex = \"2\";\n e.target.style.borderColor = border;\n }\n };\n const setDefaultBorder = (\n e:\n | JSXInternal.TargetedTouchEvent<HTMLDivElement>\n | JSXInternal.TargetedMouseEvent<HTMLDivElement>\n ) => {\n if (isTargetElement(e.target)) {\n e.target.style.zIndex = \"auto\";\n e.target.style.borderColor = DEFAULT_BORDER_COLOR;\n }\n };\n\n const clickArgs: TouchKeyEvents = {\n onClick: () => next({ value: index, questionId, type }),\n onKeyPress: (e) => {\n if (e.key === \"Enter\" || e.key === \" \")\n next({ value: index, questionId, type });\n },\n };\n\n if (\"ontouchstart\" in viewDocument.documentElement) {\n clickArgs.onTouchStart = setActiveBorder;\n clickArgs.onTouchCancel = setDefaultBorder;\n clickArgs.onTouchMove = setDefaultBorder;\n clickArgs.onTouchEnd = setDefaultBorder;\n } else {\n clickArgs.onMouseDown = setActiveBorder;\n clickArgs.onMouseLeave = setDefaultBorder;\n }\n\n return (\n <div\n className={clsx([\n ...getClasses(CssConstant.NPSNumber, useMobileStyling),\n ...getClasses(`${CssConstant.NPSNumber}-${index}`, useMobileStyling),\n ])}\n {...clickArgs}\n aria-labelledby={`${CssConstant.QuestionHeader} ${divId}`}\n id={divId}\n key={index}\n role=\"radio\"\n tabIndex={0}\n >\n {index}\n </div>\n );\n });\n\n const handleSkipped = (\n e: JSXInternal.TargetedMouseEvent<HTMLButtonElement>\n ) => {\n e.preventDefault();\n e.stopPropagation();\n next({ value: null, questionId, type });\n };\n\n const questionBody = () => {\n return (\n <div>\n <div className=\"ul-card--nps__numbers\">{nums}</div>\n <div className=\"ul-card--nps__labels\">\n <span>{leftLabel}</span>\n <span>{rightLabel}</span>\n </div>\n {!properties.required && (\n <div className=\"ul-vertical-centered-container\">\n <button\n aria-labelledby={`${CssConstant.QuestionHeader} ul-card-text__button`}\n className={clsx(\"ul-card-text__button\")}\n disabled={false}\n id=\"ul-card-text__button\"\n onClick={handleSkipped}\n role=\"button\"\n style={{\n backgroundColor: border,\n marginLeft: \"auto\",\n marginRight: \"auto\",\n }}\n >\n {getButtonText(properties)}\n </button>\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div\n className={clsx(getPlatformClass(CssConstant.CardMainContent, platform))}\n >\n <form\n className={clsx([\n className,\n \"ul-card--nps\",\n CssConstant.FadeInTransition,\n ])}\n key={questionId}\n >\n <Header message={message} properties={properties} />\n <MobileEmbedView\n {...{\n hasViewedEmbed,\n properties,\n handleClickEmbedButton,\n defaultBody: questionBody,\n platform,\n useDesktopPrototype,\n }}\n />\n </form>\n </div>\n );\n};\n\nexport default NPSCard;\n","import clsx from \"clsx\";\nimport { useRef, useState } from \"preact/hooks\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { APP_ID, CssConstant, DEFAULT_BORDER_COLOR } from \"../../constants/css\";\nimport { isTargetTextAreaElement } from \"../../helpers/document\";\nimport { getClasses, getPlatformClass } from \"../../helpers/general\";\nimport { OpenTextCard as OpenTextCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { Header, MobileEmbedView } from \"../components\";\nimport { getButtonText } from \"../helpers/card\";\nimport { useAutoSize } from \"../hooks\";\nimport { BaseCardProps } from \"./types\";\n\ntype Props = OpenTextCardType[\"props\"] & BaseCardProps;\n\nconst OpenTextCard = ({\n className,\n message,\n next,\n properties,\n questionId,\n type,\n}: Props) => {\n const {\n border,\n handleClickEmbedButton,\n hasViewedEmbed,\n headers,\n useDesktopPrototype,\n useMobileStyling,\n update,\n } = useConfig((s) => ({\n border: s.border,\n handleClickEmbedButton: s.handleClickEmbedButton,\n hasViewedEmbed: s.hasViewedEmbed,\n headers: s.headers,\n useDesktopPrototype: s.useDesktopPrototype,\n useMobileStyling: s.useMobileStyling,\n update: s.update,\n }));\n const [value, setValue] = useState(\"\");\n const textRef = useRef<HTMLTextAreaElement>(null);\n\n const platform = headers[\"userleap-platform\"];\n\n const trimmedValue = value.trim();\n const isSubmitDisabled = properties.required === true && !trimmedValue;\n const autosize = useAutoSize(textRef, () => update(APP_ID));\n const handleChange = (\n e: JSXInternal.TargetedKeyboardEvent<HTMLTextAreaElement>\n ) => {\n autosize();\n e.preventDefault();\n e.stopPropagation();\n if (isTargetTextAreaElement(e.target)) {\n setValue(e.target.value);\n }\n };\n\n const handleSubmit = (\n e: JSXInternal.TargetedMouseEvent<HTMLButtonElement>\n ) => {\n e.preventDefault();\n e.stopPropagation();\n\n next({ value, questionId, type });\n };\n\n const openTextPlaceholder =\n properties && properties.openTextPlaceholder\n ? properties.openTextPlaceholder\n : \"\";\n\n const setActiveBorder = (\n e: JSXInternal.TargetedFocusEvent<HTMLTextAreaElement>\n ) => {\n if (isTargetTextAreaElement(e.target)) {\n e.target.style.borderColor = border;\n }\n };\n const setDefaultBorder = (\n e: JSXInternal.TargetedFocusEvent<HTMLTextAreaElement>\n ) => {\n if (isTargetTextAreaElement(e.target)) {\n e.target.style.borderColor = DEFAULT_BORDER_COLOR;\n }\n };\n\n const questionBody = () => {\n return (\n <div className=\"ul-card-text\">\n <div className=\"ul-card-text__container\">\n <textarea\n aria-label={openTextPlaceholder}\n aria-labelledby={CssConstant.QuestionHeader}\n aria-multiline=\"true\"\n aria-placeholder={openTextPlaceholder}\n className={clsx(\n getClasses(CssConstant.OpenTextInput, useMobileStyling)\n )}\n data-gramm=\"false\" // disable grammarly\n maxLength={5000}\n name=\"text\"\n onBlur={setDefaultBorder}\n // @ts-expect-error - todo improve type\n onChange={handleChange}\n onFocus={setActiveBorder}\n placeholder={openTextPlaceholder}\n ref={textRef}\n role=\"textbox\"\n tabIndex={0}\n />\n </div>\n <button\n aria-labelledby={`${CssConstant.QuestionHeader} ul-card-text__button`}\n className={clsx([\n \"ul-card-text__button\",\n ...(isSubmitDisabled ? [CssConstant.SubmitButtonDisabled] : []),\n ])}\n disabled={isSubmitDisabled}\n id=\"ul-card-text__button\"\n onClick={handleSubmit}\n role=\"button\"\n style={{ backgroundColor: isSubmitDisabled ? \"\" : border }}\n >\n {getButtonText(properties)}\n </button>\n </div>\n );\n };\n\n return (\n <div\n className={clsx(getPlatformClass(CssConstant.CardMainContent, platform))}\n >\n <form\n className={clsx([\n className,\n \"ul-card--text\",\n CssConstant.FadeInTransition,\n ])}\n id=\"text-form\"\n key={questionId}\n >\n <Header message={message} properties={properties} />\n <MobileEmbedView\n {...{\n defaultBody: questionBody,\n handleClickEmbedButton,\n hasViewedEmbed,\n platform,\n properties,\n useDesktopPrototype,\n }}\n />\n </form>\n </div>\n );\n};\n\nexport default OpenTextCard;\n","export const enum AvStreamStatus {\n RequestNeeded = 1,\n TryAgain = 2,\n Ready = 3,\n}\n","import {\n RecordedTaskPage,\n PermissionTaskPage,\n RecordedTaskPageType,\n ScreenTaskPage,\n AvPermission,\n} from \"../../../types/card\";\nimport { AvStreamStatus } from \"./constants\";\n\nexport const isPermissionTaskPage = (\n page: RecordedTaskPage\n): page is PermissionTaskPage =>\n page.type === RecordedTaskPageType.AvPermission;\n\nexport const isScreenTaskPage = (\n page: RecordedTaskPage\n): page is ScreenTaskPage =>\n page.type === RecordedTaskPageType.ScreenPermission;\n\nexport const avStreamHasRequiredPermissions = (\n avstream: MediaStream,\n page: RecordedTaskPage\n) => {\n const permissions = isPermissionTaskPage(page)\n ? page.permissionDescriptors\n : [];\n const requiresVideo = permissions.includes(AvPermission.Camera);\n return !requiresVideo || avstream.getVideoTracks().length > 0;\n};\n\nexport const getAvStreamRequestStatus = (\n avstream: MediaStream | null | undefined,\n page: RecordedTaskPage\n) => {\n if (avstream === undefined) {\n return AvStreamStatus.RequestNeeded;\n } else if (!avstream) {\n return AvStreamStatus.TryAgain;\n } else if (!avStreamHasRequiredPermissions(avstream, page)) {\n return AvStreamStatus.RequestNeeded;\n }\n return AvStreamStatus.Ready;\n};\n","import create from \"zustand\";\n\nimport {\n MediaType,\n PassthroughData,\n} from \"../../../constants/sprigRecordingEvents\";\nimport {\n CardType,\n RecordedTaskPage,\n RecordedTaskPageType,\n} from \"../../../types/card\";\nimport { RecordedTaskResponseValueType } from \"../types\";\n\nexport interface RecordedTaskResponseType {\n questionId: number;\n type: CardType;\n value: RecordedTaskResponseValueType;\n}\nexport interface RecordedTaskState {\n avStream: MediaStream | null | undefined;\n currentPage: RecordedTaskPage | null;\n mediaRecordingUids: UUID[] | null;\n nextQuestion: (response: RecordedTaskResponseType) => void;\n passthroughData?: PassthroughData;\n recordingMediaTypes?: MediaType[];\n screenPermissionRequested: boolean;\n type?: RecordedTaskPageType;\n}\n\nexport interface RecordedTaskActions {\n reset: () => void;\n updatePage: (newState: Partial<RecordedTaskState>) => void;\n}\n\nconst initialState = {\n avStream: null,\n currentPage: null,\n mediaRecordingUids: null,\n nextQuestion: () => {},\n passthroughData: undefined,\n recordingMediaTypes: undefined,\n screenPermissionRequested: false,\n type: undefined,\n};\n\nexport type RecordedTaskStore = RecordedTaskState & RecordedTaskActions;\n\nexport const useRecordedTaskStore = create<RecordedTaskStore>((set) => ({\n ...initialState,\n reset: () => {\n set(initialState);\n },\n updatePage: (newState: Partial<RecordedTaskState>) => {\n set(newState);\n },\n}));\n","import { InternalEventName } from \"../../../constants/sprigEvents\";\nimport {\n SprigRecordingEvent as EVENTS,\n SprigRecordingEventData as PAYLOAD,\n MediaType,\n TaskStatus,\n} from \"../../../constants/sprigRecordingEvents\";\nimport {\n PermissionTaskPage,\n RecordedTaskPage,\n RecordedTaskPageType as PAGE,\n AvPermission,\n CardType,\n} from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport { isPermissionTaskPage, isScreenTaskPage } from \"./helpers\";\nimport { RecordedTaskResponseType, useRecordedTaskStore } from \"./store\";\n\nexport function requestAVPermissions({\n currentPage,\n pages,\n}: {\n currentPage: PermissionTaskPage;\n pages: RecordedTaskPage[];\n}) {\n const {\n avStream: existingAvStream,\n recordingMediaTypes,\n updatePage,\n } = useRecordedTaskStore.getState();\n const { recorderEventEmitter } = useConfig.getState();\n recorderEventEmitter.emit(EVENTS.AvPermission, {\n [PAYLOAD.PermissionDescriptors]: currentPage.permissionDescriptors,\n [PAYLOAD.StreamReadyCallback]: (\n avStream: MediaStream | null,\n captureStream?: MediaStream | null\n ) => {\n if (existingAvStream === avStream) return; // no update to current stream\n let destinationPage: RecordedTaskPage = currentPage;\n if (\n avStream &&\n !currentPage.permissionDescriptors.includes(AvPermission.Camera)\n ) {\n // obtained stream skip to next page if we requested only audio\n const currentPageIndex = pages.indexOf(currentPage);\n const nextPageTarget = captureStream?.active\n ? currentPageIndex + 2\n : currentPageIndex + 1;\n // start recording when we have both streams active already\n captureStream?.active &&\n recordingMediaTypes &&\n recorderEventEmitter.emit(EVENTS.BeginRecording, {\n [PAYLOAD.RecordingMediaTypes]: recordingMediaTypes,\n [PAYLOAD.StartRecordingCallback]: (mediaRecordingUids: UUID[]) =>\n updatePage({ mediaRecordingUids }),\n });\n destinationPage = pages[nextPageTarget];\n }\n updatePage({ currentPage: destinationPage, avStream });\n },\n [PAYLOAD.StreamCanceledCallback]: () => {\n completeTask({ status: TaskStatus.Abandoned });\n },\n });\n}\n\nexport function initializeRecordTask({\n pages,\n userId: visitorId,\n responseGroupUid,\n surveyId,\n questionId,\n next,\n}: {\n questionId: number;\n surveyId: number;\n responseGroupUid: UUID;\n userId: UUID | null;\n next: (response: RecordedTaskResponseType) => void;\n pages: RecordedTaskPage[];\n}) {\n const { updatePage } = useRecordedTaskStore.getState();\n const { eventEmitFn, recorderEventEmitter } = useConfig.getState();\n const passthroughData = {\n questionId,\n surveyId,\n visitorId,\n responseGroupUid,\n };\n let currentPageIndex = 0;\n recorderEventEmitter.emit(InternalEventName.RecordedTaskPermissionScreen);\n eventEmitFn(InternalEventName.RecordedTaskPermissionScreen);\n\n // check if we already have obtained necessary permissions\n recorderEventEmitter.emit(EVENTS.PermissionStatus, {\n [PAYLOAD.PermissionStatusCallback]: (\n avStream: MediaStream | undefined,\n hasVideoPermission: boolean,\n hasScreenPermission: boolean\n ) => {\n const currentPage = pages[currentPageIndex];\n const { type } = currentPage;\n const recordingMediaTypes = [MediaType.Screen];\n if (isPermissionTaskPage(currentPage)) {\n const { permissionDescriptors } = currentPage;\n const audioPermissionRequired = permissionDescriptors?.includes(\n AvPermission.Microphone\n );\n const videoPermissionRequired = permissionDescriptors?.includes(\n AvPermission.Camera\n );\n\n //configure the types of recordings we are doing for the task\n audioPermissionRequired && recordingMediaTypes.push(MediaType.Audio);\n videoPermissionRequired && recordingMediaTypes.push(MediaType.Video);\n\n // go to next page if we already have stream and video permission is not required\n const obtainedAudioStream =\n avStream?.active && !videoPermissionRequired;\n const obtainedExistingVideoStream =\n avStream?.active && hasVideoPermission;\n (obtainedAudioStream || obtainedExistingVideoStream) &&\n currentPageIndex++;\n }\n // go to next page if we already obtained screen permission previously\n if (isScreenTaskPage(pages[currentPageIndex]) && hasScreenPermission) {\n currentPageIndex++;\n recorderEventEmitter.emit(EVENTS.BeginRecording, {\n [PAYLOAD.RecordingMediaTypes]: recordingMediaTypes,\n [PAYLOAD.StartRecordingCallback]: (mediaRecordingUids: UUID[]) =>\n updatePage({ mediaRecordingUids }),\n });\n }\n updatePage({\n currentPage: pages[currentPageIndex],\n avStream,\n screenPermissionRequested: hasScreenPermission,\n nextQuestion: next,\n type,\n passthroughData,\n recordingMediaTypes,\n });\n },\n });\n const currentPage = pages[currentPageIndex];\n // check if first page requests for av\n currentPage.type === PAGE.AvPermission &&\n requestAVPermissions({\n currentPage,\n pages,\n });\n return currentPage;\n}\n\nexport function completeTask({ status }: { status: TaskStatus }) {\n const { nextQuestion, passthroughData, mediaRecordingUids, reset } =\n useRecordedTaskStore.getState();\n const { recorderEventEmitter, handleUploadUpdate, index } =\n useConfig.getState();\n const responseValues: RecordedTaskResponseType = {\n value: {\n taskStatus: status,\n },\n type: CardType.RecordedTask,\n questionId: passthroughData?.questionId || 1,\n };\n if (!passthroughData) return;\n recorderEventEmitter.emit(EVENTS.FinishTask, {\n [PAYLOAD.BeginCallback]: (mediaRecordingUid: UUID) => {\n handleUploadUpdate({\n mediaRecordingUid,\n isSubmitted: true,\n progressPct: 0,\n isComplete: false,\n });\n },\n [PAYLOAD.ProgressCallback]: (\n mediaRecordingUid: UUID,\n data: { detail: number }\n ) => {\n handleUploadUpdate({\n mediaRecordingUid,\n progressPct: data.detail,\n isSubmitted: false,\n isComplete: false,\n });\n },\n [PAYLOAD.UploadCallback]: (mediaRecordingUid: UUID | null) => {\n if (mediaRecordingUid) {\n handleUploadUpdate({\n mediaRecordingUid,\n isComplete: true,\n isSubmitted: true,\n progressPct: 100,\n });\n }\n },\n [PAYLOAD.PassthroughData]: passthroughData,\n [PAYLOAD.CurrentIndex]: index,\n [PAYLOAD.TaskResponse]: responseValues,\n [PAYLOAD.TaskCompleteCallback]: (taskDurationMillisecond: number) => {\n responseValues.value.taskDurationMillisecond = taskDurationMillisecond;\n if (mediaRecordingUids) {\n responseValues.value.mediaRecordingUids = mediaRecordingUids;\n }\n reset();\n nextQuestion(responseValues);\n },\n });\n}\n\nexport function nextPage({ pages }: { pages: RecordedTaskPage[] }) {\n const { recorderEventEmitter, eventEmitFn } = useConfig.getState();\n const {\n updatePage,\n currentPage,\n recordingMediaTypes,\n screenPermissionRequested,\n } = useRecordedTaskStore.getState();\n if (!currentPage) return;\n const currentPageIndex = pages.indexOf(currentPage);\n\n switch (currentPage.type) {\n case PAGE.AvPermission: {\n // if we didn't successfully obtain a stream then page transition to next question otherwise go to screen recording page\n const nextPageTarget = screenPermissionRequested\n ? currentPageIndex + 2\n : currentPageIndex + 1;\n screenPermissionRequested &&\n recordingMediaTypes &&\n recorderEventEmitter.emit(EVENTS.BeginRecording, {\n [PAYLOAD.RecordingMediaTypes]: recordingMediaTypes,\n [PAYLOAD.StartRecordingCallback]: (mediaRecordingUids: UUID[]) => {\n updatePage({ mediaRecordingUids });\n },\n });\n updatePage({ currentPage: pages[nextPageTarget] });\n return;\n }\n case PAGE.ScreenPermission:\n recorderEventEmitter.emit(EVENTS.ScreenPermission, {\n [PAYLOAD.StreamReadyCallback]: (\n avStream: MediaStream | null,\n captureStream: MediaStream | null\n ) => {\n const nextPage = captureStream\n ? pages[currentPageIndex + 1]\n : currentPage;\n captureStream &&\n recordingMediaTypes &&\n recorderEventEmitter.emit(EVENTS.BeginRecording, {\n [PAYLOAD.RecordingMediaTypes]: recordingMediaTypes,\n [PAYLOAD.StartRecordingCallback]: (\n mediaRecordingUids: UUID[]\n ) => {\n updatePage({ mediaRecordingUids });\n },\n });\n updatePage({\n currentPage: nextPage,\n screenPermissionRequested: true,\n });\n },\n [PAYLOAD.StreamCanceledCallback]: () => {\n completeTask({ status: TaskStatus.Abandoned });\n },\n });\n return;\n case PAGE.StartTask:\n eventEmitFn(InternalEventName.RecordedTaskStart);\n recorderEventEmitter.emit(InternalEventName.RecordedTaskStart);\n recorderEventEmitter.emit(EVENTS.StartTask);\n updatePage({\n currentPage: pages[currentPageIndex + 1],\n screenPermissionRequested: true,\n });\n return;\n case PAGE.CompleteTask:\n return;\n }\n}\n","import clsx from \"clsx\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { CssConstant } from \"../../../constants/css\";\nimport { TaskStatus } from \"../../../constants/sprigRecordingEvents\";\nimport {\n CompleteTaskPage,\n PermissionTaskPage,\n RecordedTaskCardProperties,\n RecordedTaskPage,\n RecordedTaskPageType,\n ScreenTaskPage,\n StartTaskPage,\n} from \"../../../types/card\";\nimport { MobileEmbedView } from \"../../components\";\nimport { useConfig } from \"../../store\";\nimport { nextPage, completeTask, requestAVPermissions } from \"./actions\";\nimport { AvStreamStatus } from \"./constants\";\nimport { getAvStreamRequestStatus, isPermissionTaskPage } from \"./helpers\";\nimport { useRecordedTaskStore } from \"./store\";\n\nconst PERMISSION_GRAPHICS_CONTAINER = \"ul-permission-graphics-container\";\nconst PERMISSION_BODY = \"ul-permission-body\";\nconst PERMISSION_GRAPHICS_CLASSES = clsx([\n PERMISSION_GRAPHICS_CONTAINER,\n \"ul_recorded-task-inset-spacing\",\n]);\nconst BUTTON_CONTAINER_CLASSES_LEFT = clsx([\n \"ul-horizontal-button-container\",\n \"ul-horizontal-button-container-left\",\n]);\n\nexport const Button = ({\n backgroundColor,\n classNames,\n content,\n handleClick,\n}: {\n backgroundColor?: string;\n classNames?: string;\n content: string;\n handleClick: JSXInternal.MouseEventHandler<HTMLButtonElement>;\n}) => {\n const buttonClassNames = \"ul-card-text__button \" + classNames || \"\";\n return (\n <button\n aria-labelledby={`${CssConstant.QuestionHeader} ul-card-text__button`}\n className={buttonClassNames}\n id=\"ul-card-text__button\"\n onClick={handleClick}\n role=\"button\"\n style={{ backgroundColor }}\n >\n {content}\n </button>\n );\n};\n\nconst RichTextCaption = ({ richTextBody }: { richTextBody: string }) => {\n return (\n <div\n className=\"ul-rich-text-body\"\n dangerouslySetInnerHTML={{ __html: richTextBody }}\n id=\"ul-task-detail-container\"\n />\n );\n};\n\nconst SkipButton = ({\n required,\n skipButtonText,\n bottom = false,\n}: {\n required: boolean;\n skipButtonText?: string;\n bottom?: boolean;\n}) => {\n if (required) return null;\n return (\n <Button\n classNames={clsx([\n bottom && \"ul-skip-button-below\",\n CssConstant.InactiveButton,\n ])}\n content={skipButtonText || \"Skip\"}\n handleClick={completeTask.bind(null, { status: TaskStatus.Abandoned })}\n />\n );\n};\n\nexport const StartTaskPageContent = ({\n content,\n pages,\n}: {\n content: StartTaskPage;\n pages: RecordedTaskPage[];\n}) => {\n const { buttonText, taskDetail } = content;\n const border = useConfig((c) => c.border);\n return (\n <div className=\"ul-task-page\" key=\"start-task\">\n <RichTextCaption richTextBody={taskDetail} />\n <div className={BUTTON_CONTAINER_CLASSES_LEFT}>\n <Button\n backgroundColor={border}\n content={buttonText}\n handleClick={nextPage.bind(null, { pages })}\n />\n </div>\n </div>\n );\n};\n\nexport const CompleteTaskPageContent = ({\n content,\n properties,\n}: {\n content: CompleteTaskPage;\n properties: RecordedTaskCardProperties;\n}) => {\n const { buttonText, skipButtonText } = content;\n const {\n border,\n headers,\n hasViewedEmbed,\n useDesktopPrototype,\n handleClickEmbedButton,\n } = useConfig((c) => ({\n border: c.border,\n headers: c.headers,\n hasViewedEmbed: c.hasViewedEmbed,\n handleClickEmbedButton: c.handleClickEmbedButton,\n useDesktopPrototype: c.useDesktopPrototype,\n }));\n const platform = headers[\"userleap-platform\"];\n const finishTaskButtons = () => (\n <div className={BUTTON_CONTAINER_CLASSES_LEFT}>\n <Button\n backgroundColor={border}\n classNames=\"ul-complete-task-button\"\n content={buttonText}\n handleClick={completeTask.bind(null, { status: TaskStatus.Completed })}\n />\n <Button\n backgroundColor={border}\n classNames={clsx([CssConstant.InactiveButton])}\n content={skipButtonText}\n handleClick={completeTask.bind(null, { status: TaskStatus.GivenUp })}\n />\n </div>\n );\n\n const finishTaskButtonViewPrototypeWrapper = (\n <MobileEmbedView\n {...{\n hasViewedEmbed,\n properties,\n defaultBody: finishTaskButtons,\n platform,\n useDesktopPrototype,\n handleClickEmbedButton,\n }}\n />\n );\n return (\n <div className=\"ul-task-page\" key=\"complete-task\">\n <RichTextCaption richTextBody={content.taskDetail} />\n {finishTaskButtonViewPrototypeWrapper}\n </div>\n );\n};\n\nexport const ScreenPermissionPageContent = ({\n content,\n pages,\n required,\n}: {\n content: ScreenTaskPage;\n required: boolean;\n pages: RecordedTaskPage[];\n}) => {\n const { buttonText, skipButtonText } = content;\n const [border, tabTitle] = useConfig((c) => [c.border, c.tabTitle]);\n return (\n <div>\n <div className={PERMISSION_GRAPHICS_CLASSES}>\n <p style=\"margin-top: auto;\">{content.selectTabText}</p>\n <div className=\"ul-select-tab-container\">\n <p className={PERMISSION_BODY}>{tabTitle}</p>\n </div>\n </div>\n <div className={!required ? BUTTON_CONTAINER_CLASSES_LEFT : \"\"}>\n <Button\n backgroundColor={border}\n content={buttonText}\n handleClick={nextPage.bind(null, { pages })}\n />\n <SkipButton required={required} skipButtonText={skipButtonText} />\n </div>\n </div>\n );\n};\n\nexport const AVPermissionRequestPageContent = ({\n content,\n}: {\n content: PermissionTaskPage;\n}) => {\n return (\n <div\n className={clsx([\n PERMISSION_GRAPHICS_CONTAINER,\n \"ul_permission_svg_container\",\n \"ul_recorded-task-inset-spacing\",\n \"ul-center-horizontally\",\n ])}\n dangerouslySetInnerHTML={{ __html: content.svg }}\n key=\"ul-permission-request-graphic\"\n />\n );\n};\n\nexport const AVPermissionFailurePageContent = ({\n content,\n pages,\n required,\n}: {\n content: PermissionTaskPage;\n required: boolean;\n pages: RecordedTaskPage[];\n}) => {\n const {\n permissionDeniedHeadline,\n permissionDeniedBody,\n skipButtonText,\n tryAgainButtonText,\n } = content;\n const border = useConfig((c) => c.border);\n const permissionPage = isPermissionTaskPage(pages[0]) ? pages[0] : null;\n if (!permissionPage) return null;\n return (\n <div>\n <div className={PERMISSION_GRAPHICS_CLASSES}>\n <p className=\"ul-av-permission-denied-paragraph\">\n <span className=\"ul-av-permission-denied-headline\">\n {permissionDeniedHeadline}\n </span>\n <span className={PERMISSION_BODY}>{permissionDeniedBody}</span>\n </p>\n </div>\n <div className={BUTTON_CONTAINER_CLASSES_LEFT}>\n <Button\n backgroundColor={border}\n content={tryAgainButtonText}\n handleClick={requestAVPermissions.bind(null, {\n currentPage: permissionPage,\n pages,\n })}\n />\n <SkipButton required={required} skipButtonText={skipButtonText} />\n </div>\n </div>\n );\n};\n\nconst StreamVideo = ({\n stream,\n}: {\n stream: MediaStream | null | undefined;\n}) => {\n return (\n <video\n autoPlay\n className={clsx([\"ul_recorded-task-inset-spacing\"])}\n id=\"ul-record-task-video-preview\"\n muted\n ref={(video) => {\n if (video) {\n video.srcObject = stream || null;\n }\n }}\n />\n );\n};\n\nexport const AVPermissionGrantedPageContent = ({\n content,\n pages,\n required,\n}: {\n content: PermissionTaskPage;\n required: boolean;\n pages: RecordedTaskPage[];\n}) => {\n const { skipButtonText } = content;\n const avStream = useRecordedTaskStore((store) => store.avStream);\n const border = useConfig((c) => c.border);\n return (\n <div>\n <StreamVideo stream={avStream} />\n <div className={\"ul-vertical-button-container-center\"}>\n <Button\n backgroundColor={border}\n content={content.buttonText}\n handleClick={nextPage.bind(null, { pages })}\n ></Button>\n <SkipButton\n bottom\n required={required}\n skipButtonText={skipButtonText}\n />\n </div>\n </div>\n );\n};\n\nexport const PageContent = ({\n properties,\n}: {\n properties: RecordedTaskCardProperties;\n}) => {\n const { pages, required } = properties;\n const avStream = useRecordedTaskStore((store) => store.avStream);\n const currentPage = useRecordedTaskStore((store) => store.currentPage);\n\n if (currentPage === undefined) return null;\n\n switch (currentPage?.type) {\n case RecordedTaskPageType.AvPermission: {\n const permissionStatus = getAvStreamRequestStatus(avStream, currentPage);\n\n if (permissionStatus === AvStreamStatus.RequestNeeded) {\n return <AVPermissionRequestPageContent content={currentPage} />;\n } else if (permissionStatus === AvStreamStatus.TryAgain) {\n return (\n <AVPermissionFailurePageContent\n content={currentPage}\n pages={pages}\n required={required}\n />\n );\n } else {\n return (\n <AVPermissionGrantedPageContent\n content={currentPage}\n pages={pages}\n required={required}\n />\n );\n }\n }\n case RecordedTaskPageType.ScreenPermission:\n return (\n <ScreenPermissionPageContent\n content={currentPage}\n pages={pages}\n required={required}\n />\n );\n case RecordedTaskPageType.StartTask:\n return <StartTaskPageContent content={currentPage} pages={pages} />;\n case RecordedTaskPageType.CompleteTask:\n return (\n <CompleteTaskPageContent\n content={currentPage}\n properties={properties}\n />\n );\n default:\n return null;\n }\n};\n","import clsx from \"clsx\";\n\nimport { CssConstant } from \"../../../constants/css\";\nimport { getPlatformClass } from \"../../../helpers/general\";\nimport { RecordedTaskCard as RecordedTaskCardType } from \"../../../types/card\";\nimport { useConfig } from \"../../../view/store\";\nimport Header from \"../../components/header\";\nimport { BaseCardProps } from \"../types\";\nimport { initializeRecordTask } from \"./actions\";\nimport { PageContent } from \"./components\";\nimport { AvStreamStatus } from \"./constants\";\nimport {\n getAvStreamRequestStatus,\n isPermissionTaskPage,\n isScreenTaskPage,\n} from \"./helpers\";\nimport { RecordedTaskResponseType, useRecordedTaskStore } from \"./store\";\n\ntype Props = RecordedTaskCardType[\"props\"] & BaseCardProps;\n\nconst RecordedTaskCard = ({\n className,\n properties,\n next,\n questionId,\n}: Props) => {\n const appStore = useConfig();\n const { headers, surveyId, responseGroupUid, userId } = appStore;\n const store = useRecordedTaskStore();\n const { screenPermissionRequested } = store;\n const avStream = useRecordedTaskStore((state) => state.avStream);\n\n let currentPage = useRecordedTaskStore((state) => state.currentPage);\n if (!currentPage) {\n // check if we have already obtained permission from previous session\n currentPage = initializeRecordTask({\n questionId,\n surveyId,\n next: (response: RecordedTaskResponseType) => {\n next(response);\n },\n pages: properties.pages,\n responseGroupUid,\n userId,\n });\n }\n\n // screen permission page changes headline and caption upon request failure\n let headline: string | undefined = currentPage.headline;\n let captionText: string | undefined = currentPage.captionText;\n const permissionRequestStatus = getAvStreamRequestStatus(\n avStream,\n currentPage\n );\n if (isScreenTaskPage(currentPage) && screenPermissionRequested) {\n headline = currentPage.permissionDeniedHeadline;\n captionText = currentPage.permissionDeniedCaptionText;\n }\n if (\n isPermissionTaskPage(currentPage) &&\n permissionRequestStatus === AvStreamStatus.Ready\n ) {\n headline = currentPage.permissionGrantedHeadline;\n captionText = currentPage.permissionGrantedCaptionText;\n }\n\n return (\n <div\n className={clsx([\n ...getPlatformClass(\n CssConstant.CardMainContent,\n headers[\"userleap-platform\"]\n ),\n ])}\n >\n <div\n className={clsx([\n className,\n \"ul-center-horizontally\",\n CssConstant.FadeInTransition,\n ])}\n >\n <Header message={headline} properties={{ captionText }} />\n <PageContent properties={properties} />\n </div>\n </div>\n );\n};\n\nexport default RecordedTaskCard;\n","const ATTRIBUTE_URL_TO_PROPERTY_MAP = {\n \"{{user_id}}\": \"externalUserId\",\n \"{{email}}\": \"email\",\n};\n\n/**\n * Set visitor attributes and returns url with substitutions made\n * @param rawUrl - url possibly containing tags like {{user_id}}\n * @param visitorAttributes - attributes to substitute in the url\n */\nexport const getAttributedUrl = (\n rawUrl: string | undefined = undefined,\n visitorAttributes: Record<string, string> = {}\n) => {\n if (!rawUrl) return rawUrl;\n\n let attributedUrl = rawUrl;\n const unmatchedUrlTags: string[] = [];\n for (const [urlKey, propertyKey] of Object.entries(\n ATTRIBUTE_URL_TO_PROPERTY_MAP\n )) {\n if (attributedUrl.toLowerCase().includes(urlKey)) {\n if (visitorAttributes[propertyKey]) {\n const regex = new RegExp(urlKey, \"gi\");\n attributedUrl = attributedUrl.replace(\n regex,\n visitorAttributes[propertyKey]\n );\n } else {\n unmatchedUrlTags.push(urlKey);\n }\n }\n }\n\n if (unmatchedUrlTags.length === 0) return attributedUrl;\n\n // some attributes were not matched; if they're part of query params, attempt to remove them\n // rather than returning 'https://example.com?user_id={{user_id}}' or 'https://example.com?user_id='\n if (!attributedUrl.includes(\"?\")) return attributedUrl;\n\n // source: https://masteringjs.io/tutorials/fundamentals/query-string\n const baseUrl = attributedUrl.slice(0, attributedUrl.indexOf(\"?\"));\n const queryParams = attributedUrl\n .slice(attributedUrl.indexOf(\"?\") + 1)\n .split(\"&\")\n .map((str) => str.split(\"=\"));\n const filteredQueryParams = queryParams.filter(\n (queryParam) => !unmatchedUrlTags.includes(queryParam[1])\n );\n\n if (filteredQueryParams.length === 0) return baseUrl;\n const joinedQueryParams = filteredQueryParams\n .map((queryParam) => queryParam.join(\"=\"))\n .join(\"&\");\n return `${baseUrl}?${joinedQueryParams}`;\n};\n","import clsx from \"clsx\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { CssConstant } from \"../../constants/css\";\nimport { getPlatformClass } from \"../../helpers/general\";\nimport { TextUrlPromptCard as TextUrlPromptCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { MobileEmbedView } from \"../components\";\nimport { getButtonText } from \"../helpers/card\";\nimport { getAttributedUrl } from \"../helpers/getAttributedUrl\";\nimport { BaseCardProps } from \"./types\";\n\ntype Props = TextUrlPromptCardType[\"props\"] & BaseCardProps;\n\nconst TextUrlPromptCard = ({\n className,\n message,\n next,\n properties,\n questionId,\n type,\n}: Props) => {\n const {\n border,\n handleClickEmbedButton,\n hasViewedEmbed,\n headers,\n useDesktopPrototype,\n visitorAttributes,\n } = useConfig((s) => ({\n border: s.border,\n handleClickEmbedButton: s.handleClickEmbedButton,\n hasViewedEmbed: s.hasViewedEmbed,\n headers: s.headers,\n useDesktopPrototype: s.useDesktopPrototype,\n visitorAttributes: s.visitorAttributes,\n }));\n\n const platform = headers[\"userleap-platform\"];\n\n const handleLinkButtonTap = (_: unknown, skipped = false) => {\n const optionalValue = skipped ? { skipped: true } : undefined;\n next({ value: optionalValue, questionId, type });\n };\n\n const handleKeyPressLinkButton = (\n e: JSXInternal.TargetedKeyboardEvent<HTMLAnchorElement>\n ) => {\n if (e.key === \"Enter\" || e.key === \" \")\n next({ value: undefined, questionId, type });\n };\n\n const questionBody = () => {\n return (\n <div>\n <a\n aria-describedby=\"ul-card__text-url-body-container\"\n aria-labelledby={`${CssConstant.QuestionHeader} ul-card-text__button`}\n className=\"ul-card-text__button ul-card__text-url-prompt-button\"\n href={getAttributedUrl(\n properties && properties.buttonUrl,\n visitorAttributes\n )}\n id=\"ul-card-text__button\"\n onClick={handleLinkButtonTap}\n onKeyPress={handleKeyPressLinkButton}\n rel=\"noreferrer\"\n role=\"button\"\n style={{\n backgroundColor: border,\n marginRight: \"auto\",\n textOverflow: \"ellipsis\",\n textDecoration: \"none\",\n overflow: \"visible\",\n }}\n tabIndex={0}\n target=\"_blank\"\n >\n {getButtonText(properties)}\n </a>\n {properties.required === false && (\n <button\n className=\"ul-card-skip__button\"\n onClick={(e) => handleLinkButtonTap(e, true)}\n >\n Skip\n </button>\n )}\n </div>\n );\n };\n\n // TODO consider extracting CSS\n const getBody = (richTextBody: string, plaintextBody: string) => {\n if (richTextBody) {\n return (\n <div\n className=\"ul-rich-text-body\"\n dangerouslySetInnerHTML={{ __html: richTextBody }}\n id=\"ul-card__text-url-body-container\"\n />\n );\n }\n\n return (\n <div className=\"ul-rich-text-body\" id=\"ul-card__text-url-body-container\">\n {(plaintextBody ? plaintextBody.split(/\\n\\s*\\n/g) : []).map(\n (line, index) => {\n return <p key={index}>{line}</p>;\n }\n )}\n </div>\n );\n };\n\n return (\n <div\n className={clsx(getPlatformClass(CssConstant.CardMainContent, platform))}\n >\n <div\n className={clsx([\n className,\n \"ul-card__text-url-prompt\",\n CssConstant.FadeInTransition,\n ])}\n key={questionId}\n >\n <p\n className={CssConstant.QuestionHeader}\n id={CssConstant.QuestionHeader}\n >\n {message}\n </p>\n {getBody(\n properties && properties.richTextBody,\n properties && properties.body\n )}\n <MobileEmbedView\n {...{\n defaultBody: questionBody,\n handleClickEmbedButton,\n hasViewedEmbed,\n platform,\n properties,\n useDesktopPrototype,\n }}\n />\n </div>\n </div>\n );\n};\n\nexport default TextUrlPromptCard;\n","import clsx from \"clsx\";\nimport { useEffect } from \"preact/hooks\";\n\nimport { APP_ID, CssConstant } from \"../../constants/css\";\nimport { getPlatformClass } from \"../../helpers/general\";\nimport { ThanksCard as ThanksCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { BaseCardProps } from \"./types\";\n\ntype Props = ThanksCardType[\"props\"] & BaseCardProps;\n\nconst ThanksCard = ({ className, questionId }: Props) => {\n const { border, destroy, endCard, headers } = useConfig((s) => ({\n border: s.border,\n endCard: s.endCard,\n destroy: s.destroy,\n headers: s.headers,\n }));\n\n useEffect(() => {\n setTimeout(() => {\n destroy(APP_ID);\n }, 2000);\n }, [destroy]);\n\n const caption =\n endCard && endCard.subheader ? (\n <p className={CssConstant.Caption}>{endCard.subheader}</p>\n ) : null;\n const headline = endCard && endCard.headline ? endCard.headline : null;\n\n return (\n <div\n className={clsx(\n getPlatformClass(\n CssConstant.CardMainContent,\n headers[\"userleap-platform\"]\n )\n )}\n >\n <div\n className={clsx([\n className,\n \"ul-card--thanks\",\n CssConstant.FadeInTransition,\n ])}\n key={questionId}\n >\n <div>\n <div className=\"ul-card--thanks-content\">\n <div className=\"ul-thanks-check\">\n <svg\n aria-labelledby=\"title\"\n fill=\"none\"\n height=\"99\"\n viewBox=\"0 0 81 99\"\n width=\"81\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n clipRule=\"evenodd\"\n d=\"M40.5 77C60.9345 77 77.5 60.4345 77.5 40C77.5 19.5655 60.9345 3 40.5 3C20.0655 3 3.5 19.5655 3.5 40C3.5 60.4345 20.0655 77 40.5 77ZM80.5 40C80.5 62.0914 62.5914 80 40.5 80C18.4086 80 0.5 62.0914 0.5 40C0.5 17.9086 18.4086 0 40.5 0C62.5914 0 80.5 17.9086 80.5 40Z\"\n fill={border}\n fillRule=\"evenodd\"\n />\n <path\n clipRule=\"evenodd\"\n d=\"M55.025 22.9046C55.6299 23.4705 55.6616 24.4198 55.0956 25.0247C54.8724 25.2634 54.6109 25.5285 54.3157 25.8277C52.2547 27.9168 48.5549 31.667 44.8135 39.6658C43.2818 42.9406 42.0864 45.8386 41.0823 48.2729C40.6539 49.3116 40.2603 50.2659 39.8902 51.129C39.287 52.5359 38.7248 53.7508 38.1744 54.625C37.8997 55.0613 37.5806 55.4905 37.2017 55.8245C36.8201 56.1607 36.2613 56.5 35.5457 56.5C34.6742 56.5 34.0892 55.9692 33.7774 55.6083C33.4502 55.2296 33.1752 54.7511 32.9396 54.301C32.7305 53.9013 32.5088 53.4367 32.2797 52.9565C32.2429 52.8794 32.2059 52.8019 32.1688 52.7243C31.8942 52.1499 31.5959 51.534 31.2537 50.8868C29.8886 48.305 27.8539 45.2878 24.2343 43.1382C23.522 42.7152 23.2875 41.7949 23.7105 41.0826C24.1335 40.3703 25.0539 40.1358 25.7662 40.5588C30.0556 43.1062 32.4149 46.6647 33.9058 49.4845C34.2776 50.1876 34.5973 50.8487 34.8753 51.4302C34.9147 51.5124 34.9529 51.5926 34.9902 51.6707C35.2222 52.1567 35.4164 52.5637 35.5978 52.9102C35.6151 52.9434 35.6321 52.9754 35.6485 53.0061C36.0565 52.3531 36.5341 51.3434 37.133 49.9468C37.4781 49.1418 37.8572 48.2229 38.2761 47.2074C39.2886 44.7532 40.5339 41.7347 42.0961 38.3948C46.0591 29.9221 50.0641 25.8648 52.1535 23.7482C52.4423 23.4556 52.6944 23.2002 52.9048 22.9753C53.4708 22.3703 54.42 22.3387 55.025 22.9046ZM35.1994 53.5892C35.1994 53.5892 35.2 53.5888 35.2012 53.5879C35.2 53.5889 35.1994 53.5893 35.1994 53.5892ZM36.0666 53.6682C36.0732 53.674 36.0765 53.6775 36.0765 53.6777C36.0765 53.678 36.0732 53.6751 36.0666 53.6682Z\"\n fill={border}\n fillRule=\"evenodd\"\n />\n <path\n d=\"M69.5 97C69.5 98.1046 56.2924 99 40 99C23.7076 99 10.5 98.1046 10.5 97C10.5 95.8954 23.7076 95 40 95C56.2924 95 69.5 95.8954 69.5 97Z\"\n fill=\"black\"\n fillOpacity=\"0.2\"\n />\n </svg>\n </div>\n <p\n className={CssConstant.QuestionHeader}\n id={CssConstant.QuestionHeader}\n >\n {headline}\n </p>\n {caption}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ThanksCard;\n","// To test staging CDN, temporarily update this link to 'https://cdn-staging.sprig.com'\nconst CDN_LINK = 'https://cdn.sprig.com';\nimport { v4 as uuid } from 'uuid';\nconst videoPlayerStates = {\n document: undefined,\n videojs: undefined,\n};\n\nconst videoPlayerCss = `/* progress control styles */\n.video-js .vjs-control {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n}\n\n.video-js .vjs-progress-control .vjs-progress-holder {\n margin: 0 0px;\n}\n\n.video-js .vjs-progress-control {\n position: absolute;\n height: 3px;\n width: 100%;\n}\n/* position and align the buttons and button texts */\n.ul-control-panel {\n bottom: 0;\n width: 100%;\n flex-direction: column;\n background-color: white;\n height: fit-content;\n z-index: 2;\n}\n\n.ul-buttons-panel {\n color: black;\n display: flex;\n gap: 20px;\n height: 50px;\n justify-content: center;\n margin: 10px;\n padding: 2px 14px 0;\n}\n\n.video-js .vjs-volume-panel {\n height: 30px;\n width: 40px;\n}\n\n.ul-inactive {\n opacity: 0.3;\n cursor: default;\n pointer-events: none;\n}\n\n/* buttons */\n.ul-buttons-panel > .vjs-button {\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: 50%;\n display: flex;\n height: 3em;\n justify-content: center;\n width: 3em;\n}\n\n.vjs-button>.vjs-icon-placeholder:before {\n align-items: center;\n display: flex;\n font-size: unset;\n line-height: 0.5;\n justify-content: center;\n}\n\nspan.ul-button-text {\n align-self: flex-end;\n position: relative;\n top: 14px;\n}\n\n#ul-camera-button {\n white-space: nowrap;\n}\n\n.video-js .vjs-volume-control.vjs-volume-horizontal {\n background-color: #fff;\n z-index: 1;\n}\n\n.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level {\n background-color: black;\n}\n\n.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,\n.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,\n.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active {\n width: 40px;\n}\n\n.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active,\n.video-js .vjs-volume-panel .vjs-volume-control:active,\n.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control,\n.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,\n.video-js .vjs-volume-panel:active .vjs-volume-control,\n.video-js .vjs-volume-panel:focus .vjs-volume-control {\n visibility: visible;\n left: 40px;\n position: absolute;\n transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s;\n}\n\n/* play button customization */\n.video-js .vjs-play-control {\n color: black;\n}\n\n.video-js .vjs-play-control .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5363 6.40226L1.93958 10.7006C1.64037 10.8502 1.28833 10.6326 1.28833 10.2981V1.7014C1.28833 1.36688 1.64037 1.14931 1.93958 1.29891L10.5363 5.59727C10.868 5.76311 10.868 6.23642 10.5363 6.40226Z' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E\");\n}\n\n/* position and style the current timer */\n.ul-time-panel {\n position: absolute;\n bottom: 80px;\n left: 10px;\n height: 22px;\n color: black;\n border: 1px solid #e0e0eb;\n border-radius: 23px;\n background-color: white;\n width: fit-content;\n}\n\n.video-js .vjs-current-time,\n.vjs-no-flex .vjs-current-time {\n display: flex;\n align-items: center;\n text-align: center;\n}\n\n/* remove the dot progress indicator */\n.video-js .vjs-play-progress:before,\n.video-js .vjs-volume-level:before,\n.vjs-icon-circle:before,\n.vjs-seek-to-live-control .vjs-icon-placeholder:before {\n content: none;\n}\n\n.video-js .vjs-mute-control .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='19' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.825.324A.75.75 0 019.25 1v11.667a.75.75 0 01-1.219.585l-3.96-3.169H1a.75.75 0 01-.75-.75v-5a.75.75 0 01.75-.75h3.07L8.031.414a.75.75 0 01.794-.09zM7.75 2.56L4.802 4.92a.75.75 0 01-.469.164H1.75v3.5h2.583a.75.75 0 01.469.165l2.948 2.358V2.56zM14.911.47a.75.75 0 011.061 0 9.084 9.084 0 010 12.844.75.75 0 01-1.06-1.06 7.584 7.584 0 000-10.724.75.75 0 010-1.06zM11.97 3.41a.75.75 0 011.06 0 4.917 4.917 0 010 6.953.75.75 0 11-1.06-1.06 3.417 3.417 0 000-4.832.75.75 0 010-1.06z' fill='%23262136'/%3E%3C/svg%3E\");\n}\n\n.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='19' height='14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.5 1.167L4.333 4.5H1v5h3.333L8.5 12.833V1.167zM17.17 4.5l-5 5M12.17 4.5l5 5' stroke='%23262136' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n}\n\n.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='19' height='14' viewBox='0 0 19 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.82489 0.32403C9.08474 0.44892 9.25 0.711703 9.25 1.00001V12.6667C9.25 12.955 9.08474 13.2178 8.82489 13.3427C8.56504 13.4675 8.25661 13.4324 8.03148 13.2523L4.07025 10.0833H1C0.585786 10.0833 0.25 9.74755 0.25 9.33334V4.33334C0.25 3.91913 0.585786 3.58334 1 3.58334H4.07025L8.03148 0.414355C8.25661 0.234253 8.56504 0.19914 8.82489 0.32403ZM7.75 2.56048L4.80185 4.91899C4.66887 5.02538 4.50364 5.08334 4.33333 5.08334H1.75V8.58334H4.33333C4.50364 8.58334 4.66887 8.6413 4.80185 8.74769L7.75 11.1062V2.56048Z' fill='%23262136'/%3E%3C/svg%3E%0A\");\n}\n\n.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='19' height='14' viewBox='0 0 19 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.82489 0.32403C9.08474 0.44892 9.25 0.711703 9.25 1.00001V12.6667C9.25 12.955 9.08474 13.2178 8.82489 13.3427C8.56504 13.4675 8.25661 13.4324 8.03148 13.2523L4.07025 10.0833H1C0.585786 10.0833 0.25 9.74755 0.25 9.33334V4.33334C0.25 3.91913 0.585786 3.58334 1 3.58334H4.07025L8.03148 0.414355C8.25661 0.234253 8.56504 0.19914 8.82489 0.32403ZM7.75 2.56048L4.80185 4.91899C4.66887 5.02538 4.50364 5.08334 4.33333 5.08334H1.75V8.58334H4.33333C4.50364 8.58334 4.66887 8.6413 4.80185 8.74769L7.75 11.1062V2.56048Z' fill='%23262136'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.9698 3.41124C12.2627 3.11839 12.7376 3.11846 13.0304 3.4114C13.9521 4.33341 14.4699 5.58376 14.4699 6.88748C14.4699 8.19121 13.9521 9.44156 13.0304 10.3636C12.7376 10.6565 12.2627 10.6566 11.9698 10.3637C11.6768 10.0709 11.6767 9.596 11.9696 9.30307C12.6101 8.66235 12.9699 7.79346 12.9699 6.88748C12.9699 5.98151 12.6101 5.11262 11.9696 4.4719C11.6767 4.17896 11.6768 3.70409 11.9698 3.41124Z' fill='%23262136'/%3E%3C/svg%3E%0A\");\n}\n\n.video-js .vjs-volume-control:hover .vjs-mouse-display {\n display: none !important;\n}\n\n.video-js .vjs-play-progress {\n background-color: black;\n}\n\n/* position video player inside the container */\n.video-js .vjs-tech {\n position: static;\n}\n\n.video-js .vjs-time-tooltip {\n padding: 0.25em 0.75em;\n align-items: center;\n color: #333;\n background: #FCFCFD;\n border-radius: 99px;\n text-align: center;\n border: 1px solid #E0E0EB;\n display: flex;\n align-items: center;\n justify-content: center;\n top: -25px;\n font-size: 12px !important;\n width: 50px !important;\n}\n\n.video-js .vjs-play-progress.vjs-slider-bar .vjs-time-tooltip {\n visibility: hidden !important;\n}\n\n.video-js .vjs-progress-control .vjs-mouse-display {\n z-index: 2;\n}\n\n.ul-video-player {\n width: 100%;\n display: flex;\n flex-direction: column;\n height: auto;\n border: 1px solid #E6E6E6;\n background-color: white;\n box-sizing: border-box;\n border-radius: 4px;\n background-clip: border-box;\n overflow: hidden;\n}\n\n.video-js.vjs-fullscreen:not(.vjs-ios-native-fs) {\n border: none;\n}\n\n#video-response-player-secondary-video-player {\n max-width: 200px;\n margin-right: 20px;\n background-color: transparent;\n}\n\n#ul-card-video__player_recorder-video-recorder.vjs-fullscreen {\n display: table;\n}\n\n.video-js div.vjs-progress-control {\n margin-top: -3px;\n}\n\n.video-js .vjs-progress-control .vjs-slider {\n background-color: #B2BBBD;\n}\n\n.vjs-record.video-js .vjs-control.vjs-button.vjs-fullscreen-control {\n position:relative;\n}\n\n.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.82143 2.54004L12.2614 2.54004C12.9242 2.54004 13.4614 3.0773 13.4614 3.74004L13.4614 6.18004' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M6.17955 13.46L3.73955 13.46C3.07681 13.46 2.53955 12.9227 2.53955 12.26L2.53955 9.81996' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12.7772 3.22266L9.36475 6.63516' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M6.29434 9.70605L2.88184 13.1186' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n}\n\n.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='16' height='16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.583 9.813H5.25a1 1 0 011 1v3.666M5.375 10.688L1 15.061M14.917 5.813H11.25a1 1 0 01-1-1V1.146M15.063 1l-4.376 4.375' stroke='%23262136' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n}\n\n.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before, .video-js .vjs-icon-replay:before {\n content: url(\"data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.5363 6.40226L1.93958 10.7006C1.64037 10.8502 1.28833 10.6326 1.28833 10.2981V1.7014C1.28833 1.36688 1.64037 1.14931 1.93958 1.29891L10.5363 5.59727C10.868 5.76311 10.868 6.23642 10.5363 6.40226Z' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E\");\n}\n\n.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before, .vjs-icon-pause:before {\n content: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='3.61885' y='2.06074' width='3.16185' height='11.88' rx='0.9' fill='black' stroke='%23EDEDED' stroke-width='0.6' stroke-linecap='round'/%3E%3Crect x='9.21797' y='2.06074' width='3.16185' height='11.88' rx='0.9' fill='black' stroke='%23EDEDED' stroke-width='0.6' stroke-linecap='round'/%3E%3C/svg%3E%0A\");\n padding: 2px;\n}\n\n.vjs-error-display {\n display: none;\n}\n\n.ul-video-player-video {\n position: relative;\n top: 0;\n left: 0;\n width: 100%;\n}\n\n.ul-video-container {\n width: 100%;\n height: auto;\n left: 0px;\n top: 0px;\n\n background-color: transparent;\n border-radius: 4px;\n\n align-items: start;\n display: flex;\n flex-direction: column;\n\n /* Inside Auto Layout */\n\n flex: none;\n order: 0;\n flex-grow: 0;\n margin: 10px 0px;\n position: relative;\n}\n\n.vjs-record button.vjs-device-button.vjs-control {\n background: rgba(255, 255, 255, 96);\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n margin: 0;\n border-radius: 0;\n line-height: 0.6;\n padding: 10px;\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n z-index: 3;\n}\n\n.vjs-record .vjs-device-button.vjs-control:before {\n font-size: 14px !important;\n color: #333;\n content: \"Your browser needs to access your camera and microphone for video recording\";\n line-height: 135%;\n}\n\n.vjs-record .vjs-device-button.vjs-control.permission-denied:before {\n font-size: 16px !important;\n color: #262136;\n content: \"Unable to access your camera and microphone\";\n}\n\n.vjs-record .vjs-device-button.vjs-control:after {\n display: inline-block;\n background: #F0F0F5;\n font-size: 13px;\n border-radius: 4px;\n content: \"Request Permissions\";\n padding: 1em 2em;\n color: #333;\n margin-top: 20px;\n}\n\n.vjs-record .vjs-device-button.vjs-control.permission-denied:after {\n display: inline-block;\n background: white;\n font-size: 13px;\n content: \"Please go to your browser settings and update permissions to enable recording\";\n padding: 1em;\n color: #4B575D;\n margin: 5px;\n line-height: 135%;\n text-align: center;\n}\n\n.vjs-control.vjs-button.ul-video-recorder-delete-button, .vjs-control.vjs-button.ul-video-recorder-toggle-button, .vjs-control.vjs-button.ul-video-recorder-camera-off-button-audio-only, .vjs-control.vjs-button.ul-video-recorder-camera-off-button {\n cursor: pointer;\n}\n\n.ul-video-recorder-delete-button .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M9.21234 7.37549V11.1193M2.53931 4.25595H13.4593H2.53931ZM5.57234 4.25595V3.00833C5.57222 2.84433 5.60354 2.68192 5.6645 2.53038C5.72546 2.37884 5.81488 2.24115 5.92762 2.12519C6.04037 2.00922 6.17424 1.91726 6.32158 1.85456C6.46892 1.79185 6.62683 1.75964 6.78628 1.75977H9.21234C9.37179 1.75964 9.5297 1.79185 9.67703 1.85456C9.82437 1.91726 9.95824 2.00922 10.071 2.12519C10.1837 2.24115 10.2732 2.37884 10.3341 2.53038C10.3951 2.68192 10.4264 2.84433 10.4263 3.00833V4.25595H5.57234ZM12.2463 4.25595V12.9912C12.2463 13.3223 12.1184 13.6399 11.8907 13.8741C11.6631 14.1082 11.3543 14.2398 11.0323 14.2398H4.96628C4.64432 14.2398 4.33555 14.1082 4.10789 13.8741C3.88023 13.6399 3.75234 13.3223 3.75234 12.9912V4.25595H12.2463ZM6.78628 7.37549V11.1193V7.37549Z' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A\");\n}\n\n.ul-video-recorder-toggle-button .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8 0C12.4183 0 16 3.58172 16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0Z' fill='%23D15153'/%3E%3C/svg%3E\");\n}\n\n.ul-video-recorder-toggle-button.ul-recording-in-session .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 10L12 2C12 0.89543 11.1046 -4.85396e-07 10 -4.37114e-07L2 -8.74228e-08C0.89543 -3.91405e-08 -4.85396e-07 0.895431 -4.37114e-07 2L-8.74228e-08 10C-3.91405e-08 11.1046 0.895431 12 2 12L10 12C11.1046 12 12 11.1046 12 10Z' fill='%23D15153'/%3E%3C/svg%3E%0A\");\n}\n\n.ul-video-recorder-camera-off-button .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_2645_4654)'%3E%3Cpath d='M15.1491 4.75L10.5991 8L15.1491 11.25V4.75Z' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9.29912 3.4502H2.14912C1.43115 3.4502 0.849121 4.03223 0.849121 4.7502V11.2502C0.849121 11.9682 1.43115 12.5502 2.14912 12.5502H9.29912C10.0171 12.5502 10.5991 11.9682 10.5991 11.2502V4.7502C10.5991 4.03223 10.0171 3.4502 9.29912 3.4502Z' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_2645_4654'%3E%3Crect width='15.6' height='15.6' fill='white' transform='translate(0.199951 0.200195)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\");\n}\n\n.ul-video-recorder-camera-off-button-audio-only .vjs-icon-placeholder:before {\n content: url(\"data:image/svg+xml,%3Csvg width='22' height='15' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M.75 3A2.75 2.75 0 013.5.25h9.081A2.75 2.75 0 0115.331 3v9a2.75 2.75 0 01-2.75 2.75H3.5A2.75 2.75 0 01.75 12V3zM3.5 1.75c-.69 0-1.25.56-1.25 1.25v9c0 .69.56 1.25 1.25 1.25h9.081c.69 0 1.25-.56 1.25-1.25V3c0-.69-.56-1.25-1.25-1.25H3.5z' fill='%23262136'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M14.53 2.03l-12 12-1.06-1.06 12-12 1.06 1.06zM20.87 1.525a.75.75 0 01.38.652v10.588a.75.75 0 01-1.134.644l-5.92-3.53a.75.75 0 01-.365-.643v-3.53a.75.75 0 01.366-.644l5.919-3.53a.75.75 0 01.754-.007zm-5.539 4.607V8.81l4.419 2.635V3.497l-4.419 2.635z' fill='%23262136'/%3E%3C/svg%3E\");\n transform: scale(0.75);\n}\n\n.ul-upload-progress-label {\n padding: 0.15em 0.75em;\n align-items: center;\n font-size: 12px;\n color: #333;\n background: #FCFCFD;\n border-radius: 99px;\n text-align: center;\n border: 1px solid #E0E0EB;\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n bottom: 75px;\n left: calc(50% - 65px);\n width: 130px;\n z-index: 5;\n}\n\n.ul-upload-progress-label__time {\n display: inline-flex;\n margin-left: 0.8em;\n align-items: center;\n}\n\n.ul-upload-progress-label__time:before {\n content: \"\";\n display: inline-flex;\n width: 1px;\n height: 12px;\n background-color: #E0E0EB;\n margin-right: 0.8em;\n}\n\n@keyframes grow {\n 0% {\n transform: scale(1);\n background-color: #EEECFC;\n }\n 50% {\n transform: scale(1.2);\n background-color: #E1DFF4;\n }\n 100% {\n transform: scale(1);\n background-color: #EEECFC;\n }\n}\n\n.ul-audio-recorder-placeholder:before {\n width: 80px;\n height: 80px;\n border-radius: 120px;\n background-color: #EEECFC;\n content: \"\";\n position: absolute;\n left: calc(50% - 40px);\n top: calc(50% - 40px);\n animation: 6s infinite grow;\n transform-origin: 50% 60%;\n}\n\n.ul-audio-recorder-placeholder:after {\n content: url(\"data:image/svg+xml,%3Csvg width='98' height='98' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cmask id='a' maskUnits='userSpaceOnUse' x='0' y='0' width='98' height='98'%3E%3Ccircle cx='49' cy='49' r='49' fill='%23EDECF8'/%3E%3C/mask%3E%3Cg mask='url(%23a)'%3E%3Ccircle cx='49' cy='49' r='50' fill='%23645CC2'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.422 81.812c5.405-15.547 20.187-26.706 37.576-26.706 17.39 0 32.172 11.159 37.577 26.707-9.164 10.43-22.601 17.013-37.576 17.013-14.976 0-28.414-6.583-37.577-17.014z' fill='%23fff' fill-opacity='.6'/%3E%3Ccircle cx='49' cy='29' r='17' fill='%23fff' fill-opacity='.7'/%3E%3C/g%3E%3C/svg%3E\");\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n transform: translate(-50%, -50%) scale(0.6);\n}\n\n.ul-audio-recorder-placeholder {\n min-height: 150px;\n width: 100%;\n background-color: #fcfcfd;\n display: block;\n position: relative;\n}\n\n.vjs-fullscreen .ul-audio-recorder-placeholder {\n vertical-align: middle;\n display: table-cell;\n}\n\n.vjs-fullscreen .ul-control-panel {\n height: 80px;\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n max-width: 100%;\n background-color: #F8F8F8;\n}\n\n.vjs-playback-rate .vjs-playback-rate-value {\n align-items: center;\n display: flex;\n font-size: 12px;\n justify-content: center;\n}\n\n.vjs-playback-rate .vjs-menu {\n left: -5px;\n bottom: 3px;\n}\n\n.vjs-menu-button-popup .vjs-menu .vjs-menu-content {\n background-color: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-sizing: border-box;\n border-radius: 4px;\n}\n\n.vjs-menu li {\n font-size: 12px;\n padding: 5px 0;\n}\n\n.vjs-menu li.vjs-selected {\n color: lightgray;\n}\n\n.vjs-menu li.vjs-menu-item:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.vjs-fullscreen .ul-buttons-panel {\n top: calc(50% - 30px);\n position: relative;\n}\n\n.vjs-fullscreen .vjs-record-indicator.vjs-control {\n bottom: 90px !important;\n}\n\n.vjs-record.video-js div.vjs-control.vjs-record-indicator {\n padding: 0.3em 0.75em 0.15em 15px;\n align-items: center;\n font-size: 12px;\n color: #333;\n background: #FCFCFD;\n border-radius: 99px;\n text-align: center;\n border: 1px solid #E0E0EB;\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n bottom: 75px;\n top: auto;\n left: calc(50% - 21px);\n width: 43px;\n height: 16px;\n z-index: 4;\n}\n\n.vjs-record.video-js div.vjs-control.vjs-record-indicator:after {\n content: \"\";\n background-color: #EB5757;\n width: 6px;\n height: 6px;\n border-radius: 8px;\n animation: none;\n top: 4px;\n left: 5px;\n}\n\n.vjs-record.video-js div.vjs-control.vjs-record-indicator:before {\n position: relative;\n font-size: 9px;\n animation: none;\n opacity: 1;\n color: #333;\n top: auto;\n left: auto;\n}\n\n.ul-video-player-loading {\n display: inline-block;\n position: relative;\n width: 6rem;\n height: 6rem;\n\n}\n.ul-video-player-loading div {\n box-sizing: border-box;\n position: absolute;\n display: block;\n width: 80%;\n height: 80%;\n margin: 5px;\n border: 5px solid #666;\n border-radius: 50%;\n animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: #666 transparent transparent transparent;\n}\n\n.first {\n animation-delay: -0.45s;\n}\n.second {\n animation-delay: -0.3s;\n}\n.third {\n animation-delay: -0.15s;\n}\n\n@keyframes lds-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.ul-video-btn {\n width: 100%;\n border: 1px solid #E6E6E6;\n border-radius: 4px;\n background-color: rgba(0, 0, 0, 0.02);\n padding: 8px;\n font-weight: 500;\n font-size: 15px;\n}\n\n.ul-record-response-btn:before, .ul-record-response-btn:after, .ul-back-question-btn:before, .ul-back-question-btn:after {\n margin: 0 5px;\n vertical-align: middle;\n}\n\n.ul-record-response-btn:before {\n content: url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_2645_4654)'%3E%3Cpath d='M15.1491 4.75L10.5991 8L15.1491 11.25V4.75Z' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9.29912 3.4502H2.14912C1.43115 3.4502 0.849121 4.03223 0.849121 4.7502V11.2502C0.849121 11.9682 1.43115 12.5502 2.14912 12.5502H9.29912C10.0171 12.5502 10.5991 11.9682 10.5991 11.2502V4.7502C10.5991 4.03223 10.0171 3.4502 9.29912 3.4502Z' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_2645_4654'%3E%3Crect width='15.6' height='15.6' fill='white' transform='translate(0.199951 0.200195)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\");\n display: inline-block;\n transform: translate(0px, 2px);\n}\n\n.ul-record-response-btn:after {\n content: 'Record your Response';\n}\n\n.ul-back-question-btn:before {\n content: url(\"data:image/svg+xml,%3Csvg width='15' height='16' viewBox='0 0 15 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.8757 8.22361L1.1118 14.6056C0.945578 14.6887 0.75 14.5678 0.75 14.382V1.61803C0.75 1.43219 0.945579 1.31131 1.1118 1.39443L13.8757 7.77639C14.06 7.86852 14.06 8.13148 13.8757 8.22361Z' stroke='black' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E\");\n display: inline-block;\n transform: scale(0.85) translate(0, 1px);\n -moz-transform: scale(0.85) translate(0, 2px);\n}\n\n.ul-back-question-btn:after {\n content: 'Back to Question';\n}\n\n.hidden {\n display: none !important;\n opacity: 0;\n visibility: hidden;\n}\n\n.visible {\n visibility: visible;\n opacity: 1;\n animation: fade 0.3s;\n}\n\n@keyframes fade {\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n}\n\n#ul-recording-countdown-screen {\n width: 100%;\n height: 100%;\n color: black;\n background-color: rgba(255, 255, 255, 0.8);\n position: absolute;\n text-align: center;\n font-size: 15px;\n z-index: 1;\n display: table;\n}\n\n.ul-countdown-text {\n vertical-align: middle;\n display: table-cell;\n transform: translate(0, -25px);\n}\n\n.vjs-fullscreen > #ul-recording-countdown-screen {\n font-size: 25px;\n transform: unset;\n}\n\n.vjs-poster {\n background-size: cover;\n}\n`;\n\nconst spinner = (playerId) => {\n const spinnerContainer = videoPlayerStates.document.createElement('div');\n spinnerContainer.className = 'ul-video-player-loading';\n spinnerContainer.id = getSpinnerId(playerId);\n ['first', 'second', 'third', 'fourth'].map((divName) => {\n const element = videoPlayerStates.document.createElement('div');\n element.className = divName;\n spinnerContainer.appendChild(element);\n });\n return spinnerContainer;\n};\nconst getSpinnerId = (playerId) => {\n return playerId + '-loading-spiner';\n};\n\nexport const HIDDEN_CLASS = 'hidden';\nexport const VISIBLE_CLASS = 'visible';\nconst MUX_VIDEO_EXTENSION = '.m3u8';\nconst QUESTION_ID_FIELD = 'questionId';\n\nconst CAMERA_OFF_BUTTON_CLASS = 'ul-video-recorder-camera-off-button';\nconst RECORDING_IN_SESSION = 'ul-recording-in-session';\nconst recorderScripts = [\n { type: 'link', content: `${CDN_LINK}/dependencies/videojs-record-4.5.0.min.css` },\n { type: 'script', content: `${CDN_LINK}/dependencies/RecordRTC-5.6.2.js` },\n { type: 'script', content: `${CDN_LINK}/dependencies/adapter.8.0.0.min.js` },\n { type: 'script', content: `${CDN_LINK}/dependencies/videojs-record-4.5.0.min.js` },\n { type: 'script', content: `${CDN_LINK}/userleap-web-upchunk-v2.2.2.js` },\n];\nconst videoPlayerScripts = [\n { type: 'link', content: `${CDN_LINK}/dependencies/video-js-7.18.0.min.css` },\n { type: 'script', content: `${CDN_LINK}/dependencies/video-js-7.18.0.min.js` },\n { type: 'style', content: videoPlayerCss },\n];\nconst VIDEO_PLAYER_POSTFIX = '-video-player';\nconst SECONDARY_VIDEO_PLAYER_POSTFIX = '-secondary-video-player';\nconst VIDEO_RECORDER_POSTFIX = '-video-recorder';\nlet upload;\nlet currentPlayerSession;\n\n/**\n * Track analytics event, which will be reported on Segment and Mixpanel, for analytics/debugging purposes\n * @param {Object} obj\n * @param {String} obj.event event name, which will be prefixed with 'SDK - '\n * @param {String} obj.apiBase base url for the api calls. default is prod api\n * @param {Object} obj.headers request headers for analytics logging (unlike reportError, preserves platform header)\n * @param {String} obj.visitorId if not present, will only console log\n * @param {String} obj.envId if not present, will only console log\n * @param {Object} obj.metadata additional metadata\n */\nconst trackAnalytics = async ({ event, apiBase, headers, visitorId, envId, metadata }) => {\n const pde = videoPlayerStates.document.documentElement;\n\n // log in study taking experience only\n if (!visitorId || !envId) return;\n\n const body = {\n event: `SDK - ${event}`,\n visitorId,\n environmentId: envId,\n metadata: {\n ...(metadata || {}),\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n clientWidth: pde.clientWidth,\n clientHeight: pde.clientHeight,\n location: window.location.href,\n language: navigator.language,\n },\n };\n\n const result = await fetch(`${apiBase}/sdk/1/visitors/${visitorId}/analytics`, {\n method: 'POST',\n cache: 'no-cache',\n headers,\n body: JSON.stringify(body),\n });\n\n if (!result.ok) {\n console.warn('[Sprig] (ERR-444) Failed to track analytics', event);\n }\n};\n\n/**\n *\n * @param {Error} err the error being reported\n * @param {String} action the action during which the error occurred\n * @param {String} apiBase base url for the api calls. default is prod api\n * @param {'x-ul-video-recorder-origin': 'dashboard' | 'sdk'} headers request headers for error logging (potentially contains additional headers)\n * @param {String} visitorId optional\n * @param {String} envId optional\n */\nconst reportError = async (err, action, apiBase, headers, visitorId, envId) => {\n trackAnalytics({\n event: `Video Error ${action}`,\n apiBase,\n headers,\n visitorId,\n envId,\n metadata: { errorMessage: err.message },\n });\n\n const pde = videoPlayerStates.document.documentElement;\n const meta = {\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n clientWidth: pde.clientWidth,\n clientHeight: pde.clientHeight,\n location: window.location.href,\n language: navigator.language,\n };\n const body = {\n action,\n err: { message: err.message, stack: err.stack },\n meta,\n vid: visitorId,\n envId,\n };\n\n const result = await fetch(`${apiBase}/sdk/1/errors`, {\n method: 'POST',\n cache: 'no-cache',\n headers: {\n ...headers,\n 'userleap-platform': 'video_recorder',\n 'x-ul-error': window.btoa(`userleap-${Date.now()}-error`),\n },\n body: JSON.stringify(body),\n });\n\n if (!result.ok) {\n console.warn('[Sprig] (ERR-444) Failed to report error to API', err);\n }\n};\n\n/**\n *\n * @param {html element} parentElement parent element to attach the created elements\n * @param {{type, content}} scriptData an object containing the script's type and the content\n * @returns a promise that resolves when script is loaded\n */\nconst loadScript = (parentElement, { type, content }) => {\n return new Promise(function (resolve, reject) {\n let element;\n if (type === 'script') {\n // remote js\n element = videoPlayerStates.document.createElement('script');\n element.src = content;\n } else if (type === 'link') {\n // remote style\n element = videoPlayerStates.document.createElement('link');\n element.rel = 'stylesheet';\n element.href = content;\n element.type = 'text/css';\n } else {\n // local style\n element = videoPlayerStates.document.createElement('style');\n element.innerHTML = content;\n }\n element.onload = function () {\n resolve(content);\n };\n element.onerror = function () {\n reject(content);\n };\n element.async = false;\n element.id = btoa(content);\n parentElement.appendChild(element);\n });\n};\n\n/**\n *\n * @param {HTMLElement} parentElement parent element to attach the created elements\n * @param {[{type: String, content: URI String}]} scripts (optional) additional scripts to add to the load queue\n * @param {()=>{}} onloadCallback (optional) callback to inform when the player has loaded\n * @param {apiBase: String, headers: JSON, visitorId: String, envId: String} errorLoggingDetails if present, send script load error\n */\nconst loadPlayerScripts = (scripts, onloadCallback) => {\n if (scripts.length === 0) return onloadCallback && onloadCallback();\n Promise.all(\n scripts.reduce((prev, cur) => {\n prev.push(loadScript(videoPlayerStates.document.head, cur));\n return prev;\n }, [])\n )\n .then(() => {\n videoPlayerStates.videojs = videoPlayerStates.document.defaultView.videojs;\n onloadCallback && onloadCallback();\n })\n .catch(function (script) {\n console.log(script + ' failed to load');\n });\n};\n\nconst setUploadProgress = (uploadProgressLabel, type, fraction) => {\n if (type === 'start') {\n uploadProgressLabel.style.visibility = 'visible';\n }\n if (type === 'none') {\n uploadProgressLabel.style.visibility = HIDDEN_CLASS;\n } else if (type === 'success') {\n uploadProgressLabel.style.visibility = HIDDEN_CLASS;\n uploadProgressLabel.innerHTML = 'Upload succeeded!';\n } else {\n const percent = Math.round(parseFloat(fraction));\n uploadProgressLabel.innerHTML = `Uploading <span class=\"ul-upload-progress-label__time\">${percent}%</span>`;\n uploadProgressLabel.style.background = `linear-gradient(to right, #E0E0EB 0%, #E0E0EB ${percent}%, #FCFCFD ${percent}%, #FCFCFD 100%)`;\n }\n};\n\nconst getPlayerPayloadField = (player, fieldName) => {\n const updatedPlayer = videoPlayerStates.videojs(player.id()); // player passed in may be reference an old player object;\n return updatedPlayer?.payload[fieldName];\n};\n\nconst setupRecordEventsHandling = (player, apiBase, recordEventsCallback, setUploadProgress, headers) => {\n const { surveyId, responseGroupUid, visitorId, envId } = player.payload;\n\n // error handling\n player.on('deviceError', function () {\n console.warn('device error: ', player.deviceErrorCode);\n if (player.deviceErrorCode.message === 'Permission denied') {\n player.deviceButton.addClass('permission-denied');\n recordEventsCallback && recordEventsCallback(RECORDER.ERROR, { type: RECORDER.PERMISSION_DENIED });\n trackAnalytics({\n event: 'Video Permission Denied',\n apiBase,\n headers,\n visitorId,\n envId,\n metadata: { questionId: getPlayerPayloadField(player, QUESTION_ID_FIELD), responseGroupUid, surveyId },\n });\n } else {\n recordEventsCallback && recordEventsCallback(RECORDER.ERROR, { type: RECORDER.OTHER });\n reportError(new Error(player.deviceErrorCode.message), 'recorderDeviceError', apiBase, headers, visitorId, envId);\n }\n });\n\n player.on('error', function (element, error) {\n reportError(error || player.error(), 'recorderError', apiBase, headers, visitorId, envId);\n });\n\n player.on('startRecord', function (element, error) {\n setUploadProgress(player.uploadProgressLabel, 'none');\n trackAnalytics({\n event: 'Video Record Start',\n apiBase,\n headers,\n visitorId,\n envId,\n metadata: { questionId: getPlayerPayloadField(player, QUESTION_ID_FIELD), responseGroupUid, surveyId },\n });\n });\n\n // user completed recording and stream is available\n player.on('finishRecord', async function () {\n setUploadProgress(player.uploadProgressLabel, 'start', 0);\n\n const questionId = getPlayerPayloadField(player, QUESTION_ID_FIELD);\n\n if (!surveyId) {\n const errorMessage = 'internal error: missing fields in payload';\n recordEventsCallback && recordEventsCallback(RECORDER.ERROR, { type: RECORDER.OTHER });\n reportError(new Error(errorMessage), 'finishRecord', apiBase, headers, visitorId, envId);\n return null;\n }\n\n player.record().stopDevice(); // turns off camera and light\n // the blob object contains the recorded data that\n // can be downloaded by the user, stored on server etc.\n const mediaType = player.cameraOff ? RECORDER.MEDIA_TYPE_AUDIO : RECORDER.MEDIA_TYPE_VIDEO;\n const mediaRecordingUid = uuid();\n trackAnalytics({\n event: 'Video Record Finish',\n apiBase,\n headers,\n visitorId,\n envId,\n metadata: { mediaRecordingUid, questionId, responseGroupUid, surveyId, mediaType },\n });\n\n const body = {\n surveyId,\n updatedAt: new Date().toISOString(),\n mediaType,\n mediaRecordingUid,\n };\n\n if (questionId) body.questionId = questionId;\n if (responseGroupUid) body.responseGroupUid = responseGroupUid;\n if (visitorId) body.visitorId = visitorId;\n\n const createUpload = async () => {\n const response = await fetch(`${apiBase}/2/environments/integrations/upload`, {\n method: 'POST',\n cache: 'no-cache',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n });\n if (response.ok) {\n const uploadResponse = await response.json();\n recordEventsCallback &&\n recordEventsCallback(RECORDER.UPLOAD_STARTED, {\n [RECORDER.UPLOAD_ID]: uploadResponse.upload.id,\n [RECORDER.MEDIA_TYPE]: mediaType,\n [RECORDER.MEDIA_RECORDING_UID]: mediaRecordingUid,\n });\n return uploadResponse.upload.url;\n } else {\n recordEventsCallback && recordEventsCallback(RECORDER.ERROR, { type: RECORDER.OTHER, response });\n reportError(\n new Error('failed to get upload response with url'),\n 'finishRecord',\n apiBase,\n headers,\n visitorId,\n envId\n );\n return null;\n }\n };\n\n const url = await createUpload();\n if (!url) return;\n\n upload = videoPlayerStates.document.defaultView.UpChunk.createUpload({\n // endpoint computed from backend separately and hacked together\n endpoint: url,\n file: new videoPlayerStates.document.defaultView.File(\n [player.recordedData],\n `recording ${mediaType} ${Date.now()}`\n ),\n chunkSize: 5120, // Uploads the file in ~5mb chunks\n });\n upload.startTime = Date.now();\n trackAnalytics({\n event: 'Video Upload Start',\n apiBase,\n headers,\n visitorId,\n envId,\n metadata: { mediaRecordingUid, questionId, responseGroupUid, surveyId, mediaType, url },\n });\n\n // subscribe to events\n upload.on('error', (err) => {\n setUploadProgress(player.uploadProgressLabel, 'none');\n recordEventsCallback &&\n recordEventsCallback(RECORDER.UPLOAD_FINISHED, { [RECORDER.MEDIA_RECORDING_UID]: mediaRecordingUid });\n reportError(err, 'finishRecord', apiBase, headers, visitorId, envId);\n });\n\n upload.on('progress', (progress) => {\n recordEventsCallback &&\n recordEventsCallback(RECORDER.UPLOAD_PROGRESS, {\n [RECORDER.MEDIA_RECORDING_UID]: mediaRecordingUid,\n [RECORDER.UPLOAD_PROGRESS_PCT]: progress.detail,\n });\n setUploadProgress(player.uploadProgressLabel, 'progress', progress.detail);\n });\n\n upload.on('success', () => {\n setUploadProgress(player.uploadProgressLabel, 'success');\n recordEventsCallback &&\n recordEventsCallback(RECORDER.UPLOAD_FINISHED, { [RECORDER.MEDIA_RECORDING_UID]: mediaRecordingUid });\n trackAnalytics({\n event: 'Video Upload Success',\n apiBase,\n headers,\n visitorId,\n envId,\n metadata: {\n mediaRecordingUid,\n questionId,\n responseGroupUid,\n surveyId,\n mediaType,\n url,\n elapsedMs: upload.startTime && Date.now() - upload.startTime,\n },\n });\n });\n });\n};\n\nconst makeButtonsPanel = (player, children) => {\n const buttonsPanel = new (videoPlayerStates.videojs.getComponent('Component'))(player);\n buttonsPanel.addClass('ul-buttons-panel');\n children.map((child) => {\n buttonsPanel.addChild(child);\n });\n\n addTextToButtonsPanel(buttonsPanel);\n\n return buttonsPanel;\n};\n\nconst addTextToButtonsPanel = (buttonsPanel) => {\n buttonsPanel.children().forEach((button) => {\n if (BUTTON_NAME_TITLE[button.name_]) {\n const buttonTextEl = createButtonText(BUTTON_NAME_TITLE[button.name_], `ul-${BUTTON_NAME_TITLE[button.name_]}`);\n const getButtonEl = button.el_;\n\n getButtonEl.appendChild(buttonTextEl);\n }\n });\n};\n\nconst createButtonText = (buttonName, id = '') => {\n const buttonText = videoPlayerStates.document.createElement('span');\n buttonText.className = 'ul-button-text';\n buttonText.innerHTML = buttonName;\n buttonText.id = id;\n\n return buttonText;\n};\n\nconst prepareVideoPlayer = (player, buttonsPanel, source, onloadCallback, isAudioStream = false, secondaryPlayer) => {\n player.addClass('ul-video-player');\n const controls = new (videoPlayerStates.videojs.getComponent('Component'))(player);\n controls.addClass('ul-control-panel');\n player.progressBar = controls.addChild('ProgressControl');\n source && player.src(source);\n player.audioPlayerPlaceholder = new (videoPlayerStates.videojs.getComponent('Component'))(player);\n player.audioPlayerPlaceholder.addClass('ul-audio-recorder-placeholder');\n const thumbnail = source && source.src ? getPosterThumbnail(source.src) : null;\n if (source && (isAudioStream || !thumbnail)) {\n // Handle audio stream OR non-existing thumbnail with source player\n player.children()[0].classList.add('vjs-hidden'); // hide the video screen when camera is off\n videoPlayerStates.document.getElementById(`${player.id()}_html5_api`).style.height = '0px';\n } else {\n // Handle video stream\n player.audioPlayerPlaceholder.hide(); // not a recorder in playback mode so hide placeholder if there is a poster\n videoPlayerStates.document.getElementById(`${player.id()}_html5_api`).style.height = '100%';\n if (thumbnail) player.poster(thumbnail);\n }\n\n player.on('play', () => {\n // hide audio placeholder in case it was toggled earlier when poster didn't exist\n if (!isAudioStream && source && !thumbnail) {\n toggleAudioPlaceholder(player, false);\n }\n\n secondaryPlayer?.play();\n });\n\n player.on('pause', () => {\n secondaryPlayer?.pause();\n });\n\n player.on('seeked', () => {\n // const currTime = player.currentTime();\n secondaryPlayer?.currentTime(player.currentTime());\n });\n\n player.on('ratechange', () => {\n secondaryPlayer?.playbackRate(player.playbackRate());\n });\n\n player.addChild(player.audioPlayerPlaceholder, {}, 1); // first child is the video element do not reset\n controls.addChild(buttonsPanel);\n player.addChild(controls);\n onloadCallback && onloadCallback(player);\n};\n\nconst prepareSecondaryVideoPlayer = (player, source, onloadCallback) => {\n player.addClass(`ul${SECONDARY_VIDEO_PLAYER_POSTFIX}`);\n const controls = new (videoPlayerStates.videojs.getComponent('Component'))(player);\n source && player.src(source);\n player.addChild(controls);\n onloadCallback && onloadCallback(player);\n};\n\nconst prepareRecorder = (\n videoPlayerContainer,\n playerId,\n payload,\n apiBase,\n recordEventsCallback,\n source,\n headers,\n isAudioStream = false\n) => {\n currentPlayerSession = Date.now();\n const options = {\n controls: false,\n bigPlayButton: false,\n fluid: false,\n width: 1280,\n height: 720,\n playsinline: true,\n plugins: {\n record: {\n audio: true,\n video: {\n // video constraints: set resolution of camera\n mandatory: {\n minWidth: 1280,\n minHeight: 720,\n },\n },\n // dimensions of captured video frames\n frameWidth: 1280,\n frameHeight: 720,\n maxLength: 600, // set 10-min max length\n autoMuteDevice: true,\n },\n },\n };\n\n const player = getVideoPlayerObject(playerId, options);\n if (!player) return;\n player.payload = payload;\n const { surveyId, questionId, responseGroupUid, visitorId, envId } = payload;\n\n let currStream;\n const restartDevice = (cameraOff) => {\n const cameraOnClass = CAMERA_OFF_BUTTON_CLASS;\n const cameraOffClass = CAMERA_OFF_BUTTON_CLASS + '-audio-only';\n setUploadProgress(player.uploadProgressLabel, 'none');\n upload && upload.startTime >= currentPlayerSession && upload.abort();\n const cameraButtonTxt = videoPlayerStates.document.getElementById('ul-camera-button');\n if (cameraOff) {\n player.children()[0].classList.add('vjs-hidden'); // hide the video screen when camera is off\n cameraOffButton.removeClass(cameraOnClass);\n cameraOffButton.addClass(cameraOffClass);\n cameraButtonTxt.innerHTML = BUTTON_NAME_TITLE.TurnOnCamera;\n player.audioPlayerPlaceholder.removeClass('vjs-hidden');\n\n currStream?.getTracks().forEach((track) => {\n track.stop();\n });\n window.navigator.mediaDevices\n .getUserMedia({ video: true, audio: true })\n .then((stream) => {\n currStream = stream;\n stream.getVideoTracks().forEach((track) => {\n track.enabled = false;\n });\n player.record().onDeviceReady(stream);\n })\n .catch(player.record().onDeviceError.bind(player.record()));\n } else {\n currStream?.getVideoTracks().forEach((track) => {\n track.enabled = true;\n });\n\n player.children()[0].classList.remove('vjs-hidden');\n player.record().getDevice();\n cameraOffButton.removeClass(cameraOffClass);\n cameraOffButton.addClass(cameraOnClass);\n cameraButtonTxt.innerHTML = BUTTON_NAME_TITLE.TurnOffCamera;\n player.audioPlayerPlaceholder.addClass('vjs-hidden');\n }\n };\n const deleteButton = new (videoPlayerStates.videojs.getComponent('Button'))(player, {\n clickHandler: () => {\n if (deleteButton.hasClass(HIDDEN_CLASS)) return;\n trackAnalytics({\n event: 'Video Delete Button Clicked',\n apiBase,\n headers,\n visitorId,\n envId,\n metadata: { questionId, responseGroupUid, surveyId },\n });\n restartDevice(player.cameraOff);\n recordEventsCallback(RECORDER.DELETE, {});\n cameraOffButton.removeClass(HIDDEN_CLASS);\n deleteButton.addClass(HIDDEN_CLASS);\n },\n });\n deleteButton.addClass('ul-video-recorder-delete-button');\n deleteButton.el_.appendChild(createButtonText(BUTTON_NAME_TITLE.DeleteButton, 'ul-delete-button'));\n\n const videoPlayerEl = videoPlayerStates.document.getElementById(playerId);\n\n const updatePlayerDisplay = () => {\n if (videoPlayerEl.classList.contains('vjs-fullscreen') && player.cameraOff) videoPlayerEl.style.display = 'table';\n else videoPlayerEl.style.display = 'flex';\n };\n\n updatePlayerDisplay();\n\n const cameraOffButton = new (videoPlayerStates.videojs.getComponent('Button'))(player, {\n clickHandler: () => {\n if (player.record().isRecording()) return;\n player.cameraOff = !player.cameraOff;\n trackAnalytics({\n event: 'Video Camera Button Clicked',\n apiBase,\n headers,\n visitorId: payload.visitorId,\n envId: payload.envId,\n metadata: { questionId, responseGroupUid, surveyId, cameraOff: player.cameraOff },\n });\n restartDevice(player.cameraOff);\n !deleteButton.hasClass(HIDDEN_CLASS) && deleteButton.addClass(HIDDEN_CLASS);\n recordEventsCallback(RECORDER.DELETE, {});\n updatePlayerDisplay();\n },\n });\n cameraOffButton.addClass(CAMERA_OFF_BUTTON_CLASS);\n cameraOffButton.el_.appendChild(createButtonText(BUTTON_NAME_TITLE.TurnOffCamera, 'ul-camera-button'));\n\n const recordToggle = new (videoPlayerStates.videojs.getComponent('Button'))(player, {\n clickHandler: () => {\n const recordButtonText = videoPlayerStates.document.getElementById('ul-recorder-toggle');\n if (!player.record().isRecording()) {\n const getCountdownEl = videoPlayerStates.document.getElementById('ul-recording-countdown-screen');\n if (getCountdownEl) {\n // Stopping recorder before recording starts\n getCountdownEl.remove();\n if (recordButtonText) recordButtonText.innerHTML = BUTTON_NAME_TITLE.RecordButton;\n restartDevice(player.cameraOff);\n recordEventsCallback(RECORDER.DELETE, {});\n cameraOffButton.removeClass(HIDDEN_CLASS);\n deleteButton.addClass(HIDDEN_CLASS);\n recordToggle.removeClass(RECORDING_IN_SESSION);\n expandToggle.show();\n } else {\n // start recording\n recordToggle.addClass(RECORDING_IN_SESSION);\n expandToggle.hide();\n cameraOffButton.addClass(HIDDEN_CLASS);\n deleteButton.addClass(HIDDEN_CLASS);\n if (recordButtonText) recordButtonText.innerHTML = BUTTON_NAME_TITLE.StopButton;\n\n const recordingPreview = videoPlayerStates.document.createElement('div');\n recordingPreview.id = 'ul-recording-countdown-screen';\n videoPlayerEl.insertBefore(recordingPreview, videoPlayerEl.children[1]);\n recordingPreview.style.height = `${videoPlayerEl.offsetHeight}px`;\n recordingCountdownStart(player, 3); // recording starts once countdown is finished\n }\n } else {\n player.record().stop();\n if (recordButtonText) recordButtonText.innerHTML = BUTTON_NAME_TITLE.RecordButton;\n recordToggle.removeClass(RECORDING_IN_SESSION);\n deleteButton.removeClass(HIDDEN_CLASS);\n }\n },\n });\n recordToggle.addClass('ul-video-recorder-toggle-button');\n recordToggle.el_.appendChild(createButtonText(BUTTON_NAME_TITLE.RecordButton, 'ul-recorder-toggle'));\n\n const uploadProgressLabel = videoPlayerStates.document.createElement('p');\n uploadProgressLabel.style.visibility = 'hidden';\n uploadProgressLabel.className = 'ul-upload-progress-label';\n videoPlayerContainer.appendChild(uploadProgressLabel);\n player.uploadProgressLabel = uploadProgressLabel;\n\n const buttonsPanel = makeButtonsPanel(player, [\n deleteButton,\n cameraOffButton,\n 'PlayToggle',\n recordToggle,\n 'FullscreenToggle',\n ]);\n\n const expandToggle = buttonsPanel.children().find((child) => child.name_ === 'FullscreenToggle');\n if (expandToggle.hasClass('vjs-disabled')) {\n expandToggle.hide();\n }\n\n // hide play toggle for recorder\n const playToggle = buttonsPanel.children().find((child) => child.name_ === 'PlayToggle');\n playToggle.hide();\n\n source && cameraOffButton.addClass(HIDDEN_CLASS);\n !source && deleteButton.addClass(HIDDEN_CLASS);\n\n prepareVideoPlayer(player, buttonsPanel, source, false, isAudioStream);\n\n player.on('stopRecord', () => {\n recordToggle.hide();\n playToggle.show();\n expandToggle.show();\n deleteButton.removeClass(HIDDEN_CLASS);\n });\n\n player.on('deviceReady', () => {\n recordToggle.show();\n playToggle.hide();\n deleteButton.addClass(HIDDEN_CLASS);\n });\n\n setupRecordEventsHandling(player, apiBase, recordEventsCallback, setUploadProgress, headers);\n // Show video if source exist.\n if (source) {\n player.deviceButton && player.deviceButton.hide();\n player.src(source);\n playToggle.show();\n recordToggle.hide();\n deleteButton.removeClass(HIDDEN_CLASS);\n }\n\n // Looking for saved permissions in browser. Note, navigator.permissions is experimental on some browsers.\n // https://developer.mozilla.org/en-US/docs/Web/API/Permissions/query\n const permissionDescriptors = [{ name: 'microphone' }];\n !player.cameraOff && permissionDescriptors.push({ name: 'camera' });\n Promise.all(permissionDescriptors.map((permissionDescriptor) => navigator?.permissions?.query(permissionDescriptor)))\n .then((status) => {\n const allGranted = status.reduce((prev, cur) => {\n return prev & (cur.state === 'granted');\n }, true);\n if (allGranted && player) {\n player.deviceButton && player.deviceButton.hide();\n !source && player.record().getDevice();\n }\n })\n .catch((e) => {\n // fail silently\n });\n};\n\n// Recursive function to update the countdown on recording player screen\nconst recordingCountdownStart = (player, startingNum = 3) => {\n const getCountdownEl = videoPlayerStates.document.getElementById('ul-recording-countdown-screen');\n if (getCountdownEl && startingNum === 0) {\n // remove recording screen once it hits 0 to start the recording.\n getCountdownEl.remove();\n player.record().start();\n } else if (getCountdownEl) {\n getCountdownEl.innerHTML = `<span class='ul-countdown-text'>Recording in... ${startingNum}</span>`;\n\n setTimeout(() => {\n recordingCountdownStart(player, startingNum - 1);\n }, 1000);\n }\n};\n\nconst createVideoPlayerContainer = (playerId) => {\n const videoPlayerContainer = videoPlayerStates.document.createElement('div');\n videoPlayerContainer.className = 'ul-video-container';\n videoPlayerContainer.appendChild(spinner(playerId));\n return videoPlayerContainer;\n};\n\nconst createVideoPlayerComponents = (playerId, videoPlayerContainer) => {\n const videoPlayer = videoPlayerStates.document.createElement('video');\n videoPlayer.id = playerId;\n videoPlayer.className = 'video-js vjs-default-skin ul-video-player-video';\n\n const compatibility = videoPlayerStates.document.createElement('p');\n compatibility.className = 'vjs-no-js';\n compatibility.innerHTML = 'To view this video please enable JavaScript, and consider upgrading to a web browser that';\n const compatibilityLink = videoPlayerStates.document.createElement('a');\n compatibilityLink.href = 'https://videojs.com/html5-video-support/';\n compatibilityLink.target = '_blank';\n compatibilityLink.innerHTML = 'supports HTML5 video';\n compatibility.appendChild(compatibilityLink);\n videoPlayer.appendChild(compatibility);\n videoPlayerContainer.appendChild(videoPlayer);\n return videoPlayerContainer;\n};\n\nconst toggleAudioPlaceholder = (player, isAudioStream) => {\n if (isAudioStream) {\n player.children()[0].classList.add('vjs-hidden'); // hide the video screen when camera is off\n player.audioPlayerPlaceholder.show();\n videoPlayerStates.document.getElementById(`${player.id()}_html5_api`).style.height = '0px';\n } else {\n player.children()[0].classList.remove('vjs-hidden'); // hide the video screen when camera is off\n player.audioPlayerPlaceholder.hide(); // not a recorder in playback mode so hide placeholder\n videoPlayerStates.document.getElementById(`${player.id()}_html5_api`).style.height = '100%';\n }\n};\n\n// Safely get video player object if it exists.\nconst getVideoPlayerObject = (playerId, options) => {\n // PDE-882: Only render player if element exist with videoId.\n if (!videoPlayerStates.document.getElementById(playerId)) {\n console.error(`Error in finding player element with ID, ${playerId}`);\n return null;\n }\n\n return options ? videoPlayerStates.videojs(playerId, options) : videoPlayerStates.videojs(playerId);\n};\n\n// public api\n\n/**\n *\n * @param {String} playerId unique id for the video player's container\n * @param {{src: String, type: String}} source src properties to be plugged into the player, ex. {src: 'url', type: 'application/x-mpegURL' }\n * @param {*} onloadCallback (optional) callback to inform when the player has loaded\n * @param {boolean} isAudioStream true if media type for the playback is audio only default false\n * @param {String} apiBase base url for the api calls. default is prod api\n * @param {object} document the windows document\n * @param {{src: String, type: String}} secondSource src properties to be plugged into the player, ex. {src: 'url', type: 'application/x-mpegURL' }\n * @param {*} secondaryOnloadCallback (optional) callback to inform when the player has loaded. if you need to initialize a second player, you are required to pass in this callback\n * @returns html element for the video player container\n */\nexport const videoPlayer = (\n containerId,\n source,\n onloadCallback,\n isAudioStream = false,\n apiBase = 'https://api.sprig.com',\n videoPlayerDocument = document,\n secondSource = null,\n secondaryOnloadCallback = null\n) => {\n videoPlayerStates.document = videoPlayerDocument;\n const playerId = containerId + VIDEO_PLAYER_POSTFIX;\n const videoPlayerContainer = createVideoPlayerContainer(playerId);\n\n // Add event listener before loading third party scripts in to log any CSP violations\n videoPlayerStates.document.addEventListener('securitypolicyviolation', (e) => {\n reportError(\n new Error(`Voice & Video feature violates ${e.violatedDirective} web page CSP policies for the question player.`),\n 'playerDeviceError',\n apiBase,\n {}\n );\n });\n\n loadPlayerScripts(videoPlayerScripts, () => {\n videoPlayerStates.document.getElementById(getSpinnerId(playerId)).remove();\n createVideoPlayerComponents(playerId, videoPlayerContainer);\n const options = {\n playsinline: true,\n playbackRates: [0.5, 1, 1.5, 2],\n fill: true,\n };\n\n try {\n // secondary player first to pass into the primary player to control it.\n // if there are no secondary source then it will not take up space\n const secondPlayerId = containerId + SECONDARY_VIDEO_PLAYER_POSTFIX;\n createVideoPlayerComponents(secondPlayerId, videoPlayerContainer);\n\n const player = getVideoPlayerObject(playerId, options);\n const secondaryPlayer = getVideoPlayerObject(secondPlayerId, { muted: true, ...options });\n if (!player || !secondaryPlayer) return;\n\n prepareSecondaryVideoPlayer(secondaryPlayer, secondSource, secondaryOnloadCallback);\n\n // if no second source, hide it\n if (!secondSource) secondaryPlayer.addClass(HIDDEN_CLASS);\n\n const buttonsPanel = makeButtonsPanel(player, ['PlaybackRateMenuButton', 'PlayToggle', 'FullscreenToggle']);\n const expandToggle = buttonsPanel.children().find((child) => child.name_ === 'FullscreenToggle');\n if (expandToggle.hasClass('vjs-disabled')) {\n expandToggle.hide();\n }\n prepareVideoPlayer(player, buttonsPanel, source, onloadCallback, isAudioStream, secondaryPlayer);\n } catch (e) {\n reportError(new Error(`Error when creating video player object ${e}`), 'playerDeviceError', apiBase, {});\n return;\n }\n });\n return videoPlayerContainer;\n};\n\n/**\n *\n * @param {String} playerId unique id for the video player's container\n * @param {JSON} payload api-related json configuration object\n * @param {String} apiBase base url for the api calls. default is prod api\n * @param {(status: String, data: Object) => Void} recordEventsCallback callback to the outside world to notify upload status\n * @param {{src: String, type: String}} source src properties to be plugged into the player, ex. {src: 'url', type: 'application/x-mpegURL' }\n * @param {'x-ul-video-recorder-origin': 'dashboard' | 'sdk'} headers request headers for error logging (potentially contains additional headers)\n * @param {boolean} isAudioStream true if media type for the playback is audio only default false\n * @returns html element for the video player container\n */\nexport const videoRecorderPlayer = (\n playerId,\n payload = {},\n apiBase = 'https://api.userleap.com',\n recordEventsCallback,\n source,\n headers,\n isAudioStream = false,\n videoPlayerDocument = document\n) => {\n videoPlayerStates.document = videoPlayerDocument;\n const videoId = playerId + VIDEO_RECORDER_POSTFIX;\n const videoPlayerContainer = createVideoPlayerContainer(videoId);\n\n // Add event listener before loading third party scripts in to log any CSP violations\n videoPlayerStates.document.addEventListener('securitypolicyviolation', (e) => {\n reportError(\n new Error(`Voice & Video feature violates ${e.violatedDirective} web page CSP policies for the recorder player.`),\n 'recorderDeviceError',\n apiBase,\n headers,\n payload.visitorId,\n payload.envId\n );\n });\n\n loadPlayerScripts(videoPlayerScripts.concat(recorderScripts), () => {\n createVideoPlayerComponents(videoId, videoPlayerContainer);\n videoPlayerStates.document.getElementById(getSpinnerId(videoId)).remove();\n\n try {\n prepareRecorder(\n videoPlayerContainer,\n videoId,\n payload,\n apiBase,\n recordEventsCallback,\n source,\n headers,\n isAudioStream\n );\n } catch (e) {\n reportError(\n new Error(`Error when creating video recorder player object ${e}`),\n 'recorderDeviceError',\n apiBase,\n headers,\n payload.visitorId,\n payload.envId\n );\n return;\n }\n });\n return videoPlayerContainer;\n};\n\n/**\n *\n * @param {String} containerId unique id for the video player's container\n * @param {JSON} payload api-related json configuration object\n * @param {{src: String, type: String}} source src properties for the player\n * @param {String} apiBase base url for the api calls default is prod api\n * @param {(status: String, data: Object) => Void} recordEventsCallback callback to the outside world to notify upload status\n * @param {'x-ul-video-recorder-origin': 'dashboard' | 'sdk'} headers request headers for error logging (potentially contains additional headers)\n * @param {boolean} isAudioStream true if media type for the playback is audio only default false\n * @returns html element for the combo container\n */\nexport const videoPlayerRecorderCombo = (\n containerId,\n payload = {},\n source,\n apiBase = 'https://api.userleap.com',\n recordEventsCallback,\n headers,\n isAudioStream = false\n) => {\n const videoPlayerId = containerId + VIDEO_PLAYER_POSTFIX;\n const videoRecorderId = containerId + VIDEO_RECORDER_POSTFIX;\n const comboContainer = videoPlayerStates.document.createElement('div');\n const videoPlayerContainer = createVideoPlayerContainer(videoPlayerId);\n const recorderContainer = createVideoPlayerContainer(videoRecorderId);\n comboContainer.appendChild(videoPlayerContainer);\n comboContainer.appendChild(recorderContainer);\n\n loadPlayerScripts(videoPlayerScripts.concat(recorderScripts), (e) => {\n videoPlayerStates.document.getElementById(getSpinnerId(videoPlayerId)).remove();\n videoPlayerStates.document.getElementById(getSpinnerId(videoRecorderId)).remove();\n createVideoPlayerComponents(videoPlayerId, videoPlayerContainer);\n createVideoPlayerComponents(videoRecorderId, recorderContainer);\n\n const player = videoPlayerStates.videojs(videoPlayerId, { playsinline: true, playbackRates: [0.5, 1, 1.5, 2] });\n\n prepareVideoPlayer(\n player,\n makeButtonsPanel(player, ['PlaybackRateMenuButton', 'PlayToggle', 'FullscreenToggle']),\n source,\n false,\n isAudioStream\n );\n prepareRecorder(recorderContainer, videoRecorderId, payload, apiBase, recordEventsCallback, false, headers);\n });\n return comboContainer;\n};\n\n/**\n * @param {String} containerId player id to be destroyed, this will remove all the video player and recorder instances on the page with the id\n * @returns\n */\nexport const destroyPlayer = (containerId) => {\n const videoPlayerId = containerId + VIDEO_PLAYER_POSTFIX;\n const videoRecorderId = containerId + VIDEO_RECORDER_POSTFIX;\n if (!videoPlayerStates.videojs) return;\n\n try {\n stopRecording(containerId);\n videoPlayerStates.document.getElementById(containerId) && videoPlayerStates.videojs(containerId).dispose();\n videoPlayerStates.document.getElementById(videoPlayerId) && videoPlayerStates.videojs(videoPlayerId).dispose();\n videoPlayerStates.document.getElementById(videoRecorderId) && videoPlayerStates.videojs(videoRecorderId).dispose();\n } catch (e) {\n // fail silently\n console.warn(`Unable to destroy player: ${e}`);\n return;\n }\n};\n\n/**\n *\n * @param {string} containerId container id supplied previously to create the video componenet\n * @returns\n */\nexport const stopRecording = (containerId) => {\n const videoRecorderId = containerId + VIDEO_RECORDER_POSTFIX;\n if (!videoPlayerStates.document.getElementById(videoRecorderId)) return;\n\n if (!videoPlayerStates.videojs) return;\n try {\n if (!videoPlayerStates.videojs(videoRecorderId).record().stream) return; // trying to stop a non existent stream will crash\n } catch (e) {\n return;\n }\n videoPlayerStates.videojs(videoRecorderId).record().stop();\n videoPlayerStates.videojs(videoRecorderId).record().stopDevice();\n};\n\n/**\n *\n * @param {string} containerId the container id\n * @param {url string} srcUrl the url string of the source\n * @param {boolean} isAudioStream true if media type for the playback is audio only default false\n */\nexport const resetPlayerSource = (containerId, srcUrl, isAudioStream, isSecondary = null) => {\n const playerId = `${containerId}${isSecondary ? SECONDARY_VIDEO_PLAYER_POSTFIX : VIDEO_PLAYER_POSTFIX}`;\n\n try {\n const player = getVideoPlayerObject(playerId);\n if (!player) return;\n !player.paused() && player.pause();\n player.src({ src: srcUrl, type: 'application/x-mpegURL' });\n player.currentTime(0);\n !isSecondary && toggleAudioPlaceholder(player, isAudioStream); // only main player has audio placeholder\n const thumbnail = getPosterThumbnail(srcUrl);\n if (!isAudioStream && srcUrl) {\n if (thumbnail) player.poster(thumbnail);\n else toggleAudioPlaceholder(player, true); // toggle audio placeholder if poster doesn't exist;\n }\n\n // have to reset play action again in here since reset player does not update isAudioStream variable\n player.on('play', () => {\n // hide audio placeholder in case it was toggled earlier when poster didn't exist\n if (!isAudioStream && srcUrl && !thumbnail) {\n toggleAudioPlaceholder(player, false);\n }\n });\n\n if (isSecondary && srcUrl) player.removeClass(HIDDEN_CLASS);\n else if (isSecondary && !srcUrl) player.addClass(HIDDEN_CLASS);\n } catch (e) {\n console.warn(`Unable to reset player: ${e}`);\n return;\n }\n};\n\nexport const pauseQuestionPlayer = (playerId) => {\n const player = getVideoPlayerObject(playerId + VIDEO_PLAYER_POSTFIX);\n player?.pause();\n};\n\n/**\n *\n * @param {string} containerId the player recorder's container id\n * @param {*} videoUrl url for the new video to play\n */\nexport const refreshPlayerRecorderCombo = (containerId, videoUrl, payload, isAudioStream) => {\n const player = getVideoPlayerObject(containerId + VIDEO_PLAYER_POSTFIX);\n const recorder = getVideoPlayerObject(containerId + VIDEO_RECORDER_POSTFIX);\n\n if (!player || !recorder) return;\n\n resetPlayerSource(containerId, videoUrl, isAudioStream);\n recorder.record().resetState();\n recorder.record().getDevice();\n\n // Reset delete and camera button on control panel for recorder player\n const deleteButton = videoPlayerStates.document.getElementsByClassName('ul-video-recorder-delete-button')[0];\n deleteButton.classList.add(HIDDEN_CLASS);\n\n // after refreshing devices we need to turn off camera again if the camera was previously turned off\n if (recorder.cameraOff) {\n const cameraAudioButton = videoPlayerStates.document.getElementsByClassName(\n 'ul-video-recorder-camera-off-button-audio-only'\n )[0];\n cameraAudioButton.classList.remove(HIDDEN_CLASS);\n\n window.navigator.mediaDevices\n .getUserMedia({ video: true, audio: true })\n .then((stream) => {\n recorder.record().onDeviceReady(stream);\n stream.getVideoTracks().forEach((stream) => {\n stream.stop();\n });\n })\n .catch(recorder.record().onDeviceError.bind(recorder.record()));\n } else {\n const cameraButton = videoPlayerStates.document.getElementsByClassName('ul-video-recorder-camera-off-button')[0];\n cameraButton.classList.remove(HIDDEN_CLASS);\n }\n recorder.payload = payload;\n setUploadProgress(recorder.uploadProgressLabel, 'none');\n currentPlayerSession = Date.now();\n};\n\nconst getPosterThumbnail = (source) => {\n if (!source) return null;\n const findMuxId = source.match(/https:\\/\\/stream.mux.com\\/(.*)/); // Match returns an array, not the exact matched string\n let muxId = findMuxId ? findMuxId[1] : null;\n if (muxId.includes(MUX_VIDEO_EXTENSION)) muxId = muxId.replace(MUX_VIDEO_EXTENSION, '');\n return muxId ? `https://image.mux.com/${muxId}/thumbnail.jpg?time=0` : null;\n};\n\n/**\n * Constants for recorder callback events and data\n */\nexport const RECORDER = {\n // events\n UPLOAD_STARTED: 'upload.started',\n UPLOAD_PROGRESS: 'upload.progress',\n UPLOAD_FINISHED: 'upload.finished',\n DELETE: 'delete',\n ERROR: 'error',\n MEDIA_TYPE: 'media.type',\n // error types\n PERMISSION_DENIED: 'permission_denied',\n OTHER: 'other',\n //data\n UPLOAD_ID: 'upload.id',\n UPLOAD_PROGRESS_PCT: 'upload.progress.pct',\n MEDIA_RECORDING_UID: 'media.recording.uid',\n MEDIA_TYPE_VIDEO: 'video',\n MEDIA_TYPE_AUDIO: 'audio',\n};\n\nconst BUTTON_NAME_TITLE = {\n PlaybackRateMenuButton: 'Speed',\n PlayToggle: 'Play',\n FullscreenToggle: 'Expand',\n TurnOnCamera: 'Turn on',\n TurnOffCamera: 'Turn off',\n DeleteButton: 'Delete',\n RecordButton: 'Record',\n StopButton: 'Stop',\n PauseButton: 'Pause',\n};\n","import {\n RECORDER,\n stopRecording,\n videoRecorderPlayer,\n videoPlayer,\n pauseQuestionPlayer,\n // @ts-expect-error - TODO: remake video player in typescript and add types\n} from \"@userleap/video-player-recorder/videoPlayer\";\nimport clsx from \"clsx\";\nimport { useState } from \"preact/hooks\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { CssConstant } from \"../../constants/css\";\nimport { getPlatformClass } from \"../../helpers/general\";\nimport { VideoVoiceCard as VideoVoiceCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { Header, MobileEmbedView } from \"../components\";\nimport { getButtonText, getSkipButtonText } from \"../helpers/card\";\nimport { BaseCardProps } from \"./types\";\n\nconst PLAYER_RECORDER_ELEMENT_ID = \"ul-card-video__player_recorder\";\nconst SUBMIT_BUTTON_ID = \"ul-card-video__submit_button\";\nconst SKIP_BUTTON_ID = \"ul-card-video__skip_button\";\nconst FORM_ID = \"ul-video-interview-form\";\nconst QUESTION_RESPONSE_BTNS = \"ul-video-btn\";\n\ntype Props = VideoVoiceCardType[\"props\"] & BaseCardProps;\n\nenum View {\n Question,\n Answer,\n}\n\nconst VideoVoiceCard = ({\n className,\n message,\n next,\n properties,\n questionId,\n type,\n}: Props) => {\n const {\n apiURL,\n border,\n envId,\n handleClickEmbedButton,\n handleUploadUpdate,\n hasViewedEmbed,\n headers,\n responseGroupUid,\n surveyId,\n useDesktopPrototype,\n viewDocument,\n visitorId,\n } = useConfig((s) => ({\n apiURL: s.apiURL,\n border: s.border,\n envId: s.envId,\n handleClickEmbedButton: s.handleClickEmbedButton,\n handleUploadUpdate: s.handleUploadUpdate,\n hasViewedEmbed: s.hasViewedEmbed,\n headers: s.headers,\n responseGroupUid: s.responseGroupUid,\n surveyId: s.surveyId,\n useDesktopPrototype: s.useDesktopPrototype,\n viewDocument: s.viewDocument,\n visitorId: s.userId,\n }));\n\n const [enableSubmit, setEnableSubmit] = useState(false);\n const [uploadId, setUploadId] = useState<UUID | null>(null);\n const [mediaRecordingUid, setMediaRecordingUid] = useState<UUID | null>(null);\n const [view, setView] = useState(View.Question);\n\n const platform = headers[\"userleap-platform\"];\n const surveyVideoUrl = properties && properties.videoUrl;\n\n const videoRecorderCallback = (\n status: unknown, // TODO: refactor video player to use react\n data: Record<string, never>\n ) => {\n if (status === RECORDER.UPLOAD_STARTED) {\n setUploadId(data[RECORDER.UPLOAD_ID]);\n setMediaRecordingUid(data[RECORDER.MEDIA_RECORDING_UID]);\n\n // Enable submit button and get rid of skip button if present\n setEnableSubmit(true);\n } else if (status === RECORDER.DELETE) {\n setUploadId(null);\n setMediaRecordingUid(null);\n setEnableSubmit(false);\n } else if (status === RECORDER.UPLOAD_PROGRESS) {\n // update uploadProgress state here rather than during UPLOAD_STARTED because UPLOAD_STARTED is invoked\n // when we get the uploadId, before the upload actually starts, and if an error prevents the upload from starting,\n // it's probably better not to show a loading screen forever\n if (isNaN(data[RECORDER.UPLOAD_PROGRESS_PCT])) {\n // apparently, this is possible in an error state, and until we implement an error state it's better not to show a loading screen forever.\n handleUploadUpdate({\n mediaRecordingUid: data[RECORDER.MEDIA_RECORDING_UID],\n isComplete: true,\n });\n } else {\n handleUploadUpdate({\n mediaRecordingUid: data[RECORDER.MEDIA_RECORDING_UID],\n progressPct: data[RECORDER.UPLOAD_PROGRESS_PCT],\n });\n }\n } else if (status === RECORDER.UPLOAD_FINISHED) {\n handleUploadUpdate({\n mediaRecordingUid: data[RECORDER.MEDIA_RECORDING_UID],\n isComplete: true,\n });\n }\n // else if (status === RECORDER.ERROR) // todo show a permission denied screen instead of the recorder at this point\n };\n\n const loadVideoPlayer = (el: HTMLDivElement | null) => {\n if (el && el.children.length === 0) {\n const player = videoPlayer(\n PLAYER_RECORDER_ELEMENT_ID,\n {\n src: surveyVideoUrl,\n type: \"application/x-mpegURL\",\n },\n undefined,\n properties.mediaType === RECORDER.MEDIA_TYPE_AUDIO,\n apiURL,\n viewDocument\n );\n el.appendChild(player);\n }\n };\n\n const loadVideoRecorder = (el: HTMLDivElement | null) => {\n if (el && el.children.length === 0) {\n const recorder = videoRecorderPlayer(\n PLAYER_RECORDER_ELEMENT_ID,\n { surveyId, responseGroupUid, questionId, visitorId, envId },\n apiURL,\n videoRecorderCallback,\n undefined,\n { ...headers, \"x-ul-video-recorder-origin\": \"sdk\" },\n properties.mediaType === RECORDER.MEDIA_TYPE_AUDIO,\n viewDocument\n );\n el.appendChild(recorder);\n }\n };\n\n const handleSubmit = (\n e: JSXInternal.TargetedMouseEvent<HTMLButtonElement>\n ) => {\n e.preventDefault();\n e.stopPropagation();\n stopRecording(PLAYER_RECORDER_ELEMENT_ID);\n\n if (uploadId && mediaRecordingUid) {\n // user submitted a valid video, which will be stored on the response via webhook\n handleUploadUpdate({\n mediaRecordingUid,\n isSubmitted: true,\n });\n next({\n value: { mediaRecordingUid },\n questionId,\n type,\n });\n } else {\n // user never recorded a video, or recorded it but then deleted it before continuing\n next({ value: null, questionId, type });\n }\n };\n\n const renderResponseButton = () => (\n <MobileEmbedView\n defaultBody={() => (\n <button\n className={`${QUESTION_RESPONSE_BTNS} ul-record-response-btn`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n pauseQuestionPlayer(PLAYER_RECORDER_ELEMENT_ID);\n setView(View.Answer);\n }}\n />\n )}\n handleClickEmbedButton={handleClickEmbedButton}\n hasViewedEmbed={hasViewedEmbed}\n platform={platform}\n properties={properties}\n useDesktopPrototype={useDesktopPrototype}\n />\n );\n\n return (\n <div\n className={clsx(getPlatformClass(CssConstant.CardMainContent, platform))}\n style={{ marginTop: \"unset\" }}\n >\n <form\n className={clsx([\n className,\n CssConstant.VideoCard,\n CssConstant.FadeInTransition,\n ])}\n id={FORM_ID}\n >\n <Header message={message} properties={properties} />\n <div id=\"ul-card-voice__video\">\n {/* Video Container */}\n <div>\n {/* Question Player */}\n <div\n id=\"ul-question-player-container\"\n style={{\n display: view === View.Question ? \"\" : \"none\",\n }}\n >\n <div id={PLAYER_RECORDER_ELEMENT_ID} ref={loadVideoPlayer} />\n {renderResponseButton()}\n </div>\n\n {/* Response Player */}\n <div\n style={{\n display: view === View.Answer ? \"block\" : \"none\",\n }}\n >\n <button\n className={`${QUESTION_RESPONSE_BTNS} ul-back-question-btn`}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setView(View.Question);\n }}\n />\n <div id=\"ul-recorder-player-container\" ref={loadVideoRecorder} />\n </div>\n </div>\n\n <button\n className={`ul-card-text__button ${clsx(\n !enableSubmit && CssConstant.SubmitButtonDisabled\n )}`}\n disabled={!enableSubmit}\n id={SUBMIT_BUTTON_ID}\n onClick={handleSubmit}\n role=\"button\"\n style={{\n display: properties.required === true ? \"block\" : \"none\",\n ...(enableSubmit\n ? {\n backgroundColor: border,\n display: \"block\",\n }\n : {}),\n }}\n >\n {getButtonText(properties)}\n </button>\n <button\n className={`ul-card-text__button ${CssConstant.InactiveButton}`}\n id={SKIP_BUTTON_ID}\n onClick={handleSubmit}\n role=\"button\"\n style={{\n display: !properties.required ? \"block\" : \"none\",\n ...(enableSubmit ? { display: \"none\" } : {}),\n }}\n >\n {getSkipButtonText(properties)}\n </button>\n </div>\n </form>\n </div>\n );\n};\n\nexport default VideoVoiceCard;\n","import clsx from \"clsx\";\n\nimport { CssConstant } from \"../../constants/css\";\nimport { getPlatformClass } from \"../../helpers/general\";\nimport { UploadingCard as UploadingCardType } from \"../../types/card\";\nimport { useConfig } from \"../../view/store\";\nimport { BaseCardProps } from \"./types\";\n\ntype Props = UploadingCardType[\"props\"] & BaseCardProps;\n\nconst UploadingCard = ({ className }: Props) => {\n const { headers, uploadProgress } = useConfig((s) => ({\n headers: s.headers,\n uploadProgress: s.uploadProgress,\n }));\n\n let headline;\n let caption;\n if (Object.values(uploadProgress).filter((v) => v.isSubmitted).length > 1) {\n headline = \"Your responses are processing\";\n caption =\n \"Please keep this tab open until your responses are fully processed.\";\n } else {\n headline = \"Your response is processing\";\n caption =\n \"Please keep this tab open until your response is fully processed.\";\n }\n\n // use the lowest value of any upload (rather than, say, the average), otherwise it might start too close to 100, this way it'll go up more quickly.\n // cap this at 99, because there's a time between the \"100%\" upload progress notification and the upload success notification. Better to encourage them\n // to keep the tab open until we get the upload success notification\n const uploadProgressPct = Math.round(\n Math.min(\n 99,\n ...Object.values(uploadProgress)\n .filter((v) => v.isSubmitted)\n .map((v) => v.progressPct)\n )\n );\n\n return (\n <div\n className={clsx(\n getPlatformClass(\n CssConstant.CardMainContent,\n headers[\"userleap-platform\"]\n )\n )}\n >\n <div\n className={clsx([\n className,\n \"ul-card--uploading\",\n CssConstant.FadeInTransition,\n ])}\n >\n <div\n aria-busy=\"true\"\n aria-label=\"Processing...\"\n aria-live=\"polite\"\n className={CssConstant.LoadingSpinnerContainer}\n >\n <div className={CssConstant.LoadingSpinner}>\n <div className={CssConstant.LoadingSpinnerFirst}></div>\n <div className={CssConstant.LoadingSpinnerSecond}></div>\n <div className={CssConstant.LoadingSpinnerThird}></div>\n <div className={CssConstant.LoadingSpinnerFourth}></div>\n </div>\n </div>\n <p\n className={CssConstant.QuestionHeader}\n id={CssConstant.QuestionHeader}\n >\n {`${headline} (${uploadProgressPct}% complete)`}\n </p>\n <p className={CssConstant.Caption}>{caption}</p>\n </div>\n </div>\n );\n};\n\nexport default UploadingCard;\n","/**\n * UserLeap logo component\n */\nconst Logo = () => (\n <svg\n alt=\"Powered by Sprig\"\n fill=\"none\"\n height=\"13\"\n viewBox=\"0 0 100 13\"\n width=\"100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3.0369 0.839981H0.0249023V8.99998H1.3209V6.53998H2.8569C4.8969 6.53998 6.2409 5.37598 6.2409 3.62398C6.2409 1.95598 4.9689 0.839981 3.0369 0.839981ZM3.0009 5.35198H1.3209V2.02798H3.0009C4.1769 2.02798 4.9689 2.67598 4.9689 3.62398C4.9689 4.65598 4.1769 5.35198 3.0009 5.35198Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M9.90653 3.21598C8.15453 3.21598 6.90653 4.45198 6.90653 6.17998C6.90653 7.90798 8.15453 9.14398 9.90653 9.14398C11.6585 9.14398 12.9065 7.90798 12.9065 6.17998C12.9065 4.45198 11.6585 3.21598 9.90653 3.21598ZM9.90653 8.01598C8.88653 8.01598 8.15453 7.23598 8.15453 6.17998C8.15453 5.11198 8.88653 4.34398 9.90653 4.34398C10.9265 4.34398 11.6585 5.11198 11.6585 6.17998C11.6585 7.23598 10.9265 8.01598 9.90653 8.01598Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M20.9631 3.35998L19.7391 7.11598L18.3951 3.35998H17.3271L15.9831 7.12798L14.7591 3.35998H13.4151L15.4431 8.99998H16.5351L17.8671 5.08798L19.1871 8.99998H20.2791L22.3071 3.35998H20.9631Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M25.7246 3.21598C24.0086 3.21598 22.8206 4.51198 22.8206 6.17998C22.8206 7.85998 24.0206 9.14398 25.7966 9.14398C27.0206 9.14398 28.0166 8.54398 28.3766 7.52398H27.0086C26.7806 7.88398 26.3606 8.05198 25.8086 8.05198C24.7526 8.05198 24.2126 7.40398 24.0926 6.55198H28.5206C28.7606 4.64398 27.5966 3.21598 25.7246 3.21598ZM25.7366 4.27198C26.6126 4.27198 27.2126 4.76398 27.2846 5.68798H24.1166C24.2606 4.89598 24.8006 4.27198 25.7366 4.27198Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M31.1297 4.12798V3.35998H29.8817V8.99998H31.1297V5.44798C31.6337 4.78798 32.3177 4.45198 33.2177 4.41598V3.23998C32.3537 3.23998 31.6457 3.56398 31.1297 4.12798Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M36.8222 3.21598C35.1062 3.21598 33.9182 4.51198 33.9182 6.17998C33.9182 7.85998 35.1182 9.14398 36.8942 9.14398C38.1182 9.14398 39.1142 8.54398 39.4742 7.52398H38.1062C37.8782 7.88398 37.4582 8.05198 36.9062 8.05198C35.8502 8.05198 35.3102 7.40398 35.1902 6.55198H39.6182C39.8582 4.64398 38.6942 3.21598 36.8222 3.21598ZM36.8342 4.27198C37.7102 4.27198 38.3102 4.76398 38.3822 5.68798H35.2142C35.3582 4.89598 35.8982 4.27198 36.8342 4.27198Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M45.4886 0.47998V3.80398C45.0086 3.43198 44.3966 3.21598 43.6766 3.21598C42.0926 3.21598 40.8206 4.53598 40.8206 6.16798C40.8206 7.82398 42.0926 9.14398 43.6766 9.14398C44.3966 9.14398 45.0086 8.92798 45.4886 8.54398V8.99998H46.7246V0.47998H45.4886ZM43.8566 8.01598C42.8246 8.01598 42.0686 7.17598 42.0686 6.16798C42.0686 5.17198 42.8246 4.34398 43.8566 4.34398C44.4806 4.34398 45.0686 4.55998 45.4886 5.15998V7.18798C45.0686 7.79998 44.4806 8.01598 43.8566 8.01598Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M54.6797 3.21598C53.9597 3.21598 53.3477 3.43198 52.8797 3.79198V0.47998H51.6317V8.99998H52.8797V8.55598C53.3477 8.92798 53.9597 9.14398 54.6797 9.14398C56.2637 9.14398 57.5477 7.82398 57.5477 6.16798C57.5477 4.53598 56.2637 3.21598 54.6797 3.21598ZM54.4997 8.01598C53.8757 8.01598 53.2997 7.79998 52.8797 7.21198V5.13598C53.2997 4.54798 53.8757 4.34398 54.4997 4.34398C55.5437 4.34398 56.2997 5.17198 56.2997 6.16798C56.2997 7.17598 55.5437 8.01598 54.4997 8.01598Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M63.3347 3.34798L61.3907 7.76398L59.2667 3.34798H57.9347L60.8147 9.08398L59.6267 11.784H60.9347L64.6547 3.34798H63.3347Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M71.1466 4.34661C69.8092 4.05038 69.131 3.53001 69.131 2.80065C69.131 2.04705 69.8546 1.47822 70.8142 1.47822C71.8034 1.47822 72.5496 2.10339 72.5496 2.9321V2.99813H73.9165V2.9321C73.9165 1.41764 72.5883 0.272705 70.8271 0.272705C69.9784 0.272705 69.2009 0.533191 68.6379 1.0057C68.3584 1.23619 68.1339 1.52487 67.9805 1.8511C67.8271 2.17733 67.7486 2.53303 67.7506 2.89273C67.7451 3.22255 67.8137 3.54949 67.9515 3.84994C68.0894 4.15038 68.293 4.41686 68.5478 4.63012C69.0218 5.04266 69.6945 5.34798 70.5463 5.5388C71.9806 5.85502 72.7078 6.39296 72.7078 7.13686C72.7078 7.94316 71.9156 8.55076 70.8682 8.55076C69.7804 8.55076 68.9599 7.87531 68.9599 6.97996V6.91393H67.5918V6.97996C67.5918 8.56348 68.9942 9.75688 70.8535 9.75688C71.7426 9.75688 72.5588 9.48731 73.1518 8.99662C73.446 8.75831 73.6827 8.4581 73.8445 8.1179C74.0063 7.7777 74.0891 7.40611 74.087 7.03024C74.087 5.6854 73.0991 4.78217 71.1466 4.34661Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M78.7986 2.50806C78.2874 2.50175 77.7823 2.6176 77.3263 2.84576C76.8703 3.07391 76.4768 3.40759 76.1795 3.81837V2.66738H74.8789V12.0752H76.1795V8.48716C76.4768 8.8979 76.8703 9.23152 77.3263 9.45957C77.7824 9.68763 78.2875 9.80335 78.7986 9.79687C80.8167 9.79687 82.3381 8.23031 82.3381 6.15246C82.3381 4.07462 80.8167 2.50806 78.7986 2.50806ZM80.9835 6.42264C80.9316 6.9629 80.6921 7.46879 80.3056 7.8544C79.919 8.24001 79.4093 8.48156 78.863 8.53804C78.1369 8.61074 77.4605 8.40295 76.9583 7.95407C76.4561 7.50518 76.1795 6.86365 76.1795 6.15246C76.1795 4.7846 77.2122 3.75295 78.5815 3.75295C79.2904 3.75295 79.9306 4.02191 80.3776 4.51018C80.8387 5.01116 81.054 5.69025 80.9835 6.42264Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M98.2908 2.6692V3.80747C97.6776 2.97875 96.7302 2.50806 95.6583 2.50806C93.6482 2.50806 92.1323 4.04615 92.1323 6.08582C92.1323 8.1255 93.6482 9.66299 95.6583 9.66299C96.7345 9.66299 97.6819 9.19714 98.2908 8.37691V8.55198C98.2908 9.96891 97.3906 10.8843 95.9974 10.8843C95.0561 10.8843 94.2718 10.4766 93.8996 9.79384L93.8806 9.7587H92.5389L92.5695 9.84654C92.7961 10.514 93.2392 11.0889 93.8303 11.4822C94.4233 11.8723 95.1726 12.0783 95.9974 12.0783C97.0552 12.0783 97.9554 11.7451 98.6017 11.1157C99.2481 10.4862 99.5915 9.6012 99.5915 8.56773V2.6692H98.2908ZM97.5611 7.842C97.0092 8.36418 96.2225 8.58348 95.4001 8.44294C94.9132 8.35796 94.4664 8.12184 94.1245 7.76889C93.7827 7.41593 93.5636 6.96452 93.4992 6.48019C93.3833 5.66541 93.631 4.89364 94.1786 4.36418C94.6383 3.92741 95.2542 3.68788 95.8919 3.69782C96.0464 3.69795 96.2006 3.71031 96.3531 3.73477C97.3459 3.89349 98.1314 4.70403 98.2632 5.71024C98.3749 6.53835 98.1179 7.31436 97.5611 7.842Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M90.705 0.0995975C90.4602 0.046773 90.2043 0.0911971 89.9925 0.223269C89.7806 0.35534 89.6299 0.564452 89.5729 0.805409C89.5159 1.04637 89.5571 1.29982 89.6877 1.51098C89.8183 1.72215 90.0277 1.87407 90.2708 1.93391C90.3415 1.94954 90.4136 1.95747 90.486 1.95754C90.72 1.9579 90.9458 1.87325 91.1206 1.71973C91.2955 1.5662 91.407 1.35452 91.4341 1.125C91.4611 0.89547 91.4017 0.664135 91.2673 0.475046C91.1329 0.285958 90.9327 0.152325 90.705 0.0995975V0.0995975Z\"\n fill=\"#5D696F\"\n />\n <path\n d=\"M89.8366 8.39143H88.715C87.9178 8.39143 87.4389 7.85531 87.4389 6.95693C87.4389 6.08096 87.8681 5.03659 88.7432 3.76444L88.7548 3.74748V3.38825L85.0271 2.86727C85.0284 2.71553 84.9886 2.56622 84.9118 2.43478C84.8351 2.30335 84.7241 2.19458 84.5905 2.11973C84.2563 1.938 83.8908 1.938 83.5879 2.11368C83.4361 2.2023 83.3122 2.33077 83.23 2.4848C83.1477 2.63884 83.1103 2.8124 83.1219 2.98618C83.1336 3.15996 83.1938 3.32714 83.2958 3.46914C83.3979 3.61114 83.5379 3.72238 83.7001 3.79049L82.5405 9.63753H83.8283L84.8977 4.08551L86.9115 4.42111C86.3701 5.38007 86.0953 6.27421 86.0953 7.07869C86.0953 8.56347 87.0041 9.53576 88.4734 9.62965V9.63753H91.1341V2.69099H89.8366V8.39143Z\"\n fill=\"#5D696F\"\n />\n </svg>\n);\n\nexport default Logo;\n","import { useEffect, useRef } from \"preact/hooks\";\n\nimport { CardType } from \"../types/card\";\nimport { getMaxRemainingCards } from \"./helpers/skipLogicHelpers\";\nimport Logo from \"./logo\";\nimport { useConfig } from \"./store\";\n\nconst Footer = () => {\n const {\n border,\n cards,\n headers,\n index,\n marketingUrl,\n showSurveyBrand,\n slugName,\n surveyId,\n viewedCardCount,\n } = useConfig((s) => ({\n border: s.border,\n cards: s.cards,\n headers: s.headers,\n index: s.index,\n marketingUrl: s.marketingUrl,\n showSurveyBrand: s.showSurveyBrand,\n slugName: s.slugName,\n styleNonce: s.styleNonce,\n surveyId: s.surveyId,\n viewedCardCount: s.viewedCardCount,\n }));\n\n const progressRef = useRef<HTMLDivElement>(null);\n\n const questionSteps = cards.filter(\n (step) => step.type !== CardType.Uploading && step.type !== CardType.Thanks\n );\n const maxRemainingCards = getMaxRemainingCards(cards, index);\n\n // count the current card as viewed so there is not 0 progress for first question.\n // note this increases total denominator by 1\n // ex: if there are 2 questions, it will look 1/3 done for the first question, and 2/3 done for the second.\n const paddedViewedCardCount = viewedCardCount + 1;\n const fractionCompleted =\n paddedViewedCardCount / (paddedViewedCardCount + maxRemainingCards);\n\n useEffect(() => {\n if (progressRef.current) {\n progressRef.current.style.width = `${fractionCompleted * 100}%`;\n }\n }, [fractionCompleted]);\n\n const renderBrandedLogo = () => {\n return showSurveyBrand ? (\n <a\n href={`${marketingUrl}?utm_source=survey_branding&utm_medium=website&utm_campaign=${slugName}&utm_content=${surveyId}`}\n rel=\"noreferrer\"\n style=\"display: block; margin: 5px 0\"\n target=\"_blank\"\n >\n <Logo />\n </a>\n ) : null;\n };\n\n // There's only 1 question in the study, no progress bar\n if (!questionSteps || questionSteps.length === 1) {\n return (\n <footer\n className=\"ul-footer\"\n style={!showSurveyBrand ? { marginBottom: \"10px\" } : {}}\n >\n {renderBrandedLogo()}\n </footer>\n );\n }\n return (\n <footer\n className={`ul-footer ${\n headers[\"userleap-platform\"] === \"link\" ? \"ul-footer__link\" : \"\"\n }`}\n >\n {questionSteps.length > 1 && (\n <div id=\"ul-progress-bar-container\">\n <div\n id=\"ul-progress-bar-current\"\n ref={progressRef}\n style={{\n border: `1px solid ${border ? border : \"#000\"}`,\n }}\n />\n </div>\n )}\n {showSurveyBrand && (\n <a\n href={`${marketingUrl}?utm_source=survey_branding&utm_medium=website&utm_campaign=${slugName}&utm_content=${surveyId}`}\n rel=\"noreferrer\"\n style={{\n display: \"block\",\n margin: \"5px 0\",\n }}\n target=\"_blank\"\n >\n <Logo />\n </a>\n )}\n </footer>\n );\n};\n\nexport default Footer;\n","import clsx from \"clsx\";\nimport { useEffect } from \"preact/compat\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\nimport { APP_ID, CssConstant } from \"../constants/css\";\nimport { resetScrollPosition } from \"../helpers/document\";\nimport { getClasses } from \"../helpers/general\";\nimport { CardType } from \"../types/card\";\nimport { Platform, ResponseData } from \"../types/config\";\nimport {\n ConsentLegalCard,\n LikertCard,\n MultipleChoiceMultipleSelectCard,\n MultipleChoiceSingleSelectCard,\n NPSCard,\n OpenTextCard,\n RecordedTask,\n TextUrlPromptCard,\n ThanksCard,\n UploadingCard,\n VideoVoiceCard,\n} from \"./cards\";\nimport Footer from \"./footer\";\nimport { useConfig } from \"./store\";\n\nconst App = () => {\n const {\n answers,\n border,\n cards,\n close,\n configureExitOnOverlayClick,\n destroy,\n endCard,\n fontFamily,\n headers,\n index,\n next,\n showStripes,\n update,\n useMobileStyling,\n viewDocument,\n } = useConfig((s) => ({\n answers: s.answers,\n border: s.border,\n cards: s.cards,\n close: s.close,\n configureExitOnOverlayClick: s.configureExitOnOverlayClick,\n destroy: s.destroy,\n endCard: s.endCard,\n fontFamily: s.fontFamily,\n headers: s.headers,\n index: s.index,\n next: s.next,\n showStripes: s.showStripes,\n update: s.update,\n useMobileStyling: s.useMobileStyling,\n viewDocument: s.viewDocument,\n }));\n\n const { props, type, name } = cards[index];\n const steps = cards.length;\n\n // resize on question change\n useEffect(() => {\n update(APP_ID);\n }, [index, update]);\n\n useEffect(() => {\n configureExitOnOverlayClick(() => close());\n }, [close, configureExitOnOverlayClick]);\n\n /**\n * Dispatch to frame parent that app is closing\n */\n const closeApp = async () => {\n await close(APP_ID);\n };\n\n /**\n * Close app if user uses enter key\n */\n const onKeyPressCloseApp = (\n e: JSXInternal.TargetedKeyboardEvent<HTMLDivElement>\n ) => {\n if (e.key === \"Enter\") closeApp();\n };\n\n const appStyle = fontFamily\n ? { fontFamily: fontFamily.replace(\";\", \"\") }\n : {};\n\n // nextFunction includes the normal next function with a completeSurvey routine to call when we are at the end of the survey\n const nextFunction = async function (data: ResponseData) {\n next({\n data,\n completeSurvey: () => {\n destroy(APP_ID);\n },\n endCard,\n });\n resetScrollPosition(viewDocument);\n };\n\n // for email surveys, skip to next question\n if (answers) {\n for (const answer of answers) {\n if (answer.questionId === name) {\n let data;\n if (type === CardType.MultipleChoice) {\n const option = props.options.find(\n ({ value }) => value === answer.value\n );\n if (!option) break;\n data = { [option.id]: option.value };\n } else {\n data = answer.value;\n }\n\n nextFunction({ value: data, type, questionId: answer.questionId });\n break;\n }\n }\n }\n\n const showCloseButton = () => {\n // don't show close button when we're directly embedded on link/email studies\n if ([Platform.Email, Platform.Link].includes(headers[\"userleap-platform\"]))\n return false;\n\n // if there's an end card and we're on the last step (the end card), hide the close button, else show it.\n return !endCard || index + 1 !== steps;\n };\n\n const getStudyStyle = () => {\n return useMobileStyling\n ? {\n borderColor: border,\n }\n : {\n borderColor: border,\n margin: \"15px\",\n };\n };\n\n const renderCard = () => {\n const baseProps = {\n className: \"ul-card\",\n next: nextFunction,\n questionId: name,\n type,\n };\n\n switch (type) {\n case CardType.ConsentLegal:\n return <ConsentLegalCard {...baseProps} {...props} key={name} />;\n\n case CardType.Likert:\n return <LikertCard {...baseProps} {...props} key={name} />;\n\n case CardType.MultipleChoice:\n return (\n <MultipleChoiceSingleSelectCard\n {...baseProps}\n {...props}\n key={name}\n />\n );\n\n case CardType.MultipleSelect:\n return (\n <MultipleChoiceMultipleSelectCard\n {...baseProps}\n {...props}\n key={name}\n />\n );\n\n case CardType.NPS:\n return <NPSCard {...baseProps} key={name} props={props} />;\n\n case CardType.Open:\n return <OpenTextCard {...baseProps} {...props} key={name} />;\n\n case CardType.RecordedTask:\n return <RecordedTask {...baseProps} {...props} key={name} />;\n\n case CardType.TextUrlPrompt:\n return <TextUrlPromptCard {...baseProps} {...props} key={name} />;\n\n case CardType.Thanks:\n return <ThanksCard {...baseProps} {...props} key={name} />;\n\n case CardType.Uploading:\n return <UploadingCard {...baseProps} {...props} key={name} />;\n\n case CardType.VideoVoice:\n return <VideoVoiceCard {...baseProps} {...props} key={name} />;\n\n default:\n return null;\n }\n };\n\n return (\n <div className=\"ul-app\" id={APP_ID} style={appStyle}>\n <div className=\"ul-app__container\">\n <div\n className={clsx(\n getClasses(CssConstant.CardContainer, useMobileStyling)\n )}\n style={getStudyStyle()}\n >\n {showStripes && (\n <div className=\"ul-header__container\">\n <div className=\"ul-header\">For development purposes only</div>\n </div>\n )}\n {renderCard()}\n <Footer />\n </div>\n {showCloseButton() && (\n <div\n className={clsx(\n getClasses(CssConstant.CloseContainer, useMobileStyling)\n )}\n >\n <div\n aria-label=\"Close button\"\n className={CssConstant.CloseButton}\n onClick={closeApp}\n onKeyPress={onKeyPressCloseApp}\n role=\"button\"\n tabIndex={0}\n >\n <svg\n fill=\"none\"\n height=\"18px\"\n viewBox=\"0 0 13 13\"\n width=\"18px\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.54964 1.78369L1.78369 2.54964L5.73405 6.5L1.78369 10.4504L2.54964 11.2163L6.5 7.26595L10.4504 11.2163L11.2163 10.4504L7.26595 6.5L11.2163 2.54964L10.4504 1.78369L6.5 5.73405L2.54964 1.78369Z\"\n fill=\"#262136\"\n />\n </svg>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default App;\n","import { render } from \"preact\";\n\nimport { InternalEventName, InternalEventData } from \"../constants/sprigEvents\";\nimport { overrideStyles } from \"../helpers/document\";\nimport eventEmitter from \"../helpers/eventEmitter\";\nimport { shouldDirectEmbed } from \"../helpers/general\";\nimport { AppCard, Card, CardType } from \"../types/card\";\nimport { Config, InstallationMethod } from \"../types/config\";\nimport recorder from \"../view/recorder/recorder\";\nimport App from \"./app\";\nimport { useConfig } from \"./store\";\nimport css from \"./styles/index.css\";\n\nconst addNonQuestionCards = (initialCards: Card[], hasEndCard: boolean) => {\n const cards: AppCard[] = [...initialCards];\n const uploadSet = new Set([CardType.VideoVoice, CardType.RecordedTask]);\n\n if (initialCards.some((card) => uploadSet.has(card.type))) {\n cards.push({\n name: -2,\n props: {\n routingOptions: [],\n },\n type: CardType.Uploading,\n });\n }\n\n if (hasEndCard) {\n cards.push({\n name: -1,\n props: {\n routingOptions: [],\n },\n type: CardType.Thanks,\n });\n }\n\n return cards;\n};\n\nconst getUserMeta = ({\n mode = null,\n viewWindow,\n viewDocument,\n}: {\n mode: Config[\"mode\"] | null;\n viewWindow: Config[\"viewWindow\"];\n viewDocument: Config[\"viewDocument\"];\n}) => {\n const pde = viewDocument.documentElement;\n return {\n mode,\n sw: viewWindow.screen.width,\n sh: viewWindow.screen.height,\n cw: pde.clientWidth,\n ch: pde.clientHeight,\n p: viewWindow.location.href,\n l: viewWindow.navigator.language,\n };\n};\n\nfunction configure(config: Config) {\n const {\n answers,\n apiURL,\n customStyles,\n endCard,\n eventEmitFn,\n fontFamilyURL,\n frame,\n UpChunk,\n viewDocument,\n viewWindow,\n } = config;\n const container = shouldDirectEmbed(config.headers)\n ? config.frame\n : viewDocument.body;\n\n const recorderEventEmitter = eventEmitter;\n\n const updatedCards = addNonQuestionCards(config.cards, !!endCard);\n recorder.configure(recorderEventEmitter, {\n cards: updatedCards,\n hasEndCard: !!endCard,\n apiURL,\n UpChunk,\n });\n\n // load store / context\n useConfig.setState({\n apiURL,\n answers,\n border: config.border,\n index: config.startingQuestionIdx || 0,\n cards: updatedCards,\n configureExitOnOverlayClick: config.configureExitOnOverlayClick,\n customMetadata: config.customMetadata,\n endCard: config.endCard,\n envId: config.envId,\n eventEmitFn,\n fontFamily: config.fontFamily,\n frame,\n headers: config.headers,\n hasViewedEmbed: false,\n isPreview: config.isPreview,\n marketingUrl: \"https://sprig.com\",\n meta: getUserMeta({ mode: config.mode, viewWindow, viewDocument }),\n mode: config.mode,\n recorder,\n recorderEventEmitter,\n responseGroupUid: config.responseGroupUid,\n showStripes: config.showStripes,\n showSurveyBrand: config.showSurveyBrand,\n slugName: config.slugName,\n styleNonce: config.styleNonce,\n surveyId: config.surveyId,\n tabTitle: config.tabTitle,\n uploadingCardViewed: false,\n uploadProgress: {},\n useMobileStyling: config.useMobileStyling,\n useDesktopPrototype: config.useDesktopPrototype,\n userId: config.userId,\n viewDocument: config.viewDocument,\n visitorAttributes: config.visitorAttributes,\n });\n\n // Inject stylesheet\n const { head } = viewDocument;\n const styleEl = viewDocument.createElement(\"style\");\n styleEl.textContent = css;\n head.appendChild(styleEl);\n\n // Inject brand fonts\n if (config.fontFamily && fontFamilyURL && parent) {\n // parent comes from the DOM\n const links = viewDocument.createElement(\"link\");\n links.rel = \"stylesheet\";\n links.href = fontFamilyURL;\n head.appendChild(links);\n }\n\n // I imagine you already have unsafe-inline turned on for style-src in CSP\n config.customStyles && overrideStyles(viewDocument, customStyles);\n\n if (!UpChunk) {\n if (config.installationMethod !== InstallationMethod.Npm) {\n const hostedUpChunk = viewDocument.createElement(\"script\");\n hostedUpChunk.src =\n \"https://cdn.sprig.com/userleap-web-upchunk-v2.2.2.js\";\n hostedUpChunk.onload = () => {\n recorder.setUpChunk(viewWindow.UpChunk);\n };\n hostedUpChunk.onerror = () => {\n console.warn(\n \"[Sprig] - recording functionality not configured due to UpChunk library load failure\"\n );\n };\n head.appendChild(hostedUpChunk);\n } else {\n console.warn(\n \"[Sprig] - recording functionality not configured due to missing UpChunk dependency\"\n );\n }\n }\n\n const viewSdkVersion = __SDK_VERSION__;\n const backwardCompatibleEventEmitterFn =\n eventEmitFn || frame.eventEmitter?.emit;\n backwardCompatibleEventEmitterFn?.(InternalEventName.VerifyViewVersion, {\n [InternalEventData.ViewVersion]: viewSdkVersion,\n });\n\n if (container) render(<App />, container);\n}\n\nexport default { configure };\n","import { CSSProperties } from \"preact/compat\";\n\nimport { SprigEvent } from \"../constants/sprigEvents\";\nimport eventEmitter from \"../helpers/eventEmitter\";\nimport { Config, FramePosition, ProductConfig } from \"../types/config\";\n\nif (window.UserLeap && window.Sprig) {\n if (window.Sprig._gtm) {\n // if sdk installation snippet references UserLeap, but Google Tag Manager (GTM) references Sprig,\n // overwrite Sprig by assigning it the value of UserLeap to make sure Sprig receives the full functionality without losing any configuration\n window.Sprig = window.UserLeap;\n } else {\n // if sdk installation snippet references Sprig, but Google Tag Manager (GTM) references UserLeap,\n // overwrite UserLeap by assigning it the value of Sprig to make sure Sprig receives the full functionality without losing any configuration\n window.UserLeap = window.Sprig;\n }\n}\n// for an all-new GTM or snippet-based installation referencing Sprig,\n// assign Sprig to UserLeap so that when functionality is defined on UserLeap, it's accessible on Sprig.\nif (!window.UserLeap) window.UserLeap = window.Sprig;\n// for a legacy GTM or snippet-based installation referencing UserLeap,\n// assign UserLeap to Sprig so that the functionality is accessible on Sprig, too.\nif (!window.Sprig) window.Sprig = window.UserLeap;\n\nconst LIGHT_OVERLAY_BACKGROUND_COLOR = \"rgba(255,255,255, 0.95)\";\nconst DARK_OVERLAY_BACKGROUND_COLOR = \"rgba(0,0,0,0.9)\";\nconst WIDTH = \"360px\";\nconst MARGIN = \"0px\";\n\nexport const createContainer = () => {\n // Create home container\n window.UserLeap.container = document.createElement(\"div\");\n window.UserLeap.container.className = \"ul-container\";\n document.body.appendChild(window.UserLeap.container);\n};\n\nexport const removeContainer = (initiator?: unknown) => {\n const container = window.UserLeap.container;\n if (!container) return;\n try {\n document.body.removeChild(container);\n window.UserLeap.container = null;\n\n eventEmitter.emit(SprigEvent.SurveyLifeCycle, { state: \"dismissed\" });\n eventEmitter.emit(SprigEvent.SurveyClosed, {\n name: SprigEvent.SurveyClosed,\n initiator,\n });\n } catch (err) {\n console.warn(\n `[Sprig] (ERR-412) Error removing UserLeap container by ${initiator} ` +\n container\n );\n if (err instanceof Error)\n window.UserLeap.reportError(\"dismissActiveSurvey\", err);\n }\n};\n\nexport const removeContainerOnClose = () => {\n eventEmitter.on(SprigEvent.SurveyWillClose, ({ initiator }) => {\n removeContainer(initiator);\n });\n};\n\nconst configureOverlayContainer = (\n styleConfig: WindowSprig,\n useMobileStyling: boolean\n) => {\n const defaultContainerStyle: CSSProperties = {\n position: \"fixed\",\n overflow: \"auto\",\n top: \"0px\",\n left: \"0px\",\n display: \"none\", // overwritten after view is loaded, to prevent blocking website until we can display the survey.\n height: \"100%\",\n width: \"100%\",\n transition: \"background-color 0.3s ease-out\",\n zIndex: 2147483646,\n };\n\n const containerStyle = { ...defaultContainerStyle };\n const overlayStyleConfig = useMobileStyling\n ? styleConfig.overlayStyleMobile\n : styleConfig.overlayStyle;\n\n containerStyle[\"background-color\"] =\n overlayStyleConfig === \"light\"\n ? LIGHT_OVERLAY_BACKGROUND_COLOR\n : DARK_OVERLAY_BACKGROUND_COLOR;\n\n if (!useMobileStyling) containerStyle.margin = \"auto\";\n if (window.UserLeap.container)\n Object.assign(window.UserLeap.container.style, containerStyle);\n};\n\nconst configureFrame = (\n iframe: HTMLIFrameElement,\n productConfig: ProductConfig,\n useMobileStyling: boolean\n) => {\n const defaultFrameStyle: CSSProperties = {\n position: \"fixed\",\n bottom: \"0px\",\n right: MARGIN,\n border: 0,\n backgroundColor: \"rgba(0,0,0,0)\",\n zIndex: 2147483646,\n };\n\n const styleConfig = Object.assign({}, productConfig, window.UserLeap);\n\n let framePositionStyle;\n let hasOverlay = false;\n\n if (useMobileStyling) {\n if (window.UserLeap.windowDimensions?.width) {\n defaultFrameStyle.width = `${window.UserLeap.windowDimensions.width}px`;\n } else {\n defaultFrameStyle.width = \"100%\";\n }\n\n if (window.UserLeap.windowDimensions?.height) {\n defaultFrameStyle.maxHeight = `${\n window.UserLeap.windowDimensions.height - 20\n }px`;\n } else if (window.UserLeap.maxHeight) {\n defaultFrameStyle.maxHeight = window.UserLeap.maxHeight;\n } else {\n defaultFrameStyle.maxHeight = `${document.body.clientHeight - 20}px`;\n }\n\n if ([\"light\", \"dark\"].includes(styleConfig.overlayStyleMobile)) {\n hasOverlay = true;\n }\n } else {\n defaultFrameStyle.width = WIDTH;\n defaultFrameStyle.maxHeight = window.UserLeap.maxHeight || \"66vh\";\n if (styleConfig.framePosition === FramePosition.BottomLeft) {\n framePositionStyle = { left: MARGIN };\n } else if (styleConfig.framePosition === FramePosition.TopLeft) {\n framePositionStyle = { left: MARGIN, top: \"0px\" };\n } else if (styleConfig.framePosition === FramePosition.TopRight) {\n framePositionStyle = { top: \"0px\" };\n } else if (styleConfig.framePosition === FramePosition.Center) {\n hasOverlay = true;\n framePositionStyle = { margin: \"auto\", position: \"static\" };\n defaultFrameStyle.maxHeight = null;\n }\n }\n\n if (hasOverlay) configureOverlayContainer(styleConfig, useMobileStyling);\n Object.assign(iframe.style, defaultFrameStyle, framePositionStyle);\n return hasOverlay;\n};\n\n/**\n * Create iframe\n */\nexport const createFrame = (\n productConfig: ProductConfig,\n useMobileStyling: boolean\n) => {\n const frameId = \"ul-frame\";\n\n createContainer();\n // Create iframe for application\n const iframe: Config[\"frame\"] = document.createElement(\"iframe\");\n iframe.id = frameId;\n iframe.setAttribute(\"title\", \"Sprig User Feedback Dialog\");\n\n const hasOverlay = configureFrame(iframe, productConfig, useMobileStyling);\n eventEmitter.on(SprigEvent.SurveyFadingOut, () => {\n if (window.UserLeap.container) {\n Object.assign(window.UserLeap.container.style, {\n \"background-color\": \"rgba(0,0,0,0)\",\n });\n }\n });\n removeContainerOnClose();\n\n /**\n * Set iframe height\n */\n iframe.setHeight = (height: number) => {\n if (parseInt(iframe.style.height) != height) {\n iframe.style.height = `${height}px`;\n eventEmitter.emit(SprigEvent.SurveyHeight, {\n name: SprigEvent.SurveyHeight,\n contentFrameHeight: iframe.clientHeight,\n });\n }\n };\n\n window.UserLeap.container?.appendChild(iframe);\n if (\n productConfig &&\n (useMobileStyling\n ? productConfig.exitOnOverlayClickMobile\n : productConfig.exitOnOverlayClick)\n ) {\n if (window.UserLeap.container) {\n window.UserLeap.container.onclick = () => {\n eventEmitter.emit(SprigEvent.CloseSurveyOnOverlayClick);\n };\n }\n }\n eventEmitter.emit(SprigEvent.SurveyLifeCycle, { state: \"presented\" });\n eventEmitter.emit(SprigEvent.SurveyPresented, {\n name: SprigEvent.SurveyPresented,\n });\n\n const contentWinDoc = iframe.contentWindow?.document;\n if (contentWinDoc) {\n contentWinDoc.open(\"text/html\", \"replace\"),\n contentWinDoc.write(\"<!doctype html><head></head><body></body></html>\"),\n contentWinDoc.close();\n }\n const contentWinDocHead = contentWinDoc?.head;\n\n return {\n frameId,\n contentWinDocHead,\n contentWindow: iframe.contentWindow,\n hasOverlay,\n iframe,\n };\n};\n","export const OPTIMIZELY_EVENT_PREFIX = \"!optimizely_experiments_\";\n\n/**\n *\n * @param state the object returned from optimizely getExperimentStates\n * @returns simplified object with experiment id to variation name pairing\n *\n */\nexport const extractExperimentState = (\n state: Record<string, { variation: { name: string } }>\n) => {\n return Object.keys(state).reduce<Record<string, string>>((agg, curr) => {\n if (state[curr].variation?.name) agg[curr] = state[curr].variation.name;\n return agg;\n }, {});\n};\n\ninterface Experiment {\n id: string;\n variation?: string;\n}\n\nexport class OptimizelyIntegration {\n _optimizelyData: Record<string, string> = {};\n\n /**\n * @param data object containing experimentIds as keys and variation name as the value\n * @example { environments: [ { id: 1, variation: 'Variation 1' } ] }\n * @returns boolean if set action was successful\n */\n setOptimizelyExperiment(data: { experiments: Experiment[] }) {\n if (!data || typeof data !== \"object\") return false;\n\n const { experiments } = data;\n try {\n // Delete existing experiments\n Object.keys(this._optimizelyData).map((key) => {\n delete this._optimizelyData[key];\n });\n\n // Override with new experiments\n if (experiments) {\n experiments.map((exp) => {\n const { id, variation } = exp;\n const newKey = this.transformExperimentId(id);\n if (variation && typeof variation === \"string\")\n this._optimizelyData[newKey] = variation;\n });\n }\n\n return true;\n } catch (err) {\n if (err instanceof Error)\n window.UserLeap.reportError(\"setOptimizelyExperiment\", err);\n return false;\n }\n }\n\n /**\n *\n * @returns all active experiments to variation\n */\n getAllOptimizelyExperiments() {\n return this._optimizelyData;\n }\n\n /**\n * @returns the variation name associated to the experimentId the current user is bucketed in.\n */\n getOptimizelyVariationName(experimentId: string) {\n return this._optimizelyData[this.transformExperimentId(experimentId)];\n }\n\n transformExperimentId(experimentId: string) {\n return OPTIMIZELY_EVENT_PREFIX + experimentId;\n }\n\n getAndSetWebOptimizelyExperiments() {\n try {\n if (\n window &&\n window[\"optimizely\"] &&\n typeof window[\"optimizely\"].get === \"function\"\n ) {\n const experiments = window[\"optimizely\"]\n .get(\"state\")\n ?.getExperimentStates({\n isActive: true,\n });\n\n // transform experiments if able to retreive state\n if (experiments) {\n const transformExperiments = Object.keys(experiments).map((expId) => {\n if (experiments[expId].variation?.name)\n return {\n id: expId,\n variation: experiments[expId].variation?.name,\n };\n else return { id: expId, variation: \"Original\" };\n });\n\n this.setOptimizelyExperiment({ experiments: transformExperiments });\n return true;\n }\n\n return false;\n }\n\n return false;\n } catch (err) {\n if (err instanceof Error)\n window.UserLeap.reportError(\"getAndSetWebOptimizely\", err);\n return false;\n }\n }\n}\n\nconst optimizely = new OptimizelyIntegration();\nObject.freeze(optimizely);\n\nexport default optimizely;\n","// Queue is an intermediatator for calls from developers\n// integrating the userleap. Before the library loads,\n// the snippet stores calls in a simple array.\n// Once the library is initialized, the simple array\n// is replaced by a Queue. All stored actions are processed,\n// and subsequent actions are processed immediately.\n//\n// Pause functionality is used internally to enable UI actions\n// to be delayed while Userleap is 'muted'\nexport type QueueItem = string[] | (() => void);\n\nclass SprigQueue {\n paused: boolean;\n queue: QueueItem[];\n ul: WindowSprig;\n\n constructor(ul: WindowSprig, queue: QueueItem[]) {\n this.ul = ul;\n this.paused = false;\n this.queue = [];\n this.flush(queue);\n }\n\n flush(queue: QueueItem[]) {\n const length = queue.length;\n if (length) {\n for (let i = 0; i < length; i++) {\n this.push(queue[i]);\n }\n }\n }\n\n isPaused() {\n return this.paused;\n }\n\n pause() {\n this.paused = true;\n }\n\n unpause() {\n this.paused = false;\n const queue = this.queue.slice(); //copies\n this.empty();\n this.flush(queue);\n }\n\n /* Push methods meant to make queue a drop-in replacement for the Array that's used pre-init. */\n push(action: string[] | (() => void)) {\n if (!this.paused) {\n // Queue is not paused. Perform the specified action\n if (action instanceof Function) {\n // Action is a closure\n action();\n } else {\n // Action is an array\n const args = Array.prototype.slice.call(action, 1);\n const actionName = action[0];\n const actionFunc = this.ul[actionName as keyof typeof this.ul];\n\n if (actionFunc instanceof Function) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n (actionFunc as Function).apply(this.ul, args);\n } else {\n if (actionName) {\n console.warn(\n \"[Sprig] (ERR-100) No valid UserLeap action called\",\n actionName\n );\n }\n }\n }\n } else {\n // Queue is paused. Store the action in the queue\n this.queue.push(action);\n }\n }\n\n /* Enqueue a closure to be performed by the queue.\n * This is primarily designed to be used to enable internal behaviors to be paused when the library is muted, and resume correctly when the mute is over.\n */\n perform(func: () => void) {\n if (!this.paused) {\n return func();\n } else {\n let a = () => {};\n const p = new Promise(function (resolve) {\n a = function () {\n resolve(func());\n };\n });\n this.queue.push(a);\n return p;\n }\n }\n\n /**\n * Removes all queued items\n */\n empty() {\n this.queue.length = 0;\n }\n}\n\nexport default SprigQueue;\n","import { v4 as uuidv4 } from \"uuid\";\n\nimport { CssConstant, MOBILE_MAX_WIDTH } from \"../constants/css\";\nimport {\n DismissReason,\n SprigEvent,\n InternalEventName,\n InternalEventData,\n SprigEventData,\n EVENTS,\n} from \"../constants/sprigEvents\";\nimport ConflictingWidgets from \"../helpers/conflicting_widgets\";\nimport {\n calculateFrameHeight,\n isTargetElement,\n overrideStyles,\n} from \"../helpers/document\";\nimport eventEmitter from \"../helpers/eventEmitter\";\nimport { delay, shouldDirectEmbed } from \"../helpers/general\";\nimport {\n ulFetch,\n killNetworkRequests,\n getHttpHeaders,\n} from \"../helpers/network\";\nimport { Card } from \"../types/card\";\nimport {\n Config,\n HttpHeader,\n InstallationMethod,\n Platform,\n ProductConfig,\n} from \"../types/config\";\nimport { InteractiveEvent, PageUrlEvent } from \"../types/event\";\nimport view from \"../view/view\";\nimport {\n createFrame,\n createContainer,\n removeContainerOnClose,\n removeContainer,\n} from \"./iframe\";\nimport OptimizelyIntegration from \"./OptimizelyIntegration\";\nimport SprigQueue from \"./Queue\";\n\nconst credentialsStorageKey = \"userleap.ids\";\nconst pageViewsStorageKey = \"userleap.pageviews\";\nconst dismissOnPageChangeEventTypes = [\"popState\", \"pushState\", \"replaceState\"];\n\ninterface TrackPayload {\n anonymousId?: string;\n metadata?: SprigMetadata;\n eventName?: string;\n properties?: SprigProperties;\n userId?: string;\n}\n\nenum SurveyState {\n Ready = \"ready\",\n NoSurvey = \"no survey\",\n}\n\n/**\n * Various modes that the app can be in. For now test is the\n * only one that matters\n */\nconst APP_MODES = {\n test: \"test\",\n};\n\n// backend has special handling for it, so we use `!email` as the attribute key\nconst EMAIL_ATTRIBUTE_KEY = \"!email\";\nconst MOBILE_PLATFORM_HEADERS = [\"ios\", \"android\"];\nconst PATH_ENV = \"environments\";\nconst PAGE_URL_EVENT_NAME = \"pageUrl\";\nconst PATH_VISITOR = \"visitors\";\nconst VIEW_TAG = \"ul-view-sdk-script\";\n\nconst MATCHERS_BY_TYPE = Object.freeze({\n contains: (pattern: string, url: string) => url.includes(pattern),\n notContains: (pattern: string, url: string) => !url.includes(pattern),\n exactly: (pattern: string, url: string) => url === pattern,\n notExactly: (pattern: string, url: string) => url !== pattern,\n startsWith: (pattern: string, url: string) => url.startsWith(pattern),\n endsWith: (pattern: string, url: string) => url.endsWith(pattern),\n regex: (pattern: string, url: string) => {\n return new RegExp(pattern).test(url);\n },\n legacy: (pattern: string, url: string) => {\n return new RegExp(pattern, \"i\").test(url);\n },\n});\n\nfunction checkUrlMatch(event: PageUrlEvent, url: string) {\n const { matchType, pattern } = event;\n const matcher = matchType\n ? MATCHERS_BY_TYPE[matchType]\n : MATCHERS_BY_TYPE.legacy;\n\n return matcher(pattern, url);\n}\n\nfunction shouldDisplaySurveyAfterDelay(\n triggeringEventId: number,\n trackStartUrl: string\n) {\n const { pageUrlEvents, interactiveEvents, dismissOnPageChange } =\n window.UserLeap._config;\n if (!dismissOnPageChange) return true;\n\n const urlAndInteractiveEvents = [];\n if (pageUrlEvents && pageUrlEvents.length)\n urlAndInteractiveEvents.push(...pageUrlEvents);\n if (interactiveEvents && interactiveEvents.length)\n urlAndInteractiveEvents.push(...interactiveEvents);\n\n const triggeringEvent =\n triggeringEventId &&\n urlAndInteractiveEvents.find((event) => event.id === triggeringEventId);\n if (triggeringEvent)\n return checkUrlMatch(triggeringEvent, window.location.href);\n return trackStartUrl === window.location.href;\n}\n\nfunction locationChangeHandler(event?: Event) {\n const { pageUrlEvents, interactiveEvents, dismissOnPageChange, platform } =\n window.UserLeap._config;\n if (platform && platform !== Platform.Web) return; // we should clean this up during web sdk controller refactor along with the should direct embed\n if (pageUrlEvents) trackPageView(window.location.href);\n if (interactiveEvents) {\n // need to remove old listeners bc current page may not be targeted\n removeInteractiveEventListener();\n addInteractiveEventListeners();\n }\n if (\n dismissOnPageChange &&\n event &&\n dismissOnPageChangeEventTypes.includes(event.type)\n )\n window.UserLeap(\"dismissActiveSurvey\", DismissReason.PageChange);\n}\n\nconst INTERACTIVE_LISTENER_OPTIONS = { capture: true };\n\nconst addInteractiveEventListeners = () => {\n const activeEventsForUrl = window.UserLeap._config.interactiveEvents.filter(\n (event) => checkUrlMatch(event, window.location.href)\n );\n\n const handlersForActiveEvents = activeEventsForUrl.map((i) => {\n const { name, properties } = i;\n const { selector, innerText } = properties;\n return selector\n ? (e: MouseEvent) => {\n if (isTargetElement(e.target)) {\n !!e.target.closest(selector) && window.UserLeap(\"track\", name);\n }\n return false;\n }\n : (e: MouseEvent) => {\n if (isTargetElement(e.target)) {\n e.target.innerText === innerText && window.UserLeap(\"track\", name);\n }\n return false;\n };\n });\n\n const combinedHandler = (e: MouseEvent) =>\n handlersForActiveEvents.forEach((f) => f(e));\n\n window.UserLeap._config.interactiveEventsHandler = combinedHandler;\n window.addEventListener(\n \"click\",\n combinedHandler,\n INTERACTIVE_LISTENER_OPTIONS\n );\n};\n\nconst removeInteractiveEventListener = () => {\n if (window.UserLeap._config.interactiveEventsHandler) {\n window.removeEventListener(\n \"click\",\n window.UserLeap._config.interactiveEventsHandler,\n INTERACTIVE_LISTENER_OPTIONS\n );\n }\n delete window.UserLeap._config.interactiveEventsHandler;\n};\n\nfunction registerEventListeners() {\n [\"hashchange\", \"popstate\"].forEach((evt) =>\n window.addEventListener(evt, locationChangeHandler, true)\n );\n}\n\nfunction unregisterEventListeners() {\n [\"hashchange\", \"popstate\"].forEach((evt) =>\n window.removeEventListener(evt, locationChangeHandler, true)\n );\n if (window.UserLeap._config.interactiveEvents)\n removeInteractiveEventListener();\n}\n\nfunction apiUrl(\n version: string,\n fillPaths: string[] | null,\n trailing?: string\n) {\n const components = [window.UserLeap._API_URL, \"sdk\", version];\n if (fillPaths) {\n fillPaths.forEach((p) => {\n components.push(p);\n if (p === PATH_ENV) components.push(window.UserLeap.envId);\n else if (p === PATH_VISITOR) components.push(widgetGetVID());\n });\n }\n if (trailing) components.push(trailing);\n return components.join(\"/\");\n}\n\n/**\n * Construct the get questions URL\n * @param visitorId\n * @param options\n * @param options.surveyId Active SurveyId for the Environment display, from displaySurvey\n * @param options.surveyTemplateId SurveyTemplateId to display, from previewSurvey / Template Previews\n */\nfunction getQuestionURL(\n vid: string | null,\n options?: { surveyId?: number; surveyTemplateId?: number }\n) {\n let url = apiUrl(\"1\", [PATH_ENV], \"questions?\");\n if (vid != null) url += `&vid=${vid}`;\n if (options) {\n if (options.surveyId) url += `&surveyid=${options.surveyId}`;\n if (options.surveyTemplateId)\n url += `&surveytemplateid=${options.surveyTemplateId}`;\n }\n return url;\n}\n\nfunction isLocalStorageAvailable() {\n try {\n if (typeof localStorage !== \"undefined\") {\n localStorage.setItem(\"is_available\", \"yes\");\n if (localStorage.getItem(\"is_available\") === \"yes\") {\n localStorage.removeItem(\"is_available\");\n return true;\n }\n }\n } catch (e) {\n return false;\n }\n return false;\n}\n\nfunction widgetGetLocalStorageCredentialsValue(field: string) {\n if (!window.UserLeap.localStorageAvailable) return null;\n const savedIdsJson = localStorage.getItem(credentialsStorageKey);\n if (savedIdsJson) {\n try {\n const savedIds = JSON.parse(savedIdsJson);\n const ids = savedIds[window.UserLeap.envId];\n return (ids && ids[field]) || null;\n } catch (err) {\n if (err instanceof Error) {\n err.stack = savedIdsJson;\n window.UserLeap.reportError(\n \"Failed to parse local storage credentials\",\n err\n );\n }\n console.warn(`[Sprig] (ERR-427) Failed to lookup saved ids`, err);\n }\n }\n return null;\n}\n\nfunction widgetSetLocalStorageCredentialsValue(\n field: string,\n value: string | null\n) {\n if (!window.UserLeap.localStorageAvailable) return;\n const savedIdsJson = localStorage.getItem(credentialsStorageKey);\n let savedIds: Record<string, Record<string, string | null>> = {}; //default value\n if (savedIdsJson) {\n try {\n savedIds = JSON.parse(savedIdsJson);\n } catch (err) {\n if (err instanceof Error) {\n err.stack = savedIdsJson;\n window.UserLeap.reportError(\n \"Failed to parse local storage credentials\",\n err\n );\n }\n console.warn(`[Sprig] (ERR-427) Failed to lookup saved ids`, err);\n }\n }\n let ids = savedIds[window.UserLeap.envId];\n if (ids) {\n ids[field] = value;\n } else {\n ids = { [field]: value };\n }\n savedIds[window.UserLeap.envId] = ids;\n try {\n localStorage.setItem(credentialsStorageKey, JSON.stringify(savedIds));\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `[Sprig] (ERR-426) Unable to write to Local Storage:: ${err.message}`\n );\n }\n }\n}\n\nfunction generateVisitorId() {\n if (window.previewMode) return;\n window.UserLeap.visitorId = uuidv4();\n widgetSetLocalStorageCredentialsValue(\"vid\", window.UserLeap.visitorId);\n eventEmitter.emit(SprigEvent.VisitorIDUpdated, {\n visitorId: window.UserLeap.visitorId,\n });\n}\n\nfunction widgetGetVID() {\n return window.previewMode ? \"0\" : window.UserLeap.visitorId || \"\";\n}\n\nfunction trackPageView(location: string) {\n if (!window.UserLeap.localStorageAvailable) return;\n if (location.endsWith(\"mock_snippet.html\")) {\n return;\n }\n //filter out pages that aren't being tracked\n const pageUrlEvents = window.UserLeap._config.pageUrlEvents;\n if (pageUrlEvents && pageUrlEvents.length) {\n let shouldTrackPage = false;\n for (let i = 0; i < pageUrlEvents.length; i++) {\n shouldTrackPage = checkUrlMatch(pageUrlEvents[i], location);\n\n if (shouldTrackPage) {\n break;\n }\n }\n if (!shouldTrackPage) return;\n }\n if (window.UserLeap.debugMode)\n console.info(\"[DEBUG] Sprig trackPageView\", location);\n\n //Seconds that must elapse for the same location to be considered a new page view\n const sameLocationThreshold = 10;\n\n //Seconds that must elapse before considering a location change to be valid\n //this exists primarily to stop redirects from being counted several times\n const redirectThreshold = 1;\n let pageViews = [];\n\n const payload = {\n viewedAt: Date.now(),\n location: location,\n };\n const pageViewsStorage = localStorage.getItem(pageViewsStorageKey);\n try {\n if (pageViewsStorage) {\n //read existing views from local storage\n pageViews = JSON.parse(pageViewsStorage);\n if (pageViews.length > 0) {\n const latestPageView = pageViews[pageViews.length - 1];\n const secondsElapsed = (Date.now() - latestPageView.viewedAt) / 1000;\n\n //check location and time elapsed to dedupe and avoid overcounting on redirects\n if (\n (latestPageView.location != location &&\n secondsElapsed > redirectThreshold) ||\n secondsElapsed > sameLocationThreshold\n ) {\n window.UserLeap._queue.push([\n \"track\",\n PAGE_URL_EVENT_NAME,\n null,\n { url: location },\n ]);\n pageViews.push(payload);\n }\n }\n } else {\n window.UserLeap._queue.push([\n \"track\",\n PAGE_URL_EVENT_NAME,\n null,\n { url: location },\n ]);\n pageViews.push(payload);\n }\n\n // Only keep the last 5 page views\n if (pageViews.length > 5) {\n pageViews.splice(0, pageViews.length - 5);\n }\n\n try {\n localStorage.setItem(pageViewsStorageKey, JSON.stringify(pageViews));\n } catch (err) {\n if (err instanceof Error) {\n console.warn(\n `[Sprig] Unable to write to Local Storage: ${err.message}`\n );\n }\n }\n } catch (err) {\n if (err instanceof Error) {\n err.stack = pageViewsStorage || \"\";\n window.UserLeap.reportError(\"trackPageView\", err);\n }\n console.warn(\n `[Sprig] (ERR-425) Failed to update page views in local storage`\n );\n }\n}\n\nfunction bindTrackingEvents() {\n const historyRef =\n \"Backbone\" in window && window.Backbone && window.Backbone.history\n ? window.Backbone.history\n : window.history;\n\n if (\"pushState\" in historyRef) {\n historyRef.pushState = ((f) =>\n function pushState(this: typeof historyRef, ...args) {\n const ret = f.apply(this, args);\n const event = new Event(\"pushState\");\n window.dispatchEvent(event);\n locationChangeHandler(event);\n return ret;\n })(historyRef.pushState);\n }\n\n if (\"replaceState\" in historyRef) {\n historyRef.replaceState = ((f) =>\n function replaceState(this: typeof historyRef, ...args) {\n const ret = f.apply(this, args);\n const event = new Event(\"replaceState\");\n window.dispatchEvent(event);\n locationChangeHandler(event);\n return ret;\n })(historyRef.replaceState);\n }\n registerEventListeners();\n}\n\nasync function getQuestions(\n options?: { surveyId?: number; surveyTemplateId?: number },\n submitAnswers?: unknown\n) {\n const visitorId = widgetGetVID();\n if (options && !submitAnswers) {\n window.UserLeap._config.mode = APP_MODES.test;\n }\n const response = await authenticatedFetch(\n getQuestionURL(visitorId, options),\n {},\n 0,\n true\n );\n if (!response.ok) {\n if (response.reportError && response.error) {\n console.warn(\n `[Sprig] (ERR-414) Failed to request questions from the server`,\n response.error\n );\n window.UserLeap.reportError(\"getQuestions\", response.error);\n }\n return { success: false, surveyState: SurveyState.NoSurvey };\n }\n response.json.delay && (await delay(response.json.delay));\n return displayQuestions(response.json);\n}\n\nconst displayQuestions = (responseJson: {\n context: {\n outcome: string;\n product: { name: string };\n visitor: { outcome: \"\" };\n };\n endCard: Config[\"endCard\"];\n locale: string;\n questions: Card[];\n productConfig: ProductConfig;\n responseGroupUid: string;\n surveyId: number;\n uuid: string;\n vid: string;\n}) => {\n const {\n context,\n endCard,\n locale,\n productConfig,\n questions,\n responseGroupUid,\n surveyId,\n uuid,\n vid,\n } = responseJson;\n const headers = getHttpHeaders(window.UserLeap);\n const isMobileWebview = calculateIsMobileWebview(headers);\n const useMobileStyling = calculateUseMobileStyling(headers);\n\n // Unrender if survey, vid or questions are undefined or empty\n if (vid == null || !questions || !questions.length) {\n return {\n success: false,\n message: \"[Sprig] no survey found\",\n surveyState: SurveyState.NoSurvey,\n };\n }\n\n // Are we showing a Survey already?\n if (window.UserLeap.container) {\n const message = `[Sprig] (ERR-409) Found an existing Survey container, aborting rendering of this survey`;\n console.warn(message);\n return { success: false, message, surveyState: SurveyState.NoSurvey };\n }\n\n if (\n vid !== window.UserLeap.visitorId &&\n uuid !== window.UserLeap.visitorId &&\n !window.previewMode\n ) {\n const message = \"Attempted to display survey to a different visitor\";\n window.UserLeap.reportError(\"DisplaySurvey\", new Error(message));\n return { success: false, message, surveyState: SurveyState.NoSurvey };\n }\n\n ConflictingWidgets.disable();\n eventEmitter.emit(SprigEvent.SurveyWillPresent, {\n name: SprigEvent.SurveyWillPresent,\n [SprigEventData.SurveyId]: surveyId,\n });\n\n let frameId,\n containerFrame = document.createElement(\"div\"),\n contentWinDocHead,\n contentWindow,\n hasOverlay;\n\n const verifyViewVersion = (data: {\n [InternalEventData.ViewVersion]: string;\n }) => {\n const { [InternalEventData.ViewVersion]: viewSdkVersion } = data;\n if (viewSdkVersion !== headers[\"x-ul-sdk-version\"]) {\n removeContainer();\n }\n eventEmitter.removeListener(\n InternalEventName.VerifyViewVersion,\n verifyViewVersion\n );\n };\n eventEmitter.on(InternalEventName.VerifyViewVersion, verifyViewVersion);\n\n if (shouldDirectEmbed(headers)) {\n frameId = \"ul-direct-embeded-frame\";\n contentWinDocHead = document.head;\n contentWindow = window;\n hasOverlay = false;\n\n if (isMobileWebview) {\n createContainer(); // sets window.UserLeap.container\n containerFrame.id = frameId;\n\n (window.UserLeap.container as unknown as HTMLDivElement).appendChild(\n containerFrame\n );\n\n removeContainerOnClose();\n eventEmitter.emit(SprigEvent.SurveyLifeCycle, { state: \"presented\" });\n eventEmitter.emit(SprigEvent.SurveyPresented, {\n name: SprigEvent.SurveyPresented,\n });\n }\n } else {\n ({\n frameId,\n contentWinDocHead,\n contentWindow,\n hasOverlay,\n iframe: containerFrame,\n } = createFrame(productConfig, useMobileStyling));\n }\n\n window.UserLeap.frameId = frameId;\n window.UserLeap.useMobileStyling = useMobileStyling;\n const configureExitOnOverlayClick = (exit: () => void) => {\n eventEmitter.on(SprigEvent.CloseSurveyOnOverlayClick, exit);\n };\n\n // Attach questions response to frame bootstrap config\n const config: Config = Object.assign(\n {\n frame: containerFrame,\n envId: window.UserLeap.envId,\n surveyId,\n userId: uuid,\n visitorAttributes: {\n externalUserId: window.UserLeap.userId,\n email: window.UserLeap.email,\n },\n cards: questions,\n context,\n locale,\n fontFamily: window.UserLeap.fontFamily,\n fontFamilyURL: window.UserLeap.fontFamilyURL,\n apiURL: window.UserLeap._API_URL,\n responseGroupUid,\n headers,\n endCard,\n useMobileStyling,\n mobileSDKVersion: window.UserLeap.mobileSDKVersion,\n configureExitOnOverlayClick,\n eventEmitFn: eventEmitter.emit.bind(eventEmitter),\n ulEvents: EVENTS,\n viewDocument: contentWindow?.document,\n viewWindow: contentWindow,\n tabTitle: document.title,\n startingQuestionIdx: window.UserLeap.config?.startingQuestionIdx,\n styleNonce: window.UserLeap.styleNonce,\n },\n window.UserLeap._config\n );\n\n // Resetting it to null after initial config so study restarts back to question 0\n if (window.UserLeap.config?.startingQuestionIdx)\n window.UserLeap.config = {\n ...window.UserLeap.config,\n startingQuestionIdx: null,\n };\n\n if (window.UserLeap.customStyles) {\n config.customStyles = window.UserLeap.customStyles;\n }\n if (contentWindow) contentWindow.__cfg = config;\n\n function makeSafeScriptTag() {\n const scriptTag = document.createElement(\"script\");\n // scriptTag.type = \"module\";\n if (window.UserLeap.nonce) {\n scriptTag.setAttribute(\"nonce\", window.UserLeap.nonce);\n }\n scriptTag.id = VIEW_TAG;\n return scriptTag;\n }\n const frameSrc = window.UserLeap.viewSDKURL\n ? window.UserLeap.viewSDKURL\n : config.path;\n\n const existingScript = document.getElementById(VIEW_TAG);\n existingScript && existingScript.remove();\n // Inject frame application script\n const frameScript = makeSafeScriptTag();\n\n const updateContainerDisplay = () => {\n if (window.UserLeap.container)\n Object.assign(window.UserLeap.container.style, { display: \"flex\" });\n };\n\n if (\n config.installationMethod === InstallationMethod.Npm ||\n import.meta.env.DEV\n ) {\n view.configure(config);\n if (hasOverlay && window.UserLeap.container) updateContainerDisplay();\n } else if (frameSrc) {\n frameScript.src = frameSrc;\n if (hasOverlay) {\n frameScript.addEventListener(\"load\", () => {\n if (window.UserLeap.container) updateContainerDisplay();\n });\n }\n contentWindow?.addEventListener(\n \"error\",\n (e) => {\n if (\n e.target instanceof HTMLScriptElement &&\n e.target.src === frameSrc\n ) {\n window.UserLeap.reportError(\n \"loadFrameScript\",\n new Error(`Frame script failed to load`)\n );\n }\n },\n {\n capture: true,\n once: true,\n }\n );\n }\n contentWinDocHead?.appendChild(frameScript);\n return { success: true, surveyState: SurveyState.Ready };\n};\n\nfunction calculateUseMobileStyling(headers: Config[\"headers\"]) {\n if (window.UserLeap.useMobileStyling !== undefined)\n return window.UserLeap.useMobileStyling;\n\n // handle default-0 width iframes, if UserLeap.windowDimensions.width is not specified, with desktop styling\n const windowWidth =\n (window.UserLeap.windowDimensions &&\n window.UserLeap.windowDimensions.width) ||\n document.body.clientWidth;\n return (\n calculateIsMobileWebview(headers) ||\n (windowWidth > 10 && windowWidth < MOBILE_MAX_WIDTH)\n );\n}\n\nfunction calculateIsMobileWebview(headers: Config[\"headers\"]) {\n return MOBILE_PLATFORM_HEADERS.includes(headers[HttpHeader.Platform]);\n}\n\nfunction shuffleInteractiveEvents(events: InteractiveEvent[]) {\n // All qualifying events will be sent when a user clicks the selected target element,\n // but we shuffle them here so that we don't bias towards always sending any particular\n // one first.\n let currentIndex = events.length;\n while (currentIndex) {\n const randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n const tmp = events[currentIndex];\n events[currentIndex] = events[randomIndex];\n events[randomIndex] = tmp;\n }\n}\n\n/**\n * Gather identifier data, retrieve questions, and render widget\n */\nfunction widgetInitialize(config: Config) {\n if (!config) return;\n window.UserLeap._config = config;\n\n if (config.mute) {\n // Userleap.mute isn't defined yet\n window.UserLeap._queue.pause();\n }\n\n const { interactiveEvents, pageUrlEvents, dismissOnPageChange } = config;\n if (interactiveEvents) shuffleInteractiveEvents(interactiveEvents);\n\n if (interactiveEvents || pageUrlEvents || dismissOnPageChange) {\n bindTrackingEvents();\n locationChangeHandler();\n }\n}\n\nasync function authenticatedFetch(\n url: string,\n options: RequestInit,\n attempt = 0,\n shouldDropOnRateLimit = false\n) {\n options.headers = Object.assign(\n getHttpHeaders(window.UserLeap),\n options.headers\n );\n const results = await ulFetch(url, options, attempt, shouldDropOnRateLimit);\n if (results.ok) {\n const authHeader = results.headers?.get(\"Authorization\");\n const tokenPieces = authHeader ? authHeader.split(\" \") : undefined;\n const headerToken =\n tokenPieces && tokenPieces.length === 2 ? tokenPieces[1] : undefined;\n\n const visitorId = results.headers?.get(HttpHeader.VisitorID);\n\n // reset the token and visitor id when they are valid and if either one of them is different from old values\n if (\n headerToken &&\n visitorId &&\n (visitorId !== window.UserLeap.visitorId ||\n window.UserLeap.token !== headerToken)\n ) {\n widgetSetLocalStorageCredentialsValue(\"token\", headerToken);\n widgetSetLocalStorageCredentialsValue(\"vid\", visitorId);\n\n eventEmitter.emit(SprigEvent.VisitorIDUpdated, { visitorId });\n\n window.UserLeap.token = headerToken;\n window.UserLeap.visitorId = visitorId;\n }\n }\n if (results.json && results.json.logMessage)\n console.warn(`[Sprig] ${results.json.logMessage}`);\n return results;\n}\n\nasync function delaySurveyIfNecessary(response: {\n json?: {\n delay?: number;\n };\n}) {\n if (!response?.json?.delay) return;\n window.UserLeap.delayingSurvey = true;\n await delay(response.json.delay);\n window.UserLeap.delayingSurvey = false;\n}\n\n/**\n * Hydrates the window.userLeap object with test mode\n * specific functions\n */\nconst __enableUserLeapAPIActions = function (config: Config) {\n if (!window.UserLeap) {\n return;\n }\n\n const identifyAndTrackHelper = async (payload: TrackPayload = {}) => {\n const { userId, anonymousId, metadata = {}, properties } = payload;\n let { eventName } = payload;\n\n if (window.UserLeap.debugMode && eventName !== PAGE_URL_EVENT_NAME)\n console.info(\"[DEBUG] Sprig track\", payload);\n\n if (config.mode === \"test\") {\n return;\n }\n\n if (config.requireUserIdForTracking && !window.UserLeap.userId && !userId) {\n const message = \"[Sprig] - Skipping tracking without userId\";\n console.warn(message);\n return { success: false, message, surveyState: SurveyState.NoSurvey };\n }\n if (!eventName || eventName.trim().length === 0) {\n eventName = eventName ? String(eventName) : \"\";\n const message = `[Sprig] - Invalid event name ` + eventName;\n console.warn(message);\n return { success: false, message, surveyState: SurveyState.NoSurvey };\n }\n const trackStartUrl = window.location.href;\n if (!metadata.url) metadata.url = trackStartUrl;\n\n if (window.UserLeap?._config?.optimizelyEnabled) {\n const headers = getHttpHeaders(window.UserLeap);\n const isMobileWebview = calculateIsMobileWebview(headers);\n // Call Optimizely in browser to scrape data on Web\n if (!isMobileWebview)\n OptimizelyIntegration.getAndSetWebOptimizelyExperiments();\n\n metadata[\"optimizelyExperiments\"] = Object.assign(\n {},\n OptimizelyIntegration.getAllOptimizelyExperiments()\n );\n }\n\n // set userId and/or anonymousId locally.\n // they will be included in request header.\n if (userId) window.UserLeap.userId = userId;\n if (anonymousId) window.UserLeap.partnerAnonymousId = anonymousId;\n\n // set event properties\n if (properties) metadata.eventProperties = properties;\n\n // if a survey trigger delay is ongoing, use events/batch API to avoid survey selector (blocking other events to trigger the survey).\n const result = window.UserLeap.delayingSurvey\n ? await authenticatedFetch(\n apiUrl(\"1\", [PATH_VISITOR], \"events/batch\"),\n {\n body: JSON.stringify({\n events: [\n {\n event: eventName,\n metadata,\n },\n ],\n }),\n method: \"POST\",\n },\n 0,\n true\n )\n : await authenticatedFetch(\n apiUrl(\"1\", [PATH_VISITOR], \"events\"),\n {\n body: JSON.stringify({\n event: eventName,\n metadata,\n }),\n method: \"POST\",\n },\n 0,\n true\n );\n if (!result.ok) {\n const errorMessage = `[Sprig] (ERR-421) Failed to track event`;\n if (result.reportError) {\n console.warn(errorMessage, result.error);\n\n if (result.error) window.UserLeap.reportError(\"track\", result.error);\n }\n return {\n success: false,\n message: errorMessage,\n error: result.error,\n surveyState: SurveyState.NoSurvey,\n };\n }\n if (userId) widgetSetLocalStorageCredentialsValue(\"uid\", userId);\n if (anonymousId) widgetSetLocalStorageCredentialsValue(\"aid\", anonymousId);\n\n const responseBody = result.json;\n await delaySurveyIfNecessary(result);\n if (shouldDisplaySurveyAfterDelay(responseBody.eventId, trackStartUrl)) {\n return displayQuestions(responseBody);\n } else {\n return {\n success: false,\n message: \"Study should not be displayed after page navigation\",\n surveyState: SurveyState.NoSurvey,\n };\n }\n };\n\n const apiActions = {\n // Triggers displaying specified survey. Does submit answers!\n async displaySurvey(surveyId: number) {\n console.warn(\n \"[Sprig] displaySurvey should only be used to debug your studies; not intended for production usage.\"\n );\n window.UserLeap(\"dismissActiveSurvey\", DismissReason.Override);\n return getQuestions({ surveyId }, true);\n },\n\n // Triggers displaying specified survey template. Does not submit answers\n previewSurvey(surveyTemplateId: number) {\n window.UserLeap(\"dismissActiveSurvey\", DismissReason.Override);\n getQuestions({ surveyTemplateId }, false);\n },\n\n // Triggers displaying specified survey. Does not submit answers\n reviewSurvey(surveyId: number) {\n window.UserLeap(\"dismissActiveSurvey\", DismissReason.Override);\n getQuestions({ surveyId }, false);\n },\n\n mute() {\n window.UserLeap._queue.pause();\n },\n\n unmute() {\n window.UserLeap._queue.unpause();\n },\n\n setVisitorToken() {\n console.warn(\"[Sprig] setVisitorToken is deprecated.\");\n },\n\n dismissActiveSurvey(initiator = DismissReason.API) {\n eventEmitter.emit(SprigEvent.SurveyWillClose, {\n name: SprigEvent.SurveyWillClose,\n initiator,\n });\n },\n\n // Set an arbitrary attribute on the visitor\n async setAttribute(attribute: string, value: string | number) {\n if (!attribute || (!value && value !== 0)) {\n const message = `[Sprig] - Disregarding empty attribute / value provided`;\n console.warn(message);\n return { success: false, message };\n }\n return this.setAttributes({ [attribute]: value });\n },\n\n async setAttributes(attributes?: SprigAttributes) {\n if (\n attributes === null ||\n attributes === undefined ||\n Object.keys(attributes).length === 0\n ) {\n const message = `[Sprig] - Disregarding empty attributes provided`;\n console.warn(message);\n return { success: false, message };\n }\n return this.identifyAndSetAttributes({ attributes });\n },\n\n // identifies and sets attributes on visitor; see sprig-browser/index.js for documentation\n async identifyAndSetAttributes(payload: {\n anonymousId?: string;\n attributes?: SprigAttributes;\n userId?: string;\n }) {\n if (window.UserLeap.debugMode)\n console.info(\"[DEBUG] Sprig identifyAndSetAttributes\", payload);\n\n if (config.mode === \"test\") return;\n\n if (\n payload === null ||\n typeof payload !== \"object\" ||\n !(payload.userId || payload.anonymousId || payload.attributes)\n ) {\n const message = `[Sprig] - Disregarding empty payload provided`;\n console.warn(message);\n return { success: false, message };\n }\n\n const { userId, anonymousId, attributes } = payload;\n\n if (\n config.requireUserIdForTracking &&\n !window.UserLeap.userId &&\n !userId\n ) {\n const message = \"[Sprig] - Skipping tracking without userId\";\n console.warn(message);\n return { success: false, message };\n }\n\n if (\n // no attributes to set, and the provided userId and/or anonymousId are already set locally; nothing to do.\n !attributes &&\n (!userId || window.UserLeap.userId === userId) &&\n (!anonymousId || window.UserLeap.partnerAnonymousId === anonymousId)\n ) {\n return { success: true };\n }\n\n const putUserBody: { partnerAnonymousId?: string; userId?: string } = {};\n // set userId and/or anonymousId locally, and in potential request body if there are no attributes.\n // they will be included in request header and used in authentication.\n if (userId) putUserBody.userId = window.UserLeap.userId = userId;\n if (anonymousId)\n putUserBody.partnerAnonymousId = window.UserLeap.partnerAnonymousId =\n anonymousId;\n\n let result;\n if (attributes) {\n // replace the email key if we don't already have !email in the attributes\n if (\n attributes[\"email\"] &&\n !Object.prototype.hasOwnProperty.call(attributes, EMAIL_ATTRIBUTE_KEY)\n ) {\n attributes[EMAIL_ATTRIBUTE_KEY] = attributes[\"email\"];\n delete attributes[\"email\"];\n }\n result = await authenticatedFetch(\n apiUrl(\"1\", [PATH_ENV, PATH_VISITOR], \"attributes\"),\n {\n body: JSON.stringify(attributes),\n method: \"PUT\",\n }\n );\n if (!result.ok && result.reportError) {\n console.warn(\n `[Sprig] (ERR-432) identifyAndSetAttributes failed`,\n result.error\n );\n\n if (result.error)\n window.UserLeap.reportError(\n \"identifyAndSetAttributes\",\n result.error\n );\n }\n } else {\n result = await authenticatedFetch(\n apiUrl(\"1\", [PATH_ENV, PATH_VISITOR]),\n {\n body: JSON.stringify(putUserBody),\n method: \"PUT\",\n }\n );\n }\n\n if (attributes && attributes[EMAIL_ATTRIBUTE_KEY]) {\n window.UserLeap.email = attributes[EMAIL_ATTRIBUTE_KEY] as string;\n }\n\n if (result.ok) {\n if (userId) widgetSetLocalStorageCredentialsValue(\"uid\", userId);\n if (anonymousId)\n widgetSetLocalStorageCredentialsValue(\"aid\", anonymousId);\n }\n\n return { success: !!result.ok };\n },\n\n async removeAttributes(attributes: SprigAttributes) {\n if (window.UserLeap.debugMode)\n console.info(\"[DEBUG] Sprig removeAttributes\", attributes);\n if (config.mode === \"test\") return;\n\n if (\n attributes === null ||\n attributes === undefined ||\n attributes.length === 0\n ) {\n const message = `[Sprig] - Disregarding empty attributes provided`;\n console.warn(message);\n return { success: false, message };\n }\n\n if (config.requireUserIdForTracking && !window.UserLeap.userId) {\n const message = \"[Sprig] - Skipping tracking without userId\";\n console.warn(message);\n return { success: false, message };\n }\n\n const result = await authenticatedFetch(\n apiUrl(\"1\", [PATH_ENV, PATH_VISITOR], \"attributes\"),\n {\n body: JSON.stringify({ delete: attributes }),\n method: \"DELETE\",\n }\n );\n if (!result.ok && result.reportError) {\n console.warn(\n `[Sprig] (ERR-433) Remove attributes failed`,\n result.error\n );\n if (result.error)\n window.UserLeap.reportError(\"removeAttributes\", result.error);\n }\n\n return { success: !!result.ok };\n },\n\n async addSurveyListener(listener: SprigListener) {\n eventEmitter.on(SprigEvent.SurveyLifeCycle, listener);\n },\n\n async removeSurveyListener(listener: SprigListener) {\n eventEmitter.removeListener(SprigEvent.SurveyLifeCycle, listener);\n },\n\n async addListener(event: SprigEvent, listener: SprigListener) {\n eventEmitter.on(event, listener);\n },\n\n async removeListener(event: SprigEvent, listener: SprigListener) {\n eventEmitter.removeListener(event, listener);\n },\n\n async removeAllListeners() {\n eventEmitter.removeAllListeners();\n },\n\n /** @deprecated */\n setVisitorAttribute(attribute: string, value: string | number) {\n console.warn(\n \"[Sprig] setVisitorAttribute is deprecated. Please use setAttribute\"\n );\n return apiActions.setAttribute(attribute, value);\n },\n\n // Attach an email address to visitor\n /** @deprecated */\n async setEmail(email: string) {\n return apiActions.setAttribute(EMAIL_ATTRIBUTE_KEY, email);\n },\n\n /** @deprecated */\n async setVisitorEmail(email: string) {\n console.warn(\n \"[Sprig] setVisitorEmail is deprecated. Please use setEmail\"\n );\n return apiActions.setEmail(email);\n },\n\n /**\n * Attach a user id to the visitor\n */\n async setUserId(userId: string) {\n if (window.UserLeap.debugMode)\n console.info(\"[DEBUG] Sprig setUserId\", userId);\n if (userId === null || userId === undefined) {\n const message = `[Sprig] - Invalid userId ${userId}`;\n console.warn(message);\n return { success: false, message };\n }\n if (config.mode === \"test\" || userId === window.UserLeap.userId) {\n return;\n }\n\n window.UserLeap.userId = userId;\n const result = await authenticatedFetch(\n apiUrl(\"1\", [PATH_ENV, PATH_VISITOR]),\n {\n body: JSON.stringify({\n userId,\n }),\n method: \"PUT\",\n }\n );\n if (!result.ok) {\n if (result.reportError) {\n console.warn(`[Sprig] (ERR-420) Failed to set user id`, result.error);\n if (result.error)\n window.UserLeap.reportError(\"setUserId\", result.error);\n }\n return;\n }\n widgetSetLocalStorageCredentialsValue(\"uid\", userId);\n },\n\n /**\n * Set a partner anonymous id for future requests -- to be deprecated, never documented.\n */\n async setPartnerAnonymousId(partnerAnonymousId: string) {\n if (window.UserLeap.debugMode)\n console.info(\"[DEBUG] Sprig setPartnerAnonymousId\", partnerAnonymousId);\n if (partnerAnonymousId === null || partnerAnonymousId === undefined) {\n const message = `[Sprig] - Invalid partnerAnonymousId ${partnerAnonymousId}`;\n console.warn(message);\n return { success: false, message };\n }\n\n window.UserLeap.partnerAnonymousId = partnerAnonymousId;\n return { success: true };\n },\n\n /**\n * track an event to show survey if eligible\n */\n async track(\n eventName: string,\n properties: TrackPayload[\"properties\"],\n metadata = {}\n ) {\n return identifyAndTrackHelper({ eventName, properties, metadata });\n },\n\n // identifies and tracks event on visitor; see sprig-browser/index.js for documentation\n async identifyAndTrack(payload: TrackPayload) {\n return await identifyAndTrackHelper(payload);\n },\n\n applyStyles(styleString: string) {\n window.UserLeap.customStyles = styleString;\n if (window.UserLeap.container) {\n // survey already present override the styles\n // this will only work for web sdk as when sdk is direct embedded there would not be a frame\n const surveyDocument = (\n window.UserLeap.container.children[0] as HTMLIFrameElement\n ).contentDocument;\n\n if (surveyDocument) {\n const customStyle = surveyDocument.getElementById(\n CssConstant.CustomStyle\n );\n customStyle\n ? (customStyle.textContent = styleString)\n : overrideStyles(\n surveyDocument,\n styleString,\n window.UserLeap.styleNonce\n );\n }\n }\n },\n\n /**\n set viewport dimensions, in int pixels. necessary if Sprig is installed in an iframe/component defaulting to 0 width and height.\n */\n setWindowDimensions(width: number, height: number) {\n const parsedWidth =\n typeof width === \"string\" ? parseInt(width, 10) : width;\n const parsedHeight =\n typeof height === \"string\" ? parseInt(height, 10) : height;\n\n if (!isNaN(parsedWidth) && !isNaN(parsedHeight)) {\n window.UserLeap.windowDimensions = {\n width: parsedWidth,\n height: parsedHeight,\n };\n }\n\n if (!window.UserLeap.frameId) return; // nothing to do if there's no survey frame\n const iframe = document.getElementById(\n window.UserLeap.frameId\n ) as HTMLIFrameElement | null;\n if (!iframe) return;\n\n if (window.UserLeap.useMobileStyling) {\n // desktop style is not repsonsive, but still emit SURVEY_DIMENSIONS\n if (window.UserLeap.windowDimensions?.width)\n iframe.style.width = `${window.UserLeap.windowDimensions.width}px`;\n if (window.UserLeap.windowDimensions?.height)\n iframe.style.maxHeight = `${\n window.UserLeap.windowDimensions.height - 20\n }px`;\n\n if (iframe.contentDocument)\n iframe.style.height =\n String(calculateFrameHeight(iframe.contentDocument)) + \"px\";\n }\n eventEmitter.emit(SprigEvent.SurveyDimensions, {\n name: SprigEvent.SurveyDimensions,\n contentFrameWidth: iframe.clientWidth,\n contentFrameHeight: iframe.clientHeight,\n });\n },\n\n /**\n * logs out current visitor and associated ids\n */\n logoutUser() {\n if (window.UserLeap.debugMode) console.info(\"[DEBUG] Sprig logout\");\n //clear in-memory\n window.UserLeap.visitorId = null;\n window.UserLeap.userId = null;\n window.UserLeap.partnerAnonymousId = null;\n window.UserLeap.token = null;\n window.UserLeap.email = null;\n //clear local storage\n if (window.UserLeap.localStorageAvailable) {\n localStorage.removeItem(credentialsStorageKey);\n localStorage.removeItem(pageViewsStorageKey);\n }\n /**\n * If it's paused, we're not going to wait for it to unpause to replay\n * the queued items because it may replay it with a different visitorId\n */\n if (window.UserLeap._queue.isPaused()) window.UserLeap._queue.empty();\n generateVisitorId();\n window.UserLeap._queue.unpause();\n },\n\n /**\n * dismiss surveys and clean up sprig globals\n */\n teardown() {\n unregisterEventListeners();\n window.UserLeap(\"dismissActiveSurvey\", DismissReason.API);\n\n // @ts-expect-error - we want to clear the global UserLeap object\n delete window.UserLeap;\n // @ts-expect-error - we want to clear the global UserLeap object\n delete window.Sprig;\n delete window._Sprig;\n },\n\n integrateOptimizely(strData: string) {\n const jsonData = JSON.parse(strData);\n OptimizelyIntegration.setOptimizelyExperiment(jsonData);\n },\n };\n\n Object.assign(window.UserLeap, apiActions);\n};\n\n/**\n * Pulls down presentation config settings from server and\n * applies them to supplied config dict\n */\nasync function applyRemoteConfig(config: Partial<Config>) {\n const headers = getHttpHeaders(window.UserLeap);\n let response = await ulFetch(apiUrl(\"1\", [PATH_ENV], \"config\"), { headers });\n\n const cspErrorName = \"TypeError\";\n window.UserLeap.error = response.error;\n\n if (!response.ok && response.error && response.error.name === cspErrorName) {\n window.UserLeap._API_URL = \"https://api.sprig.com\";\n window.UserLeap.reportError(\"sprigDomainRequest\", response.error);\n response = await ulFetch(apiUrl(\"1\", [PATH_ENV], \"config\"), { headers });\n }\n\n if (!response.ok) {\n if (response.reportError) {\n console.warn(\n `[Sprig] (ERR-422) Failed to load configuration`,\n response.error\n );\n if (response.error)\n window.UserLeap.reportError(\"applyRemoteConfig\", response.error);\n }\n killNetworkRequests(\"Disabled: failed to fetch configuration\");\n return config;\n }\n const properties = response.json;\n if (properties?.disabled) {\n killNetworkRequests(`Disabled: ${properties.disabled}`);\n return { disabled: properties.disabled };\n }\n\n const newConfig = Object.assign({}, config, properties);\n return newConfig;\n}\n\nasync function reportError(action: string, err: Error) {\n const mode = window.__cfg && window.__cfg.mode;\n const vid = widgetGetVID();\n const envId = window.UserLeap.envId;\n const pde = window.document.documentElement;\n const meta = {\n mode,\n screenWidth: window.screen.width,\n screenHeight: window.screen.height,\n clientWidth: pde.clientWidth,\n clientHeight: pde.clientHeight,\n location: window.location.href,\n language: window.navigator.language,\n };\n const body = {\n action,\n err: { message: err.message, stack: err.stack },\n meta,\n vid,\n envId,\n };\n const result = await authenticatedFetch(\n apiUrl(\"1\", null, \"errors\"),\n {\n method: \"POST\",\n headers: {\n [HttpHeader.Error]: window.btoa(`userleap-${Date.now()}-error`),\n },\n body: JSON.stringify(body),\n },\n 0,\n true\n );\n if (!result.ok) {\n console.warn(`[Sprig] (ERR-444) Failed to report error to API`, err);\n }\n}\n\n/**\n * Initialize frame and bootstrap data\n * @param config this is included in the compilation step (points to the default viewSDKURL)\n * @param config.envId Environment Id\n * @param config.path Frame script url\n * @param [config.border] Border color\n */\nexport default function sprigInitializer(config: Partial<Config> = {}) {\n async function load() {\n if (window.UserLeap.loaded) return;\n window.UserLeap.UPDATES = EVENTS;\n window.UserLeap.reportError = reportError;\n window.UserLeap.loaded = true;\n\n // combine compile-provided config and installation-snippet config\n window.UserLeap._config = Object.assign({}, config, window.UserLeap.config);\n window.UserLeap.delayingSurvey = false;\n\n //backwards compat\n if (\n window.UserLeap._config &&\n typeof window.UserLeap._config === \"object\"\n ) {\n for (const attr in window.UserLeap._config) {\n window.UserLeap[attr as keyof Config] = window.UserLeap._config[\n attr as keyof Config\n ] as never;\n }\n }\n //backwards compatibility for old installation snippet which set appId instead of envId\n if (!window.UserLeap.envId) {\n if (window.UserLeap.appId) {\n window.UserLeap.envId = window.UserLeap.appId;\n } else {\n throw new Error(\"Missing Environment id\");\n }\n }\n if (window.UserLeap.debugMode)\n console.info(\"[DEBUG] Sprig debug mode enabled\");\n\n const localStorageAvailable = isLocalStorageAvailable();\n window.UserLeap.localStorageAvailable = localStorageAvailable;\n\n const sampleRate = window.UserLeap.sampleRate;\n if (sampleRate) {\n if (!localStorageAvailable) {\n if (window.UserLeap.debugMode)\n console.info(\n \"[DEBUG] Sprig cannot sample users without localStorage permissions\"\n );\n } else {\n let sampled = widgetGetLocalStorageCredentialsValue(\"sampled\");\n if (sampled === null) {\n sampled = Math.random() < sampleRate;\n widgetSetLocalStorageCredentialsValue(\"sampled\", sampled);\n }\n if (!sampled) return;\n }\n } else if (localStorageAvailable) {\n //if customer removed sampleRate config, need to remove from localStorage\n const sampled = widgetGetLocalStorageCredentialsValue(\"sampled\");\n if (sampled !== null) {\n widgetSetLocalStorageCredentialsValue(\"sampled\", null);\n }\n }\n\n if (!window.UserLeap._API_URL)\n window.UserLeap._API_URL = \"https://api.sprig.com\";\n\n //make a copy of existing queue, we will replay this after configuring\n //Note: UserLeap._queue is an array at this point (defined in installation snippet)\n const queueItems = [...window.UserLeap._queue];\n\n //converts [] -> Queue()\n window.UserLeap._queue = new SprigQueue(window.UserLeap, []);\n window.UserLeap._queue.pause();\n for (let i = 0; i < queueItems.length; i++) {\n window.UserLeap._queue.push(queueItems[i]);\n }\n\n const cachedToken = widgetGetLocalStorageCredentialsValue(\"token\");\n if (cachedToken) {\n window.UserLeap.token = cachedToken;\n window.UserLeap.visitorId = widgetGetLocalStorageCredentialsValue(\"vid\");\n window.UserLeap.userId = widgetGetLocalStorageCredentialsValue(\"uid\");\n window.UserLeap.partnerAnonymousId =\n widgetGetLocalStorageCredentialsValue(\"aid\");\n } else {\n if (window.UserLeap.localStorageAvailable)\n localStorage.removeItem(credentialsStorageKey);\n generateVisitorId();\n }\n const remoteConfig = await applyRemoteConfig(config);\n __enableUserLeapAPIActions(remoteConfig);\n\n await widgetInitialize(remoteConfig);\n window.UserLeap._queue.unpause();\n\n eventEmitter.emit(SprigEvent.SDKReady);\n eventEmitter.emit(SprigEvent.VisitorIDUpdated, {\n visitorId: window.UserLeap.visitorId,\n });\n }\n if (document.readyState === \"complete\") {\n load();\n } else if (window.attachEvent) {\n window.attachEvent(\"onload\", load);\n } else {\n window.addEventListener(\"load\", load, false);\n }\n}\n","import { EVENTS } from \"../src/constants/sprigEvents\";\nimport sprigInitializer from \"../src/controller/controller\";\nimport { InstallationMethod } from \"../src/types/config\";\n\nexport class SprigAPI {\n /**\n * include external events emitted from Sprig\n */\n UPDATES = EVENTS;\n\n /**\n * Triggers displaying specified survey. Does submit answers!\n * @returns\n */\n displaySurvey(surveyId: number) {\n window.Sprig(\"displaySurvey\", surveyId);\n }\n\n /**\n * Triggers displaying specified survey template. Does not submit answers\n */\n previewSurvey(surveyTemplateId: string) {\n window.Sprig(\"previewSurvey\", surveyTemplateId);\n }\n\n /**\n * Triggers displaying specified survey. Does not submit answers\n */\n reviewSurvey(surveyId: number) {\n window.Sprig(\"reviewSurvey\", surveyId);\n }\n\n /**\n * pauses api interactions\n */\n mute() {\n window.Sprig(\"mute\");\n }\n\n /**\n * restart api interactions\n */\n unmute() {\n window.Sprig(\"unmute\");\n }\n\n /**\n * Manually dismiss an opened survey\n */\n dismissActiveSurvey() {\n window.Sprig(\"dismissActiveSurvey\");\n }\n\n /**\n * Set an arbitrary attribute on the visitor\n */\n setAttribute(attribute: string, value: string) {\n window.Sprig(\"setAttribute\", attribute, value);\n }\n\n /**\n * Set attributes on visitor\n */\n setAttributes(attributes: SprigAttributes) {\n window.Sprig(\"setAttributes\", attributes);\n }\n\n /**\n * Set identifiers and attributes on visitor\n */\n identifyAndSetAttributes(payload: {\n anonymousID?: string;\n attributes: SprigAttributes;\n userID?: string;\n }) {\n window.Sprig(\"identifyAndSetAttributes\", payload);\n }\n\n /**\n * Remove attributes on visitor\n */\n removeAttributes(attributes: SprigAttributes) {\n window.Sprig(\"removeAttributes\", attributes);\n }\n\n /**\n * Add a listener for an event defined in ulEvents\n */\n addListener(event: string, listener: SprigListener) {\n window.Sprig(\"addListener\", event, listener);\n }\n\n /**\n * Remove a listener for an event defined in ulEvents\n */\n removeListener(event: string, listener: SprigListener) {\n window.Sprig(\"removeListener\", event, listener);\n }\n\n /**\n * Remove all listeners set on Sprig\n */\n removeAllListeners() {\n window.Sprig(\"removeAllListeners\");\n }\n\n /**\n * Attach an email address to visitor\n */\n setEmail(email: string) {\n window.Sprig(\"setAttribute\", \"!email\", email);\n }\n\n /**\n * Attach a user id to the visitor\n */\n setUserId(userId: string) {\n window.Sprig(\"setUserId\", userId);\n }\n\n /**\n * Set a partner anonymous id for future requests.\n */\n setPartnerAnonymousId(partnerAnonymousId: string) {\n window.Sprig(\"setPartnerAnonymousId\", partnerAnonymousId);\n }\n\n /**\n * track an event to show survey if eligible\n * @param eventName name of event to track\n * @param properties event properties (optional)\n * @param metadata event metadata (optional)\n * @returns\n */\n track(\n eventName: string,\n properties: Record<string, unknown> = {},\n metadata: SprigMetadata = {}\n ) {\n window.Sprig(\"track\", eventName, properties, metadata);\n }\n\n /**\n * optionally set userId and/or anonymousId, track an event to show survey if eligible\n * @param payload\n * @param payload.anonymousId anonymousId (optional)\n * @param payload.eventName name of event to track\n * @param payload.metadata event metadata (optional)\n * @param payload.userId userId (optional)\n * @returns\n */\n identifyAndTrack(payload: {\n anonymousId?: string;\n eventName: string;\n metadata?: SprigMetadata;\n userId?: string;\n }) {\n window.Sprig(\"identifyAndTrack\", payload);\n }\n\n /**\n * @param styleString css string representing the customized styles\n */\n applyStyles(styleString: string) {\n window.Sprig(\"applyStyles\", styleString);\n }\n\n /**\n Set viewport dimensions, in int pixels. necessary if Sprig is installed in an iframe/component defaulting to 0 width and height.\n */\n setWindowDimensions(width: number, height: number) {\n window.Sprig(\"setWindowDimensions\", width, height);\n }\n\n /**\n * logs out current visitor and associated ids\n */\n logoutUser() {\n window.Sprig(\"logoutUser\");\n }\n\n /**\n * clears Sprig from window\n */\n teardown() {\n window.Sprig(\"teardown\");\n }\n}\n\ntype NpmConfig = {\n envId?: string;\n environmentId?: string;\n installationMethod?: InstallationMethod;\n path?: string;\n} & Partial<WindowSprig>;\n\nexport const sprig = {\n /**\n * Sets up the sprig api and load the sprig sdk on document load\n * @param config\n * @returns an instance of the sprig api\n */\n configure: (config: NpmConfig) => {\n if (!config.envId && !config.environmentId) {\n throw new Error(\n \"Initialization Error: Sprig configure requires an environmentId\"\n );\n }\n if (!config.envId) config.envId = config.environmentId || \"\"; // backwards compatible setting for environment id\n config.installationMethod = InstallationMethod.Npm;\n if (window.Sprig) return window.Sprig;\n\n // @ts-expect-error - TODO: improve\n window.Sprig = function () {\n // eslint-disable-next-line prefer-rest-params\n window.Sprig._queue.push(arguments);\n };\n\n Object.getOwnPropertyNames(SprigAPI.prototype).map((apiMethodName) => {\n if (apiMethodName !== \"constructor\")\n window.Sprig[apiMethodName as keyof typeof SprigAPI] =\n SprigAPI.prototype[apiMethodName as keyof typeof SprigAPI.prototype];\n });\n const S = window.Sprig;\n S.appId = config.envId;\n S._queue = [];\n window.UserLeap = S;\n\n sprigInitializer(config);\n return window.Sprig;\n },\n};\n\nexport default { sprig, SprigAPI, configure: sprig.configure };\n"],"names":["DismissReason","Closed","Complete","PageChange","API","Override","SprigEvent","SDKReady","SurveyAppeared","SurveyClosed","SurveyDimensions","SurveyFadingOut","SurveyHeight","SurveyPresented","SurveyLifeCycle","SurveyWillClose","SurveyWillPresent","CloseSurveyOnOverlayClick","VisitorIDUpdated","SprigEventData","SurveyId","EVENTS","SDK_READY","SURVEY_APPEARED","SURVEY_CLOSED","SURVEY_DIMENSIONS","SURVEY_FADING_OUT","SURVEY_HEIGHT","SURVEY_PRESENTED","SURVEY_LIFE_CYCLE","SURVEY_WILL_CLOSE","SURVEY_WILL_PRESENT","CLOSE_SURVEY_ON_OVERLAY_CLICK","VISITOR_ID_UPDATED","DATA","DISMISS_REASONS","CLOSED","COMPLETE","PAGE_CHANGE","OVERRIDE","SURVEY_ID","InternalEventName","VerifyViewVersion","CurrentQuestion","ViewPrototypeClick","ViewAgreementClick","RecordedTaskStart","RecordedTaskPermissionScreen","SurveyComplete","InternalEventData","ViewVersion","QuestionId","Props","getRandomValues","rnds8","rng","byteToHex","i","unsafeStringify","arr","offset","randomUUID","native","v4","options","buf","rnds","APP_ID","CssConstant","Caption","CardContainer","CardMainContent","Choice","ChoiceCheckbox","ChoiceGroup","ChoiceLabel","ChoiceLabelContainer","ChoiceRadio","ChoiceTextEntryContainer","ChoiceTextInput","CloseButton","CloseContainer","ConsentLegalNameInput","CustomStyle","DesktopSuffix","FadeInTransition","LikertNumber","LikertSmiley","LikertStar","LoadingSpinner","LoadingSpinnerContainer","LoadingSpinnerFirst","LoadingSpinnerFourth","LoadingSpinnerSecond","LoadingSpinnerThird","MobileSuffix","NPSNumber","OpenTextInput","QuestionHeader","VideoCard","CheckmarkButton","InactiveButton","LeftAlignButton","SubmitButtonDisabled","DEFAULT_BORDER_COLOR","ERROR_BORDER_COLOR","MOBILE_MAX_WIDTH","EMBED_MOBILE_MAX_WIDTH","getIntercom","window","parent","Intercom","err","console","error","enable","ul_wasVisible","hide_default_launcher","disable","document","querySelector","widgets","ConflictingWidgets","forEach","w","FRAME_HEIGHT_PADDING_PIXELS","isTargetElement","element","HTMLElement","isTargetInputElement","HTMLInputElement","isTargetTextAreaElement","HTMLTextAreaElement","overrideStyles","styleString","nonce","createElement","textContent","id","head","appendChild","calculateFrameHeight","container","containerHeight","scrollHeight","whiteSpace","parentElement","clientHeight","resetScrollPosition","scrollTop","R","ReflectApply","target","receiver","args","ReflectOwnKeys","ProcessEmitWarning","warning","NumberIsNaN","value","EventEmitter","eventsModule","events","once","defaultMaxListeners","checkListener","listener","arg","n","_getMaxListeners","that","type","doError","er","handler","len","listeners","arrayClone","_addListener","prepend","m","existing","onceWrapper","_onceWrap","state","wrapped","list","position","originalListener","spliceOne","keys","key","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","copy","index","ret","name","resolve","reject","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","__extends","this","extendStatics","d","b","p","__","__spreadArrays","s","il","k","a","j","jl","StrictEventEmitter_1","events_1","require$$0","StrictEventEmitter","_super","event","data","_i","__createBinding","o","k2","__exportStar","exports","eventEmitter","FramePosition","BottomLeft","BottomRight","Center","TopLeft","TopRight","HttpHeader","Error","EnvironmentID","InstallationMethod","PartnerAnonymousId","Platform","PreviewMode","UserID","VisitorID","Email","Link","Web","Npm","Gtm","Segment","Snippet","delay","ms","Promise","res","setTimeout","shouldDirectEmbed","platform","getClasses","baseClass","useMobileStyling","suffix","getPlatformClass","Deferred","constructor","payload","promise","resolveRequest","result","NETWORK_CONFIG","RATELIMIT_RESET_DEFAULT","killswitch","killswitchReason","isRateLimited","pendingRequestQueue","getInstallationMethodHeader","Sprig","_config","installationMethod","_gtm","_segment","killNetworkRequests","reason","getHttpHeaders","headers","__SDK_VERSION__","envId","token","userId","visitorId","partnerAnonymousId","mobileHeadersJSON","mobileHeaders","JSON","parse","assign","locale","previewMode","dropOrQueueRequest","shouldDropOnRateLimit","isRateLimitRetry","requestInfo","status","deferredRequest","push","ulFetch","url","attempt","shouldRetryRequest","killswitchResponse","ok","reportError","info","Object","fetch","rateLimitResetTime","has","Number","get","length","map","then","responseText","text","json","newAttempt","Math","pow","l","u","t","r","f","e","c","h","v","y","_","g","z","x","C","A","N","M","H","$","T","I","O","L","P","S","q","B","CardType","ConsentLegal","Likert","MultipleChoice","MultipleSelect","NPS","Open","RecordedTask","TextUrlPrompt","Thanks","Uploading","VideoVoice","Comparator","Answered","Equal","NotEqual","Skipped","LessThan","LessThanOrEqual","GivenUp","GreaterThan","GreaterThanOrEqual","ListAll","ListAtLeastOne","ListExact","AvPermission","Camera","Microphone","Screen","RecordedTaskPageType","ScreenPermission","StartTask","CompleteTask","ScaleLabelType","Smiley","Star","MediaType","Video","Audio","SprigRecordingEvent","PermissionStatus","BeginRecording","FinishTask","TaskStatus","Abandoned","Completed","SprigRecordingEventData","PermissionDescriptors","PermissionStatusCallback","StreamReadyCallback","StreamCanceledCallback","TaskCompleteCallback","TaskResponse","RecordingMediaTypes","StartRecordingCallback","PassthroughData","CurrentIndex","UploadCallback","ProgressCallback","BeginCallback","createStoreImpl","createState","setState","partial","replace","nextState","previousState","getState","api","createStore","F","V","E","U","D","W","Z","Y","G","J","K","Q","X","nn","tn","en","rn","un","on","ln","cn","fn","an","sn","hn","vn","dn","pn","mn","yn","_n","useSyncExternalStoreShim_production_min","module","require$$1","withSelector_production_min","useSyncExternalStoreWithSelector","useSyncExternalStoreExports","useStore","selector","equalityFn","slice","useDebugValue","createImpl","createStore__default","useBoundStore","create","ANSWERED","comparators","eq","neq","gt","gte","lt","lte","list_exact","Array","isArray","sort","join","list_all","some","val","indexOf","list_alo","getHasValidAnswer","response","routingValue","Boolean","taskStatus","undefined","getNextCardIndex","cards","hasEndCard","selectedValue","hasValidAnswer","uploadProgress","routingOptions","props","routingTargetStr","routingTarget","comparator","hasComparator","parsedRoutingTarget","parseInt","String","isNaN","uploadingCardIndex","findIndex","card","lastQuestionIndex","values","isSubmitted","isComplete","MAX_LENGTH_TO_CALCULATE_SUBSETS","getAllSubsets","array","reduce","subsets","concat","set","isNonEmptyArrayOrTruthy","generatePossibleSelectedValues","option","getMaxRemainingCards","invalidCardTypes","Set","filteredCards","filter","cache","currentIndex","maxRemainingCards","possibleSelectedValues","routingOptionIndex","newPossibleSelectedValues","max","isQuestionCard","useConfig","answers","apiURL","border","close","app","fadeout","remove","trackHistory","skipWriteForAction","initiator","configureExitOnOverlayClick","customMetadata","destroy","eventEmitFn","endCard","headline","emit","bind","viewDocument","el","getElementById","addEventListener","propertyName","classList","frame","handleClickEmbedButton","buttonEventName","hasViewedEmbed","handleUploadUpdate","mediaRecordingUid","progressPct","newProgress","uploadComplete","entries","every","mRUid","uploadingCardViewed","Authorization","isPreview","marketingUrl","meta","ch","cw","mode","sh","sw","next","params","responseGroupUid","submit","viewedCardCount","answeredAt","Date","now","newCards","submission","completedAt","find","accumulator","completeSurvey","includes","finally","newCard","recorder","recorderEventEmitter","slugName","showStripes","showSurveyBrand","styleNonce","responses","body","stringify","method","warn","surveyId","tabTitle","idx","isNew","hist","sid","qid","action","vid","eid","update","contains","add","height","contentFrameHeight","setHeight","useDesktopPrototype","pde","documentElement","screenWidth","screen","width","screenHeight","clientWidth","location","href","language","navigator","message","stack","btoa","createUploadUrl","uploadApiEndpoint","uploadResponse","upload","getSupportedMimeType","MediaRecorder","isTypeSupported","VideoFormat","createRecorder","stream","recordingOptions","audioBitsPerSecond","videoBitsPerSecond","mimeType","startRecording","chunks","ondataavailable","currentMediaRecordingUid","start","stopRecorderAndUpload","mediaType","UpChunk","chunkData","MediaRecorderState","PAYLOAD","beginCallback","uuid","onstop","createUpload","stop","uploadCallback","progressCallback","updatedAt","toISOString","blob","Blob","defaultView","file","File","size","endpoint","chunkSize","startTime","progress","initialRecorderState","ULRecorder","stopRecording","avRecorder","screenRecorder","avStream","getVideoTracks","handleCancelledStream","streamCancelled","videoTracks","audioTracks","getAudioTracks","track","hasStartedRecording","getTracks","readyState","captureStream","taskDurationMillisecond","getTime","setUpChunk","configure","initialState","permissionStatusCallback","avPermissionCallback","beginRecordingCallback","startTaskCallback","screenPermissionCallback","finishTaskCallback","streamReady","permissionDescriptors","_a","active","_b","removeTrack","mediaDevices","getUserMedia","video","audio","_c","addTrack","getDisplayMedia","cursor","displaySurface","preferCurrentTab","mediaTypes","startRecordingCallback","mediaRecordingUids","taskCompleteCallback","lookAheadAndStopStream","nextCardIndex","instance","freeze","clsx","Header","properties","caption","captionText","_jsxs","_Fragment","_jsx","style","marginBottom","ViewEmbedButton","buttonText","handleClick","MobileEmbedView","defaultBody","embeddedType","isMobileEmbedViewportWidth","innerWidth","hasEmbed","conceptUrl","consentDocument","handleEmbedButtonClick","preventDefault","viewDocumentText","useAutoSize","textAreaRef","sizeUpdate","heightRef","useRef","autosizeHeight","current","elem","extra","offsetHeight","totalHeight","maxHeight","getComputedStyle","getPropertyValue","Select","label","isSelected","isRadio","allowTextEntry","promptText","onUserInputChanged","isActive","setIsActive","useState","onStateUpdated","selected","userText","onClickEvent","stopPropagation","onActive","onInactive","onKeyPress","clickArgs","onClick","onTouchStart","onTouchCancel","onTouchEnd","onMouseDown","onMouseLeave","divId","conditionalSelectedStyles","SELECT_ACTIVE_STYLE_CLASS","additionalContainerStyles","SELECT_ERROR_STYLE_CLASS","borderColor","backgroundColor","boxShadow","TextEntryBox","textValue","onTextChange","inputRef","autosize","useEffect","focus","SELECT_STYLE_ELEM_ID","isHtmlStyleElement","tagName","toLowerCase","createStyles","selectStyle","elementCreated","getSelectStyle","getButtonText","getSkipButtonText","skipButtonText","ConsentLegalCard","className","questionId","isConsentSelected","setIsConsentSelected","isNamePresent","setIsNamePresent","isSubmitEnabled","setIsSubmitEnabled","setName","hasValidationError","setHasValidationError","collectName","nameLabelText","consentText","submitButtonText","namePresent","trim","handleSubmit","skipped","submitted","handleNameChange","handleConsentToggled","setActiveBorder","setDefaultBorder","questionBody","color","required","richTextBody","__html","LikertOption","activeValue","icon","isPressed","onSubmit","range","scaleLabelType","setActiveValue","setIsPressed","isNumber","isStar","isNumberActive","activeColor","activeOpacity","getClass","clearActive","fillOpacity","zIndex","LikertCard","labels","leftLabel","left","rightLabel","right","scaleRange","ratingIcons","questionRange","getIcon","svg","nums","handleSkipped","marginLeft","marginRight","BaseMultiChoiceCard","optionsMap","prevMap","optionSelectedMap","setOptionSelectedMap","isRequired","isTextOptionSelectedWithoutTextEntered","opt","isTextEmpty","optionProperties","allowsTextEntry","anyOptionsSelected","isSubmitDisabled","choices","idKey","setSelectedState","newState","SingleSelectCard","optionMap","selectedEntry","selectedId","selectedState","selectedOption","secondaryValue","MultiSelectCard","initialSelectedMap","valueToSubmit","selectedMap","textMap","newMap","NPSCard","onTouchMove","_createElement","OpenTextCard","setValue","textRef","trimmedValue","handleChange","openTextPlaceholder","AvStreamStatus","RequestNeeded","TryAgain","Ready","isPermissionTaskPage","page","isScreenTaskPage","avStreamHasRequiredPermissions","avstream","getAvStreamRequestStatus","currentPage","nextQuestion","passthroughData","recordingMediaTypes","screenPermissionRequested","useRecordedTaskStore","reset","updatePage","requestAVPermissions","pages","existingAvStream","destinationPage","currentPageIndex","nextPageTarget","completeTask","initializeRecordTask","hasVideoPermission","hasScreenPermission","audioPermissionRequired","videoPermissionRequired","obtainedAudioStream","obtainedExistingVideoStream","PAGE","responseValues","detail","nextPage","PERMISSION_GRAPHICS_CONTAINER","PERMISSION_BODY","PERMISSION_GRAPHICS_CLASSES","BUTTON_CONTAINER_CLASSES_LEFT","Button","classNames","content","buttonClassNames","RichTextCaption","SkipButton","bottom","StartTaskPageContent","taskDetail","CompleteTaskPageContent","finishTaskButtonViewPrototypeWrapper","ScreenPermissionPageContent","selectTabText","AVPermissionRequestPageContent","AVPermissionFailurePageContent","permissionDeniedHeadline","permissionDeniedBody","tryAgainButtonText","permissionPage","StreamVideo","srcObject","AVPermissionGrantedPageContent","store","PageContent","permissionStatus","RecordedTaskCard","appStore","permissionRequestStatus","permissionDeniedCaptionText","permissionGrantedHeadline","permissionGrantedCaptionText","ATTRIBUTE_URL_TO_PROPERTY_MAP","getAttributedUrl","rawUrl","visitorAttributes","attributedUrl","unmatchedUrlTags","urlKey","propertyKey","regex","RegExp","baseUrl","filteredQueryParams","split","str","queryParam","joinedQueryParams","TextUrlPromptCard","handleLinkButtonTap","handleKeyPressLinkButton","buttonUrl","textOverflow","textDecoration","overflow","getBody","plaintextBody","line","ThanksCard","subheader","CDN_LINK","videoPlayerStates","videoPlayerCss","spinner","playerId","spinnerContainer","getSpinnerId","divName","HIDDEN_CLASS","MUX_VIDEO_EXTENSION","QUESTION_ID_FIELD","CAMERA_OFF_BUTTON_CLASS","RECORDING_IN_SESSION","recorderScripts","videoPlayerScripts","VIDEO_PLAYER_POSTFIX","SECONDARY_VIDEO_PLAYER_POSTFIX","VIDEO_RECORDER_POSTFIX","currentPlayerSession","trackAnalytics","apiBase","metadata","loadScript","loadPlayerScripts","scripts","onloadCallback","prev","cur","script","setUploadProgress","uploadProgressLabel","fraction","percent","getPlayerPayloadField","player","fieldName","updatedPlayer","setupRecordEventsHandling","recordEventsCallback","RECORDER","errorMessage","makeButtonsPanel","children","buttonsPanel","child","addTextToButtonsPanel","button","BUTTON_NAME_TITLE","buttonTextEl","createButtonText","buttonName","prepareVideoPlayer","source","isAudioStream","secondaryPlayer","controls","thumbnail","getPosterThumbnail","toggleAudioPlaceholder","prepareSecondaryVideoPlayer","prepareRecorder","videoPlayerContainer","getVideoPlayerObject","currStream","restartDevice","cameraOff","cameraOnClass","cameraOffClass","cameraButtonTxt","cameraOffButton","deleteButton","videoPlayerEl","updatePlayerDisplay","recordToggle","recordButtonText","getCountdownEl","expandToggle","recordingPreview","recordingCountdownStart","playToggle","permissionDescriptor","startingNum","createVideoPlayerContainer","createVideoPlayerComponents","videoPlayer","compatibility","compatibilityLink","containerId","videoPlayerDocument","secondSource","secondaryOnloadCallback","secondPlayerId","videoRecorderPlayer","videoId","videoRecorderId","pauseQuestionPlayer","findMuxId","muxId","PLAYER_RECORDER_ELEMENT_ID","SUBMIT_BUTTON_ID","SKIP_BUTTON_ID","FORM_ID","QUESTION_RESPONSE_BTNS","VideoVoiceCard","enableSubmit","setEnableSubmit","uploadId","setUploadId","setMediaRecordingUid","view","setView","View","surveyVideoUrl","videoUrl","videoRecorderCallback","UPLOAD_STARTED","UPLOAD_ID","MEDIA_RECORDING_UID","DELETE","UPLOAD_PROGRESS","UPLOAD_PROGRESS_PCT","UPLOAD_FINISHED","loadVideoPlayer","src","MEDIA_TYPE_AUDIO","loadVideoRecorder","renderResponseButton","marginTop","display","UploadingCard","uploadProgressPct","round","min","Logo","Footer","progressRef","questionSteps","step","paddedViewedCardCount","fractionCompleted","renderBrandedLogo","margin","App","fontFamily","steps","closeApp","onKeyPressCloseApp","appStyle","nextFunction","answer","showCloseButton","getStudyStyle","renderCard","baseProps","MultipleChoiceSingleSelectCard","MultipleChoiceMultipleSelectCard","addNonQuestionCards","initialCards","uploadSet","getUserMeta","viewWindow","config","customStyles","fontFamilyURL","updatedCards","startingQuestionIdx","styleEl","css","links","rel","hostedUpChunk","onload","onerror","viewSdkVersion","backwardCompatibleEventEmitterFn","render","UserLeap","LIGHT_OVERLAY_BACKGROUND_COLOR","DARK_OVERLAY_BACKGROUND_COLOR","WIDTH","MARGIN","createContainer","removeContainer","removeChild","removeContainerOnClose","configureOverlayContainer","styleConfig","containerStyle","top","transition","defaultContainerStyle","overlayStyleConfig","overlayStyleMobile","overlayStyle","configureFrame","iframe","productConfig","defaultFrameStyle","framePositionStyle","hasOverlay","windowDimensions","framePosition","createFrame","frameId","setAttribute","exitOnOverlayClickMobile","exitOnOverlayClick","onclick","contentWinDoc","contentWindow","open","write","contentWinDocHead","OPTIMIZELY_EVENT_PREFIX","OptimizelyIntegration","_optimizelyData","setOptimizelyExperiment","experiments","exp","variation","newKey","transformExperimentId","getAllOptimizelyExperiments","getOptimizelyVariationName","experimentId","getAndSetWebOptimizelyExperiments","getExperimentStates","transformExperiments","expId","optimizely","SprigQueue","ul","queue","paused","flush","isPaused","pause","unpause","empty","Function","prototype","call","actionName","actionFunc","apply","perform","func","credentialsStorageKey","pageViewsStorageKey","dismissOnPageChangeEventTypes","APP_MODES","test","EMAIL_ATTRIBUTE_KEY","MOBILE_PLATFORM_HEADERS","PATH_ENV","PAGE_URL_EVENT_NAME","PATH_VISITOR","VIEW_TAG","MATCHERS_BY_TYPE","pattern","notContains","exactly","notExactly","startsWith","endsWith","legacy","checkUrlMatch","matchType","matcher","shouldDisplaySurveyAfterDelay","triggeringEventId","trackStartUrl","pageUrlEvents","interactiveEvents","dismissOnPageChange","urlAndInteractiveEvents","triggeringEvent","locationChangeHandler","removeInteractiveEventListener","addInteractiveEventListeners","INTERACTIVE_LISTENER_OPTIONS","capture","handlersForActiveEvents","innerText","closest","combinedHandler","interactiveEventsHandler","removeEventListener","registerEventListeners","evt","unregisterEventListeners","apiUrl","version","fillPaths","trailing","components","_API_URL","widgetGetVID","getQuestionURL","surveyTemplateId","isLocalStorageAvailable","localStorage","setItem","getItem","removeItem","widgetGetLocalStorageCredentialsValue","field","localStorageAvailable","savedIdsJson","ids","widgetSetLocalStorageCredentialsValue","savedIds","generateVisitorId","uuidv4","trackPageView","shouldTrackPage","debugMode","sameLocationThreshold","redirectThreshold","pageViews","viewedAt","pageViewsStorage","latestPageView","secondsElapsed","_queue","splice","bindTrackingEvents","historyRef","Backbone","history","pushState","Event","dispatchEvent","replaceState","getQuestions","submitAnswers","authenticatedFetch","displayQuestions","success","surveyState","SurveyState","responseJson","context","questions","isMobileWebview","calculateIsMobileWebview","calculateUseMobileStyling","containerFrame","verifyViewVersion","removeListener","exit","externalUserId","email","mobileSDKVersion","ulEvents","title","__cfg","makeSafeScriptTag","scriptTag","frameSrc","viewSDKURL","path","existingScript","frameScript","updateContainerDisplay","HTMLScriptElement","windowWidth","shuffleInteractiveEvents","randomIndex","floor","random","tmp","widgetInitialize","mute","results","authHeader","tokenPieces","headerToken","logMessage","delaySurveyIfNecessary","delayingSurvey","__enableUserLeapAPIActions","identifyAndTrackHelper","anonymousId","eventName","requireUserIdForTracking","optimizelyEnabled","eventProperties","responseBody","eventId","apiActions","displaySurvey","previewSurvey","reviewSurvey","unmute","setVisitorToken","dismissActiveSurvey","attribute","setAttributes","attributes","identifyAndSetAttributes","putUserBody","hasOwnProperty","removeAttributes","delete","addSurveyListener","removeSurveyListener","addListener","removeAllListeners","setVisitorAttribute","setEmail","setVisitorEmail","setUserId","setPartnerAnonymousId","identifyAndTrack","applyStyles","surveyDocument","contentDocument","customStyle","setWindowDimensions","parsedWidth","parsedHeight","contentFrameWidth","logoutUser","teardown","_Sprig","integrateOptimizely","strData","jsonData","applyRemoteConfig","cspErrorName","disabled","sprigInitializer","load","loaded","UPDATES","attr","appId","sampleRate","sampled","queueItems","cachedToken","remoteConfig","attachEvent","SprigAPI","sprig","environmentId","arguments","getOwnPropertyNames","apiMethodName"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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"}
|