@inappstory/slide-api 0.1.7 → 0.1.8
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 +20 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -2
- package/dist/index.d.ts +12 -2
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/composition/core.ts","../../../src/widgets/base/widgets_service/widgets_service.ts","../../../src/widgets/base/widgets_service/composition.ts","../../../src/layout/layout_service/layout_service.ts","../../../src/layout/layout_service/composition.ts","../../../src/composition/index.ts","../../../src/utils.ts","../../../src/animation/animation.ts","../../../src/sdk_api/adapters/es_module_sdk_api.ts","../../../src/sdk_api/sdk_api.h.ts","../../../src/layout/elements/DataInput.ts","../../../src/layout/elements/Barcode.ts","../../../src/layout/elements/ClickableBase.ts","../../../src/layout/elements/Button.ts","../../../src/layout/elements/Copy.ts","../../../src/layout/elements/DateCountdown.ts","../../../src/layout/elements/Poll.ts","../../../src/layout/elements/PollLayers.ts","../../../src/layout/elements/Products.ts","../../../src/layout/elements/Quest.ts","../../../src/layout/elements/Quiz.ts","../../../src/layout/elements/QuizGrouped.ts","../../../src/layout/elements/RangeSlider.ts","../../../src/layout/elements/Rate.ts","../../../src/layout/elements/Share.ts","../../../src/layout/elements/SwipeUpItems.ts","../../../src/layout/elements/Test.ts","../../../src/layout/elements/Vote.ts","../../../src/layout/elements/Text.ts","../../../src/layout/utils/utils.ts","../../../src/layout/elements/Image.ts","../../../src/layout/elements/SwipeUp.ts","../../../src/layout/elements/Video.ts","../../../src/layout/elements/factory.ts","../../../src/layout/slide_timeline/slide_timeline.ts","../../../src/layout/Layer.ts","../../../src/layout/Slide.ts","../../../src/layout/SlideApi.ts","../../../src/entry_points/es_module/es_module.ts","../../../src/widgets/base/base.ts","../../../src/widgets/barcode/barcode.ts","../../../src/widgets/copy/copy.ts","../../../src/widgets/data_input/data_input.ts","../../../src/widgets/date_countdown/date_countdown.ts","../../../src/widgets/multi_slide/multi_slide.ts","../../../src/widgets/poll/poll.ts","../../../src/widgets/poll_layers/poll_layers.ts","../../../src/formatter.ts","../../../src/SwipeGestureDetector.ts","../../../src/widgets/products/products.ts","../../../src/widgets/quest/quest.ts","../../../src/widgets/quiz/quiz.ts","../../../src/widgets/quiz_grouped/quiz_grouped.ts","../../../src/widgets/range_slider/range_slider.ts","../../../src/widgets/rate/rate.ts","../../../src/widgets/share/share.ts","../../../src/widgets/test/test.ts","../../../src/widgets/vote/vote.ts","../../../src/layout/layout_api/adapters/es_module_layout_api.ts","../../../src/layout/layout_api/composition/es_module_layout_api.ts"],"sourcesContent":["import { DIContainer } from \"@wessberg/di\";\n\nexport const container = new DIContainer();\n","export class WidgetsService {\n constructor(private _env: Window) {}\n\n get env(): Window {\n return this._env;\n }\n}\n","import { container } from \"@composition\";\nimport { WidgetsService } from \"./widgets_service\";\n\ncontainer.registerSingleton<WidgetsService>();\n","import { ILayoutApi } from \"../layout_api\";\n\nexport class LayoutService {\n constructor(\n private _env: Window,\n private _layoutApi: ILayoutApi\n ) {}\n\n get env(): Window {\n return this._env;\n }\n\n get layoutApi(): ILayoutApi {\n return this._layoutApi;\n }\n}\n","import { container } from \"@composition\";\nimport { LayoutService } from \"./layout_service\";\n\ncontainer.registerSingleton<LayoutService>();\n","import { container } from \"./core\";\n\n// import '../core/composition';\nimport \"../widgets/base/widgets_service/composition\";\nimport \"../layout/layout_service/composition\";\n\n// import '../adapters/dateTimeSource/composition';\n// import '../adapters/uuidGenerator/composition';\n// import '../effects/eventHandler/composition';\n// import '../effects/logger/composition';\n// import '../effects/timer/composition';\n\ncontainer.registerSingleton<Window>(() => window);\nexport { container };\n","import { SDKApi } from \"@skd_api\";\n\nexport const array_string = \"[object Array]\";\nexport const ops = Object.prototype.toString;\nexport const fnPrototype = Function.prototype;\nexport const bind = fnPrototype.bind;\nexport const arPrototype = Array.prototype;\nexport const obPrototype = Object.prototype;\nexport const push = arPrototype.push;\nexport const slice = arPrototype.slice;\nexport const concat = arPrototype.concat;\nexport const obKeys = Object.keys;\nexport const obHasOwnProp = obPrototype.hasOwnProperty;\nexport const toString = obPrototype.toString;\nexport const isArray =\n Array.isArray ||\n function (e) {\n return toString.call(e) === \"[object Array]\";\n };\n// Matches dashed string for camelizing\nexport const rmsPrefix = /^-ms-/;\nexport const rdashAlpha = /-([\\da-z])/gi;\nexport const fcamelCase = function (letter: string) {\n return letter.toUpperCase();\n};\n\n// private methods\nexport const isObject = function (e: any) {\n var t = typeof e;\n return t === \"function\" || (t === \"object\" && !!e);\n};\nexport const isNumber = function (t: any) {\n return toString.call(t) === \"[object Number]\";\n};\n\nexport const isNumeric = function (n: any) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\n// isEmpty = function(e) {\n// if (e == null)\n// return !0;\n// if (isArray(e) || isString(e) || isArguments(e))\n// return e.length === 0;\n// for (var t in e)\n// if (p.has(e, t))\n// return !1;\n// return !0\n// },\nexport const has = function (e: Object, t: string) {\n return e != null && obHasOwnProp.call(e, t);\n};\nexport const keys = function (e: Object) {\n if (!isObject(e)) return [];\n if (obKeys) return obKeys(e);\n var t = [];\n for (var n in e) has(e, n) && t.push(n);\n return t;\n};\nconst d = function (e: Function, t?: Object, n?: number) {\n if (t === void 0) return e;\n switch (n == null ? 3 : n) {\n case 1:\n return function (n: any) {\n return e.call(t, n);\n };\n case 2:\n return function (n: any, r: any) {\n return e.call(t, n, r);\n };\n case 3:\n return function (n: any, r: any, i: any) {\n return e.call(t, n, r, i);\n };\n case 4:\n return function (n: any, r: any, i: any, s: any) {\n return e.call(t, n, r, i, s);\n };\n }\n return function () {\n return e.apply(t, arguments);\n };\n};\nexport const each = function <T>(e: Array<T>, t: (value: T, index: string | number, arr: Array<T>) => void, n?: Object) {\n if (e == null) return e;\n t = d(t, n) as (value: T, index: string | number, arr: Array<T>) => void;\n var r: number,\n i: number = e.length;\n if (i === +i) for (r = 0; r < i; ++r) t(e[r], r, e);\n else {\n var s: Array<string> = keys(e);\n for (r = 0, i = s.length; r < i; ++r) t((e as { [key in string]: any })[s[r]], s[r], e);\n }\n return e;\n};\nexport const forEach = each;\nexport const extend = function <T extends Record<string, any>, R extends Array<Partial<T>> = Array<Partial<T>>>(e: Partial<T>, ...args: R): T {\n var t, n;\n for (var r = 1, i = arguments.length; r < i; r++) {\n t = arguments[r];\n for (n in t) obHasOwnProp.call(t, n) && ((e as Record<string, any>)[n] = t[n]);\n }\n return e as T;\n};\nexport const isEmptyObject = function (obj: Object): boolean {\n var name;\n for (name in obj) {\n return false;\n }\n return true;\n};\n\nexport const expando = function (): string {\n return \"app\" + (\"\" + Math.random()).replace(/\\D/g, \"\");\n};\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE9-11+\n// Microsoft forgot to hump their vendor prefix (#9572)\nexport const camelCase = function (string: string) {\n return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n};\n\nexport const proxy = function <T extends (...args: any[]) => any>(func: T, obj?: Object): () => ReturnType<T> {\n if (typeof func != \"function\") {\n return func;\n }\n\n // If obj is empty or another set another object\n if (!obj) {\n // @ts-ignore\n obj = this;\n }\n\n return function () {\n return func.apply(obj, arguments as unknown as any[]);\n };\n};\n\n/*\n hasData: function( elem ) {\n return data_user.hasData( elem ) || data_priv.hasData( elem );\n},\n\ndata: function( elem, name, data ) {\n return data_user.access( elem, name, data );\n},\n\nremoveData: function( elem, name ) {\n data_user.remove( elem, name );\n},\n */\n\nexport const data = function <T>(elem: HTMLElement, name: string, data?: T): T | undefined {\n return data_user.access(elem, name, data);\n};\n\nexport const getTagData = function (element: HTMLElement, key: string) {\n return element.dataset[key];\n};\n\nexport const getTagDataAsNumber = function (element: HTMLElement, key: string): number | undefined {\n const data = element.dataset[key];\n if (data == null) {\n return undefined;\n }\n return parseInt(data);\n};\n\nexport const setTagData = function (element: HTMLElement, key: string, value: string): void {\n element.dataset[key] = value;\n};\nvar rnotwhite = /\\S+/g;\n\nclass Data {\n static uid: number = 1;\n\n static accepts(owner: HTMLElement): boolean {\n // Accepts only:\n // - Node\n // - Node.ELEMENT_NODE\n // - Node.DOCUMENT_NODE\n // - Object\n // - Any\n /* jshint -W018 */\n return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n }\n\n private expando: string;\n private cache: Record<string, any>;\n\n constructor() {\n // Support: Android<4,\n // Old WebKit does not have Object.preventExtensions/freeze method,\n // return new empty object instead with no [[set]] accessor\n Object.defineProperty((this.cache = {}), 0, {\n get: function () {\n return {};\n },\n });\n\n this.expando = expando() + String(Data.uid++);\n }\n\n public key(owner: HTMLElement) {\n const _owner = owner as HTMLElement & { [key in string]: any };\n\n // We can accept data for non-element nodes in modern browsers,\n // but we should not, see #8335.\n // Always return the key for a frozen object.\n if (!Data.accepts(_owner)) {\n return 0;\n }\n\n var descriptor: Record<string, any> = {},\n // Check if the owner object already has a cache key\n unlock = _owner[this.expando];\n\n // If not, create one\n if (!unlock) {\n unlock = Data.uid++;\n\n // Secure it in a non-enumerable, non-writable property\n try {\n descriptor[this.expando] = { value: unlock };\n Object.defineProperties(_owner, descriptor);\n\n // Support: Android<4\n // Fallback to a less secure definition\n } catch (e) {\n descriptor[this.expando] = unlock;\n extend(_owner, descriptor);\n }\n }\n\n // Ensure the cache object\n if (!this.cache[unlock]) {\n this.cache[unlock] = {};\n }\n\n return unlock;\n }\n\n public set(owner: HTMLElement, data: string | Object, value: Object) {\n var prop,\n // There may be an unlock assigned to this node,\n // if there is no entry for this \"owner\", create one inline\n // and set the unlock as though an owner entry had always existed\n unlock = this.key(owner),\n cache = this.cache[unlock];\n\n // Handle: [ owner, key, value ] args\n if (typeof data === \"string\") {\n cache[data] = value;\n\n // Handle: [ owner, { properties } ] args\n } else {\n // Fresh assignments by object are shallow copied\n if (isEmptyObject(cache)) {\n extend(this.cache[unlock], data);\n // Otherwise, copy the properties one-by-one to the cache object\n } else {\n for (prop in data) {\n //@ts-ignore\n cache[prop] = data[prop];\n }\n }\n }\n return cache;\n }\n\n public get(owner: HTMLElement, key: string) {\n // Either a valid cache is found, or will be created.\n // New caches will be created and the unlock returned,\n // allowing direct access to the newly created\n // empty data object. A valid owner object must be provided.\n var cache = this.cache[this.key(owner)];\n\n return key === undefined ? cache : cache[key];\n }\n\n public access(owner: HTMLElement, key: string, value: any) {\n var stored;\n // In cases where either:\n //\n // 1. No key was specified\n // 2. A string key was specified, but no value provided\n //\n // Take the \"read\" path and allow the get method to determine\n // which value to return, respectively either:\n //\n // 1. The entire cache object\n // 2. The data stored at the key\n //\n if (key === undefined || (key && typeof key === \"string\" && value === undefined)) {\n stored = this.get(owner, key);\n\n return stored !== undefined ? stored : this.get(owner, camelCase(key));\n }\n\n // [*]When the key is not a string, or both a key and value\n // are specified, set or extend (existing objects) with either:\n //\n // 1. An object of properties\n // 2. A key and value\n //\n this.set(owner, key, value);\n\n // Since the \"set\" path can have two possible entry points\n // return the expected data based on which path was taken[*]\n return value !== undefined ? value : key;\n }\n\n public remove(owner: HTMLElement, key: string): void {\n var i,\n name,\n camel,\n unlock = this.key(owner),\n cache = this.cache[unlock];\n\n if (key === undefined) {\n this.cache[unlock] = {};\n } else {\n // Support array or space separated string of keys\n if (isArray(key)) {\n // If \"name\" is an array of keys...\n // When data is initially created, via (\"key\", \"val\") signature,\n // keys will be converted to camelCase.\n // Since there is no way to tell _how_ a key was added, remove\n // both plain key and camelCase key. #12786\n // This will only penalize the array argument path.\n name = key.concat(key.map(camelCase));\n } else {\n camel = camelCase(key);\n // Try the string as a key before any manipulation\n if (key in cache) {\n name = [key, camel];\n } else {\n // If a key with the spaces exists, use it.\n // Otherwise, create an array by matching non-whitespace\n name = camel;\n name = name in cache ? [name] : name.match(rnotwhite) || [];\n }\n }\n\n i = name.length;\n while (i--) {\n delete cache[name[i]];\n }\n }\n }\n\n public hasData(owner: HTMLElement): boolean {\n const _owner = owner as HTMLElement & { [key: string]: any };\n return !isEmptyObject(this.cache[_owner[this.expando]] || {});\n }\n\n public discard(owner: HTMLElement): void {\n const _owner = owner as HTMLElement & { [key: string]: any };\n if (_owner[this.expando]) {\n delete this.cache[_owner[this.expando]];\n }\n }\n}\n\n// var data_priv = new Data();\nconst data_user = new Data();\n\nexport const getWinWidth = function (env: Window) {\n return env.innerWidth || env.document.documentElement.clientWidth || env.document.body.clientWidth;\n};\n\nexport const getWinHeight = function (env: Window) {\n return env.innerHeight || env.document.documentElement.clientHeight || env.document.body.clientHeight;\n};\n\nexport const sendStatisticEventToApp = function (\n sdkApi: SDKApi,\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n options?: { forceEnableStatisticV2?: boolean }\n) {\n sdkApi.sendStatisticEvent(name, data, devPayload, options?.forceEnableStatisticV2 ?? false);\n};\n\nexport const getValueOrException = function <T>(value: T | undefined | null, message: string): T {\n if (value == null) {\n throw new Error(message);\n }\n return value;\n};\n\nexport const getValueOrDefault = function <T>(value: T | undefined | null, defaultValue: T): T {\n if (value == null) {\n return defaultValue;\n }\n return value;\n};\n\nexport const getElementBounding = (env: Window, rect: DOMRect) => {\n var wWidth = getWinWidth(env);\n var wHeight = getWinHeight(env);\n\n var bounding = {\n absolute: {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n right: 0,\n center: {\n x: rect.x + rect.width / 2,\n y: rect.y + rect.height / 2,\n },\n },\n width: (rect.width / wWidth) * 100,\n height: (rect.height / wHeight) * 100,\n left: (rect.left / wWidth) * 100,\n right: 0,\n center: {\n x: ((rect.x + rect.width / 2) / wWidth) * 100,\n y: ((rect.y + rect.height / 2) / wHeight) * 100,\n },\n };\n bounding.right = bounding.left + bounding.width;\n bounding.absolute.right = rect.left + rect.width;\n\n return bounding;\n};\n\nexport const toArray = <T = any>(value: any): Array<T> => Array.prototype.slice.call(value) as Array<T>;\n\nexport const addClass = (target: HTMLElement, className: string): void => {\n var arr = target.className.split(\" \");\n if (arr.indexOf(className) === -1) {\n target.className += \" \" + className;\n }\n};\nexport const removeClass = (target: HTMLElement, className: string): void => {\n target.className = target.className.replace(new RegExp(\"(?:^|\\\\s)\" + className + \"(?:\\\\s|$)\"), \" \").trim();\n};\nexport const classList = (target: HTMLElement): Array<string> => {\n if (target.classList !== undefined) {\n return toArray(target.classList);\n }\n return target.className.split(\" \");\n};\nexport const hasClass = (target: HTMLElement, className: string): boolean => classList(target).indexOf(className) !== -1;\n\nexport const Clipboard = (function (window: Window, document: Document, navigator: Navigator) {\n let textArea: HTMLTextAreaElement;\n\n function isOS() {\n return navigator.userAgent.match(/ipad|iphone/i);\n }\n\n function createTextArea(text: string): void {\n textArea = document.createElement(\"textArea\") as HTMLTextAreaElement;\n textArea.value = text;\n document.body.appendChild(textArea);\n }\n\n function selectText() {\n if (isOS()) {\n const range = document.createRange();\n range.selectNodeContents(textArea);\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n textArea.setSelectionRange(0, 999999);\n } else {\n textArea.select();\n }\n }\n\n function copyToClipboard() {\n document.execCommand(\"copy\");\n document.body.removeChild(textArea);\n }\n\n const copy = function (text: string): void {\n createTextArea(text);\n selectText();\n copyToClipboard();\n };\n\n return {\n copy,\n };\n})(window, document, navigator);\n\nexport function FilterNumber(x: any): x is number {\n return typeof x === \"number\";\n}\n\nexport function determineLocale(): string {\n // All modern browsers support this. Should match what's used by localeCompare() etc.\n const intl = window.Intl;\n if (intl !== undefined) {\n return intl.NumberFormat().resolvedOptions().locale;\n }\n\n // Fall back to ranked choice locales, which are configured in the browser but aren't necessarily\n // what's used in functions like localeCompare().\n const languages = navigator.languages as string[] | undefined;\n if (languages !== undefined && languages.length > 0) {\n return languages[0];\n }\n\n // Old standard.\n return navigator.language ?? \"en-US\";\n}\n\nexport function isScreenSupportsTouch(env: Window): boolean {\n let supportsTouch = false;\n if (\"ontouchstart\" in env) {\n supportsTouch = true;\n } else if ((env.navigator as any).msPointerEnabled) {\n supportsTouch = true;\n } else if (\"ontouchstart\" in env.document.documentElement) {\n supportsTouch = true;\n }\n return supportsTouch;\n}\n","import { addClass, classList, hasClass, removeClass, toArray } from \"@utils\";\nimport { IAnimation } from \"./animation.h\";\n\nvar supportAnimate = document.documentElement.animate !== undefined;\nsupportAnimate = false; // tmp off\n\nvar _intervals: Array<number> = [];\n\nvar _startShakeAnimation = function (element: HTMLElement) {\n var step = 0;\n return window.setInterval(function () {\n if (element) {\n switch (step) {\n case 0:\n element.style.setProperty(\"transform\", \"translate(1px, 1px) rotate(0deg)\");\n break;\n case 10:\n element.style.setProperty(\"transform\", \"translate(-1px, -2px) rotate(-1deg)\");\n break;\n case 20:\n element.style.setProperty(\"transform\", \"translate(-3px, 0px) rotate(1deg)\");\n break;\n case 30:\n element.style.setProperty(\"transform\", \"translate(3px, 2px) rotate(0deg)\");\n break;\n case 40:\n element.style.setProperty(\"transform\", \"translate(1px, -1px) rotate(1deg)\");\n break;\n case 50:\n element.style.setProperty(\"transform\", \"translate(-1px, 2px) rotate(-1deg)\");\n break;\n case 60:\n element.style.setProperty(\"transform\", \"translate(-3px, 1px) rotate(0deg)\");\n break;\n case 70:\n element.style.setProperty(\"transform\", \"translate(-3px, 1px) rotate(0deg)\");\n break;\n case 80:\n element.style.setProperty(\"transform\", \"translate(-1px, -1px) rotate(1deg)\");\n break;\n case 90:\n element.style.setProperty(\"transform\", \"translate(1px, 2px) rotate(0deg)\");\n break;\n case 100:\n element.style.setProperty(\"transform\", \"translate(1px, -2px) rotate(-1deg)\");\n break;\n }\n step += 10;\n if (step > 100) {\n step = 0;\n }\n }\n }, 100);\n};\n\nvar _startExpandShakeAnimation = function (element: HTMLElement) {\n var step = 0;\n return window.setInterval(function () {\n if (element) {\n switch (step) {\n case 0:\n element.style.setProperty(\"transform\", \"translate(1px, 1px) rotate(0deg) scale(1.1)\");\n break;\n case 10:\n element.style.setProperty(\"transform\", \"translate(-1px, -2px) rotate(-1deg) scale(1.1)\");\n break;\n case 20:\n element.style.setProperty(\"transform\", \"translate(-3px, 0px) rotate(1deg) scale(1.1)\");\n break;\n case 30:\n element.style.setProperty(\"transform\", \"translate(3px, 2px) rotate(0deg) scale(1.1)\");\n break;\n case 40:\n element.style.setProperty(\"transform\", \"translate(1px, -1px) rotate(1deg) scale(1.1)\");\n break;\n case 50:\n element.style.setProperty(\"transform\", \"translate(-1px, 2px) rotate(-1deg) scale(1.1)\");\n break;\n case 60:\n element.style.setProperty(\"transform\", \"translate(-3px, 1px) rotate(0deg) scale(1.1)\");\n break;\n case 70:\n element.style.setProperty(\"transform\", \"translate(3px, 1px) rotate(-1deg) scale(1.1)\");\n break;\n case 80:\n element.style.setProperty(\"transform\", \"translate(-1px, -1px) rotate(1deg) scale(1.1)\");\n break;\n case 90:\n element.style.setProperty(\"transform\", \"translate(1px, 2px) rotate(0deg) scale(1.1)\");\n break;\n case 100:\n element.style.setProperty(\"transform\", \"translate(1px, -2px) rotate(-1deg) scale(1.1)\");\n break;\n }\n step += 10;\n if (step > 100) {\n step = 0;\n }\n }\n }, 100);\n};\n\nvar _startBlurAnimation = function (element: HTMLElement) {\n const listener = (e: TransitionEvent) => {\n if (e.propertyName === \"filter\" && e.target != null) {\n const target = e.target as HTMLElement;\n if (hasClass(target, \"animated\")) {\n if (target.style.filter === \"blur(0px)\" || target.style.filter === \"\") {\n setTimeout(function () {\n target.style.filter = \"blur(5px)\";\n }, 10);\n } else if (target.style.filter === \"blur(5px)\") {\n setTimeout(function () {\n target.style.filter = \"blur(0px)\";\n }, 10);\n }\n } else {\n target.style.filter = \"\";\n target.removeEventListener(\"transitionend\", listener);\n }\n }\n };\n element.addEventListener(\"transitionend\", listener);\n};\n\nvar shortDuration = {\n duration: 1000,\n iterations: 1,\n};\nvar longDuration = {\n duration: 10000,\n iterations: 1,\n};\nvar extraLongDuration = {\n duration: 20000,\n iterations: 1,\n};\nvar longInfinityDuration = {\n duration: 10000,\n iterations: Infinity,\n};\n\nvar getAnimationFunction = function (element: HTMLElement): () => void {\n if (!hasClass(element, \"animated\")) {\n if (hasClass(element, \"narrative-element-animation-shake\")) {\n if (element.parentElement && hasClass(element.parentElement, \"narrative-element-expand\")) {\n return function () {\n _intervals.push(_startExpandShakeAnimation(element));\n addClass(element, \"animated\");\n };\n } else {\n return function () {\n _intervals.push(_startShakeAnimation(element));\n addClass(element, \"animated\");\n };\n }\n } else if (hasClass(element, \"narrative-element-animation-blur\")) {\n return function () {\n _startBlurAnimation(element);\n addClass(element, \"animated\");\n };\n } else {\n return function () {\n addClass(element, \"active\");\n addClass(element, \"animated\");\n };\n }\n }\n return function () {};\n};\n\nexport const animationApi: IAnimation = {\n start: function (slide: HTMLElement, animate: boolean = false) {\n if (supportAnimate && animate) {\n // for editor, todo add .reset-animation to narrative-editor-slide && clear that\n if (!hasClass(slide, \"narrative-slide\")) {\n addClass(slide, \"reset-animation\");\n }\n\n const elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n\n elements.forEach(element => {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n var _classList = classList(element);\n\n if (_classList.indexOf(\"narrative-element-animation-fade-in-up\") !== -1) {\n element.animate(\n {\n transform: [\"translateY(\" + height + \"px)\", \"translateY(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-fade-in-down\") !== -1) {\n element.animate(\n {\n transform: [\"translateY(\" + -1 * height + \"px)\", \"translateY(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-fade-in-left\") !== -1) {\n element.animate(\n {\n transform: [\"translateX(\" + -1 * width + \"px)\", \"translateX(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-fade-in-right\") !== -1) {\n element.animate(\n {\n transform: [\"translateX(\" + width + \"px)\", \"translateX(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-blur\") !== -1) {\n element.animate(\n [\n { filter: \"blur(5px)\", offset: 0 },\n { filter: \"blur(0px)\", offset: 0.5 },\n { filter: \"blur(5px)\", offset: 1 },\n ],\n longInfinityDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-focus-in\") !== -1) {\n element.animate({ filter: [\"blur(12px)\", \"blur(0px)\"], opacity: [0, 1] }, shortDuration);\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-left\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateX(\" + 0.08 * width + \"px)\", \"scale(1.2) translateX(\" + -0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-right\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateX(\" + -0.08 * width + \"px)\", \"scale(1.2) translateX(\" + 0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-up\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateY(\" + 0.08 * width + \"px)\", \"scale(1.2) translateY(\" + -0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-down\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateY(\" + -0.08 * width + \"px)\", \"scale(1.2) translateY(\" + 0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-zoom\") !== -1) {\n element.animate({ transform: [\"scale(1)\", \"scale(1.2)\"] }, longDuration);\n } else if (_classList.indexOf(\"narrative-element-animation-zoom-out\") !== -1) {\n element.animate({ transform: [\"scale(1.2)\", \"scale(1)\"] }, longDuration);\n } else if (_classList.indexOf(\"narrative-element-animation-shake\") !== -1) {\n element.animate(\n [\n { transform: \"translate(1px, 1px) rotate(0deg)\", offset: 0 },\n { transform: \"translate(-1px, -2px) rotate(-1deg)\", offset: 0.1 },\n { transform: \"translate(-3px, 0px) rotate(1deg)\", offset: 0.2 },\n { transform: \"translate(3px, 2px) rotate(0deg)\", offset: 0.3 },\n { transform: \"translate(1px, -1px) rotate(1deg)\", offset: 0.4 },\n { transform: \"translate(-1px, 2px) rotate(-1deg)\", offset: 0.5 },\n { transform: \"translate(-3px, 1px) rotate(0deg)\", offset: 0.6 },\n { transform: \"translate(3px, 1px) rotate(-1deg)\", offset: 0.7 },\n { transform: \"translate(-1px, -1px) rotate(1deg)\", offset: 0.8 },\n { transform: \"translate(1px, 2px) rotate(0deg)\", offset: 0.9 },\n { transform: \"translate(1px, -2px) rotate(-1deg)\", offset: 1 },\n ],\n { duration: 1000, iterations: Infinity, composite: \"add\" }\n );\n }\n });\n\n if (elements.length > 0) {\n requestAnimationFrame(() => removeClass(slide, \"reset-animation\"));\n }\n } else {\n addClass(slide, \"animation-fallback\");\n\n type SavedAnimation = { cb: () => void; timerId?: number; timeout: number; needResume?: boolean };\n const animations: Array<SavedAnimation> = [];\n\n // просто Array\n\n var elements = slide.querySelectorAll<HTMLElement>(\".narrative-element-animation\");\n var isEditorSlide = hasClass(slide, \"narrative-editor-slide\");\n for (var i = 0; i < elements.length; i++) {\n if (!isEditorSlide && !elements[i].style.getPropertyValue(\"--width\")) {\n var rects = elements[i].getBoundingClientRect();\n var width = rects.width;\n var height = rects.height;\n if (width && height) {\n elements[i].style.setProperty(\"--width\", width + \"px\");\n elements[i].style.setProperty(\"--height\", height + \"px\");\n }\n }\n (function (element) {\n var timeout = 50;\n\n if (element.getAttribute(\"data-animation-timeout\") && parseFloat(element.getAttribute(\"data-animation-timeout\") ?? \"0\")) {\n timeout = parseFloat(element.getAttribute(\"data-animation-timeout\") ?? \"0\") * 1000;\n }\n\n const cb = () => {\n getAnimationFunction(element)();\n if (animation) {\n animation.timerId = undefined;\n }\n };\n const animation: SavedAnimation = {\n cb,\n timeout,\n timerId: window.setTimeout(cb, timeout),\n };\n animations.push(animation);\n })(elements[i]);\n }\n\n var startAt = new Date().getTime();\n // onstop && onpause\n return function (isStop: boolean) {\n for (var animation of animations) {\n if (animation[\"timerId\"] !== undefined) {\n clearTimeout(animation[\"timerId\"]);\n animation[\"timerId\"] = undefined;\n animation[\"timeout\"] -= new Date().getTime() - startAt;\n animation[\"needResume\"] = !isStop;\n }\n }\n\n // resume\n return function () {\n startAt = new Date().getTime();\n for (const animation of animations) {\n if (animation[\"timerId\"] === undefined && animation[\"needResume\"] === true) {\n animation[\"timerId\"] = window.setTimeout(animation[\"cb\"], animation[\"timeout\"]);\n }\n }\n };\n };\n }\n },\n\n stop: function (slide: HTMLElement, animate: boolean) {\n if (supportAnimate && animate) {\n /** @type {HTMLElement[]} */\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n elements.forEach(function (el) {\n el.getAnimations().forEach(function (animation) {\n animation.cancel();\n });\n });\n } else {\n for (var i = 0; i < _intervals.length; i++) {\n clearInterval(_intervals[i]);\n }\n\n if (slide) {\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n for (var i = 0; i < elements.length; i++) {\n removeClass(elements[i], \"active\");\n removeClass(elements[i], \"animated\");\n elements[i].style.setProperty(\"transform\", \"\");\n elements[i].style.setProperty(\"filter\", \"\");\n }\n }\n }\n },\n\n pause: function (slide: HTMLElement): void {\n if (supportAnimate) {\n /* var elements = document.querySelectorAll('.narrative-element-animation');\n elements = _toArray(elements);\n\n elements.forEach(function(el) {\n el.playState = \"paused\";\n // el.currentTime = 0;\n });*/\n\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n elements.forEach(function (el) {\n el.getAnimations().forEach(function (animation) {\n if (animation.playState !== \"finished\" && animation.playState === \"running\") {\n animation.pause();\n }\n });\n });\n\n // slide.getAnimations().forEach(function (animation) {\n // if (animation.playState !== 'finished' && animation.playState === 'running') {\n // animation.pause();\n // }\n // });\n }\n },\n resume: function (slide: HTMLElement): void {\n if (supportAnimate) {\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n elements.forEach(function (el) {\n el.getAnimations().forEach(function (animation) {\n if (animation.playState === \"paused\") {\n animation.play();\n }\n });\n });\n }\n },\n reset: function (slide: HTMLElement): void {\n // _addClass(slide, 'reset-animation');\n },\n};\n","import { APIResponse, FontDTO, SDKApi } from \"@skd_api\";\nimport { Widgets, WidgetsSharedDataMap } from \"../../widgets/base\";\nimport { animationApi } from \"@animation\";\nimport { SDKInterface } from \"../es_module_sdk_api.h\";\nimport { TIMELINE_ACTION } from \"../../layout/slide_timeline\";\n\ndeclare class Toast {\n constructor(options: { content: string });\n}\n\nexport class EsModuleSdkApi implements SDKApi {\n constructor(private readonly sdkBinding: SDKInterface) {}\n\n getCardServerData(cardId: number): Record<string, any> | null {\n return this.sdkBinding.getCardServerData(cardId);\n }\n\n updateCardServerDataLocally(cardId: number, data: Record<string, any>): void {\n return this.sdkBinding.updateCardServerDataLocally(data);\n }\n\n showNextSlide(duration: number): void {\n this.sdkBinding.showNextSlide();\n }\n\n sendStatisticEvent(\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n forceEnableStatisticV2?: boolean\n ): void {\n this.sdkBinding.sendStatisticEvent(name, data, devPayload, forceEnableStatisticV2);\n }\n\n getCardLocalData(): Promise<Record<string, any>> {\n return this.sdkBinding.getCardLocalData();\n }\n\n isExistsShowLayer(): boolean {\n return true;\n }\n\n showLayer(index: number) {\n this.sdkBinding.showLayer(index);\n }\n\n get cardAnimation() {\n return animationApi;\n }\n\n get isAndroid(): boolean {\n return false;\n }\n\n get isIOS(): boolean {\n return false;\n }\n\n get isWeb(): boolean {\n return true;\n }\n\n pauseUI() {\n this.sdkBinding.pauseUI();\n }\n\n resumeUI() {\n this.sdkBinding.resumeUI();\n }\n\n get isExistsShowCardTextInput(): boolean {\n return true;\n }\n\n showCardTextInput(id: string, data: Record<string, any>): void {\n this.sdkBinding.showCardTextInput(id, data);\n }\n\n setCardLocalData(keyValue: Record<string, any>, sendToServer: boolean) {\n this.sdkBinding.setCardLocalData(keyValue, sendToServer);\n }\n\n getWidgetsSharedData<WidgetType extends keyof WidgetsSharedDataMap>(cardId: number, widget: Widgets): WidgetsSharedDataMap[WidgetType] | null {\n return this.sdkBinding.getWidgetsSharedData<WidgetType>(cardId, widget);\n }\n\n vibrate(pattern: number): void {\n navigator.vibrate(pattern);\n }\n\n openUrl(data: {\n type: \"link\" | \"swipeUpLink\" | \"swipeUpItems\";\n link: {\n type: \"url\" | \"json\";\n target: string;\n };\n elementId?: string;\n }): void {\n this.sdkBinding.openUrl(data);\n }\n\n sendApiRequest<ResponseDTO>(\n url: string,\n method: string,\n params: Record<string, any> | null,\n headers: Record<string, any> | null,\n data: Record<string, any> | null,\n profilingKey: string\n ): Promise<APIResponse<ResponseDTO>> {\n return this.sdkBinding.sendApiRequest(url, method, params, headers, data, profilingKey);\n }\n\n sendApiRequestSupported(): boolean {\n return true;\n }\n\n showToast(text: string): void {\n this.sdkBinding.showToast(text);\n }\n\n get sdkCanSendShareComplete(): boolean {\n return true;\n }\n\n get isExistsShare(): boolean {\n return true;\n }\n\n share(\n id: string,\n config: {\n url?: string | null;\n text?: string | null;\n title?: string | null;\n files?: Array<{\n file: File;\n name: string;\n type: string;\n }> | null;\n }\n ) {\n this.sdkBinding.share(id, config);\n }\n\n shareSlideScreenshot(shareId: string, hideElementsSelector?: string, shareText?: string): void {\n this.sdkBinding.shareSlideScreenshot(shareId, hideElementsSelector, shareText);\n }\n\n get isExistsShowCardSlide(): boolean {\n return true;\n }\n\n showCardSlide(index: number): void {\n this.sdkBinding.showCardSlide(index);\n }\n\n get isExistsShowNextCard(): boolean {\n return true;\n }\n\n cardShowNext(): void {\n this.sdkBinding.cardShowNext();\n }\n\n setCardSessionValue(element: HTMLElement, key: string, value: string): void {\n this.sdkBinding.setCardSessionValue(key, value);\n }\n\n getCardSessionValue(element: HTMLElement, key: string): string | undefined {\n return this.sdkBinding.getCardSessionValue(key);\n }\n\n updateTimeline(slideIndex: number, action: TIMELINE_ACTION, currentTime: number, duration: number, showLoader: boolean, showError: boolean): void {\n this.sdkBinding.updateTimeline(slideIndex, action, currentTime, duration, showLoader, showError);\n }\n\n cardPausedCallback(currentTime: number | null) {}\n\n cardResumedCallback(currentTime: number | null) {}\n\n getCardFonts(): Array<FontDTO> {\n return this.sdkBinding.getCardFonts();\n }\n\n disableVerticalSwipeGesture(): void {\n this.sdkBinding.disableVerticalSwipeGesture();\n }\n\n enableVerticalSwipeGesture(): void {\n this.sdkBinding.enableVerticalSwipeGesture();\n }\n\n disableBackpress(): void {}\n\n enableBackpress(): void {}\n\n closeCard(reason: string): void {\n this.sdkBinding.closeCard(reason);\n }\n\n openStory(id: number, index: number): void {\n this.sdkBinding.openStory(id, index);\n }\n\n openGame(gameInstanceId: string): void {\n this.sdkBinding.openGame(gameInstanceId);\n }\n\n writeToClipboard(data: { type: \"text\"; textValue: string }): void {\n this.sdkBinding.writeToClipboard(data);\n }\n\n isSdkSupportTimelineOnBeforeStart(): boolean {\n return true;\n }\n}\n","import { Widgets, WidgetsSharedDataMap } from \"../widgets/base\";\nimport { IAnimation } from \"@animation\";\nimport { TIMELINE_ACTION } from \"../layout/slide_timeline\";\n\nexport type APIResponse<DTO> = {\n status: number;\n data: DTO;\n headers?: { [key: string]: string };\n requestId: number | string;\n};\n\nexport type FontDTO = {\n url: string;\n family: string;\n style: string;\n weight: string;\n};\n\nexport const DEFAULT_SLIDE_DURATION = 10000;\nexport interface SDKApi {\n getCardServerData(cardId: number): Record<string, any> | null;\n updateCardServerDataLocally(cardId: number, data: Record<string, any>): void;\n showNextSlide(duration: number): void;\n sendStatisticEvent(\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n forceEnableStatisticV2?: boolean\n ): void;\n getCardLocalData(): Promise<Record<string, any>>;\n isExistsShowLayer(): boolean;\n showLayer(index: number): void;\n cardAnimation: IAnimation | undefined;\n isAndroid: boolean;\n isWeb: boolean;\n isIOS: boolean;\n pauseUI(): void;\n resumeUI(): void;\n isExistsShowCardTextInput: boolean;\n showCardTextInput(id: string, data: Record<string, any>): void;\n setCardLocalData(keyValue: Record<string, any>, sendToServer: boolean): void;\n getWidgetsSharedData<WidgetType extends keyof WidgetsSharedDataMap>(cardId: number, widget: Widgets): WidgetsSharedDataMap[WidgetType] | null;\n vibrate(pattern: number): void;\n openUrl(data: {\n type: \"link\" | \"swipeUpLink\" | \"swipeUpItems\";\n link: {\n type: \"url\" | \"json\";\n target: string;\n };\n elementId?: string;\n }): void;\n sendApiRequest<ResponseDTO>(\n url: string,\n method: string,\n params: Record<string, any> | null,\n headers: Record<string, any> | null,\n data: Record<string, any> | null,\n profilingKey: string\n ): Promise<APIResponse<ResponseDTO>>;\n sendApiRequestSupported(): boolean;\n showToast(text: string): void;\n sdkCanSendShareComplete: boolean;\n isExistsShare: boolean;\n share(\n id: string,\n config: {\n url?: string | null;\n text?: string | null;\n title?: string | null;\n files?: Array<{\n file: File;\n name: string;\n type: string;\n }> | null;\n }\n ): void;\n shareSlideScreenshot(shareId: string, hideElementsSelector?: string, shareText?: string): void;\n isExistsShowCardSlide: boolean;\n showCardSlide(index: number): void;\n isExistsShowNextCard: boolean;\n cardShowNext(): void;\n setCardSessionValue(element: HTMLElement, key: string, value: string): void;\n getCardSessionValue(element: HTMLElement, key: string): string | undefined;\n updateTimeline(slideIndex: number, action: TIMELINE_ACTION, currentTime: number, duration: number, showLoader: boolean, showError: boolean): void;\n\n /** @deprecated, used only in native sdk **/\n cardPausedCallback(currentTime: number | null): void;\n /** @deprecated, used only in native sdk **/\n cardResumedCallback(currentTime: number | null): void;\n\n getCardFonts(): Array<FontDTO>;\n\n disableVerticalSwipeGesture(): void;\n enableVerticalSwipeGesture(): void;\n\n disableBackpress(): void;\n enableBackpress(): void;\n\n closeCard(reason: string): void;\n openStory(id: number, index: number): void;\n openGame(gameInstanceId: string): void;\n\n writeToClipboard(data: { type: \"text\"; textValue: string }): void;\n\n isSdkSupportTimelineOnBeforeStart(): boolean;\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetDataInput } from \"../../widgets/data_input\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class DataInput implements IElement {\n private static readonly _className = \"narrative-element-data-input\";\n\n public static className(): string {\n return DataInput._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetDataInput.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is DataInput {\n return element instanceof DataInput;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n setUserData(id: string, text: string): void {\n this._widgetApi.setUserData(id, text);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { WidgetBarcode } from \"../../widgets/barcode\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Barcode implements IElement {\n private static readonly _className = \"narrative-element-barcode\";\n\n public static className(): string {\n return Barcode._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetBarcode.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { Layer } from \"../Layer\";\n\nexport class ClickableBase {\n constructor(private readonly _element: HTMLElement) {}\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\nimport { ClickableBase } from \"./ClickableBase\";\n\nexport class Button extends ClickableBase implements IElement {\n private static readonly _className = \"narrative-element-link\";\n\n public static className(): string {\n return Button._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {\n super(_elementNodeRef);\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n\n onStart() {}\n onStop() {}\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetCopy } from \"../../widgets/copy\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Copy implements IElement {\n private static readonly _className = \"narrative-element-copy\";\n\n public static className(): string {\n return Copy._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetCopy.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetDateCountdown } from \"../../widgets/date_countdown\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class DateCountdown implements IElement {\n private static readonly _className = \"narrative-element-date-countdown\";\n\n public static className(): string {\n return DateCountdown._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _layersNodesRefs: Array<HTMLElement>,\n private readonly _widgetApi: typeof WidgetDateCountdown.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {\n this._widgetApi.onPause(this._elementNodeRef);\n }\n onResume() {\n this._widgetApi.onResume(this._elementNodeRef);\n }\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetPoll } from \"../../widgets/poll\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Poll implements IElement {\n private static readonly _className = \"narrative-element-poll\";\n\n public static className(): string {\n return Poll._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetPoll.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Poll {\n return element instanceof Poll;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n setUserData(id: string, text: string): void {\n this._widgetApi.setUserData(id, text);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetPollLayers } from \"../../widgets/poll_layers\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class PollLayers implements IElement {\n private static readonly _className = \"narrative-element-poll-layers\";\n\n public static className(): string {\n return PollLayers._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _layersNodesRefs: Array<HTMLElement>,\n private readonly _widgetApi: typeof WidgetPollLayers.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is PollLayers {\n return element instanceof PollLayers;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetProducts } from \"../../widgets/products\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Products implements IElement {\n private static readonly _className = \"narrative-element-products\";\n\n public static className(): string {\n return Products._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetProducts.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Products {\n return element instanceof Products;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n handleBackpress(): void {\n this._widgetApi.onHandleBackpress(this._elementNodeRef);\n }\n\n get elementNodeRef(): HTMLElement {\n return this._elementNodeRef;\n }\n\n get isClickCapturedByWidget(): boolean {\n return this._widgetApi.isClickCapturedByWidget(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return this._widgetApi.isForcePaused(this._elementNodeRef);\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetQuest } from \"../../widgets/quest\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Quest implements IElement {\n private static readonly _className = \"narrative-element-quest\";\n\n public static className(): string {\n return Quest._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetQuest.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Quest {\n return element instanceof Quest;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n }\n\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n handleRouteClick(options: { direction: \"backward\" | \"forward\"; slideIndex: number; slideCount: number }): { continueDefaultNavigation: boolean } {\n return this._widgetApi.handleRouteClick(this._elementNodeRef, options);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetQuiz } from \"../../widgets/quiz\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Quiz implements IElement {\n private static readonly _className = \"narrative-element-quiz\";\n\n public static className(): string {\n return Quiz._className;\n }\n\n // widgetApi in ctor\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetQuiz.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Quiz {\n return element instanceof Quiz;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get slideQuizIsDone(): boolean {\n return this._widgetApi.slideQuizIsDone(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetQuizGrouped } from \"../../widgets/quiz_grouped\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class QuizGrouped implements IElement {\n private static readonly _className = \"narrative-element-quiz-grouped\";\n\n public static className(): string {\n return QuizGrouped._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetQuizGrouped.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is QuizGrouped {\n return element instanceof QuizGrouped;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get slideQuizGroupedIsDone(): boolean {\n return this._widgetApi.slideQuizIsDone(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetRangeSlider } from \"../../widgets/range_slider\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class RangeSlider implements IElement {\n private static readonly _className = \"narrative-element-range-slider\";\n\n public static className(): string {\n return RangeSlider._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetRangeSlider.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is RangeSlider {\n return element instanceof RangeSlider;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n get isClickCapturedBySlider(): boolean {\n return this._widgetApi.isClickCapturedBySlider(this._elementNodeRef);\n }\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetRate } from \"../../widgets/rate\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Rate implements IElement {\n private static readonly _className = \"narrative-element-rate\";\n\n public static className(): string {\n return Rate._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetRate.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Rate {\n return element instanceof Rate;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n setUserData(id: string, text: string): void {\n this._widgetApi.setUserData(id, text);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetShare } from \"../../widgets/share\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Share implements IElement {\n private static readonly _className = \"narrative-element-share\";\n private static readonly _widgetApiName = \"_narrative_share\";\n\n public static className(): string {\n return Share._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _layersNodesRefs: Array<HTMLElement>,\n private readonly _widgetApi: typeof WidgetShare.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Share {\n return element instanceof Share;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n complete(id: string, isSuccess: boolean): void {\n this._widgetApi.complete(id, isSuccess);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class SwipeUpItems implements IElement {\n private static readonly _className = \"narrative-element-swipe-up-items\";\n\n public static className(): string {\n return SwipeUpItems._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {}\n\n public static isTypeOf(element: IElement): element is SwipeUpItems {\n return element instanceof SwipeUpItems;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {}\n onStop() {}\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get elementNodeRef(): HTMLElement {\n return this._elementNodeRef;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetTest } from \"../../widgets/test\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Test implements IElement {\n private static readonly _className = \"narrative-element-test\";\n\n public static className(): string {\n return Test._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetTest.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Test {\n return element instanceof Test;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get slideTestIsDone(): boolean {\n return this._widgetApi.slideTestIsDone(this._elementNodeRef);\n }\n\n get slideTestWithTimer(): boolean {\n return this._widgetApi.slideTestWithTimer(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetVote } from \"../../widgets/vote\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Vote implements IElement {\n private static readonly _className = \"narrative-element-vote\";\n\n public static className(): string {\n return Vote._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetVote.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Text implements IElement {\n private static readonly _className = \"narrative-element-text\";\n\n public static className(): string {\n return Text._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {}\n onStop() {}\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","export const waitForImageHtmlElementLoad = async (nodeRef: HTMLImageElement): Promise<HTMLImageElement> => {\n return new Promise((resolve, reject) => {\n const onLoad = function () {\n // this is already in HTML markup\n // nodeRef.decoding = \"sync\";\n if (nodeRef.decode != null) {\n nodeRef.decode().then(\n () => resolve(nodeRef),\n reason => reject(reason)\n );\n } else {\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n resolve(nodeRef);\n })\n );\n }\n nodeRef.removeEventListener(\"load\", onLoad);\n };\n\n nodeRef.addEventListener(\"load\", onLoad);\n nodeRef.addEventListener(\"error\", err => reject(err));\n\n if (nodeRef.complete && 0 !== nodeRef.naturalHeight) {\n if (nodeRef.decode != null) {\n nodeRef.decode().then(\n () => resolve(nodeRef),\n reason => reject(reason)\n );\n } else {\n requestAnimationFrame(() => requestAnimationFrame(() => resolve(nodeRef)));\n }\n }\n });\n};\n\n// export const waitForImageHtmlElementLoad = async (nodeRef: HTMLImageElement): Promise<HTMLImageElement> => {\n// return new Promise((resolve, reject) => {\n// const onLoad = function () {\n// requestAnimationFrame(() =>\n// requestAnimationFrame(() => {\n// resolve(nodeRef);\n// nodeRef.removeEventListener(\"load\", onLoad);\n// })\n// );\n// };\n// nodeRef.addEventListener(\"load\", onLoad);\n// if (nodeRef.complete && 0 !== nodeRef.naturalHeight) {\n// requestAnimationFrame(() => {\n// requestAnimationFrame(() => {\n// resolve(nodeRef);\n// });\n// });\n// }\n// nodeRef.addEventListener(\"error\", err => reject(err));\n// });\n// };\n\nexport const waitForVideoHtmlElementLoad = async (nodeRef: HTMLVideoElement): Promise<HTMLVideoElement> => {\n return new Promise((resolve, reject) => {\n if (void 0 !== nodeRef.oncanplaythrough) {\n const onCanplaythrough = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // @ts-ignore\n // _log(\"video loaded 1\", true)\n resolve(nodeRef);\n nodeRef.removeEventListener(\"canplaythrough\", onCanplaythrough);\n });\n });\n };\n nodeRef.addEventListener(\"canplaythrough\", onCanplaythrough);\n nodeRef.load();\n } else {\n var onCanPlay = function () {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // @ts-ignore\n // _log(\"video loaded 2\", true)\n resolve(nodeRef);\n nodeRef.removeEventListener(\"canplay\", onCanPlay);\n });\n });\n };\n nodeRef.addEventListener(\"canplay\", onCanPlay);\n nodeRef.load();\n }\n });\n};\n\nexport function htmlEncode(s: string): string {\n return s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/'/g, \"'\").replace(/\"/g, \""\");\n}\n\nexport function addClass(target: HTMLElement, className: string): void {\n if (classList(target).indexOf(className) === -1) {\n target.className += \" \" + className;\n }\n}\n\nexport function removeClass(target: HTMLElement, className: string): void {\n var list = classList(target);\n var index = list.indexOf(className);\n if (index !== -1) {\n delete list[index];\n target.className = list.join(\" \");\n }\n}\n\nfunction classList(target: HTMLElement): Array<string> {\n if (target.classList !== undefined) {\n return Array.prototype.slice.call(target.classList);\n }\n return target.className.split(\" \");\n}\n\nexport function hasClass(target: HTMLElement, className: string): boolean {\n return classList(target).indexOf(className) !== -1;\n}\n\nexport function winWidth(): number {\n return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n}\n\nexport function winHeight(): number {\n return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n}\n\nexport function isNumber(n: any): boolean {\n return typeof n === \"number\" && !isNaN(n);\n}\n\nexport function isObject(value: any): boolean {\n let type = typeof value;\n return value != null && (type === \"object\" || type === \"function\");\n}\n\nexport function isString(value: any): boolean {\n let type = typeof value;\n return value != null && type === \"string\";\n}\n\nexport function isFunction(functionToCheck: any): string {\n let getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === \"[object Function]\";\n}\n","import { LocalData } from \"@layout\";\nimport { Layer } from \"../Layer\";\nimport { Utils } from \"../utils\";\nimport { IElement } from \"../IElement\";\nimport { ClickableBase } from \"./ClickableBase\";\n\nexport class Image extends ClickableBase implements IElement {\n private static readonly _className = \"narrative-element-image\";\n\n public static className(): string {\n return Image._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {\n super(_elementNodeRef);\n const mediaElements = Array.from(this._elementNodeRef.querySelectorAll(\"img\"));\n this.mediaElementsLoadingPromises = mediaElements.map(Utils.waitForImageHtmlElementLoad);\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n onPause() {}\n\n onResume() {}\n\n onStart() {}\n\n onStop() {}\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class SwipeUp implements IElement {\n private static readonly _className = \"narrative-element-swipe-up\";\n\n public static className(): string {\n return SwipeUp._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {}\n\n public static isTypeOf(element: IElement): element is SwipeUp {\n return element instanceof SwipeUp;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {}\n onStop() {}\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get elementNodeRef(): HTMLElement {\n return this._elementNodeRef;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { type Player as VideoPlayer } from \"@inappstory/video-player\";\nimport { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { IElement } from \"../IElement\";\nimport { Layer, ON_SLIDE_STOP_PREPARE_FOR_RESTART } from \"../Layer\";\nimport { Utils } from \"../utils\";\n\nexport class Video implements IElement {\n private static readonly _className = \"narrative-element-video\";\n\n public static className(): string {\n return Video._className;\n }\n\n private readonly _video: HTMLVideoElement;\n private readonly _isVOD: boolean = false;\n private readonly _vodData: Record<string, any>;\n private _vodPlayerInstance: VideoPlayer | null = null;\n private _videoStateAdapter: VideoStateAdapter | null = null;\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _VideoPlayer: typeof VideoPlayer | undefined,\n private readonly _sdkApi: SDKApi\n ) {\n const _video = this._elementNodeRef.querySelector(\"video\");\n if (!_video) {\n return;\n }\n this._video = _video;\n\n // _video.addEventListener(\"canplay\", () => console.log(\"canplay\", true));\n // _video.addEventListener(\"complete\", () => console.log(\"complete\", true));\n // _video.addEventListener(\"emptied\", () => console.log(\"emptied\", true));\n // _video.addEventListener(\"ended\", () => console.log(\"ended\", true));\n // _video.addEventListener(\"pause\", () => console.log(\"pause\", true));\n // _video.addEventListener(\"play\", () => console.log(\"play\", true));\n // _video.addEventListener(\"playing\", () => console.log(\"playing\", true));\n // _video.addEventListener(\"progress\", () => console.log(\"progress\", true));\n // _video.addEventListener(\"seeked\", () => console.log(\"seeked\", true));\n // _video.addEventListener(\"seeking\", () => console.log(\"seeking\", true));\n // _video.addEventListener(\"stalled\", () => console.log(\"stalled\", true));\n // _video.addEventListener(\"suspend\", () => console.log(\"suspend\", true));\n // _video.addEventListener(\"waiting\", () => console.log(\"waiting\", true));\n\n // _video.addEventListener(\"timeupdate\", (e) => console.log(`timeupdate: ${e.timeStamp}`, true));\n // _video.addEventListener(\"timeupdate\", (e) =>_log(`timeupdate: ${e.timeStamp}`, true));\n\n const mediaImageElements = Array.from(this._elementNodeRef.querySelectorAll(\"img\"));\n this.mediaElementsLoadingPromises = mediaImageElements.map(Utils.waitForImageHtmlElementLoad);\n\n this._elementNodeRef.classList.add(\"init\");\n if (this._video.getAttribute(\"data-default-muted\") == null) {\n this._video.setAttribute(\"data-default-muted\", this._video.muted ? \"1\" : \"0\");\n }\n\n const vodData_ = this._video.getAttribute(\"data-vod\");\n if (vodData_ != null) {\n try {\n this._vodData = this._convertMpdUrls(JSON.parse(vodData_));\n } catch (e) {\n console.error(e);\n }\n }\n\n this._isVOD = Boolean(this._vodData != null && this._VideoPlayer != null);\n\n if (this._isVOD) {\n // this.mediaElementsLoadingPromises.push(this._initVOD(this._vodData));\n } else {\n this.mediaElementsLoadingPromises.push(Utils.waitForVideoHtmlElementLoad(this._video));\n }\n\n // console.log({mediaElementsLoadingPromises: this.mediaElementsLoadingPromises})\n }\n\n public static isTypeOf(element: IElement): element is Video {\n return element instanceof Video;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n private _isScreenOnPause = false;\n\n onPause() {\n this._isScreenOnPause = true;\n }\n\n onResume() {\n this._isScreenOnPause = false;\n }\n\n onStart() {}\n\n onStop() {}\n\n onBeforeUnmount() {\n // clean up memory and cpu processes\n // @ts-ignore\n // _log(\"onBeforeUnmount\", true)\n this._destroyVODPlayer();\n }\n\n private _initVOD(vodData: Record<string, any>): Promise<HTMLVideoElement> {\n const onWaiting = () => {\n /**\n * When screen on pause - ignore onWaiting\n * (triggered when video paused, not only when canplay = false)\n */\n if (this._isScreenOnPause) {\n return;\n }\n\n // console.log(\"onWaiting\")\n // @ts-ignore\n // _log(\"waiting\", true);\n this._video.setAttribute(\"data-waiting\", \"1\");\n // @ts-ignore\n // _log(`waiting: ${this._video.currentTime}`, true);\n this._layer.timeline.onSlideDataWaiting(this._video.currentTime * 1000);\n // window.synthErrorId = setTimeout(synthError, 15000);\n };\n // this._video.addEventListener(\"waiting\", onWaiting);\n\n const onPlaying = () => {\n // console.log(\"onPlaying\");\n // _log(\"playing\", true);\n // TODO via class instead of data attr\n if (this._video.getAttribute(\"data-waiting\") === \"1\") {\n this._video.setAttribute(\"data-waiting\", \"0\");\n this._layer.timeline.slideResumed(this._video.currentTime * 1000);\n // @ts-ignore\n // _log(`playing: ${this._video.currentTime}`, true);\n // clearTimeout(window.synthErrorId);\n }\n };\n // this._video.addEventListener(\"playing\", onPlaying);\n this._videoStateAdapter = new VideoStateAdapter(this._video, onWaiting, onPlaying);\n\n // @ts-ignore\n // this._video.addEventListener(\"timeupdate\", (e) =>_log(`timeupdate: ${e.timeStamp}`, true));\n // this._video.addEventListener(\"timeupdate\", (e) =>console.log(`timeupdate: ${e.timeStamp}: ${this._video.currentTime}`));\n\n return new Promise((resolve, reject) => {\n // console.log(`initVoD slide idx: ${this._layer.slideIndex}`);\n\n // console.log(\"_initVOD 1\");\n\n // @ts-ignore\n if (this._VideoPlayer != null && this._VideoPlayer.isBrowserSupported() && (\"MediaSource\" in window || \"ManagedMediaSource\" in window)) {\n const player = new this._VideoPlayer();\n\n // console.log(\"_initVOD 2\");\n\n // @ts-ignore\n const onErrorEvent = event => {\n // Extract the PlayerError object from the event.\n onError(event.detail);\n };\n\n // @ts-ignore\n player.addEventListener(\"error\", onErrorEvent);\n\n // @ts-ignore\n const onError = error => {\n // Log the error.\n console.error(\"Error code\", error.code, \"object\", error);\n\n // _log(`video error: ${video.currentTime} code: ${error.code}`, true);\n\n if (this._video.paused) {\n this._layer.stopInternal({ prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART.NOT_PREPARE });\n this._layer.onBeforeUnmount();\n this._layer.timeline.onSlideError(this._video.currentTime * 1000);\n }\n };\n\n // console.log(\"_initVOD 3\");\n player.attach(this._video).then(() => {\n // console.log(\"_initVOD 4\");\n try {\n player\n // @ts-ignore\n .load(this._VideoPlayer.convertJsonToUri(vodData), 0, \"application/json\")\n .then(() => {\n // console.log(\"_initVOD 5\");\n this._vodPlayerInstance = player;\n\n // This runs if the asynchronous load is successful.\n // @ts-ignore\n // _log(\"vod loaded 1\", true);\n resolve(this._video);\n })\n .catch(reason => {\n // console.log(\"_initVOD 6\", reason);\n\n // onError is executed if the asynchronous load fails.\n reject(reason);\n onError(reason);\n });\n } catch (e) {\n // onError is executed if the asynchronous load fails.\n reject(e);\n onError(e);\n }\n });\n } else {\n // use default (not mpd) video stream\n // console.error(\"Browser not supported!\");\n // get std video stream\n let src = \"\";\n if (vodData && vodData.formats != null && Array.isArray(vodData.formats) && vodData.formats.length > 0) {\n src = vodData.formats[0].url;\n this._video.src = src;\n // @ts-ignore\n // _log(\"vod loaded 2\", true)\n resolve(this._video);\n } else {\n reject(\"Empty formats list\");\n }\n }\n });\n }\n\n private _convertMpdUrls(mpd_: Record<string, any>): Record<string, any> {\n if (this._sdkApi.isWeb) {\n return mpd_;\n }\n if (Utils.isObject(mpd_) && mpd_.adaptiveFormats != null && Array.isArray(mpd_.adaptiveFormats)) {\n const mpd = { ...mpd_ };\n for (let i = 0; i < mpd.adaptiveFormats.length; ++i) {\n mpd.adaptiveFormats[i].url = `${this._sdkApi.isAndroid ? `http://vod-asset/` : `vod-asset://`}${mpd.adaptiveFormats[i].cacheName}`;\n }\n return mpd;\n }\n return mpd_;\n }\n\n private async _destroyVODPlayer(): Promise<void> {\n //@ts-ignore\n // _log(\"call _destroyVODPlayer\", true)\n if (this._vodPlayerInstance != null) {\n try {\n if (this._videoStateAdapter) {\n this._videoStateAdapter.destroy();\n this._videoStateAdapter = null;\n }\n await this._vodPlayerInstance.detach();\n await this._vodPlayerInstance.destroy();\n // clean up - so we can reinit on slide start, id need it\n this._vodPlayerInstance = null;\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n\n private _videoStartedPromise: Promise<{ currentTime: number }> | null = null;\n public get videoStartedPromise() {\n return this._videoStartedPromise;\n }\n\n public start(muted = true, loop = true): Promise<{ currentTime: number }> {\n this._videoStartedPromise = new Promise(async resolve => {\n // invariant - always wait for mediaElementsLoadingPromises\n // else call of _initVOD can start and onAllMediaLoaded failed\n // TODO - add for all Elements state invariant protection\n Promise.all(this.mediaElementsLoadingPromises).finally(async () => {\n if (this._video) {\n if (this._isVOD && this._vodPlayerInstance === null) {\n // console.log(\"_initVOD 5.1\");\n await this._initVOD(this._vodData);\n }\n\n // console.log(\"Video:start => this._video.pause()\");\n this._video.pause();\n this._video.currentTime = 0;\n this._video.loop = loop;\n\n // remove init class\n // if vod - create VoD player\n\n if (this._video.getAttribute(\"data-default-muted\") !== \"1\") {\n this._video.muted = muted;\n }\n\n const playPromise = this._video.play();\n if (playPromise != null) {\n playPromise\n .then(() => {\n this._video.currentTime = 0;\n this._elementNodeRef.classList.remove(\"init\");\n resolve({\n currentTime: this._video.currentTime,\n });\n })\n .catch(error => {\n console.error(error);\n resolve({\n currentTime: this._video.currentTime,\n });\n });\n } else {\n setTimeout(() => {\n this._video.currentTime = 0;\n this._elementNodeRef.classList.remove(\"init\");\n resolve({\n currentTime: this._video.currentTime,\n });\n }, 0);\n }\n } else {\n resolve({\n currentTime: 0,\n });\n }\n });\n });\n\n return this._videoStartedPromise;\n }\n\n public pause(resetVideoTime = false): number | null {\n if (this._video) {\n // console.trace(\"Video pause\");\n this._video.pause();\n if (resetVideoTime) {\n this._video.currentTime = 0;\n }\n return this._video.currentTime;\n }\n return null;\n }\n\n public async resume(): Promise<{ currentTime: number }> {\n this._videoStartedPromise = new Promise((resolve, reject) => {\n // _log(\"video before resume: \" + video.currentTime);\n const ts = this._video.currentTime;\n if (!this._video.paused) {\n // console.log(\"Video:resume => this._video.pause()\");\n this._video.pause();\n }\n const playPromise = this._video.play();\n // console.log({ playPromise });\n if (playPromise != null) {\n playPromise\n .then(() => {\n // console.log(\"resolve 1\");\n if (this._video.currentTime < ts) {\n // console.log(\"resolve 1.1\", { ts });\n this._video.currentTime = ts;\n }\n\n resolve({ currentTime: this._video.currentTime });\n })\n .catch(error => {\n console.error(error);\n // console.log(\"error 1\");\n if (this._video.currentTime < ts) {\n this._video.currentTime = ts;\n }\n resolve({ currentTime: this._video.currentTime });\n });\n } else {\n setTimeout(() => {\n // console.log(\"resolve 2\");\n if (this._video.currentTime < ts) {\n this._video.currentTime = ts;\n }\n resolve({ currentTime: this._video.currentTime });\n }, 0);\n }\n });\n return this._videoStartedPromise;\n }\n\n public async stop({ prepareForRestart }: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n if (this._video) {\n // @ts-ignore\n // _log(`Video:stop => this._video.pause(), currentTime: ${this._video.currentTime}`, true);\n this._video.pause();\n }\n\n if (prepareForRestart !== ON_SLIDE_STOP_PREPARE_FOR_RESTART.UNKNOWN) {\n /**\n * In case prepareForReinit = false (stop event before unmounting - navigation to prev|next slide)\n * VOD will be destroyed in onBeforeUnmount\n *\n * In case prepareForReinit = true (stop event after navigation to prev|next story)\n * We need to go to frame 0 and show poster, and destroy VOD (clean up memory and cpu processes)\n */\n if (prepareForRestart === ON_SLIDE_STOP_PREPARE_FOR_RESTART.PREPARE) {\n this._elementNodeRef.classList.add(\"init\");\n if (this._video && !this._vodPlayerInstance) {\n // only for not VOD video\n this._video.currentTime = 0;\n }\n this._destroyVODPlayer();\n }\n } else {\n /**\n * Old sdk behavior: on any stop event - destroy VOD and show poster (prepare for restart after returning to this story)\n * with 100 ms timeout (try to prevent frame blinking on slide switching)\n */\n setTimeout(() => {\n this._elementNodeRef.classList.add(\"init\");\n if (this._video && !this._vodPlayerInstance) {\n // only for not VOD video\n this._video.currentTime = 0;\n }\n this._destroyVODPlayer();\n }, 100);\n }\n }\n\n public enableAudio() {\n if (this._video.getAttribute(\"data-default-muted\") !== \"1\") {\n this._video.muted = false;\n }\n }\n\n public disableAudio() {\n if (this._video.getAttribute(\"data-default-muted\") !== \"1\") {\n this._video.muted = true;\n }\n }\n}\n\n/**\n * iOS Safari\n * sends playing event after waiting event when Video is in waiting state\n */\nconst enum VIDEO_STATE {\n UNKNOWN,\n PLAYING,\n WAITING,\n}\n\n// class VideoStateAdapter {\n//\n// // все же следить по timeupdate\n//\n// constructor(private readonly _video: HTMLVideoElement, private readonly _onWaitingCb: () => void, private readonly _onPlayingCb: () => void) {\n// this._video.addEventListener(\"playing\", () => this._onPlaying());\n// this._video.addEventListener(\"waiting\", () => this._onWaiting());\n// }\n//\n// private _state = VIDEO_STATE.WAITING;\n//\n// private _onWaiting() {\n// if (this._playingCheckerId != null) {\n// window.clearTimeout(this._playingCheckerId);\n// }\n// this._state = VIDEO_STATE.WAITING;\n// this._triggerUpdate();\n// }\n//\n// // in ms\n// private _latestPlayingStamp: number = 0;\n// private _latestPlayingDateStamp: number = new Date().getTime();\n// private _playingCheckerId: number = null!;\n//\n// private _onPlaying() {\n// this._state = VIDEO_STATE.PLAYING;\n// if (this._playingCheckerId != null) {\n// window.clearTimeout(this._playingCheckerId);\n// }\n// this._latestPlayingStamp = this._video.currentTime * 1000;\n// this._latestPlayingDateStamp = new Date().getTime();\n// this._triggerUpdate();\n//\n// // если через 100ms не время не изменится - встаем на паузу\n// // если до исполнения таймера были другие события - то отменять таймер\n// this._playingCheckerId = window.setTimeout(() => {\n// const currentTime = this._video.currentTime * 1000;\n// const diff = currentTime - this._latestPlayingStamp;\n//\n// const timeSpent = new Date().getTime() - this._latestPlayingDateStamp;\n//\n// // @ts-ignore\n// _log(`check, currentTime: ${currentTime}, latestPlayingStamp: ${this._latestPlayingStamp}, diff: ${diff}, timeSpent: ${timeSpent}`, true);\n// if (diff <= (timeSpent / 2)) {\n// this._state = VIDEO_STATE.WAITING;\n// this._triggerUpdate();\n// }\n// }, 100);\n// }\n//\n// private _triggerUpdate() {\n// if (this._state === VIDEO_STATE.PLAYING) {\n// this._onPlayingCb();\n// } else if (this._state === VIDEO_STATE.WAITING) {\n// this._onWaitingCb();\n// }\n// }\n// }\n\nclass VideoStateAdapter {\n // все же следить по timeupdate\n\n constructor(\n private readonly _video: HTMLVideoElement,\n private readonly _onWaitingCb: () => void,\n private readonly _onPlayingCb: () => void\n ) {\n // this._video.addEventListener(\"playing\", () => this._onPlaying());\n // this._video.addEventListener(\"waiting\", () => this._onWaiting());\n this._video.addEventListener(\"timeupdate\", this._onTimeupdateHandler);\n }\n\n destroy() {\n this._video.removeEventListener(\"timeupdate\", this._onTimeupdateHandler);\n }\n\n private _onTimeupdateHandler = this._onTimeupdate.bind(this);\n\n private _timeupdate = Date.now();\n private _state = VIDEO_STATE.UNKNOWN;\n // The event frequency is dependent on the system load, but will be thrown between about 4Hz and 66Hz (assuming the event handlers don't take longer than 250ms to run).\n private readonly _maxDiff = 300;\n private _waitingCheckerId: number = null!;\n private _playingCheckerId: number = null!;\n\n private _onTimeupdate() {\n this._timeupdate = Date.now();\n\n if (this._playingCheckerId != null) {\n window.clearTimeout(this._playingCheckerId);\n }\n\n if (this._state !== VIDEO_STATE.PLAYING) {\n this._state = VIDEO_STATE.PLAYING;\n this._triggerUpdate();\n }\n\n // todo - add debounce\n this._playingCheckerId = window.setTimeout(() => {\n if (Date.now() - this._timeupdate >= this._maxDiff / 2) {\n this._state = VIDEO_STATE.WAITING;\n this._triggerUpdate();\n }\n }, this._maxDiff);\n\n // if (this._state !== VIDEO_STATE.PLAYING) {\n // this._onPlaying();\n // }\n }\n\n private _onWaiting() {\n if (this._playingCheckerId != null) {\n window.clearTimeout(this._playingCheckerId);\n }\n\n // @ts-ignore\n // _log(`_onWaiting, _timeupdate: ${this._timeupdate}`, true);\n this._state = VIDEO_STATE.WAITING;\n this._triggerUpdate();\n }\n\n private _onPlaying() {\n if (this._playingCheckerId != null) {\n window.clearTimeout(this._playingCheckerId);\n }\n\n // @ts-ignore\n // _log(`_onPlaying, _timeupdate: ${this._timeupdate}`, true);\n this._playingCheckerId = window.setTimeout(() => {\n // @ts-ignore\n // _log(`_onPlaying cb, _timeupdate: ${this._timeupdate}, now: ${Date.now()}, diff: ${Date.now() - this._timeupdate}`, true);\n if (Date.now() - this._timeupdate <= this._maxDiff / 2) {\n // @ts-ignore\n // _log(`_onPlaying if`, true);\n this._state = VIDEO_STATE.PLAYING;\n this._triggerUpdate();\n }\n }, this._maxDiff);\n\n // this._state = VIDEO_STATE.PLAYING;\n // if (this._playingCheckerId != null) {\n // window.clearTimeout(this._playingCheckerId);\n // }\n // this._latestPlayingStamp = this._video.currentTime * 1000;\n // this._latestPlayingDateStamp = new Date().getTime();\n // this._triggerUpdate();\n //\n // // если через 100ms не время не изменится - встаем на паузу\n // // если до исполнения таймера были другие события - то отменять таймер\n // this._playingCheckerId = window.setTimeout(() => {\n // const currentTime = this._video.currentTime * 1000;\n // const diff = currentTime - this._latestPlayingStamp;\n //\n // const timeSpent = new Date().getTime() - this._latestPlayingDateStamp;\n //\n // // @ts-ignore\n // _log(`check, currentTime: ${currentTime}, latestPlayingStamp: ${this._latestPlayingStamp}, diff: ${diff}, timeSpent: ${timeSpent}`, true);\n // if (diff <= (timeSpent / 2)) {\n // this._state = VIDEO_STATE.WAITING;\n // this._triggerUpdate();\n // }\n // }, 100);\n }\n\n private _triggerUpdate() {\n if (this._state === VIDEO_STATE.PLAYING) {\n this._onPlayingCb();\n } else if (this._state === VIDEO_STATE.WAITING) {\n this._onWaitingCb();\n }\n }\n}\n","import { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\nimport { Barcode } from \"./Barcode\";\nimport { Button } from \"./Button\";\nimport { Copy } from \"./Copy\";\nimport { DataInput } from \"./DataInput\";\nimport { DateCountdown } from \"./DateCountdown\";\nimport { Poll } from \"./Poll\";\nimport { PollLayers } from \"./PollLayers\";\nimport { Products } from \"./Products\";\nimport { Quest } from \"./Quest\";\nimport { Quiz } from \"./Quiz\";\nimport { QuizGrouped } from \"./QuizGrouped\";\nimport { RangeSlider } from \"./RangeSlider\";\nimport { Rate } from \"./Rate\";\nimport { Share } from \"./Share\";\nimport { SwipeUpItems } from \"./SwipeUpItems\";\nimport { Test } from \"./Test\";\nimport { Vote } from \"./Vote\";\nimport { Text } from \"./Text\";\nimport { Image } from \"./Image\";\nimport { SwipeUp } from \"./SwipeUp\";\nimport { Video } from \"./Video\";\n\n// export const tryCreateAtLayer = (layerNodeRef: HTMLElement): IElement {\n// const\n// }\n\n// args nodeRef, elementClassName\n\nexport const tryCreateFromHtmlElement = (nodeRef: HTMLElement, layer: Layer, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): IElement | null => {\n const layoutApi = layer.layoutService.layoutApi;\n const layersNodesRefs = layer.slide.layersNodesRefs;\n\n for (let elementClassName of nodeRef.classList.values()) {\n // console.log({ elementClassName });\n switch (elementClassName) {\n //////// base elements ///////\n case Text.className():\n return new Text(nodeRef, layer);\n case Button.className():\n return new Button(nodeRef, layer);\n case Image.className():\n return new Image(nodeRef, layer);\n case SwipeUp.className():\n return new SwipeUp(nodeRef, layer);\n case SwipeUpItems.className():\n return new SwipeUpItems(nodeRef, layer);\n case Video.className():\n return new Video(nodeRef, layer, layoutApi.VideoPlayer, layer.sdkApi);\n //////// widgets ///////\n case Copy.className():\n return layoutApi.widgetCopyApi ? new Copy(nodeRef, layer, layoutApi.widgetCopyApi, onWidgetComplete, sdkApi) : null;\n case Barcode.className():\n return layoutApi.widgetBarcodeApi ? new Barcode(nodeRef, layer, layoutApi.widgetBarcodeApi, onWidgetComplete, sdkApi) : null;\n case DataInput.className():\n return layoutApi.widgetDataInputApi ? new DataInput(nodeRef, layer, layoutApi.widgetDataInputApi, onWidgetComplete, sdkApi) : null;\n case DateCountdown.className():\n return layoutApi.widgetDateCountdownApi\n ? new DateCountdown(nodeRef, layer, layersNodesRefs, layoutApi.widgetDateCountdownApi, onWidgetComplete, sdkApi)\n : null;\n case Poll.className():\n return layoutApi.widgetPollApi ? new Poll(nodeRef, layer, layoutApi.widgetPollApi, onWidgetComplete, sdkApi) : null;\n case PollLayers.className():\n return layoutApi.widgetPollLayersApi\n ? new PollLayers(nodeRef, layer, layersNodesRefs, layoutApi.widgetPollLayersApi, onWidgetComplete, sdkApi)\n : null;\n case Quest.className():\n return layoutApi.widgetQuestApi ? new Quest(nodeRef, layer, layoutApi.widgetQuestApi, onWidgetComplete, sdkApi) : null;\n case Quiz.className():\n return layoutApi.widgetQuizApi ? new Quiz(nodeRef, layer, layoutApi.widgetQuizApi, onWidgetComplete, sdkApi) : null;\n case QuizGrouped.className():\n return layoutApi.widgetQuizGroupedApi ? new QuizGrouped(nodeRef, layer, layoutApi.widgetQuizGroupedApi, onWidgetComplete, sdkApi) : null;\n case RangeSlider.className():\n return layoutApi.widgetRangeSliderApi ? new RangeSlider(nodeRef, layer, layoutApi.widgetRangeSliderApi, onWidgetComplete, sdkApi) : null;\n case Rate.className():\n return layoutApi.widgetRateApi ? new Rate(nodeRef, layer, layoutApi.widgetRateApi, onWidgetComplete, sdkApi) : null;\n case Share.className():\n return layoutApi.widgetShareApi ? new Share(nodeRef, layer, layersNodesRefs, layoutApi.widgetShareApi, onWidgetComplete, sdkApi) : null;\n case Test.className():\n return layoutApi.widgetTestApi ? new Test(nodeRef, layer, layoutApi.widgetTestApi, onWidgetComplete, sdkApi) : null;\n case Vote.className():\n return layoutApi.widgetVoteApi ? new Vote(nodeRef, layer, layoutApi.widgetVoteApi, onWidgetComplete, sdkApi) : null;\n case Products.className():\n return layoutApi.widgetProductsApi ? new Products(nodeRef, layer, layoutApi.widgetProductsApi, onWidgetComplete, sdkApi) : null;\n default:\n break;\n }\n }\n return null;\n};\n\nexport * as WidgetFactory from \"./factory\";\n","import { container } from \"@composition\";\nimport { DEFAULT_SLIDE_DURATION, SDKApi } from \"@skd_api\";\nimport { LayoutService } from \"../layout_service/layout_service\";\nimport { TIMELINE_ACTION } from \"./slide_timeline.h\";\nimport \"../../../global\";\n\nenum TimelineDisabledState {\n disabled,\n enabled,\n}\n\n// use Promise\n// await Promise()\n// call timeLine api\n// promise - slideReadyPromise\n\nexport class SlideTimeline {\n constructor(\n private readonly slideIndex: number,\n private readonly slideDuration: number,\n private readonly slideDisabledTimer: boolean,\n private readonly slideReady: Promise<void>,\n private readonly _afterResumeQueuePush: (cb: () => void) => void,\n private readonly sdkApi: SDKApi\n ) {\n this.timelineDisabledState = this.slideDisabledTimer ? TimelineDisabledState.disabled : TimelineDisabledState.enabled;\n }\n\n private resumedAt = new Date().getTime();\n private timeSpent = 0;\n private timelineDisabledState: TimelineDisabledState;\n private currentState: TIMELINE_ACTION = TIMELINE_ACTION.STOP;\n\n public static get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n private get layoutService(): LayoutService {\n return SlideTimeline.layoutService;\n }\n\n public get isSDKSupportUpdateTimeline(): boolean {\n if (this.sdkApi.isAndroid) {\n return Boolean(SlideTimeline.layoutService.env.Android && \"updateTimeline\" in SlideTimeline.layoutService.env.Android);\n } else if (this.sdkApi.isIOS) {\n const mh = SlideTimeline.layoutService.env?.webkit?.messageHandlers ?? {};\n return \"updateTimeline\" in mh;\n } else if (this.sdkApi.isWeb) {\n return true;\n } else {\n return false;\n }\n }\n\n public get isSdkSupportTimelineOnBeforeStart(): boolean {\n return this.sdkApi.isSdkSupportTimelineOnBeforeStart();\n }\n\n public get index() {\n return this.slideIndex;\n }\n\n public get isTimelineDisabled(): boolean {\n return this.timelineDisabledState === TimelineDisabledState.disabled;\n }\n\n private async updateTimeline(action: TIMELINE_ACTION, showLoader = false, showError = false): Promise<void> {\n // два кейса\n // когда есть слои и у слоя вызываем showLayer который вызывает startTimer до старта слайда, потом start от sdk\n // в итоге два события вместо одного (баг)\n\n // второй кейс - когда заполнили виджет и он вызвал startDisabledTimer\n // в этом случае проверка стейта action === this.currentState не выполнит startTimer (баг)\n\n // можно сделать action_start_timer_disabeld и timer_enabled чтобы это было два разных состояния\n\n // if (action === this.currentState) {\n // return;\n // }\n\n this.currentState = action;\n\n let currentTime = this.timeSpent;\n let duration = this.slideDuration;\n\n // tmp\n // todo брать из модели\n if (!duration) {\n duration = DEFAULT_SLIDE_DURATION;\n }\n\n if (this.timelineDisabledState === TimelineDisabledState.disabled) {\n currentTime = 0;\n duration = 0;\n }\n\n if (currentTime > duration) {\n currentTime = duration;\n }\n\n //@ts-ignore\n // window._log(`updateTimeline 1, a: ${action} ct: ${currentTime} d: ${duration} tds: ${this.timelineDisabledState}`, true);\n\n await this.slideReady.then();\n\n //@ts-ignore\n // window._log(`updateTimeline, a: ${action} ct: ${currentTime} d: ${duration} tds: ${this.timelineDisabledState}`, true);\n // console.trace(`updateTimeline ${action} slideIndex: ${this.slideIndex} currentTime:${currentTime} duration:${duration} tds: ${this.timelineDisabledState}`);\n this.sdkApi.updateTimeline(this.slideIndex, action, currentTime, duration, showLoader, showError);\n }\n\n /**\n * trigger timeline update for new slide in sdk, before slide strat event (prevent timeout in timeline while we wait for video start)\n */\n public triggerSlideLoadState(): void {\n if (this.isSDKSupportUpdateTimeline && this.isSdkSupportTimelineOnBeforeStart) {\n let duration = this.slideDuration;\n\n // tmp\n // todo брать из модели\n if (!duration) {\n duration = DEFAULT_SLIDE_DURATION;\n }\n\n if (this.timelineDisabledState === TimelineDisabledState.disabled) {\n duration = 0;\n }\n\n this.sdkApi.updateTimeline(this.slideIndex, TIMELINE_ACTION.BEFORE_START, 0, duration, false, false);\n }\n }\n\n /**\n * Start timeline after slide started\n * Nothing do if old sdk\n */\n public slideStarted(): void {\n // console.trace(\"slideStarted\");\n if (this.isSDKSupportUpdateTimeline) {\n this.resumedAt = new Date().getTime();\n this.timeSpent = 0; // for case when instance exists, but we return to slide again\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n // nothing to do\n }\n }\n\n public slideRestarted(): void {\n // console.trace(\"slideRestarted\");\n if (this.isSDKSupportUpdateTimeline) {\n this.resumedAt = new Date().getTime();\n this.timeSpent = 0;\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n // nothing to do\n }\n }\n\n /**\n *\n */\n public slidePaused(videoCurrentTime: number | null) {\n // console.trace(\"slidePaused\");\n\n if (this.isSDKSupportUpdateTimeline) {\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n } else {\n const globalCurrentTime = new Date().getTime();\n let spent = globalCurrentTime - this.resumedAt;\n this.timeSpent += spent;\n }\n\n this.updateTimeline(TIMELINE_ACTION.PAUSE);\n } else {\n this.sdkApi.cardPausedCallback(videoCurrentTime);\n }\n }\n\n public slideResumed(videoCurrentTime: number | null) {\n // console.trace(\"slideResumed\");\n // @ts-ignore\n // window._log(`updateTimeline slideResumed ${videoCurrentTime}`, true);\n\n if (this.isSDKSupportUpdateTimeline) {\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n }\n this.resumedAt = new Date().getTime();\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n this.sdkApi.cardResumedCallback(videoCurrentTime);\n }\n }\n\n public slideStopped() {\n // console.trace(\"slideStopped\");\n if (this.isSDKSupportUpdateTimeline) {\n this.updateTimeline(TIMELINE_ACTION.STOP);\n } else {\n }\n }\n\n /**\n * Update timer state (duration from 0 to actual value) and start timeline\n * used by widgets\n */\n public startDisabledTimeline(fallback: () => void) {\n // if app is paused (in background) - don't call start timeline (Android issues)\n // @ts-ignore\n // window._log(`Push startDisabledTimeline to queue at state: ${window.slideApi.state}, time: ${new Date().getTime()}`, true);\n this._afterResumeQueuePush(() => {\n // @ts-ignore\n // window._log(`Call startDisabledTimeline at state: ${window.slideApi.state}, time: ${new Date().getTime()}`, true);\n if (this.isSDKSupportUpdateTimeline) {\n this.timelineDisabledState = TimelineDisabledState.enabled;\n this.timeSpent = 0;\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n // OLD SDK\n fallback();\n }\n });\n }\n\n public onSlideDataWaiting(videoCurrentTime: number | null) {\n // console.trace(\"onSlideDataWaiting\");\n // @ts-ignore\n // window._log(`updateTimeline onSlideDataWaiting ${videoCurrentTime}`, true);\n\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n } else {\n const globalCurrentTime = new Date().getTime();\n let spent = globalCurrentTime - this.resumedAt;\n this.timeSpent += spent;\n }\n this.updateTimeline(TIMELINE_ACTION.PAUSE, true, false);\n }\n\n public onSlideError(videoCurrentTime: number | null) {\n // console.trace(\"onSlideError\");\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n } else {\n const globalCurrentTime = new Date().getTime();\n let spent = globalCurrentTime - this.resumedAt;\n this.timeSpent += spent;\n }\n this.updateTimeline(TIMELINE_ACTION.STOP, false, true);\n }\n}\n","import { IAnimation } from \"@animation\";\nimport { container } from \"@composition\";\nimport { DEFAULT_SLIDE_DURATION, SDKApi } from \"@skd_api\";\nimport { CARD_TYPE } from \"../common_types.h\";\nimport { OnWidgetComplete } from \"../widgets/base\";\nimport { DataInput } from \"./elements/DataInput\";\nimport { WidgetFactory } from \"./elements/factory\";\nimport { Poll } from \"./elements/Poll\";\nimport { PollLayers } from \"./elements/PollLayers\";\nimport { Products } from \"./elements/Products\";\nimport { Quest } from \"./elements/Quest\";\nimport { Quiz } from \"./elements/Quiz\";\nimport { QuizGrouped } from \"./elements/QuizGrouped\";\nimport { RangeSlider } from \"./elements/RangeSlider\";\nimport { Rate } from \"./elements/Rate\";\nimport { Share } from \"./elements/Share\";\nimport { SwipeUp } from \"./elements/SwipeUp\";\nimport { SwipeUpItems } from \"./elements/SwipeUpItems\";\nimport { Test } from \"./elements/Test\";\nimport { Video } from \"./elements/Video\";\nimport { IElement } from \"./IElement\";\nimport { LocalData } from \"./layout.h\";\nimport { LayoutService } from \"./layout_service/layout_service\";\nimport { Slide } from \"./Slide\";\nimport { SlideTimeline } from \"./slide_timeline\";\nimport { Utils } from \"./utils\";\n\nexport const enum ON_SLIDE_STOP_PREPARE_FOR_RESTART {\n UNKNOWN,\n PREPARE,\n NOT_PREPARE,\n}\n\nexport class Layer {\n private readonly _slideIndex: number;\n private readonly _cardId: number;\n private readonly _cardType: CARD_TYPE;\n private readonly _slideCount: number;\n private readonly _duration: number;\n private readonly _disabledTimer: boolean;\n private readonly _disabledNavigation: boolean;\n private _elements: Array<IElement> = [];\n private readonly _timeline: SlideTimeline;\n\n constructor(\n private readonly _nodeRef: HTMLElement,\n private readonly _slide: Slide,\n private readonly _slideReadyPromise: Promise<void>,\n private readonly _afterResumeQueuePush: (cb: () => void) => void,\n private readonly _afterStartInitQueuePush: (cb: () => void) => void,\n private readonly _showNextSlide: (duration: number) => void,\n public readonly sdkApi: SDKApi\n ) {\n this._slideIndex = parseInt(this._nodeRef.getAttribute(\"data-index\") ?? \"0\");\n this._cardId = parseInt(this._nodeRef.getAttribute(\"data-id\") ?? \"0\");\n this._cardType = parseInt(this._nodeRef.getAttribute(\"data-card-type\") ?? \"1\") || CARD_TYPE.STORY;\n this._slideCount = parseInt(this._nodeRef.getAttribute(\"data-slide-count\") ?? \"0\");\n this._duration = parseInt(this._nodeRef.getAttribute(\"data-duration\") ?? \"\") || DEFAULT_SLIDE_DURATION;\n this._disabledTimer = this._nodeRef.getAttribute(\"data-disable-timer\") === \"1\";\n this._disabledNavigation = this._nodeRef.getAttribute(\"data-disable-navigation\") === \"1\";\n this._timeline = new SlideTimeline(\n this._slideIndex,\n this._duration,\n this._disabledTimer,\n this._slideReadyPromise,\n this._afterResumeQueuePush,\n this.sdkApi\n );\n\n const onWidgetComplete: OnWidgetComplete = (cardId, slideIndex) => {\n // todo if nothing more widgets with disabled timers - we can start layer timeline\n\n const fallback = () => this._showNextSlide(DEFAULT_SLIDE_DURATION);\n\n // для android sdk важно чтобы этот метод вызывался только после slide_start\n this._afterStartInitQueuePush(() => {\n this._timeline.startDisabledTimeline(fallback);\n });\n };\n\n const _elementsNodes = this._nodeRef.querySelectorAll<HTMLElement>(\".narrative-slide-elements .narrative-element\");\n let layerWithWidgetQuest = false;\n _elementsNodes.forEach(item => {\n let element: IElement | null = WidgetFactory.tryCreateFromHtmlElement(item, this, onWidgetComplete, this.sdkApi);\n if (element) {\n this._elements.push(element);\n if (element instanceof Quest) {\n layerWithWidgetQuest = true;\n }\n }\n });\n\n // console.log({ _elementsNodes }, this._elements);\n\n /**\n * Special behaviour for widget Quest\n * if current slide/layer without WidgetQuest element explicit but story has type Quest\n * - then init WidgetQuest with layer instead of WidgetQuest element (required for WidgetQuest slides navigation)\n */\n if (this.isQuest && !layerWithWidgetQuest && this.layoutService.layoutApi.widgetQuestApi != null) {\n this._elements.push(new Quest(this._nodeRef, this, this.layoutService.layoutApi.widgetQuestApi, onWidgetComplete, this.sdkApi));\n }\n }\n\n public init(localData: LocalData): Array<Promise<boolean>> {\n if (this.sdkApi.isIOS || this.sdkApi.isAndroid) {\n this._nodeRef.classList.add(\"_app\");\n this.sdkApi.isIOS && this._nodeRef.classList.add(\"_isIos\");\n this.sdkApi.isAndroid && this._nodeRef.classList.add(\"_isAndroid\");\n }\n\n const promises = this._elements.map(element => element.init(localData));\n\n this._initTextElementAutoWidthCorrection();\n this._initTextFit();\n\n return promises;\n }\n\n get nodeRef(): HTMLElement {\n return this._nodeRef;\n }\n\n get elements(): Array<IElement> {\n return this._elements;\n }\n\n get slide(): Slide {\n return this._slide;\n }\n\n get timeline(): SlideTimeline {\n return this._timeline;\n }\n\n public get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n public getLocalData(): Promise<LocalData> {\n return this.sdkApi.getCardLocalData();\n }\n\n public get isQuest(): boolean {\n return this._nodeRef.getAttribute(\"data-quest-count\") != null;\n }\n\n private _initTextFit(): void {\n const textLines = Array.prototype.slice.call(this._nodeRef.querySelectorAll(\".narrative-element-text-wrapper>.narrative-element-text-lines\"));\n TextFit(textLines, {});\n }\n\n private _initTextElementAutoWidthCorrection(): void {\n const textLines = this._nodeRef.querySelectorAll<HTMLElement>(\".narrative-element-text-wrapper>.narrative-element-text-lines\");\n for (const item of textLines) {\n if (item.parentElement) {\n new TextElementAutoWidthCorrection(item.parentElement);\n }\n }\n }\n\n public get slideIndex(): number {\n return this._slideIndex;\n }\n\n public get cardId(): number {\n return this._cardId;\n }\n\n public get cardType(): CARD_TYPE {\n return this._cardType;\n }\n\n public get slideCount(): number {\n return this._slideCount;\n }\n\n public get disabledNavigation(): boolean {\n return this._disabledNavigation;\n }\n\n public get videoElement(): Video | null {\n for (const element of this._elements) {\n if (Video.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get rangeSliderElement(): RangeSlider | null {\n for (const element of this._elements) {\n if (RangeSlider.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get quizElement(): Quiz | null {\n for (const element of this._elements) {\n if (Quiz.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get quizGroupedElement(): QuizGrouped | null {\n for (const element of this._elements) {\n if (QuizGrouped.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get questElement(): Quest | null {\n for (const element of this._elements) {\n if (Quest.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get testElement(): Test | null {\n for (const element of this._elements) {\n if (Test.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get dataInputElement(): DataInput | null {\n for (const element of this._elements) {\n if (DataInput.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get pollElement(): Poll | null {\n for (const element of this._elements) {\n if (Poll.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get pollLayersElement(): PollLayers | null {\n for (const element of this._elements) {\n if (PollLayers.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get rateElement(): Rate | null {\n for (const element of this._elements) {\n if (Rate.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get shareElement(): Share | null {\n for (const element of this._elements) {\n if (Share.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get swipeUpElement(): SwipeUp | null {\n for (const element of this._elements) {\n if (SwipeUp.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get swipeUpItemsElement(): SwipeUpItems | null {\n for (const element of this._elements) {\n if (SwipeUpItems.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get productsElement(): Products | null {\n for (const element of this._elements) {\n if (Products.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public isClickCapturedBySlider(): boolean {\n return (this.rangeSliderElement?.isClickCapturedBySlider ?? false) || (this.productsElement?.isClickCapturedByWidget ?? false);\n }\n\n private _animationPauseCb: ReturnType<IAnimation[\"start\"]>;\n private _animationResumeCb: () => void;\n\n public async start(muted = true): Promise<{ currentTime: number }> {\n const videoElement = this.videoElement;\n let currentTime = 0;\n if (videoElement != null) {\n let videoLoop = false;\n if (this.timeline.isTimelineDisabled) {\n videoLoop = true;\n }\n currentTime = (await videoElement.start(muted, videoLoop)).currentTime;\n }\n\n if (this.sdkApi.cardAnimation) {\n this._animationPauseCb = this.sdkApi.cardAnimation.start(this._nodeRef);\n }\n\n for (const element of this._elements) {\n element.onStart();\n }\n\n for (const element of this._elements) {\n element.onResume();\n }\n\n // skip start timeline if we returned to slide with enabled timer and opened WidgetProducts modal\n if (!this.isLayerForcePaused) {\n this.timeline.slideStarted();\n }\n\n return { currentTime };\n }\n\n public async stop(options: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n this.videoElement?.stop(options);\n this.sdkApi.cardAnimation?.stop(this._nodeRef);\n for (const element of this._elements) {\n element.onPause();\n }\n for (const element of this._elements) {\n element.onStop();\n }\n this._timeline.slideStopped();\n }\n\n public stopInternal(options: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n this.videoElement?.stop(options);\n this.sdkApi.cardAnimation?.stop(this._nodeRef);\n for (const element of this._elements) {\n element.onPause();\n }\n for (const element of this._elements) {\n element.onStop();\n }\n }\n\n public async pause(resetVideoTime = false, stopAnimation = false): Promise<{ currentTime: number | null }> {\n return new Promise(resolve => {\n const cb = () => {\n let currentTime: number | null = this.videoElement?.pause(resetVideoTime) ?? null;\n\n if (stopAnimation) {\n this.sdkApi.cardAnimation?.stop(this._nodeRef);\n } else {\n if (this._animationPauseCb != null && Utils.isFunction(this._animationPauseCb)) {\n this._animationResumeCb = this._animationPauseCb(false);\n }\n }\n\n if (currentTime != null) {\n currentTime *= 1000;\n }\n\n for (const element of this._elements) {\n element.onPause();\n }\n\n this.timeline.slidePaused(currentTime);\n\n resolve({ currentTime });\n };\n\n const videoStartedPromise = this.videoElement?.videoStartedPromise;\n if (videoStartedPromise != null && videoStartedPromise.then != null) {\n videoStartedPromise.then(cb);\n } else {\n cb();\n }\n });\n }\n\n public async resume() {\n return new Promise(resolve => {\n const cb = ({ currentTime }: { currentTime: number | null }) => {\n // console.log(\"resumed cb with currentTime\", { currentTime });\n\n if (currentTime != null) {\n currentTime *= 1000;\n }\n\n if (Utils.isFunction(this._animationResumeCb)) {\n this._animationResumeCb();\n }\n\n for (const element of this._elements) {\n element.onResume();\n }\n\n this.timeline.slideResumed(currentTime);\n\n resolve({ currentTime });\n };\n\n const videoStartedPromise = this.videoElement?.resume();\n if (videoStartedPromise != null && videoStartedPromise.then != null) {\n videoStartedPromise.then(cb);\n } else {\n cb({ currentTime: null });\n }\n });\n }\n\n public enableAudio() {\n this.videoElement?.enableAudio();\n }\n\n public disableAudio() {\n this.videoElement?.disableAudio();\n }\n\n public onBeforeUnmount(): void {\n for (const element of this._elements) {\n element.onBeforeUnmount();\n }\n }\n\n public get isLayerForcePaused(): boolean {\n return this.elements.some(element => element.isLayerForcePaused);\n }\n}\n\nconst TextFit = (function () {\n \"use strict\";\n\n const defaultSettings = {\n step: 1,\n maxSteps: 100,\n };\n\n const hasOwnProperty = Object.prototype.hasOwnProperty;\n\n return function textFit(els: Array<HTMLElement>, options: Record<string, any>) {\n if (!options) options = {};\n\n // Extend options.\n let settings = {};\n for (let key in defaultSettings) {\n if (hasOwnProperty.call(options, key)) {\n // @ts-ignore\n settings[key] = options[key];\n } else {\n // @ts-ignore\n settings[key] = defaultSettings[key];\n }\n }\n\n // Support passing a single el\n let elType = Object.prototype.toString.call(els);\n if (elType !== \"[object Array]\" && elType !== \"[object NodeList]\" && elType !== \"[object HTMLCollection]\") {\n // @ts-ignore\n els = [els];\n }\n\n // Process each el we've passed.\n for (let i = 0; i < els.length; i++) {\n processItem(els[i], settings);\n }\n };\n\n function processItem(el: HTMLElement, settings: Record<string, any>) {\n if (!isElement(el) || el.getAttribute(\"textFitted\")) {\n return false;\n }\n\n let parentHeight, parent;\n let low, high;\n\n parent = el.parentElement;\n if (!isElement(parent)) {\n return false;\n }\n\n // Get element data.\n parentHeight = innerHeight(parent);\n\n // Don't process if we can't find box dimensions\n if (parentHeight <= 0) {\n console.warn(`Set a static height and width on the target element ${el.outerHTML} before using textFit!`, el);\n return;\n }\n\n // Set textFitted attribute so we know this was processed.\n el.setAttribute(\"textFitted\", \"1\");\n\n let step = settings.step;\n\n high = parseFloat(window.getComputedStyle(el).fontSize);\n low = high - step * settings.maxSteps;\n let size = high;\n if (size < low) return;\n while (size >= low) {\n let elBoundingClientRect = el.getBoundingClientRect();\n if (elBoundingClientRect.height > parentHeight) {\n size -= step;\n el.style.fontSize = size + \"px\";\n } else {\n break;\n }\n }\n }\n\n // Calculate height without padding.\n // @ts-ignore\n function innerHeight(el) {\n let style = window.getComputedStyle(el, null);\n return el.getBoundingClientRect().height - parseInt(style.getPropertyValue(\"padding-top\"), 10) - parseInt(style.getPropertyValue(\"padding-bottom\"), 10);\n }\n\n //Returns true if it is a DOM element\n // @ts-ignore\n function isElement(o) {\n return typeof HTMLElement === \"object\"\n ? o instanceof HTMLElement //DOM2\n : o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\";\n }\n})();\n\nclass TextElementAutoWidthCorrection {\n // wrapper (flex row)\n // lead | text | tail //\n // wrapper (flex row)\n\n // text - can be multiline, use overflow-wrap: anywhere - for overflow prevent\n // iOS 17.5 break text on second line despite on enough space\n // fix it - detect and set min-width + max-width for text element\n\n private readonly leadWidth: number = null!;\n private readonly tailWidth: number = null!;\n private columnGap: number = null!;\n private wrapperInnerWidth: number = null!;\n\n //Returns true if it is a DOM element\n // @ts-ignore\n private isElement(o: HTMLElement | Element): boolean {\n return typeof HTMLElement === \"object\"\n ? o instanceof HTMLElement //DOM2\n : o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\";\n }\n\n private computeWrapperSize(): void {\n const { columnGap, width, paddingLeft, paddingRight } = window.getComputedStyle(this.textWrapperRef, null);\n this.columnGap = parseFloat(columnGap);\n this.wrapperInnerWidth = parseFloat(width) - parseFloat(paddingLeft) - parseFloat(paddingRight);\n }\n\n private measureTextWidth(\n text: string,\n {\n fontSize,\n fontWeight,\n fontStyle,\n fontFamily,\n }: {\n fontSize: string;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n }\n ): number {\n let textRef = document.createElement(\"div\");\n\n textRef.style.setProperty(\"font-size\", fontSize);\n textRef.style.setProperty(\"font-weight\", fontWeight);\n textRef.style.setProperty(\"font-style\", fontStyle);\n textRef.style.setProperty(\"font-family\", fontFamily);\n textRef.style.setProperty(\"position\", \"absolute\");\n textRef.style.setProperty(\"left\", \"-1000px\");\n textRef.style.setProperty(\"top\", \"-1000px\");\n textRef.style.setProperty(\"white-space\", \"nowrap\");\n // textRef.style.setProperty(\"visibility\", \"hidden\");\n\n textRef.textContent = text;\n\n document.body.appendChild(textRef);\n\n const textWidth = parseFloat(window.getComputedStyle(textRef, null).width);\n\n document.body.removeChild(textRef);\n // @ts-ignore\n textRef = null;\n\n return textWidth;\n }\n\n constructor(private readonly textWrapperRef: HTMLElement) {\n const leadRef = textWrapperRef.querySelector<HTMLElement>(\".narrative-element-text-lines-lead\");\n const tailRef = textWrapperRef.querySelector<HTMLElement>(\".narrative-element-text-lines-tail\");\n const textRef = textWrapperRef.querySelector<HTMLElement>(\".narrative-element-text-lines\");\n\n if (leadRef && tailRef && textRef) {\n if (!this.isElement(textRef) || textRef.getAttribute(\"textWidthCorrected\")) {\n return;\n }\n\n // Set textFitted attribute so we know this was processed.\n textRef.setAttribute(\"textWidthCorrected\", \"1\");\n\n this.computeWrapperSize();\n this.leadWidth = leadRef.clientWidth;\n this.tailWidth = tailRef.clientWidth;\n\n const textMaxWidth =\n this.wrapperInnerWidth -\n this.leadWidth -\n this.columnGap * (this.leadWidth ? 1 : 0) -\n this.tailWidth -\n this.columnGap * (this.tailWidth ? 1 : 0);\n\n const { fontSize, fontFamily, fontWeight, fontStyle } = window.getComputedStyle(textRef, null);\n\n const textMinWidth = Math.min(\n this.measureTextWidth(textRef.textContent ?? \"\", {\n fontSize,\n fontFamily,\n fontWeight,\n fontStyle,\n }),\n textMaxWidth\n );\n\n // setTimeout(() => {\n // console.log({\n // textMaxWidth,\n // textMinWidth,\n // columnGap: this.columnGap,\n // leadWidth: this.leadWidth,\n // tailWidth: this.tailWidth,\n // wrapperInnerWidth: this.wrapperInnerWidth,\n // });\n // }, 10 * 1000);\n\n textRef.style.setProperty(\"min-width\", `${textMinWidth}px`);\n textRef.style.setProperty(\"max-width\", `${textMaxWidth}px`);\n }\n }\n}\n","import { container } from \"@composition\";\nimport { SDKApi } from \"@skd_api\";\nimport { CARD_TYPE } from \"../common_types.h\";\nimport { Layer, ON_SLIDE_STOP_PREPARE_FOR_RESTART } from \"./Layer\";\nimport { LocalData } from \"./layout.h\";\nimport { LayoutService } from \"./layout_service/layout_service\";\n\nexport class Slide {\n private readonly _layers: Array<Layer>;\n private _start: number;\n\n constructor(\n private readonly _slidesNodesRefs: Array<HTMLElement>,\n private readonly _slideReadyPromise: Promise<void>,\n private readonly _afterResumeQueuePush: (cb: () => void) => void,\n private readonly _afterStartInitQueuePush: (cb: () => void) => void,\n private readonly _showNextSlide: (duration: number) => void,\n public readonly sdkApi: SDKApi\n ) {\n this._start = window.performance.now();\n\n if (!this._slidesNodesRefs.length) {\n throw new Error(\"No slides found.\");\n }\n\n this._layers = this._slidesNodesRefs.map(\n item => new Layer(item, this, this._slideReadyPromise, this._afterResumeQueuePush, this._afterStartInitQueuePush, this._showNextSlide, this.sdkApi)\n );\n this._activeLayer = this._layers[0];\n }\n\n private _activeLayer: Layer;\n get activeLayer(): Layer {\n return this._activeLayer;\n }\n\n get layers(): Array<Layer> {\n return this._layers;\n }\n\n get layersNodesRefs(): Array<HTMLElement> {\n return this._slidesNodesRefs;\n // call from Slide CTOR -> exception, bcz this._layers is empty\n // return this._layers.map(layer => layer.nodeRef);\n }\n\n private _initMultiSlide(localData: LocalData): void {\n const multiSlideApi = this.layoutService.layoutApi.widgetMultiSlideApi;\n if (multiSlideApi != null && this.layers.length > 1) {\n try {\n multiSlideApi.init(this.layersNodesRefs, localData, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n public async init(localData: LocalData): Promise<boolean> {\n this._initMultiSlide(localData);\n\n const promises = this.layers.flatMap(layer => layer.init(localData));\n\n const res = await Promise.all(promises);\n\n // rescan current slide\n this.refreshActiveLayer();\n\n // if not all true - return false\n // if not all Widgets return finishRender: true - return false\n return !res.some(item => item === false);\n }\n\n public refreshActiveLayer(): void {\n this.layers.forEach(layer => {\n if (!layer.nodeRef.classList.contains(\"hidden\")) {\n this._activeLayer = layer;\n }\n });\n }\n\n public showLayer(showIndex: number, muted?: boolean): void {\n // todo allow to call only if Layer in state LAYER_STATE::STARTED\n\n // hotfix (VOD and showLayer issue) - just skip showLayer for already visible layer\n // if (this.layers[showIndex] != null && this.layers[showIndex].nodeRef != null && !this.layers[showIndex].nodeRef.classList.contains(\"hidden\")) {\n // console.log(\"hotfix (VOD and showLayer issue) - just skip showLayer for already visible layer\");\n // return;\n // }\n\n // console.log(`showLayer: ${showIndex}`);\n\n // first - stop (for correct timeline calls)\n this.layers.forEach((layer, index) => {\n // const isHidden = layer.nodeRef.classList.contains(\"hidden\");\n if (index !== showIndex) {\n layer.nodeRef.classList.add(\"hidden\");\n layer.stop({ prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART.PREPARE });\n }\n });\n\n this.layers.forEach((layer, index) => {\n // const isHidden = layer.nodeRef.classList.contains(\"hidden\");\n if (index === showIndex) {\n this._activeLayer = layer;\n layer.nodeRef.classList.remove(\"hidden\");\n layer.start(muted);\n }\n });\n }\n\n public onBeforeUnmount(): void {\n for (const layer of this._layers) {\n layer.onBeforeUnmount();\n }\n }\n\n public get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n public get slideIndex(): number {\n return this._activeLayer.slideIndex;\n }\n public get cardId(): number {\n return this._activeLayer.cardId;\n }\n\n public get cardType(): CARD_TYPE {\n return this._activeLayer.cardType;\n }\n\n public get slideCount(): number {\n return this._activeLayer.slideCount;\n }\n\n public get disabledNavigation(): boolean {\n return this._activeLayer.disabledNavigation;\n }\n}\n","import { container } from \"@composition\";\nimport { FontDTO, SDKApi } from \"@skd_api\";\nimport { proxy } from \"@utils\";\nimport { CARD_TYPE } from \"../common_types.h\";\nimport { Layer, ON_SLIDE_STOP_PREPARE_FOR_RESTART } from \"./Layer\";\nimport { LocalData } from \"./layout.h\";\nimport { LayoutService } from \"./layout_service/layout_service\";\nimport { Slide } from \"./Slide\";\nimport { Utils } from \"./utils\";\n\nconst enum STATE {\n INIT,\n INITED,\n START,\n STARTED,\n RESUME,\n RESUMED,\n PAUSE,\n PAUSED,\n FORCE_PAUSED,\n STOP,\n STOPPED,\n}\n\nexport class SlideApi {\n public get layoutDirection(): \"ltr\" | \"rtl\" {\n // warning, detection in ctor not working, bcz sdk changes layout later\n return this.layoutService.env.getComputedStyle(this._slideWrapper).direction === \"rtl\" ? \"rtl\" : \"ltr\";\n }\n\n private static renderedBoxClassName = \"narrative-slide-box-rendered\";\n private static prerenderBoxClassName = \"narrative-slide-box-prerender\";\n\n private readonly _slideWrapper: HTMLElement;\n private readonly _viewport: Window;\n private readonly _getViewportWidth: () => number;\n private readonly _getViewportHeight: () => number;\n private readonly _overlappingActionBarHeight: number;\n\n public readonly sdkApi: SDKApi;\n\n constructor(\n private readonly config: {\n sdkApi: SDKApi;\n slideWrapper: HTMLElement;\n viewport: Window;\n userResizeHandler?: (data: { viewportWidth: number; viewportHeight: number; fontSize: number }) => void;\n slideRatio: number;\n isFullscreen: boolean;\n slideLoadedCb?: (data: { slide: Slide; result: boolean; reason?: string }) => void;\n getViewportWidth: () => number;\n getViewportHeight: () => number;\n overlappingActionBarHeight?: number;\n }\n ) {\n this.sdkApi = config.sdkApi;\n this._slideWrapper = config.slideWrapper;\n this._viewport = config.viewport;\n this._getViewportWidth = config.getViewportWidth;\n this._getViewportHeight = config.getViewportHeight;\n this._overlappingActionBarHeight = config.overlappingActionBarHeight ?? 0;\n\n this.refreshSizes = proxy(this.refreshSizes, this);\n\n this.initListeners();\n\n this.refreshSizes();\n\n const slideBox = document.getElementById(\"narrative-slide-box\");\n // todo via first child and its innerText - faster variant\n if (slideBox && slideBox.innerText.trim() !== \"{%content}\".replace(\"{\", \"{{\").replace(\"}\", \"}}\")) {\n this._slideInInit = null;\n this._slideInRender = true;\n this._init(\n () => this._slideBoxRenderComplete(null),\n () => this._slideBoxRenderError(null)\n ).then(({ slide, result, reason }) => {\n this._slide = slide;\n if (config.slideLoadedCb != null) {\n config.slideLoadedCb({ slide, result, reason });\n }\n });\n }\n }\n\n public destroy() {\n if (this.slide != null) {\n this.slide.onBeforeUnmount();\n }\n this.destroyListeners();\n }\n\n private initListeners(): void {\n this._viewport.addEventListener(\"resize\", this.refreshSizes);\n }\n\n private destroyListeners(): void {\n this._viewport.removeEventListener(\"resize\", this.refreshSizes);\n }\n\n private refreshSizes() {\n const viewportWidth = this._getViewportWidth();\n const viewportHeight = this._getViewportHeight();\n const viewportRatio = viewportWidth / viewportHeight;\n let slideWidth = 0;\n let slideHeight = 0;\n // _ratio = 310 / 480,\n const _ratio = this.config.slideRatio;\n let _isFullscreen = this.config.isFullscreen;\n const slideOffset = this._slideWrapper.querySelector<HTMLElement>(\".narrative-slide-offset\");\n let offset = 0;\n let xOffset = \"0px\";\n // for elements with bottom anchor (absolute position)\n let yOffset = \"0px\";\n\n // alert(viewportHeight);\n\n if (viewportRatio > _ratio) {\n // disable _isFullscreen if viewport small\n _isFullscreen = false;\n }\n\n if (_isFullscreen) {\n // fit by width, top and bottom - to offscreen or fill with bg image\n slideWidth = viewportWidth;\n slideHeight = Math.ceil(viewportWidth / _ratio);\n offset = Math.ceil(slideHeight - viewportHeight) / 2;\n\n if (slideOffset != null) {\n slideOffset.style.margin = -1 * offset + \"px\" + \" 0 \";\n }\n // offset from viewport bottom to StoryBottom plus safe area offset bottom\n yOffset = `calc(${offset + this._overlappingActionBarHeight}px + env(safe-area-inset-bottom))`;\n // detect safe area offset\n } else {\n // более квадратное чем надо\n if (viewportRatio > _ratio) {\n // fit by width, top and bottom - to offscreen\n slideWidth = viewportWidth;\n slideHeight = Math.ceil(viewportWidth / _ratio);\n offset = Math.ceil(slideHeight - viewportHeight) / 2;\n\n if (slideOffset != null) {\n slideOffset.style.margin = -offset + \"px\" + \" 0 \";\n }\n yOffset = offset + this._overlappingActionBarHeight + \"px\";\n } else {\n // вьюпорт более вытянутый чем надо\n // fit by height, sides - to offscreen\n slideHeight = viewportHeight;\n slideWidth = Math.ceil(slideHeight * _ratio);\n offset = Math.ceil(slideWidth - viewportWidth) / 2;\n if (slideOffset != null) {\n slideOffset.style.margin = \"0 \" + -offset + \"px\"; // -8.5\n }\n xOffset = offset + \"px\";\n }\n }\n\n const fontSize = slideWidth / 20;\n // todo CSP violation\n this._slideWrapper.style.fontSize = fontSize + \"px\";\n\n if (slideOffset != null) {\n // todo CSP violation\n slideOffset.style.setProperty(\"--y-offset\", yOffset);\n slideOffset.style.setProperty(\"--x-offset\", xOffset);\n }\n\n if (_isFullscreen) {\n slideOffset?.classList.add(\"narrative-slide-offset-fullscreen\");\n }\n\n if (this.config.userResizeHandler != null) {\n this.config.userResizeHandler({ viewportWidth, viewportHeight, fontSize });\n }\n }\n\n public async showSlide(html: string): Promise<{ slide: Slide; result: boolean; reason?: string }> {\n const slideBox = this._slideWrapper.querySelector(`.${SlideApi.renderedBoxClassName}`);\n const slideBoxPrerender = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName}`);\n const _result: {\n slide: Slide;\n result: boolean;\n reason?: string;\n } = { slide: this.slide, result: false, reason: \"\" };\n\n if (slideBox && slideBoxPrerender) {\n if (this._slideInRender) {\n this._slideInRender = false;\n this._slideBoxRenderComplete(null);\n }\n\n this._slideInInit = null;\n this._slideInRender = true;\n\n slideBoxPrerender.innerHTML = html;\n const prevSlide: Slide | null = this.slide ? Object.assign(Object.create(Object.getPrototypeOf(this.slide)), this.slide) : null;\n const { slide, result, reason } = await this._init(\n () => this._slideBoxRenderComplete(prevSlide),\n () => this._slideBoxRenderError(prevSlide)\n );\n this._slide = slide;\n _result.result = result;\n _result.reason = reason;\n }\n _result.slide = this.slide;\n return _result;\n }\n\n public handleBackpress(): void {\n this.activeLayer.productsElement?.handleBackpress();\n }\n\n private get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n private getLocalData(): Promise<LocalData> {\n return this.sdkApi.getCardLocalData();\n }\n\n private _fontsInit = false;\n\n private _initAndLoadFonts(fonts: Array<FontDTO>): Promise<void> {\n if (this._fontsInit) {\n return Promise.resolve();\n }\n return new Promise(resolve => {\n if (\"fonts\" in document) {\n // https://developer.mozilla.org/en-US/docs/Web/API/CSS_Font_Loading_API\n const promises: Array<Promise<FontFace>> = [];\n try {\n if (fonts != null && Array.isArray(fonts)) {\n for (let i = 0; i < fonts.length; i++) {\n const src = fonts[i];\n if (src && src.family && src.style && src.weight && src.url) {\n // var font = new FontFace(fonts[i].family, \"url(\" + src.url + \"&s=css_font_face)\", {\n const font = new FontFace(fonts[i].family, \"url(\" + src.url + \")\", {\n style: src.style,\n weight: src.weight,\n // display: \"block\"\n });\n document.fonts.add && document.fonts.add(font);\n promises.push(font.load());\n }\n }\n }\n\n this._fontsInit = true;\n Promise.all(promises)\n .then(_ => {\n resolve();\n })\n .catch(reason => {\n console.error(reason);\n resolve();\n });\n } catch (e) {\n console.error(e);\n resolve();\n }\n }\n });\n }\n\n private _slide: Slide;\n private _slideInInit: Slide | null;\n private _state: STATE;\n private _afterStartInitQueue: Array<() => void> = [];\n private _afterResumeQueue: Array<() => void> = [];\n\n public get state(): STATE {\n return this._state;\n }\n\n private async _onAllMediaLoaded(slide: Slide): Promise<void> {\n return new Promise((resolve, reject) => {\n const promises = slide.layers.flatMap(layer => layer.elements.flatMap(element => element.mediaElementsLoadingPromises));\n\n console.log({ promises });\n\n let checkerTimerId: number | undefined = undefined;\n let timeOutFired = false;\n if (promises.length > 0) {\n checkerTimerId = this.layoutService.env.setTimeout(() => {\n timeOutFired = true;\n reject(\"onAllMediaLoaded timeout\");\n }, 3000);\n } else {\n resolve();\n return;\n }\n Promise.all(promises).then(\n _ => {\n checkerTimerId && this.layoutService.env.clearTimeout(checkerTimerId);\n if (!timeOutFired) {\n resolve();\n }\n },\n reason => {\n checkerTimerId && this.layoutService.env.clearTimeout(checkerTimerId);\n if (!timeOutFired) {\n reject(reason);\n }\n }\n );\n });\n }\n\n private async _init(\n slideBoxCb: () => void,\n slideBoxFailedCb: () => void\n ): Promise<{\n slide: Slide;\n result: boolean;\n reason?: string;\n }> {\n this._state = STATE.INIT;\n\n const slideNodeRef = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName} .narrative-slide`);\n const slidesNodesRefs = Array.prototype.slice.call(\n this._slideWrapper.querySelectorAll(`.${SlideApi.prerenderBoxClassName} .narrative-slide.narrative-multi-slide`)\n );\n\n if (!slidesNodesRefs.length && slideNodeRef != null) {\n slidesNodesRefs.push(slideNodeRef);\n }\n\n if (!slidesNodesRefs.length) {\n throw new Error(\"No slides found.\");\n }\n\n let slideReadyResolve: () => void = null!;\n let slideReadyReject: () => void = null!;\n const slideReadyPromise = new Promise<void>((resolve, reject) => {\n slideReadyResolve = resolve;\n slideReadyReject = reject;\n });\n\n const slide = new Slide(\n slidesNodesRefs,\n slideReadyPromise,\n this.afterResumeQueuePush.bind(this),\n this.afterStartInitQueuePush.bind(this),\n this.sdkApi.showNextSlide.bind(this),\n this.sdkApi\n );\n this._slideInInit = slide;\n\n slide.activeLayer.timeline.triggerSlideLoadState();\n\n const onAllMediaLoaded = this._onAllMediaLoaded(slide);\n\n if (this.sdkApi.isAndroid) {\n this._afterStartInitQueue = [];\n }\n this._afterResumeQueue = [];\n\n const result: { slide: Slide; result: boolean; reason?: string } = { slide, result: false, reason: \"\" };\n\n await this._initAndLoadFonts(this.sdkApi.getCardFonts());\n const localData = await this.getLocalData();\n const finishRender = await slide.init(localData);\n /**\n * если есть виджеты, которых надо ждать - то не завершаем рендеринг текущего слайда\n * пример - квест, если зашли в сторис а виджету нужно показать другой слайд вместо первого\n */\n if (finishRender) {\n this._state = STATE.INITED;\n\n try {\n await onAllMediaLoaded;\n result.result = true;\n slideBoxCb();\n this.layoutService.env.setTimeout(() => {\n slideReadyResolve();\n });\n } catch (reason) {\n console.log(\"SlideInit, onAllMediaLoaded reject\", reason);\n slideBoxFailedCb();\n this.layoutService.env.setTimeout(() => {\n slideReadyReject();\n });\n result.result = false;\n result.reason = String(reason);\n }\n } else {\n this._state = STATE.STOPPED;\n this.layoutService.env.setTimeout(() => {\n slideReadyResolve();\n });\n result.result = true;\n }\n\n return result;\n }\n\n private _slideInRender = false;\n\n private _slideBoxRenderComplete(prevSlide: Slide | null): void {\n if (!this._slideInRender) {\n this._slideInRender = true;\n return;\n }\n const slideBox = this._slideWrapper.querySelector(`.${SlideApi.renderedBoxClassName}`);\n const slideBoxPrerender = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName}`);\n\n if (slideBox && slideBoxPrerender) {\n slideBoxPrerender.classList.remove(SlideApi.prerenderBoxClassName);\n slideBox.classList.remove(SlideApi.renderedBoxClassName);\n\n slideBox.classList.add(SlideApi.prerenderBoxClassName);\n // 2 RAF - wait for browser render complete (CSS changes, etc.)\n this.layoutService.env.requestAnimationFrame(() => {\n this.layoutService.env.requestAnimationFrame(() => {\n prevSlide?.onBeforeUnmount();\n // @ts-ignore\n // _log(\"clear innerHTML\", true);\n slideBox.innerHTML = \"\";\n });\n });\n slideBoxPrerender.classList.add(SlideApi.renderedBoxClassName);\n }\n this._slideInRender = false;\n }\n\n private _slideBoxRenderError(prevSlide: Slide | null): void {\n // if (!slideInRender) {\n // slideInRender = true;\n // return;\n // }\n const slideBox = this._slideWrapper.querySelector(`.${SlideApi.renderedBoxClassName}`);\n const slideBoxPrerender = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName}`);\n\n if (slideBox && slideBoxPrerender) {\n const slides = Array.prototype.slice.call(slideBoxPrerender.querySelectorAll(\".narrative-slide\"));\n for (let i = 0; i < slides.length; ++i) {\n const slide = slides[i];\n if (slide) {\n slide.innerHTML = \"\";\n }\n }\n\n slideBoxPrerender.classList.remove(SlideApi.prerenderBoxClassName);\n slideBox.classList.remove(SlideApi.renderedBoxClassName);\n\n slideBox.classList.add(SlideApi.prerenderBoxClassName);\n prevSlide?.onBeforeUnmount();\n slideBox.innerHTML = \"\";\n slideBoxPrerender.classList.add(SlideApi.renderedBoxClassName);\n }\n // slideInRender = false;\n }\n\n private _slideConfig: { muted?: boolean } = {};\n\n public async slideStart(config: { muted?: boolean }): Promise<{ currentTime: number }> {\n // console.log(`slideStart slideIdx: ${this.activeLayer.slideIndex} state: ${this._state}`);\n if (!(this._state === STATE.STOPPED || this._state === STATE.INITED)) {\n return { currentTime: 0 };\n }\n this._state = STATE.START;\n\n this._slideConfig = config;\n\n // start deferred fncs from widgets\n // important - Android only\n if (this.sdkApi.isAndroid && this._afterStartInitQueue && Array.isArray(this._afterStartInitQueue)) {\n for (const job of this._afterStartInitQueue) {\n if (Utils.isFunction(job)) {\n job();\n }\n }\n this._afterStartInitQueue = [];\n }\n\n if (this._afterResumeQueue && Array.isArray(this._afterResumeQueue)) {\n for (const job of this._afterResumeQueue) {\n if (Utils.isFunction(job)) {\n job();\n }\n }\n this._afterResumeQueue = [];\n }\n\n const { currentTime } = await this.slide.activeLayer.start(this._slideConfig.muted);\n\n this._state = STATE.STARTED;\n\n if (this.slide.activeLayer.isLayerForcePaused) {\n this._state = STATE.PAUSED;\n }\n\n return { currentTime };\n }\n\n public async slideRestart(config: { muted?: boolean }): Promise<{ currentTime: number }> {\n this._state = STATE.STOPPED;\n return this.slideStart(config);\n }\n\n private _pauseCbTimer: number | null = null;\n\n public async slidePause() {\n if (!(this._state === STATE.STARTED || this._state === STATE.RESUMED)) {\n return;\n }\n\n // обход бага на андроиде (вызывает pause/resume при любом нажатии на экран, даже если это клик - для перехода по слайдам)\n // поэтому делаем отложенный вызов (300мс) а если следом приходит stop - то отменяем таймер\n\n const pauseCb = () => {\n if (!(this._state === STATE.STARTED || this._state === STATE.RESUMED)) {\n return;\n }\n\n if (this.slide.activeLayer.isClickCapturedBySlider()) {\n // stop pause event (from sdk) if _narrative_range_slider is active\n return;\n }\n\n this._state = STATE.PAUSE;\n\n // _log(\"pause: \" + (performance.now() - window.start));\n\n this.slide.activeLayer.pause(false, false);\n\n // clean up\n if (this._pauseCbTimer != null) {\n clearTimeout(this._pauseCbTimer);\n }\n\n this._state = STATE.PAUSED;\n };\n\n if (this.sdkApi.isAndroid) {\n this._pauseCbTimer = this.layoutService.env.setTimeout(pauseCb, 300);\n } else {\n pauseCb();\n }\n }\n\n public async slideResume() {\n if (this._pauseCbTimer != null) {\n // отменяем pause если есть (баг андроида - шлет pause/resume на простой клик)\n clearTimeout(this._pauseCbTimer);\n }\n\n if (this._state !== STATE.PAUSED) {\n return;\n }\n this._state = STATE.RESUME;\n // _log(\"resume: \" + (performance.now() - window.start));\n\n if (this._afterResumeQueue && Array.isArray(this._afterResumeQueue)) {\n for (const job of this._afterResumeQueue) {\n if (Utils.isFunction(job)) {\n job();\n }\n }\n this._afterResumeQueue = [];\n }\n\n this.slide.activeLayer.resume();\n\n this._state = STATE.RESUMED;\n }\n\n public async slideStop(options: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n if (!(this._state === STATE.STARTED || this._state === STATE.RESUMED || this._state === STATE.PAUSED)) {\n return;\n }\n this._state = STATE.STOP;\n\n if (this._pauseCbTimer != null) {\n // отменяем pause если есть (баг андроида - шлет pause/resume на простой клик)\n clearTimeout(this._pauseCbTimer);\n }\n\n await this.slide.activeLayer.stop(options);\n\n this._state = STATE.STOPPED;\n }\n\n public slideTimerEnd() {\n const defaultAction = () => {\n const nextSlideIndex = this.slide.slideIndex + 1;\n if (nextSlideIndex >= 0 && nextSlideIndex < this.slide.slideCount) {\n this.sdkApi.showCardSlide(nextSlideIndex);\n } else {\n this.sdkApi.cardShowNext();\n }\n };\n\n if (this.activeLayer.questElement) {\n const slideIndex = this.slide.slideIndex;\n const slideCount = this.slide.slideCount;\n const { continueDefaultNavigation } = this.activeLayer.questElement.handleRouteClick({\n // handleRouteTrigger\n direction: \"forward\",\n slideIndex: slideIndex,\n slideCount: slideCount,\n });\n if (continueDefaultNavigation) {\n // default action\n defaultAction();\n }\n return;\n }\n\n defaultAction();\n }\n\n // for call from SlideApi internals (from widgets)\n // skip state checking and sdk issues\n public async slidePauseUI(): Promise<void> {\n await this.slide.activeLayer.pause(false, false);\n this._state = STATE.FORCE_PAUSED;\n }\n\n // for call from SlideApi internals (from widgets)\n // skip state checking and sdk issues\n public async slideResumeUI(): Promise<void> {\n await this.slide.activeLayer.resume();\n this._state = STATE.RESUMED;\n }\n\n public enableAudio() {\n this.slide.activeLayer.enableAudio();\n this._slideConfig.muted = false;\n }\n\n public disableAudio() {\n this.slide.activeLayer.disableAudio();\n this._slideConfig.muted = true;\n }\n\n public get isStopped(): boolean {\n return this._state === STATE.STOPPED;\n }\n\n public afterStartInitQueuePush(cb: () => void) {\n if (!Utils.isFunction(cb)) {\n return false;\n }\n if (this.sdkApi.isAndroid && this._state === STATE.INIT) {\n this._afterStartInitQueue.push(cb);\n } else {\n cb();\n }\n }\n\n public afterResumeQueuePush(cb: () => void) {\n if (!Utils.isFunction(cb)) {\n return false;\n }\n if ([STATE.RESUME, STATE.RESUMED, STATE.INITED, STATE.START, STATE.STARTED].includes(this._state)) {\n cb();\n } else {\n this._afterResumeQueue.push(cb);\n }\n }\n\n public get activeLayer(): Layer {\n return this.slide.activeLayer;\n }\n\n public get slide(): Slide {\n // todo - call showLayer with arg slide: Slide - where slide is widget parent (prevent mismatch)\n // when widget in init state, it can call showLayer\n // then we must call showLayer not on this._slide but on this._slideInInit (on slide contains widget itself)\n return this._slideInInit || this._slide;\n }\n\n public showLayer(index: number): void {\n // todo - call showLayer with arg slide: Slide - where slide is widget parent (prevent mismatch)\n // when widget in init state, it can call showLayer\n // then we must call showLayer not on this._slide but on this._slideInInit (on slide contains widget itself)\n this.slide.showLayer(index, this._slideConfig.muted);\n }\n\n public slideClickHandler(\n targetElement: HTMLElement | null,\n navigationDirection: \"forward\" | \"backward\"\n ): {\n // todo rename to continueNavigationClick (or via two flags, continueNavigationForwardClick & continueNavigationBackwardClick)\n canClickNext: boolean;\n } {\n const result = { canClickNext: true };\n let target: HTMLElement | null = targetElement;\n let element: HTMLElement | null | undefined;\n let propagation = true;\n\n // prevent click on geometry\n if (target?.classList.contains(\"narrative-element-geometry\")) {\n target = target?.querySelector<HTMLElement>(\".narrative-element\");\n }\n\n /** Button */\n if (target?.classList.contains(\"narrative-element-link\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-link\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Image */\n if (target?.classList.contains(\"narrative-element-image\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-image\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Swipe Up */\n if (target?.classList.contains(\"narrative-element-swipe-up\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-swipe-up\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Swipe Up Items */\n if (target?.classList.contains(\"narrative-element-swipe-up-items\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-swipe-up-items\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Products */\n if (target?.classList.contains(\"narrative-element-products\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-products\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Vote complete button (multiple choice) */\n if (target?.classList.contains(\"narrative-element-vote-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-vote-next-button\");\n }\n if (element) {\n // if is widget file connected to Window\n if (this.layoutService.layoutApi.widgetVoteApi) {\n if (this.layoutService.layoutApi.widgetVoteApi.click(element)) {\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.showNextSlide(0);\n });\n }\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Next button */\n if (target?.classList.contains(\"narrative-element-quiz-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-quiz-next-button\");\n }\n if (!element) {\n if (target?.classList.contains(\"narrative-element-test-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-test-next-button\");\n }\n }\n\n if (element) {\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.showNextSlide(0);\n });\n result.canClickNext = false;\n return result;\n }\n\n /** Range slider */\n let rangeSliderBorderBoxView: HTMLElement | null | undefined = target;\n if (target?.classList.contains(\"border-box-view\") || (rangeSliderBorderBoxView = target?.closest(\".border-box-view\"))) {\n if (rangeSliderBorderBoxView?.parentElement && rangeSliderBorderBoxView.parentElement.classList.contains(\"narrative-element-range-slider\")) {\n // skip click on .border-box-view inside .narrative-element-range-slider - prevent navigation trigger at click inside widget body (expect NextButton)\n result.canClickNext = false;\n return result;\n }\n }\n // if (_hasClass(target, \"rangeslider\") || target.closest(\".rangeslider\")) {\n // return;\n // }\n\n /** Range slider complete button */\n if (target?.classList.contains(\"narrative-element-range-slider-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-range-slider-next-button\");\n }\n if (element) {\n if (this.layoutService.layoutApi.widgetRangeSliderApi) {\n if (this.layoutService.layoutApi.widgetRangeSliderApi.click(element)) {\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.showNextSlide(0);\n });\n }\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Data input widget расширенный охват на весь виджет */\n if (target?.classList.contains(\"narrative-element-data-input\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-data-input\");\n }\n if (element) {\n if (this.layoutService.layoutApi.widgetDataInputApi) {\n result.canClickNext = this.layoutService.layoutApi.widgetDataInputApi.click(element);\n return result;\n }\n }\n\n /** quiz */\n if (target?.classList.contains(\"narrative-element-quiz-answer\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-quiz-answer\");\n }\n\n if (element) {\n if (element.closest(\".narrative-element-quiz\")) {\n /* quiz */\n if (this.layoutService.layoutApi.widgetQuizApi) {\n propagation = this.layoutService.layoutApi.widgetQuizApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n } else if (element.closest(\".narrative-element-quiz-grouped\")) {\n /* quiz-grouped */\n if (this.layoutService.layoutApi.widgetQuizGroupedApi) {\n propagation = this.layoutService.layoutApi.widgetQuizGroupedApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n }\n\n /** poll or poll layers */\n if (target?.classList.contains(\"narrative-element-poll-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-poll-button\");\n }\n\n if (element) {\n if (this.activeLayer.pollElement) {\n if (this.layoutService.layoutApi.widgetPollApi) {\n this.layoutService.layoutApi.widgetPollApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n if (this.activeLayer.pollLayersElement) {\n if (this.layoutService.layoutApi.widgetPollLayersApi) {\n this.layoutService.layoutApi.widgetPollLayersApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n }\n\n /** vote */\n if (target?.classList.contains(\"narrative-element-vote-answer\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-vote-answer\");\n }\n\n if (element) {\n if (this.layoutService.layoutApi.widgetVoteApi) {\n propagation = this.layoutService.layoutApi.widgetVoteApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n\n /** rate */\n if (target?.classList.contains(\"narrative-element-rate-input\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-rate-input\");\n }\n\n if (element) {\n if (this.layoutService.layoutApi.widgetRateApi) {\n propagation = this.layoutService.layoutApi.widgetRateApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n\n /** test */\n if (target?.classList.contains(\"narrative-element-test-answer\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-test-answer\");\n }\n\n if (element) {\n if (element.closest(\".narrative-element-test\")) {\n /* test */\n if (this.layoutService.layoutApi.widgetTestApi) {\n propagation = this.layoutService.layoutApi.widgetTestApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n } else if (element.closest(\".narrative-element-quest\")) {\n /* quest */\n if (this.layoutService.layoutApi.widgetQuestApi) {\n propagation = this.layoutService.layoutApi.widgetQuestApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n }\n\n /** copy */\n if (target?.classList.contains(\"narrative-element-copy\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-copy\");\n }\n\n if (element) {\n // if (\"_narrative_test\" in window) {\n // propagation = window._narrative_test.select(element);\n // propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n // }\n\n if (this.layoutService.layoutApi.widgetCopyApi) {\n propagation = this.layoutService.layoutApi.widgetCopyApi.click(element);\n propagation = false; // по клику на Копировать не делаем клик на слайде\n }\n\n // copyToClipboard(element.getAttribute('data-clipboard-target'));\n // propagation = false;\n }\n\n /** barcode */\n if (target?.classList.contains(\"narrative-element-barcode\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-barcode\");\n }\n\n if (element) {\n // if (\"_narrative_test\" in window) {\n // propagation = window._narrative_test.select(element);\n // propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n // }\n\n if (this.layoutService.layoutApi.widgetBarcodeApi) {\n propagation = this.layoutService.layoutApi.widgetBarcodeApi.click(element);\n propagation = false; // по клику на Копировать не делаем клик на слайде\n }\n\n // copyToClipboard(element.getAttribute('data-clipboard-target'));\n // propagation = false;\n }\n\n /** share */\n if (target?.classList.contains(\"narrative-element-share\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-share\");\n }\n\n if (element) {\n if (this.layoutService.layoutApi.widgetShareApi) {\n this.layoutService.layoutApi.widgetShareApi.click(element);\n propagation = false;\n }\n }\n\n /** story-repeat */\n if (target?.classList.contains(\"narrative-element-story-repeat\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-story-repeat\");\n }\n\n if (element) {\n propagation = false;\n this.sdkApi.setCardLocalData({}, true);\n this.sdkApi.updateCardServerDataLocally(this.slide.cardId, {});\n\n // window._resetTimers();\n\n // сделать async в ios\n\n let slideIndex = this.slide.slideIndex;\n // prevent simultaneous call _showNarrativeSlide and _showLayer - prevent 2 calls of initAfterLoad (break video start on iOS)\n if (slideIndex === 0) {\n // for story repeat on the first slide with layers\n this.sdkApi.showLayer(0);\n } else {\n this.sdkApi.showCardSlide(0); // сделать ее async\n }\n }\n\n // todo в каждом виджете делать выход через\n // if (handled) {\n // result.canClickNext = false;\n // return result;\n // }\n // убрать propagation\n if (!propagation) {\n result.canClickNext = false;\n return result;\n }\n\n /** can tap to next slide */\n if (this.activeLayer.quizElement) {\n if (!this.activeLayer.quizElement.slideQuizIsDone && navigationDirection === \"forward\") {\n result.canClickNext = false;\n }\n }\n\n if (this.activeLayer.quizGroupedElement) {\n if (!this.activeLayer.quizGroupedElement.slideQuizGroupedIsDone && navigationDirection === \"forward\") {\n result.canClickNext = false;\n }\n }\n\n if (this.activeLayer.testElement) {\n const isDone = this.activeLayer.testElement.slideTestIsDone;\n if (!isDone && navigationDirection === \"forward\") {\n result.canClickNext = false;\n }\n if (this.activeLayer.testElement.slideTestWithTimer && !isDone) {\n result.canClickNext = false;\n return result; // disable all clicks\n }\n }\n\n if (this.activeLayer.rangeSliderElement) {\n if (this.activeLayer.rangeSliderElement.isClickCapturedBySlider) {\n result.canClickNext = false;\n return result; // disable all clicks if event captured by slider\n }\n }\n\n if (this.activeLayer.productsElement) {\n if (this.activeLayer.productsElement.isClickCapturedByWidget) {\n result.canClickNext = false;\n return result; // disable all clicks if event captured by products widget (slider or swipe down)\n }\n }\n\n if (this.activeLayer.questElement) {\n const slideIndex = this.slide.slideIndex;\n const slideCount = this.slide.slideCount;\n const { continueDefaultNavigation } = this.activeLayer.questElement.handleRouteClick({\n direction: navigationDirection,\n slideIndex: slideIndex,\n slideCount: slideCount,\n });\n result.canClickNext = continueDefaultNavigation;\n return result;\n }\n\n const disableNavigation = this.slide.disabledNavigation;\n\n if (disableNavigation) {\n result.canClickNext = false;\n return result; // disable slide tap navigation\n }\n\n // _clickNext(canClickNext, xPercent);\n return result;\n }\n\n /**\n * Handle click or swipeUp on linkable elements (elements with data: linkType & linkTarget)\n * And click or swipeUp on SwipeUp elements (WidgetProducts, WidgetGoods)\n */\n private _handleLinkAndSwipeUpActivation(element: HTMLElement, isSwipeUpAction = false): { handled: boolean } {\n const linkType = element.getAttribute(\"data-link-type\");\n let linkTarget = element.getAttribute(\"data-link-target\");\n const linkTargetIos = element.getAttribute(\"data-link-target-ios\");\n const linkTargetAndroid = element.getAttribute(\"data-link-target-android\");\n const linkTargetWeb = element.getAttribute(\"data-link-target-web\");\n const elementId = element.getAttribute(\"data-element-id\") ?? \"\";\n // element without URI data\n let handled = false;\n\n if (this.sdkApi.isAndroid && linkTargetAndroid) {\n linkTarget = linkTargetAndroid;\n }\n if (this.sdkApi.isIOS && linkTargetIos) {\n linkTarget = linkTargetIos;\n }\n if (this.sdkApi.isWeb && linkTargetWeb) {\n linkTarget = linkTargetWeb;\n }\n\n // for btn(link) without url (openGame, openStory, closeCard, products, goods, etc)\n let statisticWidgetValue = linkType;\n let statisticWidgetEventType = \"w-link\";\n\n if (linkType === \"closeStory\" || linkType === \"closeIAM\") {\n this.layoutService.env.setTimeout(() => this.sdkApi.closeCard(\"click\"));\n handled = true;\n } else if (linkType && linkTarget) {\n if (linkType === \"story\") {\n // storyId: number, slideIndex: number\n this.layoutService.env.setTimeout(() => this.sdkApi.openStory(parseInt(linkTarget), 0));\n handled = true;\n } else if (linkType === \"slide\") {\n const __slideIndex = parseInt(linkTarget);\n const __slideCount = this.slide.slideCount;\n if (__slideIndex >= 0 && __slideIndex < __slideCount) {\n this.layoutService.env.setTimeout(() => this.sdkApi.showCardSlide(__slideIndex));\n handled = true;\n }\n } else if (linkType === \"game\") {\n this.layoutService.env.setTimeout(() => this.sdkApi.openGame(linkTarget));\n handled = true;\n } else if (linkType === \"layer\") {\n const layerIndex = parseInt(linkTarget);\n if (layerIndex >= 0) {\n this.layoutService.env.setTimeout(() => this.sdkApi.showLayer(layerIndex));\n handled = true;\n }\n } else if (linkType === \"url\") {\n // traditional link, with url\n statisticWidgetValue = linkTarget;\n\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.openUrl({\n type: isSwipeUpAction ? \"swipeUpLink\" : \"link\",\n link: {\n type: \"url\",\n target: linkTarget,\n },\n });\n });\n handled = true;\n } else if (linkType === \"products\") {\n if (this.layoutService.layoutApi.widgetProductsApi) {\n this.layoutService.layoutApi.widgetProductsApi.click(element);\n handled = true;\n }\n } else if (linkType === \"swipe-up-items\") {\n const target = decodeURIComponent(linkTarget ?? \"\");\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.openUrl({\n type: \"swipeUpItems\",\n link: {\n type: \"json\",\n target,\n },\n elementId,\n });\n });\n statisticWidgetValue = target;\n statisticWidgetEventType = \"w-goods-open\";\n\n try {\n // TODO CSP violation\n element.style.setProperty(\"opacity\", \"0\");\n } catch (e) {\n console.error(e);\n }\n handled = true;\n }\n }\n\n if (handled) {\n try {\n const cardId = this.slide.cardId;\n const cardType = this.slide.cardType;\n const slideIndex = this.slide.slideIndex;\n\n let baseFields: { story_id?: number; message_id?: number } = {};\n switch (cardType) {\n case CARD_TYPE.STORY:\n case CARD_TYPE.UGC_STORY:\n baseFields.story_id = cardId;\n break;\n case CARD_TYPE.IN_APP_MESSAGING:\n baseFields.message_id = cardId;\n break;\n }\n\n this.sdkApi.sendStatisticEvent(\n statisticWidgetEventType,\n {\n i: cardId,\n si: slideIndex,\n wi: elementId,\n wl: element.textContent ?? \"\",\n wv: statisticWidgetValue ?? \"\",\n },\n {\n ...baseFields,\n slide_index: slideIndex,\n widget_id: elementId,\n widget_label: element.textContent ?? \"\",\n widget_value: statisticWidgetValue ?? \"\",\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n return { handled };\n }\n\n public slideSwipeUpHandler() {\n const targetElement = this.activeLayer.swipeUpElement || this.activeLayer.swipeUpItemsElement || this.activeLayer.productsElement;\n const target = targetElement?.elementNodeRef;\n\n if (!target) {\n return false;\n }\n\n const { handled } = this._handleLinkAndSwipeUpActivation(target, true);\n return handled;\n }\n\n public setTextInputResult(id: string, text: string): void {\n if (this.activeLayer.dataInputElement) {\n this.activeLayer.dataInputElement.setUserData(id, text);\n }\n if (this.activeLayer.pollElement) {\n this.activeLayer.pollElement.setUserData(id, text);\n }\n if (this.activeLayer.rateElement) {\n this.activeLayer.rateElement.setUserData(id, text);\n }\n }\n\n public setShareComplete(id: string, isSuccess: boolean): void {\n if (this.activeLayer.shareElement) {\n this.activeLayer.shareElement.complete(id, isSuccess);\n }\n }\n\n public setWidgetGoodsComplete(elementId: string): void {\n const element = document.querySelector<HTMLElement>('[data-element-id=\"' + elementId + '\"]');\n if (element != null) {\n try {\n element.style.setProperty(\"opacity\", \"1\");\n } catch (e) {\n console.error(e);\n }\n }\n }\n}\n","import { SlideApiPeerDeps } from \"../../layout/layout_api\";\nimport { EsModuleSdkApi } from \"../../sdk_api/adapters/es_module_sdk_api\";\nimport { SDKInterface } from \"../../sdk_api/es_module_sdk_api.h\";\nimport { SlideApi as BaseSlideApi } from \"../../layout/SlideApi\";\nimport { type Player as VODPlayer } from \"@inappstory/video-player\";\n\nexport const slideApiPeerDeps: SlideApiPeerDeps = {};\n\nconst createSlideWrapper = ({ slideBoxRatio, nonce }: { slideBoxRatio: number; nonce?: string }) => {\n const slideWrapper = document.createElement(\"div\");\n slideWrapper.classList.add(\"narrative-slide-wrapper\");\n slideWrapper.classList.add(\"stories-viewer\");\n\n const slideOffset = document.createElement(\"div\");\n slideOffset.classList.add(\"narrative-slide-offset\");\n\n const slideBoxPrerender = document.createElement(\"div\");\n slideBoxPrerender.classList.add(\"narrative-slide-box\");\n slideBoxPrerender.classList.add(\"narrative-slide-box-prerender\");\n\n const slideBoxRendered = document.createElement(\"div\");\n slideBoxRendered.classList.add(\"narrative-slide-box\");\n slideBoxRendered.classList.add(\"narrative-slide-box-rendered\");\n\n const style = document.createElement(\"style\");\n if (nonce != null) {\n style.nonce = nonce;\n }\n\n const paddingTop = `${String(100 / slideBoxRatio)}%`;\n\n // .narrative-slide-box {\n // padding: <?= $slideRatioPadding ?> 0 0 0;\n // }\n // style.sheet?.insertRule(`.narrative-slide-box {padding: ${paddingTop} 0 0 0;`);\n slideBoxRendered.style.padding = `${paddingTop} 0 0 0`;\n slideBoxPrerender.style.padding = `${paddingTop} 0 0 0`;\n\n slideOffset.appendChild(slideBoxPrerender);\n slideOffset.appendChild(slideBoxRendered);\n\n slideWrapper.appendChild(slideOffset);\n slideWrapper.appendChild(style);\n\n return slideWrapper;\n};\n\nexport class SlideApi extends BaseSlideApi {\n constructor(\n _sdkInterface: SDKInterface,\n config: {\n root: HTMLElement;\n slideRatio: number;\n isFullscreen: boolean;\n nonce?: string;\n viewport: Window;\n userResizeHandler?: (data: { viewportWidth: number; viewportHeight: number; fontSize: number }) => void;\n VODPlayer?: typeof VODPlayer;\n overlappingActionBarHeight?: number;\n }\n ) {\n slideApiPeerDeps.VODPlayer = config.VODPlayer;\n const slideWrapper = createSlideWrapper({ slideBoxRatio: config.slideRatio, nonce: config.nonce });\n // todo need to clear root node before append slideWrapper?\n config.root.appendChild(slideWrapper);\n\n super({\n sdkApi: new EsModuleSdkApi(_sdkInterface),\n slideWrapper,\n viewport: config.viewport,\n slideRatio: config.slideRatio,\n isFullscreen: config.isFullscreen,\n userResizeHandler: config.userResizeHandler,\n getViewportWidth: () => slideWrapper.clientWidth,\n getViewportHeight: () => slideWrapper.clientHeight,\n overlappingActionBarHeight: config.overlappingActionBarHeight,\n });\n }\n}\n","import { container } from \"@composition\";\nimport { SDKApi } from \"@skd_api\";\nimport { data, extend, forEach, getTagData, getTagDataAsNumber, getValueOrDefault, getValueOrException, sendStatisticEventToApp, slice } from \"@utils\";\nimport { CARD_TYPE } from \"../../common_types.h\";\nimport { OnWidgetComplete, WidgetOptionsBase } from \"./base.h\";\nimport { WidgetsService } from \"./widgets_service/widgets_service\";\n\nexport type StatisticEventBaseFieldsShortForm = {\n i: number;\n si: number;\n};\nexport type StatisticEventBaseFieldsFullForm = {\n story_id?: number;\n message_id?: number;\n slide_index: number;\n};\n\nexport class WidgetBase<WidgetOptions extends WidgetOptionsBase> {\n /**\n * @see https://github.com/Microsoft/TypeScript/issues/3841#issuecomment-1488919713\n */\n declare [\"constructor\"]: typeof WidgetBase;\n\n static DEFAULTS: WidgetOptionsBase = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n static widgetIndex = 0;\n\n protected env = WidgetBase.widgetsService.env;\n protected options: WidgetOptions = null!;\n protected element: HTMLElement = null!;\n protected elementId: string = null!;\n protected slide: HTMLElement = null!;\n protected slideIndex: number = null!;\n protected disableTimer: boolean = null!;\n protected layoutDirection: \"ltr\" | \"rtl\" = \"ltr\";\n protected cardId: number = null!;\n protected cardType: CARD_TYPE = null!;\n protected widgetDone: Element | null = null;\n protected showWidgetCompleteToast: boolean = null!;\n protected submitButtonAnimatedView: HTMLElement | null = null;\n protected submitButtonView: HTMLElement | null = null;\n protected savedData: Record<string, any> | null = null;\n protected localData: Record<string, any> = null!;\n protected firstOpenTime: number = 0;\n protected id: string;\n\n public startReadyPromise: Promise<void> = null!;\n private startReadyResolve: () => void = null!;\n\n constructor(\n element: HTMLElement,\n options: Partial<WidgetOptions>,\n private readonly _onWidgetComplete: OnWidgetComplete,\n public readonly sdkApi: SDKApi,\n elementIdGetter?: (element: HTMLElement) => string,\n slideGetter?: (element: HTMLElement) => HTMLElement\n ) {\n this.options = extend<WidgetOptions>({}, this.constructor.DEFAULTS as WidgetOptions, options);\n this.element = element;\n if (elementIdGetter) {\n this.elementId = elementIdGetter(this.element);\n } else {\n this.elementId = getValueOrException(getTagData(this.element, \"elementId\"), \"Empty elementId\");\n }\n\n if (slideGetter) {\n this.slide = slideGetter(this.element);\n } else {\n this.slide = getValueOrException(this.element.closest<HTMLElement>(\".narrative-slide\"), \"Empty slide\");\n }\n\n this.slideIndex = getValueOrException(getTagDataAsNumber(this.slide, \"index\"), \"Empty slideIndex\");\n this.disableTimer = getTagData(this.slide, \"disableTimer\") === \"1\";\n\n this.cardId = getValueOrException(getTagDataAsNumber(this.slide, \"id\"), \"Empty cardId\");\n this.cardType = getValueOrException(getTagDataAsNumber(this.slide, \"cardType\"), \"Empty card type\");\n\n if (this.env.getComputedStyle(this.element).direction === \"rtl\") {\n this.layoutDirection = \"rtl\";\n } else {\n this.layoutDirection = \"ltr\";\n }\n this.element.dir = this.layoutDirection;\n\n if (this.element.parentElement != null) {\n this.widgetDone = this.element.parentElement?.nextElementSibling; // geometry + .widget-sent-toast\n if (this.widgetDone) {\n if (!this.widgetDone.classList.contains(\"widget-sent-toast\")) {\n this.widgetDone = null;\n }\n }\n }\n this.showWidgetCompleteToast = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"showWidgetCompleteToast\"), 0));\n if (!this.showWidgetCompleteToast) {\n this.widgetDone = null;\n }\n\n if (this.element != null) {\n this.submitButtonAnimatedView = this.element.querySelector(\".submit-button-animated-view\");\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonView = this.submitButtonAnimatedView.querySelector(\".submit-button-view\");\n }\n }\n\n this.savedData = this.sdkApi.getCardServerData(this.cardId);\n this.localData = extend({}, this.savedData ?? {}, this.options.localData ?? {});\n\n this.id = `w_${this.elementId}_${WidgetBase.widgetIndex}`;\n ++WidgetBase.widgetIndex;\n\n this.resetStartReadyPromise();\n }\n\n protected get submitButtonViewHeight() {\n if (this.submitButtonView != null) {\n return this.submitButtonView.clientHeight;\n }\n return 0;\n }\n\n private resetStartReadyPromise() {\n this.startReadyPromise = new Promise<void>(resolve => {\n this.startReadyResolve = resolve;\n });\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n this.savedData = this.sdkApi.getCardServerData(this.cardId);\n this.localData = extend({}, this.savedData ?? {}, localData);\n }\n\n public onStart(): void {\n // add active class for enable animation\n this.element.classList.add(\"active\");\n\n this.startReadyResolve();\n }\n\n public onStop(): void {\n this.element.classList.remove(\"active\");\n\n this.resetStartReadyPromise();\n }\n\n public onPause(): void {}\n\n public onResume(): void {}\n\n public static widgetCacheKey = \"ias.story-element\";\n public static widgetClassName = \"\";\n\n public static getInstance<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(element: HTMLElement): Widget | undefined {\n return data<Widget>(element, this.widgetCacheKey);\n }\n\n public static getInstanceById<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(id: string): Widget | undefined {\n const widgetsElements = slice.call(this.widgetsService.env.document.querySelectorAll(`.${this.widgetClassName}`));\n let widget: Widget | undefined;\n forEach(widgetsElements, (element, index) => {\n const localWidget = data<Widget>(element, this.widgetCacheKey);\n if (localWidget && localWidget.id === id) {\n widget = localWidget;\n }\n });\n\n return widget;\n }\n\n public static createInstance<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(\n instantiate: (element: HTMLElement, options: Partial<WidgetOptions>) => Widget,\n element: HTMLElement,\n options: Partial<WidgetOptions>\n ): Widget {\n // get from objects cache (just Map<key, data> where key assigned to HTMLElement)\n let instance = WidgetBase.getInstance<Widget, WidgetOptions>(element);\n if (instance == null) {\n // can throw Error\n instance = instantiate(element, options);\n // save object in cache by key associated with HTMLElement\n data(element, WidgetBase.widgetCacheKey, instance);\n }\n\n return instance;\n }\n\n public static initWidget<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(\n htmlElement: HTMLElement,\n localData: Record<string, any>,\n instantiate: (element: HTMLElement, options: Partial<WidgetOptions>) => Widget\n ): Promise<Record<string, any>> {\n const widget = this.createInstance<Widget, WidgetOptions>(instantiate, htmlElement, {\n slide: null,\n localData,\n } as WidgetOptions);\n // start widget (just created or cached instance)\n widget.onRefreshUserData(localData);\n return Promise.resolve(localData);\n }\n\n public static get widgetsService(): WidgetsService {\n return container.get<WidgetsService>();\n }\n\n public static getLocalData(sdkApi: SDKApi): Promise<Record<string, any>> {\n return sdkApi.getCardLocalData();\n }\n\n public getLocalData(): Promise<Record<string, any>> {\n return this.constructor.getLocalData(this.sdkApi);\n }\n\n public static setLocalData(sdkApi: SDKApi, keyValue: Record<string, any>, sendToServer?: boolean, syncWithRuntimeLocalData?: boolean) {\n // push json object as string\n if (sendToServer === undefined) {\n sendToServer = true;\n } else {\n sendToServer = Boolean(sendToServer);\n }\n if (syncWithRuntimeLocalData === undefined) {\n syncWithRuntimeLocalData = true;\n } else {\n syncWithRuntimeLocalData = Boolean(syncWithRuntimeLocalData);\n }\n\n if (syncWithRuntimeLocalData) {\n this.getLocalData(sdkApi).then(localData => {\n // 1 - old values, 2 - new values\n keyValue = extend({}, localData, keyValue);\n\n // todo make async via promise or async\n sdkApi.setCardLocalData(keyValue, sendToServer);\n });\n } else {\n // todo make async via promise or async\n sdkApi.setCardLocalData(keyValue, sendToServer);\n }\n }\n\n public setLocalData(keyValue: Record<string, any>, sendToServer?: boolean, syncWithRuntimeLocalData?: boolean) {\n return this.constructor.setLocalData(this.sdkApi, keyValue, sendToServer, syncWithRuntimeLocalData);\n }\n\n public get statisticEventBaseFieldsShortForm(): StatisticEventBaseFieldsShortForm {\n return WidgetBase.getStatisticEventBaseFieldsShortForm(this.cardId, this.slideIndex);\n }\n\n public static getStatisticEventBaseFieldsShortForm(cardId: number, slideIndex: number): StatisticEventBaseFieldsShortForm {\n return {\n i: cardId,\n si: slideIndex,\n };\n }\n\n public get statisticEventBaseFieldsFullForm(): StatisticEventBaseFieldsFullForm {\n return WidgetBase.getStatisticEventBaseFieldsFullForm(this.cardId, this.cardType, this.slideIndex);\n }\n\n public static getStatisticEventBaseFieldsFullForm(cardId: number, cardType: CARD_TYPE, slideIndex: number): StatisticEventBaseFieldsFullForm {\n const data: StatisticEventBaseFieldsFullForm = { slide_index: slideIndex };\n switch (cardType) {\n case CARD_TYPE.STORY:\n case CARD_TYPE.UGC_STORY:\n data.story_id = cardId;\n break;\n case CARD_TYPE.IN_APP_MESSAGING:\n data.message_id = cardId;\n break;\n }\n return data;\n }\n\n public static sendStatisticEventToApp(\n sdkApi: SDKApi,\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n options?: { forceEnableStatisticV2?: boolean }\n ) {\n sendStatisticEventToApp(sdkApi, name, data, devPayload, options);\n }\n\n public sendStatisticEventToApp(\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n options?: { forceEnableStatisticV2?: boolean }\n ) {\n this.constructor.sendStatisticEventToApp(this.sdkApi, name, data, devPayload, options);\n }\n\n public onWidgetComplete() {\n this._onWidgetComplete(this.cardId, this.slideIndex);\n }\n\n protected _showLayer(layers: Array<HTMLElement>, selectIndex: number, withStatEvent: boolean = false): void {\n if (this.sdkApi.isExistsShowLayer()) {\n this.sdkApi.showLayer(selectIndex);\n } else {\n forEach(layers, (layer, index) => {\n if (index === selectIndex) {\n layer.classList.remove(\"hidden\");\n this.sdkApi.cardAnimation?.start(layer);\n } else {\n layer.classList.add(\"hidden\");\n }\n });\n }\n if (withStatEvent) {\n this._statEventLayoutShow(selectIndex);\n }\n }\n\n protected _statEventLayoutShow(layoutIndex: number): void {\n try {\n this.sendStatisticEventToApp(\n \"layout-show\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n li: layoutIndex,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n layout_index: layoutIndex,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public static onRefreshUserData<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(\n element: HTMLElement,\n localData: Record<string, any>\n ): void {\n const widgetElement = element.closest<HTMLElement>(`.${this.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetBase.getInstance<Widget, WidgetOptions>(widgetElement);\n if (widget) {\n widget.onRefreshUserData(localData);\n }\n }\n }\n\n protected getPromotionalCodeFetchPath(promotionalCodeId: string): string {\n switch (this.cardType) {\n case CARD_TYPE.IN_APP_MESSAGING:\n return `inappmessaging/message/${this.cardId}/widget/${this.elementId}/promo-code/${promotionalCodeId}`;\n default:\n return `story/${this.cardId}/widget/${this.elementId}/promo-code/${promotionalCodeId}`;\n }\n }\n}\n","import { SDKApi } from \"@skd_api\";\nimport { addClass, getTagData, removeClass, slice } from \"@utils\";\nimport { drawingSVG, qrcode, ean13, pdf417 } from \"bwip-js/browser\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetBarcodeOptions } from \"./barcode.h\";\n\nexport class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {\n static DEFAULTS: WidgetBarcodeOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-barcode\";\n\n private readonly captionView: HTMLElement | null;\n private readonly svgView: HTMLElement | null;\n private clipboardTarget: string | undefined;\n private readonly codeType: string | undefined;\n private readonly formatterType: string | undefined;\n private readonly copiedText: string | undefined;\n private readonly isPromotionalCode: boolean;\n private state: number | null;\n private readonly msgNetworkError: string | undefined;\n private readonly msgServiceError: string | undefined;\n private readonly msgNoMoreCodes: string | undefined;\n private readonly msgTryAgain: string | undefined;\n private readonly msgBarcodeRenderError: string | undefined;\n\n constructor(element: HTMLElement, options: Partial<WidgetBarcodeOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.captionView = this.element.querySelector(\".narrative-element-text-lines\");\n\n this.clipboardTarget = getTagData(element, \"clipboardTarget\");\n this.isPromotionalCode = getTagData(element, \"clipboardType\") === \"promocode\";\n\n this.codeType = getTagData(element, \"codeType\");\n this.formatterType = getTagData(element, \"formatterType\");\n this.copiedText = getTagData(element, \"copiedText\");\n\n this.svgView = this.element.querySelector<HTMLElement>(\".barcode-view-inner\");\n\n this.msgNetworkError = getTagData(this.element, \"msgNetworkError\");\n this.msgServiceError = getTagData(this.element, \"msgServiceError\");\n this.msgNoMoreCodes = getTagData(this.element, \"msgNoMoreCodes\");\n this.msgTryAgain = getTagData(this.element, \"msgTryAgain\");\n this.msgBarcodeRenderError = getTagData(this.element, \"msgBarcodeRenderError\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.state = null;\n\n if (this.isPromotionalCode) {\n this.initPromotionalCodeFromLocalData();\n } else {\n this.renderCodeView();\n this.renderCaptionView();\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n if (this.isPromotionalCode) {\n this.fetchPromoCode();\n }\n }\n\n private isTransparentElement(): boolean {\n if (this.element) {\n try {\n const color = window.getComputedStyle(this.element).color;\n if (color === \"transparent\" || color === \"rgba(0, 0, 0, 0)\" || color === \"rgba(0,0,0,0)\") {\n return true;\n }\n } catch (err) {\n console.error(err);\n }\n }\n return false;\n }\n\n private renderCodeView() {\n const text = this.clipboardTarget ?? \"\";\n let svg = \"\";\n try {\n switch (this.codeType) {\n case \"qrcode\":\n svg = qrcode<string>({ bcid: \"qrcode\", text }, drawingSVG());\n break;\n case \"pdf417\":\n svg = pdf417<string>({ bcid: \"pdf417\", text }, drawingSVG());\n break;\n case \"ean13\":\n svg = ean13<string>({ bcid: \"ean13\", text, height: 10 }, drawingSVG());\n break;\n default:\n break;\n }\n if (this.svgView && svg) {\n this.svgView.innerHTML = svg;\n const svgPathNodes = this.svgView.querySelectorAll<SVGElement>(\"svg path\");\n for (const svgPathNode of svgPathNodes) {\n if (svgPathNode.hasAttribute(\"fill\")) {\n // for paths with fill (qr, pdf417)\n svgPathNode.setAttribute(\"fill\", \"currentColor\");\n }\n if (svgPathNode.hasAttribute(\"stroke\")) {\n // for paths with stroke (EAN 13)\n svgPathNode.setAttribute(\"stroke\", \"currentColor\");\n }\n }\n }\n } catch (e) {\n if (this.msgBarcodeRenderError) {\n this.sdkApi.showToast(this.msgBarcodeRenderError);\n }\n console.error(e);\n }\n }\n\n private formatCaptionText(text: string) {\n let format = this.formatterType ?? \"\";\n const result = [];\n let j = 0;\n for (let i = 0; i < format.length; ++i) {\n if (format[i] === \"#\") {\n result.push(text[j]);\n ++j;\n if (j >= text.length) {\n break;\n }\n } else {\n result.push(format[i]);\n }\n }\n let formattedText = `${result.join(\"\")}${text.slice(j)}`;\n\n return formattedText ?? text;\n }\n\n private renderCaptionView() {\n const text = this.formatCaptionText(this.clipboardTarget ?? \"\");\n this.changeCaptionViewText(text);\n }\n\n private changeCaptionViewText(text: string) {\n if (this.captionView) {\n this.captionView.textContent = text;\n }\n }\n\n private getPromotionalCodeFromLocalData(): string | undefined {\n return this.localData[\"_bc_g_\" + this.elementId + \"_pc\"];\n }\n\n private initPromotionalCodeFromLocalData(): void {\n if (this.getPromotionalCodeFromLocalData() !== undefined) {\n this.state = 1;\n this.clipboardTarget = this.getPromotionalCodeFromLocalData();\n if (this.clipboardTarget != null) {\n this.renderCaptionView();\n this.renderCodeView();\n }\n removeClass(this.element, \"loader\");\n }\n }\n\n private fetchPromoCode(): void {\n this.state = 0;\n this.initPromotionalCodeFromLocalData();\n\n if (this.state === 0) {\n if (!this.isTransparentElement()) {\n // for transparent element\n addClass(this.element, \"loader\");\n }\n\n // fetch promotional code\n const path = this.getPromotionalCodeFetchPath(this.clipboardTarget ?? \"\");\n const headers = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n };\n const profileKey = \"fetch-promo-code\";\n\n Promise.all([\n this.sdkApi.sendApiRequest<{ code: string }>(path, \"POST\", null, headers, null, profileKey),\n new Promise<void>(function (t, e) {\n return setTimeout(t, 300);\n }),\n ]).then(values => {\n const r = values[0];\n\n const status = r.status;\n let code = null;\n let success = false;\n if (status === 200 || status === 201) {\n if (r.data) code = r.data.code;\n if (code) {\n // success case\n this.clipboardTarget = code;\n\n this.renderCaptionView();\n this.renderCodeView();\n\n success = true;\n this.state = 1;\n removeClass(this.element, \"loader\");\n\n if (status === 201) {\n this.localData[\"_bc_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n this.localData[\"_&ts_bc_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n }\n this.localData[\"_bc_g_\" + this.elementId + \"_pc\"] = code;\n\n this.setLocalData(this.localData, true);\n } else {\n this.msgNoMoreCodes && this.sdkApi.showToast(this.msgNoMoreCodes);\n }\n } else if (status === 12163 || status === 12002) {\n this.msgNetworkError && this.sdkApi.showToast(this.msgNetworkError);\n } else {\n this.msgServiceError && this.sdkApi.showToast(this.msgServiceError);\n }\n\n if (!success) {\n this.state = 3;\n\n this.changeCaptionViewText(this.msgTryAgain ?? \"\");\n\n removeClass(this.element, \"loader\");\n }\n });\n }\n }\n\n public getStateValue(): number | null {\n return this.state;\n }\n\n public getIsPromotionalCode(): boolean {\n return this.isPromotionalCode;\n }\n\n private _statEventCopyClick(clipboardTarget: string): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-barcode\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: clipboardTarget,\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: clipboardTarget,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _select(): void {\n this.element.classList.add(\"done\");\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n // флаг - что таймер уже стартанул (в layout или добавить объект sharedMemory)\n // смотрим что прозрачный текст - тогда и лоадер прозрачный\n // _log(\"_showNarrativeNextSlide: \" + getSlideDuration(this.narrativeId, this.slideIndex), true);\n this.onWidgetComplete();\n }\n });\n\n if (this.copiedText) {\n this.sdkApi.showToast(this.copiedText);\n }\n }\n\n public copyToClipboard(element: HTMLElement): void {\n this._select();\n\n const textValue = this.clipboardTarget ?? \"\";\n\n this.sdkApi.writeToClipboard({ type: \"text\", textValue });\n\n this.completeWidget();\n\n this._statEventCopyClick(textValue);\n }\n\n private completeWidget(): void {\n this.localData[\"_bc_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n\n // ответ на вопрос\n this.localData[\"_&ts_bc_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_bc_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetBarcode.widgetClassName,\n onRefreshUserData: WidgetBarcode.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetBarcode.initWidget(element, localData, (element, options) => new WidgetBarcode(element, options, onWidgetComplete, sdkApi));\n },\n onStart: function (element: HTMLElement) {\n WidgetBarcode.getInstance<WidgetBarcode, WidgetBarcodeOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetBarcode.getInstance<WidgetBarcode, WidgetBarcodeOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetBarcode.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetBarcode.getInstance<WidgetBarcode, WidgetBarcodeOptions>(widgetElement);\n if (widget) {\n if (!widget.getIsPromotionalCode()) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 1) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 3) {\n widget.fetchPromoCode();\n }\n }\n }\n return false;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { addClass, getTagData, removeClass, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetCopyOptions } from \"./copy.h\";\n\nexport class WidgetCopy extends WidgetBase<WidgetCopyOptions> {\n static DEFAULTS: WidgetCopyOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-copy\";\n\n private readonly button: HTMLElement | null;\n private clipboardTarget: string | undefined;\n private readonly isPromotionalCode: boolean;\n private state: number | null;\n private readonly msgNetworkError: string | undefined;\n private readonly msgServiceError: string | undefined;\n private readonly msgNoMoreCodes: string | undefined;\n private readonly msgTryAgain: string | undefined;\n private readonly geometry: HTMLElement | null;\n private readonly resultLayer: HTMLElement | null;\n private readonly resultLayerGeometry: HTMLElement | null;\n\n constructor(element: HTMLElement, options: Partial<WidgetCopyOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.button = this.element.querySelector(\".narrative-element-text-lines\");\n\n this.clipboardTarget = getTagData(element, \"clipboardTarget\");\n this.isPromotionalCode = getTagData(element, \"clipboardType\") === \"promocode\";\n\n this.msgNetworkError = getTagData(this.element, \"msgNetworkError\");\n this.msgServiceError = getTagData(this.element, \"msgServiceError\");\n this.msgNoMoreCodes = getTagData(this.element, \"msgNoMoreCodes\");\n this.msgTryAgain = getTagData(this.element, \"msgTryAgain\");\n\n this.geometry = this.element.closest(\".narrative-element-geometry\");\n\n // this is result layer - skip init\n // todo prevent call Widget.init on result-layer\n if (this.element.classList.contains(\"narrative-element-copy-result-variant\")) {\n return;\n }\n\n this.resultLayer = this.slide.querySelector(`.narrative-element-copy-result-variant[data-element-id=\"${this.elementId}\"]`);\n if (this.resultLayer && this.geometry) {\n this.resultLayerGeometry = this.resultLayer.closest(\".narrative-element-geometry\");\n\n // create align center\n if (this.resultLayerGeometry) {\n const baseComputedGeometry = window.getComputedStyle(this.geometry);\n let resultComputedGeometry = window.getComputedStyle(this.resultLayerGeometry);\n\n if (parseFloat(resultComputedGeometry.width) < parseFloat(baseComputedGeometry.width)) {\n // prevent resultLayer shrinking\n this.resultLayerGeometry.style.setProperty(\"width\", parseFloat(baseComputedGeometry.width) + \"px\");\n resultComputedGeometry = window.getComputedStyle(this.resultLayerGeometry);\n }\n\n const geometryCenter = parseFloat(baseComputedGeometry.left) + parseFloat(baseComputedGeometry.width) / 2;\n const resultLayerGeometryWidth = parseFloat(resultComputedGeometry.width);\n const newResultLayerGeometryLeft = geometryCenter - resultLayerGeometryWidth / 2;\n\n this.resultLayerGeometry.style.setProperty(\"left\", newResultLayerGeometryLeft + \"px\");\n }\n }\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n // return DOM to init state (ready to copy)\n this.element.classList.remove(\"done\");\n if (this.resultLayer) {\n this.resultLayer.classList.remove(\"done\");\n }\n\n this.state = null;\n\n if (this.isPromotionalCode) {\n this.initPromotionalCodeFromLocalData();\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n // add active class for enable animation\n this.resultLayer?.classList.add(\"active\");\n\n if (this.isPromotionalCode) {\n this.fetchPromoCode();\n }\n }\n\n private isTransparentElement(): boolean {\n if (this.element) {\n try {\n const color = window.getComputedStyle(this.element).color;\n if (color === \"transparent\" || color === \"rgba(0, 0, 0, 0)\" || color === \"rgba(0,0,0,0)\") {\n return true;\n }\n } catch (err) {\n console.error(err);\n }\n }\n return false;\n }\n\n private changeText(newText: string): void {\n if (this.button) {\n this.button.textContent = newText;\n }\n }\n\n private getPromotionalCodeFromLocalData(): string | undefined {\n return this.localData[\"_cp_g_\" + this.elementId + \"_pc\"];\n }\n\n private initPromotionalCodeFromLocalData(): void {\n if (this.getPromotionalCodeFromLocalData() !== undefined) {\n this.state = 1;\n this.clipboardTarget = this.getPromotionalCodeFromLocalData();\n if (this.clipboardTarget != null) {\n this.changeText(this.clipboardTarget);\n }\n removeClass(this.element, \"loader\");\n }\n }\n\n private fetchPromoCode(): void {\n this.state = 0;\n this.initPromotionalCodeFromLocalData();\n\n if (this.state === 0) {\n if (!this.isTransparentElement()) {\n // for transparent element\n addClass(this.element, \"loader\");\n }\n\n // fetch promotional code\n const path = this.getPromotionalCodeFetchPath(this.clipboardTarget ?? \"\");\n const headers = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n };\n const profileKey = \"fetch-promo-code\";\n\n Promise.all([\n this.sdkApi.sendApiRequest<{ code: string }>(path, \"POST\", null, headers, null, profileKey),\n new Promise<void>(function (t, e) {\n return setTimeout(t, 300);\n }),\n ]).then(values => {\n const r = values[0];\n\n const status = r.status;\n let code = null;\n let success = false;\n if (status === 200 || status === 201) {\n if (r.data) code = r.data.code;\n if (code) {\n // success case\n this.clipboardTarget = code;\n this.changeText(this.clipboardTarget);\n success = true;\n this.state = 1;\n removeClass(this.element, \"loader\");\n\n if (status === 201) {\n this.localData[\"_cp_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n this.localData[\"_&ts_cp_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n }\n this.localData[\"_cp_g_\" + this.elementId + \"_pc\"] = code;\n\n this.setLocalData(this.localData, true);\n } else {\n this.msgNoMoreCodes && this.sdkApi.showToast(this.msgNoMoreCodes);\n }\n } else if (status === 12163 || status === 12002) {\n this.msgNetworkError && this.sdkApi.showToast(this.msgNetworkError);\n } else {\n this.msgServiceError && this.sdkApi.showToast(this.msgServiceError);\n }\n\n if (!success) {\n this.state = 3;\n this.changeText(this.msgTryAgain ?? \"\");\n removeClass(this.element, \"loader\");\n }\n });\n }\n }\n\n public getStateValue(): number | null {\n return this.state;\n }\n\n public getIsPromotionalCode(): boolean {\n return this.isPromotionalCode;\n }\n\n private _statEventCopyClick(clipboardTarget: string): void {\n try {\n const buttonText = this.button?.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-copy\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: buttonText,\n wv: clipboardTarget,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: buttonText,\n widget_value: clipboardTarget,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _select(): void {\n this.element.classList.add(\"done\");\n if (this.resultLayer) {\n this.resultLayer.classList.add(\"done\");\n }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n // флаг - что таймер уже стартанул (в layout или добавить объект sharedMemory)\n // смотрим что прозрачный текст - тогда и лоадер прозрачный\n // _log(\"_showNarrativeNextSlide: \" + getSlideDuration(this.narrativeId, this.slideIndex), true);\n this.onWidgetComplete();\n }\n });\n }\n\n public copyToClipboard(element: HTMLElement): void {\n this._select();\n\n const textValue = this.clipboardTarget ?? \"\";\n\n this.sdkApi.writeToClipboard({ type: \"text\", textValue });\n\n this.completeWidget();\n\n this._statEventCopyClick(textValue);\n }\n\n private completeWidget(): void {\n this.localData[\"_cp_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n\n // ответ на вопрос\n this.localData[\"_&ts_cp_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_cp_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetCopy.widgetClassName,\n onRefreshUserData: WidgetCopy.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n // prevent initWidget for result layer\n if (!element.classList.contains(\"narrative-element-copy-result-variant\")) {\n WidgetCopy.initWidget<WidgetCopy, WidgetCopyOptions>(\n element,\n localData,\n (element, options) => new WidgetCopy(element, options, onWidgetComplete, sdkApi)\n );\n }\n },\n onStart: function (element: HTMLElement) {\n WidgetCopy.getInstance<WidgetCopy, WidgetCopyOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetCopy.getInstance<WidgetCopy, WidgetCopyOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetCopy.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetCopy.getInstance<WidgetCopy, WidgetCopyOptions>(widgetElement);\n if (widget) {\n if (!widget.getIsPromotionalCode()) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 1) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 3) {\n widget.fetchPromoCode();\n }\n }\n }\n return false;\n },\n };\n}\n","/** QUIZ */\nimport { SDKApi } from \"@skd_api\";\nimport { extend, getElementBounding, getValueOrException, slice } from \"@utils\";\nimport { WidgetDataInputOptions } from \"./data_input.h\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\n\nexport class WidgetDataInput extends WidgetBase<WidgetDataInputOptions> {\n static DEFAULTS = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-data-input\";\n\n private readonly label: HTMLElement | null;\n private elementRect: DOMRect;\n private readonly inputElement: HTMLElement;\n private readonly textElement: HTMLElement;\n private readonly inputPlaceholderValue: string;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n * @param sdkApi\n */\n constructor(element: HTMLElement, options: Partial<WidgetDataInputOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n\n this.elementRect = this.element.getBoundingClientRect();\n\n this.inputElement = getValueOrException(this.element.querySelector<HTMLElement>(\".input-view .input\"), \"Empty .input-view .input\");\n this.textElement = getValueOrException(\n this.inputElement.querySelector<HTMLElement>(\".narrative-element-text-lines\"),\n \"Empty .narrative-element-text-lines\"\n );\n this.inputPlaceholderValue = this.textElement.innerHTML;\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n const text = this.getTextFromLocalData();\n this._fillUserText(text);\n if (text != null) {\n this.element.classList.add(\"done\");\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n }\n\n private getTextFromLocalData(): string | undefined {\n return this.localData[\"_di_g_\" + this.elementId + \"_t\"];\n }\n\n private _statEventFocusIn() {\n try {\n const labelText = this.label ? this.label.textContent ?? \"\" : \"\";\n\n this.sendStatisticEventToApp(\n \"w-data-input-focus\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventInputSave(answerText: string) {\n try {\n const labelText = this.label ? this.label.textContent ?? \"\" : \"\";\n\n this.sendStatisticEventToApp(\n \"w-data-input-save\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wv: answerText,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_value: answerText,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public isDone() {\n return Boolean(this.localData[\"_di_g_\" + this.elementId + \"_t\"]);\n }\n\n public click(element: HTMLElement) {\n if (this.isDone()) {\n return true;\n }\n\n this.elementRect = this.element.getBoundingClientRect();\n\n if (this.sdkApi.isAndroid || this.sdkApi.isWeb) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(this.id, data);\n\n this._statEventFocusIn();\n }\n\n return false;\n }\n\n private _fillUserText(text: string | undefined) {\n if (this.inputElement && this.textElement) {\n if (text != null) {\n this.inputElement.classList.remove(\"_is-placeholder\");\n text = text.replace(new RegExp(\"\\r?\\n\", \"g\"), \"<br />\");\n this.textElement.innerHTML = text;\n } else {\n this.inputElement.classList.add(\"_is-placeholder\");\n this.textElement.innerHTML = this.inputPlaceholderValue;\n }\n }\n }\n\n public setUserText(text: string) {\n this.slide.classList.remove(\"data-input-editing\");\n this.slide.classList.remove(\"blured\");\n\n let needResumeUITimer = true;\n\n if (text) {\n this._fillUserText(text);\n\n this.localData[\"_di_g_\" + this.elementId + \"_t\"] = text;\n // answer to question\n this.localData[\"_&ts_di_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n this.setLocalData(this.localData, true);\n\n this._statEventInputSave(text);\n\n if (this.disableTimer) {\n this.onWidgetComplete();\n needResumeUITimer = false;\n }\n }\n if (needResumeUITimer && !this.disableTimer) {\n this.sdkApi.resumeUI();\n }\n }\n\n public static api = {\n widgetClassName: WidgetDataInput.widgetClassName,\n onRefreshUserData: WidgetDataInput.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetDataInput.initWidget<WidgetDataInput, WidgetDataInputOptions>(\n element,\n localData,\n (element, options) => new WidgetDataInput(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetDataInput.getInstance<WidgetDataInput, WidgetDataInputOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetDataInput.getInstance<WidgetDataInput, WidgetDataInputOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetDataInput.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetDataInput.getInstance<WidgetDataInput, WidgetDataInputOptions>(widgetElement);\n if (widget) {\n return widget.click(element);\n }\n }\n return true;\n },\n setUserData: function (id: string, text: string) {\n WidgetDataInput.getInstanceById<WidgetDataInput, WidgetDataInputOptions>(id)?.setUserText(text);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getTagData, getTagDataAsNumber, getValueOrException, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetDateCountdownOptions } from \"./date_countdown.h\";\n\nexport class WidgetDateCountdown extends WidgetBase<WidgetDateCountdownOptions> {\n static DEFAULTS: WidgetDateCountdownOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n layers: [],\n };\n\n public static widgetClassName = \"narrative-element-date-countdown\";\n\n private label: HTMLElement | null;\n private readonly layers: Array<HTMLElement>;\n private messages: {\n days: string;\n hours: string;\n minutes: string;\n seconds: string;\n };\n private readonly timestampMs: number;\n private readonly diff: number;\n private timerInit: boolean;\n private pendingUpdate: boolean;\n\n private firstGroup1: HTMLElement;\n private firstGroup2: HTMLElement;\n private firstGroupCaption: HTMLElement;\n\n private secondGroup1: HTMLElement;\n private secondGroup2: HTMLElement;\n private secondGroupCaption: HTMLElement;\n\n private thirdGroup1: HTMLElement;\n private thirdGroup2: HTMLElement;\n private thirdGroupCaption: HTMLElement;\n\n constructor(element: HTMLElement, options: Partial<WidgetDateCountdownOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n\n this.messages = {\n days: getTagData(this.element, \"tDays\") ?? \"\",\n hours: getTagData(this.element, \"tHours\") ?? \"\",\n minutes: getTagData(this.element, \"tMinutes\") ?? \"\",\n seconds: getTagData(this.element, \"tSeconds\") ?? \"\",\n };\n\n this.timestampMs = getValueOrException(getTagDataAsNumber(this.element, \"timestampSeconds\"), \"Empty timestampSeconds\") * 1000;\n this.diff = 0;\n\n this.timerInit = false;\n this.pendingUpdate = true;\n\n this.layers = this.options.layers;\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n const value = this.timestampMs - (new Date().getTime() - this.diff);\n if (value > 0) {\n this._showLayer(this.layers, 0);\n } else {\n if (this.layers[1] != null) {\n this._showLayer(this.layers, 1);\n }\n }\n }\n\n public onPause(): void {\n super.onPause();\n\n if (this.timerInit) {\n this.pendingUpdate = false;\n }\n }\n\n public onResume(): void {\n super.onResume();\n\n if (this.timerInit && !this.pendingUpdate) {\n this.pendingUpdate = true;\n this.updateTimer();\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n if (!this.timerInit) {\n this.initTimer();\n }\n }\n\n public onStop(): void {\n super.onStop();\n\n if (this.timerInit) {\n this.pendingUpdate = false;\n this.timerInit = false;\n }\n }\n\n private initTimer(): void {\n if (this.timerInit) {\n return;\n }\n\n // find groups\n this.firstGroup1 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-1 .date-output-label-1\"), \"Empty firstGroup1\");\n this.firstGroup2 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-1 .date-output-label-2\"), \"Empty firstGroup2\");\n this.firstGroupCaption = getValueOrException(\n this.element.querySelector<HTMLElement>(\".date-item-view-group-1 .date-item-caption\"),\n \"Empty firstGroupCaption\"\n );\n\n this.secondGroup1 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-2 .date-output-label-1\"), \"Empty secondGroup1\");\n this.secondGroup2 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-2 .date-output-label-2\"), \"Empty secondGroup2\");\n this.secondGroupCaption = getValueOrException(\n this.element.querySelector<HTMLElement>(\".date-item-view-group-2 .date-item-caption\"),\n \"Empty secondGroupCaption\"\n );\n\n this.thirdGroup1 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-3 .date-output-label-1\"), \"Empty thirdGroup1\");\n this.thirdGroup2 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-3 .date-output-label-2\"), \"Empty thirdGroup2\");\n this.thirdGroupCaption = getValueOrException(\n this.element.querySelector<HTMLElement>(\".date-item-view-group-3 .date-item-caption\"),\n \"Empty thirdGroupCaption\"\n );\n\n this.timerInit = true;\n\n const value = this.timestampMs - (new Date().getTime() - this.diff);\n if (value > 0) {\n this._showLayer(this.layers, 0);\n }\n\n this.updateTimer();\n }\n\n private updateTimer(): void {\n if (!this.timerInit) {\n return;\n }\n const value = this.timestampMs - (new Date().getTime() - this.diff);\n if (value > 0) {\n const result = this._asDuration(Math.round(value / 1000));\n\n if (result.days) {\n this.firstGroupCaption.textContent = this.messages.days;\n this.firstGroup1.textContent = result.day1;\n this.firstGroup2.textContent = result.day2;\n\n this.secondGroupCaption.textContent = this.messages.hours;\n this.secondGroup1.textContent = result.hour1;\n this.secondGroup2.textContent = result.hour2;\n\n this.thirdGroupCaption.textContent = this.messages.minutes;\n this.thirdGroup1.textContent = result.minute1;\n this.thirdGroup2.textContent = result.minute2;\n } else {\n this.firstGroupCaption.textContent = this.messages.hours;\n this.firstGroup1.textContent = result.hour1;\n this.firstGroup2.textContent = result.hour2;\n\n this.secondGroupCaption.textContent = this.messages.minutes;\n this.secondGroup1.textContent = result.minute1;\n this.secondGroup2.textContent = result.minute2;\n\n this.thirdGroupCaption.textContent = this.messages.seconds;\n this.thirdGroup1.textContent = result.second1;\n this.thirdGroup2.textContent = result.second2;\n }\n\n // this.pendingUpdate = true;\n } else {\n this.pendingUpdate = false;\n if (this.layers[1] != null) {\n this._showLayer(this.layers, 1);\n }\n }\n\n if (this.pendingUpdate) {\n this.env.requestAnimationFrame(() => this.updateTimer());\n }\n }\n\n private _asDuration(value: number | undefined | null) {\n const result = {\n days: false,\n day1: \"0\",\n day2: \"0\",\n hour1: \"0\",\n hour2: \"0\",\n minute1: \"0\",\n minute2: \"0\",\n second1: \"0\",\n second2: \"0\",\n };\n\n if (value === undefined || value === null) {\n return result;\n }\n if (value < 0) {\n return result;\n }\n value = Math.floor(value);\n const days = Math.floor((value / 86400) % 365);\n const hours = Math.floor((value / 3600) % 24);\n const minutes = Math.floor((value / 60) % 60);\n const seconds = value % 60;\n\n let pair;\n if (days > 0) {\n result.days = true;\n if (days < 10) result.day2 = String(days);\n else {\n pair = String(days).split(\"\");\n result.day1 = pair[0];\n result.day2 = pair[1];\n }\n }\n\n if (hours < 10) result.hour2 = String(hours);\n else {\n pair = String(hours).split(\"\");\n result.hour1 = pair[0];\n result.hour2 = pair[1];\n }\n\n if (minutes < 10) result.minute2 = String(minutes);\n else {\n pair = String(minutes).split(\"\");\n result.minute1 = pair[0];\n result.minute2 = pair[1];\n }\n\n if (seconds < 10) result.second2 = String(seconds);\n else {\n pair = String(seconds).split(\"\");\n result.second1 = pair[0];\n result.second2 = pair[1];\n }\n return result;\n }\n\n public static api = {\n widgetClassName: WidgetDateCountdown.widgetClassName,\n onRefreshUserData: WidgetDateCountdown.onRefreshUserData,\n init: function (\n element: HTMLElement,\n layers: Array<HTMLElement>,\n localData: Record<string, any>,\n onWidgetComplete: OnWidgetComplete,\n sdkApi: SDKApi\n ): void {\n WidgetDateCountdown.initWidget<WidgetDateCountdown, WidgetDateCountdownOptions>(\n element,\n localData,\n (element, options) => new WidgetDateCountdown(element, { ...options, layers }, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onStop();\n },\n onPause: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onPause();\n },\n onResume: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onResume();\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { forEach, getTagData, getTagDataAsNumber, isNumeric, isObject } from \"@utils\";\nimport { CARD_TYPE } from \"../../common_types.h\";\nimport { WidgetBase } from \"../base\";\n\nconst displaySlide = function (slides: Array<HTMLElement>, localData: Record<string, any>, sdkApi: SDKApi) {\n const multiSlideItem = slides[0];\n\n let cardId: number | undefined = undefined;\n let cardType: CARD_TYPE = CARD_TYPE.STORY;\n let slideIndex: number | undefined = undefined;\n\n if (multiSlideItem != null) {\n cardId = getTagDataAsNumber(multiSlideItem, \"id\");\n cardType = getTagDataAsNumber(multiSlideItem, \"cardType\") ?? CARD_TYPE.STORY;\n slideIndex = getTagDataAsNumber(multiSlideItem, \"index\");\n\n if (\n multiSlideItem.querySelectorAll(\n \".narrative-element-share[data-with-layer='1'], .narrative-element-poll-layers, .narrative-element-date-countdown, .narrative-element-game\"\n ).length > 0\n ) {\n // skip if exists share/poll_layers\n return;\n }\n }\n\n // score\n var score = null;\n var selectedIndex: number | undefined = undefined;\n if (localData[\"q_score\"] !== undefined) {\n score = parseInt(localData[\"q_score\"]);\n } else if (localData[\"t_score\"] !== undefined) {\n score = parseInt(localData[\"t_score\"]);\n } else if (localData[\"qg_score\"] !== undefined) {\n score = localData[\"qg_score\"]; // array\n\n var tmpScore = score;\n if (isObject(score)) {\n tmpScore = Object.values(score);\n }\n tmpScore.sort();\n tmpScore.reverse();\n\n if (tmpScore[0] === tmpScore[1]) {\n forEach(slides, function (slide, index) {\n var minScore = getTagData(slide, \"layerMinScore\");\n if (minScore !== undefined) {\n if (minScore === \"uncertain\") {\n selectedIndex = index as number;\n }\n }\n });\n } else {\n var maxCategoryCnt = 0;\n // find quiz category (selectedCategoryIndex) - chosen most often\n var selectedCategoryIndex: number | undefined = undefined;\n forEach(score, function (value, i) {\n var item = parseInt(value as unknown as string);\n if (item > maxCategoryCnt) {\n maxCategoryCnt = item;\n selectedCategoryIndex = parseInt(i as string);\n }\n });\n\n // chose slide with correct result\n forEach(slides, function (slide, index) {\n var minScore = getTagData(slide, \"layerMinScore\");\n if (minScore !== undefined && isNumeric(minScore) && parseInt(minScore) === selectedCategoryIndex) {\n selectedIndex = index as number;\n }\n });\n }\n }\n\n if (score === null) {\n if (slides.length > 0) {\n var slide = slides[0];\n slide.classList.remove(\"hidden\");\n\n sdkApi.cardAnimation?.start(slide);\n return;\n }\n score = 0;\n }\n\n if (selectedIndex === undefined) {\n var map: Array<[number, number]> = [];\n forEach(slides, function (slide, index) {\n var minScore = getTagData(slide, \"layerMinScore\");\n if (minScore !== undefined) {\n map.push([index as number, parseInt(minScore)]);\n }\n });\n\n map.sort(function (a, b) {\n return a[1] - b[1];\n });\n\n for (var i = map.length - 1; i >= 0; i--) {\n if (score >= map[i][1]) {\n selectedIndex = map[i][0];\n break;\n }\n }\n }\n\n var undefinedResult = true;\n if (selectedIndex !== undefined) {\n forEach(slides, function (slide, index) {\n if (index === selectedIndex) {\n slide.classList.remove(\"hidden\");\n undefinedResult = false;\n sdkApi.cardAnimation?.start(slide);\n _sendStatEvent(sdkApi, cardId as number, cardType, slideIndex as number, selectedIndex);\n }\n });\n }\n\n if (undefinedResult) {\n console.warn(\"undefinedResult layer index\");\n sdkApi.showLayer(0);\n }\n};\n\nconst _sendStatEvent = function (sdkApi: SDKApi, cardId: number, cardType: CARD_TYPE, slideIndex: number, layerIndex: number) {\n try {\n WidgetBase.sendStatisticEventToApp(\n sdkApi,\n \"layout-show\",\n {\n ...WidgetBase.getStatisticEventBaseFieldsShortForm(cardId, slideIndex),\n li: layerIndex,\n },\n {\n ...WidgetBase.getStatisticEventBaseFieldsFullForm(cardId, cardType, slideIndex),\n layout_index: layerIndex,\n }\n );\n } catch (error) {\n console.error(error);\n }\n};\n\nexport class WidgetMultiSlide {\n public static api = {\n init: function (slides: Array<HTMLElement>, localData: Record<string, any>, sdkApi: SDKApi) {\n displaySlide(slides, localData, sdkApi);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getElementBounding, getTagDataAsNumber, getValueOrException, isArray, isNumber, isObject, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase, Widgets } from \"../base\";\nimport { WidgetPollOptions, WidgetPollSharedData } from \"./poll.h\";\n\nexport class WidgetPoll extends WidgetBase<WidgetPollOptions> {\n static DEFAULTS = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-poll\";\n\n private label: HTMLElement | null;\n private readonly percentFillMask: HTMLElement | null;\n private readonly maskedVariants: Array<HTMLElement>;\n private readonly variantsViewGroup: HTMLElement;\n private readonly variants: Array<HTMLElement>;\n private readonly variantsTexts: Array<string>;\n private readonly isInvertedPercentFilledMaskDirection: boolean;\n private readonly getUseResponseOnFirstButton: boolean;\n private readonly getUseResponseOnSecondButton: boolean;\n private readonly showClientTotalResult: boolean;\n private selectedVariant: number | undefined;\n private nativeDialogueWasOpened: boolean = false;\n private answerDuration: number = 0;\n private elementRect: DOMRect;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n */\n constructor(element: HTMLElement, options: Partial<WidgetPollOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n\n this.percentFillMask = this.element.querySelector<HTMLElement>(\".percent-filled-variants-view-group-mask\");\n this.maskedVariants = slice.call(this.element.querySelectorAll(\".variants-box .variants-view-group.percent-filled-variants-view-group .variant-view\"));\n\n this.variantsViewGroup = getValueOrException(\n this.element.querySelector<HTMLElement>(\".variants-box .variants-view-group:not(.percent-filled-variants-view-group)\"),\n \"Empty variantsViewGroup\"\n );\n this.variants = slice.call(this.variantsViewGroup.querySelectorAll(\".variant-view\"));\n\n this.variantsTexts = [];\n forEach(this.variants, (element, index) => {\n const label = element.querySelector(\".label\");\n if (label) {\n this.variantsTexts.push(label.textContent ?? \"\");\n }\n });\n\n this.isInvertedPercentFilledMaskDirection =\n this.element.classList.contains(\"theme-translucent\") || this.element.classList.contains(\"base-theme-translucent\");\n\n this.getUseResponseOnFirstButton = Boolean(getTagDataAsNumber(this.element, \"getUserResponseOnFirstButton\"));\n this.getUseResponseOnSecondButton = Boolean(getTagDataAsNumber(this.element, \"getUserResponseOnSecondButton\"));\n this.showClientTotalResult = Boolean(getTagDataAsNumber(this.element, \"showClientTotalResult\"));\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n this.selectedVariant = undefined;\n\n if (this.localData) {\n if (this.localData[\"_p_g_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectVariant(this.localData[\"_p_g_\" + this.elementId + \"_sa\"], true);\n } else {\n this._clearVariantSelection();\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n\n this.nativeDialogueWasOpened = false;\n }\n\n private _statEventPollAnswer(): void {\n this.answerDuration = new Date().getTime() - this.firstOpenTime;\n try {\n if (this.selectedVariant !== undefined) {\n const labelText = this.label?.textContent ?? \"\";\n const variantText = this.variantsTexts[this.selectedVariant] ? this.variantsTexts[this.selectedVariant] : \"\";\n\n this.sendStatisticEventToApp(\n \"w-poll-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedVariant,\n wal: variantText,\n d: this.answerDuration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: this.selectedVariant,\n widget_answer_label: variantText,\n duration_ms: this.answerDuration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventInputSave(responseText: string): void {\n try {\n if (this.selectedVariant !== undefined) {\n const labelText = this.label?.textContent ?? \"\";\n const variantText = this.variantsTexts[this.selectedVariant] ? this.variantsTexts[this.selectedVariant] : \"\";\n\n this.sendStatisticEventToApp(\n \"w-poll-clarification\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedVariant,\n wal: variantText,\n wv: responseText,\n d: this.answerDuration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: this.selectedVariant,\n widget_answer_label: variantText,\n widget_value: responseText,\n duration_ms: this.answerDuration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n _selectVariant(index: number, filled: boolean = false): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedVariant = index;\n\n this.localData[\"_p_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n this.element.classList.add(\"selected-\" + this.selectedVariant);\n if (filled) {\n this.element.classList.add(\"filled\");\n }\n\n if (this.showClientTotalResult) {\n this.element.classList.add(\"with-total-result\");\n this.displayPercents(index, filled);\n }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearVariantSelection(): void {\n forEach(this.variants, function (variant) {\n variant.classList.remove(\"selected\");\n });\n\n this.element.classList.remove(\"done\");\n this.element.classList.remove(\"selected-\" + this.selectedVariant);\n this.element.classList.remove(\"filled\");\n\n this.selectedVariant = undefined;\n\n this.element.classList.remove(\"with-total-result\");\n // this.displayPercents(index, filled);\n }\n\n private selectVariant(variantView: HTMLElement): boolean {\n this.nativeDialogueWasOpened = false;\n\n if (this.selectedVariant !== undefined) {\n return true;\n }\n\n const index = this.variants.indexOf(variantView);\n if (index !== -1) {\n this.elementRect = this.element.getBoundingClientRect();\n\n if (this.getUseResponseOnFirstButton && index === 0) {\n if (this.sdkApi.isAndroid) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n this.selectedVariant = index;\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n this.nativeDialogueWasOpened = false;\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(`${this.id}_first`, data);\n }\n\n this._statEventPollAnswer();\n\n return false;\n } else if (this.getUseResponseOnSecondButton && index === 1) {\n if (this.sdkApi.isAndroid) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n this.selectedVariant = index;\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(`${this.id}_second`, data);\n }\n\n this._statEventPollAnswer();\n\n return false;\n } else {\n this._selectVariant(index);\n\n this._statEventPollAnswer();\n }\n\n this.completeWidget();\n }\n\n return false;\n }\n\n private _getVariantBoxInPercent(variantIndex: number) {\n const box = {\n sideOffset: 0,\n width: 0,\n };\n\n if (this.variantsViewGroup != null && variantIndex != null && this.variants[0] != null && this.variants[1] != null) {\n const viewGroupWidth = this.variantsViewGroup.clientWidth;\n if (viewGroupWidth > 0) {\n let offset = 0;\n let variantViewMinWidth = 0;\n\n // get min offset for variantView from variants-view-group\n const variantView = this.variants[variantIndex];\n const label = variantView.querySelector(\".label\");\n const percentLabel = variantView.querySelector(\".percent-label\");\n\n if (label != null && percentLabel != null) {\n const variantViewWidth = variantView.clientWidth;\n const labelOffset = (variantViewWidth - label.clientWidth) / 2;\n const percentLabelOffset = (variantViewWidth - percentLabel.clientWidth) / 2;\n offset = Math.min(labelOffset, percentLabelOffset);\n variantViewMinWidth = Math.max(label.clientWidth, percentLabel.clientWidth);\n }\n\n box.sideOffset = (offset / viewGroupWidth) * 100;\n box.width = (variantViewMinWidth / viewGroupWidth) * 100;\n }\n }\n\n return box;\n }\n\n displayPercents(selectedVariantIndex: number, filled: boolean = false): void {\n let pollAllocation: WidgetPollSharedData[string] = [0, 0];\n let pollAllocationTs: number | undefined = undefined;\n const sharedData = this.sdkApi.getWidgetsSharedData<Widgets.Poll>(this.cardId, Widgets.Poll);\n if (sharedData && sharedData[this.elementId] != null && (isObject(sharedData[this.elementId]) || isArray(sharedData[this.elementId]))) {\n pollAllocation = sharedData[this.elementId];\n if (isObject(sharedData[this.elementId])) {\n pollAllocation = slice.call(Object.values(sharedData[this.elementId])) as unknown as WidgetPollSharedData[string];\n }\n pollAllocationTs = sharedData.ts;\n }\n\n // todo debug\n // pollAllocation[0] = 10;\n // pollAllocation[1] = 20;\n\n const pollDoneAt = this.localData[\"_p_g_\" + this.elementId + \"_done_at\"];\n\n if (pollAllocationTs === undefined || pollDoneAt === undefined || pollDoneAt > pollAllocationTs) {\n forEach(this.variants, (element, index) => {\n const key = index as 0 | 1;\n if (pollAllocation[key] === undefined || !isNumber(pollAllocation[key])) {\n pollAllocation[key] = 0;\n }\n if (selectedVariantIndex === key) {\n ++pollAllocation[key];\n }\n });\n }\n\n // calc percents\n let percents: Array<number> = [],\n total = 0;\n forEach(this.variants, (element, index) => {\n const key = index as 0 | 1;\n if (pollAllocation[key] !== undefined) {\n if (!isNumber(pollAllocation[key])) {\n percents[key] = parseInt(String(pollAllocation[key]));\n } else {\n percents[key] = pollAllocation[key];\n }\n\n if (!isNumber(percents[key]) || isNaN(percents[key])) {\n percents[key] = 0;\n }\n } else {\n percents[key] = 0;\n }\n total += percents[key];\n });\n for (let i = 0; i < percents.length; i++) {\n if (total !== 0) {\n percents[i] = Math.round((percents[i] / total) * 100);\n if (percents[i] > 100) {\n percents[i] = 100;\n }\n } else {\n percents[i] = 0;\n }\n }\n\n const percentsTotal = function () {\n let acc = 0;\n for (let i = 0; i < percents.length; i++) {\n acc += percents[i];\n }\n return acc;\n };\n\n const start = new Date().getTime();\n while (percentsTotal() > 100) {\n percents[percents.length - 1]--;\n if (new Date().getTime() - start >= 1000) {\n break;\n }\n }\n\n let variantWithMinPercentsRelativeWidth = 0;\n let variantWithMinPercentsIndex = null;\n forEach(this.variants, (element, index) => {\n const key = index as 0 | 1;\n const percent = percents[key];\n\n const variant = element;\n const maskedVariant = this.maskedVariants[key];\n\n if (this.selectedVariant === key) {\n variant.classList.add(\"selected\");\n if (maskedVariant != null) {\n maskedVariant.classList.add(\"selected\");\n }\n }\n\n const percentLabel = variant.querySelector(\".percent-label\");\n if (percentLabel != null) {\n percentLabel.innerHTML = percent + \"%\";\n }\n const maskedPercentLabel = maskedVariant?.querySelector(\".percent-label\");\n if (maskedPercentLabel != null) {\n maskedPercentLabel.innerHTML = percent + \"%\";\n }\n });\n\n const cb = () => {\n if (\n this.percentFillMask != null &&\n this.variants[0] != null &&\n this.variants[1] != null &&\n this.selectedVariant != null &&\n percents[this.selectedVariant] != null\n ) {\n const selectedVariantPercent = percents[this.selectedVariant];\n let limit = 0;\n let percent = 0;\n\n variantWithMinPercentsIndex = 0;\n if (percents[1] < percents[0]) {\n variantWithMinPercentsIndex = 1;\n }\n\n const boxPercents = this._getVariantBoxInPercent(variantWithMinPercentsIndex);\n variantWithMinPercentsRelativeWidth = boxPercents.width;\n\n let offset = 0;\n if (this.selectedVariant === 0) {\n if (this.isInvertedPercentFilledMaskDirection) {\n if (variantWithMinPercentsIndex === 1) {\n percent = Math.max(variantWithMinPercentsRelativeWidth, 100 - selectedVariantPercent);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, 100 - selectedVariantPercent);\n }\n offset = (50 - percent) / 2;\n\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(0));\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(percent));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n } else {\n if (variantWithMinPercentsIndex === 0) {\n // real variant percent or variantView min width\n percent = Math.max(selectedVariantPercent, variantWithMinPercentsRelativeWidth);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, selectedVariantPercent);\n }\n offset = (50 - percent) / -2;\n\n // decrease alt color from start to firstVariant percents\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(percent));\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(0));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n }\n } else if (this.selectedVariant === 1) {\n if (this.isInvertedPercentFilledMaskDirection) {\n if (variantWithMinPercentsIndex === 0) {\n percent = Math.max(variantWithMinPercentsRelativeWidth, 100 - selectedVariantPercent);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, 100 - selectedVariantPercent);\n }\n offset = (50 - percent) / -2;\n\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(percent));\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(0));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n } else {\n // decrease alt color from end to secondVariant percents\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(0));\n if (variantWithMinPercentsIndex === 1) {\n // real variant percent or variantView min width\n percent = Math.max(selectedVariantPercent, variantWithMinPercentsRelativeWidth);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, selectedVariantPercent);\n }\n offset = (50 - percent) / 2;\n\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(percent));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n }\n }\n }\n };\n\n // if (filled) {\n // cb();\n // } else {\n // wait for percent render done (for calc correct variantView width)\n this.env.requestAnimationFrame(cb);\n // }\n }\n\n public setUserText(text: string, buttonPosition: \"first_button\" | \"second_button\"): void {\n this.slide.classList.remove(\"data-input-editing\");\n this.slide.classList.remove(\"blured\");\n\n if (this.selectedVariant != null) {\n this._selectVariant(this.selectedVariant);\n }\n\n if (!this.disableTimer && this.nativeDialogueWasOpened) {\n this.sdkApi.resumeUI();\n this.nativeDialogueWasOpened = false;\n }\n\n this.localData[\"_p_g_\" + this.elementId + \"_user_response_on_\" + buttonPosition] = text;\n this.completeWidget();\n\n this._statEventInputSave(text);\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_p_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // ответ на вопрос\n this.localData[\"_&ts_p_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_p_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public slidePollIsDone(): boolean {\n return this.localData[\"_p_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetPoll.widgetClassName,\n onRefreshUserData: WidgetPoll.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetPoll.initWidget<WidgetPoll, WidgetPollOptions>(\n element,\n localData,\n (element, options) => new WidgetPoll(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(element)?.onStop();\n },\n /**\n * click\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetPoll.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(widgetElement);\n if (widget) {\n return widget.selectVariant(element);\n }\n }\n return false;\n },\n slidePollIsDone: function (element: HTMLElement) {\n const widget = WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(element);\n if (widget) {\n return widget.slidePollIsDone();\n }\n return true;\n },\n setUserData: function (id: string, text: string) {\n // id = widgetId_first || widgetId_second\n let correctWidgetId = id;\n let buttonPosition: \"first_button\" | \"second_button\" | undefined;\n if (id.endsWith(\"_first\")) {\n buttonPosition = \"first_button\";\n correctWidgetId = id.replace(/_first$/, \"\");\n } else if (id.endsWith(\"_second\")) {\n buttonPosition = \"second_button\";\n correctWidgetId = id.replace(/_second$/, \"\");\n }\n\n const widget = WidgetPoll.getInstanceById<WidgetPoll, WidgetPollOptions>(correctWidgetId);\n if (widget && buttonPosition) {\n widget.setUserText(text, buttonPosition);\n }\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetPollLayersOptions } from \"./poll_layers.h\";\n\nexport class WidgetPollLayers extends WidgetBase<WidgetPollLayersOptions> {\n static DEFAULTS: WidgetPollLayersOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n layers: [],\n };\n\n public static widgetClassName = \"narrative-element-poll-layers\";\n\n private label: HTMLElement | null;\n private readonly variants: Array<HTMLElement>;\n private variantsTexts: Array<string>;\n private selectedVariant: number | undefined;\n private readonly layers: Array<HTMLElement>;\n\n constructor(element: HTMLElement, options: Partial<WidgetPollLayersOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n this.layers = this.options.layers;\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view\"));\n\n this.variantsTexts = [];\n forEach(this.variants, (element, index) => {\n const label = element.querySelector(\".label\");\n if (label) {\n this.variantsTexts.push(label.textContent ?? \"\");\n }\n });\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n this.selectedVariant = undefined;\n\n if (this.slidePollIsDone()) {\n this._selectVariant(this.localData[\"_pl_g_\" + this.elementId + \"_sa\"]);\n } else {\n this._showLayer(this.layers, 0);\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _statEventPollVariant(): void {\n try {\n if (this.selectedVariant != null) {\n const labelText = this.label?.textContent ?? \"\";\n const variantText = this.variants[this.selectedVariant]?.textContent ?? \"\";\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-poll-layers-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedVariant,\n wal: variantText,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_variant: this.selectedVariant,\n widget_answer_label: variantText,\n duration_ms: duration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _selectVariant(index: number, userAction: boolean = false): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedVariant = index;\n\n this.localData[\"_pl_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n // main\n let layerIndex = 0;\n if (index === 0) {\n layerIndex = 1;\n } else if (index === 1) {\n layerIndex = 2;\n }\n\n this._showLayer(this.layers, layerIndex, userAction);\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n public selectVariant(variant: HTMLElement): boolean {\n if (this.selectedVariant !== undefined) {\n return true;\n }\n\n const index = this.variants.indexOf(variant);\n if (index !== -1) {\n this._selectVariant(index, true);\n this.completeWidget();\n this._statEventPollVariant();\n }\n return false;\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_pl_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // ответ на вопрос\n this.localData[\"_&ts_pl_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData != null && this.localData[\"_pl_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public slidePollIsDone(): boolean {\n return this.localData != null && this.localData[\"_pl_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetPollLayers.widgetClassName,\n onRefreshUserData: WidgetPollLayers.onRefreshUserData,\n init: function (\n element: HTMLElement,\n layers: Array<HTMLElement>,\n localData: Record<string, any>,\n onWidgetComplete: OnWidgetComplete,\n sdkApi: SDKApi\n ): void {\n WidgetPollLayers.initWidget<WidgetPollLayers, WidgetPollLayersOptions>(\n element,\n localData,\n (element, options) => new WidgetPollLayers(element, { ...options, layers }, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetPollLayers.getInstance<WidgetPollLayers, WidgetPollLayersOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetPollLayers.getInstance<WidgetPollLayers, WidgetPollLayersOptions>(element)?.onStop();\n },\n /**\n * click on poll variant\n * @param element\n * @returns {boolean}\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetPollLayers.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetPollLayers.getInstance<WidgetPollLayers, WidgetPollLayersOptions>(widgetElement);\n if (widget) {\n return widget.selectVariant(element);\n }\n }\n return false;\n },\n };\n}\n","import { determineLocale } from \"@utils\";\n\nexport type FormatterDatetimeOptions = {\n timezone?: string;\n};\n\nclass Formatter {\n private readonly intlSupport: boolean = false;\n\n public defaultTimeFormat: string = \"medium\";\n\n public defaultDatetimeFormat: string = \"medium\";\n\n public defaultDateFormat: string = \"medium\";\n\n private decimalSeparator: string = \".\";\n\n private thousandSeparator: string = \" \";\n\n private spaceSeparator: string = \" \";\n\n public static readonly Second = 1000;\n public static readonly Minute = 60 * Formatter.Second;\n public static readonly Hour = 60 * Formatter.Minute;\n public static readonly Day = 24 * Formatter.Hour;\n\n private datetimeFormatOptions: Record<string, Intl.DateTimeFormatOptions> = {\n short: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n },\n medium: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n },\n long: {\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"short\",\n },\n full: {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"long\",\n },\n };\n\n private dateFormatOptions: Record<string, Intl.DateTimeFormatOptions> = {\n short: {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n },\n medium: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n },\n long: {\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n },\n full: {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n },\n };\n\n private timeFormatOptions: Record<string, Intl.DateTimeFormatOptions> = {\n short: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n },\n medium: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n },\n long: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"short\",\n },\n full: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"long\",\n },\n };\n\n private readonly context;\n\n constructor(context: {\n determineLocale: () => string;\n i18n: { t: (key: string) => string; tc: (key: string, value: string | number) => string } | undefined;\n }) {\n this.intlSupport = typeof Intl === \"object\" && Intl !== null;\n this.context = context;\n }\n\n public asDate(value: any, format: string | undefined = undefined, options: FormatterDatetimeOptions = {}): string {\n if (!format) {\n format = this.defaultDateFormat;\n }\n return this.formatDateTimeValue(value, format, \"date\", options);\n }\n\n public asTime(value: any, format: string | undefined = undefined, options: FormatterDatetimeOptions = {}): string {\n if (!format) {\n format = this.defaultTimeFormat;\n }\n\n return this.formatDateTimeValue(value, format, \"time\", options);\n }\n\n public asDatetime(value: any, format: string | undefined = undefined, options: FormatterDatetimeOptions = {}): string {\n if (!format) {\n format = this.defaultTimeFormat;\n }\n\n return this.formatDateTimeValue(value, format, \"datetime\", options);\n }\n\n private formatDateTimeValue(\n value: any,\n format: string | undefined = undefined,\n type: string | undefined = undefined,\n options: FormatterDatetimeOptions = {}\n ): string {\n const normalizedValue: Date | null = Formatter.normalizeDatetimeValue(value);\n\n if (normalizedValue === null) {\n return \"\";\n }\n if (this.intlSupport) {\n let formatterOptions: Intl.DateTimeFormatOptions = {};\n if (type === \"date\") {\n if (typeof format === \"undefined\") {\n format = this.defaultDateFormat;\n }\n if (typeof format === \"object\") {\n formatterOptions = format;\n } else {\n if (format in this.dateFormatOptions) {\n formatterOptions = this.dateFormatOptions[format];\n } else {\n return this.momentFallback(normalizedValue, format, options);\n }\n }\n } else if (type === \"time\") {\n if (typeof format === \"undefined\") {\n format = this.defaultTimeFormat;\n }\n if (typeof format === \"object\") {\n formatterOptions = format;\n } else {\n if (format in this.timeFormatOptions) {\n formatterOptions = this.timeFormatOptions[format];\n } else {\n return this.momentFallback(normalizedValue, format, options);\n }\n }\n } else if (type === \"datetime\") {\n if (typeof format === \"undefined\") {\n format = this.defaultDatetimeFormat;\n }\n if (typeof format === \"object\") {\n formatterOptions = format;\n } else {\n if (format in this.datetimeFormatOptions) {\n formatterOptions = this.datetimeFormatOptions[format];\n } else {\n return this.momentFallback(normalizedValue, format, options);\n }\n }\n }\n\n if (options.timezone) {\n formatterOptions.timeZone = options.timezone;\n }\n\n const formatted = Intl.DateTimeFormat(this.locale, formatterOptions).format(normalizedValue);\n\n return Intl.DateTimeFormat(this.locale, formatterOptions).format(normalizedValue);\n }\n\n return \"\";\n }\n\n private momentFallback(value: Date, format: string, options: FormatterDatetimeOptions = {}): string {\n return value.toLocaleString(this.locale);\n // return this.context.$moment(value).format(format);\n }\n\n public asInteger(value: any): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n maximumFractionDigits: 0,\n useGrouping: true,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue, 0, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asDecimal(value: any, decimals: number | undefined = 2): string {\n if (value == null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n useGrouping: true,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asDecimalMax(value: any, decimals: number | undefined = 2): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n maximumFractionDigits: decimals,\n minimumFractionDigits: 0,\n useGrouping: true,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asPercent(value: any, decimals: number = 0): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n style: \"percent\",\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue * 100, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asPercentMax(value: any, decimals: number = 0): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n style: \"percent\",\n maximumFractionDigits: decimals,\n minimumFractionDigits: 0,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue * 100, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asRelativeTime(value: any, referenceTime: any = undefined): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n const normalizedValue = Formatter.normalizeDatetimeValue(value);\n if (normalizedValue == null) {\n return this.nullDisplay;\n }\n\n if (referenceTime === undefined || referenceTime === null) {\n referenceTime = new Date();\n } else {\n referenceTime = Formatter.normalizeDatetimeValue(value);\n }\n\n const dt = referenceTime.getTime() - normalizedValue.getTime();\n const absDt = Math.abs(dt);\n const invert = dt < 0;\n if (absDt < Formatter.Second) {\n return this.context.i18n?.t(\"format.relativeTime.justNow\").toString() ?? \"\";\n }\n\n const seconds = absDt / 1000;\n let interval = seconds / 31536000;\n\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.year\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 2592000;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.month\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 86400;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.day\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 3600;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.hour\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 60;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.minute\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n return this.context.i18n?.tc(\"format.relativeTime.second\" + (invert ? \"In\" : \"Ago\"), Math.floor(seconds)).toString() ?? \"\";\n }\n\n public asDuration(value: any) {\n if (value === undefined || value === null) {\n return \"00:00\";\n }\n const normalizedValue = Formatter.normalizeDatetimeValue(value);\n if (normalizedValue === undefined || normalizedValue === null) {\n return \"00:00\";\n }\n const hours = Math.floor(value / 3600);\n const minutes = Math.floor((value / 60) % 60);\n const seconds = value % 60;\n if (hours > 0) {\n return `${hours}:${minutes < 10 ? 0 : \"\"}${minutes}:${seconds < 10 ? 0 : \"\"}${seconds}`;\n } else {\n return `${minutes < 10 ? 0 : \"\"}${minutes}:${seconds < 10 ? 0 : \"\"}${seconds}`;\n }\n }\n\n public asCurrency(value: any, currency: string | undefined = undefined): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n if (currency === undefined || currency === null) {\n currency = \"USD\";\n }\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (normalizedValue == null) {\n return this.nullDisplay;\n }\n\n let decimals = 2;\n if (Number.isInteger(normalizedValue)) {\n decimals = 0;\n }\n\n if (currency === \"RUR\" || currency === \"RUB\") {\n return `${this.asDecimal(normalizedValue, decimals)}${this.spaceSeparator}₽`;\n }\n\n if (this.intlSupport) {\n try {\n return Intl.NumberFormat(this.locale, {\n style: \"currency\",\n currency,\n currencyDisplay: \"symbol\",\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n }).format(normalizedValue);\n } catch (e) {\n console.error(e);\n return String(normalizedValue);\n }\n }\n\n return currency + \" \" + this.asDecimal(normalizedValue, 2);\n }\n\n public asShortSizeCasual(value: any, dp: number = 1) {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (normalizedValue === undefined || normalizedValue === null) {\n return this.nullDisplay;\n }\n\n const thresh = 1024;\n if (Math.abs(value) < thresh) {\n return value + \" B\";\n }\n\n const units = [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n let u = -1;\n const r = 10 ** dp;\n\n do {\n value /= thresh;\n ++u;\n } while (Math.round(Math.abs(value) * r) / r >= thresh && u < units.length - 1);\n\n return value.toFixed(dp) + \" \" + units[u];\n }\n\n public asShortSize(value: any, si: boolean = false, dp: number = 1) {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (normalizedValue === undefined || normalizedValue === null) {\n return this.nullDisplay;\n }\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(value) < thresh) {\n return value + \" B\";\n }\n\n const units = si ? [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"] : [\"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n value /= thresh;\n ++u;\n } while (Math.round(Math.abs(value) * r) / r >= thresh && u < units.length - 1);\n\n return value.toFixed(dp) + \" \" + units[u];\n }\n\n private static numberFormat(value: number, decimals: number = 0, decimalSeparator: string = \".\", thousandsSeparator: string): string {\n const sign = value < 0 ? \"-\" : \"\";\n\n const sNumber = Math.abs(parseInt((+value || 0).toFixed(decimals))) + \"\";\n const len = sNumber.length;\n const tchunk = len > 3 ? len % 3 : 0;\n\n const chFirst = tchunk ? sNumber.substr(0, tchunk) + thousandsSeparator : \"\";\n const chRest = sNumber.substr(tchunk).replace(/(\\d\\d\\d)(?=\\d)/g, \"$1\" + thousandsSeparator);\n const chLast = decimals ? decimalSeparator + (Math.abs(value) - parseFloat(sNumber)).toFixed(decimals).slice(2) : \"\";\n\n return sign + chFirst + chRest + chLast;\n }\n\n public get nullDisplay(): string {\n return \"\";\n // if (this.context && this.context.i18n) {\n // return this.context.i18n.t(\"notSet\").toString();\n // }\n //\n // return \"not set\";\n }\n\n private static normalizeDatetimeValue(value: any): Date | null {\n const type = typeof value;\n if (type === \"object\" && value instanceof Date) {\n return value;\n } else if (type === \"number\") {\n return new Date(value);\n } else if (type === \"string\") {\n if (isNaN(value)) {\n return new Date(parseInt(value));\n } else {\n const d = Date.parse(value);\n if (isNaN(d)) {\n return null;\n }\n return new Date(d);\n }\n }\n return null;\n }\n\n private static normalizeNumericValue(value: any): number {\n const type = typeof value;\n if ((type === \"object\" && value === null) || type === \"undefined\") {\n return 0;\n } else if (type === \"number\") {\n return value;\n }\n return parseFloat(value);\n }\n\n public get locale(): string {\n return this.context.determineLocale();\n }\n}\n\nexport const formatter = new Formatter({ determineLocale, i18n: undefined });\n","export const enum SwipeGesture {\n undefined,\n Tap,\n SwipeUp,\n SwipeDown,\n SwipeLeft,\n SwipeRight,\n}\n\nexport class SwipeGestureDetector {\n constructor(\n private readonly env: Window,\n private readonly isScreenSupportsTouch: boolean,\n private readonly canContinueHandleDown: (e: MouseEvent | TouchEvent) => boolean,\n private readonly onStart: (e: MouseEvent | TouchEvent) => void,\n private readonly onUpdate: (e: MouseEvent | TouchEvent) => void,\n private readonly onEnd: (e: MouseEvent | TouchEvent, gesture: SwipeGesture) => void\n ) {\n // Store context\n this.handleDown = this.handleDown.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n\n this.supportsTouch = false;\n\n if (this.isScreenSupportsTouch) {\n this.env.document.addEventListener(\"touchstart\", this.handleDown, false);\n } else {\n this.env.document.addEventListener(\"mousedown\", this.handleDown, false);\n }\n }\n\n startPageCoordinate = [0, 0];\n limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n pageWidth = window.innerWidth || document.body.clientWidth;\n threshold = Math.max(1, Math.floor(0.01 * this.pageWidth));\n supportsTouch = false;\n\n handleDown(e: MouseEvent | TouchEvent) {\n // console.log(\"handleDown\", {e, startPageCoordinate: this.startPageCoordinate})\n if (!this.canContinueHandleDown(e)) {\n return;\n }\n\n this.startPageCoordinate = this.getPageCoordinate(e);\n\n if (this.isScreenSupportsTouch) {\n this.env.document.addEventListener(\"touchmove\", this.handleMove, false);\n this.env.document.addEventListener(\"touchend\", this.handleEnd, false);\n } else {\n this.env.document.addEventListener(\"mousemove\", this.handleMove, false);\n this.env.document.addEventListener(\"mouseup\", this.handleEnd, false);\n }\n\n this.onStart(e);\n }\n\n handleMove(e: MouseEvent | TouchEvent) {\n // console.log(\"handleMove\", { startPageCoordinate: this.startPageCoordinate})\n // this.currentPageCoordinate = this.getPageCoordinate(e);\n this.onUpdate(e);\n }\n\n handleEnd(e: MouseEvent | TouchEvent) {\n if (this.isScreenSupportsTouch) {\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n } else {\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n }\n\n const currentPageCoordinate = this.getPageCoordinate(e);\n\n let gesture = SwipeGesture.undefined;\n const x = currentPageCoordinate[0] - this.startPageCoordinate[0];\n const y = currentPageCoordinate[1] - this.startPageCoordinate[1];\n\n // console.log(\"handleEnd\", {currentPageCoordinate, startPageCoordinate: this.startPageCoordinate})\n\n let xy = Math.abs(x / y);\n let yx = Math.abs(y / x);\n if (Math.abs(x) > this.threshold || Math.abs(y) > this.threshold) {\n if (yx <= this.limit) {\n if (x < 0) {\n gesture = SwipeGesture.SwipeLeft;\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeLeft\", yx, x, threshold: this.threshold}), true);\n } else {\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeRight\", yx, x, threshold: this.threshold}), true);\n gesture = SwipeGesture.SwipeRight;\n }\n }\n if (xy <= this.limit) {\n if (y < 0) {\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeUp\", xy, y, threshold: this.threshold}), true);\n gesture = SwipeGesture.SwipeUp;\n } else {\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeDown\", xy, y, threshold: this.threshold}), true);\n gesture = SwipeGesture.SwipeDown;\n }\n }\n } else {\n // @ts-ignore\n // _log(JSON.stringify({t: \"Tap\", x, y, threshold: this.threshold}), true);\n gesture = SwipeGesture.Tap;\n }\n\n this.onEnd(e, gesture);\n }\n\n destroy() {\n if (this.isScreenSupportsTouch) {\n this.env.document.removeEventListener(\"touchstart\", this.handleDown);\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n } else {\n this.env.document.removeEventListener(\"mousedown\", this.handleDown);\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n }\n }\n\n private getPageCoordinate(e: MouseEvent | TouchEvent): [number, number] {\n let x = 0;\n let y = 0;\n\n if ((e as MouseEvent)[\"clientX\"] != null && (e as MouseEvent)[\"clientY\"] != null) {\n x = (e as MouseEvent)[\"clientX\"];\n y = (e as MouseEvent)[\"clientY\"];\n } else if (\n (e as TouchEvent).touches &&\n (e as TouchEvent).touches[0] &&\n (e as TouchEvent).touches[0][\"clientX\"] != null &&\n (e as TouchEvent).touches[0][\"clientY\"] != null\n ) {\n x = (e as TouchEvent).touches[0][\"clientX\"];\n y = (e as TouchEvent).touches[0][\"clientY\"];\n } else if (\n (e as TouchEvent).changedTouches &&\n (e as TouchEvent).changedTouches[0] &&\n (e as TouchEvent).changedTouches[0][\"clientX\"] != null &&\n (e as TouchEvent).changedTouches[0][\"clientY\"] != null\n ) {\n x = (e as TouchEvent).changedTouches[0][\"clientX\"];\n y = (e as TouchEvent).changedTouches[0][\"clientY\"];\n }\n // @ts-ignore\n else if (e.currentPoint && e.currentPoint[\"x\"] != null && e.currentPoint[\"y\"] != null) {\n // @ts-ignore\n x = e.currentPoint[\"x\"];\n // @ts-ignore\n y = e.currentPoint[\"y\"];\n }\n\n return [x, y];\n }\n}\n","import { SDKApi } from \"@skd_api\";\nimport { addClass, FilterNumber, getTagData, isObject, isScreenSupportsTouch, removeClass } from \"@utils\";\nimport { formatter } from \"../../formatter\";\nimport { SwipeGesture, SwipeGestureDetector } from \"../../SwipeGestureDetector\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetProductsOptions } from \"./products.h\";\n\ntype OfferModel = {\n id: number;\n offerId: string;\n name?: string;\n description?: string;\n price?: string;\n oldPrice?: string;\n currency?: string;\n availability: number; // * 0 - OUT_OF_STOCK * 1 - IN_STOCK * 2 - PREORDER * 3 - BACKORDER\n adult?: boolean;\n coverUrl?: string;\n url?: string;\n};\n\nexport type ProductsWidgetOptions = {\n productsList: ProductsListOptions;\n productsCard: ProductsCardOptions;\n loader: {\n default: {\n color: string;\n accentColor: string;\n };\n custom?: string;\n };\n};\n\nexport type ProductsCardOptions = {\n mainTextColor: string;\n oldPriceTextColor: string;\n imageBackgroundColor: string;\n imageCornerRadius: number;\n titleFont?: string;\n subtitleFont?: string;\n priceFont?: string;\n oldPriceFont?: string;\n};\n\nexport type ProductsListOptions = {\n closeBackgroundColor: string;\n closeImage?: string;\n substrateHeight: number;\n substrateColor: string;\n dimColor: string;\n};\n\nconst ProductsWidgetOptionsDefault: ProductsWidgetOptions = {\n productsList: {\n closeBackgroundColor: \"#000000\",\n substrateHeight: 200,\n substrateColor: \"#FFFFFF\",\n dimColor: \"rgba(0, 0, 0, 0.5)\",\n },\n productsCard: {\n mainTextColor: \"#000000\",\n oldPriceTextColor: \"#CCCCCC\",\n imageBackgroundColor: \"transparent\",\n imageCornerRadius: 8,\n },\n loader: {\n default: {\n color: \"gray\",\n accentColor: \"transparent\",\n },\n },\n};\n\n/**\n * adult: null\n * availability: 1\n * coverUrl: \"https://cdn.test.inappstory.com/np/file/cf/wb/wc/vcaji5clqon3nkwdwle3cjz63x.jpg?k=KgAAAAAAAAACAQ\"\n * currency: \"RUR\"\n * description: \"Непромокаемый комбинезон - дождевик детский Муссон\"\n * id: 204\n * name: \"Непромокаемый комбинезон - дождевик детский \\\"Муссон\\\"\"\n * offerId: \"10125\"\n * oldPrice: null\n * price: \"2690.0000\"\n * url: \"http://www.songnomik.ru/products/detskaya-odezhda-optom-dlya-novorozhdennyh/detskie-kombinezony-optom/2166483.html\"\n */\n\nexport class WidgetProducts extends WidgetBase<WidgetProductsOptions> {\n static DEFAULTS: WidgetProductsOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-products\";\n\n private themeName: string | null;\n private baseThemeName: string | null;\n\n private readonly captionView: HTMLElement | null;\n private readonly linkTarget: Array<number> = [];\n private readonly msgNetworkError: string | undefined;\n private readonly msgServiceError: string | undefined;\n\n private swipeGestureDetector: SwipeGestureDetector | null = null;\n private isClickCapturedByWidget: boolean = false;\n private readonly isScreenSupportsTouch: boolean = false;\n\n constructor(element: HTMLElement, options: Partial<WidgetProductsOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.captionView = this.element.querySelector(\".narrative-element-text-lines\");\n\n const linkTarget = decodeURIComponent(getTagData(element, \"linkTarget\") ?? \"[]\");\n try {\n let parsed = JSON.parse(linkTarget);\n if (Array.isArray(parsed)) {\n this.linkTarget = parsed.filter(FilterNumber);\n }\n } catch (e) {\n console.error(e);\n }\n\n const themeClasses = Array.from(this.element.classList).filter(item => item.startsWith(\"theme-\") || item.startsWith(\"base-theme-\"));\n themeClasses.forEach(item => {\n if (item.startsWith(\"theme-\") && this.themeName == null) {\n this.themeName = item;\n }\n if (item.startsWith(\"base-theme-\") && this.baseThemeName == null) {\n this.baseThemeName = item;\n }\n });\n\n this.isScreenSupportsTouch = isScreenSupportsTouch(this.env);\n\n this.msgNetworkError = getTagData(this.element, \"msgNetworkError\");\n this.msgServiceError = getTagData(this.element, \"msgServiceError\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n }\n\n public onStart(): void {\n super.onStart();\n\n // reinit for case when we returned to slide from other slide and onStop destroyed SwipeGestureDetector\n this.initSwipeGestureDetector();\n }\n\n private isTransparentElement(): boolean {\n if (this.element) {\n try {\n const color = window.getComputedStyle(this.element).color;\n if (color === \"transparent\" || color === \"rgba(0, 0, 0, 0)\" || color === \"rgba(0,0,0,0)\") {\n return true;\n }\n } catch (err) {\n console.error(err);\n }\n }\n return false;\n }\n\n private _statEventWidgetClick(): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n this.sendStatisticEventToApp(\n \"w-products-click\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: JSON.stringify(this.linkTarget),\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: this.linkTarget,\n },\n {\n forceEnableStatisticV2: true,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventWidgetOpen(offers: Array<OfferModel>): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n this.sendStatisticEventToApp(\n \"w-products-open\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: JSON.stringify(this.linkTarget),\n wit: JSON.stringify(offers.map(item => item.offerId)),\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: this.linkTarget,\n widget_items: offers.map(item => item.offerId),\n },\n {\n forceEnableStatisticV2: true,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventWidgetCardClick(offer: OfferModel): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n this.sendStatisticEventToApp(\n \"w-products-card-click\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: offer.offerId,\n wvi: offer.id,\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: offer.offerId,\n widget_value_id: offer.id,\n },\n {\n forceEnableStatisticV2: true,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public async fetchProducts(): Promise<{ message: string; models: Array<OfferModel> }> {\n const fetchAndCacheMedia = async (): Promise<{ message: string; models: Array<OfferModel> }> => {\n if (!this.linkTarget.length) {\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n\n const path = `product/offer?id=${this.linkTarget.join(\",\")}`;\n const headers = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n };\n const profileKey = \"fetch-products\";\n\n try {\n const response = await this.sdkApi.sendApiRequest<Array<OfferModel>>(path, \"GET\", null, headers, null, profileKey);\n // console.log({response});\n const status = response.status;\n\n if (status === 200 || status === 201) {\n if (response.data && Array.isArray(response.data) && response.data.length > 0) {\n try {\n await this.cacheOffersMediaResources(response.data);\n } catch (error) {\n console.error(error);\n }\n return { message: \"\", models: response.data };\n } else {\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n } else if (status === 12163 || status === 12002) {\n return { message: this.msgNetworkError ?? \"\", models: [] };\n } else {\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n } catch (error) {\n console.error(error);\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n };\n\n return Promise.all([\n fetchAndCacheMedia(),\n new Promise<void>(t => {\n return setTimeout(t, 200);\n }),\n ]).then(([result]) => result);\n }\n\n private cacheOffersMediaResources(offers: Array<OfferModel>): Promise<Array<void>> {\n const cacheItem = (offer: OfferModel) => {\n return new Promise<void>(resolve => {\n if (offer.coverUrl != null) {\n this.env\n .fetch(offer.coverUrl)\n .then(response => {\n if (response != null && response.ok) {\n response\n .blob()\n .then(blob => {\n offer.coverUrl = URL.createObjectURL(blob);\n resolve();\n })\n .catch(resolve);\n } else {\n resolve();\n }\n })\n .catch(resolve);\n } else {\n resolve();\n }\n });\n };\n\n const promises = offers.map(cacheItem);\n return Promise.all(promises);\n }\n\n private revokeOffersMediaResources(offers: Array<OfferModel>): void {\n offers.forEach(offer => {\n if (offer.coverUrl != null) {\n // todo check if coverUrl really is object URL\n URL.revokeObjectURL(offer.coverUrl);\n }\n });\n }\n\n private initSwipeGestureDetector(): void {\n if (this.isOpen) {\n if (this.swipeGestureDetector == null) {\n this.swipeGestureDetector = new SwipeGestureDetector(\n this.env,\n this.isScreenSupportsTouch,\n // detect gestures started on backdrop view\n (e: MouseEvent | TouchEvent) =>\n e.target instanceof HTMLElement ? e.target.classList.contains(\"ias-products-container-backdrop-view\") : true,\n e => {\n // this.isClickCapturedByWidget = true;\n return;\n },\n e => {\n return;\n },\n (e, gesture: SwipeGesture) => {\n if (gesture === SwipeGesture.SwipeDown) {\n this.closeProductsView();\n }\n // this.env.requestAnimationFrame(() => {\n // this.isClickCapturedByWidget = false;\n // });\n }\n );\n }\n }\n }\n\n private productsView: HTMLElement | null = null;\n private isOpen = false;\n\n public get isForcePaused(): boolean {\n return this.isOpen;\n }\n\n private currentModels: Array<OfferModel> = [];\n\n public async openProductsView() {\n if (this.isOpen) {\n return;\n }\n this._statEventWidgetClick();\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n\n if (!this.isTransparentElement()) {\n this.element.classList.add(\"loader\");\n }\n\n // const start = window.performance.now();\n\n const result = await this.fetchProducts();\n // @ts-ignore\n // _log(`fetched for ${window.performance.now() - start}ms`, true);\n\n // console.log({result})\n\n if (result.models.length > 0) {\n this.currentModels = result.models;\n this.productsView = this.createProductsView(this.currentModels, this.closeProductsView.bind(this));\n this.productsView.classList.add(\"ias-products-container-view--visible\");\n this.slide.appendChild(this.productsView);\n this.element.classList.add(\"hidden\");\n this.isOpen = true;\n // prevent next slide navigation gesture\n this.isClickCapturedByWidget = true;\n this.sdkApi.disableVerticalSwipeGesture();\n this.sdkApi.disableBackpress();\n this._statEventWidgetOpen(this.currentModels);\n this.initSwipeGestureDetector();\n } else {\n if (result.message) {\n this.sdkApi.showToast(result.message);\n }\n }\n\n this.element.classList.remove(\"loader\");\n }\n\n public closeProductsView(): void {\n if (!this.isOpen) {\n return;\n }\n\n this.productsView?.classList.add(\"ias-products-container-view--hidden\");\n this.element.classList.remove(\"hidden\");\n this.isClickCapturedByWidget = false;\n if (this.swipeGestureDetector != null) {\n this.swipeGestureDetector.destroy();\n this.swipeGestureDetector = null;\n }\n\n this.sdkApi.enableVerticalSwipeGesture();\n this.sdkApi.enableBackpress();\n const onClosed = () => {\n this.productsView?.removeEventListener(\"animationend\", onClosed);\n this.productsView?.parentElement?.removeChild(this.productsView);\n\n this.revokeOffersMediaResources(this.currentModels);\n\n if (!this.disableTimer) {\n this.sdkApi.resumeUI();\n }\n\n this.isOpen = false;\n this.currentModels = [];\n };\n this.productsView?.addEventListener(\"animationend\", onClosed);\n }\n\n private createCardView(offer: OfferModel) {\n const figure = document.createElement(\"div\");\n figure.classList.add(\"ias-products-card-figure\");\n if (offer.coverUrl) {\n const image = document.createElement(\"img\");\n image.classList.add(\"ias-products-card-figure-image\");\n image.alt = offer.name ?? \"\";\n image.src = offer.coverUrl;\n\n figure.appendChild(image);\n }\n const imageMask = document.createElement(\"div\");\n imageMask.classList.add(\"ias-products-card-figure-image-mask\");\n figure.appendChild(imageMask);\n\n // const subTitle = document.createElement(\"div\");\n // subTitle.classList.add(\"ias-products-card-subtitle\");\n // subTitle.innerText = offer.description ?? \"\";\n\n const title = document.createElement(\"div\");\n title.classList.add(\"ias-products-card-title\");\n title.innerText = offer.name ?? \"\";\n\n let price: HTMLElement | null = null;\n if (offer.price && offer.currency) {\n price = document.createElement(\"div\");\n price.classList.add(\"ias-products-card-price\");\n price.innerHTML = formatter.asCurrency(offer.price, offer.currency);\n }\n\n let oldPrice: HTMLElement | null = null;\n if (offer.oldPrice && offer.currency) {\n oldPrice = document.createElement(\"div\");\n oldPrice.classList.add(\"ias-products-card-old-price\");\n oldPrice.innerHTML = formatter.asCurrency(offer.oldPrice, offer.currency);\n }\n\n const prices = document.createElement(\"div\");\n prices.classList.add(\"ias-products-card-prices\");\n if (price) {\n prices.appendChild(price);\n }\n if (oldPrice) {\n prices.appendChild(oldPrice);\n }\n\n const card = document.createElement(\"div\");\n card.classList.add(\"ias-products-card\");\n card.onclick = e => {\n // prevent click in SDK (slide/story navigation)\n e.stopPropagation();\n e.preventDefault();\n this._statEventWidgetCardClick(offer);\n if (offer.url) {\n this.sdkApi.openUrl({ type: \"link\", link: { type: \"url\", target: offer.url } });\n }\n };\n\n card.appendChild(figure);\n // card.appendChild(subTitle);\n card.appendChild(prices);\n card.appendChild(title);\n\n return card;\n }\n\n private createScrollView(offers: Array<OfferModel>) {\n const scrollViewGroup = document.createElement(\"div\");\n scrollViewGroup.classList.add(\"ias-products-scroll-view-group\");\n\n const scrollView = document.createElement(\"div\");\n scrollView.classList.add(\"ias-products-scroll-view\");\n offers.forEach(offer => scrollView.appendChild(this.createCardView(offer)));\n scrollViewGroup.appendChild(scrollView);\n\n if (!this.isScreenSupportsTouch) {\n const { scrollLeft, scrollRight, mountScrollControls } = this.createScrollControls(scrollView);\n\n const scrollControlsView = document.createElement(\"div\");\n scrollControlsView.classList.add(\"ias-products-scroll-controls-view\");\n\n const scrollControlStartView = document.createElement(\"div\");\n scrollControlStartView.classList.add(\"ias-products-scroll-control-start-view\");\n const scrollControlStartIconView = document.createElement(\"div\");\n scrollControlStartIconView.classList.add(\"ias-products-scroll-control-start-icon-view\");\n scrollControlStartView.appendChild(scrollControlStartIconView);\n scrollControlsView.appendChild(scrollControlStartView);\n scrollControlStartView.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n if (this.layoutDirection === \"ltr\") {\n scrollLeft();\n } else {\n scrollRight();\n }\n };\n\n const scrollControlEndView = document.createElement(\"div\");\n scrollControlEndView.classList.add(\"ias-products-scroll-control-end-view\");\n const scrollControlEndIconView = document.createElement(\"div\");\n scrollControlEndIconView.classList.add(\"ias-products-scroll-control-end-icon-view\");\n scrollControlEndView.appendChild(scrollControlEndIconView);\n scrollControlsView.appendChild(scrollControlEndView);\n scrollControlEndView.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n if (this.layoutDirection === \"ltr\") {\n scrollRight();\n } else {\n scrollLeft();\n }\n };\n mountScrollControls(() => scrollViewGroup.appendChild(scrollControlsView));\n }\n return scrollViewGroup;\n }\n\n private createProductsView(offers: Array<OfferModel>, onClose: () => void) {\n const containerView = document.createElement(\"div\");\n containerView.classList.add(\"ias-products-container-view\");\n if (this.baseThemeName) {\n containerView.classList.add(this.baseThemeName);\n }\n if (this.themeName) {\n containerView.classList.add(this.themeName);\n }\n containerView.dir = this.layoutDirection;\n\n const backdropView = document.createElement(\"div\");\n backdropView.classList.add(\"ias-products-container-backdrop-view\");\n backdropView.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n onClose();\n };\n\n const backgroundView = document.createElement(\"div\");\n backgroundView.classList.add(\"ias-products-container-background-view\");\n\n const scrollView = this.createScrollView(offers);\n\n const closeButton = document.createElement(\"div\");\n closeButton.classList.add(\"ias-products-container-close-button\");\n // fill=${ProductsWidgetOptionsDefault.productsList.closeBackgroundColor}\n closeButton.innerHTML = `<svg width=\"32\" height=\"12.5\" viewBox=\"0 0 64 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M56.293 1.23375C58.054 -0.41125 60.846 -0.41125 62.607 1.23375C64.464 2.96775 64.464 5.85675 62.607 7.59075L35.157 23.2288C33.396 24.8738 30.604 24.8738 28.843 23.2288L1.393 7.59075C0.494002 6.75175 0 5.62775 0 4.41275C0 3.19775 0.494002 2.07375 1.393 1.23475C3.154 -0.410251 5.946 -0.410251 7.707 1.23475L32 13.9237L56.293 1.23375Z\" fill=\"currentColor\" /></svg>`;\n closeButton.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n onClose();\n };\n\n const divider = document.createElement(\"div\");\n\n backgroundView.appendChild(scrollView);\n backgroundView.appendChild(closeButton);\n backgroundView.appendChild(divider);\n\n containerView.appendChild(backdropView);\n containerView.appendChild(backgroundView);\n\n return containerView;\n }\n\n private scrollViewRef: HTMLElement | null = null;\n\n private getScrollLeft(): number {\n if (this.scrollViewRef != null) {\n return this.scrollViewRef.scrollLeft;\n }\n return 0;\n }\n\n private getScrollViewportWidth(): number {\n if (this.scrollViewRef != null) {\n return this.scrollViewRef.clientWidth;\n }\n return 0;\n }\n\n private setScrollLeft(value: number) {\n if (this.scrollViewRef != null) {\n this.scrollViewRef.scrollLeft = Math.round(value);\n }\n }\n\n private createScrollControls(scrollViewRef: HTMLElement): {\n scrollLeft: () => void;\n scrollRight: () => void;\n mountScrollControls: (cb: () => void) => void;\n } {\n this.scrollViewRef = scrollViewRef;\n return {\n scrollLeft: () => this.setScrollLeft(this.getScrollLeft() - this.getScrollViewportWidth()),\n scrollRight: () => this.setScrollLeft(this.getScrollLeft() + this.getScrollViewportWidth()),\n mountScrollControls: (cb: () => void) => this.env.requestAnimationFrame(() => scrollViewRef.scrollWidth > scrollViewRef.clientWidth && cb()),\n };\n }\n\n public getIsClickCapturedByWidget(): boolean {\n return this.isClickCapturedByWidget;\n }\n\n private destroy(): void {\n if (this.swipeGestureDetector != null) {\n this.swipeGestureDetector.destroy();\n this.swipeGestureDetector = null;\n }\n }\n\n public onStop(): void {\n super.onStop();\n\n this.destroy();\n }\n\n public static api = {\n widgetClassName: WidgetProducts.widgetClassName,\n onRefreshUserData: WidgetProducts.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetProducts.initWidget(element, localData, (element, options) => new WidgetProducts(element, options, onWidgetComplete, sdkApi));\n },\n onStart: function (element: HTMLElement) {\n WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n widget.openProductsView();\n }\n }\n return false;\n },\n isClickCapturedByWidget: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n return widget.getIsClickCapturedByWidget();\n }\n }\n return false;\n },\n isForcePaused: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n return widget.isForcePaused;\n }\n }\n return false;\n },\n onHandleBackpress: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n widget.closeProductsView();\n }\n }\n return false;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagData, getTagDataAsNumber, getValueOrDefault, getValueOrException, hasClass, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetQuestOptions } from \"./quest.h\";\n\nexport class WidgetQuest extends WidgetBase<WidgetQuestOptions> {\n static DEFAULTS: WidgetQuestOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-quest\";\n\n private selectedAnswer: number | undefined;\n protected label: HTMLElement | null;\n protected variants: Array<HTMLElement>;\n private readonly isWidget: boolean;\n private readonly slideCount: number;\n private readonly nonFinalSlide?: boolean;\n private readonly navigationNextSlide?: number;\n private readonly slideDisabledNavigation: boolean;\n private readonly finalSlide: boolean;\n\n constructor(element: HTMLElement, options: Partial<WidgetQuestOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n const isWidget = !hasClass(element, \"narrative-slide\");\n const elementIdGetter = (element: HTMLElement) => getValueOrDefault(getTagData(element, \"elementId\"), \"\");\n const slideGetter = (element: HTMLElement) =>\n isWidget ? getValueOrException(element.closest<HTMLElement>(\".narrative-slide\"), \"Empty slide\") : element;\n\n super(element, options, onWidgetComplete, sdkApi, elementIdGetter, slideGetter);\n\n this.isWidget = isWidget;\n this.slideCount = getTagDataAsNumber(this.slide, \"slideCount\") ?? 0;\n const nonFinalSlide = getTagDataAsNumber(this.slide, \"nonFinalSlide\");\n if (nonFinalSlide != null) {\n this.nonFinalSlide = Boolean(nonFinalSlide);\n }\n this.finalSlide = !this.isWidget && !this.nonFinalSlide;\n this.navigationNextSlide = getTagDataAsNumber(this.slide, \"navigationNextSlide\");\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view\"));\n this.slideDisabledNavigation = Boolean(getTagDataAsNumber(this.slide, \"disableNavigation\") ?? 0);\n\n this.selectedAnswer = undefined;\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n }\n\n private setCardSessionValue(name: string, value: string): void {\n this.sdkApi.setCardSessionValue(this.element, name, value);\n }\n\n private getCardSessionValue(name: string): string | undefined {\n return this.sdkApi.getCardSessionValue(this.element, name);\n }\n\n private init(): boolean {\n if (this.localData) {\n if (this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] !== undefined) {\n // this._selectAnswer(this.localData['_t_g_' + this.elementId + '_sa']);\n // setLocalData(this.localData, false);\n }\n\n if (this.localData[\"_qt_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_qt_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n\n let lastSlideIdx = this.localData[\"_qt_last_slide_idx\"];\n if (lastSlideIdx !== undefined) {\n lastSlideIdx = parseInt(lastSlideIdx);\n if (\n lastSlideIdx >= 0 &&\n lastSlideIdx < this.slideCount &&\n lastSlideIdx !== this.slideIndex /*&& this.slideIndex === this.firstSlideWithQuestIndex()*/\n ) {\n if (this.getCardSessionValue(\"__storyQuestSlideChanged\") === undefined) {\n // global flag - был сделан переход на нужный слайд, больше не нужно повторять за эту сессию\n // perform showStorySlide with lastSlideIdx only on story open first time (not on second slide, etc)\n this.setCardSessionValue(\"__storyQuestSlideChanged\", \"1\");\n\n if (this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(lastSlideIdx);\n return false;\n }\n }\n }\n }\n\n // only for widget v1\n if (this.nonFinalSlide != null) {\n // если этого слайда нет в роутинге (сработал переход по таймеру в app)\n const routes = this._getRoutes();\n if (routes[0].indexOf(this.slideIndex) === -1 && this.finalSlide) {\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n return false;\n }\n }\n }\n\n // сбор роутинга - все же в selectAnswer\n // + pointer - set in select answer and in simple history back naviation\n\n // Общее поле в сторис - latest slide with viewed quest item\n // только если находимся в диапазоне квеста\n this.localData[\"_qt_last_slide_idx\"] = this.slideIndex;\n // global flag - был сделан переход на нужный слайд, больше не нужно повторять за эту сессию\n this.setCardSessionValue(\"__storyQuestSlideChanged\", \"1\");\n\n // если перешли на слайд (через кнопку - на слайд например) то не будет истории в роутере\n // добавляем сами\n if (this.getLastSlideIndexFromRouteHistory() !== this.slideIndex) {\n this._addNewRouteHistory(this.slideIndex);\n }\n\n this.setLocalData(this.localData, true);\n }\n\n this.firstOpenTime = new Date().getTime();\n\n return true;\n }\n\n private _selectAnswer(index: number, slideIndex: number): void {\n // if (this.answers[index]) {\n // this.answers[index].classList.add('selected');\n // }\n\n this.selectedAnswer = index;\n\n if (this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] === undefined || !Array.isArray(this.localData[\"_qt_g_\" + this.elementId + \"_sa\"])) {\n this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] = [];\n }\n this.localData[\"_qt_g_\" + this.elementId + \"_sa\"].push([index, slideIndex, Math.round(new Date().getTime() / 1000)]);\n // ответ на вопрос\n this.localData[\"_&ts_qt_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.element.classList.add(\"done\");\n\n this._addNewRouteHistory(slideIndex);\n }\n\n public selectAnswer(answer: HTMLElement): boolean {\n // if (this.selectedAnswer !== undefined) {\n // return true;\n // }\n\n const index = this.variants.indexOf(answer);\n if (index !== -1) {\n const slideIndex = getValueOrDefault(getTagDataAsNumber(this.variants[index], \"score\"), 0) - 1;\n\n this._selectAnswer(index, slideIndex);\n this.setLocalData(this.localData, true);\n\n this.env.setTimeout(() => {\n if (slideIndex >= 0 && slideIndex < this.slideCount && this.sdkApi.isExistsShowCardSlide) {\n // global flag - был сделан переход на нужный слайд, больше не нужно повторять за эту сессию\n this.setCardSessionValue(\"__storyQuestSlideChanged\", \"1\");\n this.sdkApi.showCardSlide(slideIndex);\n }\n }, 100);\n }\n\n return true;\n }\n\n public isDone(): boolean {\n return this.localData[\"_qt_done_at\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n public slideQuestIsDone(): boolean {\n return this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n private firstSlideWithQuestIndex(): number {\n return getTagDataAsNumber(this.slide, \"firstSlideWithQuest\") ?? 0;\n }\n\n private lastSlideWithQuestIndex(): number {\n return getTagDataAsNumber(this.slide, \"lastSlideWithQuest\") ?? 0;\n }\n\n private _getRoutes() {\n let routes = this.localData[\"_qt_routes\"];\n if (!Array.isArray(routes)) {\n routes = [[0], 0];\n }\n return routes;\n }\n\n private _addNewRouteHistory(route: number): void {\n const routes = this._getRoutes();\n const _routes = routes[0].slice(0, routes[1] + 1);\n routes[0] = _routes.concat([route]);\n routes[1] = routes[0].length - 1;\n this.localData[\"_qt_routes\"] = routes;\n }\n\n private _routeMvPtrBack() {\n const routes = this._getRoutes();\n const newPtr = routes[1] - 1;\n if (newPtr >= 0 && routes[0][newPtr] !== undefined) {\n routes[1] = newPtr;\n this.localData[\"_qt_routes\"] = routes;\n this.setLocalData(this.localData, true);\n return routes[0][newPtr];\n }\n return false;\n }\n\n private getLastSlideIndexFromRouteHistory() {\n const routes = this._getRoutes();\n return routes[0][routes[1]];\n }\n\n // переделать в handleRouteTrigger\n // не завязываться на click, сделать через коллбэк - default action\n private handleRouteClick(event: { direction: \"backward\" | \"forward\"; slideIndex: number; slideCount: number }): {\n continueDefaultNavigation: boolean;\n } {\n const result = { continueDefaultNavigation: false };\n let moveTo;\n // event: direction ('backward', 'forward') slideIndex, slideCount\n const directionForward = event.direction === \"forward\";\n const directionBackward = event.direction === \"backward\";\n\n if (this.isWidget) {\n // like in web-sdk - simple block tap navigation at all\n if (this.slideDisabledNavigation) {\n return result;\n }\n if (directionForward) {\n return result;\n } else {\n if (event.slideIndex === 0) {\n // can click back\n result.continueDefaultNavigation = true;\n return result;\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n return result;\n }\n } else {\n // like in web-sdk - simple block tap navigation at all\n if (this.slideDisabledNavigation) {\n return result;\n }\n\n if (this.nonFinalSlide == null) {\n // widget v2 (with navigationNextSlide)\n\n if (directionForward) {\n if (this.navigationNextSlide === -1) {\n // this is the final slide - exit from this quest\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n result.continueDefaultNavigation = false;\n return result;\n }\n const nextSlideIndex = this.navigationNextSlide ?? event.slideIndex + 1;\n if (nextSlideIndex < this.slideCount) {\n this._addNewRouteHistory(nextSlideIndex);\n this.setLocalData(this.localData, true);\n this.sdkApi.showCardSlide(nextSlideIndex);\n } else {\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n }\n } else {\n if (event.slideIndex === 0) {\n // move to prev slide\n result.continueDefaultNavigation = true;\n return result;\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n }\n } else {\n // widget v1 (with nonFinalSlide)\n\n // slides without a quest form\n // simple slide case\n if (this.nonFinalSlide || event.slideIndex < this.firstSlideWithQuestIndex()) {\n if (directionForward) {\n const nextSlideIndex = event.slideIndex + 1;\n if (nextSlideIndex < this.slideCount) {\n this._addNewRouteHistory(nextSlideIndex);\n this.setLocalData(this.localData, true);\n this.sdkApi.showCardSlide(nextSlideIndex);\n } else {\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n }\n } else {\n if (event.slideIndex === 0) {\n // move to prev slide\n result.continueDefaultNavigation = true;\n return result;\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n }\n } else {\n // quest final slide\n if (directionForward) {\n // если клик вперед по финальному слайду из любой ветки - то выходим из сторис\n // var nextSlideIndex = this.lastSlideWithQuestIndex() + 1;\n // if (nextSlideIndex < this.slideCount) {\n // this._addNewRouteHistory(nextSlideIndex);\n // setLocalData(this.localData, true);\n // window._showNarrativeSlide(nextSlideIndex);\n // } else {\n\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n // }\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n }\n }\n }\n return result;\n }\n\n public static api = {\n widgetClassName: WidgetQuest.widgetClassName,\n onRefreshUserData: WidgetQuest.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): Promise<boolean> {\n return new Promise(function (resolve, reject) {\n WidgetQuest.initWidget<WidgetQuest, WidgetQuestOptions>(\n element,\n localData,\n (element, options) => new WidgetQuest(element, options, onWidgetComplete, sdkApi)\n ).then(localData => {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element);\n if (widget) {\n resolve(widget.init());\n } else {\n resolve(true);\n }\n });\n });\n },\n onStart: function (element: HTMLElement) {\n WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element)?.onStop();\n },\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetQuest.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n return false;\n },\n slideTestIsDone: function (element: HTMLElement): boolean {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element);\n if (widget) {\n return widget.slideQuestIsDone();\n }\n return true;\n },\n handleRouteClick: function (\n element: HTMLElement,\n event: { direction: \"backward\" | \"forward\"; slideIndex: number; slideCount: number }\n ): { continueDefaultNavigation: boolean } {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element);\n if (widget) {\n return widget.handleRouteClick(event);\n }\n return { continueDefaultNavigation: true };\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getTagDataAsNumber, getValueOrException, slice } from \"@utils\";\nimport { WidgetQuizOptions } from \"./quiz.h\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\n\nexport class WidgetQuiz extends WidgetBase<WidgetQuizOptions> {\n static DEFAULTS: WidgetQuizOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-quiz\";\n\n private readonly question: HTMLElement | null;\n private readonly answers: Array<HTMLElement>;\n private readonly questionCount: number;\n private selectedAnswer: number | undefined;\n\n constructor(element: HTMLElement, options: Partial<WidgetQuizOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.question = this.element.querySelector<HTMLElement>(\".label-view .label\");\n this.answers = slice.call(this.element.querySelectorAll(\".variants-box .variant-view-group\"));\n this.questionCount = getValueOrException(getTagDataAsNumber(this.slide, \"quizCount\"), \"Empty quizCount\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedAnswer = undefined;\n\n if (this.localData) {\n if (this.localData[\"_q_g_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectAnswer(this.localData[\"_q_g_\" + this.elementId + \"_sa\"]);\n this.setLocalData(this.localData, false);\n } else {\n this._clearAnswerSelection();\n }\n\n if (this.localData[\"_q_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_q_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _selectAnswer(index: number): void {\n // var hintContainer = null;\n // var hintContainerHeight = null;\n if (this.answers[index]) {\n this.answers[index].classList.add(\"selected\");\n\n // hintContainer = this.answers[index].nextSibling;\n // if (hintContainer && hintContainer.classList.contains('narrative-element-quiz-answer-hint-container')) {\n // hintContainerHeight = hintContainer.getBoundingClientRect().height;\n // hintContainer.style.height = 0;\n // }\n }\n\n this.selectedAnswer = index;\n\n this.localData[\"_q_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n\n // if (hintContainer && hintContainerHeight && window.requestAnimationFrame) {\n // requestAnimationFrame(function() {\n // requestAnimationFrame(function() {\n // hintContainer.style.height = hintContainerHeight + 'px';\n // })\n // })\n // }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearAnswerSelection(): void {\n forEach(this.answers, function (answer) {\n answer.classList.remove(\"selected\");\n });\n\n this.selectedAnswer = undefined;\n\n this.element.classList.remove(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n }\n });\n }\n\n public selectAnswer(answer: HTMLElement): boolean {\n if (this.selectedAnswer !== undefined) {\n return true;\n }\n\n const selectedAnswerIndex = this.answers.indexOf(answer);\n if (selectedAnswerIndex !== -1) {\n this._selectAnswer(selectedAnswerIndex);\n\n const isCorrect = this.answers[selectedAnswerIndex].classList.contains(\"check\");\n\n this.localData[\"q_score\"] = (this.localData[\"q_score\"] === undefined ? 0 : this.localData[\"q_score\"]) + (isCorrect ? 1 : 0);\n\n let answeredQuestion = 0;\n for (const key in this.localData) {\n if (this.localData.hasOwnProperty(key)) {\n if (/^_q_g_[A-z0-9-_]+_sa$/.test(key)) {\n answeredQuestion++;\n }\n }\n }\n if (this.localData[\"_q_fa_at\"] === undefined) {\n this.localData[\"_q_fa_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n if (answeredQuestion === this.questionCount) {\n this.localData[\"_q_done_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n // ответ на вопрос\n this.localData[\"_&ts_q_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n const self = this;\n setTimeout(function () {\n self.widgetDone?.classList.remove(\"active\");\n setTimeout(function () {\n self.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n try {\n const questionText = this.question ? this.question.textContent ?? \"\" : \"\";\n let answerText = \"\";\n if (this.answers[selectedAnswerIndex]) {\n const answerLabel = this.answers[selectedAnswerIndex].querySelector(\".variant-view .label\");\n if (answerLabel != null && answerLabel.textContent != null) {\n answerText = answerLabel.textContent;\n }\n }\n\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-quiz-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: questionText,\n wa: selectedAnswerIndex,\n wal: answerText,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: questionText,\n widget_answer: selectedAnswerIndex,\n widget_answer_label: answerText,\n duration_ms: duration,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n return false;\n }\n\n public isDone(): boolean {\n return this.localData[\"_q_done_at\"] !== undefined;\n }\n\n public slideQuizIsDone(): boolean {\n return this.localData[\"_q_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetQuiz.widgetClassName,\n onRefreshUserData: WidgetQuiz.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetQuiz.initWidget<WidgetQuiz, WidgetQuizOptions>(\n element,\n localData,\n (element, options) => new WidgetQuiz(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(element)?.onStop();\n },\n /**\n * click on quiz answer\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetQuiz.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n return false;\n },\n slideQuizIsDone: function (element: HTMLElement) {\n const widget = WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(element);\n if (widget) {\n return widget.slideQuizIsDone();\n }\n return true;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getTagDataAsNumber, getValueOrDefault, getValueOrException, slice } from \"@utils\";\nimport { WidgetQuizGroupedOptions } from \"./quiz_grouped.h\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\n\nexport class WidgetQuizGrouped extends WidgetBase<WidgetQuizGroupedOptions> {\n static DEFAULTS = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-quiz-grouped\";\n\n private readonly question: HTMLElement | null;\n private readonly answers: Array<HTMLElement>;\n private readonly questionCount: number;\n private selectedAnswer: number | undefined;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n * @param sdkApi\n */\n constructor(element: HTMLElement, options: Partial<WidgetQuizGroupedOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.question = this.element.querySelector<HTMLElement>(\".label-view .label\");\n this.answers = slice.call(this.element.querySelectorAll(\".variants-box .variant-view-group\"));\n this.questionCount = getValueOrException(getTagDataAsNumber(this.slide, \"quizCount\"), \"Empty quizCount\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedAnswer = undefined;\n\n if (this.localData) {\n if (this.localData[\"_q_gg_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectAnswer(this.localData[\"_q_gg_\" + this.elementId + \"_sa\"]);\n // this._updateScore(this.localData['_q_gg_' + this.elementId + '_sa']);\n this.setLocalData(this.localData, false);\n } else {\n this._clearAnswerSelection();\n }\n\n if (this.localData[\"_qg_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_qg_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _selectAnswer(index: number): void {\n if (this.answers[index]) {\n this.answers[index].classList.add(\"selected\");\n }\n\n this.selectedAnswer = index;\n\n this.localData[\"_q_gg_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearAnswerSelection() {\n forEach(this.answers, function (answer) {\n answer.classList.remove(\"selected\");\n });\n\n this.selectedAnswer = undefined;\n\n this.element.classList.remove(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n }\n });\n }\n\n private _updateScore(index: number) {\n const answerValue = getValueOrDefault(getTagDataAsNumber(this.answers[index], \"value\"), index);\n\n if (this.localData[\"qg_score\"] == null) {\n this.localData[\"qg_score\"] = {};\n }\n\n let sum = 0;\n for (let i = 0; i < this.answers.length; i++) {\n if (this.localData[\"qg_score\"][i] == null) {\n this.localData[\"qg_score\"][i] = 0;\n }\n sum += this.localData[\"qg_score\"][i];\n }\n\n // если еще не ответили на все\n if (sum < this.questionCount) {\n this.localData[\"qg_score\"][answerValue] += 1;\n\n let answeredQuestion = 0;\n for (const key in this.localData) {\n if (this.localData.hasOwnProperty(key)) {\n if (/^_q_gg_[A-z0-9-_]+_sa$/.test(key)) {\n answeredQuestion++;\n }\n }\n }\n if (this.localData[\"_qg_fa_at\"] === undefined) {\n this.localData[\"_qg_fa_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n if (this.localData[\"_qg_done_at\"] === undefined) {\n if (answeredQuestion === this.questionCount) {\n this.localData[\"_qg_done_at\"] = Math.round(new Date().getTime() / 1000);\n }\n }\n\n // ответ на вопрос\n this.localData[\"_&ts_qg_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n }\n }\n\n private selectAnswer(answer: HTMLElement): boolean {\n if (this.selectedAnswer != null) {\n return true;\n }\n\n const selectedAnswerIndex = this.answers.indexOf(answer);\n if (selectedAnswerIndex !== -1) {\n this._selectAnswer(selectedAnswerIndex);\n this._updateScore(selectedAnswerIndex);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n try {\n const questionText = this.question ? this.question.textContent ?? \"\" : \"\";\n let answerText = \"\";\n if (this.answers[selectedAnswerIndex]) {\n const answerLabel = this.answers[selectedAnswerIndex].querySelector(\".variant-view .label\");\n if (answerLabel != null) {\n answerText = answerLabel.textContent ?? \"\";\n }\n }\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-quiz-grouped-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: questionText,\n wa: selectedAnswerIndex,\n wal: answerText,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: questionText,\n widget_answer: selectedAnswerIndex,\n widget_answer_label: answerText,\n duration_ms: duration,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n return false;\n }\n\n public isDone(): boolean {\n return this.localData[\"_qg_done_at\"] !== undefined;\n }\n\n public slideQuizIsDone(): boolean {\n return this.localData[\"_q_gg_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetQuizGrouped.widgetClassName,\n onRefreshUserData: WidgetQuizGrouped.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetQuizGrouped.initWidget<WidgetQuizGrouped, WidgetQuizGroupedOptions>(\n element,\n localData,\n (element, options) => new WidgetQuizGrouped(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(element)?.onStop();\n },\n /**\n * click on quiz answer\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetQuizGrouped.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n\n return false;\n },\n slideQuizIsDone: function (element: HTMLElement) {\n const widget = WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(element);\n if (widget) {\n return widget.slideQuizIsDone();\n }\n return true;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagData, getValueOrException, isArray, isNumber, isObject, proxy } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase, Widgets } from \"../base\";\nimport { WidgetRangeSliderOptions, WidgetRangeSliderSharedData } from \"./range_slider.h\";\n\n// Polyfill Number.isNaN(value)\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\nNumber.isNaN =\n Number.isNaN ||\n function (value) {\n return typeof value === \"number\" && value !== value;\n };\n\n/**\n * Range feature detection\n * @return {Boolean}\n */\nfunction supportsRange(env: Window) {\n const input = env.document.createElement(\"input\");\n input.setAttribute(\"type\", \"range\");\n return input.type !== \"text\";\n}\n\nconst constants = {\n orientation: {\n horizontal: {\n dimension: \"width\",\n direction: \"left\",\n directionStyle: {\n ltr: \"left\",\n rtl: \"right\",\n },\n coordinate: \"x\",\n },\n vertical: {\n dimension: \"height\",\n direction: \"top\",\n directionStyle: {\n ltr: \"bottom\",\n rtl: \"bottom\",\n },\n coordinate: \"y\",\n },\n },\n} as const;\n\n/**\n * Delays a function for the given number of milliseconds, and then calls\n * it with the arguments supplied.\n */\nfunction delay(env: Window, fn: Function, wait: number): number {\n const args = Array.prototype.slice.call(arguments, 2);\n return env.setTimeout(function () {\n return fn.apply(null, args);\n }, wait);\n}\n\n/**\n * Returns a debounced function that will make sure the given\n * function is not triggered too much.\n *\n * @param {Window} env\n * @param {Function} fn Function to debounce.\n * @param {Number} debounceDuration OPTIONAL. The amount of time in milliseconds for which we will debounce the function. (defaults to 100ms)\n * @return {Function}\n */\nfunction debounce(\n env: Window,\n fn: Function & {\n debouncing?: boolean;\n lastReturnVal?: any;\n debounceTimeout?: number;\n },\n debounceDuration: number\n) {\n debounceDuration = debounceDuration || 100;\n return function () {\n if (!fn.debouncing) {\n const args = Array.prototype.slice.apply(arguments);\n fn.lastReturnVal = fn.apply(env, args);\n fn.debouncing = true;\n }\n env.clearTimeout(fn.debounceTimeout);\n fn.debounceTimeout = env.setTimeout(function () {\n fn.debouncing = false;\n }, debounceDuration);\n return fn.lastReturnVal;\n };\n}\n\n/**\n * Check if a `element` is visible in the DOM\n *\n * @param {Element} element\n * @return {Boolean}\n */\nfunction isHidden(element: (HTMLElement & { open?: boolean }) | null) {\n return Boolean(\n element &&\n (element.offsetWidth === 0 ||\n element.offsetHeight === 0 ||\n // Also Consider native `<details>` elements.\n element.open === false)\n );\n}\n\n/**\n * Get hidden parentNodes of an `element`\n *\n * @param {Element} element\n * @return {[type]}\n */\nfunction getHiddenParentNodes(element: HTMLElement) {\n let parents = [],\n node = element.parentNode as HTMLElement;\n\n while (isHidden(node)) {\n parents.push(node);\n node = node.parentNode as HTMLElement;\n }\n return parents;\n}\n\n/**\n * Returns dimensions for an element even if it is not visible in the DOM.\n *\n * @param {Element} element\n * @param {String} key (e.g. offsetWidth …)\n * @return {Number}\n */\nfunction getDimension(element: HTMLElement, key: \"offsetWidth\" | \"offsetHeight\"): number {\n const hiddenParentNodes = getHiddenParentNodes(element),\n hiddenParentNodesLength = hiddenParentNodes.length,\n inlineStyle = [];\n\n // Used for native `<details>` elements\n function toggleOpenProperty(element: HTMLElement & { open?: boolean }) {\n if (typeof element.open !== \"undefined\") {\n element.open = !Boolean(element.open);\n }\n }\n\n // if (hiddenParentNodesLength) {\n // for (var i = 0; i < hiddenParentNodesLength; i++) {\n //\n // // Cache style attribute to restore it later.\n // inlineStyle[i] = hiddenParentNodes[i].style.cssText;\n //\n // // visually hide\n // if (hiddenParentNodes[i].style.setProperty) {\n // hiddenParentNodes[i].style.setProperty('display', 'block', 'important');\n // } else {\n // hiddenParentNodes[i].style.cssText += ';display: block !important';\n // }\n // hiddenParentNodes[i].style.height = '0';\n // hiddenParentNodes[i].style.overflow = 'hidden';\n // hiddenParentNodes[i].style.visibility = 'hidden';\n // toggleOpenProperty(hiddenParentNodes[i]);\n // }\n //\n // // Update dimension\n // dimension = element[key];\n //\n // for (var j = 0; j < hiddenParentNodesLength; j++) {\n //\n // // Restore the style attribute\n // hiddenParentNodes[j].style.cssText = inlineStyle[j];\n // toggleOpenProperty(hiddenParentNodes[j]);\n // }\n // }\n return element[key];\n}\n\n/**\n * Returns the parsed float or the default if it failed.\n *\n * @param {String} str\n * @param {Number} defaultValue\n * @return {Number}\n */\nfunction tryParseFloat(str: string | undefined | null, defaultValue: number): number {\n if (str == null) {\n return defaultValue;\n }\n const value = parseFloat(str);\n return Number.isNaN(value) ? defaultValue : value;\n}\n\n/**\n * Capitalize the first letter of string\n *\n * @param {String} str\n * @return {String}\n */\nfunction ucfirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.substr(1);\n}\n\nfunction insertAfter(elem: HTMLElement, refElem: HTMLElement): HTMLElement | undefined {\n return refElem.parentNode?.insertBefore(elem, refElem.nextSibling);\n}\n\nexport class WidgetRangeSlider extends WidgetBase<WidgetRangeSliderOptions> {\n static DEFAULTS: WidgetRangeSliderOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n\n rangeClass: \"slider-view\",\n rangeBackgroundClass: \"slider-background-view\",\n activeClass: \"rangeslider--active\",\n horizontalClass: \"rangeslider--horizontal\",\n verticalClass: \"rangeslider--vertical\",\n fillClass: \"slider-fill-view\",\n handleClass: \"slider-handle-view\",\n };\n\n public static widgetClassName = \"narrative-element-range-slider\";\n\n private label: HTMLElement | null;\n private readonly topScale: HTMLElement | null;\n\n private readonly startValue: number;\n private readonly snapPosition: boolean;\n private readonly hasSubmitButton: boolean;\n private elementSlider: HTMLInputElement;\n private readonly elementAverageResult: HTMLElement | null;\n private readonly elementAverageResultTooltip: HTMLElement | null;\n private readonly elementAverageResultTooltipLabelView: HTMLElement | null;\n private readonly orientation: \"horizontal\" | \"vertical\";\n private min: number;\n private max: number;\n private value: number;\n private step: number;\n private readonly toFixed: number;\n private fill: HTMLElement;\n private readonly handle: HTMLElement;\n private readonly range: HTMLElement;\n private readonly rangeBgView: HTMLElement;\n private readonly DIMENSION: \"width\" | \"height\";\n private readonly DIRECTION: \"left\" | \"top\";\n private DIRECTION_STYLE: \"left\" | \"right\";\n private readonly COORDINATE: \"x\" | \"y\";\n private isClickCapturedBySlider: boolean = false;\n private handleDimension: number;\n private rangeDimension: number;\n private maxHandlePos: number;\n private grabPos: number;\n private position: number;\n private prevSnapValue: number;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n */\n constructor(element: HTMLElement, options: Partial<WidgetRangeSliderOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.hasSubmitButton = Boolean(this.element.querySelector(\".submit-button-view\"));\n this.topScale = this.element.querySelector(\".top-scale-bar-view-group\");\n this.snapPosition = false;\n try {\n this.snapPosition = this.topScale != null && this.topScale.getBoundingClientRect().height > 0;\n } catch (e) {\n console.error(e);\n }\n this.startValue = tryParseFloat(getTagData(this.element, \"startValue\"), 0);\n this.label = this.element.querySelector(\".label-view .label\");\n this.elementSlider = getValueOrException(this.element.querySelector<HTMLInputElement>('input[type=\"range\"]'), \"Empty elementSlider\");\n\n this.elementAverageResult = this.element.querySelector(\".slider-average-result-view\");\n if (this.elementAverageResult != null) {\n this.elementAverageResultTooltip = this.elementAverageResult.querySelector(\".tooltip-view\");\n if (this.elementAverageResultTooltip != null) {\n this.elementAverageResultTooltipLabelView = this.elementAverageResult.querySelector(\".average-result-label-view\");\n }\n }\n\n this.toFixed = (this.step + \"\").replace(\".\", \"\").length - 1;\n this.fill = getValueOrException(this.element.querySelector<HTMLElement>(`.${this.options.fillClass}`), `Empty .${this.options.fillClass}`);\n this.handle = getValueOrException(this.element.querySelector<HTMLElement>(`.${this.options.handleClass}`), `Empty .${this.options.handleClass}`);\n this.range = getValueOrException(this.element.querySelector<HTMLElement>(`.${this.options.rangeClass}`), `Empty .${this.options.rangeClass}`);\n this.range.id = this.id;\n this.rangeBgView = getValueOrException(\n this.element.querySelector<HTMLElement>(`.${this.options.rangeBackgroundClass}`),\n `Empty .${this.options.rangeBackgroundClass}`\n );\n\n // if (this.range.classList.contains(this.options['horizontalClass'])) {\n this.orientation = \"horizontal\";\n // } else if (this.range.classList.contains(this.options['verticalClass'])) {\n // this.orientation = 'vertical';\n // }\n\n // enable expanded tap area (disabled by default for backward compatibility)\n this.element.classList.add(\"width-expanded-slider-tap-area\");\n\n this.DIMENSION = constants.orientation[this.orientation].dimension;\n this.DIRECTION = constants.orientation[this.orientation].direction;\n this.DIRECTION_STYLE = constants.orientation[this.orientation].directionStyle[this.layoutDirection];\n this.COORDINATE = constants.orientation[this.orientation].coordinate;\n\n // Store context\n this.handleDown = proxy(this.handleDown, this);\n this.handleMove = proxy(this.handleMove, this);\n this.handleEnd = proxy(this.handleEnd, this);\n\n // Attach Events\n // window.addEventListener('resize.' + this.identifier, debounce(function() {\n // // Simulate resizeEnd event.\n // delay(function() {\n // _this.update(false, false);\n // }, 300);\n // }, 20));\n }\n\n private isTouchListenersInit = false;\n\n private initTouchListeners() {\n if (!this.isTouchListenersInit) {\n this.env.document.addEventListener(\"touchstart\", this.handleDown);\n this.env.document.addEventListener(\"mousedown\", this.handleDown);\n this.isTouchListenersInit = true;\n }\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n if (this.localData[\"_rs_g_\" + this.elementId + \"_v\"] !== undefined) {\n this.elementSlider.value = String(tryParseFloat(this.localData[\"_rs_g_\" + this.elementId + \"_v\"], 0));\n this.element.classList.add(\"done\");\n this.displayAverageAnswer();\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n } else {\n this.elementSlider.value = String(this.startValue);\n this.element.classList.remove(\"done\");\n this.element.classList.remove(\"input-done\");\n }\n\n this.init();\n }\n\n public onStart() {\n super.onStart();\n\n this.initTouchListeners();\n }\n\n public onStop(): void {\n super.onStop();\n\n this.destroy();\n }\n\n private _statEventInputSave(val: number) {\n try {\n const labelText = this.label?.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-range-slider-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: val,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: val,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public click(): boolean {\n if (this.isDone()) {\n return true;\n }\n this.completeWidget();\n return false;\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_rs_g_\" + this.elementId + \"_v\"] = tryParseFloat(this.elementSlider.value, 0);\n this.localData[\"_rs_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // answer for question\n this.localData[\"_&ts_rs_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n // hide submit button\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n\n setTimeout(() => {\n // important, displayAverageAnswer need .done at element\n this.element.classList.add(\"done\");\n this.displayAverageAnswer(true);\n }, 200);\n } else {\n // important, displayAverageAnswer need .done at element\n this.element.classList.add(\"done\");\n this.displayAverageAnswer(true);\n }\n });\n\n // if (this.disableTimer) {\n this.onWidgetComplete();\n // }\n\n this.setLocalData(this.localData, true);\n this._statEventInputSave(this.localData[\"_rs_g_\" + this.elementId + \"_v\"]);\n }\n\n public isDone(): boolean {\n return this.localData[\"_rs_g_\" + this.elementId + \"_v\"] != null;\n }\n\n public getIsClickCapturedBySlider(): boolean {\n return this.isClickCapturedBySlider;\n }\n\n private displayAverageAnswer(withTooltip: boolean = false): void {\n let answerAllocation: WidgetRangeSliderSharedData[string] = {\n total_value: 0,\n total_user: 0,\n };\n let answerAllocationTs: number | undefined = undefined;\n const sharedData = this.sdkApi.getWidgetsSharedData<Widgets.RangeSlider>(this.cardId, Widgets.RangeSlider);\n if (sharedData && sharedData[this.elementId] != null && (isObject(sharedData[this.elementId]) || isArray(sharedData[this.elementId]))) {\n answerAllocation = sharedData[this.elementId];\n answerAllocationTs = sharedData.ts;\n }\n\n const rangeSliderDoneAt = this.localData[\"_rs_g_\" + this.elementId + \"_done_at\"];\n\n if (answerAllocationTs === undefined || rangeSliderDoneAt === undefined || rangeSliderDoneAt > answerAllocationTs) {\n answerAllocation[\"total_value\"] += this.localData[\"_rs_g_\" + this.elementId + \"_v\"];\n ++answerAllocation[\"total_user\"];\n }\n\n let averageValue: number | null = null;\n if (\n answerAllocation[\"total_user\"] !== undefined &&\n isNumber(answerAllocation[\"total_user\"]) &&\n answerAllocation[\"total_value\"] !== undefined &&\n isNumber(answerAllocation[\"total_value\"])\n ) {\n averageValue = Math.round((answerAllocation[\"total_value\"] / answerAllocation[\"total_user\"]) * 10) / 10;\n }\n\n if (this.elementAverageResult != null && averageValue !== null) {\n this.update(true, false);\n\n const positionDimension = this.env.document.documentElement.dir === \"rtl\" ? (\"right\" as const) : (\"left\" as const);\n\n const position = this.getPositionFromValue(averageValue) + this.handleDimension / 2;\n\n this.elementAverageResult.style[positionDimension] = position + \"px\";\n // this.elementAverageResult.style.display = 'block';\n if (withTooltip && this.elementAverageResultTooltipLabelView != null && this.element != null) {\n if (!this.elementAverageResultTooltip?.classList.contains(\"visible\")) {\n this.elementAverageResultTooltip?.classList.add(\"visible\");\n setTimeout(() => {\n if (this.elementAverageResultTooltip && this.elementAverageResultTooltip.classList) {\n this.elementAverageResultTooltip.classList.remove(\"visible\");\n }\n }, 3000);\n }\n\n this.env.requestAnimationFrame(() => {\n const elementBox = this.element.getBoundingClientRect();\n const labelViewBox = this.elementAverageResultTooltipLabelView?.getBoundingClientRect();\n let offset = 0;\n\n // console.log({labelViewBox, elementBox})\n\n if (labelViewBox && labelViewBox.width !== 0) {\n if (labelViewBox.right > elementBox.right) {\n // get -x for translateX with offset to left\n offset = elementBox.right - labelViewBox.right;\n } else if (labelViewBox.left < elementBox.left) {\n // get +x for translateX with offset to right\n offset = elementBox.left - labelViewBox.left;\n }\n }\n\n if (offset !== 0) {\n this.elementAverageResultTooltipLabelView?.style.setProperty(\"transform\", \"translateX(\" + offset + \"px)\");\n }\n });\n }\n }\n }\n\n private init(): void {\n if (!this.maxHandlePos) {\n this.env.setTimeout(() => {\n this.update(true, false);\n }, 10);\n } else {\n this.update(true, false);\n }\n }\n\n private update(updateAttributes: boolean, triggerSlide: boolean) {\n updateAttributes = updateAttributes || false;\n\n if (updateAttributes) {\n this.min = tryParseFloat(this.elementSlider.getAttribute(\"min\"), 0);\n this.max = tryParseFloat(this.elementSlider.getAttribute(\"max\"), 100);\n this.value = tryParseFloat(this.elementSlider.value, Math.round(this.min + (this.max - this.min) / 2));\n this.step = tryParseFloat(this.elementSlider.getAttribute(\"step\"), 1);\n }\n\n this.handleDimension = getDimension(this.handle, (\"offset\" + ucfirst(this.DIMENSION)) as \"offsetWidth\" | \"offsetHeight\");\n this.rangeDimension = getDimension(this.rangeBgView, (\"offset\" + ucfirst(this.DIMENSION)) as \"offsetWidth\" | \"offsetHeight\");\n // this.maxHandlePos = this.rangeDimension - this.handleDimension;\n this.maxHandlePos = this.rangeDimension;\n this.grabPos = this.handleDimension / 2;\n this.position = this.getPositionFromValue(this.value);\n\n if (updateAttributes) {\n // Snapping steps\n this.prevSnapValue = this.getValueFromPosition(this.cap(this.position, 0, this.maxHandlePos));\n }\n\n this.setPosition(this.position, triggerSlide);\n }\n\n private handleDown(e: MouseEvent | TouchEvent) {\n if (this.isDone()) {\n return;\n }\n\n let rangeslider: HTMLElement | null = e.target as HTMLElement;\n if (!rangeslider.classList.contains(\"slider-view\")) {\n rangeslider = rangeslider.closest<HTMLElement>(\".slider-view\");\n }\n\n if (!rangeslider) {\n return;\n }\n if (rangeslider.id !== this.id) {\n return;\n }\n e.preventDefault();\n\n this.isClickCapturedBySlider = true;\n\n if (!this.maxHandlePos) {\n this.update(true, false);\n }\n\n this.env.document.addEventListener(\"touchmove\", this.handleMove);\n this.env.document.addEventListener(\"touchend\", this.handleEnd);\n\n this.env.document.addEventListener(\"mousemove\", this.handleMove);\n this.env.document.addEventListener(\"mouseup\", this.handleEnd);\n\n // add active class because Firefox is ignoring\n // the handle:active pseudo selector because of `e.preventDefault();`\n this.range.classList.add(this.options.activeClass);\n\n // If we click on the handle don't set the new position\n if ((\" \" + (e.target as HTMLElement).className + \" \").replace(/[\\n\\t]/g, \" \").indexOf(this.options.handleClass) > -1) {\n return;\n }\n\n const pos = this.getRelativePosition(e),\n rangePos = this.rangeBgView.getBoundingClientRect()[this.DIRECTION],\n handlePos = this.getPositionFromNode(this.handle) - rangePos,\n setPos = this.orientation === \"vertical\" ? this.maxHandlePos - (pos - this.grabPos) : pos - this.grabPos;\n\n this.setPosition(setPos);\n\n if (pos >= handlePos && pos < handlePos + this.handleDimension) {\n this.grabPos = pos - handlePos;\n }\n }\n\n private handleMove(e: MouseEvent | TouchEvent) {\n e.preventDefault();\n const pos = this.getRelativePosition(e);\n const setPos = this.orientation === \"vertical\" ? this.maxHandlePos - (pos - this.grabPos) : pos - this.grabPos;\n\n this.setPosition(setPos);\n }\n\n private handleEnd(e: MouseEvent | TouchEvent): void {\n this.env.requestAnimationFrame(() => {\n this.isClickCapturedBySlider = false;\n });\n\n // e.preventDefault();\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n\n this.range.classList.remove(this.options.activeClass);\n\n this.element.classList.add(\"input-done\");\n\n if (!this.hasSubmitButton) {\n this.completeWidget();\n } else {\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n }\n\n // Ok we're done fire the change event\n // this.$element.trigger('change', {origin: this.identifier});\n }\n\n private cap = function (pos: number, min: number, max: number) {\n if (pos < min) {\n return min;\n }\n if (pos > max) {\n return max;\n }\n return pos;\n };\n\n private setPosition(pos: number, triggerSlide?: boolean) {\n let value, newPos;\n\n if (triggerSlide === undefined) {\n triggerSlide = true;\n }\n\n // Snapping steps\n value = this.getValueFromPosition(this.cap(pos, 0, this.maxHandlePos));\n newPos = this.getPositionFromValue(value);\n\n // Update ui\n let uiPos = newPos;\n // invert pos for rtl\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n uiPos = this.maxHandlePos + uiPos;\n }\n\n // this.rangeDimension - slider width\n this.fill.style.transform = \"translateX(\" + (uiPos - this.rangeDimension) + \"px)\";\n // this.fill.style.transform = \"translateX(\" + (uiPos + this.grabPos - this.rangeDimension) + \"px)\";\n // this.fill.style[this.DIMENSION] = (uiPos + this.grabPos) + 'px';\n const percentage = this.getPercentageFromValue(value);\n\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n // value 0% - offset = 0, value 100% - offset = -1*maxHandlePos\n uiPos = newPos - this.maxHandlePos;\n }\n this.handle.style.setProperty(\"--offset\", String(uiPos));\n this.handle.style.setProperty(\"--percentage\", String(percentage));\n\n // this.handle.style.transform = \"translateY(-50%) translateX(\" + uiPos + \"px) scale(calc(1 + (var(--scale-factor, 1) - 1) * \" + percentage + \"))\";\n\n // this.handle.style[this.DIRECTION_STYLE] = uiPos + 'px';\n\n this.setValue(value);\n\n // Update globals\n this.position = newPos;\n this.value = value;\n\n if (this.snapPosition) {\n const stepItem = String(Math.round(this.value / this.step));\n this.fill.setAttribute(\"data-step-item\", stepItem);\n\n if (this.value !== this.prevSnapValue) {\n this.prevSnapValue = this.value;\n\n try {\n this.sdkApi.vibrate(20);\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n\n // Returns element position relative to the parent\n private getPositionFromNode(node: HTMLElement | null) {\n let i = 0;\n while (node !== null) {\n i += node.offsetLeft;\n node = node.offsetParent as HTMLElement;\n }\n return i;\n }\n\n private getRelativePosition(e: MouseEvent | TouchEvent): number {\n // Get the offset DIRECTION relative to the viewport\n const ucCoordinate = ucfirst(this.COORDINATE) as \"X\" | \"Y\";\n const ucCoordinateClient = `client${ucCoordinate}` as \"clientX\" | \"clientY\";\n const rangePos = this.range.getBoundingClientRect()[this.DIRECTION];\n let pageCoordinate = 0;\n\n if (typeof (e as MouseEvent)[ucCoordinateClient] !== \"undefined\") {\n pageCoordinate = (e as MouseEvent)[ucCoordinateClient];\n } else if ((e as TouchEvent).touches && (e as TouchEvent).touches[0] && typeof (e as TouchEvent).touches[0][ucCoordinateClient] !== \"undefined\") {\n pageCoordinate = (e as TouchEvent).touches[0][ucCoordinateClient];\n // @ts-ignore\n } else if (e.currentPoint && typeof e.currentPoint[this.COORDINATE] !== \"undefined\") {\n // @ts-ignore\n pageCoordinate = e.currentPoint[this.COORDINATE];\n }\n\n return pageCoordinate - rangePos;\n }\n\n private getPercentageFromValue(value: number): number {\n let percentage;\n percentage = (value - this.min) / (this.max - this.min);\n return percentage;\n }\n\n private getPositionFromValue(value: number): number {\n let percentage, pos;\n percentage = (value - this.min) / (this.max - this.min);\n\n // invert pos for rtl\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n percentage = 1 - percentage;\n }\n\n pos = !Number.isNaN(percentage) ? percentage * this.maxHandlePos : 0;\n return pos;\n }\n\n private getValueFromPosition(pos: number): number {\n let percentage, value;\n percentage = pos / (this.maxHandlePos || 1);\n\n // invert pos for rtl\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n percentage = 1 - percentage;\n }\n\n value = this.step * Math.round((percentage * (this.max - this.min)) / this.step) + this.min;\n return Number(value.toFixed(this.toFixed));\n }\n\n private setValue(value: number): void {\n if (value === this.value && this.elementSlider.value !== \"\") {\n return;\n }\n\n // Set the new value and fire the `input` event\n this.elementSlider.value = String(value);\n // .val(value)\n // .trigger('input', {origin: this.identifier});\n }\n\n private destroy(): void {\n this.env.document.removeEventListener(\"touchstart\", this.handleDown);\n this.env.document.removeEventListener(\"mousedown\", this.handleDown);\n\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n\n this.isTouchListenersInit = false;\n\n // off resize event\n // this.$window.off('.' + this.identifier);\n\n // this.$element\n // .off('.' + this.identifier)\n // .removeAttr('style')\n // .removeData('plugin_' + pluginName);\n }\n\n public static api = {\n widgetClassName: WidgetRangeSlider.widgetClassName,\n onRefreshUserData: WidgetRangeSlider.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetRangeSlider.initWidget<WidgetRangeSlider, WidgetRangeSliderOptions>(\n element,\n localData,\n (element, options) => new WidgetRangeSlider(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetRangeSlider.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(widgetElement);\n if (widget) {\n return widget.click();\n }\n }\n return true;\n },\n isClickCapturedBySlider: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetRangeSlider.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(widgetElement);\n if (widget) {\n return widget.getIsClickCapturedBySlider();\n }\n }\n return false;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getElementBounding, getTagData, getTagDataAsNumber, getValueOrDefault, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetRateOptions } from \"./rate.h\";\n\nexport class WidgetRate extends WidgetBase<WidgetRateOptions> {\n static DEFAULTS: WidgetRateOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-rate\";\n\n private label: HTMLElement | null;\n private nativeDialogueWasOpened: boolean = false;\n private readonly stars: Array<HTMLElement>;\n private readonly submitToStores: boolean;\n private readonly submitToStoresMin: number;\n private readonly submitToStoresMax: number;\n private readonly showDialogOnLowRate: boolean;\n private readonly showDialogueMin: number;\n private readonly showDialogueMax: number;\n private selectedStar: number | undefined;\n private answerSelectDuration: number;\n private elementRect: DOMRect;\n\n constructor(element: HTMLElement, options: Partial<WidgetRateOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n this.stars = slice.call(this.element.querySelectorAll<HTMLElement>(\".input-view\"));\n\n this.submitToStores = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"submitToStores\"), 0));\n this.submitToStoresMin = getValueOrDefault(getTagDataAsNumber(this.element, \"submitToStoresMin\"), 4);\n this.submitToStoresMax = getValueOrDefault(getTagDataAsNumber(this.element, \"submitToStoresMax\"), 5);\n this.showDialogOnLowRate = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"showDialogOnLowRate\"), 0));\n this.showDialogueMin = getValueOrDefault(getTagDataAsNumber(this.element, \"showDialogueMin\"), 1);\n this.showDialogueMax = getValueOrDefault(getTagDataAsNumber(this.element, \"showDialogueMax\"), 3);\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n this.selectedStar = undefined;\n\n if (this.localData) {\n if (this.localData[\"_r_g_\" + this.elementId + \"_ss\"] !== undefined) {\n this._selectStar(this.localData[\"_r_g_\" + this.elementId + \"_ss\"], true);\n } else {\n this._clearSelectedStar();\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n this.answerSelectDuration = 0;\n\n this.nativeDialogueWasOpened = false;\n }\n\n private _statEventRateUsAnswer(answerText: string): void {\n try {\n const labelText = this.label?.textContent ?? \"\";\n\n if (this.selectedStar != null) {\n const selectedAnswer = this.selectedStar + 1;\n\n this.sendStatisticEventToApp(\n \"w-rate-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: selectedAnswer,\n wv: answerText,\n d: this.answerSelectDuration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: selectedAnswer,\n widget_value: answerText,\n duration_ms: this.answerSelectDuration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _selectStar(value: number, runTimer: boolean): void {\n const list = [];\n let i;\n for (i = 0; i < this.stars.length; i++) {\n list[i] = this.stars[i];\n }\n\n forEach(list, (element, idx) => {\n const key = idx as number;\n if (key <= value) {\n element.classList.add(\"fill\");\n }\n });\n\n if (list[value]) {\n list[value].classList.add(\"selected\");\n }\n\n this.selectedStar = value;\n\n this.localData[\"_r_g_\" + this.elementId + \"_ss\"] = value;\n\n this.element.classList.add(\"done\");\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer && runTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearSelectedStar(): void {\n forEach(this.stars, function (element) {\n element.classList.remove(\"fill\");\n element.classList.remove(\"selected\");\n });\n this.element.classList.remove(\"done\");\n }\n\n private selectStar(starElement: HTMLElement): boolean {\n if (this.selectedStar !== undefined) {\n return true;\n }\n\n const index = this.stars.indexOf(starElement);\n const length = this.stars.length;\n const value = index;\n // if (this.layoutDirection === 'rtl') {\n // value = length - index + 1;\n // }\n\n this.nativeDialogueWasOpened = false;\n\n if (value !== -1) {\n this.answerSelectDuration = new Date().getTime() - this.firstOpenTime;\n\n // 1-3 stars (default)\n if (value + 1 >= this.showDialogueMin && value + 1 <= this.showDialogueMax) {\n this.selectedStar = value;\n\n if (this.showDialogOnLowRate) {\n this.elementRect = this.element.getBoundingClientRect();\n\n this._selectStar(this.selectedStar, false);\n\n if (this.sdkApi.isAndroid) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n this.nativeDialogueWasOpened = true;\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(this.id, data);\n }\n } else {\n this._selectStar(this.selectedStar, true);\n this.completeWidget();\n this._statEventRateUsAnswer(\"\");\n }\n\n return false;\n } else if (value + 1 >= this.submitToStoresMin && value + 1 <= this.submitToStoresMax) {\n let target = null;\n\n if (this.sdkApi.isAndroid) {\n target = getTagData(this.element, \"androidLink\");\n } else if (this.sdkApi.isIOS) {\n target = getTagData(this.element, \"appleLink\");\n }\n\n this._selectStar(value, true);\n this.completeWidget();\n this._statEventRateUsAnswer(\"\");\n\n if (this.submitToStores && target) {\n this.sdkApi.openUrl({ type: \"link\", link: { type: \"url\", target } });\n }\n } else {\n this._selectStar(value, true);\n this.completeWidget();\n this._statEventRateUsAnswer(\"\");\n }\n }\n return false;\n }\n\n public setUserText(text: string): void {\n this.slide.classList.remove(\"data-input-editing\");\n this.slide.classList.remove(\"blured\");\n\n if (this.selectedStar != null) {\n this._selectStar(this.selectedStar, true);\n }\n\n if (!this.disableTimer && this.nativeDialogueWasOpened) {\n this.sdkApi.resumeUI();\n this.nativeDialogueWasOpened = false;\n }\n\n this.localData[\"_r_g_\" + this.elementId + \"_user_response\"] = text;\n this.completeWidget();\n this._statEventRateUsAnswer(text);\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_r_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // ответ на вопрос\n this.localData[\"_&ts_r_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_r_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public slideRateIsDone(): boolean {\n return this.localData[\"_r_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetRate.widgetClassName,\n onRefreshUserData: WidgetRate.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetRate.initWidget<WidgetRate, WidgetRateOptions>(\n element,\n localData,\n (element, options) => new WidgetRate(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(element)?.onStop();\n },\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetRate.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(widgetElement);\n if (widget) {\n return widget.selectStar(element);\n }\n }\n return false;\n },\n slidePollIsDone: function (element: HTMLElement) {\n const widget = WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(element);\n if (widget) {\n return widget.slideRateIsDone();\n }\n return true;\n },\n setUserData: function (id: string, text: string): void {\n WidgetRate.getInstanceById<WidgetRate, WidgetRateOptions>(id)?.setUserText(text);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagData, getTagDataAsNumber, getValueOrDefault, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetShareOptions } from \"./share.h\";\n\nexport class WidgetShare extends WidgetBase<WidgetShareOptions> {\n static DEFAULTS: WidgetShareOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n layers: [],\n };\n\n public static widgetClassName = \"narrative-element-share\";\n\n private readonly layers: Array<HTMLElement>;\n private readonly shareType: string | undefined;\n private readonly shareTarget: string | undefined;\n private readonly withLayer: boolean;\n private btnDisabled: boolean;\n\n constructor(element: HTMLElement, options: Partial<WidgetShareOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n this.shareType = getTagData(this.element, \"shareType\");\n this.shareTarget = getTagData(this.element, \"shareTarget\");\n this.layers = this.options.layers;\n this.withLayer = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"withLayer\"), 0));\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n if (this.withLayer) {\n if (this.isDone()) {\n this._showLayer(this.layers, 1);\n } else {\n this._showLayer(this.layers, 0);\n }\n }\n\n this.startReadyPromise.then(() => {\n if (this.isDone() && this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n\n this.btnDisabled = false;\n }\n\n private _statEventShare(result: boolean, via: string | null): void {\n try {\n const buttonText = this.element.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-share\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: buttonText,\n wv: this.shareTarget ?? \"\",\n wa: result ? 1 : 0,\n wal: via ?? \"\",\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: buttonText,\n widget_value: this.shareTarget ?? \"\",\n widget_answer: result ? 1 : 0,\n widget_answer_label: via ?? \"\",\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private share(): void {\n if (!this.btnDisabled) {\n if (this.sdkApi.isExistsShare) {\n if (this.sdkApi.sdkCanSendShareComplete) {\n this.btnDisabled = true;\n }\n if (this.shareType === \"url\" || this.shareType === \"story\") {\n this.sdkApi.share(this.id, {\n url: this.shareTarget, // sdk old versions\n text: this.shareTarget,\n title: null,\n files: null,\n });\n } else if (this.shareType === \"slide\") {\n this.sdkApi.shareSlideScreenshot(this.id, \"[data-element-id='\" + this.elementId + \"']\", this.shareTarget ? this.shareTarget : undefined);\n }\n }\n }\n }\n\n public _complete(isSuccess: boolean): void {\n if (!this.localData[\"_s_\" + this.elementId + \"_ts\"] && isSuccess) {\n this.localData[\"_s_\" + this.elementId + \"_ts\"] = Math.round(new Date().getTime() / 1000);\n // `answer_at` time\n this.localData[\"_&ts_s_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n this._statEventShare(isSuccess, null);\n\n if (isSuccess && this.withLayer) {\n this._showLayer(this.layers, 1, true);\n }\n\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n\n this.btnDisabled = false;\n }\n\n public isDone(): boolean {\n return Boolean(this.localData[\"_s_\" + this.elementId + \"_ts\"]);\n }\n\n public static api = {\n widgetClassName: WidgetShare.widgetClassName,\n onRefreshUserData: WidgetShare.onRefreshUserData,\n init: function (\n element: HTMLElement,\n layers: Array<HTMLElement>,\n localData: Record<string, any>,\n onWidgetComplete: OnWidgetComplete,\n sdkApi: SDKApi\n ): void {\n WidgetShare.initWidget<WidgetShare, WidgetShareOptions>(\n element,\n localData,\n (element, options) =>\n new WidgetShare(\n element,\n {\n ...options,\n layers,\n },\n onWidgetComplete,\n sdkApi\n )\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetShare.getInstance<WidgetShare, WidgetShareOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetShare.getInstance<WidgetShare, WidgetShareOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): void {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetShare.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetShare.getInstance<WidgetShare, WidgetShareOptions>(widgetElement);\n if (widget) {\n widget.share();\n }\n }\n },\n complete: function (id: string, isSuccess: boolean): void {\n WidgetShare.getInstanceById<WidgetShare, WidgetShareOptions>(id)?._complete(isSuccess);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagDataAsNumber, getValueOrDefault, getValueOrException, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetTestOptions } from \"./test.h\";\n\nexport class WidgetTest extends WidgetBase<WidgetTestOptions> {\n static DEFAULTS: WidgetTestOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-test\";\n\n private label: HTMLElement | null;\n private readonly variants: Array<HTMLElement>;\n private readonly testCount: number;\n private selectedAnswer: number | undefined;\n private readonly withTimeToAnswer: boolean;\n private readonly answerTimeout: number;\n private readonly tick: () => void;\n private readonly cancelTick: () => void;\n private animationFrameId: number | null;\n private startTimerAt: number;\n private timeLeft: number;\n private timeLeftDefault: number;\n private readonly timeline: HTMLElement | null;\n private isWidgetTimerInit = false;\n\n constructor(element: HTMLElement, options: Partial<WidgetTestOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view\"));\n this.testCount = getValueOrException(getTagDataAsNumber(this.slide, \"testCount\"), \"Empty testCount\");\n\n this.withTimeToAnswer = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"withTimeToAnswer\"), 0));\n this.answerTimeout = getValueOrDefault(getTagDataAsNumber(this.element, \"answerTimeout\"), 0);\n\n this.timeline = this.element.querySelector(\".timeline\");\n\n this.tick = () => {\n this.animationFrameId = this.env.requestAnimationFrame(() => {\n this.tick();\n });\n\n // update timer\n // update timeline position\n if (this.startTimerAt) {\n const timeNow = new Date().getTime();\n this.timeLeft = this.startTimerAt + this.timeLeftDefault - timeNow;\n\n if (this.timeLeft <= 0) {\n this.timeLeft = 0;\n this.cancelTick();\n\n this.doneWithoutAnswer();\n }\n\n if (this.timeline) {\n this.timeline.style.transform = \"translateX(\" + String((1 - this.timeLeft / this.timeLeftDefault) * 100) + \"%)\";\n }\n }\n };\n\n this.cancelTick = () => {\n if (this.animationFrameId != null) {\n this.env.cancelAnimationFrame(this.animationFrameId);\n }\n };\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedAnswer = undefined;\n\n if (this.localData) {\n if (this.localData[\"_t_g_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectAnswer(this.localData[\"_t_g_\" + this.elementId + \"_sa\"]);\n this.setLocalData(this.localData, false);\n }\n\n if (this.localData[\"_t_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_t_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n\n if (this.slideTestWithTimer()) {\n this.cancelTick();\n this.initWidgetTimer();\n }\n }\n\n private initWidgetTimer(): void {\n if (!this.isWidgetTimerInit) {\n if (this.selectedAnswer === undefined) {\n // find timer element\n // start raf\n // pause raf on pauseUI (actually don`t need)\n\n this.timeLeftDefault = (this.answerTimeout ? this.answerTimeout : 0) * 1000;\n this.timeLeft = this.timeLeftDefault;\n\n this.animationFrameId = null;\n this.startReadyPromise.then(() => {\n if (this.localData[\"_t_g_\" + this.elementId + \"st_at\"] != null) {\n this.startTimerAt = this.localData[\"_t_g_\" + this.elementId + \"st_at\"];\n this.startTimerAt *= 1000;\n }\n if (this.startTimerAt == null) {\n this.startTimerAt = new Date().getTime();\n this.localData[\"_t_g_\" + this.elementId + \"st_at\"] = Math.round(this.startTimerAt / 1000);\n this.setLocalData(this.localData, false);\n }\n\n this.tick();\n });\n } else {\n // animate 100%\n if (this.selectedAnswer === -1) {\n if (this.timeline) {\n this.timeline.style.transform = \"translateX(100%)\";\n }\n } else if (this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_tspent\"] != null) {\n if (this.timeline) {\n this.timeline.style.transform = \"translateX(\" + String(this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_tspent\"]) + \"%)\";\n }\n }\n }\n this.isWidgetTimerInit = true;\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n if (this.slideTestWithTimer()) {\n this.initWidgetTimer();\n }\n }\n\n public onStop(): void {\n super.onStop();\n\n if (this.slideTestWithTimer()) {\n this.cancelTick();\n }\n this.isWidgetTimerInit = false;\n }\n\n private _statEventVoteAnswer(answerScore: number): void {\n try {\n if (this.selectedAnswer != null) {\n const labelText = this.label?.textContent ?? \"\";\n let answerText = \"\";\n if (this.variants[this.selectedAnswer]) {\n const answerLabel = this.variants[this.selectedAnswer].querySelector(\".label\");\n if (answerLabel != null) {\n answerText = answerLabel.textContent ?? \"\";\n }\n }\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-test-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedAnswer,\n wal: answerText,\n was: answerScore,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: this.selectedAnswer,\n widget_answer_label: answerText,\n widget_answer_score: answerScore,\n duration_ms: duration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _selectAnswer(index: number): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedAnswer = index;\n\n this.localData[\"_t_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n public selectAnswer(answer: HTMLElement): boolean {\n if (this.selectedAnswer !== undefined) {\n return true;\n }\n\n const index = this.variants.indexOf(answer);\n if (index !== -1) {\n const answerScore = getValueOrDefault(getTagDataAsNumber(this.variants[index], \"score\"), 0);\n this._completeWidget(index, answerScore);\n }\n\n if (Boolean(this.withTimeToAnswer && this.answerTimeout)) {\n this.cancelTick();\n }\n\n return false;\n }\n\n private doneWithoutAnswer(): void {\n if (this.selectedAnswer !== undefined) {\n return;\n }\n const index = -1,\n answerScore = 0;\n this._completeWidget(index, answerScore);\n }\n\n // complete answer select and save local data + stat event\n private _completeWidget(index: number, answerScore: number): void {\n this._selectAnswer(index);\n\n this.localData[\"t_score\"] = (this.localData[\"t_score\"] === undefined ? 0 : this.localData[\"t_score\"]) + answerScore;\n\n let answeredQuestion = 0;\n for (const key in this.localData) {\n if (this.localData.hasOwnProperty(key)) {\n if (/^_t_g_[A-z0-9-_]+_sa$/.test(key)) {\n answeredQuestion++;\n }\n }\n }\n if (this.localData[\"_t_fa_at\"] === undefined) {\n this.localData[\"_t_fa_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n if (answeredQuestion === this.testCount) {\n this.localData[\"_t_done_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n // answer on question\n this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n // spent percent of time\n if (this.slideTestWithTimer()) {\n this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_tspent\"] = Math.round((1 - this.timeLeft / this.timeLeftDefault) * 100);\n }\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.setLocalData(this.localData, true);\n\n this._statEventVoteAnswer(answerScore);\n }\n\n public isDone(): boolean {\n return this.localData[\"_t_done_at\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n public slideTestIsDone(): boolean {\n return this.localData[\"_t_g_\" + this.elementId + \"_sa\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n public slideTestWithTimer(): boolean {\n return Boolean(this.withTimeToAnswer && this.answerTimeout);\n }\n\n public static api = {\n widgetClassName: WidgetTest.widgetClassName,\n onRefreshUserData: WidgetTest.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n WidgetTest.initWidget<WidgetTest, WidgetTestOptions>(\n element,\n localData,\n (element, options) => new WidgetTest(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element)?.onStop();\n },\n /**\n * click on quiz answer\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetTest.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n return false;\n },\n slideTestIsDone: function (element: HTMLElement) {\n const widget = WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element);\n if (widget) {\n return widget.slideTestIsDone();\n }\n return true;\n },\n slideTestWithTimer: function (element: HTMLElement) {\n const widget = WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element);\n if (widget) {\n return widget.slideTestWithTimer();\n }\n return true;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { WidgetVoteOptions, WidgetVoteSharedData } from \"./vote.h\";\nimport { extend, forEach, getTagData, getTagDataAsNumber, getValueOrDefault, isArray, isNumber, isObject, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase, Widgets } from \"../base\";\n\nexport class WidgetVote extends WidgetBase<WidgetVoteOptions> {\n static DEFAULTS: WidgetVoteOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-vote\";\n\n private question: HTMLElement = null!;\n private answers: Array<HTMLElement> = null!;\n private questionCount: number = null!;\n private selectedAnswer: number | undefined = undefined;\n\n private label: HTMLElement | null;\n private readonly variants: Array<HTMLElement>;\n private readonly variantsTexts: Array<string>;\n private selectedVariant: number | undefined;\n private voteAllocation: any;\n private readonly hideClientTotalResult: boolean;\n private readonly multipleChoice: boolean;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n * @param sdkApi\n */\n constructor(element: HTMLElement, options: Partial<WidgetVoteOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.voteAllocation = getTagData(this.slide, \"voteAllocation\");\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view-group\"));\n this.variantsTexts = [];\n forEach(this.variants, (element, index) => {\n const variantView = element.querySelector(\".variant-view .label\");\n if (variantView) {\n this.variantsTexts.push(variantView.textContent ?? \"\");\n }\n });\n\n this.hideClientTotalResult = getValueOrDefault(Boolean(getTagDataAsNumber(this.element, \"hideClientTotalResult\")), false);\n this.multipleChoice = getValueOrDefault(Boolean(getTagDataAsNumber(this.element, \"multipleChoice\")), false);\n }\n\n private _initFromLocalData(): void {\n const value = this.localData[\"_v_g_\" + this.elementId + \"_sa\"];\n if (!this.multipleChoice) {\n let index = value;\n if (Array.isArray(value)) {\n index = value[0];\n }\n this.variants[index]?.classList.add(\"checked\");\n this._selectVariant(index, true);\n if (!this.hideClientTotalResult) {\n this.displayPercents([index], true);\n }\n this._fillWidget(true);\n }\n if (this.multipleChoice) {\n let values = [];\n if (Array.isArray(value)) {\n values = value;\n } else {\n values.push(value);\n }\n\n for (let i = 0; i < values.length; ++i) {\n const index = values[i];\n this.variants[index]?.classList.add(\"checked\");\n this._selectVariant(index, true);\n }\n if (!this.hideClientTotalResult) {\n this.displayPercents(values, true);\n }\n this._fillWidget(true);\n }\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedVariant = undefined;\n\n if (this.localData) {\n if (this.localData[\"_v_g_\" + this.elementId + \"_sa\"] != null) {\n this._initFromLocalData();\n } else {\n this._clearSelectedVariants();\n this.element.classList.remove(\"done\");\n this.element.classList.remove(\"input-done\");\n this.element.classList.remove(\"filled\");\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _clearSelectedVariants(): void {\n this.variants.forEach((variant, index) => {\n variant.classList.remove(\"checked\");\n variant.classList.remove(\"selected\");\n variant.style.setProperty(\"--selected-variant-view-clip-area\", String(100));\n });\n }\n\n private _statEventVoteVariant(): void {\n try {\n let isValid = false;\n let selectedVariant: number = null!;\n if (!this.multipleChoice) {\n if (this.selectedVariant != null) {\n isValid = true;\n selectedVariant = this.selectedVariant;\n }\n }\n let selectedVariantsLabels: Array<string> = [];\n let selectedVariantsIdxs: Array<number> = [];\n if (this.multipleChoice) {\n selectedVariantsIdxs = this._getCheckedVariants();\n if (selectedVariantsIdxs.length > 0) {\n isValid = true;\n selectedVariant = selectedVariantsIdxs[0];\n selectedVariantsIdxs.forEach(idx => selectedVariantsLabels.push(this.variantsTexts[idx] ? this.variantsTexts[idx] : \"\"));\n }\n }\n\n if (isValid) {\n let labelText = this.label?.textContent ?? \"\";\n\n let variantText = this.variantsTexts[selectedVariant] ? this.variantsTexts[selectedVariant] : \"\";\n\n let duration = new Date().getTime() - this.firstOpenTime;\n\n // доп поля - для multiple choice\n // первые оставляем пустыми в этом случае\n\n this.sendStatisticEventToApp(\n \"w-vote-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: selectedVariant,\n wv: variantText,\n d: duration,\n was: selectedVariantsIdxs,\n wvs: selectedVariantsLabels,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: selectedVariant,\n widget_value: variantText,\n duration_ms: duration,\n widget_answers: selectedVariantsIdxs,\n widget_values: selectedVariantsLabels,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n // user click on (un)checked (radio btn) variant\n private _checkVariant(index: number): void {\n if (this.variants[index]) {\n if (this.variants[index].classList.contains(\"checked\")) {\n this.variants[index].classList.remove(\"checked\");\n } else {\n this.variants[index].classList.add(\"checked\");\n }\n }\n }\n\n private _getCheckedVariants(): Array<number> {\n const map: Array<number> = [];\n this.variants.forEach((variant, index) => {\n if (variant.classList.contains(\"checked\")) {\n map.push(index);\n }\n });\n return map;\n }\n\n private _selectVariant(index: number, filled: boolean = false): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedVariant = index;\n\n if (!this.multipleChoice) {\n this.localData[\"_v_g_\" + this.elementId + \"_sa\"] = index;\n }\n\n if (this.hideClientTotalResult) {\n const cb = () => {\n if (this.variants[index]) {\n this.variants[index].style.setProperty(\"--selected-variant-view-clip-area\", String(0));\n }\n };\n if (filled) {\n cb();\n } else {\n this.env.requestAnimationFrame(cb);\n }\n }\n }\n\n private _fillWidget(filled: boolean = false): void {\n this.element.classList.add(\"done\");\n if (filled) {\n this.element.classList.add(\"filled\");\n }\n\n if (!this.multipleChoice) {\n if (this.submitButtonView != null) {\n this._setInputDone();\n this._showSubmitBtn();\n }\n }\n if (this.multipleChoice) {\n this._removeInputDone();\n this._hideSubmitBtn();\n }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _showSubmitBtn() {\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n }\n\n private _hideSubmitBtn() {\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null && this.submitButtonViewHeight != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n }\n });\n }\n\n public selectVariant(variant: HTMLElement): boolean {\n if (!this.multipleChoice) {\n if (this.selectedVariant != null) {\n return true;\n }\n }\n if (this.multipleChoice) {\n if (this.isDone()) {\n return true;\n }\n }\n\n const selectedVariantIndex = this.variants.indexOf(variant);\n\n if (selectedVariantIndex !== -1) {\n this._checkVariant(selectedVariantIndex);\n\n if (this.multipleChoice) {\n if (this._getCheckedVariants().length > 0) {\n this._setInputDone();\n this._showSubmitBtn();\n } else {\n this._removeInputDone();\n this._hideSubmitBtn();\n }\n }\n if (!this.multipleChoice) {\n this._selectVariant(selectedVariantIndex);\n if (!this.hideClientTotalResult) {\n this.displayPercents([selectedVariantIndex]);\n }\n this._fillWidget();\n this._completeWidget();\n }\n }\n\n return false;\n }\n\n private _setInputDone() {\n if (this.submitButtonView != null) {\n this.element.classList.add(\"input-done\");\n }\n }\n\n private _removeInputDone() {\n // if (this.submitButtonView != null) {\n setTimeout(() => {\n this.element.classList.add(\"border-radius-transition-250\");\n this.env.requestAnimationFrame(() => {\n this.element.classList.remove(\"input-done\");\n setTimeout(() => this.element.classList.remove(\"border-radius-transition-250\"), 250);\n });\n }, 250);\n // }\n }\n\n private _completeWidget() {\n this.localData[\"_v_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n\n // ответ на вопрос\n this.localData[\"_&ts_v_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.setLocalData(this.localData, true);\n\n this._statEventVoteVariant();\n }\n\n private submitMultipleChoice() {\n const variants = this._getCheckedVariants();\n if (variants.length > 0) {\n this.localData[\"_v_g_\" + this.elementId + \"_sa\"] = variants;\n\n for (let i = 0; i < variants.length; ++i) {\n const index = variants[i];\n this._selectVariant(index);\n }\n if (!this.hideClientTotalResult) {\n this.displayPercents(variants);\n }\n this._fillWidget();\n this._completeWidget();\n } else {\n // todo - toast with error (select at least one variant)\n }\n }\n\n public click(): boolean {\n if (this.isDone()) {\n return true;\n }\n\n if (this.multipleChoice) {\n this.submitMultipleChoice();\n return false;\n } else {\n // for single mode - return true and sdk will proceed click as nextClick()\n return true;\n }\n }\n\n private displayPercents(selectedVariantsIndexes: Array<number>, filled: boolean = false): void {\n // voteAllocation[0] - variant total count allocation\n // voteAllocation[1]\n // ...\n // voteAllocation[7]\n let voteAllocation: WidgetVoteSharedData[string] = [];\n let voteAllocationTs: number | undefined = undefined;\n const sharedData = this.sdkApi.getWidgetsSharedData<Widgets.Vote>(this.cardId, Widgets.Vote);\n if (sharedData && sharedData[this.elementId] != null && (isObject(sharedData[this.elementId]) || isArray(sharedData[this.elementId]))) {\n voteAllocation = sharedData[this.elementId];\n if (isObject(sharedData[this.elementId])) {\n voteAllocation = slice.call(Object.values(sharedData[this.elementId])) as unknown as WidgetVoteSharedData[string];\n }\n voteAllocationTs = sharedData.ts;\n }\n\n const voteDoneAt = this.localData[\"_v_g_\" + this.elementId + \"_done_at\"];\n\n if (voteAllocationTs === undefined || voteDoneAt === undefined || voteDoneAt > voteAllocationTs) {\n forEach(this.variants, function (element, index) {\n const key = index as number;\n if (voteAllocation[key] === undefined || !isNumber(voteAllocation[key])) {\n voteAllocation[key] = 0;\n }\n if (selectedVariantsIndexes.includes(key)) {\n ++voteAllocation[key];\n }\n });\n }\n\n // calc percents\n let percents: Array<number> = [],\n total = 0;\n forEach(this.variants, (element, index) => {\n const key = index as number;\n if (voteAllocation[key] !== undefined) {\n percents[key] = isNumber(voteAllocation[key]) ? voteAllocation[key] : parseInt(String(voteAllocation[key]));\n if (!isNumber(percents[key]) || isNaN(percents[key])) {\n percents[key] = 0;\n }\n } else {\n percents[key] = 0;\n }\n total += percents[key];\n });\n for (let i = 0; i < percents.length; ++i) {\n if (total !== 0) {\n percents[i] = Math.round((percents[i] / total) * 100 * 10) / 10;\n if (percents[i] > 100) {\n percents[i] = 100;\n }\n // percents[i] += '%';\n } else {\n // percents[i] = '0%';\n }\n }\n\n const self = this;\n forEach(this.variants, (element, index) => {\n const key = index as number;\n const percentLabels = slice.call(element.querySelectorAll(\".percent-label\"));\n\n forEach(percentLabels, label => {\n if (percents[key] != null) {\n label.textContent = percents[key] + \"%\";\n }\n });\n element.classList.add(\"selected\");\n });\n\n const cb = function () {\n forEach(self.variants, function (element, index) {\n const key = index as number;\n if (percents[key] != null) {\n element.style.setProperty(\"--selected-variant-view-clip-area\", String(100 - percents[key]));\n }\n });\n };\n\n if (filled) {\n cb();\n } else {\n this.env.requestAnimationFrame(cb);\n }\n }\n\n public isDone(): boolean {\n return this.localData[\"_v_g_\" + this.elementId + \"_done_at\"] != null;\n }\n\n public slideVoteIsDone(): boolean {\n return this.localData[\"_v_g_\" + this.elementId + \"_sa\"] != null;\n }\n\n public static api = {\n widgetClassName: WidgetVote.widgetClassName,\n onRefreshUserData: WidgetVote.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetVote.initWidget<WidgetVote, WidgetVoteOptions>(\n element,\n localData,\n (element, options) => new WidgetVote(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(element)?.onStop();\n },\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetVote.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(widgetElement);\n if (widget) {\n return widget.selectVariant(element);\n }\n }\n return false;\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetVote.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(widgetElement);\n if (widget) {\n return widget.click();\n }\n }\n return true;\n },\n slideVoteIsDone: function (element: HTMLElement): boolean {\n const widget = WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(element);\n if (widget) {\n return widget.slideVoteIsDone();\n }\n return true;\n },\n };\n}\n","import { SDKInterface } from \"../../../sdk_api/es_module_sdk_api.h\";\nimport { WidgetBarcode } from \"../../../widgets/barcode\";\nimport { WidgetCopy } from \"../../../widgets/copy\";\nimport { WidgetDataInput } from \"../../../widgets/data_input\";\nimport { WidgetDateCountdown } from \"../../../widgets/date_countdown\";\nimport { WidgetMultiSlide } from \"../../../widgets/multi_slide\";\nimport { WidgetPoll } from \"../../../widgets/poll\";\nimport { WidgetPollLayers } from \"../../../widgets/poll_layers\";\nimport { WidgetProducts } from \"../../../widgets/products\";\nimport { WidgetQuest } from \"../../../widgets/quest\";\nimport { WidgetQuiz } from \"../../../widgets/quiz\";\nimport { WidgetQuizGrouped } from \"../../../widgets/quiz_grouped\";\nimport { WidgetRangeSlider } from \"../../../widgets/range_slider\";\nimport { WidgetRate } from \"../../../widgets/rate\";\nimport { WidgetShare } from \"../../../widgets/share\";\nimport { WidgetTest } from \"../../../widgets/test\";\nimport { WidgetVote } from \"../../../widgets/vote\";\nimport { ILayoutApi, SlideApiPeerDeps } from \"../layout_api.h\";\n\nexport class EsModuleLayoutApi implements ILayoutApi {\n constructor(private readonly slideApiPeerDeps: () => SlideApiPeerDeps) {}\n get widgetCopyApi(): typeof WidgetCopy.api | undefined {\n return WidgetCopy.api;\n }\n get widgetBarcodeApi(): typeof WidgetBarcode.api | undefined {\n return WidgetBarcode.api;\n }\n get widgetDataInputApi(): typeof WidgetDataInput.api | undefined {\n return WidgetDataInput.api;\n }\n get widgetDateCountdownApi(): typeof WidgetDateCountdown.api | undefined {\n return WidgetDateCountdown.api;\n }\n get widgetMultiSlideApi(): typeof WidgetMultiSlide.api | undefined {\n return WidgetMultiSlide.api;\n }\n get widgetPollApi(): typeof WidgetPoll.api | undefined {\n return WidgetPoll.api;\n }\n get widgetPollLayersApi(): typeof WidgetPollLayers.api | undefined {\n return WidgetPollLayers.api;\n }\n get widgetQuestApi(): typeof WidgetQuest.api | undefined {\n return WidgetQuest.api;\n }\n get widgetQuizApi(): typeof WidgetQuiz.api | undefined {\n return WidgetQuiz.api;\n }\n get widgetQuizGroupedApi(): typeof WidgetQuizGrouped.api | undefined {\n return WidgetQuizGrouped.api;\n }\n get widgetRangeSliderApi(): typeof WidgetRangeSlider.api | undefined {\n return WidgetRangeSlider.api;\n }\n get widgetRateApi(): typeof WidgetRate.api | undefined {\n return WidgetRate.api;\n }\n get widgetShareApi(): typeof WidgetShare.api | undefined {\n return WidgetShare.api;\n }\n get widgetTestApi(): typeof WidgetTest.api | undefined {\n return WidgetTest.api;\n }\n get widgetVoteApi(): typeof WidgetVote.api | undefined {\n return WidgetVote.api;\n }\n get widgetProductsApi(): typeof WidgetProducts.api | undefined {\n return WidgetProducts.api;\n }\n get VideoPlayer(): SlideApiPeerDeps[\"VODPlayer\"] | undefined {\n return this.slideApiPeerDeps().VODPlayer;\n }\n}\n","import { container } from \"@composition\";\nimport { slideApiPeerDeps } from \"../../../entry_points/es_module/es_module\";\nimport { EsModuleLayoutApi } from \"../adapters/es_module_layout_api\";\nimport { ILayoutApi } from \"../layout_api.h\";\n\ncontainer.registerSingleton<ILayoutApi>(() => new EsModuleLayoutApi(() => slideApiPeerDeps));\n"],"names":["isObject","Utils.waitForImageHtmlElementLoad","Utils.waitForVideoHtmlElementLoad","Utils.isObject","WidgetFactory.tryCreateFromHtmlElement","Utils.isFunction","BaseSlideApi","drawingSVG"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/composition/core.ts","../../../src/widgets/base/widgets_service/widgets_service.ts","../../../src/widgets/base/widgets_service/composition.ts","../../../src/layout/layout_service/layout_service.ts","../../../src/layout/layout_service/composition.ts","../../../src/composition/index.ts","../../../src/utils.ts","../../../src/animation/animation.ts","../../../src/sdk_api/adapters/es_module_sdk_api.ts","../../../src/sdk_api/sdk_api.h.ts","../../../src/layout/elements/DataInput.ts","../../../src/layout/elements/Barcode.ts","../../../src/layout/elements/ClickableBase.ts","../../../src/layout/elements/Button.ts","../../../src/layout/elements/Copy.ts","../../../src/layout/elements/DateCountdown.ts","../../../src/layout/elements/Poll.ts","../../../src/layout/elements/PollLayers.ts","../../../src/layout/elements/Products.ts","../../../src/layout/elements/Quest.ts","../../../src/layout/elements/Quiz.ts","../../../src/layout/elements/QuizGrouped.ts","../../../src/layout/elements/RangeSlider.ts","../../../src/layout/elements/Rate.ts","../../../src/layout/elements/Share.ts","../../../src/layout/elements/SwipeUpItems.ts","../../../src/layout/elements/Test.ts","../../../src/layout/elements/Vote.ts","../../../src/layout/elements/Text.ts","../../../src/layout/utils/utils.ts","../../../src/layout/elements/Image.ts","../../../src/layout/elements/SwipeUp.ts","../../../src/layout/elements/Video.ts","../../../src/layout/elements/factory.ts","../../../src/layout/slide_timeline/slide_timeline.ts","../../../src/layout/Layer.ts","../../../src/layout/Slide.ts","../../../src/layout/SlideApi.ts","../../../src/entry_points/es_module/es_module.ts","../../../src/widgets/base/base.ts","../../../src/widgets/barcode/barcode.ts","../../../src/widgets/copy/copy.ts","../../../src/widgets/data_input/data_input.ts","../../../src/widgets/date_countdown/date_countdown.ts","../../../src/widgets/multi_slide/multi_slide.ts","../../../src/widgets/poll/poll.ts","../../../src/widgets/poll_layers/poll_layers.ts","../../../src/formatter.ts","../../../src/SwipeGestureDetector.ts","../../../src/widgets/products/products.ts","../../../src/widgets/quest/quest.ts","../../../src/widgets/quiz/quiz.ts","../../../src/widgets/quiz_grouped/quiz_grouped.ts","../../../src/widgets/range_slider/range_slider.ts","../../../src/widgets/rate/rate.ts","../../../src/widgets/share/share.ts","../../../src/widgets/test/test.ts","../../../src/widgets/vote/vote.ts","../../../src/layout/layout_api/adapters/es_module_layout_api.ts","../../../src/layout/layout_api/composition/es_module_layout_api.ts"],"sourcesContent":["import { DIContainer } from \"@wessberg/di\";\n\nexport const container = new DIContainer();\n","export class WidgetsService {\n constructor(private _env: Window) {}\n\n get env(): Window {\n return this._env;\n }\n}\n","import { container } from \"@composition\";\nimport { WidgetsService } from \"./widgets_service\";\n\ncontainer.registerSingleton<WidgetsService>();\n","import { ILayoutApi } from \"../layout_api\";\n\nexport class LayoutService {\n constructor(\n private _env: Window,\n private _layoutApi: ILayoutApi\n ) {}\n\n get env(): Window {\n return this._env;\n }\n\n get layoutApi(): ILayoutApi {\n return this._layoutApi;\n }\n}\n","import { container } from \"@composition\";\nimport { LayoutService } from \"./layout_service\";\n\ncontainer.registerSingleton<LayoutService>();\n","import { container } from \"./core\";\n\n// import '../core/composition';\nimport \"../widgets/base/widgets_service/composition\";\nimport \"../layout/layout_service/composition\";\n\n// import '../adapters/dateTimeSource/composition';\n// import '../adapters/uuidGenerator/composition';\n// import '../effects/eventHandler/composition';\n// import '../effects/logger/composition';\n// import '../effects/timer/composition';\n\ncontainer.registerSingleton<Window>(() => window);\nexport { container };\n","import { SDKApi } from \"@skd_api\";\n\nexport const array_string = \"[object Array]\";\nexport const ops = Object.prototype.toString;\nexport const fnPrototype = Function.prototype;\nexport const bind = fnPrototype.bind;\nexport const arPrototype = Array.prototype;\nexport const obPrototype = Object.prototype;\nexport const push = arPrototype.push;\nexport const slice = arPrototype.slice;\nexport const concat = arPrototype.concat;\nexport const obKeys = Object.keys;\nexport const obHasOwnProp = obPrototype.hasOwnProperty;\nexport const toString = obPrototype.toString;\nexport const isArray =\n Array.isArray ||\n function (e) {\n return toString.call(e) === \"[object Array]\";\n };\n// Matches dashed string for camelizing\nexport const rmsPrefix = /^-ms-/;\nexport const rdashAlpha = /-([\\da-z])/gi;\nexport const fcamelCase = function (letter: string) {\n return letter.toUpperCase();\n};\n\n// private methods\nexport const isObject = function (e: any) {\n var t = typeof e;\n return t === \"function\" || (t === \"object\" && !!e);\n};\nexport const isNumber = function (t: any) {\n return toString.call(t) === \"[object Number]\";\n};\n\nexport const isNumeric = function (n: any) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\n// isEmpty = function(e) {\n// if (e == null)\n// return !0;\n// if (isArray(e) || isString(e) || isArguments(e))\n// return e.length === 0;\n// for (var t in e)\n// if (p.has(e, t))\n// return !1;\n// return !0\n// },\nexport const has = function (e: Object, t: string) {\n return e != null && obHasOwnProp.call(e, t);\n};\nexport const keys = function (e: Object) {\n if (!isObject(e)) return [];\n if (obKeys) return obKeys(e);\n var t = [];\n for (var n in e) has(e, n) && t.push(n);\n return t;\n};\nconst d = function (e: Function, t?: Object, n?: number) {\n if (t === void 0) return e;\n switch (n == null ? 3 : n) {\n case 1:\n return function (n: any) {\n return e.call(t, n);\n };\n case 2:\n return function (n: any, r: any) {\n return e.call(t, n, r);\n };\n case 3:\n return function (n: any, r: any, i: any) {\n return e.call(t, n, r, i);\n };\n case 4:\n return function (n: any, r: any, i: any, s: any) {\n return e.call(t, n, r, i, s);\n };\n }\n return function () {\n return e.apply(t, arguments);\n };\n};\nexport const each = function <T>(e: Array<T>, t: (value: T, index: string | number, arr: Array<T>) => void, n?: Object) {\n if (e == null) return e;\n t = d(t, n) as (value: T, index: string | number, arr: Array<T>) => void;\n var r: number,\n i: number = e.length;\n if (i === +i) for (r = 0; r < i; ++r) t(e[r], r, e);\n else {\n var s: Array<string> = keys(e);\n for (r = 0, i = s.length; r < i; ++r) t((e as { [key in string]: any })[s[r]], s[r], e);\n }\n return e;\n};\nexport const forEach = each;\nexport const extend = function <T extends Record<string, any>, R extends Array<Partial<T>> = Array<Partial<T>>>(e: Partial<T>, ...args: R): T {\n var t, n;\n for (var r = 1, i = arguments.length; r < i; r++) {\n t = arguments[r];\n for (n in t) obHasOwnProp.call(t, n) && ((e as Record<string, any>)[n] = t[n]);\n }\n return e as T;\n};\nexport const isEmptyObject = function (obj: Object): boolean {\n var name;\n for (name in obj) {\n return false;\n }\n return true;\n};\n\nexport const expando = function (): string {\n return \"app\" + (\"\" + Math.random()).replace(/\\D/g, \"\");\n};\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE9-11+\n// Microsoft forgot to hump their vendor prefix (#9572)\nexport const camelCase = function (string: string) {\n return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n};\n\nexport const proxy = function <T extends (...args: any[]) => any>(func: T, obj?: Object): () => ReturnType<T> {\n if (typeof func != \"function\") {\n return func;\n }\n\n // If obj is empty or another set another object\n if (!obj) {\n // @ts-ignore\n obj = this;\n }\n\n return function () {\n return func.apply(obj, arguments as unknown as any[]);\n };\n};\n\n/*\n hasData: function( elem ) {\n return data_user.hasData( elem ) || data_priv.hasData( elem );\n},\n\ndata: function( elem, name, data ) {\n return data_user.access( elem, name, data );\n},\n\nremoveData: function( elem, name ) {\n data_user.remove( elem, name );\n},\n */\n\nexport const data = function <T>(elem: HTMLElement, name: string, data?: T): T | undefined {\n return data_user.access(elem, name, data);\n};\n\nexport const getTagData = function (element: HTMLElement, key: string) {\n return element.dataset[key];\n};\n\nexport const getTagDataAsNumber = function (element: HTMLElement, key: string): number | undefined {\n const data = element.dataset[key];\n if (data == null) {\n return undefined;\n }\n return parseInt(data);\n};\n\nexport const setTagData = function (element: HTMLElement, key: string, value: string): void {\n element.dataset[key] = value;\n};\nvar rnotwhite = /\\S+/g;\n\nclass Data {\n static uid: number = 1;\n\n static accepts(owner: HTMLElement): boolean {\n // Accepts only:\n // - Node\n // - Node.ELEMENT_NODE\n // - Node.DOCUMENT_NODE\n // - Object\n // - Any\n /* jshint -W018 */\n return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n }\n\n private expando: string;\n private cache: Record<string, any>;\n\n constructor() {\n // Support: Android<4,\n // Old WebKit does not have Object.preventExtensions/freeze method,\n // return new empty object instead with no [[set]] accessor\n Object.defineProperty((this.cache = {}), 0, {\n get: function () {\n return {};\n },\n });\n\n this.expando = expando() + String(Data.uid++);\n }\n\n public key(owner: HTMLElement) {\n const _owner = owner as HTMLElement & { [key in string]: any };\n\n // We can accept data for non-element nodes in modern browsers,\n // but we should not, see #8335.\n // Always return the key for a frozen object.\n if (!Data.accepts(_owner)) {\n return 0;\n }\n\n var descriptor: Record<string, any> = {},\n // Check if the owner object already has a cache key\n unlock = _owner[this.expando];\n\n // If not, create one\n if (!unlock) {\n unlock = Data.uid++;\n\n // Secure it in a non-enumerable, non-writable property\n try {\n descriptor[this.expando] = { value: unlock };\n Object.defineProperties(_owner, descriptor);\n\n // Support: Android<4\n // Fallback to a less secure definition\n } catch (e) {\n descriptor[this.expando] = unlock;\n extend(_owner, descriptor);\n }\n }\n\n // Ensure the cache object\n if (!this.cache[unlock]) {\n this.cache[unlock] = {};\n }\n\n return unlock;\n }\n\n public set(owner: HTMLElement, data: string | Object, value: Object) {\n var prop,\n // There may be an unlock assigned to this node,\n // if there is no entry for this \"owner\", create one inline\n // and set the unlock as though an owner entry had always existed\n unlock = this.key(owner),\n cache = this.cache[unlock];\n\n // Handle: [ owner, key, value ] args\n if (typeof data === \"string\") {\n cache[data] = value;\n\n // Handle: [ owner, { properties } ] args\n } else {\n // Fresh assignments by object are shallow copied\n if (isEmptyObject(cache)) {\n extend(this.cache[unlock], data);\n // Otherwise, copy the properties one-by-one to the cache object\n } else {\n for (prop in data) {\n //@ts-ignore\n cache[prop] = data[prop];\n }\n }\n }\n return cache;\n }\n\n public get(owner: HTMLElement, key: string) {\n // Either a valid cache is found, or will be created.\n // New caches will be created and the unlock returned,\n // allowing direct access to the newly created\n // empty data object. A valid owner object must be provided.\n var cache = this.cache[this.key(owner)];\n\n return key === undefined ? cache : cache[key];\n }\n\n public access(owner: HTMLElement, key: string, value: any) {\n var stored;\n // In cases where either:\n //\n // 1. No key was specified\n // 2. A string key was specified, but no value provided\n //\n // Take the \"read\" path and allow the get method to determine\n // which value to return, respectively either:\n //\n // 1. The entire cache object\n // 2. The data stored at the key\n //\n if (key === undefined || (key && typeof key === \"string\" && value === undefined)) {\n stored = this.get(owner, key);\n\n return stored !== undefined ? stored : this.get(owner, camelCase(key));\n }\n\n // [*]When the key is not a string, or both a key and value\n // are specified, set or extend (existing objects) with either:\n //\n // 1. An object of properties\n // 2. A key and value\n //\n this.set(owner, key, value);\n\n // Since the \"set\" path can have two possible entry points\n // return the expected data based on which path was taken[*]\n return value !== undefined ? value : key;\n }\n\n public remove(owner: HTMLElement, key: string): void {\n var i,\n name,\n camel,\n unlock = this.key(owner),\n cache = this.cache[unlock];\n\n if (key === undefined) {\n this.cache[unlock] = {};\n } else {\n // Support array or space separated string of keys\n if (isArray(key)) {\n // If \"name\" is an array of keys...\n // When data is initially created, via (\"key\", \"val\") signature,\n // keys will be converted to camelCase.\n // Since there is no way to tell _how_ a key was added, remove\n // both plain key and camelCase key. #12786\n // This will only penalize the array argument path.\n name = key.concat(key.map(camelCase));\n } else {\n camel = camelCase(key);\n // Try the string as a key before any manipulation\n if (key in cache) {\n name = [key, camel];\n } else {\n // If a key with the spaces exists, use it.\n // Otherwise, create an array by matching non-whitespace\n name = camel;\n name = name in cache ? [name] : name.match(rnotwhite) || [];\n }\n }\n\n i = name.length;\n while (i--) {\n delete cache[name[i]];\n }\n }\n }\n\n public hasData(owner: HTMLElement): boolean {\n const _owner = owner as HTMLElement & { [key: string]: any };\n return !isEmptyObject(this.cache[_owner[this.expando]] || {});\n }\n\n public discard(owner: HTMLElement): void {\n const _owner = owner as HTMLElement & { [key: string]: any };\n if (_owner[this.expando]) {\n delete this.cache[_owner[this.expando]];\n }\n }\n}\n\n// var data_priv = new Data();\nconst data_user = new Data();\n\nexport const getWinWidth = function (env: Window) {\n return env.innerWidth || env.document.documentElement.clientWidth || env.document.body.clientWidth;\n};\n\nexport const getWinHeight = function (env: Window) {\n return env.innerHeight || env.document.documentElement.clientHeight || env.document.body.clientHeight;\n};\n\nexport const sendStatisticEventToApp = function (\n sdkApi: SDKApi,\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n options?: { forceEnableStatisticV2?: boolean }\n) {\n sdkApi.sendStatisticEvent(name, data, devPayload, options?.forceEnableStatisticV2 ?? false);\n};\n\nexport const getValueOrException = function <T>(value: T | undefined | null, message: string): T {\n if (value == null) {\n throw new Error(message);\n }\n return value;\n};\n\nexport const getValueOrDefault = function <T>(value: T | undefined | null, defaultValue: T): T {\n if (value == null) {\n return defaultValue;\n }\n return value;\n};\n\nexport const getElementBounding = (env: Window, rect: DOMRect) => {\n var wWidth = getWinWidth(env);\n var wHeight = getWinHeight(env);\n\n var bounding = {\n absolute: {\n width: rect.width,\n height: rect.height,\n left: rect.left,\n right: 0,\n center: {\n x: rect.x + rect.width / 2,\n y: rect.y + rect.height / 2,\n },\n },\n width: (rect.width / wWidth) * 100,\n height: (rect.height / wHeight) * 100,\n left: (rect.left / wWidth) * 100,\n right: 0,\n center: {\n x: ((rect.x + rect.width / 2) / wWidth) * 100,\n y: ((rect.y + rect.height / 2) / wHeight) * 100,\n },\n };\n bounding.right = bounding.left + bounding.width;\n bounding.absolute.right = rect.left + rect.width;\n\n return bounding;\n};\n\nexport const toArray = <T = any>(value: any): Array<T> => Array.prototype.slice.call(value) as Array<T>;\n\nexport const addClass = (target: HTMLElement, className: string): void => {\n var arr = target.className.split(\" \");\n if (arr.indexOf(className) === -1) {\n target.className += \" \" + className;\n }\n};\nexport const removeClass = (target: HTMLElement, className: string): void => {\n target.className = target.className.replace(new RegExp(\"(?:^|\\\\s)\" + className + \"(?:\\\\s|$)\"), \" \").trim();\n};\nexport const classList = (target: HTMLElement): Array<string> => {\n if (target.classList !== undefined) {\n return toArray(target.classList);\n }\n return target.className.split(\" \");\n};\nexport const hasClass = (target: HTMLElement, className: string): boolean => classList(target).indexOf(className) !== -1;\n\nexport const Clipboard = (function (window: Window, document: Document, navigator: Navigator) {\n let textArea: HTMLTextAreaElement;\n\n function isOS() {\n return navigator.userAgent.match(/ipad|iphone/i);\n }\n\n function createTextArea(text: string): void {\n textArea = document.createElement(\"textArea\") as HTMLTextAreaElement;\n textArea.value = text;\n document.body.appendChild(textArea);\n }\n\n function selectText() {\n if (isOS()) {\n const range = document.createRange();\n range.selectNodeContents(textArea);\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n textArea.setSelectionRange(0, 999999);\n } else {\n textArea.select();\n }\n }\n\n function copyToClipboard() {\n document.execCommand(\"copy\");\n document.body.removeChild(textArea);\n }\n\n const copy = function (text: string): void {\n createTextArea(text);\n selectText();\n copyToClipboard();\n };\n\n return {\n copy,\n };\n})(window, document, navigator);\n\nexport function FilterNumber(x: any): x is number {\n return typeof x === \"number\";\n}\n\nexport function determineLocale(): string {\n // All modern browsers support this. Should match what's used by localeCompare() etc.\n const intl = window.Intl;\n if (intl !== undefined) {\n return intl.NumberFormat().resolvedOptions().locale;\n }\n\n // Fall back to ranked choice locales, which are configured in the browser but aren't necessarily\n // what's used in functions like localeCompare().\n const languages = navigator.languages as string[] | undefined;\n if (languages !== undefined && languages.length > 0) {\n return languages[0];\n }\n\n // Old standard.\n return navigator.language ?? \"en-US\";\n}\n\nexport function isScreenSupportsTouch(env: Window): boolean {\n let supportsTouch = false;\n if (\"ontouchstart\" in env) {\n supportsTouch = true;\n } else if ((env.navigator as any).msPointerEnabled) {\n supportsTouch = true;\n } else if (\"ontouchstart\" in env.document.documentElement) {\n supportsTouch = true;\n }\n return supportsTouch;\n}\n","import { addClass, classList, hasClass, removeClass, toArray } from \"@utils\";\nimport { IAnimation } from \"./animation.h\";\n\nvar supportAnimate = document.documentElement.animate !== undefined;\nsupportAnimate = false; // tmp off\n\nvar _intervals: Array<number> = [];\n\nvar _startShakeAnimation = function (element: HTMLElement) {\n var step = 0;\n return window.setInterval(function () {\n if (element) {\n switch (step) {\n case 0:\n element.style.setProperty(\"transform\", \"translate(1px, 1px) rotate(0deg)\");\n break;\n case 10:\n element.style.setProperty(\"transform\", \"translate(-1px, -2px) rotate(-1deg)\");\n break;\n case 20:\n element.style.setProperty(\"transform\", \"translate(-3px, 0px) rotate(1deg)\");\n break;\n case 30:\n element.style.setProperty(\"transform\", \"translate(3px, 2px) rotate(0deg)\");\n break;\n case 40:\n element.style.setProperty(\"transform\", \"translate(1px, -1px) rotate(1deg)\");\n break;\n case 50:\n element.style.setProperty(\"transform\", \"translate(-1px, 2px) rotate(-1deg)\");\n break;\n case 60:\n element.style.setProperty(\"transform\", \"translate(-3px, 1px) rotate(0deg)\");\n break;\n case 70:\n element.style.setProperty(\"transform\", \"translate(-3px, 1px) rotate(0deg)\");\n break;\n case 80:\n element.style.setProperty(\"transform\", \"translate(-1px, -1px) rotate(1deg)\");\n break;\n case 90:\n element.style.setProperty(\"transform\", \"translate(1px, 2px) rotate(0deg)\");\n break;\n case 100:\n element.style.setProperty(\"transform\", \"translate(1px, -2px) rotate(-1deg)\");\n break;\n }\n step += 10;\n if (step > 100) {\n step = 0;\n }\n }\n }, 100);\n};\n\nvar _startExpandShakeAnimation = function (element: HTMLElement) {\n var step = 0;\n return window.setInterval(function () {\n if (element) {\n switch (step) {\n case 0:\n element.style.setProperty(\"transform\", \"translate(1px, 1px) rotate(0deg) scale(1.1)\");\n break;\n case 10:\n element.style.setProperty(\"transform\", \"translate(-1px, -2px) rotate(-1deg) scale(1.1)\");\n break;\n case 20:\n element.style.setProperty(\"transform\", \"translate(-3px, 0px) rotate(1deg) scale(1.1)\");\n break;\n case 30:\n element.style.setProperty(\"transform\", \"translate(3px, 2px) rotate(0deg) scale(1.1)\");\n break;\n case 40:\n element.style.setProperty(\"transform\", \"translate(1px, -1px) rotate(1deg) scale(1.1)\");\n break;\n case 50:\n element.style.setProperty(\"transform\", \"translate(-1px, 2px) rotate(-1deg) scale(1.1)\");\n break;\n case 60:\n element.style.setProperty(\"transform\", \"translate(-3px, 1px) rotate(0deg) scale(1.1)\");\n break;\n case 70:\n element.style.setProperty(\"transform\", \"translate(3px, 1px) rotate(-1deg) scale(1.1)\");\n break;\n case 80:\n element.style.setProperty(\"transform\", \"translate(-1px, -1px) rotate(1deg) scale(1.1)\");\n break;\n case 90:\n element.style.setProperty(\"transform\", \"translate(1px, 2px) rotate(0deg) scale(1.1)\");\n break;\n case 100:\n element.style.setProperty(\"transform\", \"translate(1px, -2px) rotate(-1deg) scale(1.1)\");\n break;\n }\n step += 10;\n if (step > 100) {\n step = 0;\n }\n }\n }, 100);\n};\n\nvar _startBlurAnimation = function (element: HTMLElement) {\n const listener = (e: TransitionEvent) => {\n if (e.propertyName === \"filter\" && e.target != null) {\n const target = e.target as HTMLElement;\n if (hasClass(target, \"animated\")) {\n if (target.style.filter === \"blur(0px)\" || target.style.filter === \"\") {\n setTimeout(function () {\n target.style.filter = \"blur(5px)\";\n }, 10);\n } else if (target.style.filter === \"blur(5px)\") {\n setTimeout(function () {\n target.style.filter = \"blur(0px)\";\n }, 10);\n }\n } else {\n target.style.filter = \"\";\n target.removeEventListener(\"transitionend\", listener);\n }\n }\n };\n element.addEventListener(\"transitionend\", listener);\n};\n\nvar shortDuration = {\n duration: 1000,\n iterations: 1,\n};\nvar longDuration = {\n duration: 10000,\n iterations: 1,\n};\nvar extraLongDuration = {\n duration: 20000,\n iterations: 1,\n};\nvar longInfinityDuration = {\n duration: 10000,\n iterations: Infinity,\n};\n\nvar getAnimationFunction = function (element: HTMLElement): () => void {\n if (!hasClass(element, \"animated\")) {\n if (hasClass(element, \"narrative-element-animation-shake\")) {\n if (element.parentElement && hasClass(element.parentElement, \"narrative-element-expand\")) {\n return function () {\n _intervals.push(_startExpandShakeAnimation(element));\n addClass(element, \"animated\");\n };\n } else {\n return function () {\n _intervals.push(_startShakeAnimation(element));\n addClass(element, \"animated\");\n };\n }\n } else if (hasClass(element, \"narrative-element-animation-blur\")) {\n return function () {\n _startBlurAnimation(element);\n addClass(element, \"animated\");\n };\n } else {\n return function () {\n addClass(element, \"active\");\n addClass(element, \"animated\");\n };\n }\n }\n return function () {};\n};\n\nexport const animationApi: IAnimation = {\n start: function (slide: HTMLElement, animate: boolean = false) {\n if (supportAnimate && animate) {\n // for editor, todo add .reset-animation to narrative-editor-slide && clear that\n if (!hasClass(slide, \"narrative-slide\")) {\n addClass(slide, \"reset-animation\");\n }\n\n const elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n\n elements.forEach(element => {\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n var _classList = classList(element);\n\n if (_classList.indexOf(\"narrative-element-animation-fade-in-up\") !== -1) {\n element.animate(\n {\n transform: [\"translateY(\" + height + \"px)\", \"translateY(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-fade-in-down\") !== -1) {\n element.animate(\n {\n transform: [\"translateY(\" + -1 * height + \"px)\", \"translateY(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-fade-in-left\") !== -1) {\n element.animate(\n {\n transform: [\"translateX(\" + -1 * width + \"px)\", \"translateX(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-fade-in-right\") !== -1) {\n element.animate(\n {\n transform: [\"translateX(\" + width + \"px)\", \"translateX(0)\"],\n opacity: [0, 1],\n },\n shortDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-blur\") !== -1) {\n element.animate(\n [\n { filter: \"blur(5px)\", offset: 0 },\n { filter: \"blur(0px)\", offset: 0.5 },\n { filter: \"blur(5px)\", offset: 1 },\n ],\n longInfinityDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-focus-in\") !== -1) {\n element.animate({ filter: [\"blur(12px)\", \"blur(0px)\"], opacity: [0, 1] }, shortDuration);\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-left\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateX(\" + 0.08 * width + \"px)\", \"scale(1.2) translateX(\" + -0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-right\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateX(\" + -0.08 * width + \"px)\", \"scale(1.2) translateX(\" + 0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-up\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateY(\" + 0.08 * width + \"px)\", \"scale(1.2) translateY(\" + -0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-scroll-down\") !== -1) {\n element.animate(\n {\n transform: [\"scale(1.2) translateY(\" + -0.08 * width + \"px)\", \"scale(1.2) translateY(\" + 0.08 * width + \"px)\"],\n },\n extraLongDuration\n );\n } else if (_classList.indexOf(\"narrative-element-animation-zoom\") !== -1) {\n element.animate({ transform: [\"scale(1)\", \"scale(1.2)\"] }, longDuration);\n } else if (_classList.indexOf(\"narrative-element-animation-zoom-out\") !== -1) {\n element.animate({ transform: [\"scale(1.2)\", \"scale(1)\"] }, longDuration);\n } else if (_classList.indexOf(\"narrative-element-animation-shake\") !== -1) {\n element.animate(\n [\n { transform: \"translate(1px, 1px) rotate(0deg)\", offset: 0 },\n { transform: \"translate(-1px, -2px) rotate(-1deg)\", offset: 0.1 },\n { transform: \"translate(-3px, 0px) rotate(1deg)\", offset: 0.2 },\n { transform: \"translate(3px, 2px) rotate(0deg)\", offset: 0.3 },\n { transform: \"translate(1px, -1px) rotate(1deg)\", offset: 0.4 },\n { transform: \"translate(-1px, 2px) rotate(-1deg)\", offset: 0.5 },\n { transform: \"translate(-3px, 1px) rotate(0deg)\", offset: 0.6 },\n { transform: \"translate(3px, 1px) rotate(-1deg)\", offset: 0.7 },\n { transform: \"translate(-1px, -1px) rotate(1deg)\", offset: 0.8 },\n { transform: \"translate(1px, 2px) rotate(0deg)\", offset: 0.9 },\n { transform: \"translate(1px, -2px) rotate(-1deg)\", offset: 1 },\n ],\n { duration: 1000, iterations: Infinity, composite: \"add\" }\n );\n }\n });\n\n if (elements.length > 0) {\n requestAnimationFrame(() => removeClass(slide, \"reset-animation\"));\n }\n } else {\n addClass(slide, \"animation-fallback\");\n\n type SavedAnimation = { cb: () => void; timerId?: number; timeout: number; needResume?: boolean };\n const animations: Array<SavedAnimation> = [];\n\n // просто Array\n\n var elements = slide.querySelectorAll<HTMLElement>(\".narrative-element-animation\");\n var isEditorSlide = hasClass(slide, \"narrative-editor-slide\");\n for (var i = 0; i < elements.length; i++) {\n if (!isEditorSlide && !elements[i].style.getPropertyValue(\"--width\")) {\n var rects = elements[i].getBoundingClientRect();\n var width = rects.width;\n var height = rects.height;\n if (width && height) {\n elements[i].style.setProperty(\"--width\", width + \"px\");\n elements[i].style.setProperty(\"--height\", height + \"px\");\n }\n }\n (function (element) {\n var timeout = 50;\n\n if (element.getAttribute(\"data-animation-timeout\") && parseFloat(element.getAttribute(\"data-animation-timeout\") ?? \"0\")) {\n timeout = parseFloat(element.getAttribute(\"data-animation-timeout\") ?? \"0\") * 1000;\n }\n\n const cb = () => {\n getAnimationFunction(element)();\n if (animation) {\n animation.timerId = undefined;\n }\n };\n const animation: SavedAnimation = {\n cb,\n timeout,\n timerId: window.setTimeout(cb, timeout),\n };\n animations.push(animation);\n })(elements[i]);\n }\n\n var startAt = new Date().getTime();\n // onstop && onpause\n return function (isStop: boolean) {\n for (var animation of animations) {\n if (animation[\"timerId\"] !== undefined) {\n clearTimeout(animation[\"timerId\"]);\n animation[\"timerId\"] = undefined;\n animation[\"timeout\"] -= new Date().getTime() - startAt;\n animation[\"needResume\"] = !isStop;\n }\n }\n\n // resume\n return function () {\n startAt = new Date().getTime();\n for (const animation of animations) {\n if (animation[\"timerId\"] === undefined && animation[\"needResume\"] === true) {\n animation[\"timerId\"] = window.setTimeout(animation[\"cb\"], animation[\"timeout\"]);\n }\n }\n };\n };\n }\n },\n\n stop: function (slide: HTMLElement, animate: boolean) {\n if (supportAnimate && animate) {\n /** @type {HTMLElement[]} */\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n elements.forEach(function (el) {\n el.getAnimations().forEach(function (animation) {\n animation.cancel();\n });\n });\n } else {\n for (var i = 0; i < _intervals.length; i++) {\n clearInterval(_intervals[i]);\n }\n\n if (slide) {\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n for (var i = 0; i < elements.length; i++) {\n removeClass(elements[i], \"active\");\n removeClass(elements[i], \"animated\");\n elements[i].style.setProperty(\"transform\", \"\");\n elements[i].style.setProperty(\"filter\", \"\");\n }\n }\n }\n },\n\n pause: function (slide: HTMLElement): void {\n if (supportAnimate) {\n /* var elements = document.querySelectorAll('.narrative-element-animation');\n elements = _toArray(elements);\n\n elements.forEach(function(el) {\n el.playState = \"paused\";\n // el.currentTime = 0;\n });*/\n\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n elements.forEach(function (el) {\n el.getAnimations().forEach(function (animation) {\n if (animation.playState !== \"finished\" && animation.playState === \"running\") {\n animation.pause();\n }\n });\n });\n\n // slide.getAnimations().forEach(function (animation) {\n // if (animation.playState !== 'finished' && animation.playState === 'running') {\n // animation.pause();\n // }\n // });\n }\n },\n resume: function (slide: HTMLElement): void {\n if (supportAnimate) {\n var elements = toArray<HTMLElement>(slide.querySelectorAll(\".narrative-element-animation\"));\n elements.forEach(function (el) {\n el.getAnimations().forEach(function (animation) {\n if (animation.playState === \"paused\") {\n animation.play();\n }\n });\n });\n }\n },\n reset: function (slide: HTMLElement): void {\n // _addClass(slide, 'reset-animation');\n },\n};\n","import { APIResponse, FontDTO, SDKApi } from \"@skd_api\";\nimport { Widgets, WidgetsSharedDataMap } from \"../../widgets/base\";\nimport { animationApi } from \"@animation\";\nimport { SDKInterface } from \"../es_module_sdk_api.h\";\nimport { TIMELINE_ACTION } from \"../../layout/slide_timeline\";\n\ndeclare class Toast {\n constructor(options: { content: string });\n}\n\nexport class EsModuleSdkApi implements SDKApi {\n constructor(private readonly sdkBinding: SDKInterface) {}\n\n getCardServerData(cardId: number): Record<string, any> | null {\n return this.sdkBinding.getCardServerData(cardId);\n }\n\n updateCardServerDataLocally(cardId: number, data: Record<string, any>): void {\n return this.sdkBinding.updateCardServerDataLocally(data);\n }\n\n showNextSlide(duration: number): void {\n this.sdkBinding.showNextSlide();\n }\n\n sendStatisticEvent(\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n forceEnableStatisticV2?: boolean\n ): void {\n this.sdkBinding.sendStatisticEvent(name, data, devPayload, forceEnableStatisticV2);\n }\n\n getCardLocalData(): Promise<Record<string, any>> {\n return this.sdkBinding.getCardLocalData();\n }\n\n isExistsShowLayer(): boolean {\n return true;\n }\n\n showLayer(index: number) {\n this.sdkBinding.showLayer(index);\n }\n\n get cardAnimation() {\n return animationApi;\n }\n\n get isAndroid(): boolean {\n return false;\n }\n\n get isIOS(): boolean {\n return false;\n }\n\n get isWeb(): boolean {\n return true;\n }\n\n pauseUI() {\n this.sdkBinding.pauseUI();\n }\n\n resumeUI() {\n this.sdkBinding.resumeUI();\n }\n\n get isExistsShowCardTextInput(): boolean {\n return true;\n }\n\n showCardTextInput(id: string, data: Record<string, any>): void {\n this.sdkBinding.showCardTextInput(id, data);\n }\n\n setCardLocalData(keyValue: Record<string, any>, sendToServer: boolean) {\n this.sdkBinding.setCardLocalData(keyValue, sendToServer);\n }\n\n getWidgetsSharedData<WidgetType extends keyof WidgetsSharedDataMap>(cardId: number, widget: Widgets): WidgetsSharedDataMap[WidgetType] | null {\n return this.sdkBinding.getWidgetsSharedData<WidgetType>(cardId, widget);\n }\n\n vibrate(pattern: number): void {\n navigator.vibrate(pattern);\n }\n\n openUrl(data: {\n type: \"link\" | \"swipeUpLink\" | \"swipeUpItems\";\n link: {\n type: \"url\" | \"json\";\n target: string;\n };\n elementId?: string;\n }): void {\n this.sdkBinding.openUrl(data);\n }\n\n sendApiRequest<ResponseDTO>(\n url: string,\n method: string,\n params: Record<string, any> | null,\n headers: Record<string, any> | null,\n data: Record<string, any> | null,\n profilingKey: string\n ): Promise<APIResponse<ResponseDTO>> {\n return this.sdkBinding.sendApiRequest(url, method, params, headers, data, profilingKey);\n }\n\n sendApiRequestSupported(): boolean {\n return true;\n }\n\n showToast(text: string): void {\n this.sdkBinding.showToast(text);\n }\n\n get sdkCanSendShareComplete(): boolean {\n return true;\n }\n\n get isExistsShare(): boolean {\n return true;\n }\n\n share(\n id: string,\n config: {\n url?: string | null;\n text?: string | null;\n title?: string | null;\n files?: Array<{\n file: File;\n name: string;\n type: string;\n }> | null;\n }\n ) {\n this.sdkBinding.share(id, config);\n }\n\n shareSlideScreenshot(shareId: string, hideElementsSelector?: string, shareText?: string): void {\n this.sdkBinding.shareSlideScreenshot(shareId, hideElementsSelector, shareText);\n }\n\n get isExistsShowCardSlide(): boolean {\n return true;\n }\n\n showCardSlide(index: number): void {\n this.sdkBinding.showCardSlide(index);\n }\n\n get isExistsShowNextCard(): boolean {\n return true;\n }\n\n cardShowNext(): void {\n this.sdkBinding.cardShowNext();\n }\n\n setCardSessionValue(element: HTMLElement, key: string, value: string): void {\n this.sdkBinding.setCardSessionValue(key, value);\n }\n\n getCardSessionValue(element: HTMLElement, key: string): string | undefined {\n return this.sdkBinding.getCardSessionValue(key);\n }\n\n updateTimeline(slideIndex: number, action: TIMELINE_ACTION, currentTime: number, duration: number, showLoader: boolean, showError: boolean): void {\n this.sdkBinding.updateTimeline(slideIndex, action, currentTime, duration, showLoader, showError);\n }\n\n cardPausedCallback(currentTime: number | null) {}\n\n cardResumedCallback(currentTime: number | null) {}\n\n getCardFonts(): Array<FontDTO> {\n return this.sdkBinding.getCardFonts();\n }\n\n disableVerticalSwipeGesture(): void {\n this.sdkBinding.disableVerticalSwipeGesture();\n }\n\n enableVerticalSwipeGesture(): void {\n this.sdkBinding.enableVerticalSwipeGesture();\n }\n\n disableHorizontalSwipeGesture(): void {\n this.sdkBinding.disableHorizontalSwipeGesture();\n }\n enableHorizontalSwipeGesture(): void {\n this.sdkBinding.enableHorizontalSwipeGesture();\n }\n\n disableBackpress(): void {}\n\n enableBackpress(): void {}\n\n closeCard(reason: string): void {\n this.sdkBinding.closeCard(reason);\n }\n\n openStory(id: number, index: number): void {\n this.sdkBinding.openStory(id, index);\n }\n\n openGame(gameInstanceId: string): void {\n this.sdkBinding.openGame(gameInstanceId);\n }\n\n writeToClipboard(data: { type: \"text\"; textValue: string }): void {\n this.sdkBinding.writeToClipboard(data);\n }\n\n isSdkSupportTimelineOnBeforeStart(): boolean {\n return true;\n }\n}\n","import { Widgets, WidgetsSharedDataMap } from \"../widgets/base\";\nimport { IAnimation } from \"@animation\";\nimport { TIMELINE_ACTION } from \"../layout/slide_timeline\";\n\nexport type APIResponse<DTO> = {\n status: number;\n data: DTO;\n headers?: { [key: string]: string };\n requestId: number | string;\n};\n\nexport type FontDTO = {\n url: string;\n family: string;\n style: string;\n weight: string;\n};\n\nexport const DEFAULT_SLIDE_DURATION = 10000;\nexport interface SDKApi {\n getCardServerData(cardId: number): Record<string, any> | null;\n updateCardServerDataLocally(cardId: number, data: Record<string, any>): void;\n showNextSlide(duration: number): void;\n sendStatisticEvent(\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n forceEnableStatisticV2?: boolean\n ): void;\n getCardLocalData(): Promise<Record<string, any>>;\n isExistsShowLayer(): boolean;\n showLayer(index: number): void;\n cardAnimation: IAnimation | undefined;\n isAndroid: boolean;\n isWeb: boolean;\n isIOS: boolean;\n pauseUI(): void;\n resumeUI(): void;\n isExistsShowCardTextInput: boolean;\n showCardTextInput(id: string, data: Record<string, any>): void;\n setCardLocalData(keyValue: Record<string, any>, sendToServer: boolean): void;\n getWidgetsSharedData<WidgetType extends keyof WidgetsSharedDataMap>(cardId: number, widget: Widgets): WidgetsSharedDataMap[WidgetType] | null;\n vibrate(pattern: number): void;\n openUrl(data: {\n type: \"link\" | \"swipeUpLink\" | \"swipeUpItems\";\n link: {\n type: \"url\" | \"json\";\n target: string;\n };\n elementId?: string;\n }): void;\n sendApiRequest<ResponseDTO>(\n url: string,\n method: string,\n params: Record<string, any> | null,\n headers: Record<string, any> | null,\n data: Record<string, any> | null,\n profilingKey: string\n ): Promise<APIResponse<ResponseDTO>>;\n sendApiRequestSupported(): boolean;\n showToast(text: string): void;\n sdkCanSendShareComplete: boolean;\n isExistsShare: boolean;\n share(\n id: string,\n config: {\n url?: string | null;\n text?: string | null;\n title?: string | null;\n files?: Array<{\n file: File;\n name: string;\n type: string;\n }> | null;\n }\n ): void;\n shareSlideScreenshot(shareId: string, hideElementsSelector?: string, shareText?: string): void;\n isExistsShowCardSlide: boolean;\n showCardSlide(index: number): void;\n isExistsShowNextCard: boolean;\n cardShowNext(): void;\n setCardSessionValue(element: HTMLElement, key: string, value: string): void;\n getCardSessionValue(element: HTMLElement, key: string): string | undefined;\n updateTimeline(slideIndex: number, action: TIMELINE_ACTION, currentTime: number, duration: number, showLoader: boolean, showError: boolean): void;\n\n /** @deprecated, used only in native sdk **/\n cardPausedCallback(currentTime: number | null): void;\n /** @deprecated, used only in native sdk **/\n cardResumedCallback(currentTime: number | null): void;\n\n getCardFonts(): Array<FontDTO>;\n\n disableVerticalSwipeGesture(): void;\n enableVerticalSwipeGesture(): void;\n\n disableHorizontalSwipeGesture(): void;\n enableHorizontalSwipeGesture(): void;\n\n disableBackpress(): void;\n enableBackpress(): void;\n\n closeCard(reason: string): void;\n openStory(id: number, index: number): void;\n openGame(gameInstanceId: string): void;\n\n writeToClipboard(data: { type: \"text\"; textValue: string }): void;\n\n isSdkSupportTimelineOnBeforeStart(): boolean;\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetDataInput } from \"../../widgets/data_input\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class DataInput implements IElement {\n private static readonly _className = \"narrative-element-data-input\";\n\n public static className(): string {\n return DataInput._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetDataInput.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is DataInput {\n return element instanceof DataInput;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n setUserData(id: string, text: string): void {\n this._widgetApi.setUserData(id, text);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { WidgetBarcode } from \"../../widgets/barcode\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Barcode implements IElement {\n private static readonly _className = \"narrative-element-barcode\";\n\n public static className(): string {\n return Barcode._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetBarcode.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { Layer } from \"../Layer\";\n\nexport class ClickableBase {\n constructor(private readonly _element: HTMLElement) {}\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\nimport { ClickableBase } from \"./ClickableBase\";\n\nexport class Button extends ClickableBase implements IElement {\n private static readonly _className = \"narrative-element-link\";\n\n public static className(): string {\n return Button._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {\n super(_elementNodeRef);\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n\n onStart() {}\n onStop() {}\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetCopy } from \"../../widgets/copy\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Copy implements IElement {\n private static readonly _className = \"narrative-element-copy\";\n\n public static className(): string {\n return Copy._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetCopy.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetDateCountdown } from \"../../widgets/date_countdown\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class DateCountdown implements IElement {\n private static readonly _className = \"narrative-element-date-countdown\";\n\n public static className(): string {\n return DateCountdown._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _layersNodesRefs: Array<HTMLElement>,\n private readonly _widgetApi: typeof WidgetDateCountdown.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {\n this._widgetApi.onPause(this._elementNodeRef);\n }\n onResume() {\n this._widgetApi.onResume(this._elementNodeRef);\n }\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetPoll } from \"../../widgets/poll\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Poll implements IElement {\n private static readonly _className = \"narrative-element-poll\";\n\n public static className(): string {\n return Poll._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetPoll.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Poll {\n return element instanceof Poll;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n setUserData(id: string, text: string): void {\n this._widgetApi.setUserData(id, text);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetPollLayers } from \"../../widgets/poll_layers\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class PollLayers implements IElement {\n private static readonly _className = \"narrative-element-poll-layers\";\n\n public static className(): string {\n return PollLayers._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _layersNodesRefs: Array<HTMLElement>,\n private readonly _widgetApi: typeof WidgetPollLayers.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is PollLayers {\n return element instanceof PollLayers;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetProducts } from \"../../widgets/products\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Products implements IElement {\n private static readonly _className = \"narrative-element-products\";\n\n public static className(): string {\n return Products._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetProducts.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Products {\n return element instanceof Products;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n handleBackpress(): void {\n this._widgetApi.onHandleBackpress(this._elementNodeRef);\n }\n\n get elementNodeRef(): HTMLElement {\n return this._elementNodeRef;\n }\n\n get isClickCapturedByWidget(): boolean {\n return this._widgetApi.isClickCapturedByWidget(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return this._widgetApi.isForcePaused(this._elementNodeRef);\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetQuest } from \"../../widgets/quest\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Quest implements IElement {\n private static readonly _className = \"narrative-element-quest\";\n\n public static className(): string {\n return Quest._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetQuest.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Quest {\n return element instanceof Quest;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n }\n\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n handleRouteClick(options: { direction: \"backward\" | \"forward\"; slideIndex: number; slideCount: number }): { continueDefaultNavigation: boolean } {\n return this._widgetApi.handleRouteClick(this._elementNodeRef, options);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetQuiz } from \"../../widgets/quiz\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Quiz implements IElement {\n private static readonly _className = \"narrative-element-quiz\";\n\n public static className(): string {\n return Quiz._className;\n }\n\n // widgetApi in ctor\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetQuiz.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Quiz {\n return element instanceof Quiz;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get slideQuizIsDone(): boolean {\n return this._widgetApi.slideQuizIsDone(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetQuizGrouped } from \"../../widgets/quiz_grouped\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class QuizGrouped implements IElement {\n private static readonly _className = \"narrative-element-quiz-grouped\";\n\n public static className(): string {\n return QuizGrouped._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetQuizGrouped.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is QuizGrouped {\n return element instanceof QuizGrouped;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get slideQuizGroupedIsDone(): boolean {\n return this._widgetApi.slideQuizIsDone(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetRangeSlider } from \"../../widgets/range_slider\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class RangeSlider implements IElement {\n private static readonly _className = \"narrative-element-range-slider\";\n\n public static className(): string {\n return RangeSlider._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetRangeSlider.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is RangeSlider {\n return element instanceof RangeSlider;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n get isClickCapturedBySlider(): boolean {\n return this._widgetApi.isClickCapturedBySlider(this._elementNodeRef);\n }\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetRate } from \"../../widgets/rate\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Rate implements IElement {\n private static readonly _className = \"narrative-element-rate\";\n\n public static className(): string {\n return Rate._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetRate.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Rate {\n return element instanceof Rate;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n setUserData(id: string, text: string): void {\n this._widgetApi.setUserData(id, text);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetShare } from \"../../widgets/share\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Share implements IElement {\n private static readonly _className = \"narrative-element-share\";\n private static readonly _widgetApiName = \"_narrative_share\";\n\n public static className(): string {\n return Share._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _layersNodesRefs: Array<HTMLElement>,\n private readonly _widgetApi: typeof WidgetShare.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Share {\n return element instanceof Share;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n complete(id: string, isSuccess: boolean): void {\n this._widgetApi.complete(id, isSuccess);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class SwipeUpItems implements IElement {\n private static readonly _className = \"narrative-element-swipe-up-items\";\n\n public static className(): string {\n return SwipeUpItems._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {}\n\n public static isTypeOf(element: IElement): element is SwipeUpItems {\n return element instanceof SwipeUpItems;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {}\n onStop() {}\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get elementNodeRef(): HTMLElement {\n return this._elementNodeRef;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetTest } from \"../../widgets/test\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Test implements IElement {\n private static readonly _className = \"narrative-element-test\";\n\n public static className(): string {\n return Test._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetTest.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n public static isTypeOf(element: IElement): element is Test {\n return element instanceof Test;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get slideTestIsDone(): boolean {\n return this._widgetApi.slideTestIsDone(this._elementNodeRef);\n }\n\n get slideTestWithTimer(): boolean {\n return this._widgetApi.slideTestWithTimer(this._elementNodeRef);\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { WidgetVote } from \"../../widgets/vote\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Vote implements IElement {\n private static readonly _className = \"narrative-element-vote\";\n\n public static className(): string {\n return Vote._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _widgetApi: typeof WidgetVote.api,\n private readonly _onWidgetComplete: OnWidgetComplete,\n private readonly sdkApi: SDKApi\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n try {\n this._widgetApi.init(this._elementNodeRef, localData, this._onWidgetComplete, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {\n this._widgetApi.onStart(this._elementNodeRef);\n }\n onStop() {\n this._widgetApi.onStop(this._elementNodeRef);\n }\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class Text implements IElement {\n private static readonly _className = \"narrative-element-text\";\n\n public static className(): string {\n return Text._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {}\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {}\n onStop() {}\n\n onBeforeUnmount() {}\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","export const waitForImageHtmlElementLoad = async (nodeRef: HTMLImageElement): Promise<HTMLImageElement> => {\n return new Promise((resolve, reject) => {\n const onLoad = function () {\n // this is already in HTML markup\n // nodeRef.decoding = \"sync\";\n if (nodeRef.decode != null) {\n nodeRef.decode().then(\n () => resolve(nodeRef),\n reason => reject(reason)\n );\n } else {\n requestAnimationFrame(() =>\n requestAnimationFrame(() => {\n resolve(nodeRef);\n })\n );\n }\n nodeRef.removeEventListener(\"load\", onLoad);\n };\n\n nodeRef.addEventListener(\"load\", onLoad);\n nodeRef.addEventListener(\"error\", err => reject(err));\n\n if (nodeRef.complete && 0 !== nodeRef.naturalHeight) {\n if (nodeRef.decode != null) {\n nodeRef.decode().then(\n () => resolve(nodeRef),\n reason => reject(reason)\n );\n } else {\n requestAnimationFrame(() => requestAnimationFrame(() => resolve(nodeRef)));\n }\n }\n });\n};\n\n// export const waitForImageHtmlElementLoad = async (nodeRef: HTMLImageElement): Promise<HTMLImageElement> => {\n// return new Promise((resolve, reject) => {\n// const onLoad = function () {\n// requestAnimationFrame(() =>\n// requestAnimationFrame(() => {\n// resolve(nodeRef);\n// nodeRef.removeEventListener(\"load\", onLoad);\n// })\n// );\n// };\n// nodeRef.addEventListener(\"load\", onLoad);\n// if (nodeRef.complete && 0 !== nodeRef.naturalHeight) {\n// requestAnimationFrame(() => {\n// requestAnimationFrame(() => {\n// resolve(nodeRef);\n// });\n// });\n// }\n// nodeRef.addEventListener(\"error\", err => reject(err));\n// });\n// };\n\nexport const waitForVideoHtmlElementLoad = async (nodeRef: HTMLVideoElement): Promise<HTMLVideoElement> => {\n return new Promise((resolve, reject) => {\n if (void 0 !== nodeRef.oncanplaythrough) {\n const onCanplaythrough = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // @ts-ignore\n // _log(\"video loaded 1\", true)\n resolve(nodeRef);\n nodeRef.removeEventListener(\"canplaythrough\", onCanplaythrough);\n });\n });\n };\n nodeRef.addEventListener(\"canplaythrough\", onCanplaythrough);\n nodeRef.load();\n } else {\n var onCanPlay = function () {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n // @ts-ignore\n // _log(\"video loaded 2\", true)\n resolve(nodeRef);\n nodeRef.removeEventListener(\"canplay\", onCanPlay);\n });\n });\n };\n nodeRef.addEventListener(\"canplay\", onCanPlay);\n nodeRef.load();\n }\n });\n};\n\nexport function htmlEncode(s: string): string {\n return s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/'/g, \"'\").replace(/\"/g, \""\");\n}\n\nexport function addClass(target: HTMLElement, className: string): void {\n if (classList(target).indexOf(className) === -1) {\n target.className += \" \" + className;\n }\n}\n\nexport function removeClass(target: HTMLElement, className: string): void {\n var list = classList(target);\n var index = list.indexOf(className);\n if (index !== -1) {\n delete list[index];\n target.className = list.join(\" \");\n }\n}\n\nfunction classList(target: HTMLElement): Array<string> {\n if (target.classList !== undefined) {\n return Array.prototype.slice.call(target.classList);\n }\n return target.className.split(\" \");\n}\n\nexport function hasClass(target: HTMLElement, className: string): boolean {\n return classList(target).indexOf(className) !== -1;\n}\n\nexport function winWidth(): number {\n return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n}\n\nexport function winHeight(): number {\n return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n}\n\nexport function isNumber(n: any): boolean {\n return typeof n === \"number\" && !isNaN(n);\n}\n\nexport function isObject(value: any): boolean {\n let type = typeof value;\n return value != null && (type === \"object\" || type === \"function\");\n}\n\nexport function isString(value: any): boolean {\n let type = typeof value;\n return value != null && type === \"string\";\n}\n\nexport function isFunction(functionToCheck: any): string {\n let getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === \"[object Function]\";\n}\n","import { LocalData } from \"@layout\";\nimport { Layer } from \"../Layer\";\nimport { Utils } from \"../utils\";\nimport { IElement } from \"../IElement\";\nimport { ClickableBase } from \"./ClickableBase\";\n\nexport class Image extends ClickableBase implements IElement {\n private static readonly _className = \"narrative-element-image\";\n\n public static className(): string {\n return Image._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {\n super(_elementNodeRef);\n const mediaElements = Array.from(this._elementNodeRef.querySelectorAll(\"img\"));\n this.mediaElementsLoadingPromises = mediaElements.map(Utils.waitForImageHtmlElementLoad);\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n onPause() {}\n\n onResume() {}\n\n onStart() {}\n\n onStop() {}\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { LocalData } from \"@layout\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\n\nexport class SwipeUp implements IElement {\n private static readonly _className = \"narrative-element-swipe-up\";\n\n public static className(): string {\n return SwipeUp._className;\n }\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer\n ) {}\n\n public static isTypeOf(element: IElement): element is SwipeUp {\n return element instanceof SwipeUp;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n onPause() {}\n onResume() {}\n onStart() {}\n onStop() {}\n\n onBeforeUnmount() {}\n\n handleClick(): boolean {\n return false;\n }\n\n get elementNodeRef(): HTMLElement {\n return this._elementNodeRef;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n}\n","import { type Player as VideoPlayer } from \"@inappstory/video-player\";\nimport { LocalData } from \"@layout\";\nimport { SDKApi } from \"@skd_api\";\nimport { IElement } from \"../IElement\";\nimport { Layer, ON_SLIDE_STOP_PREPARE_FOR_RESTART } from \"../Layer\";\nimport { Utils } from \"../utils\";\n\nexport class Video implements IElement {\n private static readonly _className = \"narrative-element-video\";\n\n public static className(): string {\n return Video._className;\n }\n\n private readonly _video: HTMLVideoElement;\n private readonly _isVOD: boolean = false;\n private readonly _vodData: Record<string, any>;\n private _vodPlayerInstance: VideoPlayer | null = null;\n private _videoStateAdapter: VideoStateAdapter | null = null;\n\n constructor(\n private readonly _elementNodeRef: HTMLElement,\n private readonly _layer: Layer,\n private readonly _VideoPlayer: typeof VideoPlayer | undefined,\n private readonly _sdkApi: SDKApi\n ) {\n const _video = this._elementNodeRef.querySelector(\"video\");\n if (!_video) {\n return;\n }\n this._video = _video;\n\n // _video.addEventListener(\"canplay\", () => console.log(\"canplay\", true));\n // _video.addEventListener(\"complete\", () => console.log(\"complete\", true));\n // _video.addEventListener(\"emptied\", () => console.log(\"emptied\", true));\n // _video.addEventListener(\"ended\", () => console.log(\"ended\", true));\n // _video.addEventListener(\"pause\", () => console.log(\"pause\", true));\n // _video.addEventListener(\"play\", () => console.log(\"play\", true));\n // _video.addEventListener(\"playing\", () => console.log(\"playing\", true));\n // _video.addEventListener(\"progress\", () => console.log(\"progress\", true));\n // _video.addEventListener(\"seeked\", () => console.log(\"seeked\", true));\n // _video.addEventListener(\"seeking\", () => console.log(\"seeking\", true));\n // _video.addEventListener(\"stalled\", () => console.log(\"stalled\", true));\n // _video.addEventListener(\"suspend\", () => console.log(\"suspend\", true));\n // _video.addEventListener(\"waiting\", () => console.log(\"waiting\", true));\n\n // _video.addEventListener(\"timeupdate\", (e) => console.log(`timeupdate: ${e.timeStamp}`, true));\n // _video.addEventListener(\"timeupdate\", (e) =>_log(`timeupdate: ${e.timeStamp}`, true));\n\n const mediaImageElements = Array.from(this._elementNodeRef.querySelectorAll(\"img\"));\n this.mediaElementsLoadingPromises = mediaImageElements.map(Utils.waitForImageHtmlElementLoad);\n\n this._elementNodeRef.classList.add(\"init\");\n if (this._video.getAttribute(\"data-default-muted\") == null) {\n this._video.setAttribute(\"data-default-muted\", this._video.muted ? \"1\" : \"0\");\n }\n\n const vodData_ = this._video.getAttribute(\"data-vod\");\n if (vodData_ != null) {\n try {\n this._vodData = this._convertMpdUrls(JSON.parse(vodData_));\n } catch (e) {\n console.error(e);\n }\n }\n\n this._isVOD = Boolean(this._vodData != null && this._VideoPlayer != null);\n\n if (this._isVOD) {\n // this.mediaElementsLoadingPromises.push(this._initVOD(this._vodData));\n } else {\n if (this._vodData != null && Array.isArray(this._vodData.formats)) {\n this._vodData.formats.forEach(format => {\n const videoSource = window.document.createElement(\"source\");\n videoSource.type = format.mimeType;\n videoSource.src = format.url;\n videoSource.dataset.remoteSrc = format.url;\n this._video.appendChild(videoSource);\n });\n }\n this.mediaElementsLoadingPromises.push(Utils.waitForVideoHtmlElementLoad(this._video));\n }\n\n // console.log({mediaElementsLoadingPromises: this.mediaElementsLoadingPromises})\n }\n\n public static isTypeOf(element: IElement): element is Video {\n return element instanceof Video;\n }\n\n mediaElementsLoadingPromises: Array<Promise<HTMLImageElement | HTMLVideoElement>> = [];\n\n init(localData: LocalData): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n private _isScreenOnPause = false;\n\n onPause() {\n this._isScreenOnPause = true;\n }\n\n onResume() {\n this._isScreenOnPause = false;\n }\n\n onStart() {}\n\n onStop() {}\n\n onBeforeUnmount() {\n // clean up memory and cpu processes\n // @ts-ignore\n // _log(\"onBeforeUnmount\", true)\n this._destroyVODPlayer();\n }\n\n private _initVOD(vodData: Record<string, any>): Promise<HTMLVideoElement> {\n const onWaiting = () => {\n /**\n * When screen on pause - ignore onWaiting\n * (triggered when video paused, not only when canplay = false)\n */\n if (this._isScreenOnPause) {\n return;\n }\n\n // console.log(\"onWaiting\")\n // @ts-ignore\n // _log(\"waiting\", true);\n this._video.setAttribute(\"data-waiting\", \"1\");\n // @ts-ignore\n // _log(`waiting: ${this._video.currentTime}`, true);\n this._layer.timeline.onSlideDataWaiting(this._video.currentTime * 1000);\n // window.synthErrorId = setTimeout(synthError, 15000);\n };\n // this._video.addEventListener(\"waiting\", onWaiting);\n\n const onPlaying = () => {\n // console.log(\"onPlaying\");\n // _log(\"playing\", true);\n // TODO via class instead of data attr\n if (this._video.getAttribute(\"data-waiting\") === \"1\") {\n this._video.setAttribute(\"data-waiting\", \"0\");\n this._layer.timeline.slideResumed(this._video.currentTime * 1000);\n // @ts-ignore\n // _log(`playing: ${this._video.currentTime}`, true);\n // clearTimeout(window.synthErrorId);\n }\n };\n // this._video.addEventListener(\"playing\", onPlaying);\n this._videoStateAdapter = new VideoStateAdapter(this._video, onWaiting, onPlaying);\n\n // @ts-ignore\n // this._video.addEventListener(\"timeupdate\", (e) =>_log(`timeupdate: ${e.timeStamp}`, true));\n // this._video.addEventListener(\"timeupdate\", (e) =>console.log(`timeupdate: ${e.timeStamp}: ${this._video.currentTime}`));\n\n return new Promise((resolve, reject) => {\n // console.log(`initVoD slide idx: ${this._layer.slideIndex}`);\n\n // console.log(\"_initVOD 1\");\n\n // @ts-ignore\n if (this._VideoPlayer != null && this._VideoPlayer.isBrowserSupported() && (\"MediaSource\" in window || \"ManagedMediaSource\" in window)) {\n const player = new this._VideoPlayer();\n\n // console.log(\"_initVOD 2\");\n\n // @ts-ignore\n const onErrorEvent = event => {\n // Extract the PlayerError object from the event.\n onError(event.detail);\n };\n\n // @ts-ignore\n player.addEventListener(\"error\", onErrorEvent);\n\n // @ts-ignore\n const onError = error => {\n // Log the error.\n console.error(\"Error code\", error.code, \"object\", error);\n\n // _log(`video error: ${video.currentTime} code: ${error.code}`, true);\n\n if (this._video.paused) {\n this._layer.stopInternal({ prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART.NOT_PREPARE });\n this._layer.onBeforeUnmount();\n this._layer.timeline.onSlideError(this._video.currentTime * 1000);\n }\n };\n\n // console.log(\"_initVOD 3\");\n player.attach(this._video).then(() => {\n // console.log(\"_initVOD 4\");\n try {\n player\n // @ts-ignore\n .load(this._VideoPlayer.convertJsonToUri(vodData), 0, \"application/json\")\n .then(() => {\n // console.log(\"_initVOD 5\");\n this._vodPlayerInstance = player;\n\n // This runs if the asynchronous load is successful.\n // @ts-ignore\n // _log(\"vod loaded 1\", true);\n resolve(this._video);\n })\n .catch(reason => {\n // console.log(\"_initVOD 6\", reason);\n\n // onError is executed if the asynchronous load fails.\n reject(reason);\n onError(reason);\n });\n } catch (e) {\n // onError is executed if the asynchronous load fails.\n reject(e);\n onError(e);\n }\n });\n } else {\n // use default (not mpd) video stream\n // console.error(\"Browser not supported!\");\n // get std video stream\n let src = \"\";\n if (vodData && vodData.formats != null && Array.isArray(vodData.formats) && vodData.formats.length > 0) {\n src = vodData.formats[0].url;\n this._video.src = src;\n // @ts-ignore\n // _log(\"vod loaded 2\", true)\n resolve(this._video);\n } else {\n reject(\"Empty formats list\");\n }\n }\n });\n }\n\n private _convertMpdUrls(mpd_: Record<string, any>): Record<string, any> {\n if (this._sdkApi.isWeb) {\n return mpd_;\n }\n if (Utils.isObject(mpd_) && mpd_.adaptiveFormats != null && Array.isArray(mpd_.adaptiveFormats)) {\n const mpd = { ...mpd_ };\n for (let i = 0; i < mpd.adaptiveFormats.length; ++i) {\n mpd.adaptiveFormats[i].url = `${this._sdkApi.isAndroid ? `http://vod-asset/` : `vod-asset://`}${mpd.adaptiveFormats[i].cacheName}`;\n }\n return mpd;\n }\n return mpd_;\n }\n\n private async _destroyVODPlayer(): Promise<void> {\n //@ts-ignore\n // _log(\"call _destroyVODPlayer\", true)\n if (this._vodPlayerInstance != null) {\n try {\n if (this._videoStateAdapter) {\n this._videoStateAdapter.destroy();\n this._videoStateAdapter = null;\n }\n await this._vodPlayerInstance.detach();\n await this._vodPlayerInstance.destroy();\n // clean up - so we can reinit on slide start, id need it\n this._vodPlayerInstance = null;\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n handleClick(): boolean {\n return false;\n }\n\n get isLayerForcePaused(): boolean {\n return false;\n }\n\n private _videoStartedPromise: Promise<{ currentTime: number }> | null = null;\n public get videoStartedPromise() {\n return this._videoStartedPromise;\n }\n\n public start(muted = true, loop = true): Promise<{ currentTime: number }> {\n this._videoStartedPromise = new Promise(async resolve => {\n // invariant - always wait for mediaElementsLoadingPromises\n // else call of _initVOD can start and onAllMediaLoaded failed\n // TODO - add for all Elements state invariant protection\n Promise.all(this.mediaElementsLoadingPromises).finally(async () => {\n if (this._video) {\n if (this._isVOD && this._vodPlayerInstance === null) {\n // console.log(\"_initVOD 5.1\");\n await this._initVOD(this._vodData);\n }\n\n // console.log(\"Video:start => this._video.pause()\");\n this._video.pause();\n this._video.currentTime = 0;\n this._video.loop = loop;\n\n // remove init class\n // if vod - create VoD player\n\n if (this._video.getAttribute(\"data-default-muted\") !== \"1\") {\n this._video.muted = muted;\n }\n\n const playPromise = this._video.play();\n if (playPromise != null) {\n playPromise\n .then(() => {\n this._video.currentTime = 0;\n this._elementNodeRef.classList.remove(\"init\");\n resolve({\n currentTime: this._video.currentTime,\n });\n })\n .catch(error => {\n console.error(error);\n resolve({\n currentTime: this._video.currentTime,\n });\n });\n } else {\n setTimeout(() => {\n this._video.currentTime = 0;\n this._elementNodeRef.classList.remove(\"init\");\n resolve({\n currentTime: this._video.currentTime,\n });\n }, 0);\n }\n } else {\n resolve({\n currentTime: 0,\n });\n }\n });\n });\n\n return this._videoStartedPromise;\n }\n\n public pause(resetVideoTime = false): number | null {\n if (this._video) {\n // console.trace(\"Video pause\");\n this._video.pause();\n if (resetVideoTime) {\n this._video.currentTime = 0;\n }\n return this._video.currentTime;\n }\n return null;\n }\n\n public async resume(): Promise<{ currentTime: number }> {\n this._videoStartedPromise = new Promise((resolve, reject) => {\n // _log(\"video before resume: \" + video.currentTime);\n const ts = this._video.currentTime;\n if (!this._video.paused) {\n // console.log(\"Video:resume => this._video.pause()\");\n this._video.pause();\n }\n const playPromise = this._video.play();\n // console.log({ playPromise });\n if (playPromise != null) {\n playPromise\n .then(() => {\n // console.log(\"resolve 1\");\n if (this._video.currentTime < ts) {\n // console.log(\"resolve 1.1\", { ts });\n this._video.currentTime = ts;\n }\n\n resolve({ currentTime: this._video.currentTime });\n })\n .catch(error => {\n console.error(error);\n // console.log(\"error 1\");\n if (this._video.currentTime < ts) {\n this._video.currentTime = ts;\n }\n resolve({ currentTime: this._video.currentTime });\n });\n } else {\n setTimeout(() => {\n // console.log(\"resolve 2\");\n if (this._video.currentTime < ts) {\n this._video.currentTime = ts;\n }\n resolve({ currentTime: this._video.currentTime });\n }, 0);\n }\n });\n return this._videoStartedPromise;\n }\n\n public async stop({ prepareForRestart }: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n if (this._video) {\n // @ts-ignore\n // _log(`Video:stop => this._video.pause(), currentTime: ${this._video.currentTime}`, true);\n this._video.pause();\n }\n\n if (prepareForRestart !== ON_SLIDE_STOP_PREPARE_FOR_RESTART.UNKNOWN) {\n /**\n * In case prepareForReinit = false (stop event before unmounting - navigation to prev|next slide)\n * VOD will be destroyed in onBeforeUnmount\n *\n * In case prepareForReinit = true (stop event after navigation to prev|next story)\n * We need to go to frame 0 and show poster, and destroy VOD (clean up memory and cpu processes)\n */\n if (prepareForRestart === ON_SLIDE_STOP_PREPARE_FOR_RESTART.PREPARE) {\n this._elementNodeRef.classList.add(\"init\");\n if (this._video && !this._vodPlayerInstance) {\n // only for not VOD video\n this._video.currentTime = 0;\n }\n this._destroyVODPlayer();\n }\n } else {\n /**\n * Old sdk behavior: on any stop event - destroy VOD and show poster (prepare for restart after returning to this story)\n * with 100 ms timeout (try to prevent frame blinking on slide switching)\n */\n setTimeout(() => {\n this._elementNodeRef.classList.add(\"init\");\n if (this._video && !this._vodPlayerInstance) {\n // only for not VOD video\n this._video.currentTime = 0;\n }\n this._destroyVODPlayer();\n }, 100);\n }\n }\n\n public enableAudio() {\n if (this._video.getAttribute(\"data-default-muted\") !== \"1\") {\n this._video.muted = false;\n }\n }\n\n public disableAudio() {\n if (this._video.getAttribute(\"data-default-muted\") !== \"1\") {\n this._video.muted = true;\n }\n }\n}\n\n/**\n * iOS Safari\n * sends playing event after waiting event when Video is in waiting state\n */\nconst enum VIDEO_STATE {\n UNKNOWN,\n PLAYING,\n WAITING,\n}\n\n// class VideoStateAdapter {\n//\n// // все же следить по timeupdate\n//\n// constructor(private readonly _video: HTMLVideoElement, private readonly _onWaitingCb: () => void, private readonly _onPlayingCb: () => void) {\n// this._video.addEventListener(\"playing\", () => this._onPlaying());\n// this._video.addEventListener(\"waiting\", () => this._onWaiting());\n// }\n//\n// private _state = VIDEO_STATE.WAITING;\n//\n// private _onWaiting() {\n// if (this._playingCheckerId != null) {\n// window.clearTimeout(this._playingCheckerId);\n// }\n// this._state = VIDEO_STATE.WAITING;\n// this._triggerUpdate();\n// }\n//\n// // in ms\n// private _latestPlayingStamp: number = 0;\n// private _latestPlayingDateStamp: number = new Date().getTime();\n// private _playingCheckerId: number = null!;\n//\n// private _onPlaying() {\n// this._state = VIDEO_STATE.PLAYING;\n// if (this._playingCheckerId != null) {\n// window.clearTimeout(this._playingCheckerId);\n// }\n// this._latestPlayingStamp = this._video.currentTime * 1000;\n// this._latestPlayingDateStamp = new Date().getTime();\n// this._triggerUpdate();\n//\n// // если через 100ms не время не изменится - встаем на паузу\n// // если до исполнения таймера были другие события - то отменять таймер\n// this._playingCheckerId = window.setTimeout(() => {\n// const currentTime = this._video.currentTime * 1000;\n// const diff = currentTime - this._latestPlayingStamp;\n//\n// const timeSpent = new Date().getTime() - this._latestPlayingDateStamp;\n//\n// // @ts-ignore\n// _log(`check, currentTime: ${currentTime}, latestPlayingStamp: ${this._latestPlayingStamp}, diff: ${diff}, timeSpent: ${timeSpent}`, true);\n// if (diff <= (timeSpent / 2)) {\n// this._state = VIDEO_STATE.WAITING;\n// this._triggerUpdate();\n// }\n// }, 100);\n// }\n//\n// private _triggerUpdate() {\n// if (this._state === VIDEO_STATE.PLAYING) {\n// this._onPlayingCb();\n// } else if (this._state === VIDEO_STATE.WAITING) {\n// this._onWaitingCb();\n// }\n// }\n// }\n\nclass VideoStateAdapter {\n // все же следить по timeupdate\n\n constructor(\n private readonly _video: HTMLVideoElement,\n private readonly _onWaitingCb: () => void,\n private readonly _onPlayingCb: () => void\n ) {\n // this._video.addEventListener(\"playing\", () => this._onPlaying());\n // this._video.addEventListener(\"waiting\", () => this._onWaiting());\n this._video.addEventListener(\"timeupdate\", this._onTimeupdateHandler);\n }\n\n destroy() {\n this._video.removeEventListener(\"timeupdate\", this._onTimeupdateHandler);\n }\n\n private _onTimeupdateHandler = this._onTimeupdate.bind(this);\n\n private _timeupdate = Date.now();\n private _state = VIDEO_STATE.UNKNOWN;\n // The event frequency is dependent on the system load, but will be thrown between about 4Hz and 66Hz (assuming the event handlers don't take longer than 250ms to run).\n private readonly _maxDiff = 300;\n private _waitingCheckerId: number = null!;\n private _playingCheckerId: number = null!;\n\n private _onTimeupdate() {\n this._timeupdate = Date.now();\n\n if (this._playingCheckerId != null) {\n window.clearTimeout(this._playingCheckerId);\n }\n\n if (this._state !== VIDEO_STATE.PLAYING) {\n this._state = VIDEO_STATE.PLAYING;\n this._triggerUpdate();\n }\n\n // todo - add debounce\n this._playingCheckerId = window.setTimeout(() => {\n if (Date.now() - this._timeupdate >= this._maxDiff / 2) {\n this._state = VIDEO_STATE.WAITING;\n this._triggerUpdate();\n }\n }, this._maxDiff);\n\n // if (this._state !== VIDEO_STATE.PLAYING) {\n // this._onPlaying();\n // }\n }\n\n private _onWaiting() {\n if (this._playingCheckerId != null) {\n window.clearTimeout(this._playingCheckerId);\n }\n\n // @ts-ignore\n // _log(`_onWaiting, _timeupdate: ${this._timeupdate}`, true);\n this._state = VIDEO_STATE.WAITING;\n this._triggerUpdate();\n }\n\n private _onPlaying() {\n if (this._playingCheckerId != null) {\n window.clearTimeout(this._playingCheckerId);\n }\n\n // @ts-ignore\n // _log(`_onPlaying, _timeupdate: ${this._timeupdate}`, true);\n this._playingCheckerId = window.setTimeout(() => {\n // @ts-ignore\n // _log(`_onPlaying cb, _timeupdate: ${this._timeupdate}, now: ${Date.now()}, diff: ${Date.now() - this._timeupdate}`, true);\n if (Date.now() - this._timeupdate <= this._maxDiff / 2) {\n // @ts-ignore\n // _log(`_onPlaying if`, true);\n this._state = VIDEO_STATE.PLAYING;\n this._triggerUpdate();\n }\n }, this._maxDiff);\n\n // this._state = VIDEO_STATE.PLAYING;\n // if (this._playingCheckerId != null) {\n // window.clearTimeout(this._playingCheckerId);\n // }\n // this._latestPlayingStamp = this._video.currentTime * 1000;\n // this._latestPlayingDateStamp = new Date().getTime();\n // this._triggerUpdate();\n //\n // // если через 100ms не время не изменится - встаем на паузу\n // // если до исполнения таймера были другие события - то отменять таймер\n // this._playingCheckerId = window.setTimeout(() => {\n // const currentTime = this._video.currentTime * 1000;\n // const diff = currentTime - this._latestPlayingStamp;\n //\n // const timeSpent = new Date().getTime() - this._latestPlayingDateStamp;\n //\n // // @ts-ignore\n // _log(`check, currentTime: ${currentTime}, latestPlayingStamp: ${this._latestPlayingStamp}, diff: ${diff}, timeSpent: ${timeSpent}`, true);\n // if (diff <= (timeSpent / 2)) {\n // this._state = VIDEO_STATE.WAITING;\n // this._triggerUpdate();\n // }\n // }, 100);\n }\n\n private _triggerUpdate() {\n if (this._state === VIDEO_STATE.PLAYING) {\n this._onPlayingCb();\n } else if (this._state === VIDEO_STATE.WAITING) {\n this._onWaitingCb();\n }\n }\n}\n","import { SDKApi } from \"@skd_api\";\nimport { OnWidgetComplete } from \"../../widgets/base\";\nimport { IElement } from \"../IElement\";\nimport { Layer } from \"../Layer\";\nimport { Barcode } from \"./Barcode\";\nimport { Button } from \"./Button\";\nimport { Copy } from \"./Copy\";\nimport { DataInput } from \"./DataInput\";\nimport { DateCountdown } from \"./DateCountdown\";\nimport { Poll } from \"./Poll\";\nimport { PollLayers } from \"./PollLayers\";\nimport { Products } from \"./Products\";\nimport { Quest } from \"./Quest\";\nimport { Quiz } from \"./Quiz\";\nimport { QuizGrouped } from \"./QuizGrouped\";\nimport { RangeSlider } from \"./RangeSlider\";\nimport { Rate } from \"./Rate\";\nimport { Share } from \"./Share\";\nimport { SwipeUpItems } from \"./SwipeUpItems\";\nimport { Test } from \"./Test\";\nimport { Vote } from \"./Vote\";\nimport { Text } from \"./Text\";\nimport { Image } from \"./Image\";\nimport { SwipeUp } from \"./SwipeUp\";\nimport { Video } from \"./Video\";\n\n// export const tryCreateAtLayer = (layerNodeRef: HTMLElement): IElement {\n// const\n// }\n\n// args nodeRef, elementClassName\n\nexport const tryCreateFromHtmlElement = (nodeRef: HTMLElement, layer: Layer, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): IElement | null => {\n const layoutApi = layer.layoutService.layoutApi;\n const layersNodesRefs = layer.slide.layersNodesRefs;\n\n for (let elementClassName of nodeRef.classList.values()) {\n // console.log({ elementClassName });\n switch (elementClassName) {\n //////// base elements ///////\n case Text.className():\n return new Text(nodeRef, layer);\n case Button.className():\n return new Button(nodeRef, layer);\n case Image.className():\n return new Image(nodeRef, layer);\n case SwipeUp.className():\n return new SwipeUp(nodeRef, layer);\n case SwipeUpItems.className():\n return new SwipeUpItems(nodeRef, layer);\n case Video.className():\n return new Video(nodeRef, layer, layoutApi.VideoPlayer, layer.sdkApi);\n //////// widgets ///////\n case Copy.className():\n return layoutApi.widgetCopyApi ? new Copy(nodeRef, layer, layoutApi.widgetCopyApi, onWidgetComplete, sdkApi) : null;\n case Barcode.className():\n return layoutApi.widgetBarcodeApi ? new Barcode(nodeRef, layer, layoutApi.widgetBarcodeApi, onWidgetComplete, sdkApi) : null;\n case DataInput.className():\n return layoutApi.widgetDataInputApi ? new DataInput(nodeRef, layer, layoutApi.widgetDataInputApi, onWidgetComplete, sdkApi) : null;\n case DateCountdown.className():\n return layoutApi.widgetDateCountdownApi\n ? new DateCountdown(nodeRef, layer, layersNodesRefs, layoutApi.widgetDateCountdownApi, onWidgetComplete, sdkApi)\n : null;\n case Poll.className():\n return layoutApi.widgetPollApi ? new Poll(nodeRef, layer, layoutApi.widgetPollApi, onWidgetComplete, sdkApi) : null;\n case PollLayers.className():\n return layoutApi.widgetPollLayersApi\n ? new PollLayers(nodeRef, layer, layersNodesRefs, layoutApi.widgetPollLayersApi, onWidgetComplete, sdkApi)\n : null;\n case Quest.className():\n return layoutApi.widgetQuestApi ? new Quest(nodeRef, layer, layoutApi.widgetQuestApi, onWidgetComplete, sdkApi) : null;\n case Quiz.className():\n return layoutApi.widgetQuizApi ? new Quiz(nodeRef, layer, layoutApi.widgetQuizApi, onWidgetComplete, sdkApi) : null;\n case QuizGrouped.className():\n return layoutApi.widgetQuizGroupedApi ? new QuizGrouped(nodeRef, layer, layoutApi.widgetQuizGroupedApi, onWidgetComplete, sdkApi) : null;\n case RangeSlider.className():\n return layoutApi.widgetRangeSliderApi ? new RangeSlider(nodeRef, layer, layoutApi.widgetRangeSliderApi, onWidgetComplete, sdkApi) : null;\n case Rate.className():\n return layoutApi.widgetRateApi ? new Rate(nodeRef, layer, layoutApi.widgetRateApi, onWidgetComplete, sdkApi) : null;\n case Share.className():\n return layoutApi.widgetShareApi ? new Share(nodeRef, layer, layersNodesRefs, layoutApi.widgetShareApi, onWidgetComplete, sdkApi) : null;\n case Test.className():\n return layoutApi.widgetTestApi ? new Test(nodeRef, layer, layoutApi.widgetTestApi, onWidgetComplete, sdkApi) : null;\n case Vote.className():\n return layoutApi.widgetVoteApi ? new Vote(nodeRef, layer, layoutApi.widgetVoteApi, onWidgetComplete, sdkApi) : null;\n case Products.className():\n return layoutApi.widgetProductsApi ? new Products(nodeRef, layer, layoutApi.widgetProductsApi, onWidgetComplete, sdkApi) : null;\n default:\n break;\n }\n }\n return null;\n};\n\nexport * as WidgetFactory from \"./factory\";\n","import { container } from \"@composition\";\nimport { DEFAULT_SLIDE_DURATION, SDKApi } from \"@skd_api\";\nimport { LayoutService } from \"../layout_service/layout_service\";\nimport { TIMELINE_ACTION } from \"./slide_timeline.h\";\nimport \"../../../global\";\n\nenum TimelineDisabledState {\n disabled,\n enabled,\n}\n\n// use Promise\n// await Promise()\n// call timeLine api\n// promise - slideReadyPromise\n\nexport class SlideTimeline {\n constructor(\n private readonly slideIndex: number,\n private readonly slideDuration: number,\n private readonly slideDisabledTimer: boolean,\n private readonly slideReady: Promise<void>,\n private readonly _afterResumeQueuePush: (cb: () => void) => void,\n private readonly sdkApi: SDKApi\n ) {\n this.timelineDisabledState = this.slideDisabledTimer ? TimelineDisabledState.disabled : TimelineDisabledState.enabled;\n }\n\n private resumedAt = new Date().getTime();\n private timeSpent = 0;\n private timelineDisabledState: TimelineDisabledState;\n private currentState: TIMELINE_ACTION = TIMELINE_ACTION.STOP;\n\n public static get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n private get layoutService(): LayoutService {\n return SlideTimeline.layoutService;\n }\n\n public get isSDKSupportUpdateTimeline(): boolean {\n if (this.sdkApi.isAndroid) {\n return Boolean(SlideTimeline.layoutService.env.Android && \"updateTimeline\" in SlideTimeline.layoutService.env.Android);\n } else if (this.sdkApi.isIOS) {\n const mh = SlideTimeline.layoutService.env?.webkit?.messageHandlers ?? {};\n return \"updateTimeline\" in mh;\n } else if (this.sdkApi.isWeb) {\n return true;\n } else {\n return false;\n }\n }\n\n public get isSdkSupportTimelineOnBeforeStart(): boolean {\n return this.sdkApi.isSdkSupportTimelineOnBeforeStart();\n }\n\n public get index() {\n return this.slideIndex;\n }\n\n public get isTimelineDisabled(): boolean {\n return this.timelineDisabledState === TimelineDisabledState.disabled;\n }\n\n private async updateTimeline(action: TIMELINE_ACTION, showLoader = false, showError = false): Promise<void> {\n // два кейса\n // когда есть слои и у слоя вызываем showLayer который вызывает startTimer до старта слайда, потом start от sdk\n // в итоге два события вместо одного (баг)\n\n // второй кейс - когда заполнили виджет и он вызвал startDisabledTimer\n // в этом случае проверка стейта action === this.currentState не выполнит startTimer (баг)\n\n // можно сделать action_start_timer_disabeld и timer_enabled чтобы это было два разных состояния\n\n // if (action === this.currentState) {\n // return;\n // }\n\n this.currentState = action;\n\n let currentTime = this.timeSpent;\n let duration = this.slideDuration;\n\n // tmp\n // todo брать из модели\n if (!duration) {\n duration = DEFAULT_SLIDE_DURATION;\n }\n\n if (this.timelineDisabledState === TimelineDisabledState.disabled) {\n currentTime = 0;\n duration = 0;\n }\n\n if (currentTime > duration) {\n currentTime = duration;\n }\n\n //@ts-ignore\n // window._log(`updateTimeline 1, a: ${action} ct: ${currentTime} d: ${duration} tds: ${this.timelineDisabledState}`, true);\n\n await this.slideReady.then();\n\n //@ts-ignore\n // window._log(`updateTimeline, a: ${action} ct: ${currentTime} d: ${duration} tds: ${this.timelineDisabledState}`, true);\n // console.trace(`updateTimeline ${action} slideIndex: ${this.slideIndex} currentTime:${currentTime} duration:${duration} tds: ${this.timelineDisabledState}`);\n this.sdkApi.updateTimeline(this.slideIndex, action, currentTime, duration, showLoader, showError);\n }\n\n /**\n * trigger timeline update for new slide in sdk, before slide strat event (prevent timeout in timeline while we wait for video start)\n */\n public triggerSlideLoadState(): void {\n if (this.isSDKSupportUpdateTimeline && this.isSdkSupportTimelineOnBeforeStart) {\n let duration = this.slideDuration;\n\n // tmp\n // todo брать из модели\n if (!duration) {\n duration = DEFAULT_SLIDE_DURATION;\n }\n\n if (this.timelineDisabledState === TimelineDisabledState.disabled) {\n duration = 0;\n }\n\n this.sdkApi.updateTimeline(this.slideIndex, TIMELINE_ACTION.BEFORE_START, 0, duration, false, false);\n }\n }\n\n /**\n * Start timeline after slide started\n * Nothing do if old sdk\n */\n public slideStarted(): void {\n // console.trace(\"slideStarted\");\n if (this.isSDKSupportUpdateTimeline) {\n this.resumedAt = new Date().getTime();\n this.timeSpent = 0; // for case when instance exists, but we return to slide again\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n // nothing to do\n }\n }\n\n public slideRestarted(): void {\n // console.trace(\"slideRestarted\");\n if (this.isSDKSupportUpdateTimeline) {\n this.resumedAt = new Date().getTime();\n this.timeSpent = 0;\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n // nothing to do\n }\n }\n\n /**\n *\n */\n public slidePaused(videoCurrentTime: number | null) {\n // console.trace(\"slidePaused\");\n\n if (this.isSDKSupportUpdateTimeline) {\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n } else {\n const globalCurrentTime = new Date().getTime();\n let spent = globalCurrentTime - this.resumedAt;\n this.timeSpent += spent;\n }\n\n this.updateTimeline(TIMELINE_ACTION.PAUSE);\n } else {\n this.sdkApi.cardPausedCallback(videoCurrentTime);\n }\n }\n\n public slideResumed(videoCurrentTime: number | null) {\n // console.trace(\"slideResumed\");\n // @ts-ignore\n // window._log(`updateTimeline slideResumed ${videoCurrentTime}`, true);\n\n if (this.isSDKSupportUpdateTimeline) {\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n }\n this.resumedAt = new Date().getTime();\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n this.sdkApi.cardResumedCallback(videoCurrentTime);\n }\n }\n\n public slideStopped() {\n // console.trace(\"slideStopped\");\n if (this.isSDKSupportUpdateTimeline) {\n this.updateTimeline(TIMELINE_ACTION.STOP);\n } else {\n }\n }\n\n /**\n * Update timer state (duration from 0 to actual value) and start timeline\n * used by widgets\n */\n public startDisabledTimeline(fallback: () => void) {\n // if app is paused (in background) - don't call start timeline (Android issues)\n // @ts-ignore\n // window._log(`Push startDisabledTimeline to queue at state: ${window.slideApi.state}, time: ${new Date().getTime()}`, true);\n this._afterResumeQueuePush(() => {\n // @ts-ignore\n // window._log(`Call startDisabledTimeline at state: ${window.slideApi.state}, time: ${new Date().getTime()}`, true);\n if (this.isSDKSupportUpdateTimeline) {\n this.timelineDisabledState = TimelineDisabledState.enabled;\n this.timeSpent = 0;\n this.updateTimeline(TIMELINE_ACTION.START);\n } else {\n // OLD SDK\n fallback();\n }\n });\n }\n\n public onSlideDataWaiting(videoCurrentTime: number | null) {\n // console.trace(\"onSlideDataWaiting\");\n // @ts-ignore\n // window._log(`updateTimeline onSlideDataWaiting ${videoCurrentTime}`, true);\n\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n } else {\n const globalCurrentTime = new Date().getTime();\n let spent = globalCurrentTime - this.resumedAt;\n this.timeSpent += spent;\n }\n this.updateTimeline(TIMELINE_ACTION.PAUSE, true, false);\n }\n\n public onSlideError(videoCurrentTime: number | null) {\n // console.trace(\"onSlideError\");\n if (videoCurrentTime != null) {\n this.timeSpent = Math.round(videoCurrentTime);\n } else {\n const globalCurrentTime = new Date().getTime();\n let spent = globalCurrentTime - this.resumedAt;\n this.timeSpent += spent;\n }\n this.updateTimeline(TIMELINE_ACTION.STOP, false, true);\n }\n}\n","import { IAnimation } from \"@animation\";\nimport { container } from \"@composition\";\nimport { DEFAULT_SLIDE_DURATION, SDKApi } from \"@skd_api\";\nimport { CARD_TYPE } from \"../common_types.h\";\nimport { OnWidgetComplete } from \"../widgets/base\";\nimport { DataInput } from \"./elements/DataInput\";\nimport { WidgetFactory } from \"./elements/factory\";\nimport { Poll } from \"./elements/Poll\";\nimport { PollLayers } from \"./elements/PollLayers\";\nimport { Products } from \"./elements/Products\";\nimport { Quest } from \"./elements/Quest\";\nimport { Quiz } from \"./elements/Quiz\";\nimport { QuizGrouped } from \"./elements/QuizGrouped\";\nimport { RangeSlider } from \"./elements/RangeSlider\";\nimport { Rate } from \"./elements/Rate\";\nimport { Share } from \"./elements/Share\";\nimport { SwipeUp } from \"./elements/SwipeUp\";\nimport { SwipeUpItems } from \"./elements/SwipeUpItems\";\nimport { Test } from \"./elements/Test\";\nimport { Video } from \"./elements/Video\";\nimport { IElement } from \"./IElement\";\nimport { LocalData } from \"./layout.h\";\nimport { LayoutService } from \"./layout_service/layout_service\";\nimport { Slide } from \"./Slide\";\nimport { SlideTimeline } from \"./slide_timeline\";\nimport { Utils } from \"./utils\";\n\nexport const enum ON_SLIDE_STOP_PREPARE_FOR_RESTART {\n UNKNOWN,\n PREPARE,\n NOT_PREPARE,\n}\n\nexport class Layer {\n private readonly _slideIndex: number;\n private readonly _cardId: number;\n private readonly _cardType: CARD_TYPE;\n private readonly _slideCount: number;\n private readonly _duration: number;\n private readonly _disabledTimer: boolean;\n private readonly _disabledNavigation: boolean;\n private _elements: Array<IElement> = [];\n private readonly _timeline: SlideTimeline;\n\n constructor(\n private readonly _nodeRef: HTMLElement,\n private readonly _slide: Slide,\n private readonly _slideReadyPromise: Promise<void>,\n private readonly _afterResumeQueuePush: (cb: () => void) => void,\n private readonly _afterStartInitQueuePush: (cb: () => void) => void,\n private readonly _showNextSlide: (duration: number) => void,\n public readonly sdkApi: SDKApi\n ) {\n this._slideIndex = parseInt(this._nodeRef.getAttribute(\"data-index\") ?? \"0\");\n this._cardId = parseInt(this._nodeRef.getAttribute(\"data-id\") ?? \"0\");\n this._cardType = parseInt(this._nodeRef.getAttribute(\"data-card-type\") ?? \"1\") || CARD_TYPE.STORY;\n this._slideCount = parseInt(this._nodeRef.getAttribute(\"data-slide-count\") ?? \"0\");\n this._duration = parseInt(this._nodeRef.getAttribute(\"data-duration\") ?? \"\") || DEFAULT_SLIDE_DURATION;\n this._disabledTimer = this._nodeRef.getAttribute(\"data-disable-timer\") === \"1\";\n this._disabledNavigation = this._nodeRef.getAttribute(\"data-disable-navigation\") === \"1\";\n this._timeline = new SlideTimeline(\n this._slideIndex,\n this._duration,\n this._disabledTimer,\n this._slideReadyPromise,\n this._afterResumeQueuePush,\n this.sdkApi\n );\n\n const onWidgetComplete: OnWidgetComplete = (cardId, slideIndex) => {\n // todo if nothing more widgets with disabled timers - we can start layer timeline\n\n const fallback = () => this._showNextSlide(DEFAULT_SLIDE_DURATION);\n\n // для android sdk важно чтобы этот метод вызывался только после slide_start\n this._afterStartInitQueuePush(() => {\n this._timeline.startDisabledTimeline(fallback);\n });\n };\n\n const _elementsNodes = this._nodeRef.querySelectorAll<HTMLElement>(\".narrative-slide-elements .narrative-element\");\n let layerWithWidgetQuest = false;\n _elementsNodes.forEach(item => {\n let element: IElement | null = WidgetFactory.tryCreateFromHtmlElement(item, this, onWidgetComplete, this.sdkApi);\n if (element) {\n this._elements.push(element);\n if (element instanceof Quest) {\n layerWithWidgetQuest = true;\n }\n }\n });\n\n // console.log({ _elementsNodes }, this._elements);\n\n /**\n * Special behaviour for widget Quest\n * if current slide/layer without WidgetQuest element explicit but story has type Quest\n * - then init WidgetQuest with layer instead of WidgetQuest element (required for WidgetQuest slides navigation)\n */\n if (this.isQuest && !layerWithWidgetQuest && this.layoutService.layoutApi.widgetQuestApi != null) {\n this._elements.push(new Quest(this._nodeRef, this, this.layoutService.layoutApi.widgetQuestApi, onWidgetComplete, this.sdkApi));\n }\n }\n\n public init(localData: LocalData): Array<Promise<boolean>> {\n if (this.sdkApi.isIOS || this.sdkApi.isAndroid) {\n this._nodeRef.classList.add(\"_app\");\n this.sdkApi.isIOS && this._nodeRef.classList.add(\"_isIos\");\n this.sdkApi.isAndroid && this._nodeRef.classList.add(\"_isAndroid\");\n }\n\n const promises = this._elements.map(element => element.init(localData));\n\n this._initTextElementAutoWidthCorrection();\n this._initTextFit();\n\n return promises;\n }\n\n get nodeRef(): HTMLElement {\n return this._nodeRef;\n }\n\n get elements(): Array<IElement> {\n return this._elements;\n }\n\n get slide(): Slide {\n return this._slide;\n }\n\n get timeline(): SlideTimeline {\n return this._timeline;\n }\n\n public get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n public getLocalData(): Promise<LocalData> {\n return this.sdkApi.getCardLocalData();\n }\n\n public get isQuest(): boolean {\n return this._nodeRef.getAttribute(\"data-quest-count\") != null;\n }\n\n private _initTextFit(): void {\n const textLines = Array.prototype.slice.call(this._nodeRef.querySelectorAll(\".narrative-element-text-wrapper>.narrative-element-text-lines\"));\n TextFit(textLines, {});\n }\n\n private _initTextElementAutoWidthCorrection(): void {\n const textLines = this._nodeRef.querySelectorAll<HTMLElement>(\".narrative-element-text-wrapper>.narrative-element-text-lines\");\n for (const item of textLines) {\n if (item.parentElement) {\n new TextElementAutoWidthCorrection(item.parentElement);\n }\n }\n }\n\n public get slideIndex(): number {\n return this._slideIndex;\n }\n\n public get cardId(): number {\n return this._cardId;\n }\n\n public get cardType(): CARD_TYPE {\n return this._cardType;\n }\n\n public get slideCount(): number {\n return this._slideCount;\n }\n\n public get disabledNavigation(): boolean {\n return this._disabledNavigation;\n }\n\n public get videoElement(): Video | null {\n for (const element of this._elements) {\n if (Video.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get rangeSliderElement(): RangeSlider | null {\n for (const element of this._elements) {\n if (RangeSlider.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get quizElement(): Quiz | null {\n for (const element of this._elements) {\n if (Quiz.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get quizGroupedElement(): QuizGrouped | null {\n for (const element of this._elements) {\n if (QuizGrouped.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get questElement(): Quest | null {\n for (const element of this._elements) {\n if (Quest.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get testElement(): Test | null {\n for (const element of this._elements) {\n if (Test.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get dataInputElement(): DataInput | null {\n for (const element of this._elements) {\n if (DataInput.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get pollElement(): Poll | null {\n for (const element of this._elements) {\n if (Poll.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get pollLayersElement(): PollLayers | null {\n for (const element of this._elements) {\n if (PollLayers.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get rateElement(): Rate | null {\n for (const element of this._elements) {\n if (Rate.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get shareElement(): Share | null {\n for (const element of this._elements) {\n if (Share.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get swipeUpElement(): SwipeUp | null {\n for (const element of this._elements) {\n if (SwipeUp.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get swipeUpItemsElement(): SwipeUpItems | null {\n for (const element of this._elements) {\n if (SwipeUpItems.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public get productsElement(): Products | null {\n for (const element of this._elements) {\n if (Products.isTypeOf(element)) {\n return element;\n }\n }\n return null;\n }\n\n public isClickCapturedBySlider(): boolean {\n return (this.rangeSliderElement?.isClickCapturedBySlider ?? false) || (this.productsElement?.isClickCapturedByWidget ?? false);\n }\n\n private _animationPauseCb: ReturnType<IAnimation[\"start\"]>;\n private _animationResumeCb: () => void;\n\n public async start(muted = true): Promise<{ currentTime: number }> {\n const videoElement = this.videoElement;\n let currentTime = 0;\n if (videoElement != null) {\n let videoLoop = false;\n if (this.timeline.isTimelineDisabled) {\n videoLoop = true;\n }\n currentTime = (await videoElement.start(muted, videoLoop)).currentTime;\n }\n\n if (this.sdkApi.cardAnimation) {\n this._animationPauseCb = this.sdkApi.cardAnimation.start(this._nodeRef);\n }\n\n for (const element of this._elements) {\n element.onStart();\n }\n\n for (const element of this._elements) {\n element.onResume();\n }\n\n // skip start timeline if we returned to slide with enabled timer and opened WidgetProducts modal\n if (!this.isLayerForcePaused) {\n this.timeline.slideStarted();\n }\n\n return { currentTime };\n }\n\n public async stop(options: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n this.videoElement?.stop(options);\n this.sdkApi.cardAnimation?.stop(this._nodeRef);\n for (const element of this._elements) {\n element.onPause();\n }\n for (const element of this._elements) {\n element.onStop();\n }\n this._timeline.slideStopped();\n }\n\n public stopInternal(options: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n this.videoElement?.stop(options);\n this.sdkApi.cardAnimation?.stop(this._nodeRef);\n for (const element of this._elements) {\n element.onPause();\n }\n for (const element of this._elements) {\n element.onStop();\n }\n }\n\n public async pause(resetVideoTime = false, stopAnimation = false): Promise<{ currentTime: number | null }> {\n return new Promise(resolve => {\n const cb = () => {\n let currentTime: number | null = this.videoElement?.pause(resetVideoTime) ?? null;\n\n if (stopAnimation) {\n this.sdkApi.cardAnimation?.stop(this._nodeRef);\n } else {\n if (this._animationPauseCb != null && Utils.isFunction(this._animationPauseCb)) {\n this._animationResumeCb = this._animationPauseCb(false);\n }\n }\n\n if (currentTime != null) {\n currentTime *= 1000;\n }\n\n for (const element of this._elements) {\n element.onPause();\n }\n\n this.timeline.slidePaused(currentTime);\n\n resolve({ currentTime });\n };\n\n const videoStartedPromise = this.videoElement?.videoStartedPromise;\n if (videoStartedPromise != null && videoStartedPromise.then != null) {\n videoStartedPromise.then(cb);\n } else {\n cb();\n }\n });\n }\n\n public async resume() {\n return new Promise(resolve => {\n const cb = ({ currentTime }: { currentTime: number | null }) => {\n // console.log(\"resumed cb with currentTime\", { currentTime });\n\n if (currentTime != null) {\n currentTime *= 1000;\n }\n\n if (Utils.isFunction(this._animationResumeCb)) {\n this._animationResumeCb();\n }\n\n for (const element of this._elements) {\n element.onResume();\n }\n\n this.timeline.slideResumed(currentTime);\n\n resolve({ currentTime });\n };\n\n const videoStartedPromise = this.videoElement?.resume();\n if (videoStartedPromise != null && videoStartedPromise.then != null) {\n videoStartedPromise.then(cb);\n } else {\n cb({ currentTime: null });\n }\n });\n }\n\n public enableAudio() {\n this.videoElement?.enableAudio();\n }\n\n public disableAudio() {\n this.videoElement?.disableAudio();\n }\n\n public onBeforeUnmount(): void {\n for (const element of this._elements) {\n element.onBeforeUnmount();\n }\n }\n\n public get isLayerForcePaused(): boolean {\n return this.elements.some(element => element.isLayerForcePaused);\n }\n}\n\nconst TextFit = (function () {\n \"use strict\";\n\n const defaultSettings = {\n step: 1,\n maxSteps: 100,\n };\n\n const hasOwnProperty = Object.prototype.hasOwnProperty;\n\n return function textFit(els: Array<HTMLElement>, options: Record<string, any>) {\n if (!options) options = {};\n\n // Extend options.\n let settings = {};\n for (let key in defaultSettings) {\n if (hasOwnProperty.call(options, key)) {\n // @ts-ignore\n settings[key] = options[key];\n } else {\n // @ts-ignore\n settings[key] = defaultSettings[key];\n }\n }\n\n // Support passing a single el\n let elType = Object.prototype.toString.call(els);\n if (elType !== \"[object Array]\" && elType !== \"[object NodeList]\" && elType !== \"[object HTMLCollection]\") {\n // @ts-ignore\n els = [els];\n }\n\n // Process each el we've passed.\n for (let i = 0; i < els.length; i++) {\n processItem(els[i], settings);\n }\n };\n\n function processItem(el: HTMLElement, settings: Record<string, any>) {\n if (!isElement(el) || el.getAttribute(\"textFitted\")) {\n return false;\n }\n\n let parentHeight, parent;\n let low, high;\n\n parent = el.parentElement;\n if (!isElement(parent)) {\n return false;\n }\n\n // Get element data.\n parentHeight = innerHeight(parent);\n\n // Don't process if we can't find box dimensions\n if (parentHeight <= 0) {\n console.warn(`Set a static height and width on the target element ${el.outerHTML} before using textFit!`, el);\n return;\n }\n\n // Set textFitted attribute so we know this was processed.\n el.setAttribute(\"textFitted\", \"1\");\n\n let step = settings.step;\n\n high = parseFloat(window.getComputedStyle(el).fontSize);\n low = high - step * settings.maxSteps;\n let size = high;\n if (size < low) return;\n while (size >= low) {\n let elBoundingClientRect = el.getBoundingClientRect();\n if (elBoundingClientRect.height > parentHeight) {\n size -= step;\n el.style.fontSize = size + \"px\";\n } else {\n break;\n }\n }\n }\n\n // Calculate height without padding.\n // @ts-ignore\n function innerHeight(el) {\n let style = window.getComputedStyle(el, null);\n return el.getBoundingClientRect().height - parseInt(style.getPropertyValue(\"padding-top\"), 10) - parseInt(style.getPropertyValue(\"padding-bottom\"), 10);\n }\n\n //Returns true if it is a DOM element\n // @ts-ignore\n function isElement(o) {\n return typeof HTMLElement === \"object\"\n ? o instanceof HTMLElement //DOM2\n : o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\";\n }\n})();\n\nclass TextElementAutoWidthCorrection {\n // wrapper (flex row)\n // lead | text | tail //\n // wrapper (flex row)\n\n // text - can be multiline, use overflow-wrap: anywhere - for overflow prevent\n // iOS 17.5 break text on second line despite on enough space\n // fix it - detect and set min-width + max-width for text element\n\n private readonly leadWidth: number = null!;\n private readonly tailWidth: number = null!;\n private columnGap: number = null!;\n private wrapperInnerWidth: number = null!;\n\n //Returns true if it is a DOM element\n // @ts-ignore\n private isElement(o: HTMLElement | Element): boolean {\n return typeof HTMLElement === \"object\"\n ? o instanceof HTMLElement //DOM2\n : o && typeof o === \"object\" && o !== null && o.nodeType === 1 && typeof o.nodeName === \"string\";\n }\n\n private computeWrapperSize(): void {\n const { columnGap, width, paddingLeft, paddingRight } = window.getComputedStyle(this.textWrapperRef, null);\n this.columnGap = parseFloat(columnGap);\n this.wrapperInnerWidth = parseFloat(width) - parseFloat(paddingLeft) - parseFloat(paddingRight);\n }\n\n private measureTextWidth(\n text: string,\n {\n fontSize,\n fontWeight,\n fontStyle,\n fontFamily,\n }: {\n fontSize: string;\n fontWeight: string;\n fontStyle: string;\n fontFamily: string;\n }\n ): number {\n let textRef = document.createElement(\"div\");\n\n textRef.style.setProperty(\"font-size\", fontSize);\n textRef.style.setProperty(\"font-weight\", fontWeight);\n textRef.style.setProperty(\"font-style\", fontStyle);\n textRef.style.setProperty(\"font-family\", fontFamily);\n textRef.style.setProperty(\"position\", \"absolute\");\n textRef.style.setProperty(\"left\", \"-1000px\");\n textRef.style.setProperty(\"top\", \"-1000px\");\n textRef.style.setProperty(\"white-space\", \"nowrap\");\n // textRef.style.setProperty(\"visibility\", \"hidden\");\n\n textRef.textContent = text;\n\n document.body.appendChild(textRef);\n\n const textWidth = parseFloat(window.getComputedStyle(textRef, null).width);\n\n document.body.removeChild(textRef);\n // @ts-ignore\n textRef = null;\n\n return textWidth;\n }\n\n constructor(private readonly textWrapperRef: HTMLElement) {\n const leadRef = textWrapperRef.querySelector<HTMLElement>(\".narrative-element-text-lines-lead\");\n const tailRef = textWrapperRef.querySelector<HTMLElement>(\".narrative-element-text-lines-tail\");\n const textRef = textWrapperRef.querySelector<HTMLElement>(\".narrative-element-text-lines\");\n\n if (leadRef && tailRef && textRef) {\n if (!this.isElement(textRef) || textRef.getAttribute(\"textWidthCorrected\")) {\n return;\n }\n\n // Set textFitted attribute so we know this was processed.\n textRef.setAttribute(\"textWidthCorrected\", \"1\");\n\n this.computeWrapperSize();\n this.leadWidth = leadRef.clientWidth;\n this.tailWidth = tailRef.clientWidth;\n\n const textMaxWidth =\n this.wrapperInnerWidth -\n this.leadWidth -\n this.columnGap * (this.leadWidth ? 1 : 0) -\n this.tailWidth -\n this.columnGap * (this.tailWidth ? 1 : 0);\n\n const { fontSize, fontFamily, fontWeight, fontStyle } = window.getComputedStyle(textRef, null);\n\n const textMinWidth = Math.min(\n this.measureTextWidth(textRef.textContent ?? \"\", {\n fontSize,\n fontFamily,\n fontWeight,\n fontStyle,\n }),\n textMaxWidth\n );\n\n // setTimeout(() => {\n // console.log({\n // textMaxWidth,\n // textMinWidth,\n // columnGap: this.columnGap,\n // leadWidth: this.leadWidth,\n // tailWidth: this.tailWidth,\n // wrapperInnerWidth: this.wrapperInnerWidth,\n // });\n // }, 10 * 1000);\n\n textRef.style.setProperty(\"min-width\", `${textMinWidth}px`);\n textRef.style.setProperty(\"max-width\", `${textMaxWidth}px`);\n }\n }\n}\n","import { container } from \"@composition\";\nimport { SDKApi } from \"@skd_api\";\nimport { CARD_TYPE } from \"../common_types.h\";\nimport { Layer, ON_SLIDE_STOP_PREPARE_FOR_RESTART } from \"./Layer\";\nimport { LocalData } from \"./layout.h\";\nimport { LayoutService } from \"./layout_service/layout_service\";\n\nexport class Slide {\n private readonly _layers: Array<Layer>;\n private _start: number;\n\n constructor(\n private readonly _slidesNodesRefs: Array<HTMLElement>,\n private readonly _slideReadyPromise: Promise<void>,\n private readonly _afterResumeQueuePush: (cb: () => void) => void,\n private readonly _afterStartInitQueuePush: (cb: () => void) => void,\n private readonly _showNextSlide: (duration: number) => void,\n public readonly sdkApi: SDKApi\n ) {\n this._start = window.performance.now();\n\n if (!this._slidesNodesRefs.length) {\n throw new Error(\"No slides found.\");\n }\n\n this._layers = this._slidesNodesRefs.map(\n item => new Layer(item, this, this._slideReadyPromise, this._afterResumeQueuePush, this._afterStartInitQueuePush, this._showNextSlide, this.sdkApi)\n );\n this._activeLayer = this._layers[0];\n }\n\n private _activeLayer: Layer;\n get activeLayer(): Layer {\n return this._activeLayer;\n }\n\n get layers(): Array<Layer> {\n return this._layers;\n }\n\n get layersNodesRefs(): Array<HTMLElement> {\n return this._slidesNodesRefs;\n // call from Slide CTOR -> exception, bcz this._layers is empty\n // return this._layers.map(layer => layer.nodeRef);\n }\n\n private _initMultiSlide(localData: LocalData): void {\n const multiSlideApi = this.layoutService.layoutApi.widgetMultiSlideApi;\n if (multiSlideApi != null && this.layers.length > 1) {\n try {\n multiSlideApi.init(this.layersNodesRefs, localData, this.sdkApi);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n public async init(localData: LocalData): Promise<boolean> {\n this._initMultiSlide(localData);\n\n const promises = this.layers.flatMap(layer => layer.init(localData));\n\n const res = await Promise.all(promises);\n\n // rescan current slide\n this.refreshActiveLayer();\n\n // if not all true - return false\n // if not all Widgets return finishRender: true - return false\n return !res.some(item => item === false);\n }\n\n public refreshActiveLayer(): void {\n this.layers.forEach(layer => {\n if (!layer.nodeRef.classList.contains(\"hidden\")) {\n this._activeLayer = layer;\n }\n });\n }\n\n public showLayer(showIndex: number, muted?: boolean): void {\n // todo allow to call only if Layer in state LAYER_STATE::STARTED\n\n // hotfix (VOD and showLayer issue) - just skip showLayer for already visible layer\n // if (this.layers[showIndex] != null && this.layers[showIndex].nodeRef != null && !this.layers[showIndex].nodeRef.classList.contains(\"hidden\")) {\n // console.log(\"hotfix (VOD and showLayer issue) - just skip showLayer for already visible layer\");\n // return;\n // }\n\n // console.log(`showLayer: ${showIndex}`);\n\n // first - stop (for correct timeline calls)\n this.layers.forEach((layer, index) => {\n // const isHidden = layer.nodeRef.classList.contains(\"hidden\");\n if (index !== showIndex) {\n layer.nodeRef.classList.add(\"hidden\");\n layer.stop({ prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART.PREPARE });\n }\n });\n\n this.layers.forEach((layer, index) => {\n // const isHidden = layer.nodeRef.classList.contains(\"hidden\");\n if (index === showIndex) {\n this._activeLayer = layer;\n layer.nodeRef.classList.remove(\"hidden\");\n layer.start(muted);\n }\n });\n }\n\n public onBeforeUnmount(): void {\n for (const layer of this._layers) {\n layer.onBeforeUnmount();\n }\n }\n\n public get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n public get slideIndex(): number {\n return this._activeLayer.slideIndex;\n }\n public get cardId(): number {\n return this._activeLayer.cardId;\n }\n\n public get cardType(): CARD_TYPE {\n return this._activeLayer.cardType;\n }\n\n public get slideCount(): number {\n return this._activeLayer.slideCount;\n }\n\n public get disabledNavigation(): boolean {\n return this._activeLayer.disabledNavigation;\n }\n}\n","import { container } from \"@composition\";\nimport { FontDTO, SDKApi } from \"@skd_api\";\nimport { proxy } from \"@utils\";\nimport { CARD_TYPE } from \"../common_types.h\";\nimport { Layer, ON_SLIDE_STOP_PREPARE_FOR_RESTART } from \"./Layer\";\nimport { LocalData } from \"./layout.h\";\nimport { LayoutService } from \"./layout_service/layout_service\";\nimport { Slide } from \"./Slide\";\nimport { Utils } from \"./utils\";\n\nconst enum STATE {\n INIT,\n INITED,\n START,\n STARTED,\n RESUME,\n RESUMED,\n PAUSE,\n PAUSED,\n FORCE_PAUSED,\n STOP,\n STOPPED,\n}\n\nexport class SlideApi {\n public get layoutDirection(): \"ltr\" | \"rtl\" {\n // warning, detection in ctor not working, bcz sdk changes layout later\n return this.layoutService.env.getComputedStyle(this._slideWrapper).direction === \"rtl\" ? \"rtl\" : \"ltr\";\n }\n\n private static renderedBoxClassName = \"narrative-slide-box-rendered\";\n private static prerenderBoxClassName = \"narrative-slide-box-prerender\";\n\n private readonly _slideWrapper: HTMLElement;\n private readonly _viewport: Window;\n private readonly _getViewportWidth: () => number;\n private readonly _getViewportHeight: () => number;\n private readonly _overlappingActionBarHeight: number;\n\n public readonly sdkApi: SDKApi;\n\n constructor(\n private readonly config: {\n sdkApi: SDKApi;\n slideWrapper: HTMLElement;\n viewport: Window;\n userResizeHandler?: (data: { viewportWidth: number; viewportHeight: number; fontSize: number }) => void;\n slideRatio: number;\n isFullscreen: boolean;\n slideLoadedCb?: (data: { slide: Slide; result: boolean; reason?: string }) => void;\n getViewportWidth: () => number;\n getViewportHeight: () => number;\n overlappingActionBarHeight?: number;\n }\n ) {\n this.sdkApi = config.sdkApi;\n this._slideWrapper = config.slideWrapper;\n this._viewport = config.viewport;\n this._getViewportWidth = config.getViewportWidth;\n this._getViewportHeight = config.getViewportHeight;\n this._overlappingActionBarHeight = config.overlappingActionBarHeight ?? 0;\n\n this.refreshSizes = proxy(this.refreshSizes, this);\n\n this.initListeners();\n\n this.refreshSizes();\n\n const slideBox = document.getElementById(\"narrative-slide-box\");\n // todo via first child and its innerText - faster variant\n if (slideBox && slideBox.innerText.trim() !== \"{%content}\".replace(\"{\", \"{{\").replace(\"}\", \"}}\")) {\n this._slideInInit = null;\n this._slideInRender = true;\n this._init(\n () => this._slideBoxRenderComplete(null),\n () => this._slideBoxRenderError(null)\n ).then(({ slide, result, reason }) => {\n this._slide = slide;\n if (config.slideLoadedCb != null) {\n config.slideLoadedCb({ slide, result, reason });\n }\n });\n }\n }\n\n public destroy() {\n if (this.slide != null) {\n this.slide.onBeforeUnmount();\n }\n this.destroyListeners();\n }\n\n private initListeners(): void {\n this._viewport.addEventListener(\"resize\", this.refreshSizes);\n }\n\n private destroyListeners(): void {\n this._viewport.removeEventListener(\"resize\", this.refreshSizes);\n }\n\n private refreshSizes() {\n const viewportWidth = this._getViewportWidth();\n const viewportHeight = this._getViewportHeight();\n const viewportRatio = viewportWidth / viewportHeight;\n let slideWidth = 0;\n let slideHeight = 0;\n // _ratio = 310 / 480,\n const _ratio = this.config.slideRatio;\n let _isFullscreen = this.config.isFullscreen;\n const slideOffset = this._slideWrapper.querySelector<HTMLElement>(\".narrative-slide-offset\");\n let offset = 0;\n let xOffset = \"0px\";\n // for elements with bottom anchor (absolute position)\n let yOffset = \"0px\";\n\n // alert(viewportHeight);\n\n if (viewportRatio > _ratio) {\n // disable _isFullscreen if viewport small\n _isFullscreen = false;\n }\n\n if (_isFullscreen) {\n // fit by width, top and bottom - to offscreen or fill with bg image\n slideWidth = viewportWidth;\n slideHeight = Math.ceil(viewportWidth / _ratio);\n offset = Math.ceil(slideHeight - viewportHeight) / 2;\n\n if (slideOffset != null) {\n slideOffset.style.margin = -1 * offset + \"px\" + \" 0 \";\n }\n // offset from viewport bottom to StoryBottom plus safe area offset bottom\n yOffset = `calc(${offset + this._overlappingActionBarHeight}px + env(safe-area-inset-bottom))`;\n // detect safe area offset\n } else {\n // более квадратное чем надо\n if (viewportRatio > _ratio) {\n // fit by width, top and bottom - to offscreen\n slideWidth = viewportWidth;\n slideHeight = Math.ceil(viewportWidth / _ratio);\n offset = Math.ceil(slideHeight - viewportHeight) / 2;\n\n if (slideOffset != null) {\n slideOffset.style.margin = -offset + \"px\" + \" 0 \";\n }\n yOffset = offset + this._overlappingActionBarHeight + \"px\";\n } else {\n // вьюпорт более вытянутый чем надо\n // fit by height, sides - to offscreen\n slideHeight = viewportHeight;\n slideWidth = Math.ceil(slideHeight * _ratio);\n offset = Math.ceil(slideWidth - viewportWidth) / 2;\n if (slideOffset != null) {\n slideOffset.style.margin = \"0 \" + -offset + \"px\"; // -8.5\n }\n xOffset = offset + \"px\";\n }\n }\n\n const fontSize = slideWidth / 20;\n // todo CSP violation\n this._slideWrapper.style.fontSize = fontSize + \"px\";\n\n if (slideOffset != null) {\n // todo CSP violation\n slideOffset.style.setProperty(\"--y-offset\", yOffset);\n slideOffset.style.setProperty(\"--x-offset\", xOffset);\n }\n\n if (_isFullscreen) {\n slideOffset?.classList.add(\"narrative-slide-offset-fullscreen\");\n }\n\n if (this.config.userResizeHandler != null) {\n this.config.userResizeHandler({ viewportWidth, viewportHeight, fontSize });\n }\n }\n\n public async showSlide(html: string): Promise<{ slide: Slide; result: boolean; reason?: string }> {\n const slideBox = this._slideWrapper.querySelector(`.${SlideApi.renderedBoxClassName}`);\n const slideBoxPrerender = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName}`);\n const _result: {\n slide: Slide;\n result: boolean;\n reason?: string;\n } = { slide: this.slide, result: false, reason: \"\" };\n\n if (slideBox && slideBoxPrerender) {\n if (this._slideInRender) {\n this._slideInRender = false;\n this._slideBoxRenderComplete(null);\n }\n\n this._slideInInit = null;\n this._slideInRender = true;\n\n slideBoxPrerender.innerHTML = html;\n const prevSlide: Slide | null = this.slide ? Object.assign(Object.create(Object.getPrototypeOf(this.slide)), this.slide) : null;\n const { slide, result, reason } = await this._init(\n () => this._slideBoxRenderComplete(prevSlide),\n () => this._slideBoxRenderError(prevSlide)\n );\n this._slide = slide;\n _result.result = result;\n _result.reason = reason;\n }\n _result.slide = this.slide;\n return _result;\n }\n\n public handleBackpress(): void {\n this.activeLayer.productsElement?.handleBackpress();\n }\n\n private get layoutService(): LayoutService {\n return container.get<LayoutService>();\n }\n\n private getLocalData(): Promise<LocalData> {\n return this.sdkApi.getCardLocalData();\n }\n\n private _fontsInit = false;\n\n private _initAndLoadFonts(fonts: Array<FontDTO>): Promise<void> {\n if (this._fontsInit) {\n return Promise.resolve();\n }\n return new Promise(resolve => {\n if (\"fonts\" in document) {\n // https://developer.mozilla.org/en-US/docs/Web/API/CSS_Font_Loading_API\n const promises: Array<Promise<FontFace>> = [];\n try {\n if (fonts != null && Array.isArray(fonts)) {\n for (let i = 0; i < fonts.length; i++) {\n const src = fonts[i];\n if (src && src.family && src.style && src.weight && src.url) {\n // var font = new FontFace(fonts[i].family, \"url(\" + src.url + \"&s=css_font_face)\", {\n const font = new FontFace(fonts[i].family, \"url(\" + src.url + \")\", {\n style: src.style,\n weight: src.weight,\n // display: \"block\"\n });\n document.fonts.add && document.fonts.add(font);\n promises.push(font.load());\n }\n }\n }\n\n this._fontsInit = true;\n Promise.all(promises)\n .then(_ => {\n resolve();\n })\n .catch(reason => {\n console.error(reason);\n resolve();\n });\n } catch (e) {\n console.error(e);\n resolve();\n }\n }\n });\n }\n\n private _slide: Slide;\n private _slideInInit: Slide | null;\n private _state: STATE;\n private _afterStartInitQueue: Array<() => void> = [];\n private _afterResumeQueue: Array<() => void> = [];\n\n public get state(): STATE {\n return this._state;\n }\n\n private async _onAllMediaLoaded(slide: Slide): Promise<void> {\n return new Promise((resolve, reject) => {\n const promises = slide.layers.flatMap(layer => layer.elements.flatMap(element => element.mediaElementsLoadingPromises));\n\n // console.log({ promises });\n\n let checkerTimerId: number | undefined = undefined;\n let timeOutFired = false;\n if (promises.length > 0) {\n checkerTimerId = this.layoutService.env.setTimeout(() => {\n timeOutFired = true;\n reject(\"onAllMediaLoaded timeout\");\n }, 3000);\n } else {\n resolve();\n return;\n }\n Promise.all(promises).then(\n _ => {\n checkerTimerId && this.layoutService.env.clearTimeout(checkerTimerId);\n if (!timeOutFired) {\n resolve();\n }\n },\n reason => {\n checkerTimerId && this.layoutService.env.clearTimeout(checkerTimerId);\n if (!timeOutFired) {\n reject(reason);\n }\n }\n );\n });\n }\n\n private async _init(\n slideBoxCb: () => void,\n slideBoxFailedCb: () => void\n ): Promise<{\n slide: Slide;\n result: boolean;\n reason?: string;\n }> {\n this._state = STATE.INIT;\n\n const slideNodeRef = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName} .narrative-slide`);\n const slidesNodesRefs = Array.prototype.slice.call(\n this._slideWrapper.querySelectorAll(`.${SlideApi.prerenderBoxClassName} .narrative-slide.narrative-multi-slide`)\n );\n\n if (!slidesNodesRefs.length && slideNodeRef != null) {\n slidesNodesRefs.push(slideNodeRef);\n }\n\n if (!slidesNodesRefs.length) {\n throw new Error(\"No slides found.\");\n }\n\n let slideReadyResolve: () => void = null!;\n let slideReadyReject: () => void = null!;\n const slideReadyPromise = new Promise<void>((resolve, reject) => {\n slideReadyResolve = resolve;\n slideReadyReject = reject;\n });\n\n const slide = new Slide(\n slidesNodesRefs,\n slideReadyPromise,\n this.afterResumeQueuePush.bind(this),\n this.afterStartInitQueuePush.bind(this),\n this.sdkApi.showNextSlide.bind(this),\n this.sdkApi\n );\n this._slideInInit = slide;\n\n slide.activeLayer.timeline.triggerSlideLoadState();\n\n const onAllMediaLoaded = this._onAllMediaLoaded(slide);\n\n if (this.sdkApi.isAndroid) {\n this._afterStartInitQueue = [];\n }\n this._afterResumeQueue = [];\n\n const result: { slide: Slide; result: boolean; reason?: string } = { slide, result: false, reason: \"\" };\n\n await this._initAndLoadFonts(this.sdkApi.getCardFonts());\n const localData = await this.getLocalData();\n const finishRender = await slide.init(localData);\n /**\n * если есть виджеты, которых надо ждать - то не завершаем рендеринг текущего слайда\n * пример - квест, если зашли в сторис а виджету нужно показать другой слайд вместо первого\n */\n if (finishRender) {\n this._state = STATE.INITED;\n\n try {\n await onAllMediaLoaded;\n result.result = true;\n slideBoxCb();\n this.layoutService.env.setTimeout(() => {\n slideReadyResolve();\n });\n } catch (reason) {\n console.log(\"SlideInit, onAllMediaLoaded reject\", reason);\n slideBoxFailedCb();\n this.layoutService.env.setTimeout(() => {\n slideReadyReject();\n });\n result.result = false;\n result.reason = String(reason);\n }\n } else {\n this._state = STATE.STOPPED;\n this.layoutService.env.setTimeout(() => {\n slideReadyResolve();\n });\n result.result = true;\n }\n\n return result;\n }\n\n private _slideInRender = false;\n\n private _slideBoxRenderComplete(prevSlide: Slide | null): void {\n if (!this._slideInRender) {\n this._slideInRender = true;\n return;\n }\n const slideBox = this._slideWrapper.querySelector(`.${SlideApi.renderedBoxClassName}`);\n const slideBoxPrerender = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName}`);\n\n if (slideBox && slideBoxPrerender) {\n slideBoxPrerender.classList.remove(SlideApi.prerenderBoxClassName);\n slideBox.classList.remove(SlideApi.renderedBoxClassName);\n\n slideBox.classList.add(SlideApi.prerenderBoxClassName);\n // 2 RAF - wait for browser render complete (CSS changes, etc.)\n this.layoutService.env.requestAnimationFrame(() => {\n this.layoutService.env.requestAnimationFrame(() => {\n prevSlide?.onBeforeUnmount();\n // @ts-ignore\n // _log(\"clear innerHTML\", true);\n slideBox.innerHTML = \"\";\n });\n });\n slideBoxPrerender.classList.add(SlideApi.renderedBoxClassName);\n }\n this._slideInRender = false;\n }\n\n private _slideBoxRenderError(prevSlide: Slide | null): void {\n // if (!slideInRender) {\n // slideInRender = true;\n // return;\n // }\n const slideBox = this._slideWrapper.querySelector(`.${SlideApi.renderedBoxClassName}`);\n const slideBoxPrerender = this._slideWrapper.querySelector(`.${SlideApi.prerenderBoxClassName}`);\n\n if (slideBox && slideBoxPrerender) {\n const slides = Array.prototype.slice.call(slideBoxPrerender.querySelectorAll(\".narrative-slide\"));\n for (let i = 0; i < slides.length; ++i) {\n const slide = slides[i];\n if (slide) {\n slide.innerHTML = \"\";\n }\n }\n\n slideBoxPrerender.classList.remove(SlideApi.prerenderBoxClassName);\n slideBox.classList.remove(SlideApi.renderedBoxClassName);\n\n slideBox.classList.add(SlideApi.prerenderBoxClassName);\n prevSlide?.onBeforeUnmount();\n slideBox.innerHTML = \"\";\n slideBoxPrerender.classList.add(SlideApi.renderedBoxClassName);\n }\n // slideInRender = false;\n }\n\n private _slideConfig: { muted?: boolean } = {};\n\n public async slideStart(config: { muted?: boolean }): Promise<{ currentTime: number }> {\n // console.log(`slideStart slideIdx: ${this.activeLayer.slideIndex} state: ${this._state}`);\n if (!(this._state === STATE.STOPPED || this._state === STATE.INITED)) {\n return { currentTime: 0 };\n }\n this._state = STATE.START;\n\n this._slideConfig = config;\n\n // start deferred fncs from widgets\n // important - Android only\n if (this.sdkApi.isAndroid && this._afterStartInitQueue && Array.isArray(this._afterStartInitQueue)) {\n for (const job of this._afterStartInitQueue) {\n if (Utils.isFunction(job)) {\n job();\n }\n }\n this._afterStartInitQueue = [];\n }\n\n if (this._afterResumeQueue && Array.isArray(this._afterResumeQueue)) {\n for (const job of this._afterResumeQueue) {\n if (Utils.isFunction(job)) {\n job();\n }\n }\n this._afterResumeQueue = [];\n }\n\n const { currentTime } = await this.slide.activeLayer.start(this._slideConfig.muted);\n\n this._state = STATE.STARTED;\n\n if (this.slide.activeLayer.isLayerForcePaused) {\n this._state = STATE.PAUSED;\n }\n\n return { currentTime };\n }\n\n public async slideRestart(config: { muted?: boolean }): Promise<{ currentTime: number }> {\n this._state = STATE.STOPPED;\n return this.slideStart(config);\n }\n\n private _pauseCbTimer: number | null = null;\n\n public async slidePause() {\n if (!(this._state === STATE.STARTED || this._state === STATE.RESUMED)) {\n return;\n }\n\n // обход бага на андроиде (вызывает pause/resume при любом нажатии на экран, даже если это клик - для перехода по слайдам)\n // поэтому делаем отложенный вызов (300мс) а если следом приходит stop - то отменяем таймер\n\n const pauseCb = () => {\n if (!(this._state === STATE.STARTED || this._state === STATE.RESUMED)) {\n return;\n }\n\n if (this.slide.activeLayer.isClickCapturedBySlider()) {\n // stop pause event (from sdk) if _narrative_range_slider is active\n return;\n }\n\n this._state = STATE.PAUSE;\n\n // _log(\"pause: \" + (performance.now() - window.start));\n\n this.slide.activeLayer.pause(false, false);\n\n // clean up\n if (this._pauseCbTimer != null) {\n clearTimeout(this._pauseCbTimer);\n }\n\n this._state = STATE.PAUSED;\n };\n\n if (this.sdkApi.isAndroid) {\n this._pauseCbTimer = this.layoutService.env.setTimeout(pauseCb, 300);\n } else {\n pauseCb();\n }\n }\n\n public async slideResume() {\n if (this._pauseCbTimer != null) {\n // отменяем pause если есть (баг андроида - шлет pause/resume на простой клик)\n clearTimeout(this._pauseCbTimer);\n }\n\n if (this._state !== STATE.PAUSED) {\n return;\n }\n this._state = STATE.RESUME;\n // _log(\"resume: \" + (performance.now() - window.start));\n\n if (this._afterResumeQueue && Array.isArray(this._afterResumeQueue)) {\n for (const job of this._afterResumeQueue) {\n if (Utils.isFunction(job)) {\n job();\n }\n }\n this._afterResumeQueue = [];\n }\n\n this.slide.activeLayer.resume();\n\n this._state = STATE.RESUMED;\n }\n\n public async slideStop(options: { prepareForRestart: ON_SLIDE_STOP_PREPARE_FOR_RESTART }) {\n if (!(this._state === STATE.STARTED || this._state === STATE.RESUMED || this._state === STATE.PAUSED)) {\n return;\n }\n this._state = STATE.STOP;\n\n if (this._pauseCbTimer != null) {\n // отменяем pause если есть (баг андроида - шлет pause/resume на простой клик)\n clearTimeout(this._pauseCbTimer);\n }\n\n await this.slide.activeLayer.stop(options);\n\n this._state = STATE.STOPPED;\n }\n\n public slideTimerEnd() {\n const defaultAction = () => {\n const nextSlideIndex = this.slide.slideIndex + 1;\n if (nextSlideIndex >= 0 && nextSlideIndex < this.slide.slideCount) {\n this.sdkApi.showCardSlide(nextSlideIndex);\n } else {\n this.sdkApi.cardShowNext();\n }\n };\n\n if (this.activeLayer.questElement) {\n const slideIndex = this.slide.slideIndex;\n const slideCount = this.slide.slideCount;\n const { continueDefaultNavigation } = this.activeLayer.questElement.handleRouteClick({\n // handleRouteTrigger\n direction: \"forward\",\n slideIndex: slideIndex,\n slideCount: slideCount,\n });\n if (continueDefaultNavigation) {\n // default action\n defaultAction();\n }\n return;\n }\n\n defaultAction();\n }\n\n // for call from SlideApi internals (from widgets)\n // skip state checking and sdk issues\n public async slidePauseUI(): Promise<void> {\n await this.slide.activeLayer.pause(false, false);\n this._state = STATE.FORCE_PAUSED;\n }\n\n // for call from SlideApi internals (from widgets)\n // skip state checking and sdk issues\n public async slideResumeUI(): Promise<void> {\n await this.slide.activeLayer.resume();\n this._state = STATE.RESUMED;\n }\n\n public enableAudio() {\n this.slide.activeLayer.enableAudio();\n this._slideConfig.muted = false;\n }\n\n public disableAudio() {\n this.slide.activeLayer.disableAudio();\n this._slideConfig.muted = true;\n }\n\n public get isStopped(): boolean {\n return this._state === STATE.STOPPED;\n }\n\n public afterStartInitQueuePush(cb: () => void) {\n if (!Utils.isFunction(cb)) {\n return false;\n }\n if (this.sdkApi.isAndroid && this._state === STATE.INIT) {\n this._afterStartInitQueue.push(cb);\n } else {\n cb();\n }\n }\n\n public afterResumeQueuePush(cb: () => void) {\n if (!Utils.isFunction(cb)) {\n return false;\n }\n if ([STATE.RESUME, STATE.RESUMED, STATE.INITED, STATE.START, STATE.STARTED].includes(this._state)) {\n cb();\n } else {\n this._afterResumeQueue.push(cb);\n }\n }\n\n public get activeLayer(): Layer {\n return this.slide.activeLayer;\n }\n\n public get slide(): Slide {\n // todo - call showLayer with arg slide: Slide - where slide is widget parent (prevent mismatch)\n // when widget in init state, it can call showLayer\n // then we must call showLayer not on this._slide but on this._slideInInit (on slide contains widget itself)\n return this._slideInInit || this._slide;\n }\n\n public showLayer(index: number): void {\n // todo - call showLayer with arg slide: Slide - where slide is widget parent (prevent mismatch)\n // when widget in init state, it can call showLayer\n // then we must call showLayer not on this._slide but on this._slideInInit (on slide contains widget itself)\n this.slide.showLayer(index, this._slideConfig.muted);\n }\n\n public slideClickHandler(\n targetElement: HTMLElement | null,\n navigationDirection: \"forward\" | \"backward\"\n ): {\n // todo rename to continueNavigationClick (or via two flags, continueNavigationForwardClick & continueNavigationBackwardClick)\n canClickNext: boolean;\n } {\n const result = { canClickNext: true };\n let target: HTMLElement | null = targetElement;\n let element: HTMLElement | null | undefined;\n let propagation = true;\n\n // prevent click on geometry\n if (target?.classList.contains(\"narrative-element-geometry\")) {\n target = target?.querySelector<HTMLElement>(\".narrative-element\");\n }\n\n /** Button */\n if (target?.classList.contains(\"narrative-element-link\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-link\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Image */\n if (target?.classList.contains(\"narrative-element-image\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-image\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Swipe Up */\n if (target?.classList.contains(\"narrative-element-swipe-up\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-swipe-up\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Swipe Up Items */\n if (target?.classList.contains(\"narrative-element-swipe-up-items\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-swipe-up-items\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Products */\n if (target?.classList.contains(\"narrative-element-products\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-products\");\n }\n if (element) {\n const { handled } = this._handleLinkAndSwipeUpActivation(element);\n if (handled) {\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Vote complete button (multiple choice) */\n if (target?.classList.contains(\"narrative-element-vote-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-vote-next-button\");\n }\n if (element) {\n // if is widget file connected to Window\n if (this.layoutService.layoutApi.widgetVoteApi) {\n if (this.layoutService.layoutApi.widgetVoteApi.click(element)) {\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.showNextSlide(0);\n });\n }\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Next button */\n if (target?.classList.contains(\"narrative-element-quiz-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-quiz-next-button\");\n }\n if (!element) {\n if (target?.classList.contains(\"narrative-element-test-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-test-next-button\");\n }\n }\n\n if (element) {\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.showNextSlide(0);\n });\n result.canClickNext = false;\n return result;\n }\n\n /** Range slider */\n let rangeSliderBorderBoxView: HTMLElement | null | undefined = target;\n if (target?.classList.contains(\"border-box-view\") || (rangeSliderBorderBoxView = target?.closest(\".border-box-view\"))) {\n if (rangeSliderBorderBoxView?.parentElement && rangeSliderBorderBoxView.parentElement.classList.contains(\"narrative-element-range-slider\")) {\n // skip click on .border-box-view inside .narrative-element-range-slider - prevent navigation trigger at click inside widget body (expect NextButton)\n result.canClickNext = false;\n return result;\n }\n }\n // if (_hasClass(target, \"rangeslider\") || target.closest(\".rangeslider\")) {\n // return;\n // }\n\n /** Range slider complete button */\n if (target?.classList.contains(\"narrative-element-range-slider-next-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-range-slider-next-button\");\n }\n if (element) {\n if (this.layoutService.layoutApi.widgetRangeSliderApi) {\n if (this.layoutService.layoutApi.widgetRangeSliderApi.click(element)) {\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.showNextSlide(0);\n });\n }\n result.canClickNext = false;\n return result;\n }\n }\n\n /** Data input widget расширенный охват на весь виджет */\n if (target?.classList.contains(\"narrative-element-data-input\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-data-input\");\n }\n if (element) {\n if (this.layoutService.layoutApi.widgetDataInputApi) {\n result.canClickNext = this.layoutService.layoutApi.widgetDataInputApi.click(element);\n return result;\n }\n }\n\n /** quiz */\n if (target?.classList.contains(\"narrative-element-quiz-answer\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-quiz-answer\");\n }\n\n if (element) {\n if (element.closest(\".narrative-element-quiz\")) {\n /* quiz */\n if (this.layoutService.layoutApi.widgetQuizApi) {\n propagation = this.layoutService.layoutApi.widgetQuizApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n } else if (element.closest(\".narrative-element-quiz-grouped\")) {\n /* quiz-grouped */\n if (this.layoutService.layoutApi.widgetQuizGroupedApi) {\n propagation = this.layoutService.layoutApi.widgetQuizGroupedApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n }\n\n /** poll or poll layers */\n if (target?.classList.contains(\"narrative-element-poll-button\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-poll-button\");\n }\n\n if (element) {\n if (this.activeLayer.pollElement) {\n if (this.layoutService.layoutApi.widgetPollApi) {\n this.layoutService.layoutApi.widgetPollApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n if (this.activeLayer.pollLayersElement) {\n if (this.layoutService.layoutApi.widgetPollLayersApi) {\n this.layoutService.layoutApi.widgetPollLayersApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n }\n\n /** vote */\n if (target?.classList.contains(\"narrative-element-vote-answer\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-vote-answer\");\n }\n\n if (element) {\n if (this.layoutService.layoutApi.widgetVoteApi) {\n propagation = this.layoutService.layoutApi.widgetVoteApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n\n /** rate */\n if (target?.classList.contains(\"narrative-element-rate-input\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-rate-input\");\n }\n\n if (element) {\n if (this.layoutService.layoutApi.widgetRateApi) {\n propagation = this.layoutService.layoutApi.widgetRateApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n\n /** test */\n if (target?.classList.contains(\"narrative-element-test-answer\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-test-answer\");\n }\n\n if (element) {\n if (element.closest(\".narrative-element-test\")) {\n /* test */\n if (this.layoutService.layoutApi.widgetTestApi) {\n propagation = this.layoutService.layoutApi.widgetTestApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n } else if (element.closest(\".narrative-element-quest\")) {\n /* quest */\n if (this.layoutService.layoutApi.widgetQuestApi) {\n propagation = this.layoutService.layoutApi.widgetQuestApi.select(element);\n propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n }\n }\n }\n\n /** copy */\n if (target?.classList.contains(\"narrative-element-copy\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-copy\");\n }\n\n if (element) {\n // if (\"_narrative_test\" in window) {\n // propagation = window._narrative_test.select(element);\n // propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n // }\n\n if (this.layoutService.layoutApi.widgetCopyApi) {\n propagation = this.layoutService.layoutApi.widgetCopyApi.click(element);\n propagation = false; // по клику на Копировать не делаем клик на слайде\n }\n\n // copyToClipboard(element.getAttribute('data-clipboard-target'));\n // propagation = false;\n }\n\n /** barcode */\n if (target?.classList.contains(\"narrative-element-barcode\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-barcode\");\n }\n\n if (element) {\n // if (\"_narrative_test\" in window) {\n // propagation = window._narrative_test.select(element);\n // propagation = false; // по клику на варианты ответа(даже на законченной викторине) не делаем клик на слайде\n // }\n\n if (this.layoutService.layoutApi.widgetBarcodeApi) {\n propagation = this.layoutService.layoutApi.widgetBarcodeApi.click(element);\n propagation = false; // по клику на Копировать не делаем клик на слайде\n }\n\n // copyToClipboard(element.getAttribute('data-clipboard-target'));\n // propagation = false;\n }\n\n /** share */\n if (target?.classList.contains(\"narrative-element-share\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-share\");\n }\n\n if (element) {\n if (this.layoutService.layoutApi.widgetShareApi) {\n this.layoutService.layoutApi.widgetShareApi.click(element);\n propagation = false;\n }\n }\n\n /** story-repeat */\n if (target?.classList.contains(\"narrative-element-story-repeat\")) {\n element = target;\n } else {\n element = target?.closest(\".narrative-element-story-repeat\");\n }\n\n if (element) {\n propagation = false;\n this.sdkApi.setCardLocalData({}, true);\n this.sdkApi.updateCardServerDataLocally(this.slide.cardId, {});\n\n // window._resetTimers();\n\n // сделать async в ios\n\n let slideIndex = this.slide.slideIndex;\n // prevent simultaneous call _showNarrativeSlide and _showLayer - prevent 2 calls of initAfterLoad (break video start on iOS)\n if (slideIndex === 0) {\n // for story repeat on the first slide with layers\n this.sdkApi.showLayer(0);\n } else {\n this.sdkApi.showCardSlide(0); // сделать ее async\n }\n }\n\n // todo в каждом виджете делать выход через\n // if (handled) {\n // result.canClickNext = false;\n // return result;\n // }\n // убрать propagation\n if (!propagation) {\n result.canClickNext = false;\n return result;\n }\n\n /** can tap to next slide */\n if (this.activeLayer.quizElement) {\n if (!this.activeLayer.quizElement.slideQuizIsDone && navigationDirection === \"forward\") {\n result.canClickNext = false;\n }\n }\n\n if (this.activeLayer.quizGroupedElement) {\n if (!this.activeLayer.quizGroupedElement.slideQuizGroupedIsDone && navigationDirection === \"forward\") {\n result.canClickNext = false;\n }\n }\n\n if (this.activeLayer.testElement) {\n const isDone = this.activeLayer.testElement.slideTestIsDone;\n if (!isDone && navigationDirection === \"forward\") {\n result.canClickNext = false;\n }\n if (this.activeLayer.testElement.slideTestWithTimer && !isDone) {\n result.canClickNext = false;\n return result; // disable all clicks\n }\n }\n\n if (this.activeLayer.rangeSliderElement) {\n if (this.activeLayer.rangeSliderElement.isClickCapturedBySlider) {\n result.canClickNext = false;\n return result; // disable all clicks if event captured by slider\n }\n }\n\n if (this.activeLayer.productsElement) {\n if (this.activeLayer.productsElement.isClickCapturedByWidget) {\n result.canClickNext = false;\n return result; // disable all clicks if event captured by products widget (slider or swipe down)\n }\n }\n\n if (this.activeLayer.questElement) {\n const slideIndex = this.slide.slideIndex;\n const slideCount = this.slide.slideCount;\n const { continueDefaultNavigation } = this.activeLayer.questElement.handleRouteClick({\n direction: navigationDirection,\n slideIndex: slideIndex,\n slideCount: slideCount,\n });\n result.canClickNext = continueDefaultNavigation;\n return result;\n }\n\n const disableNavigation = this.slide.disabledNavigation;\n\n if (disableNavigation) {\n result.canClickNext = false;\n return result; // disable slide tap navigation\n }\n\n // _clickNext(canClickNext, xPercent);\n return result;\n }\n\n /**\n * Handle click or swipeUp on linkable elements (elements with data: linkType & linkTarget)\n * And click or swipeUp on SwipeUp elements (WidgetProducts, WidgetGoods)\n */\n private _handleLinkAndSwipeUpActivation(element: HTMLElement, isSwipeUpAction = false): { handled: boolean } {\n const linkType = element.getAttribute(\"data-link-type\");\n let linkTarget = element.getAttribute(\"data-link-target\");\n const linkTargetIos = element.getAttribute(\"data-link-target-ios\");\n const linkTargetAndroid = element.getAttribute(\"data-link-target-android\");\n const linkTargetWeb = element.getAttribute(\"data-link-target-web\");\n const elementId = element.getAttribute(\"data-element-id\") ?? \"\";\n // element without URI data\n let handled = false;\n\n if (this.sdkApi.isAndroid && linkTargetAndroid) {\n linkTarget = linkTargetAndroid;\n }\n if (this.sdkApi.isIOS && linkTargetIos) {\n linkTarget = linkTargetIos;\n }\n if (this.sdkApi.isWeb && linkTargetWeb) {\n linkTarget = linkTargetWeb;\n }\n\n // for btn(link) without url (openGame, openStory, closeCard, products, goods, etc)\n let statisticWidgetValue = linkType;\n let statisticWidgetEventType = \"w-link\";\n\n if (linkType === \"closeStory\" || linkType === \"closeIAM\") {\n this.layoutService.env.setTimeout(() => this.sdkApi.closeCard(\"click\"));\n handled = true;\n } else if (linkType && linkTarget) {\n if (linkType === \"story\") {\n // storyId: number, slideIndex: number\n this.layoutService.env.setTimeout(() => this.sdkApi.openStory(parseInt(linkTarget), 0));\n handled = true;\n } else if (linkType === \"slide\") {\n const __slideIndex = parseInt(linkTarget);\n const __slideCount = this.slide.slideCount;\n if (__slideIndex >= 0 && __slideIndex < __slideCount) {\n this.layoutService.env.setTimeout(() => this.sdkApi.showCardSlide(__slideIndex));\n handled = true;\n }\n } else if (linkType === \"game\") {\n this.layoutService.env.setTimeout(() => this.sdkApi.openGame(linkTarget));\n handled = true;\n } else if (linkType === \"layer\") {\n const layerIndex = parseInt(linkTarget);\n if (layerIndex >= 0) {\n this.layoutService.env.setTimeout(() => this.sdkApi.showLayer(layerIndex));\n handled = true;\n }\n } else if (linkType === \"url\") {\n // traditional link, with url\n statisticWidgetValue = linkTarget;\n\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.openUrl({\n type: isSwipeUpAction ? \"swipeUpLink\" : \"link\",\n link: {\n type: \"url\",\n target: linkTarget,\n },\n });\n });\n handled = true;\n } else if (linkType === \"products\") {\n if (this.layoutService.layoutApi.widgetProductsApi) {\n this.layoutService.layoutApi.widgetProductsApi.click(element);\n handled = true;\n }\n } else if (linkType === \"swipe-up-items\") {\n const target = decodeURIComponent(linkTarget ?? \"\");\n this.layoutService.env.setTimeout(() => {\n this.sdkApi.openUrl({\n type: \"swipeUpItems\",\n link: {\n type: \"json\",\n target,\n },\n elementId,\n });\n });\n statisticWidgetValue = target;\n statisticWidgetEventType = \"w-goods-open\";\n\n try {\n // TODO CSP violation\n element.style.setProperty(\"opacity\", \"0\");\n } catch (e) {\n console.error(e);\n }\n handled = true;\n }\n }\n\n if (handled) {\n try {\n const cardId = this.slide.cardId;\n const cardType = this.slide.cardType;\n const slideIndex = this.slide.slideIndex;\n\n let baseFields: { story_id?: number; message_id?: number } = {};\n switch (cardType) {\n case CARD_TYPE.STORY:\n case CARD_TYPE.UGC_STORY:\n baseFields.story_id = cardId;\n break;\n case CARD_TYPE.IN_APP_MESSAGING:\n baseFields.message_id = cardId;\n break;\n }\n\n this.sdkApi.sendStatisticEvent(\n statisticWidgetEventType,\n {\n i: cardId,\n si: slideIndex,\n wi: elementId,\n wl: element.textContent ?? \"\",\n wv: statisticWidgetValue ?? \"\",\n },\n {\n ...baseFields,\n slide_index: slideIndex,\n widget_id: elementId,\n widget_label: element.textContent ?? \"\",\n widget_value: statisticWidgetValue ?? \"\",\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n return { handled };\n }\n\n public slideSwipeUpHandler() {\n const targetElement = this.activeLayer.swipeUpElement || this.activeLayer.swipeUpItemsElement || this.activeLayer.productsElement;\n const target = targetElement?.elementNodeRef;\n\n if (!target) {\n return false;\n }\n\n const { handled } = this._handleLinkAndSwipeUpActivation(target, true);\n return handled;\n }\n\n public setTextInputResult(id: string, text: string): void {\n if (this.activeLayer.dataInputElement) {\n this.activeLayer.dataInputElement.setUserData(id, text);\n }\n if (this.activeLayer.pollElement) {\n this.activeLayer.pollElement.setUserData(id, text);\n }\n if (this.activeLayer.rateElement) {\n this.activeLayer.rateElement.setUserData(id, text);\n }\n }\n\n public setShareComplete(id: string, isSuccess: boolean): void {\n if (this.activeLayer.shareElement) {\n this.activeLayer.shareElement.complete(id, isSuccess);\n }\n }\n\n public setWidgetGoodsComplete(elementId: string): void {\n const element = document.querySelector<HTMLElement>('[data-element-id=\"' + elementId + '\"]');\n if (element != null) {\n try {\n element.style.setProperty(\"opacity\", \"1\");\n } catch (e) {\n console.error(e);\n }\n }\n }\n}\n","import { SlideApiPeerDeps } from \"../../layout/layout_api\";\nimport { EsModuleSdkApi } from \"../../sdk_api/adapters/es_module_sdk_api\";\nimport { SDKInterface } from \"../../sdk_api/es_module_sdk_api.h\";\nimport { SlideApi as BaseSlideApi } from \"../../layout/SlideApi\";\nimport { type Player as VODPlayer } from \"@inappstory/video-player\";\n\nexport const slideApiPeerDeps: SlideApiPeerDeps = {};\n\nconst createSlideWrapper = ({ slideBoxRatio, nonce }: { slideBoxRatio: number; nonce?: string }) => {\n const slideWrapper = document.createElement(\"div\");\n slideWrapper.classList.add(\"narrative-slide-wrapper\");\n slideWrapper.classList.add(\"stories-viewer\");\n\n const slideOffset = document.createElement(\"div\");\n slideOffset.classList.add(\"narrative-slide-offset\");\n\n const slideBoxPrerender = document.createElement(\"div\");\n slideBoxPrerender.classList.add(\"narrative-slide-box\");\n slideBoxPrerender.classList.add(\"narrative-slide-box-prerender\");\n\n const slideBoxRendered = document.createElement(\"div\");\n slideBoxRendered.classList.add(\"narrative-slide-box\");\n slideBoxRendered.classList.add(\"narrative-slide-box-rendered\");\n\n const style = document.createElement(\"style\");\n if (nonce != null) {\n style.nonce = nonce;\n }\n\n const paddingTop = `${String(100 / slideBoxRatio)}%`;\n\n // .narrative-slide-box {\n // padding: <?= $slideRatioPadding ?> 0 0 0;\n // }\n // style.sheet?.insertRule(`.narrative-slide-box {padding: ${paddingTop} 0 0 0;`);\n slideBoxRendered.style.padding = `${paddingTop} 0 0 0`;\n slideBoxPrerender.style.padding = `${paddingTop} 0 0 0`;\n\n slideOffset.appendChild(slideBoxPrerender);\n slideOffset.appendChild(slideBoxRendered);\n\n slideWrapper.appendChild(slideOffset);\n slideWrapper.appendChild(style);\n\n return slideWrapper;\n};\n\nexport class SlideApi extends BaseSlideApi {\n constructor(\n _sdkInterface: SDKInterface,\n config: {\n root: HTMLElement;\n slideRatio: number;\n isFullscreen: boolean;\n nonce?: string;\n viewport: Window;\n userResizeHandler?: (data: { viewportWidth: number; viewportHeight: number; fontSize: number }) => void;\n VODPlayer?: typeof VODPlayer;\n overlappingActionBarHeight?: number;\n }\n ) {\n slideApiPeerDeps.VODPlayer = config.VODPlayer;\n const slideWrapper = createSlideWrapper({ slideBoxRatio: config.slideRatio, nonce: config.nonce });\n // todo need to clear root node before append slideWrapper?\n config.root.appendChild(slideWrapper);\n\n super({\n sdkApi: new EsModuleSdkApi(_sdkInterface),\n slideWrapper,\n viewport: config.viewport,\n slideRatio: config.slideRatio,\n isFullscreen: config.isFullscreen,\n userResizeHandler: config.userResizeHandler,\n getViewportWidth: () => slideWrapper.clientWidth,\n getViewportHeight: () => slideWrapper.clientHeight,\n overlappingActionBarHeight: config.overlappingActionBarHeight,\n });\n }\n}\n","import { container } from \"@composition\";\nimport { SDKApi } from \"@skd_api\";\nimport { data, extend, forEach, getTagData, getTagDataAsNumber, getValueOrDefault, getValueOrException, sendStatisticEventToApp, slice } from \"@utils\";\nimport { CARD_TYPE } from \"../../common_types.h\";\nimport { OnWidgetComplete, WidgetOptionsBase } from \"./base.h\";\nimport { WidgetsService } from \"./widgets_service/widgets_service\";\n\nexport type StatisticEventBaseFieldsShortForm = {\n i: number;\n si: number;\n};\nexport type StatisticEventBaseFieldsFullForm = {\n story_id?: number;\n message_id?: number;\n slide_index: number;\n};\n\nexport class WidgetBase<WidgetOptions extends WidgetOptionsBase> {\n /**\n * @see https://github.com/Microsoft/TypeScript/issues/3841#issuecomment-1488919713\n */\n declare [\"constructor\"]: typeof WidgetBase;\n\n static DEFAULTS: WidgetOptionsBase = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n static widgetIndex = 0;\n\n protected env = WidgetBase.widgetsService.env;\n protected options: WidgetOptions = null!;\n protected element: HTMLElement = null!;\n protected elementId: string = null!;\n protected slide: HTMLElement = null!;\n protected slideIndex: number = null!;\n protected disableTimer: boolean = null!;\n protected layoutDirection: \"ltr\" | \"rtl\" = \"ltr\";\n protected cardId: number = null!;\n protected cardType: CARD_TYPE = null!;\n protected widgetDone: Element | null = null;\n protected showWidgetCompleteToast: boolean = null!;\n protected submitButtonAnimatedView: HTMLElement | null = null;\n protected submitButtonView: HTMLElement | null = null;\n protected savedData: Record<string, any> | null = null;\n protected localData: Record<string, any> = null!;\n protected firstOpenTime: number = 0;\n protected id: string;\n\n public startReadyPromise: Promise<void> = null!;\n private startReadyResolve: () => void = null!;\n\n constructor(\n element: HTMLElement,\n options: Partial<WidgetOptions>,\n private readonly _onWidgetComplete: OnWidgetComplete,\n public readonly sdkApi: SDKApi,\n elementIdGetter?: (element: HTMLElement) => string,\n slideGetter?: (element: HTMLElement) => HTMLElement\n ) {\n this.options = extend<WidgetOptions>({}, this.constructor.DEFAULTS as WidgetOptions, options);\n this.element = element;\n if (elementIdGetter) {\n this.elementId = elementIdGetter(this.element);\n } else {\n this.elementId = getValueOrException(getTagData(this.element, \"elementId\"), \"Empty elementId\");\n }\n\n if (slideGetter) {\n this.slide = slideGetter(this.element);\n } else {\n this.slide = getValueOrException(this.element.closest<HTMLElement>(\".narrative-slide\"), \"Empty slide\");\n }\n\n this.slideIndex = getValueOrException(getTagDataAsNumber(this.slide, \"index\"), \"Empty slideIndex\");\n this.disableTimer = getTagData(this.slide, \"disableTimer\") === \"1\";\n\n this.cardId = getValueOrException(getTagDataAsNumber(this.slide, \"id\"), \"Empty cardId\");\n this.cardType = getValueOrException(getTagDataAsNumber(this.slide, \"cardType\"), \"Empty card type\");\n\n if (this.env.getComputedStyle(this.element).direction === \"rtl\") {\n this.layoutDirection = \"rtl\";\n } else {\n this.layoutDirection = \"ltr\";\n }\n this.element.dir = this.layoutDirection;\n\n if (this.element.parentElement != null) {\n this.widgetDone = this.element.parentElement?.nextElementSibling; // geometry + .widget-sent-toast\n if (this.widgetDone) {\n if (!this.widgetDone.classList.contains(\"widget-sent-toast\")) {\n this.widgetDone = null;\n }\n }\n }\n this.showWidgetCompleteToast = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"showWidgetCompleteToast\"), 0));\n if (!this.showWidgetCompleteToast) {\n this.widgetDone = null;\n }\n\n if (this.element != null) {\n this.submitButtonAnimatedView = this.element.querySelector(\".submit-button-animated-view\");\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonView = this.submitButtonAnimatedView.querySelector(\".submit-button-view\");\n }\n }\n\n this.savedData = this.sdkApi.getCardServerData(this.cardId);\n this.localData = extend({}, this.savedData ?? {}, this.options.localData ?? {});\n\n this.id = `w_${this.elementId}_${WidgetBase.widgetIndex}`;\n ++WidgetBase.widgetIndex;\n\n this.resetStartReadyPromise();\n }\n\n protected get submitButtonViewHeight() {\n if (this.submitButtonView != null) {\n return this.submitButtonView.clientHeight;\n }\n return 0;\n }\n\n private resetStartReadyPromise() {\n this.startReadyPromise = new Promise<void>(resolve => {\n this.startReadyResolve = resolve;\n });\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n this.savedData = this.sdkApi.getCardServerData(this.cardId);\n this.localData = extend({}, this.savedData ?? {}, localData);\n }\n\n public onStart(): void {\n // add active class for enable animation\n this.element.classList.add(\"active\");\n\n this.startReadyResolve();\n }\n\n public onStop(): void {\n this.element.classList.remove(\"active\");\n\n this.resetStartReadyPromise();\n }\n\n public onPause(): void {}\n\n public onResume(): void {}\n\n public static widgetCacheKey = \"ias.story-element\";\n public static widgetClassName = \"\";\n\n public static getInstance<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(element: HTMLElement): Widget | undefined {\n return data<Widget>(element, this.widgetCacheKey);\n }\n\n public static getInstanceById<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(id: string): Widget | undefined {\n const widgetsElements = slice.call(this.widgetsService.env.document.querySelectorAll(`.${this.widgetClassName}`));\n let widget: Widget | undefined;\n forEach(widgetsElements, (element, index) => {\n const localWidget = data<Widget>(element, this.widgetCacheKey);\n if (localWidget && localWidget.id === id) {\n widget = localWidget;\n }\n });\n\n return widget;\n }\n\n public static createInstance<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(\n instantiate: (element: HTMLElement, options: Partial<WidgetOptions>) => Widget,\n element: HTMLElement,\n options: Partial<WidgetOptions>\n ): Widget {\n // get from objects cache (just Map<key, data> where key assigned to HTMLElement)\n let instance = WidgetBase.getInstance<Widget, WidgetOptions>(element);\n if (instance == null) {\n // can throw Error\n instance = instantiate(element, options);\n // save object in cache by key associated with HTMLElement\n data(element, WidgetBase.widgetCacheKey, instance);\n }\n\n return instance;\n }\n\n public static initWidget<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(\n htmlElement: HTMLElement,\n localData: Record<string, any>,\n instantiate: (element: HTMLElement, options: Partial<WidgetOptions>) => Widget\n ): Promise<Record<string, any>> {\n const widget = this.createInstance<Widget, WidgetOptions>(instantiate, htmlElement, {\n slide: null,\n localData,\n } as WidgetOptions);\n // start widget (just created or cached instance)\n widget.onRefreshUserData(localData);\n return Promise.resolve(localData);\n }\n\n public static get widgetsService(): WidgetsService {\n return container.get<WidgetsService>();\n }\n\n public static getLocalData(sdkApi: SDKApi): Promise<Record<string, any>> {\n return sdkApi.getCardLocalData();\n }\n\n public getLocalData(): Promise<Record<string, any>> {\n return this.constructor.getLocalData(this.sdkApi);\n }\n\n public static setLocalData(sdkApi: SDKApi, keyValue: Record<string, any>, sendToServer?: boolean, syncWithRuntimeLocalData?: boolean) {\n // push json object as string\n if (sendToServer === undefined) {\n sendToServer = true;\n } else {\n sendToServer = Boolean(sendToServer);\n }\n if (syncWithRuntimeLocalData === undefined) {\n syncWithRuntimeLocalData = true;\n } else {\n syncWithRuntimeLocalData = Boolean(syncWithRuntimeLocalData);\n }\n\n if (syncWithRuntimeLocalData) {\n this.getLocalData(sdkApi).then(localData => {\n // 1 - old values, 2 - new values\n keyValue = extend({}, localData, keyValue);\n\n // todo make async via promise or async\n sdkApi.setCardLocalData(keyValue, sendToServer);\n });\n } else {\n // todo make async via promise or async\n sdkApi.setCardLocalData(keyValue, sendToServer);\n }\n }\n\n public setLocalData(keyValue: Record<string, any>, sendToServer?: boolean, syncWithRuntimeLocalData?: boolean) {\n return this.constructor.setLocalData(this.sdkApi, keyValue, sendToServer, syncWithRuntimeLocalData);\n }\n\n public get statisticEventBaseFieldsShortForm(): StatisticEventBaseFieldsShortForm {\n return WidgetBase.getStatisticEventBaseFieldsShortForm(this.cardId, this.slideIndex);\n }\n\n public static getStatisticEventBaseFieldsShortForm(cardId: number, slideIndex: number): StatisticEventBaseFieldsShortForm {\n return {\n i: cardId,\n si: slideIndex,\n };\n }\n\n public get statisticEventBaseFieldsFullForm(): StatisticEventBaseFieldsFullForm {\n return WidgetBase.getStatisticEventBaseFieldsFullForm(this.cardId, this.cardType, this.slideIndex);\n }\n\n public static getStatisticEventBaseFieldsFullForm(cardId: number, cardType: CARD_TYPE, slideIndex: number): StatisticEventBaseFieldsFullForm {\n const data: StatisticEventBaseFieldsFullForm = { slide_index: slideIndex };\n switch (cardType) {\n case CARD_TYPE.STORY:\n case CARD_TYPE.UGC_STORY:\n data.story_id = cardId;\n break;\n case CARD_TYPE.IN_APP_MESSAGING:\n data.message_id = cardId;\n break;\n }\n return data;\n }\n\n public static sendStatisticEventToApp(\n sdkApi: SDKApi,\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n options?: { forceEnableStatisticV2?: boolean }\n ) {\n sendStatisticEventToApp(sdkApi, name, data, devPayload, options);\n }\n\n public sendStatisticEventToApp(\n name: string,\n data: Record<string, string | number | Array<string | number>>,\n devPayload?: Record<string, string | number | Array<string | number>>,\n options?: { forceEnableStatisticV2?: boolean }\n ) {\n this.constructor.sendStatisticEventToApp(this.sdkApi, name, data, devPayload, options);\n }\n\n public onWidgetComplete() {\n this._onWidgetComplete(this.cardId, this.slideIndex);\n }\n\n protected _showLayer(layers: Array<HTMLElement>, selectIndex: number, withStatEvent: boolean = false): void {\n if (this.sdkApi.isExistsShowLayer()) {\n this.sdkApi.showLayer(selectIndex);\n } else {\n forEach(layers, (layer, index) => {\n if (index === selectIndex) {\n layer.classList.remove(\"hidden\");\n this.sdkApi.cardAnimation?.start(layer);\n } else {\n layer.classList.add(\"hidden\");\n }\n });\n }\n if (withStatEvent) {\n this._statEventLayoutShow(selectIndex);\n }\n }\n\n protected _statEventLayoutShow(layoutIndex: number): void {\n try {\n this.sendStatisticEventToApp(\n \"layout-show\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n li: layoutIndex,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n layout_index: layoutIndex,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public static onRefreshUserData<Widget extends WidgetBase<WidgetOptions>, WidgetOptions extends WidgetOptionsBase>(\n element: HTMLElement,\n localData: Record<string, any>\n ): void {\n const widgetElement = element.closest<HTMLElement>(`.${this.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetBase.getInstance<Widget, WidgetOptions>(widgetElement);\n if (widget) {\n widget.onRefreshUserData(localData);\n }\n }\n }\n\n protected getPromotionalCodeFetchPath(promotionalCodeId: string): string {\n switch (this.cardType) {\n case CARD_TYPE.IN_APP_MESSAGING:\n return `inappmessaging/message/${this.cardId}/widget/${this.elementId}/promo-code/${promotionalCodeId}`;\n default:\n return `story/${this.cardId}/widget/${this.elementId}/promo-code/${promotionalCodeId}`;\n }\n }\n}\n","import { SDKApi } from \"@skd_api\";\nimport { addClass, getTagData, removeClass, slice } from \"@utils\";\nimport { drawingSVG, qrcode, ean13, pdf417 } from \"bwip-js/browser\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetBarcodeOptions } from \"./barcode.h\";\n\nexport class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {\n static DEFAULTS: WidgetBarcodeOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-barcode\";\n\n private readonly captionView: HTMLElement | null;\n private readonly svgView: HTMLElement | null;\n private clipboardTarget: string | undefined;\n private readonly codeType: string | undefined;\n private readonly formatterType: string | undefined;\n private readonly copiedText: string | undefined;\n private readonly isPromotionalCode: boolean;\n private state: number | null;\n private readonly msgNetworkError: string | undefined;\n private readonly msgServiceError: string | undefined;\n private readonly msgNoMoreCodes: string | undefined;\n private readonly msgTryAgain: string | undefined;\n private readonly msgBarcodeRenderError: string | undefined;\n\n constructor(element: HTMLElement, options: Partial<WidgetBarcodeOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.captionView = this.element.querySelector(\".narrative-element-text-lines\");\n\n this.clipboardTarget = getTagData(element, \"clipboardTarget\");\n this.isPromotionalCode = getTagData(element, \"clipboardType\") === \"promocode\";\n\n this.codeType = getTagData(element, \"codeType\");\n this.formatterType = getTagData(element, \"formatterType\");\n this.copiedText = getTagData(element, \"copiedText\");\n\n this.svgView = this.element.querySelector<HTMLElement>(\".barcode-view-inner\");\n\n this.msgNetworkError = getTagData(this.element, \"msgNetworkError\");\n this.msgServiceError = getTagData(this.element, \"msgServiceError\");\n this.msgNoMoreCodes = getTagData(this.element, \"msgNoMoreCodes\");\n this.msgTryAgain = getTagData(this.element, \"msgTryAgain\");\n this.msgBarcodeRenderError = getTagData(this.element, \"msgBarcodeRenderError\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.state = null;\n\n if (this.isPromotionalCode) {\n this.initPromotionalCodeFromLocalData();\n } else {\n this.renderCodeView();\n this.renderCaptionView();\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n if (this.isPromotionalCode) {\n this.fetchPromoCode();\n }\n }\n\n private isTransparentElement(): boolean {\n if (this.element) {\n try {\n const color = window.getComputedStyle(this.element).color;\n if (color === \"transparent\" || color === \"rgba(0, 0, 0, 0)\" || color === \"rgba(0,0,0,0)\") {\n return true;\n }\n } catch (err) {\n console.error(err);\n }\n }\n return false;\n }\n\n private renderCodeView() {\n const text = this.clipboardTarget ?? \"\";\n let svg = \"\";\n try {\n switch (this.codeType) {\n case \"qrcode\":\n svg = qrcode<string>({ bcid: \"qrcode\", text }, drawingSVG());\n break;\n case \"pdf417\":\n svg = pdf417<string>({ bcid: \"pdf417\", text }, drawingSVG());\n break;\n case \"ean13\":\n svg = ean13<string>({ bcid: \"ean13\", text, height: 10 }, drawingSVG());\n break;\n default:\n break;\n }\n if (this.svgView && svg) {\n this.svgView.innerHTML = svg;\n const svgPathNodes = this.svgView.querySelectorAll<SVGElement>(\"svg path\");\n for (const svgPathNode of svgPathNodes) {\n if (svgPathNode.hasAttribute(\"fill\")) {\n // for paths with fill (qr, pdf417)\n svgPathNode.setAttribute(\"fill\", \"currentColor\");\n }\n if (svgPathNode.hasAttribute(\"stroke\")) {\n // for paths with stroke (EAN 13)\n svgPathNode.setAttribute(\"stroke\", \"currentColor\");\n }\n }\n }\n } catch (e) {\n if (this.msgBarcodeRenderError) {\n this.sdkApi.showToast(this.msgBarcodeRenderError);\n }\n console.error(e);\n }\n }\n\n private formatCaptionText(text: string) {\n let format = this.formatterType ?? \"\";\n const result = [];\n let j = 0;\n for (let i = 0; i < format.length; ++i) {\n if (format[i] === \"#\") {\n result.push(text[j]);\n ++j;\n if (j >= text.length) {\n break;\n }\n } else {\n result.push(format[i]);\n }\n }\n let formattedText = `${result.join(\"\")}${text.slice(j)}`;\n\n return formattedText ?? text;\n }\n\n private renderCaptionView() {\n const text = this.formatCaptionText(this.clipboardTarget ?? \"\");\n this.changeCaptionViewText(text);\n }\n\n private changeCaptionViewText(text: string) {\n if (this.captionView) {\n this.captionView.textContent = text;\n }\n }\n\n private getPromotionalCodeFromLocalData(): string | undefined {\n return this.localData[\"_bc_g_\" + this.elementId + \"_pc\"];\n }\n\n private initPromotionalCodeFromLocalData(): void {\n if (this.getPromotionalCodeFromLocalData() !== undefined) {\n this.state = 1;\n this.clipboardTarget = this.getPromotionalCodeFromLocalData();\n if (this.clipboardTarget != null) {\n this.renderCaptionView();\n this.renderCodeView();\n }\n removeClass(this.element, \"loader\");\n }\n }\n\n private fetchPromoCode(): void {\n this.state = 0;\n this.initPromotionalCodeFromLocalData();\n\n if (this.state === 0) {\n if (!this.isTransparentElement()) {\n // for transparent element\n addClass(this.element, \"loader\");\n }\n\n // fetch promotional code\n const path = this.getPromotionalCodeFetchPath(this.clipboardTarget ?? \"\");\n const headers = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n };\n const profileKey = \"fetch-promo-code\";\n\n Promise.all([\n this.sdkApi.sendApiRequest<{ code: string }>(path, \"POST\", null, headers, null, profileKey),\n new Promise<void>(function (t, e) {\n return setTimeout(t, 300);\n }),\n ]).then(values => {\n const r = values[0];\n\n const status = r.status;\n let code = null;\n let success = false;\n if (status === 200 || status === 201) {\n if (r.data) code = r.data.code;\n if (code) {\n // success case\n this.clipboardTarget = code;\n\n this.renderCaptionView();\n this.renderCodeView();\n\n success = true;\n this.state = 1;\n removeClass(this.element, \"loader\");\n\n if (status === 201) {\n this.localData[\"_bc_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n this.localData[\"_&ts_bc_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n }\n this.localData[\"_bc_g_\" + this.elementId + \"_pc\"] = code;\n\n this.setLocalData(this.localData, true);\n } else {\n this.msgNoMoreCodes && this.sdkApi.showToast(this.msgNoMoreCodes);\n }\n } else if (status === 12163 || status === 12002) {\n this.msgNetworkError && this.sdkApi.showToast(this.msgNetworkError);\n } else {\n this.msgServiceError && this.sdkApi.showToast(this.msgServiceError);\n }\n\n if (!success) {\n this.state = 3;\n\n this.changeCaptionViewText(this.msgTryAgain ?? \"\");\n\n removeClass(this.element, \"loader\");\n }\n });\n }\n }\n\n public getStateValue(): number | null {\n return this.state;\n }\n\n public getIsPromotionalCode(): boolean {\n return this.isPromotionalCode;\n }\n\n private _statEventCopyClick(clipboardTarget: string): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-barcode\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: clipboardTarget,\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: clipboardTarget,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _select(): void {\n this.element.classList.add(\"done\");\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n // флаг - что таймер уже стартанул (в layout или добавить объект sharedMemory)\n // смотрим что прозрачный текст - тогда и лоадер прозрачный\n // _log(\"_showNarrativeNextSlide: \" + getSlideDuration(this.narrativeId, this.slideIndex), true);\n this.onWidgetComplete();\n }\n });\n\n if (this.copiedText) {\n this.sdkApi.showToast(this.copiedText);\n }\n }\n\n public copyToClipboard(element: HTMLElement): void {\n this._select();\n\n const textValue = this.clipboardTarget ?? \"\";\n\n this.sdkApi.writeToClipboard({ type: \"text\", textValue });\n\n this.completeWidget();\n\n this._statEventCopyClick(textValue);\n }\n\n private completeWidget(): void {\n this.localData[\"_bc_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n\n // ответ на вопрос\n this.localData[\"_&ts_bc_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_bc_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetBarcode.widgetClassName,\n onRefreshUserData: WidgetBarcode.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetBarcode.initWidget(element, localData, (element, options) => new WidgetBarcode(element, options, onWidgetComplete, sdkApi));\n },\n onStart: function (element: HTMLElement) {\n WidgetBarcode.getInstance<WidgetBarcode, WidgetBarcodeOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetBarcode.getInstance<WidgetBarcode, WidgetBarcodeOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetBarcode.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetBarcode.getInstance<WidgetBarcode, WidgetBarcodeOptions>(widgetElement);\n if (widget) {\n if (!widget.getIsPromotionalCode()) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 1) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 3) {\n widget.fetchPromoCode();\n }\n }\n }\n return false;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { addClass, getTagData, removeClass, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetCopyOptions } from \"./copy.h\";\n\nexport class WidgetCopy extends WidgetBase<WidgetCopyOptions> {\n static DEFAULTS: WidgetCopyOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-copy\";\n\n private readonly button: HTMLElement | null;\n private clipboardTarget: string | undefined;\n private readonly isPromotionalCode: boolean;\n private state: number | null;\n private readonly msgNetworkError: string | undefined;\n private readonly msgServiceError: string | undefined;\n private readonly msgNoMoreCodes: string | undefined;\n private readonly msgTryAgain: string | undefined;\n private readonly geometry: HTMLElement | null;\n private readonly resultLayer: HTMLElement | null;\n private readonly resultLayerGeometry: HTMLElement | null;\n\n constructor(element: HTMLElement, options: Partial<WidgetCopyOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.button = this.element.querySelector(\".narrative-element-text-lines\");\n\n this.clipboardTarget = getTagData(element, \"clipboardTarget\");\n this.isPromotionalCode = getTagData(element, \"clipboardType\") === \"promocode\";\n\n this.msgNetworkError = getTagData(this.element, \"msgNetworkError\");\n this.msgServiceError = getTagData(this.element, \"msgServiceError\");\n this.msgNoMoreCodes = getTagData(this.element, \"msgNoMoreCodes\");\n this.msgTryAgain = getTagData(this.element, \"msgTryAgain\");\n\n this.geometry = this.element.closest(\".narrative-element-geometry\");\n\n // this is result layer - skip init\n // todo prevent call Widget.init on result-layer\n if (this.element.classList.contains(\"narrative-element-copy-result-variant\")) {\n return;\n }\n\n this.resultLayer = this.slide.querySelector(`.narrative-element-copy-result-variant[data-element-id=\"${this.elementId}\"]`);\n if (this.resultLayer && this.geometry) {\n this.resultLayerGeometry = this.resultLayer.closest(\".narrative-element-geometry\");\n\n // create align center\n if (this.resultLayerGeometry) {\n const baseComputedGeometry = window.getComputedStyle(this.geometry);\n let resultComputedGeometry = window.getComputedStyle(this.resultLayerGeometry);\n\n if (parseFloat(resultComputedGeometry.width) < parseFloat(baseComputedGeometry.width)) {\n // prevent resultLayer shrinking\n this.resultLayerGeometry.style.setProperty(\"width\", parseFloat(baseComputedGeometry.width) + \"px\");\n resultComputedGeometry = window.getComputedStyle(this.resultLayerGeometry);\n }\n\n const geometryCenter = parseFloat(baseComputedGeometry.left) + parseFloat(baseComputedGeometry.width) / 2;\n const resultLayerGeometryWidth = parseFloat(resultComputedGeometry.width);\n const newResultLayerGeometryLeft = geometryCenter - resultLayerGeometryWidth / 2;\n\n this.resultLayerGeometry.style.setProperty(\"left\", newResultLayerGeometryLeft + \"px\");\n }\n }\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n // return DOM to init state (ready to copy)\n this.element.classList.remove(\"done\");\n if (this.resultLayer) {\n this.resultLayer.classList.remove(\"done\");\n }\n\n this.state = null;\n\n if (this.isPromotionalCode) {\n this.initPromotionalCodeFromLocalData();\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n // add active class for enable animation\n this.resultLayer?.classList.add(\"active\");\n\n if (this.isPromotionalCode) {\n this.fetchPromoCode();\n }\n }\n\n private isTransparentElement(): boolean {\n if (this.element) {\n try {\n const color = window.getComputedStyle(this.element).color;\n if (color === \"transparent\" || color === \"rgba(0, 0, 0, 0)\" || color === \"rgba(0,0,0,0)\") {\n return true;\n }\n } catch (err) {\n console.error(err);\n }\n }\n return false;\n }\n\n private changeText(newText: string): void {\n if (this.button) {\n this.button.textContent = newText;\n }\n }\n\n private getPromotionalCodeFromLocalData(): string | undefined {\n return this.localData[\"_cp_g_\" + this.elementId + \"_pc\"];\n }\n\n private initPromotionalCodeFromLocalData(): void {\n if (this.getPromotionalCodeFromLocalData() !== undefined) {\n this.state = 1;\n this.clipboardTarget = this.getPromotionalCodeFromLocalData();\n if (this.clipboardTarget != null) {\n this.changeText(this.clipboardTarget);\n }\n removeClass(this.element, \"loader\");\n }\n }\n\n private fetchPromoCode(): void {\n this.state = 0;\n this.initPromotionalCodeFromLocalData();\n\n if (this.state === 0) {\n if (!this.isTransparentElement()) {\n // for transparent element\n addClass(this.element, \"loader\");\n }\n\n // fetch promotional code\n const path = this.getPromotionalCodeFetchPath(this.clipboardTarget ?? \"\");\n const headers = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n };\n const profileKey = \"fetch-promo-code\";\n\n Promise.all([\n this.sdkApi.sendApiRequest<{ code: string }>(path, \"POST\", null, headers, null, profileKey),\n new Promise<void>(function (t, e) {\n return setTimeout(t, 300);\n }),\n ]).then(values => {\n const r = values[0];\n\n const status = r.status;\n let code = null;\n let success = false;\n if (status === 200 || status === 201) {\n if (r.data) code = r.data.code;\n if (code) {\n // success case\n this.clipboardTarget = code;\n this.changeText(this.clipboardTarget);\n success = true;\n this.state = 1;\n removeClass(this.element, \"loader\");\n\n if (status === 201) {\n this.localData[\"_cp_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n this.localData[\"_&ts_cp_g_\" + this.elementId + \"_pc_fetched_at\"] = Math.round(new Date().getTime() / 1000);\n }\n this.localData[\"_cp_g_\" + this.elementId + \"_pc\"] = code;\n\n this.setLocalData(this.localData, true);\n } else {\n this.msgNoMoreCodes && this.sdkApi.showToast(this.msgNoMoreCodes);\n }\n } else if (status === 12163 || status === 12002) {\n this.msgNetworkError && this.sdkApi.showToast(this.msgNetworkError);\n } else {\n this.msgServiceError && this.sdkApi.showToast(this.msgServiceError);\n }\n\n if (!success) {\n this.state = 3;\n this.changeText(this.msgTryAgain ?? \"\");\n removeClass(this.element, \"loader\");\n }\n });\n }\n }\n\n public getStateValue(): number | null {\n return this.state;\n }\n\n public getIsPromotionalCode(): boolean {\n return this.isPromotionalCode;\n }\n\n private _statEventCopyClick(clipboardTarget: string): void {\n try {\n const buttonText = this.button?.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-copy\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: buttonText,\n wv: clipboardTarget,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: buttonText,\n widget_value: clipboardTarget,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _select(): void {\n this.element.classList.add(\"done\");\n if (this.resultLayer) {\n this.resultLayer.classList.add(\"done\");\n }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n // флаг - что таймер уже стартанул (в layout или добавить объект sharedMemory)\n // смотрим что прозрачный текст - тогда и лоадер прозрачный\n // _log(\"_showNarrativeNextSlide: \" + getSlideDuration(this.narrativeId, this.slideIndex), true);\n this.onWidgetComplete();\n }\n });\n }\n\n public copyToClipboard(element: HTMLElement): void {\n this._select();\n\n const textValue = this.clipboardTarget ?? \"\";\n\n this.sdkApi.writeToClipboard({ type: \"text\", textValue });\n\n this.completeWidget();\n\n this._statEventCopyClick(textValue);\n }\n\n private completeWidget(): void {\n this.localData[\"_cp_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n\n // ответ на вопрос\n this.localData[\"_&ts_cp_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_cp_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetCopy.widgetClassName,\n onRefreshUserData: WidgetCopy.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n // prevent initWidget for result layer\n if (!element.classList.contains(\"narrative-element-copy-result-variant\")) {\n WidgetCopy.initWidget<WidgetCopy, WidgetCopyOptions>(\n element,\n localData,\n (element, options) => new WidgetCopy(element, options, onWidgetComplete, sdkApi)\n );\n }\n },\n onStart: function (element: HTMLElement) {\n WidgetCopy.getInstance<WidgetCopy, WidgetCopyOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetCopy.getInstance<WidgetCopy, WidgetCopyOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetCopy.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetCopy.getInstance<WidgetCopy, WidgetCopyOptions>(widgetElement);\n if (widget) {\n if (!widget.getIsPromotionalCode()) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 1) {\n widget.copyToClipboard(element);\n } else if (widget.getStateValue() === 3) {\n widget.fetchPromoCode();\n }\n }\n }\n return false;\n },\n };\n}\n","/** QUIZ */\nimport { SDKApi } from \"@skd_api\";\nimport { extend, getElementBounding, getValueOrException, slice } from \"@utils\";\nimport { WidgetDataInputOptions } from \"./data_input.h\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\n\nexport class WidgetDataInput extends WidgetBase<WidgetDataInputOptions> {\n static DEFAULTS = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-data-input\";\n\n private readonly label: HTMLElement | null;\n private elementRect: DOMRect;\n private readonly inputElement: HTMLElement;\n private readonly textElement: HTMLElement;\n private readonly inputPlaceholderValue: string;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n * @param sdkApi\n */\n constructor(element: HTMLElement, options: Partial<WidgetDataInputOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n\n this.elementRect = this.element.getBoundingClientRect();\n\n this.inputElement = getValueOrException(this.element.querySelector<HTMLElement>(\".input-view .input\"), \"Empty .input-view .input\");\n this.textElement = getValueOrException(\n this.inputElement.querySelector<HTMLElement>(\".narrative-element-text-lines\"),\n \"Empty .narrative-element-text-lines\"\n );\n this.inputPlaceholderValue = this.textElement.innerHTML;\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n const text = this.getTextFromLocalData();\n this._fillUserText(text);\n if (text != null) {\n this.element.classList.add(\"done\");\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n }\n\n private getTextFromLocalData(): string | undefined {\n return this.localData[\"_di_g_\" + this.elementId + \"_t\"];\n }\n\n private _statEventFocusIn() {\n try {\n const labelText = this.label ? this.label.textContent ?? \"\" : \"\";\n\n this.sendStatisticEventToApp(\n \"w-data-input-focus\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventInputSave(answerText: string) {\n try {\n const labelText = this.label ? this.label.textContent ?? \"\" : \"\";\n\n this.sendStatisticEventToApp(\n \"w-data-input-save\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wv: answerText,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_value: answerText,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public isDone() {\n return Boolean(this.localData[\"_di_g_\" + this.elementId + \"_t\"]);\n }\n\n public click(element: HTMLElement) {\n if (this.isDone()) {\n return true;\n }\n\n this.elementRect = this.element.getBoundingClientRect();\n\n if (this.sdkApi.isAndroid || this.sdkApi.isWeb) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(this.id, data);\n\n this._statEventFocusIn();\n }\n\n return false;\n }\n\n private _fillUserText(text: string | undefined) {\n if (this.inputElement && this.textElement) {\n if (text != null) {\n this.inputElement.classList.remove(\"_is-placeholder\");\n text = text.replace(new RegExp(\"\\r?\\n\", \"g\"), \"<br />\");\n this.textElement.innerHTML = text;\n } else {\n this.inputElement.classList.add(\"_is-placeholder\");\n this.textElement.innerHTML = this.inputPlaceholderValue;\n }\n }\n }\n\n public setUserText(text: string) {\n this.slide.classList.remove(\"data-input-editing\");\n this.slide.classList.remove(\"blured\");\n\n let needResumeUITimer = true;\n\n if (text) {\n this._fillUserText(text);\n\n this.localData[\"_di_g_\" + this.elementId + \"_t\"] = text;\n // answer to question\n this.localData[\"_&ts_di_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n this.setLocalData(this.localData, true);\n\n this._statEventInputSave(text);\n\n if (this.disableTimer) {\n this.onWidgetComplete();\n needResumeUITimer = false;\n }\n }\n if (needResumeUITimer && !this.disableTimer) {\n this.sdkApi.resumeUI();\n }\n }\n\n public static api = {\n widgetClassName: WidgetDataInput.widgetClassName,\n onRefreshUserData: WidgetDataInput.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetDataInput.initWidget<WidgetDataInput, WidgetDataInputOptions>(\n element,\n localData,\n (element, options) => new WidgetDataInput(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetDataInput.getInstance<WidgetDataInput, WidgetDataInputOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetDataInput.getInstance<WidgetDataInput, WidgetDataInputOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetDataInput.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetDataInput.getInstance<WidgetDataInput, WidgetDataInputOptions>(widgetElement);\n if (widget) {\n return widget.click(element);\n }\n }\n return true;\n },\n setUserData: function (id: string, text: string) {\n WidgetDataInput.getInstanceById<WidgetDataInput, WidgetDataInputOptions>(id)?.setUserText(text);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getTagData, getTagDataAsNumber, getValueOrException, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetDateCountdownOptions } from \"./date_countdown.h\";\n\nexport class WidgetDateCountdown extends WidgetBase<WidgetDateCountdownOptions> {\n static DEFAULTS: WidgetDateCountdownOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n layers: [],\n };\n\n public static widgetClassName = \"narrative-element-date-countdown\";\n\n private label: HTMLElement | null;\n private readonly layers: Array<HTMLElement>;\n private messages: {\n days: string;\n hours: string;\n minutes: string;\n seconds: string;\n };\n private readonly timestampMs: number;\n private readonly diff: number;\n private timerInit: boolean;\n private pendingUpdate: boolean;\n\n private firstGroup1: HTMLElement;\n private firstGroup2: HTMLElement;\n private firstGroupCaption: HTMLElement;\n\n private secondGroup1: HTMLElement;\n private secondGroup2: HTMLElement;\n private secondGroupCaption: HTMLElement;\n\n private thirdGroup1: HTMLElement;\n private thirdGroup2: HTMLElement;\n private thirdGroupCaption: HTMLElement;\n\n constructor(element: HTMLElement, options: Partial<WidgetDateCountdownOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n\n this.messages = {\n days: getTagData(this.element, \"tDays\") ?? \"\",\n hours: getTagData(this.element, \"tHours\") ?? \"\",\n minutes: getTagData(this.element, \"tMinutes\") ?? \"\",\n seconds: getTagData(this.element, \"tSeconds\") ?? \"\",\n };\n\n this.timestampMs = getValueOrException(getTagDataAsNumber(this.element, \"timestampSeconds\"), \"Empty timestampSeconds\") * 1000;\n this.diff = 0;\n\n this.timerInit = false;\n this.pendingUpdate = true;\n\n this.layers = this.options.layers;\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n const value = this.timestampMs - (new Date().getTime() - this.diff);\n if (value > 0) {\n this._showLayer(this.layers, 0);\n } else {\n if (this.layers[1] != null) {\n this._showLayer(this.layers, 1);\n }\n }\n }\n\n public onPause(): void {\n super.onPause();\n\n if (this.timerInit) {\n this.pendingUpdate = false;\n }\n }\n\n public onResume(): void {\n super.onResume();\n\n if (this.timerInit && !this.pendingUpdate) {\n this.pendingUpdate = true;\n this.updateTimer();\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n if (!this.timerInit) {\n this.initTimer();\n }\n }\n\n public onStop(): void {\n super.onStop();\n\n if (this.timerInit) {\n this.pendingUpdate = false;\n this.timerInit = false;\n }\n }\n\n private initTimer(): void {\n if (this.timerInit) {\n return;\n }\n\n // find groups\n this.firstGroup1 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-1 .date-output-label-1\"), \"Empty firstGroup1\");\n this.firstGroup2 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-1 .date-output-label-2\"), \"Empty firstGroup2\");\n this.firstGroupCaption = getValueOrException(\n this.element.querySelector<HTMLElement>(\".date-item-view-group-1 .date-item-caption\"),\n \"Empty firstGroupCaption\"\n );\n\n this.secondGroup1 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-2 .date-output-label-1\"), \"Empty secondGroup1\");\n this.secondGroup2 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-2 .date-output-label-2\"), \"Empty secondGroup2\");\n this.secondGroupCaption = getValueOrException(\n this.element.querySelector<HTMLElement>(\".date-item-view-group-2 .date-item-caption\"),\n \"Empty secondGroupCaption\"\n );\n\n this.thirdGroup1 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-3 .date-output-label-1\"), \"Empty thirdGroup1\");\n this.thirdGroup2 = getValueOrException(this.element.querySelector<HTMLElement>(\".date-item-view-group-3 .date-output-label-2\"), \"Empty thirdGroup2\");\n this.thirdGroupCaption = getValueOrException(\n this.element.querySelector<HTMLElement>(\".date-item-view-group-3 .date-item-caption\"),\n \"Empty thirdGroupCaption\"\n );\n\n this.timerInit = true;\n\n const value = this.timestampMs - (new Date().getTime() - this.diff);\n if (value > 0) {\n this._showLayer(this.layers, 0);\n }\n\n this.updateTimer();\n }\n\n private updateTimer(): void {\n if (!this.timerInit) {\n return;\n }\n const value = this.timestampMs - (new Date().getTime() - this.diff);\n if (value > 0) {\n const result = this._asDuration(Math.round(value / 1000));\n\n if (result.days) {\n this.firstGroupCaption.textContent = this.messages.days;\n this.firstGroup1.textContent = result.day1;\n this.firstGroup2.textContent = result.day2;\n\n this.secondGroupCaption.textContent = this.messages.hours;\n this.secondGroup1.textContent = result.hour1;\n this.secondGroup2.textContent = result.hour2;\n\n this.thirdGroupCaption.textContent = this.messages.minutes;\n this.thirdGroup1.textContent = result.minute1;\n this.thirdGroup2.textContent = result.minute2;\n } else {\n this.firstGroupCaption.textContent = this.messages.hours;\n this.firstGroup1.textContent = result.hour1;\n this.firstGroup2.textContent = result.hour2;\n\n this.secondGroupCaption.textContent = this.messages.minutes;\n this.secondGroup1.textContent = result.minute1;\n this.secondGroup2.textContent = result.minute2;\n\n this.thirdGroupCaption.textContent = this.messages.seconds;\n this.thirdGroup1.textContent = result.second1;\n this.thirdGroup2.textContent = result.second2;\n }\n\n // this.pendingUpdate = true;\n } else {\n this.pendingUpdate = false;\n if (this.layers[1] != null) {\n this._showLayer(this.layers, 1);\n }\n }\n\n if (this.pendingUpdate) {\n this.env.requestAnimationFrame(() => this.updateTimer());\n }\n }\n\n private _asDuration(value: number | undefined | null) {\n const result = {\n days: false,\n day1: \"0\",\n day2: \"0\",\n hour1: \"0\",\n hour2: \"0\",\n minute1: \"0\",\n minute2: \"0\",\n second1: \"0\",\n second2: \"0\",\n };\n\n if (value === undefined || value === null) {\n return result;\n }\n if (value < 0) {\n return result;\n }\n value = Math.floor(value);\n const days = Math.floor((value / 86400) % 365);\n const hours = Math.floor((value / 3600) % 24);\n const minutes = Math.floor((value / 60) % 60);\n const seconds = value % 60;\n\n let pair;\n if (days > 0) {\n result.days = true;\n if (days < 10) result.day2 = String(days);\n else {\n pair = String(days).split(\"\");\n result.day1 = pair[0];\n result.day2 = pair[1];\n }\n }\n\n if (hours < 10) result.hour2 = String(hours);\n else {\n pair = String(hours).split(\"\");\n result.hour1 = pair[0];\n result.hour2 = pair[1];\n }\n\n if (minutes < 10) result.minute2 = String(minutes);\n else {\n pair = String(minutes).split(\"\");\n result.minute1 = pair[0];\n result.minute2 = pair[1];\n }\n\n if (seconds < 10) result.second2 = String(seconds);\n else {\n pair = String(seconds).split(\"\");\n result.second1 = pair[0];\n result.second2 = pair[1];\n }\n return result;\n }\n\n public static api = {\n widgetClassName: WidgetDateCountdown.widgetClassName,\n onRefreshUserData: WidgetDateCountdown.onRefreshUserData,\n init: function (\n element: HTMLElement,\n layers: Array<HTMLElement>,\n localData: Record<string, any>,\n onWidgetComplete: OnWidgetComplete,\n sdkApi: SDKApi\n ): void {\n WidgetDateCountdown.initWidget<WidgetDateCountdown, WidgetDateCountdownOptions>(\n element,\n localData,\n (element, options) => new WidgetDateCountdown(element, { ...options, layers }, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onStop();\n },\n onPause: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onPause();\n },\n onResume: function (element: HTMLElement) {\n WidgetDateCountdown.getInstance<WidgetDateCountdown, WidgetDateCountdownOptions>(element)?.onResume();\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { forEach, getTagData, getTagDataAsNumber, isNumeric, isObject } from \"@utils\";\nimport { CARD_TYPE } from \"../../common_types.h\";\nimport { WidgetBase } from \"../base\";\n\nconst displaySlide = function (slides: Array<HTMLElement>, localData: Record<string, any>, sdkApi: SDKApi) {\n const multiSlideItem = slides[0];\n\n let cardId: number | undefined = undefined;\n let cardType: CARD_TYPE = CARD_TYPE.STORY;\n let slideIndex: number | undefined = undefined;\n\n if (multiSlideItem != null) {\n cardId = getTagDataAsNumber(multiSlideItem, \"id\");\n cardType = getTagDataAsNumber(multiSlideItem, \"cardType\") ?? CARD_TYPE.STORY;\n slideIndex = getTagDataAsNumber(multiSlideItem, \"index\");\n\n if (\n multiSlideItem.querySelectorAll(\n \".narrative-element-share[data-with-layer='1'], .narrative-element-poll-layers, .narrative-element-date-countdown, .narrative-element-game\"\n ).length > 0\n ) {\n // skip if exists share/poll_layers\n return;\n }\n }\n\n // score\n var score = null;\n var selectedIndex: number | undefined = undefined;\n if (localData[\"q_score\"] !== undefined) {\n score = parseInt(localData[\"q_score\"]);\n } else if (localData[\"t_score\"] !== undefined) {\n score = parseInt(localData[\"t_score\"]);\n } else if (localData[\"qg_score\"] !== undefined) {\n score = localData[\"qg_score\"]; // array\n\n var tmpScore = score;\n if (isObject(score)) {\n tmpScore = Object.values(score);\n }\n tmpScore.sort();\n tmpScore.reverse();\n\n if (tmpScore[0] === tmpScore[1]) {\n forEach(slides, function (slide, index) {\n var minScore = getTagData(slide, \"layerMinScore\");\n if (minScore !== undefined) {\n if (minScore === \"uncertain\") {\n selectedIndex = index as number;\n }\n }\n });\n } else {\n var maxCategoryCnt = 0;\n // find quiz category (selectedCategoryIndex) - chosen most often\n var selectedCategoryIndex: number | undefined = undefined;\n forEach(score, function (value, i) {\n var item = parseInt(value as unknown as string);\n if (item > maxCategoryCnt) {\n maxCategoryCnt = item;\n selectedCategoryIndex = parseInt(i as string);\n }\n });\n\n // chose slide with correct result\n forEach(slides, function (slide, index) {\n var minScore = getTagData(slide, \"layerMinScore\");\n if (minScore !== undefined && isNumeric(minScore) && parseInt(minScore) === selectedCategoryIndex) {\n selectedIndex = index as number;\n }\n });\n }\n }\n\n if (score === null) {\n if (slides.length > 0) {\n var slide = slides[0];\n slide.classList.remove(\"hidden\");\n\n sdkApi.cardAnimation?.start(slide);\n return;\n }\n score = 0;\n }\n\n if (selectedIndex === undefined) {\n var map: Array<[number, number]> = [];\n forEach(slides, function (slide, index) {\n var minScore = getTagData(slide, \"layerMinScore\");\n if (minScore !== undefined) {\n map.push([index as number, parseInt(minScore)]);\n }\n });\n\n map.sort(function (a, b) {\n return a[1] - b[1];\n });\n\n for (var i = map.length - 1; i >= 0; i--) {\n if (score >= map[i][1]) {\n selectedIndex = map[i][0];\n break;\n }\n }\n }\n\n var undefinedResult = true;\n if (selectedIndex !== undefined) {\n forEach(slides, function (slide, index) {\n if (index === selectedIndex) {\n slide.classList.remove(\"hidden\");\n undefinedResult = false;\n sdkApi.cardAnimation?.start(slide);\n _sendStatEvent(sdkApi, cardId as number, cardType, slideIndex as number, selectedIndex);\n }\n });\n }\n\n if (undefinedResult) {\n console.warn(\"undefinedResult layer index\");\n sdkApi.showLayer(0);\n }\n};\n\nconst _sendStatEvent = function (sdkApi: SDKApi, cardId: number, cardType: CARD_TYPE, slideIndex: number, layerIndex: number) {\n try {\n WidgetBase.sendStatisticEventToApp(\n sdkApi,\n \"layout-show\",\n {\n ...WidgetBase.getStatisticEventBaseFieldsShortForm(cardId, slideIndex),\n li: layerIndex,\n },\n {\n ...WidgetBase.getStatisticEventBaseFieldsFullForm(cardId, cardType, slideIndex),\n layout_index: layerIndex,\n }\n );\n } catch (error) {\n console.error(error);\n }\n};\n\nexport class WidgetMultiSlide {\n public static api = {\n init: function (slides: Array<HTMLElement>, localData: Record<string, any>, sdkApi: SDKApi) {\n displaySlide(slides, localData, sdkApi);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getElementBounding, getTagDataAsNumber, getValueOrException, isArray, isNumber, isObject, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase, Widgets } from \"../base\";\nimport { WidgetPollOptions, WidgetPollSharedData } from \"./poll.h\";\n\nexport class WidgetPoll extends WidgetBase<WidgetPollOptions> {\n static DEFAULTS = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-poll\";\n\n private label: HTMLElement | null;\n private readonly percentFillMask: HTMLElement | null;\n private readonly maskedVariants: Array<HTMLElement>;\n private readonly variantsViewGroup: HTMLElement;\n private readonly variants: Array<HTMLElement>;\n private readonly variantsTexts: Array<string>;\n private readonly isInvertedPercentFilledMaskDirection: boolean;\n private readonly getUseResponseOnFirstButton: boolean;\n private readonly getUseResponseOnSecondButton: boolean;\n private readonly showClientTotalResult: boolean;\n private selectedVariant: number | undefined;\n private nativeDialogueWasOpened: boolean = false;\n private answerDuration: number = 0;\n private elementRect: DOMRect;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n */\n constructor(element: HTMLElement, options: Partial<WidgetPollOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n\n this.percentFillMask = this.element.querySelector<HTMLElement>(\".percent-filled-variants-view-group-mask\");\n this.maskedVariants = slice.call(this.element.querySelectorAll(\".variants-box .variants-view-group.percent-filled-variants-view-group .variant-view\"));\n\n this.variantsViewGroup = getValueOrException(\n this.element.querySelector<HTMLElement>(\".variants-box .variants-view-group:not(.percent-filled-variants-view-group)\"),\n \"Empty variantsViewGroup\"\n );\n this.variants = slice.call(this.variantsViewGroup.querySelectorAll(\".variant-view\"));\n\n this.variantsTexts = [];\n forEach(this.variants, (element, index) => {\n const label = element.querySelector(\".label\");\n if (label) {\n this.variantsTexts.push(label.textContent ?? \"\");\n }\n });\n\n this.isInvertedPercentFilledMaskDirection =\n this.element.classList.contains(\"theme-translucent\") || this.element.classList.contains(\"base-theme-translucent\");\n\n this.getUseResponseOnFirstButton = Boolean(getTagDataAsNumber(this.element, \"getUserResponseOnFirstButton\"));\n this.getUseResponseOnSecondButton = Boolean(getTagDataAsNumber(this.element, \"getUserResponseOnSecondButton\"));\n this.showClientTotalResult = Boolean(getTagDataAsNumber(this.element, \"showClientTotalResult\"));\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n this.selectedVariant = undefined;\n\n if (this.localData) {\n if (this.localData[\"_p_g_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectVariant(this.localData[\"_p_g_\" + this.elementId + \"_sa\"], true);\n } else {\n this._clearVariantSelection();\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n\n this.nativeDialogueWasOpened = false;\n }\n\n private _statEventPollAnswer(): void {\n this.answerDuration = new Date().getTime() - this.firstOpenTime;\n try {\n if (this.selectedVariant !== undefined) {\n const labelText = this.label?.textContent ?? \"\";\n const variantText = this.variantsTexts[this.selectedVariant] ? this.variantsTexts[this.selectedVariant] : \"\";\n\n this.sendStatisticEventToApp(\n \"w-poll-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedVariant,\n wal: variantText,\n d: this.answerDuration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: this.selectedVariant,\n widget_answer_label: variantText,\n duration_ms: this.answerDuration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventInputSave(responseText: string): void {\n try {\n if (this.selectedVariant !== undefined) {\n const labelText = this.label?.textContent ?? \"\";\n const variantText = this.variantsTexts[this.selectedVariant] ? this.variantsTexts[this.selectedVariant] : \"\";\n\n this.sendStatisticEventToApp(\n \"w-poll-clarification\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedVariant,\n wal: variantText,\n wv: responseText,\n d: this.answerDuration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: this.selectedVariant,\n widget_answer_label: variantText,\n widget_value: responseText,\n duration_ms: this.answerDuration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n _selectVariant(index: number, filled: boolean = false): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedVariant = index;\n\n this.localData[\"_p_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n this.element.classList.add(\"selected-\" + this.selectedVariant);\n if (filled) {\n this.element.classList.add(\"filled\");\n }\n\n if (this.showClientTotalResult) {\n this.element.classList.add(\"with-total-result\");\n this.displayPercents(index, filled);\n }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearVariantSelection(): void {\n forEach(this.variants, function (variant) {\n variant.classList.remove(\"selected\");\n });\n\n this.element.classList.remove(\"done\");\n this.element.classList.remove(\"selected-\" + this.selectedVariant);\n this.element.classList.remove(\"filled\");\n\n this.selectedVariant = undefined;\n\n this.element.classList.remove(\"with-total-result\");\n // this.displayPercents(index, filled);\n }\n\n private selectVariant(variantView: HTMLElement): boolean {\n this.nativeDialogueWasOpened = false;\n\n if (this.selectedVariant !== undefined) {\n return true;\n }\n\n const index = this.variants.indexOf(variantView);\n if (index !== -1) {\n this.elementRect = this.element.getBoundingClientRect();\n\n if (this.getUseResponseOnFirstButton && index === 0) {\n if (this.sdkApi.isAndroid) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n this.selectedVariant = index;\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n this.nativeDialogueWasOpened = false;\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(`${this.id}_first`, data);\n }\n\n this._statEventPollAnswer();\n\n return false;\n } else if (this.getUseResponseOnSecondButton && index === 1) {\n if (this.sdkApi.isAndroid) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n this.selectedVariant = index;\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(`${this.id}_second`, data);\n }\n\n this._statEventPollAnswer();\n\n return false;\n } else {\n this._selectVariant(index);\n\n this._statEventPollAnswer();\n }\n\n this.completeWidget();\n }\n\n return false;\n }\n\n private _getVariantBoxInPercent(variantIndex: number) {\n const box = {\n sideOffset: 0,\n width: 0,\n };\n\n if (this.variantsViewGroup != null && variantIndex != null && this.variants[0] != null && this.variants[1] != null) {\n const viewGroupWidth = this.variantsViewGroup.clientWidth;\n if (viewGroupWidth > 0) {\n let offset = 0;\n let variantViewMinWidth = 0;\n\n // get min offset for variantView from variants-view-group\n const variantView = this.variants[variantIndex];\n const label = variantView.querySelector(\".label\");\n const percentLabel = variantView.querySelector(\".percent-label\");\n\n if (label != null && percentLabel != null) {\n const variantViewWidth = variantView.clientWidth;\n const labelOffset = (variantViewWidth - label.clientWidth) / 2;\n const percentLabelOffset = (variantViewWidth - percentLabel.clientWidth) / 2;\n offset = Math.min(labelOffset, percentLabelOffset);\n variantViewMinWidth = Math.max(label.clientWidth, percentLabel.clientWidth);\n }\n\n box.sideOffset = (offset / viewGroupWidth) * 100;\n box.width = (variantViewMinWidth / viewGroupWidth) * 100;\n }\n }\n\n return box;\n }\n\n displayPercents(selectedVariantIndex: number, filled: boolean = false): void {\n let pollAllocation: WidgetPollSharedData[string] = [0, 0];\n let pollAllocationTs: number | undefined = undefined;\n const sharedData = this.sdkApi.getWidgetsSharedData<Widgets.Poll>(this.cardId, Widgets.Poll);\n if (sharedData && sharedData[this.elementId] != null && (isObject(sharedData[this.elementId]) || isArray(sharedData[this.elementId]))) {\n pollAllocation = sharedData[this.elementId];\n if (isObject(sharedData[this.elementId])) {\n pollAllocation = slice.call(Object.values(sharedData[this.elementId])) as unknown as WidgetPollSharedData[string];\n }\n pollAllocationTs = sharedData.ts;\n }\n\n // todo debug\n // pollAllocation[0] = 10;\n // pollAllocation[1] = 20;\n\n const pollDoneAt = this.localData[\"_p_g_\" + this.elementId + \"_done_at\"];\n\n if (pollAllocationTs === undefined || pollDoneAt === undefined || pollDoneAt > pollAllocationTs) {\n forEach(this.variants, (element, index) => {\n const key = index as 0 | 1;\n if (pollAllocation[key] === undefined || !isNumber(pollAllocation[key])) {\n pollAllocation[key] = 0;\n }\n if (selectedVariantIndex === key) {\n ++pollAllocation[key];\n }\n });\n }\n\n // calc percents\n let percents: Array<number> = [],\n total = 0;\n forEach(this.variants, (element, index) => {\n const key = index as 0 | 1;\n if (pollAllocation[key] !== undefined) {\n if (!isNumber(pollAllocation[key])) {\n percents[key] = parseInt(String(pollAllocation[key]));\n } else {\n percents[key] = pollAllocation[key];\n }\n\n if (!isNumber(percents[key]) || isNaN(percents[key])) {\n percents[key] = 0;\n }\n } else {\n percents[key] = 0;\n }\n total += percents[key];\n });\n for (let i = 0; i < percents.length; i++) {\n if (total !== 0) {\n percents[i] = Math.round((percents[i] / total) * 100);\n if (percents[i] > 100) {\n percents[i] = 100;\n }\n } else {\n percents[i] = 0;\n }\n }\n\n const percentsTotal = function () {\n let acc = 0;\n for (let i = 0; i < percents.length; i++) {\n acc += percents[i];\n }\n return acc;\n };\n\n const start = new Date().getTime();\n while (percentsTotal() > 100) {\n percents[percents.length - 1]--;\n if (new Date().getTime() - start >= 1000) {\n break;\n }\n }\n\n let variantWithMinPercentsRelativeWidth = 0;\n let variantWithMinPercentsIndex = null;\n forEach(this.variants, (element, index) => {\n const key = index as 0 | 1;\n const percent = percents[key];\n\n const variant = element;\n const maskedVariant = this.maskedVariants[key];\n\n if (this.selectedVariant === key) {\n variant.classList.add(\"selected\");\n if (maskedVariant != null) {\n maskedVariant.classList.add(\"selected\");\n }\n }\n\n const percentLabel = variant.querySelector(\".percent-label\");\n if (percentLabel != null) {\n percentLabel.innerHTML = percent + \"%\";\n }\n const maskedPercentLabel = maskedVariant?.querySelector(\".percent-label\");\n if (maskedPercentLabel != null) {\n maskedPercentLabel.innerHTML = percent + \"%\";\n }\n });\n\n const cb = () => {\n if (\n this.percentFillMask != null &&\n this.variants[0] != null &&\n this.variants[1] != null &&\n this.selectedVariant != null &&\n percents[this.selectedVariant] != null\n ) {\n const selectedVariantPercent = percents[this.selectedVariant];\n let limit = 0;\n let percent = 0;\n\n variantWithMinPercentsIndex = 0;\n if (percents[1] < percents[0]) {\n variantWithMinPercentsIndex = 1;\n }\n\n const boxPercents = this._getVariantBoxInPercent(variantWithMinPercentsIndex);\n variantWithMinPercentsRelativeWidth = boxPercents.width;\n\n let offset = 0;\n if (this.selectedVariant === 0) {\n if (this.isInvertedPercentFilledMaskDirection) {\n if (variantWithMinPercentsIndex === 1) {\n percent = Math.max(variantWithMinPercentsRelativeWidth, 100 - selectedVariantPercent);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, 100 - selectedVariantPercent);\n }\n offset = (50 - percent) / 2;\n\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(0));\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(percent));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n } else {\n if (variantWithMinPercentsIndex === 0) {\n // real variant percent or variantView min width\n percent = Math.max(selectedVariantPercent, variantWithMinPercentsRelativeWidth);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, selectedVariantPercent);\n }\n offset = (50 - percent) / -2;\n\n // decrease alt color from start to firstVariant percents\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(percent));\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(0));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n }\n } else if (this.selectedVariant === 1) {\n if (this.isInvertedPercentFilledMaskDirection) {\n if (variantWithMinPercentsIndex === 0) {\n percent = Math.max(variantWithMinPercentsRelativeWidth, 100 - selectedVariantPercent);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, 100 - selectedVariantPercent);\n }\n offset = (50 - percent) / -2;\n\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(percent));\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(0));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n } else {\n // decrease alt color from end to secondVariant percents\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-start\", String(0));\n if (variantWithMinPercentsIndex === 1) {\n // real variant percent or variantView min width\n percent = Math.max(selectedVariantPercent, variantWithMinPercentsRelativeWidth);\n } else {\n limit = 100 - variantWithMinPercentsRelativeWidth;\n percent = Math.min(limit, selectedVariantPercent);\n }\n offset = (50 - percent) / 2;\n\n this.percentFillMask.style.setProperty(\"--selected-variant-view-clip-area-end\", String(percent));\n\n this.element.style.setProperty(\"--variants-view-group-offset\", String(offset));\n }\n }\n }\n };\n\n // if (filled) {\n // cb();\n // } else {\n // wait for percent render done (for calc correct variantView width)\n this.env.requestAnimationFrame(cb);\n // }\n }\n\n public setUserText(text: string, buttonPosition: \"first_button\" | \"second_button\"): void {\n this.slide.classList.remove(\"data-input-editing\");\n this.slide.classList.remove(\"blured\");\n\n if (this.selectedVariant != null) {\n this._selectVariant(this.selectedVariant);\n }\n\n if (!this.disableTimer && this.nativeDialogueWasOpened) {\n this.sdkApi.resumeUI();\n this.nativeDialogueWasOpened = false;\n }\n\n this.localData[\"_p_g_\" + this.elementId + \"_user_response_on_\" + buttonPosition] = text;\n this.completeWidget();\n\n this._statEventInputSave(text);\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_p_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // ответ на вопрос\n this.localData[\"_&ts_p_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_p_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public slidePollIsDone(): boolean {\n return this.localData[\"_p_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetPoll.widgetClassName,\n onRefreshUserData: WidgetPoll.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetPoll.initWidget<WidgetPoll, WidgetPollOptions>(\n element,\n localData,\n (element, options) => new WidgetPoll(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(element)?.onStop();\n },\n /**\n * click\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetPoll.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(widgetElement);\n if (widget) {\n return widget.selectVariant(element);\n }\n }\n return false;\n },\n slidePollIsDone: function (element: HTMLElement) {\n const widget = WidgetPoll.getInstance<WidgetPoll, WidgetPollOptions>(element);\n if (widget) {\n return widget.slidePollIsDone();\n }\n return true;\n },\n setUserData: function (id: string, text: string) {\n // id = widgetId_first || widgetId_second\n let correctWidgetId = id;\n let buttonPosition: \"first_button\" | \"second_button\" | undefined;\n if (id.endsWith(\"_first\")) {\n buttonPosition = \"first_button\";\n correctWidgetId = id.replace(/_first$/, \"\");\n } else if (id.endsWith(\"_second\")) {\n buttonPosition = \"second_button\";\n correctWidgetId = id.replace(/_second$/, \"\");\n }\n\n const widget = WidgetPoll.getInstanceById<WidgetPoll, WidgetPollOptions>(correctWidgetId);\n if (widget && buttonPosition) {\n widget.setUserText(text, buttonPosition);\n }\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetPollLayersOptions } from \"./poll_layers.h\";\n\nexport class WidgetPollLayers extends WidgetBase<WidgetPollLayersOptions> {\n static DEFAULTS: WidgetPollLayersOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n layers: [],\n };\n\n public static widgetClassName = \"narrative-element-poll-layers\";\n\n private label: HTMLElement | null;\n private readonly variants: Array<HTMLElement>;\n private variantsTexts: Array<string>;\n private selectedVariant: number | undefined;\n private readonly layers: Array<HTMLElement>;\n\n constructor(element: HTMLElement, options: Partial<WidgetPollLayersOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n this.layers = this.options.layers;\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view\"));\n\n this.variantsTexts = [];\n forEach(this.variants, (element, index) => {\n const label = element.querySelector(\".label\");\n if (label) {\n this.variantsTexts.push(label.textContent ?? \"\");\n }\n });\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n this.selectedVariant = undefined;\n\n if (this.slidePollIsDone()) {\n this._selectVariant(this.localData[\"_pl_g_\" + this.elementId + \"_sa\"]);\n } else {\n this._showLayer(this.layers, 0);\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _statEventPollVariant(): void {\n try {\n if (this.selectedVariant != null) {\n const labelText = this.label?.textContent ?? \"\";\n const variantText = this.variants[this.selectedVariant]?.textContent ?? \"\";\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-poll-layers-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedVariant,\n wal: variantText,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_variant: this.selectedVariant,\n widget_answer_label: variantText,\n duration_ms: duration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _selectVariant(index: number, userAction: boolean = false): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedVariant = index;\n\n this.localData[\"_pl_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n // main\n let layerIndex = 0;\n if (index === 0) {\n layerIndex = 1;\n } else if (index === 1) {\n layerIndex = 2;\n }\n\n this._showLayer(this.layers, layerIndex, userAction);\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n public selectVariant(variant: HTMLElement): boolean {\n if (this.selectedVariant !== undefined) {\n return true;\n }\n\n const index = this.variants.indexOf(variant);\n if (index !== -1) {\n this._selectVariant(index, true);\n this.completeWidget();\n this._statEventPollVariant();\n }\n return false;\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_pl_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // ответ на вопрос\n this.localData[\"_&ts_pl_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData != null && this.localData[\"_pl_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public slidePollIsDone(): boolean {\n return this.localData != null && this.localData[\"_pl_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetPollLayers.widgetClassName,\n onRefreshUserData: WidgetPollLayers.onRefreshUserData,\n init: function (\n element: HTMLElement,\n layers: Array<HTMLElement>,\n localData: Record<string, any>,\n onWidgetComplete: OnWidgetComplete,\n sdkApi: SDKApi\n ): void {\n WidgetPollLayers.initWidget<WidgetPollLayers, WidgetPollLayersOptions>(\n element,\n localData,\n (element, options) => new WidgetPollLayers(element, { ...options, layers }, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetPollLayers.getInstance<WidgetPollLayers, WidgetPollLayersOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetPollLayers.getInstance<WidgetPollLayers, WidgetPollLayersOptions>(element)?.onStop();\n },\n /**\n * click on poll variant\n * @param element\n * @returns {boolean}\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetPollLayers.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetPollLayers.getInstance<WidgetPollLayers, WidgetPollLayersOptions>(widgetElement);\n if (widget) {\n return widget.selectVariant(element);\n }\n }\n return false;\n },\n };\n}\n","import { determineLocale } from \"@utils\";\n\nexport type FormatterDatetimeOptions = {\n timezone?: string;\n};\n\nclass Formatter {\n private readonly intlSupport: boolean = false;\n\n public defaultTimeFormat: string = \"medium\";\n\n public defaultDatetimeFormat: string = \"medium\";\n\n public defaultDateFormat: string = \"medium\";\n\n private decimalSeparator: string = \".\";\n\n private thousandSeparator: string = \" \";\n\n private spaceSeparator: string = \" \";\n\n public static readonly Second = 1000;\n public static readonly Minute = 60 * Formatter.Second;\n public static readonly Hour = 60 * Formatter.Minute;\n public static readonly Day = 24 * Formatter.Hour;\n\n private datetimeFormatOptions: Record<string, Intl.DateTimeFormatOptions> = {\n short: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n },\n medium: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n },\n long: {\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"short\",\n },\n full: {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"long\",\n },\n };\n\n private dateFormatOptions: Record<string, Intl.DateTimeFormatOptions> = {\n short: {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n },\n medium: {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n },\n long: {\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n },\n full: {\n weekday: \"long\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n },\n };\n\n private timeFormatOptions: Record<string, Intl.DateTimeFormatOptions> = {\n short: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n },\n medium: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n },\n long: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"short\",\n },\n full: {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZoneName: \"long\",\n },\n };\n\n private readonly context;\n\n constructor(context: {\n determineLocale: () => string;\n i18n: { t: (key: string) => string; tc: (key: string, value: string | number) => string } | undefined;\n }) {\n this.intlSupport = typeof Intl === \"object\" && Intl !== null;\n this.context = context;\n }\n\n public asDate(value: any, format: string | undefined = undefined, options: FormatterDatetimeOptions = {}): string {\n if (!format) {\n format = this.defaultDateFormat;\n }\n return this.formatDateTimeValue(value, format, \"date\", options);\n }\n\n public asTime(value: any, format: string | undefined = undefined, options: FormatterDatetimeOptions = {}): string {\n if (!format) {\n format = this.defaultTimeFormat;\n }\n\n return this.formatDateTimeValue(value, format, \"time\", options);\n }\n\n public asDatetime(value: any, format: string | undefined = undefined, options: FormatterDatetimeOptions = {}): string {\n if (!format) {\n format = this.defaultTimeFormat;\n }\n\n return this.formatDateTimeValue(value, format, \"datetime\", options);\n }\n\n private formatDateTimeValue(\n value: any,\n format: string | undefined = undefined,\n type: string | undefined = undefined,\n options: FormatterDatetimeOptions = {}\n ): string {\n const normalizedValue: Date | null = Formatter.normalizeDatetimeValue(value);\n\n if (normalizedValue === null) {\n return \"\";\n }\n if (this.intlSupport) {\n let formatterOptions: Intl.DateTimeFormatOptions = {};\n if (type === \"date\") {\n if (typeof format === \"undefined\") {\n format = this.defaultDateFormat;\n }\n if (typeof format === \"object\") {\n formatterOptions = format;\n } else {\n if (format in this.dateFormatOptions) {\n formatterOptions = this.dateFormatOptions[format];\n } else {\n return this.momentFallback(normalizedValue, format, options);\n }\n }\n } else if (type === \"time\") {\n if (typeof format === \"undefined\") {\n format = this.defaultTimeFormat;\n }\n if (typeof format === \"object\") {\n formatterOptions = format;\n } else {\n if (format in this.timeFormatOptions) {\n formatterOptions = this.timeFormatOptions[format];\n } else {\n return this.momentFallback(normalizedValue, format, options);\n }\n }\n } else if (type === \"datetime\") {\n if (typeof format === \"undefined\") {\n format = this.defaultDatetimeFormat;\n }\n if (typeof format === \"object\") {\n formatterOptions = format;\n } else {\n if (format in this.datetimeFormatOptions) {\n formatterOptions = this.datetimeFormatOptions[format];\n } else {\n return this.momentFallback(normalizedValue, format, options);\n }\n }\n }\n\n if (options.timezone) {\n formatterOptions.timeZone = options.timezone;\n }\n\n const formatted = Intl.DateTimeFormat(this.locale, formatterOptions).format(normalizedValue);\n\n return Intl.DateTimeFormat(this.locale, formatterOptions).format(normalizedValue);\n }\n\n return \"\";\n }\n\n private momentFallback(value: Date, format: string, options: FormatterDatetimeOptions = {}): string {\n return value.toLocaleString(this.locale);\n // return this.context.$moment(value).format(format);\n }\n\n public asInteger(value: any): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n maximumFractionDigits: 0,\n useGrouping: true,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue, 0, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asDecimal(value: any, decimals: number | undefined = 2): string {\n if (value == null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n useGrouping: true,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asDecimalMax(value: any, decimals: number | undefined = 2): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n maximumFractionDigits: decimals,\n minimumFractionDigits: 0,\n useGrouping: true,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asPercent(value: any, decimals: number = 0): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n style: \"percent\",\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue * 100, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asPercentMax(value: any, decimals: number = 0): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (this.intlSupport) {\n return Intl.NumberFormat(this.locale, {\n style: \"percent\",\n maximumFractionDigits: decimals,\n minimumFractionDigits: 0,\n }).format(normalizedValue);\n }\n\n return Formatter.numberFormat(normalizedValue * 100, decimals, this.decimalSeparator, this.thousandSeparator);\n }\n\n public asRelativeTime(value: any, referenceTime: any = undefined): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n const normalizedValue = Formatter.normalizeDatetimeValue(value);\n if (normalizedValue == null) {\n return this.nullDisplay;\n }\n\n if (referenceTime === undefined || referenceTime === null) {\n referenceTime = new Date();\n } else {\n referenceTime = Formatter.normalizeDatetimeValue(value);\n }\n\n const dt = referenceTime.getTime() - normalizedValue.getTime();\n const absDt = Math.abs(dt);\n const invert = dt < 0;\n if (absDt < Formatter.Second) {\n return this.context.i18n?.t(\"format.relativeTime.justNow\").toString() ?? \"\";\n }\n\n const seconds = absDt / 1000;\n let interval = seconds / 31536000;\n\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.year\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 2592000;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.month\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 86400;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.day\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 3600;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.hour\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n interval = seconds / 60;\n if (interval > 1) {\n return this.context.i18n?.tc(\"format.relativeTime.minute\" + (invert ? \"In\" : \"Ago\"), Math.floor(interval)).toString() ?? \"\";\n }\n return this.context.i18n?.tc(\"format.relativeTime.second\" + (invert ? \"In\" : \"Ago\"), Math.floor(seconds)).toString() ?? \"\";\n }\n\n public asDuration(value: any) {\n if (value === undefined || value === null) {\n return \"00:00\";\n }\n const normalizedValue = Formatter.normalizeDatetimeValue(value);\n if (normalizedValue === undefined || normalizedValue === null) {\n return \"00:00\";\n }\n const hours = Math.floor(value / 3600);\n const minutes = Math.floor((value / 60) % 60);\n const seconds = value % 60;\n if (hours > 0) {\n return `${hours}:${minutes < 10 ? 0 : \"\"}${minutes}:${seconds < 10 ? 0 : \"\"}${seconds}`;\n } else {\n return `${minutes < 10 ? 0 : \"\"}${minutes}:${seconds < 10 ? 0 : \"\"}${seconds}`;\n }\n }\n\n public asCurrency(value: any, currency: string | undefined = undefined): string {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n if (currency === undefined || currency === null) {\n currency = \"USD\";\n }\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (normalizedValue == null) {\n return this.nullDisplay;\n }\n\n let decimals = 2;\n if (Number.isInteger(normalizedValue)) {\n decimals = 0;\n }\n\n if (currency === \"RUR\" || currency === \"RUB\") {\n return `${this.asDecimal(normalizedValue, decimals)}${this.spaceSeparator}₽`;\n }\n\n if (this.intlSupport) {\n try {\n return Intl.NumberFormat(this.locale, {\n style: \"currency\",\n currency,\n currencyDisplay: \"symbol\",\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n }).format(normalizedValue);\n } catch (e) {\n console.error(e);\n return String(normalizedValue);\n }\n }\n\n return currency + \" \" + this.asDecimal(normalizedValue, 2);\n }\n\n public asShortSizeCasual(value: any, dp: number = 1) {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (normalizedValue === undefined || normalizedValue === null) {\n return this.nullDisplay;\n }\n\n const thresh = 1024;\n if (Math.abs(value) < thresh) {\n return value + \" B\";\n }\n\n const units = [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n let u = -1;\n const r = 10 ** dp;\n\n do {\n value /= thresh;\n ++u;\n } while (Math.round(Math.abs(value) * r) / r >= thresh && u < units.length - 1);\n\n return value.toFixed(dp) + \" \" + units[u];\n }\n\n public asShortSize(value: any, si: boolean = false, dp: number = 1) {\n if (value === undefined || value === null) {\n return this.nullDisplay;\n }\n\n const normalizedValue = Formatter.normalizeNumericValue(value);\n if (normalizedValue === undefined || normalizedValue === null) {\n return this.nullDisplay;\n }\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(value) < thresh) {\n return value + \" B\";\n }\n\n const units = si ? [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"] : [\"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n value /= thresh;\n ++u;\n } while (Math.round(Math.abs(value) * r) / r >= thresh && u < units.length - 1);\n\n return value.toFixed(dp) + \" \" + units[u];\n }\n\n private static numberFormat(value: number, decimals: number = 0, decimalSeparator: string = \".\", thousandsSeparator: string): string {\n const sign = value < 0 ? \"-\" : \"\";\n\n const sNumber = Math.abs(parseInt((+value || 0).toFixed(decimals))) + \"\";\n const len = sNumber.length;\n const tchunk = len > 3 ? len % 3 : 0;\n\n const chFirst = tchunk ? sNumber.substr(0, tchunk) + thousandsSeparator : \"\";\n const chRest = sNumber.substr(tchunk).replace(/(\\d\\d\\d)(?=\\d)/g, \"$1\" + thousandsSeparator);\n const chLast = decimals ? decimalSeparator + (Math.abs(value) - parseFloat(sNumber)).toFixed(decimals).slice(2) : \"\";\n\n return sign + chFirst + chRest + chLast;\n }\n\n public get nullDisplay(): string {\n return \"\";\n // if (this.context && this.context.i18n) {\n // return this.context.i18n.t(\"notSet\").toString();\n // }\n //\n // return \"not set\";\n }\n\n private static normalizeDatetimeValue(value: any): Date | null {\n const type = typeof value;\n if (type === \"object\" && value instanceof Date) {\n return value;\n } else if (type === \"number\") {\n return new Date(value);\n } else if (type === \"string\") {\n if (isNaN(value)) {\n return new Date(parseInt(value));\n } else {\n const d = Date.parse(value);\n if (isNaN(d)) {\n return null;\n }\n return new Date(d);\n }\n }\n return null;\n }\n\n private static normalizeNumericValue(value: any): number {\n const type = typeof value;\n if ((type === \"object\" && value === null) || type === \"undefined\") {\n return 0;\n } else if (type === \"number\") {\n return value;\n }\n return parseFloat(value);\n }\n\n public get locale(): string {\n return this.context.determineLocale();\n }\n}\n\nexport const formatter = new Formatter({ determineLocale, i18n: undefined });\n","export const enum SwipeGesture {\n undefined,\n Tap,\n SwipeUp,\n SwipeDown,\n SwipeLeft,\n SwipeRight,\n}\n\nexport class SwipeGestureDetector {\n constructor(\n private readonly env: Window,\n private readonly isScreenSupportsTouch: boolean,\n private readonly canContinueHandleDown: (e: MouseEvent | TouchEvent) => boolean,\n private readonly onStart: (e: MouseEvent | TouchEvent) => void,\n private readonly onUpdate: (e: MouseEvent | TouchEvent) => void,\n private readonly onEnd: (e: MouseEvent | TouchEvent, gesture: SwipeGesture) => void\n ) {\n // Store context\n this.handleDown = this.handleDown.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleEnd = this.handleEnd.bind(this);\n\n this.supportsTouch = false;\n\n if (this.isScreenSupportsTouch) {\n this.env.document.addEventListener(\"touchstart\", this.handleDown, false);\n } else {\n this.env.document.addEventListener(\"mousedown\", this.handleDown, false);\n }\n }\n\n startPageCoordinate = [0, 0];\n limit = Math.tan(((45 * 1.5) / 180) * Math.PI);\n pageWidth = window.innerWidth || document.body.clientWidth;\n threshold = Math.max(1, Math.floor(0.01 * this.pageWidth));\n supportsTouch = false;\n\n handleDown(e: MouseEvent | TouchEvent) {\n // console.log(\"handleDown\", {e, startPageCoordinate: this.startPageCoordinate})\n if (!this.canContinueHandleDown(e)) {\n return;\n }\n\n this.startPageCoordinate = this.getPageCoordinate(e);\n\n if (this.isScreenSupportsTouch) {\n this.env.document.addEventListener(\"touchmove\", this.handleMove, false);\n this.env.document.addEventListener(\"touchend\", this.handleEnd, false);\n } else {\n this.env.document.addEventListener(\"mousemove\", this.handleMove, false);\n this.env.document.addEventListener(\"mouseup\", this.handleEnd, false);\n }\n\n this.onStart(e);\n }\n\n handleMove(e: MouseEvent | TouchEvent) {\n // console.log(\"handleMove\", { startPageCoordinate: this.startPageCoordinate})\n // this.currentPageCoordinate = this.getPageCoordinate(e);\n this.onUpdate(e);\n }\n\n handleEnd(e: MouseEvent | TouchEvent) {\n if (this.isScreenSupportsTouch) {\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n } else {\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n }\n\n const currentPageCoordinate = this.getPageCoordinate(e);\n\n let gesture = SwipeGesture.undefined;\n const x = currentPageCoordinate[0] - this.startPageCoordinate[0];\n const y = currentPageCoordinate[1] - this.startPageCoordinate[1];\n\n // console.log(\"handleEnd\", {currentPageCoordinate, startPageCoordinate: this.startPageCoordinate})\n\n let xy = Math.abs(x / y);\n let yx = Math.abs(y / x);\n if (Math.abs(x) > this.threshold || Math.abs(y) > this.threshold) {\n if (yx <= this.limit) {\n if (x < 0) {\n gesture = SwipeGesture.SwipeLeft;\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeLeft\", yx, x, threshold: this.threshold}), true);\n } else {\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeRight\", yx, x, threshold: this.threshold}), true);\n gesture = SwipeGesture.SwipeRight;\n }\n }\n if (xy <= this.limit) {\n if (y < 0) {\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeUp\", xy, y, threshold: this.threshold}), true);\n gesture = SwipeGesture.SwipeUp;\n } else {\n // @ts-ignore\n // _log(JSON.stringify({t: \"SwipeDown\", xy, y, threshold: this.threshold}), true);\n gesture = SwipeGesture.SwipeDown;\n }\n }\n } else {\n // @ts-ignore\n // _log(JSON.stringify({t: \"Tap\", x, y, threshold: this.threshold}), true);\n gesture = SwipeGesture.Tap;\n }\n\n this.onEnd(e, gesture);\n }\n\n destroy() {\n if (this.isScreenSupportsTouch) {\n this.env.document.removeEventListener(\"touchstart\", this.handleDown);\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n } else {\n this.env.document.removeEventListener(\"mousedown\", this.handleDown);\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n }\n }\n\n private getPageCoordinate(e: MouseEvent | TouchEvent): [number, number] {\n let x = 0;\n let y = 0;\n\n if ((e as MouseEvent)[\"clientX\"] != null && (e as MouseEvent)[\"clientY\"] != null) {\n x = (e as MouseEvent)[\"clientX\"];\n y = (e as MouseEvent)[\"clientY\"];\n } else if (\n (e as TouchEvent).touches &&\n (e as TouchEvent).touches[0] &&\n (e as TouchEvent).touches[0][\"clientX\"] != null &&\n (e as TouchEvent).touches[0][\"clientY\"] != null\n ) {\n x = (e as TouchEvent).touches[0][\"clientX\"];\n y = (e as TouchEvent).touches[0][\"clientY\"];\n } else if (\n (e as TouchEvent).changedTouches &&\n (e as TouchEvent).changedTouches[0] &&\n (e as TouchEvent).changedTouches[0][\"clientX\"] != null &&\n (e as TouchEvent).changedTouches[0][\"clientY\"] != null\n ) {\n x = (e as TouchEvent).changedTouches[0][\"clientX\"];\n y = (e as TouchEvent).changedTouches[0][\"clientY\"];\n }\n // @ts-ignore\n else if (e.currentPoint && e.currentPoint[\"x\"] != null && e.currentPoint[\"y\"] != null) {\n // @ts-ignore\n x = e.currentPoint[\"x\"];\n // @ts-ignore\n y = e.currentPoint[\"y\"];\n }\n\n return [x, y];\n }\n}\n","import { SDKApi } from \"@skd_api\";\nimport { addClass, FilterNumber, getTagData, isObject, isScreenSupportsTouch, removeClass } from \"@utils\";\nimport { formatter } from \"../../formatter\";\nimport { SwipeGesture, SwipeGestureDetector } from \"../../SwipeGestureDetector\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetProductsOptions } from \"./products.h\";\n\ntype OfferModel = {\n id: number;\n offerId: string;\n name?: string;\n description?: string;\n price?: string;\n oldPrice?: string;\n currency?: string;\n availability: number; // * 0 - OUT_OF_STOCK * 1 - IN_STOCK * 2 - PREORDER * 3 - BACKORDER\n adult?: boolean;\n coverUrl?: string;\n url?: string;\n};\n\nexport type ProductsWidgetOptions = {\n productsList: ProductsListOptions;\n productsCard: ProductsCardOptions;\n loader: {\n default: {\n color: string;\n accentColor: string;\n };\n custom?: string;\n };\n};\n\nexport type ProductsCardOptions = {\n mainTextColor: string;\n oldPriceTextColor: string;\n imageBackgroundColor: string;\n imageCornerRadius: number;\n titleFont?: string;\n subtitleFont?: string;\n priceFont?: string;\n oldPriceFont?: string;\n};\n\nexport type ProductsListOptions = {\n closeBackgroundColor: string;\n closeImage?: string;\n substrateHeight: number;\n substrateColor: string;\n dimColor: string;\n};\n\nconst ProductsWidgetOptionsDefault: ProductsWidgetOptions = {\n productsList: {\n closeBackgroundColor: \"#000000\",\n substrateHeight: 200,\n substrateColor: \"#FFFFFF\",\n dimColor: \"rgba(0, 0, 0, 0.5)\",\n },\n productsCard: {\n mainTextColor: \"#000000\",\n oldPriceTextColor: \"#CCCCCC\",\n imageBackgroundColor: \"transparent\",\n imageCornerRadius: 8,\n },\n loader: {\n default: {\n color: \"gray\",\n accentColor: \"transparent\",\n },\n },\n};\n\n/**\n * adult: null\n * availability: 1\n * coverUrl: \"https://cdn.test.inappstory.com/np/file/cf/wb/wc/vcaji5clqon3nkwdwle3cjz63x.jpg?k=KgAAAAAAAAACAQ\"\n * currency: \"RUR\"\n * description: \"Непромокаемый комбинезон - дождевик детский Муссон\"\n * id: 204\n * name: \"Непромокаемый комбинезон - дождевик детский \\\"Муссон\\\"\"\n * offerId: \"10125\"\n * oldPrice: null\n * price: \"2690.0000\"\n * url: \"http://www.songnomik.ru/products/detskaya-odezhda-optom-dlya-novorozhdennyh/detskie-kombinezony-optom/2166483.html\"\n */\n\nexport class WidgetProducts extends WidgetBase<WidgetProductsOptions> {\n static DEFAULTS: WidgetProductsOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-products\";\n\n private themeName: string | null;\n private baseThemeName: string | null;\n\n private readonly captionView: HTMLElement | null;\n private readonly linkTarget: Array<number> = [];\n private readonly msgNetworkError: string | undefined;\n private readonly msgServiceError: string | undefined;\n\n private swipeGestureDetector: SwipeGestureDetector | null = null;\n private isClickCapturedByWidget: boolean = false;\n private readonly isScreenSupportsTouch: boolean = false;\n\n constructor(element: HTMLElement, options: Partial<WidgetProductsOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.captionView = this.element.querySelector(\".narrative-element-text-lines\");\n\n const linkTarget = decodeURIComponent(getTagData(element, \"linkTarget\") ?? \"[]\");\n try {\n let parsed = JSON.parse(linkTarget);\n if (Array.isArray(parsed)) {\n this.linkTarget = parsed.filter(FilterNumber);\n }\n } catch (e) {\n console.error(e);\n }\n\n const themeClasses = Array.from(this.element.classList).filter(item => item.startsWith(\"theme-\") || item.startsWith(\"base-theme-\"));\n themeClasses.forEach(item => {\n if (item.startsWith(\"theme-\") && this.themeName == null) {\n this.themeName = item;\n }\n if (item.startsWith(\"base-theme-\") && this.baseThemeName == null) {\n this.baseThemeName = item;\n }\n });\n\n this.isScreenSupportsTouch = isScreenSupportsTouch(this.env);\n\n this.msgNetworkError = getTagData(this.element, \"msgNetworkError\");\n this.msgServiceError = getTagData(this.element, \"msgServiceError\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n }\n\n public onStart(): void {\n super.onStart();\n\n // reinit for case when we returned to slide from other slide and onStop destroyed SwipeGestureDetector\n this.initSwipeGestureDetector();\n }\n\n private isTransparentElement(): boolean {\n if (this.element) {\n try {\n const color = window.getComputedStyle(this.element).color;\n if (color === \"transparent\" || color === \"rgba(0, 0, 0, 0)\" || color === \"rgba(0,0,0,0)\") {\n return true;\n }\n } catch (err) {\n console.error(err);\n }\n }\n return false;\n }\n\n private _statEventWidgetClick(): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n this.sendStatisticEventToApp(\n \"w-products-click\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: JSON.stringify(this.linkTarget),\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: this.linkTarget,\n },\n {\n forceEnableStatisticV2: true,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventWidgetOpen(offers: Array<OfferModel>): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n this.sendStatisticEventToApp(\n \"w-products-open\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: JSON.stringify(this.linkTarget),\n wit: JSON.stringify(offers.map(item => item.offerId)),\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: this.linkTarget,\n widget_items: offers.map(item => item.offerId),\n },\n {\n forceEnableStatisticV2: true,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private _statEventWidgetCardClick(offer: OfferModel): void {\n try {\n const captionViewText = this.captionView?.textContent ?? \"\";\n this.sendStatisticEventToApp(\n \"w-products-card-click\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: captionViewText,\n wv: offer.offerId,\n wvi: offer.id,\n },\n {\n ...this.statisticEventBaseFieldsShortForm,\n widget_id: this.elementId,\n widget_label: captionViewText,\n widget_value: offer.offerId,\n widget_value_id: offer.id,\n },\n {\n forceEnableStatisticV2: true,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public async fetchProducts(): Promise<{ message: string; models: Array<OfferModel> }> {\n const fetchAndCacheMedia = async (): Promise<{ message: string; models: Array<OfferModel> }> => {\n if (!this.linkTarget.length) {\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n\n const path = `product/offer?id=${this.linkTarget.join(\",\")}`;\n const headers = {\n accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n };\n const profileKey = \"fetch-products\";\n\n try {\n const response = await this.sdkApi.sendApiRequest<Array<OfferModel>>(path, \"GET\", null, headers, null, profileKey);\n // console.log({response});\n const status = response.status;\n\n if (status === 200 || status === 201) {\n if (response.data && Array.isArray(response.data) && response.data.length > 0) {\n try {\n await this.cacheOffersMediaResources(response.data);\n } catch (error) {\n console.error(error);\n }\n return { message: \"\", models: response.data };\n } else {\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n } else if (status === 12163 || status === 12002) {\n return { message: this.msgNetworkError ?? \"\", models: [] };\n } else {\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n } catch (error) {\n console.error(error);\n return { message: this.msgServiceError ?? \"\", models: [] };\n }\n };\n\n return Promise.all([\n fetchAndCacheMedia(),\n new Promise<void>(t => {\n return setTimeout(t, 200);\n }),\n ]).then(([result]) => result);\n }\n\n private cacheOffersMediaResources(offers: Array<OfferModel>): Promise<Array<void>> {\n const cacheItem = (offer: OfferModel) => {\n return new Promise<void>(resolve => {\n if (offer.coverUrl != null) {\n this.env\n .fetch(offer.coverUrl)\n .then(response => {\n if (response != null && response.ok) {\n response\n .blob()\n .then(blob => {\n offer.coverUrl = URL.createObjectURL(blob);\n resolve();\n })\n .catch(resolve);\n } else {\n resolve();\n }\n })\n .catch(resolve);\n } else {\n resolve();\n }\n });\n };\n\n const promises = offers.map(cacheItem);\n return Promise.all(promises);\n }\n\n private revokeOffersMediaResources(offers: Array<OfferModel>): void {\n offers.forEach(offer => {\n if (offer.coverUrl != null) {\n // todo check if coverUrl really is object URL\n URL.revokeObjectURL(offer.coverUrl);\n }\n });\n }\n\n private initSwipeGestureDetector(): void {\n if (this.isOpen) {\n if (this.swipeGestureDetector == null) {\n this.swipeGestureDetector = new SwipeGestureDetector(\n this.env,\n this.isScreenSupportsTouch,\n // detect gestures started on backdrop view\n (e: MouseEvent | TouchEvent) =>\n e.target instanceof HTMLElement ? e.target.classList.contains(\"ias-products-container-backdrop-view\") : true,\n e => {\n // this.isClickCapturedByWidget = true;\n return;\n },\n e => {\n return;\n },\n (e, gesture: SwipeGesture) => {\n if (gesture === SwipeGesture.SwipeDown) {\n this.closeProductsView();\n }\n // this.env.requestAnimationFrame(() => {\n // this.isClickCapturedByWidget = false;\n // });\n }\n );\n }\n }\n }\n\n private productsView: HTMLElement | null = null;\n private isOpen = false;\n\n public get isForcePaused(): boolean {\n return this.isOpen;\n }\n\n private currentModels: Array<OfferModel> = [];\n\n public async openProductsView() {\n if (this.isOpen) {\n return;\n }\n this._statEventWidgetClick();\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n\n if (!this.isTransparentElement()) {\n this.element.classList.add(\"loader\");\n }\n\n // const start = window.performance.now();\n\n const result = await this.fetchProducts();\n // @ts-ignore\n // _log(`fetched for ${window.performance.now() - start}ms`, true);\n\n // console.log({result})\n\n if (result.models.length > 0) {\n this.currentModels = result.models;\n this.productsView = this.createProductsView(this.currentModels, this.closeProductsView.bind(this));\n this.productsView.classList.add(\"ias-products-container-view--visible\");\n this.slide.appendChild(this.productsView);\n this.element.classList.add(\"hidden\");\n this.isOpen = true;\n // prevent next slide navigation gesture\n this.isClickCapturedByWidget = true;\n this.sdkApi.disableHorizontalSwipeGesture();\n this.sdkApi.disableVerticalSwipeGesture();\n this.sdkApi.disableBackpress();\n this._statEventWidgetOpen(this.currentModels);\n this.initSwipeGestureDetector();\n } else {\n if (result.message) {\n this.sdkApi.showToast(result.message);\n }\n }\n\n this.element.classList.remove(\"loader\");\n }\n\n public closeProductsView(): void {\n if (!this.isOpen) {\n return;\n }\n\n this.productsView?.classList.add(\"ias-products-container-view--hidden\");\n this.element.classList.remove(\"hidden\");\n this.isClickCapturedByWidget = false;\n this.sdkApi.enableHorizontalSwipeGesture();\n if (this.swipeGestureDetector != null) {\n this.swipeGestureDetector.destroy();\n this.swipeGestureDetector = null;\n }\n\n this.sdkApi.enableVerticalSwipeGesture();\n this.sdkApi.enableBackpress();\n const onClosed = () => {\n this.productsView?.removeEventListener(\"animationend\", onClosed);\n this.productsView?.parentElement?.removeChild(this.productsView);\n\n this.revokeOffersMediaResources(this.currentModels);\n\n if (!this.disableTimer) {\n this.sdkApi.resumeUI();\n }\n\n this.isOpen = false;\n this.currentModels = [];\n };\n this.productsView?.addEventListener(\"animationend\", onClosed);\n }\n\n private createCardView(offer: OfferModel) {\n const figure = document.createElement(\"div\");\n figure.classList.add(\"ias-products-card-figure\");\n if (offer.coverUrl) {\n const image = document.createElement(\"img\");\n image.classList.add(\"ias-products-card-figure-image\");\n image.alt = offer.name ?? \"\";\n image.src = offer.coverUrl;\n\n figure.appendChild(image);\n }\n const imageMask = document.createElement(\"div\");\n imageMask.classList.add(\"ias-products-card-figure-image-mask\");\n figure.appendChild(imageMask);\n\n // const subTitle = document.createElement(\"div\");\n // subTitle.classList.add(\"ias-products-card-subtitle\");\n // subTitle.innerText = offer.description ?? \"\";\n\n const title = document.createElement(\"div\");\n title.classList.add(\"ias-products-card-title\");\n title.innerText = offer.name ?? \"\";\n\n let price: HTMLElement | null = null;\n if (offer.price && offer.currency) {\n price = document.createElement(\"div\");\n price.classList.add(\"ias-products-card-price\");\n price.innerHTML = formatter.asCurrency(offer.price, offer.currency);\n }\n\n let oldPrice: HTMLElement | null = null;\n if (offer.oldPrice && offer.currency) {\n oldPrice = document.createElement(\"div\");\n oldPrice.classList.add(\"ias-products-card-old-price\");\n oldPrice.innerHTML = formatter.asCurrency(offer.oldPrice, offer.currency);\n }\n\n const prices = document.createElement(\"div\");\n prices.classList.add(\"ias-products-card-prices\");\n if (price) {\n prices.appendChild(price);\n }\n if (oldPrice) {\n prices.appendChild(oldPrice);\n }\n\n const card = document.createElement(\"div\");\n card.classList.add(\"ias-products-card\");\n card.onclick = e => {\n // prevent click in SDK (slide/story navigation)\n e.stopPropagation();\n e.preventDefault();\n this._statEventWidgetCardClick(offer);\n if (offer.url) {\n this.sdkApi.openUrl({ type: \"link\", link: { type: \"url\", target: offer.url } });\n }\n };\n\n card.appendChild(figure);\n // card.appendChild(subTitle);\n card.appendChild(prices);\n card.appendChild(title);\n\n return card;\n }\n\n private createScrollView(offers: Array<OfferModel>) {\n const scrollViewGroup = document.createElement(\"div\");\n scrollViewGroup.classList.add(\"ias-products-scroll-view-group\");\n\n const scrollView = document.createElement(\"div\");\n scrollView.classList.add(\"ias-products-scroll-view\");\n offers.forEach(offer => scrollView.appendChild(this.createCardView(offer)));\n scrollViewGroup.appendChild(scrollView);\n\n if (!this.isScreenSupportsTouch) {\n const { scrollLeft, scrollRight, mountScrollControls } = this.createScrollControls(scrollView);\n\n const scrollControlsView = document.createElement(\"div\");\n scrollControlsView.classList.add(\"ias-products-scroll-controls-view\");\n\n const scrollControlStartView = document.createElement(\"div\");\n scrollControlStartView.classList.add(\"ias-products-scroll-control-start-view\");\n const scrollControlStartIconView = document.createElement(\"div\");\n scrollControlStartIconView.classList.add(\"ias-products-scroll-control-start-icon-view\");\n scrollControlStartView.appendChild(scrollControlStartIconView);\n scrollControlsView.appendChild(scrollControlStartView);\n scrollControlStartView.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n if (this.layoutDirection === \"ltr\") {\n scrollLeft();\n } else {\n scrollRight();\n }\n };\n\n const scrollControlEndView = document.createElement(\"div\");\n scrollControlEndView.classList.add(\"ias-products-scroll-control-end-view\");\n const scrollControlEndIconView = document.createElement(\"div\");\n scrollControlEndIconView.classList.add(\"ias-products-scroll-control-end-icon-view\");\n scrollControlEndView.appendChild(scrollControlEndIconView);\n scrollControlsView.appendChild(scrollControlEndView);\n scrollControlEndView.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n if (this.layoutDirection === \"ltr\") {\n scrollRight();\n } else {\n scrollLeft();\n }\n };\n mountScrollControls(() => scrollViewGroup.appendChild(scrollControlsView));\n }\n return scrollViewGroup;\n }\n\n private createProductsView(offers: Array<OfferModel>, onClose: () => void) {\n const containerView = document.createElement(\"div\");\n containerView.classList.add(\"ias-products-container-view\");\n if (this.baseThemeName) {\n containerView.classList.add(this.baseThemeName);\n }\n if (this.themeName) {\n containerView.classList.add(this.themeName);\n }\n containerView.dir = this.layoutDirection;\n\n const backdropView = document.createElement(\"div\");\n backdropView.classList.add(\"ias-products-container-backdrop-view\");\n backdropView.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n onClose();\n };\n\n const backgroundView = document.createElement(\"div\");\n backgroundView.classList.add(\"ias-products-container-background-view\");\n\n const scrollView = this.createScrollView(offers);\n\n const closeButton = document.createElement(\"div\");\n closeButton.classList.add(\"ias-products-container-close-button\");\n // fill=${ProductsWidgetOptionsDefault.productsList.closeBackgroundColor}\n closeButton.innerHTML = `<svg width=\"32\" height=\"12.5\" viewBox=\"0 0 64 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M56.293 1.23375C58.054 -0.41125 60.846 -0.41125 62.607 1.23375C64.464 2.96775 64.464 5.85675 62.607 7.59075L35.157 23.2288C33.396 24.8738 30.604 24.8738 28.843 23.2288L1.393 7.59075C0.494002 6.75175 0 5.62775 0 4.41275C0 3.19775 0.494002 2.07375 1.393 1.23475C3.154 -0.410251 5.946 -0.410251 7.707 1.23475L32 13.9237L56.293 1.23375Z\" fill=\"currentColor\" /></svg>`;\n closeButton.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n onClose();\n };\n\n const divider = document.createElement(\"div\");\n\n backgroundView.appendChild(scrollView);\n backgroundView.appendChild(closeButton);\n backgroundView.appendChild(divider);\n\n containerView.appendChild(backdropView);\n containerView.appendChild(backgroundView);\n\n return containerView;\n }\n\n private scrollViewRef: HTMLElement | null = null;\n\n private getScrollLeft(): number {\n if (this.scrollViewRef != null) {\n return this.scrollViewRef.scrollLeft;\n }\n return 0;\n }\n\n private getScrollViewportWidth(): number {\n if (this.scrollViewRef != null) {\n return this.scrollViewRef.clientWidth;\n }\n return 0;\n }\n\n private setScrollLeft(value: number) {\n if (this.scrollViewRef != null) {\n this.scrollViewRef.scrollLeft = Math.round(value);\n }\n }\n\n private createScrollControls(scrollViewRef: HTMLElement): {\n scrollLeft: () => void;\n scrollRight: () => void;\n mountScrollControls: (cb: () => void) => void;\n } {\n this.scrollViewRef = scrollViewRef;\n return {\n scrollLeft: () => this.setScrollLeft(this.getScrollLeft() - this.getScrollViewportWidth()),\n scrollRight: () => this.setScrollLeft(this.getScrollLeft() + this.getScrollViewportWidth()),\n mountScrollControls: (cb: () => void) => this.env.requestAnimationFrame(() => scrollViewRef.scrollWidth > scrollViewRef.clientWidth && cb()),\n };\n }\n\n public getIsClickCapturedByWidget(): boolean {\n return this.isClickCapturedByWidget;\n }\n\n private destroy(): void {\n if (this.swipeGestureDetector != null) {\n this.swipeGestureDetector.destroy();\n this.swipeGestureDetector = null;\n }\n }\n\n public onStop(): void {\n super.onStop();\n\n this.destroy();\n }\n\n public static api = {\n widgetClassName: WidgetProducts.widgetClassName,\n onRefreshUserData: WidgetProducts.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetProducts.initWidget(element, localData, (element, options) => new WidgetProducts(element, options, onWidgetComplete, sdkApi));\n },\n onStart: function (element: HTMLElement) {\n WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n widget.openProductsView();\n }\n }\n return false;\n },\n isClickCapturedByWidget: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n return widget.getIsClickCapturedByWidget();\n }\n }\n return false;\n },\n isForcePaused: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n return widget.isForcePaused;\n }\n }\n return false;\n },\n onHandleBackpress: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetProducts.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetProducts.getInstance<WidgetProducts, WidgetProductsOptions>(widgetElement);\n if (widget) {\n widget.closeProductsView();\n }\n }\n return false;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagData, getTagDataAsNumber, getValueOrDefault, getValueOrException, hasClass, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetQuestOptions } from \"./quest.h\";\n\nexport class WidgetQuest extends WidgetBase<WidgetQuestOptions> {\n static DEFAULTS: WidgetQuestOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-quest\";\n\n private selectedAnswer: number | undefined;\n protected label: HTMLElement | null;\n protected variants: Array<HTMLElement>;\n private readonly isWidget: boolean;\n private readonly slideCount: number;\n private readonly nonFinalSlide?: boolean;\n private readonly navigationNextSlide?: number;\n private readonly slideDisabledNavigation: boolean;\n private readonly finalSlide: boolean;\n\n constructor(element: HTMLElement, options: Partial<WidgetQuestOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n const isWidget = !hasClass(element, \"narrative-slide\");\n const elementIdGetter = (element: HTMLElement) => getValueOrDefault(getTagData(element, \"elementId\"), \"\");\n const slideGetter = (element: HTMLElement) =>\n isWidget ? getValueOrException(element.closest<HTMLElement>(\".narrative-slide\"), \"Empty slide\") : element;\n\n super(element, options, onWidgetComplete, sdkApi, elementIdGetter, slideGetter);\n\n this.isWidget = isWidget;\n this.slideCount = getTagDataAsNumber(this.slide, \"slideCount\") ?? 0;\n const nonFinalSlide = getTagDataAsNumber(this.slide, \"nonFinalSlide\");\n if (nonFinalSlide != null) {\n this.nonFinalSlide = Boolean(nonFinalSlide);\n }\n this.finalSlide = !this.isWidget && !this.nonFinalSlide;\n this.navigationNextSlide = getTagDataAsNumber(this.slide, \"navigationNextSlide\");\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view\"));\n this.slideDisabledNavigation = Boolean(getTagDataAsNumber(this.slide, \"disableNavigation\") ?? 0);\n\n this.selectedAnswer = undefined;\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n }\n\n private setCardSessionValue(name: string, value: string): void {\n this.sdkApi.setCardSessionValue(this.element, name, value);\n }\n\n private getCardSessionValue(name: string): string | undefined {\n return this.sdkApi.getCardSessionValue(this.element, name);\n }\n\n private init(): boolean {\n if (this.localData) {\n if (this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] !== undefined) {\n // this._selectAnswer(this.localData['_t_g_' + this.elementId + '_sa']);\n // setLocalData(this.localData, false);\n }\n\n if (this.localData[\"_qt_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_qt_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n\n let lastSlideIdx = this.localData[\"_qt_last_slide_idx\"];\n if (lastSlideIdx !== undefined) {\n lastSlideIdx = parseInt(lastSlideIdx);\n if (\n lastSlideIdx >= 0 &&\n lastSlideIdx < this.slideCount &&\n lastSlideIdx !== this.slideIndex /*&& this.slideIndex === this.firstSlideWithQuestIndex()*/\n ) {\n if (this.getCardSessionValue(\"__storyQuestSlideChanged\") === undefined) {\n // global flag - был сделан переход на нужный слайд, больше не нужно повторять за эту сессию\n // perform showStorySlide with lastSlideIdx only on story open first time (not on second slide, etc)\n this.setCardSessionValue(\"__storyQuestSlideChanged\", \"1\");\n\n if (this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(lastSlideIdx);\n return false;\n }\n }\n }\n }\n\n // only for widget v1\n if (this.nonFinalSlide != null) {\n // если этого слайда нет в роутинге (сработал переход по таймеру в app)\n const routes = this._getRoutes();\n if (routes[0].indexOf(this.slideIndex) === -1 && this.finalSlide) {\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n return false;\n }\n }\n }\n\n // сбор роутинга - все же в selectAnswer\n // + pointer - set in select answer and in simple history back naviation\n\n // Общее поле в сторис - latest slide with viewed quest item\n // только если находимся в диапазоне квеста\n this.localData[\"_qt_last_slide_idx\"] = this.slideIndex;\n // global flag - был сделан переход на нужный слайд, больше не нужно повторять за эту сессию\n this.setCardSessionValue(\"__storyQuestSlideChanged\", \"1\");\n\n // если перешли на слайд (через кнопку - на слайд например) то не будет истории в роутере\n // добавляем сами\n if (this.getLastSlideIndexFromRouteHistory() !== this.slideIndex) {\n this._addNewRouteHistory(this.slideIndex);\n }\n\n this.setLocalData(this.localData, true);\n }\n\n this.firstOpenTime = new Date().getTime();\n\n return true;\n }\n\n private _selectAnswer(index: number, slideIndex: number): void {\n // if (this.answers[index]) {\n // this.answers[index].classList.add('selected');\n // }\n\n this.selectedAnswer = index;\n\n if (this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] === undefined || !Array.isArray(this.localData[\"_qt_g_\" + this.elementId + \"_sa\"])) {\n this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] = [];\n }\n this.localData[\"_qt_g_\" + this.elementId + \"_sa\"].push([index, slideIndex, Math.round(new Date().getTime() / 1000)]);\n // ответ на вопрос\n this.localData[\"_&ts_qt_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.element.classList.add(\"done\");\n\n this._addNewRouteHistory(slideIndex);\n }\n\n public selectAnswer(answer: HTMLElement): boolean {\n // if (this.selectedAnswer !== undefined) {\n // return true;\n // }\n\n const index = this.variants.indexOf(answer);\n if (index !== -1) {\n const slideIndex = getValueOrDefault(getTagDataAsNumber(this.variants[index], \"score\"), 0) - 1;\n\n this._selectAnswer(index, slideIndex);\n this.setLocalData(this.localData, true);\n\n this.env.setTimeout(() => {\n if (slideIndex >= 0 && slideIndex < this.slideCount && this.sdkApi.isExistsShowCardSlide) {\n // global flag - был сделан переход на нужный слайд, больше не нужно повторять за эту сессию\n this.setCardSessionValue(\"__storyQuestSlideChanged\", \"1\");\n this.sdkApi.showCardSlide(slideIndex);\n }\n }, 100);\n }\n\n return true;\n }\n\n public isDone(): boolean {\n return this.localData[\"_qt_done_at\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n public slideQuestIsDone(): boolean {\n return this.localData[\"_qt_g_\" + this.elementId + \"_sa\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n private firstSlideWithQuestIndex(): number {\n return getTagDataAsNumber(this.slide, \"firstSlideWithQuest\") ?? 0;\n }\n\n private lastSlideWithQuestIndex(): number {\n return getTagDataAsNumber(this.slide, \"lastSlideWithQuest\") ?? 0;\n }\n\n private _getRoutes() {\n let routes = this.localData[\"_qt_routes\"];\n if (!Array.isArray(routes)) {\n routes = [[0], 0];\n }\n return routes;\n }\n\n private _addNewRouteHistory(route: number): void {\n const routes = this._getRoutes();\n const _routes = routes[0].slice(0, routes[1] + 1);\n routes[0] = _routes.concat([route]);\n routes[1] = routes[0].length - 1;\n this.localData[\"_qt_routes\"] = routes;\n }\n\n private _routeMvPtrBack() {\n const routes = this._getRoutes();\n const newPtr = routes[1] - 1;\n if (newPtr >= 0 && routes[0][newPtr] !== undefined) {\n routes[1] = newPtr;\n this.localData[\"_qt_routes\"] = routes;\n this.setLocalData(this.localData, true);\n return routes[0][newPtr];\n }\n return false;\n }\n\n private getLastSlideIndexFromRouteHistory() {\n const routes = this._getRoutes();\n return routes[0][routes[1]];\n }\n\n // переделать в handleRouteTrigger\n // не завязываться на click, сделать через коллбэк - default action\n private handleRouteClick(event: { direction: \"backward\" | \"forward\"; slideIndex: number; slideCount: number }): {\n continueDefaultNavigation: boolean;\n } {\n const result = { continueDefaultNavigation: false };\n let moveTo;\n // event: direction ('backward', 'forward') slideIndex, slideCount\n const directionForward = event.direction === \"forward\";\n const directionBackward = event.direction === \"backward\";\n\n if (this.isWidget) {\n // like in web-sdk - simple block tap navigation at all\n if (this.slideDisabledNavigation) {\n return result;\n }\n if (directionForward) {\n return result;\n } else {\n if (event.slideIndex === 0) {\n // can click back\n result.continueDefaultNavigation = true;\n return result;\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n return result;\n }\n } else {\n // like in web-sdk - simple block tap navigation at all\n if (this.slideDisabledNavigation) {\n return result;\n }\n\n if (this.nonFinalSlide == null) {\n // widget v2 (with navigationNextSlide)\n\n if (directionForward) {\n if (this.navigationNextSlide === -1) {\n // this is the final slide - exit from this quest\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n result.continueDefaultNavigation = false;\n return result;\n }\n const nextSlideIndex = this.navigationNextSlide ?? event.slideIndex + 1;\n if (nextSlideIndex < this.slideCount) {\n this._addNewRouteHistory(nextSlideIndex);\n this.setLocalData(this.localData, true);\n this.sdkApi.showCardSlide(nextSlideIndex);\n } else {\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n }\n } else {\n if (event.slideIndex === 0) {\n // move to prev slide\n result.continueDefaultNavigation = true;\n return result;\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n }\n } else {\n // widget v1 (with nonFinalSlide)\n\n // slides without a quest form\n // simple slide case\n if (this.nonFinalSlide || event.slideIndex < this.firstSlideWithQuestIndex()) {\n if (directionForward) {\n const nextSlideIndex = event.slideIndex + 1;\n if (nextSlideIndex < this.slideCount) {\n this._addNewRouteHistory(nextSlideIndex);\n this.setLocalData(this.localData, true);\n this.sdkApi.showCardSlide(nextSlideIndex);\n } else {\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n }\n } else {\n if (event.slideIndex === 0) {\n // move to prev slide\n result.continueDefaultNavigation = true;\n return result;\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n }\n } else {\n // quest final slide\n if (directionForward) {\n // если клик вперед по финальному слайду из любой ветки - то выходим из сторис\n // var nextSlideIndex = this.lastSlideWithQuestIndex() + 1;\n // if (nextSlideIndex < this.slideCount) {\n // this._addNewRouteHistory(nextSlideIndex);\n // setLocalData(this.localData, true);\n // window._showNarrativeSlide(nextSlideIndex);\n // } else {\n\n if (this.sdkApi.isExistsShowNextCard) {\n this.sdkApi.cardShowNext();\n }\n // }\n } else {\n // by routing - move back\n moveTo = this._routeMvPtrBack();\n if (moveTo !== false && moveTo >= 0 && moveTo < event.slideCount && this.sdkApi.isExistsShowCardSlide) {\n this.sdkApi.showCardSlide(moveTo);\n }\n if (moveTo === false && this.sdkApi.isExistsShowCardSlide) {\n // allow move to start - for broken route history\n this.sdkApi.showCardSlide(0);\n }\n }\n }\n }\n }\n return result;\n }\n\n public static api = {\n widgetClassName: WidgetQuest.widgetClassName,\n onRefreshUserData: WidgetQuest.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): Promise<boolean> {\n return new Promise(function (resolve, reject) {\n WidgetQuest.initWidget<WidgetQuest, WidgetQuestOptions>(\n element,\n localData,\n (element, options) => new WidgetQuest(element, options, onWidgetComplete, sdkApi)\n ).then(localData => {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element);\n if (widget) {\n resolve(widget.init());\n } else {\n resolve(true);\n }\n });\n });\n },\n onStart: function (element: HTMLElement) {\n WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element)?.onStop();\n },\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetQuest.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n return false;\n },\n slideTestIsDone: function (element: HTMLElement): boolean {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element);\n if (widget) {\n return widget.slideQuestIsDone();\n }\n return true;\n },\n handleRouteClick: function (\n element: HTMLElement,\n event: { direction: \"backward\" | \"forward\"; slideIndex: number; slideCount: number }\n ): { continueDefaultNavigation: boolean } {\n const widget = WidgetQuest.getInstance<WidgetQuest, WidgetQuestOptions>(element);\n if (widget) {\n return widget.handleRouteClick(event);\n }\n return { continueDefaultNavigation: true };\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getTagDataAsNumber, getValueOrException, slice } from \"@utils\";\nimport { WidgetQuizOptions } from \"./quiz.h\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\n\nexport class WidgetQuiz extends WidgetBase<WidgetQuizOptions> {\n static DEFAULTS: WidgetQuizOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-quiz\";\n\n private readonly question: HTMLElement | null;\n private readonly answers: Array<HTMLElement>;\n private readonly questionCount: number;\n private selectedAnswer: number | undefined;\n\n constructor(element: HTMLElement, options: Partial<WidgetQuizOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.question = this.element.querySelector<HTMLElement>(\".label-view .label\");\n this.answers = slice.call(this.element.querySelectorAll(\".variants-box .variant-view-group\"));\n this.questionCount = getValueOrException(getTagDataAsNumber(this.slide, \"quizCount\"), \"Empty quizCount\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedAnswer = undefined;\n\n if (this.localData) {\n if (this.localData[\"_q_g_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectAnswer(this.localData[\"_q_g_\" + this.elementId + \"_sa\"]);\n this.setLocalData(this.localData, false);\n } else {\n this._clearAnswerSelection();\n }\n\n if (this.localData[\"_q_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_q_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _selectAnswer(index: number): void {\n // var hintContainer = null;\n // var hintContainerHeight = null;\n if (this.answers[index]) {\n this.answers[index].classList.add(\"selected\");\n\n // hintContainer = this.answers[index].nextSibling;\n // if (hintContainer && hintContainer.classList.contains('narrative-element-quiz-answer-hint-container')) {\n // hintContainerHeight = hintContainer.getBoundingClientRect().height;\n // hintContainer.style.height = 0;\n // }\n }\n\n this.selectedAnswer = index;\n\n this.localData[\"_q_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n\n // if (hintContainer && hintContainerHeight && window.requestAnimationFrame) {\n // requestAnimationFrame(function() {\n // requestAnimationFrame(function() {\n // hintContainer.style.height = hintContainerHeight + 'px';\n // })\n // })\n // }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearAnswerSelection(): void {\n forEach(this.answers, function (answer) {\n answer.classList.remove(\"selected\");\n });\n\n this.selectedAnswer = undefined;\n\n this.element.classList.remove(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n }\n });\n }\n\n public selectAnswer(answer: HTMLElement): boolean {\n if (this.selectedAnswer !== undefined) {\n return true;\n }\n\n const selectedAnswerIndex = this.answers.indexOf(answer);\n if (selectedAnswerIndex !== -1) {\n this._selectAnswer(selectedAnswerIndex);\n\n const isCorrect = this.answers[selectedAnswerIndex].classList.contains(\"check\");\n\n this.localData[\"q_score\"] = (this.localData[\"q_score\"] === undefined ? 0 : this.localData[\"q_score\"]) + (isCorrect ? 1 : 0);\n\n let answeredQuestion = 0;\n for (const key in this.localData) {\n if (this.localData.hasOwnProperty(key)) {\n if (/^_q_g_[A-z0-9-_]+_sa$/.test(key)) {\n answeredQuestion++;\n }\n }\n }\n if (this.localData[\"_q_fa_at\"] === undefined) {\n this.localData[\"_q_fa_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n if (answeredQuestion === this.questionCount) {\n this.localData[\"_q_done_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n // ответ на вопрос\n this.localData[\"_&ts_q_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n const self = this;\n setTimeout(function () {\n self.widgetDone?.classList.remove(\"active\");\n setTimeout(function () {\n self.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n try {\n const questionText = this.question ? this.question.textContent ?? \"\" : \"\";\n let answerText = \"\";\n if (this.answers[selectedAnswerIndex]) {\n const answerLabel = this.answers[selectedAnswerIndex].querySelector(\".variant-view .label\");\n if (answerLabel != null && answerLabel.textContent != null) {\n answerText = answerLabel.textContent;\n }\n }\n\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-quiz-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: questionText,\n wa: selectedAnswerIndex,\n wal: answerText,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: questionText,\n widget_answer: selectedAnswerIndex,\n widget_answer_label: answerText,\n duration_ms: duration,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n return false;\n }\n\n public isDone(): boolean {\n return this.localData[\"_q_done_at\"] !== undefined;\n }\n\n public slideQuizIsDone(): boolean {\n return this.localData[\"_q_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetQuiz.widgetClassName,\n onRefreshUserData: WidgetQuiz.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetQuiz.initWidget<WidgetQuiz, WidgetQuizOptions>(\n element,\n localData,\n (element, options) => new WidgetQuiz(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(element)?.onStop();\n },\n /**\n * click on quiz answer\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetQuiz.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n return false;\n },\n slideQuizIsDone: function (element: HTMLElement) {\n const widget = WidgetQuiz.getInstance<WidgetQuiz, WidgetQuizOptions>(element);\n if (widget) {\n return widget.slideQuizIsDone();\n }\n return true;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getTagDataAsNumber, getValueOrDefault, getValueOrException, slice } from \"@utils\";\nimport { WidgetQuizGroupedOptions } from \"./quiz_grouped.h\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\n\nexport class WidgetQuizGrouped extends WidgetBase<WidgetQuizGroupedOptions> {\n static DEFAULTS = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-quiz-grouped\";\n\n private readonly question: HTMLElement | null;\n private readonly answers: Array<HTMLElement>;\n private readonly questionCount: number;\n private selectedAnswer: number | undefined;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n * @param sdkApi\n */\n constructor(element: HTMLElement, options: Partial<WidgetQuizGroupedOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.question = this.element.querySelector<HTMLElement>(\".label-view .label\");\n this.answers = slice.call(this.element.querySelectorAll(\".variants-box .variant-view-group\"));\n this.questionCount = getValueOrException(getTagDataAsNumber(this.slide, \"quizCount\"), \"Empty quizCount\");\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedAnswer = undefined;\n\n if (this.localData) {\n if (this.localData[\"_q_gg_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectAnswer(this.localData[\"_q_gg_\" + this.elementId + \"_sa\"]);\n // this._updateScore(this.localData['_q_gg_' + this.elementId + '_sa']);\n this.setLocalData(this.localData, false);\n } else {\n this._clearAnswerSelection();\n }\n\n if (this.localData[\"_qg_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_qg_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _selectAnswer(index: number): void {\n if (this.answers[index]) {\n this.answers[index].classList.add(\"selected\");\n }\n\n this.selectedAnswer = index;\n\n this.localData[\"_q_gg_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearAnswerSelection() {\n forEach(this.answers, function (answer) {\n answer.classList.remove(\"selected\");\n });\n\n this.selectedAnswer = undefined;\n\n this.element.classList.remove(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n }\n });\n }\n\n private _updateScore(index: number) {\n const answerValue = getValueOrDefault(getTagDataAsNumber(this.answers[index], \"value\"), index);\n\n if (this.localData[\"qg_score\"] == null) {\n this.localData[\"qg_score\"] = {};\n }\n\n let sum = 0;\n for (let i = 0; i < this.answers.length; i++) {\n if (this.localData[\"qg_score\"][i] == null) {\n this.localData[\"qg_score\"][i] = 0;\n }\n sum += this.localData[\"qg_score\"][i];\n }\n\n // если еще не ответили на все\n if (sum < this.questionCount) {\n this.localData[\"qg_score\"][answerValue] += 1;\n\n let answeredQuestion = 0;\n for (const key in this.localData) {\n if (this.localData.hasOwnProperty(key)) {\n if (/^_q_gg_[A-z0-9-_]+_sa$/.test(key)) {\n answeredQuestion++;\n }\n }\n }\n if (this.localData[\"_qg_fa_at\"] === undefined) {\n this.localData[\"_qg_fa_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n if (this.localData[\"_qg_done_at\"] === undefined) {\n if (answeredQuestion === this.questionCount) {\n this.localData[\"_qg_done_at\"] = Math.round(new Date().getTime() / 1000);\n }\n }\n\n // ответ на вопрос\n this.localData[\"_&ts_qg_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n }\n }\n\n private selectAnswer(answer: HTMLElement): boolean {\n if (this.selectedAnswer != null) {\n return true;\n }\n\n const selectedAnswerIndex = this.answers.indexOf(answer);\n if (selectedAnswerIndex !== -1) {\n this._selectAnswer(selectedAnswerIndex);\n this._updateScore(selectedAnswerIndex);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n try {\n const questionText = this.question ? this.question.textContent ?? \"\" : \"\";\n let answerText = \"\";\n if (this.answers[selectedAnswerIndex]) {\n const answerLabel = this.answers[selectedAnswerIndex].querySelector(\".variant-view .label\");\n if (answerLabel != null) {\n answerText = answerLabel.textContent ?? \"\";\n }\n }\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-quiz-grouped-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: questionText,\n wa: selectedAnswerIndex,\n wal: answerText,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: questionText,\n widget_answer: selectedAnswerIndex,\n widget_answer_label: answerText,\n duration_ms: duration,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n return false;\n }\n\n public isDone(): boolean {\n return this.localData[\"_qg_done_at\"] !== undefined;\n }\n\n public slideQuizIsDone(): boolean {\n return this.localData[\"_q_gg_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetQuizGrouped.widgetClassName,\n onRefreshUserData: WidgetQuizGrouped.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetQuizGrouped.initWidget<WidgetQuizGrouped, WidgetQuizGroupedOptions>(\n element,\n localData,\n (element, options) => new WidgetQuizGrouped(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(element)?.onStop();\n },\n /**\n * click on quiz answer\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetQuizGrouped.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n\n return false;\n },\n slideQuizIsDone: function (element: HTMLElement) {\n const widget = WidgetQuizGrouped.getInstance<WidgetQuizGrouped, WidgetQuizGroupedOptions>(element);\n if (widget) {\n return widget.slideQuizIsDone();\n }\n return true;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagData, getValueOrException, isArray, isNumber, isObject, proxy } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase, Widgets } from \"../base\";\nimport { WidgetRangeSliderOptions, WidgetRangeSliderSharedData } from \"./range_slider.h\";\n\n// Polyfill Number.isNaN(value)\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\nNumber.isNaN =\n Number.isNaN ||\n function (value) {\n return typeof value === \"number\" && value !== value;\n };\n\n/**\n * Range feature detection\n * @return {Boolean}\n */\nfunction supportsRange(env: Window) {\n const input = env.document.createElement(\"input\");\n input.setAttribute(\"type\", \"range\");\n return input.type !== \"text\";\n}\n\nconst constants = {\n orientation: {\n horizontal: {\n dimension: \"width\",\n direction: \"left\",\n directionStyle: {\n ltr: \"left\",\n rtl: \"right\",\n },\n coordinate: \"x\",\n },\n vertical: {\n dimension: \"height\",\n direction: \"top\",\n directionStyle: {\n ltr: \"bottom\",\n rtl: \"bottom\",\n },\n coordinate: \"y\",\n },\n },\n} as const;\n\n/**\n * Delays a function for the given number of milliseconds, and then calls\n * it with the arguments supplied.\n */\nfunction delay(env: Window, fn: Function, wait: number): number {\n const args = Array.prototype.slice.call(arguments, 2);\n return env.setTimeout(function () {\n return fn.apply(null, args);\n }, wait);\n}\n\n/**\n * Returns a debounced function that will make sure the given\n * function is not triggered too much.\n *\n * @param {Window} env\n * @param {Function} fn Function to debounce.\n * @param {Number} debounceDuration OPTIONAL. The amount of time in milliseconds for which we will debounce the function. (defaults to 100ms)\n * @return {Function}\n */\nfunction debounce(\n env: Window,\n fn: Function & {\n debouncing?: boolean;\n lastReturnVal?: any;\n debounceTimeout?: number;\n },\n debounceDuration: number\n) {\n debounceDuration = debounceDuration || 100;\n return function () {\n if (!fn.debouncing) {\n const args = Array.prototype.slice.apply(arguments);\n fn.lastReturnVal = fn.apply(env, args);\n fn.debouncing = true;\n }\n env.clearTimeout(fn.debounceTimeout);\n fn.debounceTimeout = env.setTimeout(function () {\n fn.debouncing = false;\n }, debounceDuration);\n return fn.lastReturnVal;\n };\n}\n\n/**\n * Check if a `element` is visible in the DOM\n *\n * @param {Element} element\n * @return {Boolean}\n */\nfunction isHidden(element: (HTMLElement & { open?: boolean }) | null) {\n return Boolean(\n element &&\n (element.offsetWidth === 0 ||\n element.offsetHeight === 0 ||\n // Also Consider native `<details>` elements.\n element.open === false)\n );\n}\n\n/**\n * Get hidden parentNodes of an `element`\n *\n * @param {Element} element\n * @return {[type]}\n */\nfunction getHiddenParentNodes(element: HTMLElement) {\n let parents = [],\n node = element.parentNode as HTMLElement;\n\n while (isHidden(node)) {\n parents.push(node);\n node = node.parentNode as HTMLElement;\n }\n return parents;\n}\n\n/**\n * Returns dimensions for an element even if it is not visible in the DOM.\n *\n * @param {Element} element\n * @param {String} key (e.g. offsetWidth …)\n * @return {Number}\n */\nfunction getDimension(element: HTMLElement, key: \"offsetWidth\" | \"offsetHeight\"): number {\n const hiddenParentNodes = getHiddenParentNodes(element),\n hiddenParentNodesLength = hiddenParentNodes.length,\n inlineStyle = [];\n\n // Used for native `<details>` elements\n function toggleOpenProperty(element: HTMLElement & { open?: boolean }) {\n if (typeof element.open !== \"undefined\") {\n element.open = !Boolean(element.open);\n }\n }\n\n // if (hiddenParentNodesLength) {\n // for (var i = 0; i < hiddenParentNodesLength; i++) {\n //\n // // Cache style attribute to restore it later.\n // inlineStyle[i] = hiddenParentNodes[i].style.cssText;\n //\n // // visually hide\n // if (hiddenParentNodes[i].style.setProperty) {\n // hiddenParentNodes[i].style.setProperty('display', 'block', 'important');\n // } else {\n // hiddenParentNodes[i].style.cssText += ';display: block !important';\n // }\n // hiddenParentNodes[i].style.height = '0';\n // hiddenParentNodes[i].style.overflow = 'hidden';\n // hiddenParentNodes[i].style.visibility = 'hidden';\n // toggleOpenProperty(hiddenParentNodes[i]);\n // }\n //\n // // Update dimension\n // dimension = element[key];\n //\n // for (var j = 0; j < hiddenParentNodesLength; j++) {\n //\n // // Restore the style attribute\n // hiddenParentNodes[j].style.cssText = inlineStyle[j];\n // toggleOpenProperty(hiddenParentNodes[j]);\n // }\n // }\n return element[key];\n}\n\n/**\n * Returns the parsed float or the default if it failed.\n *\n * @param {String} str\n * @param {Number} defaultValue\n * @return {Number}\n */\nfunction tryParseFloat(str: string | undefined | null, defaultValue: number): number {\n if (str == null) {\n return defaultValue;\n }\n const value = parseFloat(str);\n return Number.isNaN(value) ? defaultValue : value;\n}\n\n/**\n * Capitalize the first letter of string\n *\n * @param {String} str\n * @return {String}\n */\nfunction ucfirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.substr(1);\n}\n\nfunction insertAfter(elem: HTMLElement, refElem: HTMLElement): HTMLElement | undefined {\n return refElem.parentNode?.insertBefore(elem, refElem.nextSibling);\n}\n\nexport class WidgetRangeSlider extends WidgetBase<WidgetRangeSliderOptions> {\n static DEFAULTS: WidgetRangeSliderOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n\n rangeClass: \"slider-view\",\n rangeBackgroundClass: \"slider-background-view\",\n activeClass: \"rangeslider--active\",\n horizontalClass: \"rangeslider--horizontal\",\n verticalClass: \"rangeslider--vertical\",\n fillClass: \"slider-fill-view\",\n handleClass: \"slider-handle-view\",\n };\n\n public static widgetClassName = \"narrative-element-range-slider\";\n\n private label: HTMLElement | null;\n private readonly topScale: HTMLElement | null;\n\n private readonly startValue: number;\n private readonly snapPosition: boolean;\n private readonly hasSubmitButton: boolean;\n private elementSlider: HTMLInputElement;\n private readonly elementAverageResult: HTMLElement | null;\n private readonly elementAverageResultTooltip: HTMLElement | null;\n private readonly elementAverageResultTooltipLabelView: HTMLElement | null;\n private readonly orientation: \"horizontal\" | \"vertical\";\n private min: number;\n private max: number;\n private value: number;\n private step: number;\n private readonly toFixed: number;\n private fill: HTMLElement;\n private readonly handle: HTMLElement;\n private readonly range: HTMLElement;\n private readonly rangeBgView: HTMLElement;\n private readonly DIMENSION: \"width\" | \"height\";\n private readonly DIRECTION: \"left\" | \"top\";\n private DIRECTION_STYLE: \"left\" | \"right\";\n private readonly COORDINATE: \"x\" | \"y\";\n private isClickCapturedBySlider: boolean = false;\n private handleDimension: number;\n private rangeDimension: number;\n private maxHandlePos: number;\n private grabPos: number;\n private position: number;\n private prevSnapValue: number;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n */\n constructor(element: HTMLElement, options: Partial<WidgetRangeSliderOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.hasSubmitButton = Boolean(this.element.querySelector(\".submit-button-view\"));\n this.topScale = this.element.querySelector(\".top-scale-bar-view-group\");\n this.snapPosition = false;\n try {\n this.snapPosition = this.topScale != null && this.topScale.getBoundingClientRect().height > 0;\n } catch (e) {\n console.error(e);\n }\n this.startValue = tryParseFloat(getTagData(this.element, \"startValue\"), 0);\n this.label = this.element.querySelector(\".label-view .label\");\n this.elementSlider = getValueOrException(this.element.querySelector<HTMLInputElement>('input[type=\"range\"]'), \"Empty elementSlider\");\n\n this.elementAverageResult = this.element.querySelector(\".slider-average-result-view\");\n if (this.elementAverageResult != null) {\n this.elementAverageResultTooltip = this.elementAverageResult.querySelector(\".tooltip-view\");\n if (this.elementAverageResultTooltip != null) {\n this.elementAverageResultTooltipLabelView = this.elementAverageResult.querySelector(\".average-result-label-view\");\n }\n }\n\n this.toFixed = (this.step + \"\").replace(\".\", \"\").length - 1;\n this.fill = getValueOrException(this.element.querySelector<HTMLElement>(`.${this.options.fillClass}`), `Empty .${this.options.fillClass}`);\n this.handle = getValueOrException(this.element.querySelector<HTMLElement>(`.${this.options.handleClass}`), `Empty .${this.options.handleClass}`);\n this.range = getValueOrException(this.element.querySelector<HTMLElement>(`.${this.options.rangeClass}`), `Empty .${this.options.rangeClass}`);\n this.range.id = this.id;\n this.rangeBgView = getValueOrException(\n this.element.querySelector<HTMLElement>(`.${this.options.rangeBackgroundClass}`),\n `Empty .${this.options.rangeBackgroundClass}`\n );\n\n // if (this.range.classList.contains(this.options['horizontalClass'])) {\n this.orientation = \"horizontal\";\n // } else if (this.range.classList.contains(this.options['verticalClass'])) {\n // this.orientation = 'vertical';\n // }\n\n // enable expanded tap area (disabled by default for backward compatibility)\n this.element.classList.add(\"width-expanded-slider-tap-area\");\n\n this.DIMENSION = constants.orientation[this.orientation].dimension;\n this.DIRECTION = constants.orientation[this.orientation].direction;\n this.DIRECTION_STYLE = constants.orientation[this.orientation].directionStyle[this.layoutDirection];\n this.COORDINATE = constants.orientation[this.orientation].coordinate;\n\n // Store context\n this.handleDown = proxy(this.handleDown, this);\n this.handleMove = proxy(this.handleMove, this);\n this.handleEnd = proxy(this.handleEnd, this);\n\n // Attach Events\n // window.addEventListener('resize.' + this.identifier, debounce(function() {\n // // Simulate resizeEnd event.\n // delay(function() {\n // _this.update(false, false);\n // }, 300);\n // }, 20));\n }\n\n private isTouchListenersInit = false;\n\n private initTouchListeners() {\n if (!this.isTouchListenersInit) {\n this.env.document.addEventListener(\"touchstart\", this.handleDown);\n this.env.document.addEventListener(\"mousedown\", this.handleDown);\n this.isTouchListenersInit = true;\n }\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n if (this.localData[\"_rs_g_\" + this.elementId + \"_v\"] !== undefined) {\n this.elementSlider.value = String(tryParseFloat(this.localData[\"_rs_g_\" + this.elementId + \"_v\"], 0));\n this.element.classList.add(\"done\");\n this.displayAverageAnswer();\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n } else {\n this.elementSlider.value = String(this.startValue);\n this.element.classList.remove(\"done\");\n this.element.classList.remove(\"input-done\");\n }\n\n this.init();\n }\n\n public onStart() {\n super.onStart();\n\n this.initTouchListeners();\n }\n\n public onStop(): void {\n super.onStop();\n\n this.destroy();\n }\n\n private _statEventInputSave(val: number) {\n try {\n const labelText = this.label?.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-range-slider-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: val,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: val,\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n public click(): boolean {\n if (this.isDone()) {\n return true;\n }\n this.completeWidget();\n return false;\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_rs_g_\" + this.elementId + \"_v\"] = tryParseFloat(this.elementSlider.value, 0);\n this.localData[\"_rs_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // answer for question\n this.localData[\"_&ts_rs_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n // hide submit button\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n\n setTimeout(() => {\n // important, displayAverageAnswer need .done at element\n this.element.classList.add(\"done\");\n this.displayAverageAnswer(true);\n }, 200);\n } else {\n // important, displayAverageAnswer need .done at element\n this.element.classList.add(\"done\");\n this.displayAverageAnswer(true);\n }\n });\n\n // if (this.disableTimer) {\n this.onWidgetComplete();\n // }\n\n this.setLocalData(this.localData, true);\n this._statEventInputSave(this.localData[\"_rs_g_\" + this.elementId + \"_v\"]);\n }\n\n public isDone(): boolean {\n return this.localData[\"_rs_g_\" + this.elementId + \"_v\"] != null;\n }\n\n public getIsClickCapturedBySlider(): boolean {\n return this.isClickCapturedBySlider;\n }\n\n private displayAverageAnswer(withTooltip: boolean = false): void {\n let answerAllocation: WidgetRangeSliderSharedData[string] = {\n total_value: 0,\n total_user: 0,\n };\n let answerAllocationTs: number | undefined = undefined;\n const sharedData = this.sdkApi.getWidgetsSharedData<Widgets.RangeSlider>(this.cardId, Widgets.RangeSlider);\n if (sharedData && sharedData[this.elementId] != null && (isObject(sharedData[this.elementId]) || isArray(sharedData[this.elementId]))) {\n answerAllocation = sharedData[this.elementId];\n answerAllocationTs = sharedData.ts;\n }\n\n const rangeSliderDoneAt = this.localData[\"_rs_g_\" + this.elementId + \"_done_at\"];\n\n if (answerAllocationTs === undefined || rangeSliderDoneAt === undefined || rangeSliderDoneAt > answerAllocationTs) {\n answerAllocation[\"total_value\"] += this.localData[\"_rs_g_\" + this.elementId + \"_v\"];\n ++answerAllocation[\"total_user\"];\n }\n\n let averageValue: number | null = null;\n if (\n answerAllocation[\"total_user\"] !== undefined &&\n isNumber(answerAllocation[\"total_user\"]) &&\n answerAllocation[\"total_value\"] !== undefined &&\n isNumber(answerAllocation[\"total_value\"])\n ) {\n averageValue = Math.round((answerAllocation[\"total_value\"] / answerAllocation[\"total_user\"]) * 10) / 10;\n }\n\n if (this.elementAverageResult != null && averageValue !== null) {\n this.update(true, false);\n\n const positionDimension = this.env.document.documentElement.dir === \"rtl\" ? (\"right\" as const) : (\"left\" as const);\n\n const position = this.getPositionFromValue(averageValue) + this.handleDimension / 2;\n\n this.elementAverageResult.style[positionDimension] = position + \"px\";\n // this.elementAverageResult.style.display = 'block';\n if (withTooltip && this.elementAverageResultTooltipLabelView != null && this.element != null) {\n if (!this.elementAverageResultTooltip?.classList.contains(\"visible\")) {\n this.elementAverageResultTooltip?.classList.add(\"visible\");\n setTimeout(() => {\n if (this.elementAverageResultTooltip && this.elementAverageResultTooltip.classList) {\n this.elementAverageResultTooltip.classList.remove(\"visible\");\n }\n }, 3000);\n }\n\n this.env.requestAnimationFrame(() => {\n const elementBox = this.element.getBoundingClientRect();\n const labelViewBox = this.elementAverageResultTooltipLabelView?.getBoundingClientRect();\n let offset = 0;\n\n // console.log({labelViewBox, elementBox})\n\n if (labelViewBox && labelViewBox.width !== 0) {\n if (labelViewBox.right > elementBox.right) {\n // get -x for translateX with offset to left\n offset = elementBox.right - labelViewBox.right;\n } else if (labelViewBox.left < elementBox.left) {\n // get +x for translateX with offset to right\n offset = elementBox.left - labelViewBox.left;\n }\n }\n\n if (offset !== 0) {\n this.elementAverageResultTooltipLabelView?.style.setProperty(\"transform\", \"translateX(\" + offset + \"px)\");\n }\n });\n }\n }\n }\n\n private init(): void {\n if (!this.maxHandlePos) {\n this.env.setTimeout(() => {\n this.update(true, false);\n }, 10);\n } else {\n this.update(true, false);\n }\n }\n\n private update(updateAttributes: boolean, triggerSlide: boolean) {\n updateAttributes = updateAttributes || false;\n\n if (updateAttributes) {\n this.min = tryParseFloat(this.elementSlider.getAttribute(\"min\"), 0);\n this.max = tryParseFloat(this.elementSlider.getAttribute(\"max\"), 100);\n this.value = tryParseFloat(this.elementSlider.value, Math.round(this.min + (this.max - this.min) / 2));\n this.step = tryParseFloat(this.elementSlider.getAttribute(\"step\"), 1);\n }\n\n this.handleDimension = getDimension(this.handle, (\"offset\" + ucfirst(this.DIMENSION)) as \"offsetWidth\" | \"offsetHeight\");\n this.rangeDimension = getDimension(this.rangeBgView, (\"offset\" + ucfirst(this.DIMENSION)) as \"offsetWidth\" | \"offsetHeight\");\n // this.maxHandlePos = this.rangeDimension - this.handleDimension;\n this.maxHandlePos = this.rangeDimension;\n this.grabPos = this.handleDimension / 2;\n this.position = this.getPositionFromValue(this.value);\n\n if (updateAttributes) {\n // Snapping steps\n this.prevSnapValue = this.getValueFromPosition(this.cap(this.position, 0, this.maxHandlePos));\n }\n\n this.setPosition(this.position, triggerSlide);\n }\n\n private handleDown(e: MouseEvent | TouchEvent) {\n if (this.isDone()) {\n return;\n }\n\n let rangeslider: HTMLElement | null = e.target as HTMLElement;\n if (!rangeslider.classList.contains(\"slider-view\")) {\n rangeslider = rangeslider.closest<HTMLElement>(\".slider-view\");\n }\n\n if (!rangeslider) {\n return;\n }\n if (rangeslider.id !== this.id) {\n return;\n }\n e.preventDefault();\n\n this.isClickCapturedBySlider = true;\n this.sdkApi.disableHorizontalSwipeGesture();\n\n if (!this.maxHandlePos) {\n this.update(true, false);\n }\n\n this.env.document.addEventListener(\"touchmove\", this.handleMove);\n this.env.document.addEventListener(\"touchend\", this.handleEnd);\n\n this.env.document.addEventListener(\"mousemove\", this.handleMove);\n this.env.document.addEventListener(\"mouseup\", this.handleEnd);\n\n // add active class because Firefox is ignoring\n // the handle:active pseudo selector because of `e.preventDefault();`\n this.range.classList.add(this.options.activeClass);\n\n // If we click on the handle don't set the new position\n if ((\" \" + (e.target as HTMLElement).className + \" \").replace(/[\\n\\t]/g, \" \").indexOf(this.options.handleClass) > -1) {\n return;\n }\n\n const pos = this.getRelativePosition(e),\n rangePos = this.rangeBgView.getBoundingClientRect()[this.DIRECTION],\n handlePos = this.getPositionFromNode(this.handle) - rangePos,\n setPos = this.orientation === \"vertical\" ? this.maxHandlePos - (pos - this.grabPos) : pos - this.grabPos;\n\n this.setPosition(setPos);\n\n if (pos >= handlePos && pos < handlePos + this.handleDimension) {\n this.grabPos = pos - handlePos;\n }\n }\n\n private handleMove(e: MouseEvent | TouchEvent) {\n e.preventDefault();\n const pos = this.getRelativePosition(e);\n const setPos = this.orientation === \"vertical\" ? this.maxHandlePos - (pos - this.grabPos) : pos - this.grabPos;\n\n this.setPosition(setPos);\n }\n\n private handleEnd(e: MouseEvent | TouchEvent): void {\n this.env.requestAnimationFrame(() => {\n this.isClickCapturedBySlider = false;\n this.sdkApi.enableHorizontalSwipeGesture();\n });\n\n // e.preventDefault();\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n\n this.range.classList.remove(this.options.activeClass);\n\n this.element.classList.add(\"input-done\");\n\n if (!this.hasSubmitButton) {\n this.completeWidget();\n } else {\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n }\n\n // Ok we're done fire the change event\n // this.$element.trigger('change', {origin: this.identifier});\n }\n\n private cap = function (pos: number, min: number, max: number) {\n if (pos < min) {\n return min;\n }\n if (pos > max) {\n return max;\n }\n return pos;\n };\n\n private setPosition(pos: number, triggerSlide?: boolean) {\n let value, newPos;\n\n if (triggerSlide === undefined) {\n triggerSlide = true;\n }\n\n // Snapping steps\n value = this.getValueFromPosition(this.cap(pos, 0, this.maxHandlePos));\n newPos = this.getPositionFromValue(value);\n\n // Update ui\n let uiPos = newPos;\n // invert pos for rtl\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n uiPos = this.maxHandlePos + uiPos;\n }\n\n // this.rangeDimension - slider width\n this.fill.style.transform = \"translateX(\" + (uiPos - this.rangeDimension) + \"px)\";\n // this.fill.style.transform = \"translateX(\" + (uiPos + this.grabPos - this.rangeDimension) + \"px)\";\n // this.fill.style[this.DIMENSION] = (uiPos + this.grabPos) + 'px';\n const percentage = this.getPercentageFromValue(value);\n\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n // value 0% - offset = 0, value 100% - offset = -1*maxHandlePos\n uiPos = newPos - this.maxHandlePos;\n }\n this.handle.style.setProperty(\"--offset\", String(uiPos));\n this.handle.style.setProperty(\"--percentage\", String(percentage));\n\n // this.handle.style.transform = \"translateY(-50%) translateX(\" + uiPos + \"px) scale(calc(1 + (var(--scale-factor, 1) - 1) * \" + percentage + \"))\";\n\n // this.handle.style[this.DIRECTION_STYLE] = uiPos + 'px';\n\n this.setValue(value);\n\n // Update globals\n this.position = newPos;\n this.value = value;\n\n if (this.snapPosition) {\n const stepItem = String(Math.round(this.value / this.step));\n this.fill.setAttribute(\"data-step-item\", stepItem);\n\n if (this.value !== this.prevSnapValue) {\n this.prevSnapValue = this.value;\n\n try {\n this.sdkApi.vibrate(20);\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n\n // Returns element position relative to the parent\n private getPositionFromNode(node: HTMLElement | null) {\n let i = 0;\n while (node !== null) {\n i += node.offsetLeft;\n node = node.offsetParent as HTMLElement;\n }\n return i;\n }\n\n private getRelativePosition(e: MouseEvent | TouchEvent): number {\n // Get the offset DIRECTION relative to the viewport\n const ucCoordinate = ucfirst(this.COORDINATE) as \"X\" | \"Y\";\n const ucCoordinateClient = `client${ucCoordinate}` as \"clientX\" | \"clientY\";\n const rangePos = this.range.getBoundingClientRect()[this.DIRECTION];\n let pageCoordinate = 0;\n\n if (typeof (e as MouseEvent)[ucCoordinateClient] !== \"undefined\") {\n pageCoordinate = (e as MouseEvent)[ucCoordinateClient];\n } else if ((e as TouchEvent).touches && (e as TouchEvent).touches[0] && typeof (e as TouchEvent).touches[0][ucCoordinateClient] !== \"undefined\") {\n pageCoordinate = (e as TouchEvent).touches[0][ucCoordinateClient];\n // @ts-ignore\n } else if (e.currentPoint && typeof e.currentPoint[this.COORDINATE] !== \"undefined\") {\n // @ts-ignore\n pageCoordinate = e.currentPoint[this.COORDINATE];\n }\n\n return pageCoordinate - rangePos;\n }\n\n private getPercentageFromValue(value: number): number {\n let percentage;\n percentage = (value - this.min) / (this.max - this.min);\n return percentage;\n }\n\n private getPositionFromValue(value: number): number {\n let percentage, pos;\n percentage = (value - this.min) / (this.max - this.min);\n\n // invert pos for rtl\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n percentage = 1 - percentage;\n }\n\n pos = !Number.isNaN(percentage) ? percentage * this.maxHandlePos : 0;\n return pos;\n }\n\n private getValueFromPosition(pos: number): number {\n let percentage, value;\n percentage = pos / (this.maxHandlePos || 1);\n\n // invert pos for rtl\n if (this.orientation === \"horizontal\" && this.layoutDirection === \"rtl\") {\n percentage = 1 - percentage;\n }\n\n value = this.step * Math.round((percentage * (this.max - this.min)) / this.step) + this.min;\n return Number(value.toFixed(this.toFixed));\n }\n\n private setValue(value: number): void {\n if (value === this.value && this.elementSlider.value !== \"\") {\n return;\n }\n\n // Set the new value and fire the `input` event\n this.elementSlider.value = String(value);\n // .val(value)\n // .trigger('input', {origin: this.identifier});\n }\n\n private destroy(): void {\n this.env.document.removeEventListener(\"touchstart\", this.handleDown);\n this.env.document.removeEventListener(\"mousedown\", this.handleDown);\n\n this.env.document.removeEventListener(\"touchmove\", this.handleMove);\n this.env.document.removeEventListener(\"touchend\", this.handleEnd);\n\n this.env.document.removeEventListener(\"mousemove\", this.handleMove);\n this.env.document.removeEventListener(\"mouseup\", this.handleEnd);\n\n this.isTouchListenersInit = false;\n\n // off resize event\n // this.$window.off('.' + this.identifier);\n\n // this.$element\n // .off('.' + this.identifier)\n // .removeAttr('style')\n // .removeData('plugin_' + pluginName);\n }\n\n public static api = {\n widgetClassName: WidgetRangeSlider.widgetClassName,\n onRefreshUserData: WidgetRangeSlider.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetRangeSlider.initWidget<WidgetRangeSlider, WidgetRangeSliderOptions>(\n element,\n localData,\n (element, options) => new WidgetRangeSlider(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetRangeSlider.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(widgetElement);\n if (widget) {\n return widget.click();\n }\n }\n return true;\n },\n isClickCapturedBySlider: function (element: HTMLElement) {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetRangeSlider.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetRangeSlider.getInstance<WidgetRangeSlider, WidgetRangeSliderOptions>(widgetElement);\n if (widget) {\n return widget.getIsClickCapturedBySlider();\n }\n }\n return false;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, forEach, getElementBounding, getTagData, getTagDataAsNumber, getValueOrDefault, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetRateOptions } from \"./rate.h\";\n\nexport class WidgetRate extends WidgetBase<WidgetRateOptions> {\n static DEFAULTS: WidgetRateOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-rate\";\n\n private label: HTMLElement | null;\n private nativeDialogueWasOpened: boolean = false;\n private readonly stars: Array<HTMLElement>;\n private readonly submitToStores: boolean;\n private readonly submitToStoresMin: number;\n private readonly submitToStoresMax: number;\n private readonly showDialogOnLowRate: boolean;\n private readonly showDialogueMin: number;\n private readonly showDialogueMax: number;\n private selectedStar: number | undefined;\n private answerSelectDuration: number;\n private elementRect: DOMRect;\n\n constructor(element: HTMLElement, options: Partial<WidgetRateOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n this.stars = slice.call(this.element.querySelectorAll<HTMLElement>(\".input-view\"));\n\n this.submitToStores = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"submitToStores\"), 0));\n this.submitToStoresMin = getValueOrDefault(getTagDataAsNumber(this.element, \"submitToStoresMin\"), 4);\n this.submitToStoresMax = getValueOrDefault(getTagDataAsNumber(this.element, \"submitToStoresMax\"), 5);\n this.showDialogOnLowRate = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"showDialogOnLowRate\"), 0));\n this.showDialogueMin = getValueOrDefault(getTagDataAsNumber(this.element, \"showDialogueMin\"), 1);\n this.showDialogueMax = getValueOrDefault(getTagDataAsNumber(this.element, \"showDialogueMax\"), 3);\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n this.selectedStar = undefined;\n\n if (this.localData) {\n if (this.localData[\"_r_g_\" + this.elementId + \"_ss\"] !== undefined) {\n this._selectStar(this.localData[\"_r_g_\" + this.elementId + \"_ss\"], true);\n } else {\n this._clearSelectedStar();\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n this.answerSelectDuration = 0;\n\n this.nativeDialogueWasOpened = false;\n }\n\n private _statEventRateUsAnswer(answerText: string): void {\n try {\n const labelText = this.label?.textContent ?? \"\";\n\n if (this.selectedStar != null) {\n const selectedAnswer = this.selectedStar + 1;\n\n this.sendStatisticEventToApp(\n \"w-rate-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: selectedAnswer,\n wv: answerText,\n d: this.answerSelectDuration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: selectedAnswer,\n widget_value: answerText,\n duration_ms: this.answerSelectDuration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _selectStar(value: number, runTimer: boolean): void {\n const list = [];\n let i;\n for (i = 0; i < this.stars.length; i++) {\n list[i] = this.stars[i];\n }\n\n forEach(list, (element, idx) => {\n const key = idx as number;\n if (key <= value) {\n element.classList.add(\"fill\");\n }\n });\n\n if (list[value]) {\n list[value].classList.add(\"selected\");\n }\n\n this.selectedStar = value;\n\n this.localData[\"_r_g_\" + this.elementId + \"_ss\"] = value;\n\n this.element.classList.add(\"done\");\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer && runTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _clearSelectedStar(): void {\n forEach(this.stars, function (element) {\n element.classList.remove(\"fill\");\n element.classList.remove(\"selected\");\n });\n this.element.classList.remove(\"done\");\n }\n\n private selectStar(starElement: HTMLElement): boolean {\n if (this.selectedStar !== undefined) {\n return true;\n }\n\n const index = this.stars.indexOf(starElement);\n const length = this.stars.length;\n const value = index;\n // if (this.layoutDirection === 'rtl') {\n // value = length - index + 1;\n // }\n\n this.nativeDialogueWasOpened = false;\n\n if (value !== -1) {\n this.answerSelectDuration = new Date().getTime() - this.firstOpenTime;\n\n // 1-3 stars (default)\n if (value + 1 >= this.showDialogueMin && value + 1 <= this.showDialogueMax) {\n this.selectedStar = value;\n\n if (this.showDialogOnLowRate) {\n this.elementRect = this.element.getBoundingClientRect();\n\n this._selectStar(this.selectedStar, false);\n\n if (this.sdkApi.isAndroid) {\n this.slide.classList.add(\"blured\");\n }\n this.slide.classList.add(\"data-input-editing\");\n\n const dataString = this.element.dataset[\"clientdialogwidgetconfig\"];\n\n if (this.sdkApi.isExistsShowCardTextInput && dataString) {\n const data: Record<any, any> = JSON.parse(dataString);\n\n data.size = getElementBounding(this.env, this.elementRect);\n\n if (!this.disableTimer) {\n this.sdkApi.pauseUI();\n }\n this.nativeDialogueWasOpened = true;\n\n try {\n data.text.value = data.text.value.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.input.text.placeholder = data.input.text.placeholder.replaceAll(\"\\\\n\", \"\\n\").replaceAll(\"\\\\r\", \"\\r\").replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.question.text.value = data.configV2.main.question.text.value\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n data.configV2.main.input.text.placeholder = data.configV2.main.input.text.placeholder\n .replaceAll(\"\\\\n\", \"\\n\")\n .replaceAll(\"\\\\r\", \"\\r\")\n .replaceAll(\"\\\\t\", \"\\t\");\n } catch (e) {\n console.error(e);\n }\n\n this.sdkApi.showCardTextInput(this.id, data);\n }\n } else {\n this._selectStar(this.selectedStar, true);\n this.completeWidget();\n this._statEventRateUsAnswer(\"\");\n }\n\n return false;\n } else if (value + 1 >= this.submitToStoresMin && value + 1 <= this.submitToStoresMax) {\n let target = null;\n\n if (this.sdkApi.isAndroid) {\n target = getTagData(this.element, \"androidLink\");\n } else if (this.sdkApi.isIOS) {\n target = getTagData(this.element, \"appleLink\");\n }\n\n this._selectStar(value, true);\n this.completeWidget();\n this._statEventRateUsAnswer(\"\");\n\n if (this.submitToStores && target) {\n this.sdkApi.openUrl({ type: \"link\", link: { type: \"url\", target } });\n }\n } else {\n this._selectStar(value, true);\n this.completeWidget();\n this._statEventRateUsAnswer(\"\");\n }\n }\n return false;\n }\n\n public setUserText(text: string): void {\n this.slide.classList.remove(\"data-input-editing\");\n this.slide.classList.remove(\"blured\");\n\n if (this.selectedStar != null) {\n this._selectStar(this.selectedStar, true);\n }\n\n if (!this.disableTimer && this.nativeDialogueWasOpened) {\n this.sdkApi.resumeUI();\n this.nativeDialogueWasOpened = false;\n }\n\n this.localData[\"_r_g_\" + this.elementId + \"_user_response\"] = text;\n this.completeWidget();\n this._statEventRateUsAnswer(text);\n }\n\n private completeWidget(): void {\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.localData[\"_r_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n // ответ на вопрос\n this.localData[\"_&ts_r_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n this.setLocalData(this.localData, true);\n }\n\n public isDone(): boolean {\n return this.localData[\"_r_g_\" + this.elementId + \"_done_at\"] !== undefined;\n }\n\n public slideRateIsDone(): boolean {\n return this.localData[\"_r_g_\" + this.elementId + \"_sa\"] !== undefined;\n }\n\n public static api = {\n widgetClassName: WidgetRate.widgetClassName,\n onRefreshUserData: WidgetRate.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetRate.initWidget<WidgetRate, WidgetRateOptions>(\n element,\n localData,\n (element, options) => new WidgetRate(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(element)?.onStop();\n },\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetRate.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(widgetElement);\n if (widget) {\n return widget.selectStar(element);\n }\n }\n return false;\n },\n slidePollIsDone: function (element: HTMLElement) {\n const widget = WidgetRate.getInstance<WidgetRate, WidgetRateOptions>(element);\n if (widget) {\n return widget.slideRateIsDone();\n }\n return true;\n },\n setUserData: function (id: string, text: string): void {\n WidgetRate.getInstanceById<WidgetRate, WidgetRateOptions>(id)?.setUserText(text);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagData, getTagDataAsNumber, getValueOrDefault, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetShareOptions } from \"./share.h\";\n\nexport class WidgetShare extends WidgetBase<WidgetShareOptions> {\n static DEFAULTS: WidgetShareOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n layers: [],\n };\n\n public static widgetClassName = \"narrative-element-share\";\n\n private readonly layers: Array<HTMLElement>;\n private readonly shareType: string | undefined;\n private readonly shareTarget: string | undefined;\n private readonly withLayer: boolean;\n private btnDisabled: boolean;\n\n constructor(element: HTMLElement, options: Partial<WidgetShareOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n this.shareType = getTagData(this.element, \"shareType\");\n this.shareTarget = getTagData(this.element, \"shareTarget\");\n this.layers = this.options.layers;\n this.withLayer = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"withLayer\"), 0));\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>): void {\n super.onRefreshUserData(localData);\n\n if (this.withLayer) {\n if (this.isDone()) {\n this._showLayer(this.layers, 1);\n } else {\n this._showLayer(this.layers, 0);\n }\n }\n\n this.startReadyPromise.then(() => {\n if (this.isDone() && this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n\n this.btnDisabled = false;\n }\n\n private _statEventShare(result: boolean, via: string | null): void {\n try {\n const buttonText = this.element.textContent ?? \"\";\n\n this.sendStatisticEventToApp(\n \"w-share\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: buttonText,\n wv: this.shareTarget ?? \"\",\n wa: result ? 1 : 0,\n wal: via ?? \"\",\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: buttonText,\n widget_value: this.shareTarget ?? \"\",\n widget_answer: result ? 1 : 0,\n widget_answer_label: via ?? \"\",\n }\n );\n } catch (error) {\n console.error(error);\n }\n }\n\n private share(): void {\n if (!this.btnDisabled) {\n if (this.sdkApi.isExistsShare) {\n if (this.sdkApi.sdkCanSendShareComplete) {\n this.btnDisabled = true;\n }\n if (this.shareType === \"url\" || this.shareType === \"story\") {\n this.sdkApi.share(this.id, {\n url: this.shareTarget, // sdk old versions\n text: this.shareTarget,\n title: null,\n files: null,\n });\n } else if (this.shareType === \"slide\") {\n this.sdkApi.shareSlideScreenshot(this.id, \"[data-element-id='\" + this.elementId + \"']\", this.shareTarget ? this.shareTarget : undefined);\n }\n }\n }\n }\n\n public _complete(isSuccess: boolean): void {\n if (!this.localData[\"_s_\" + this.elementId + \"_ts\"] && isSuccess) {\n this.localData[\"_s_\" + this.elementId + \"_ts\"] = Math.round(new Date().getTime() / 1000);\n // `answer_at` time\n this.localData[\"_&ts_s_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, true);\n }\n\n this._statEventShare(isSuccess, null);\n\n if (isSuccess && this.withLayer) {\n this._showLayer(this.layers, 1, true);\n }\n\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n\n this.btnDisabled = false;\n }\n\n public isDone(): boolean {\n return Boolean(this.localData[\"_s_\" + this.elementId + \"_ts\"]);\n }\n\n public static api = {\n widgetClassName: WidgetShare.widgetClassName,\n onRefreshUserData: WidgetShare.onRefreshUserData,\n init: function (\n element: HTMLElement,\n layers: Array<HTMLElement>,\n localData: Record<string, any>,\n onWidgetComplete: OnWidgetComplete,\n sdkApi: SDKApi\n ): void {\n WidgetShare.initWidget<WidgetShare, WidgetShareOptions>(\n element,\n localData,\n (element, options) =>\n new WidgetShare(\n element,\n {\n ...options,\n layers,\n },\n onWidgetComplete,\n sdkApi\n )\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetShare.getInstance<WidgetShare, WidgetShareOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetShare.getInstance<WidgetShare, WidgetShareOptions>(element)?.onStop();\n },\n click: function (element: HTMLElement): void {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetShare.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetShare.getInstance<WidgetShare, WidgetShareOptions>(widgetElement);\n if (widget) {\n widget.share();\n }\n }\n },\n complete: function (id: string, isSuccess: boolean): void {\n WidgetShare.getInstanceById<WidgetShare, WidgetShareOptions>(id)?._complete(isSuccess);\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { extend, getTagDataAsNumber, getValueOrDefault, getValueOrException, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase } from \"../base\";\nimport { WidgetTestOptions } from \"./test.h\";\n\nexport class WidgetTest extends WidgetBase<WidgetTestOptions> {\n static DEFAULTS: WidgetTestOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-test\";\n\n private label: HTMLElement | null;\n private readonly variants: Array<HTMLElement>;\n private readonly testCount: number;\n private selectedAnswer: number | undefined;\n private readonly withTimeToAnswer: boolean;\n private readonly answerTimeout: number;\n private readonly tick: () => void;\n private readonly cancelTick: () => void;\n private animationFrameId: number | null;\n private startTimerAt: number;\n private timeLeft: number;\n private timeLeftDefault: number;\n private readonly timeline: HTMLElement | null;\n private isWidgetTimerInit = false;\n\n constructor(element: HTMLElement, options: Partial<WidgetTestOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view\"));\n this.testCount = getValueOrException(getTagDataAsNumber(this.slide, \"testCount\"), \"Empty testCount\");\n\n this.withTimeToAnswer = Boolean(getValueOrDefault(getTagDataAsNumber(this.element, \"withTimeToAnswer\"), 0));\n this.answerTimeout = getValueOrDefault(getTagDataAsNumber(this.element, \"answerTimeout\"), 0);\n\n this.timeline = this.element.querySelector(\".timeline\");\n\n this.tick = () => {\n this.animationFrameId = this.env.requestAnimationFrame(() => {\n this.tick();\n });\n\n // update timer\n // update timeline position\n if (this.startTimerAt) {\n const timeNow = new Date().getTime();\n this.timeLeft = this.startTimerAt + this.timeLeftDefault - timeNow;\n\n if (this.timeLeft <= 0) {\n this.timeLeft = 0;\n this.cancelTick();\n\n this.doneWithoutAnswer();\n }\n\n if (this.timeline) {\n this.timeline.style.transform = \"translateX(\" + String((1 - this.timeLeft / this.timeLeftDefault) * 100) + \"%)\";\n }\n }\n };\n\n this.cancelTick = () => {\n if (this.animationFrameId != null) {\n this.env.cancelAnimationFrame(this.animationFrameId);\n }\n };\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedAnswer = undefined;\n\n if (this.localData) {\n if (this.localData[\"_t_g_\" + this.elementId + \"_sa\"] !== undefined) {\n this._selectAnswer(this.localData[\"_t_g_\" + this.elementId + \"_sa\"]);\n this.setLocalData(this.localData, false);\n }\n\n if (this.localData[\"_t_g_\" + this.elementId + \"fo_at\"] === undefined) {\n this.localData[\"_t_g_\" + this.elementId + \"fo_at\"] = Math.round(new Date().getTime() / 1000);\n this.setLocalData(this.localData, false);\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n\n if (this.slideTestWithTimer()) {\n this.cancelTick();\n this.initWidgetTimer();\n }\n }\n\n private initWidgetTimer(): void {\n if (!this.isWidgetTimerInit) {\n if (this.selectedAnswer === undefined) {\n // find timer element\n // start raf\n // pause raf on pauseUI (actually don`t need)\n\n this.timeLeftDefault = (this.answerTimeout ? this.answerTimeout : 0) * 1000;\n this.timeLeft = this.timeLeftDefault;\n\n this.animationFrameId = null;\n this.startReadyPromise.then(() => {\n if (this.localData[\"_t_g_\" + this.elementId + \"st_at\"] != null) {\n this.startTimerAt = this.localData[\"_t_g_\" + this.elementId + \"st_at\"];\n this.startTimerAt *= 1000;\n }\n if (this.startTimerAt == null) {\n this.startTimerAt = new Date().getTime();\n this.localData[\"_t_g_\" + this.elementId + \"st_at\"] = Math.round(this.startTimerAt / 1000);\n this.setLocalData(this.localData, false);\n }\n\n this.tick();\n });\n } else {\n // animate 100%\n if (this.selectedAnswer === -1) {\n if (this.timeline) {\n this.timeline.style.transform = \"translateX(100%)\";\n }\n } else if (this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_tspent\"] != null) {\n if (this.timeline) {\n this.timeline.style.transform = \"translateX(\" + String(this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_tspent\"]) + \"%)\";\n }\n }\n }\n this.isWidgetTimerInit = true;\n }\n }\n\n public onStart(): void {\n super.onStart();\n\n if (this.slideTestWithTimer()) {\n this.initWidgetTimer();\n }\n }\n\n public onStop(): void {\n super.onStop();\n\n if (this.slideTestWithTimer()) {\n this.cancelTick();\n }\n this.isWidgetTimerInit = false;\n }\n\n private _statEventVoteAnswer(answerScore: number): void {\n try {\n if (this.selectedAnswer != null) {\n const labelText = this.label?.textContent ?? \"\";\n let answerText = \"\";\n if (this.variants[this.selectedAnswer]) {\n const answerLabel = this.variants[this.selectedAnswer].querySelector(\".label\");\n if (answerLabel != null) {\n answerText = answerLabel.textContent ?? \"\";\n }\n }\n const duration = new Date().getTime() - this.firstOpenTime;\n\n this.sendStatisticEventToApp(\n \"w-test-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: this.selectedAnswer,\n wal: answerText,\n was: answerScore,\n d: duration,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: this.selectedAnswer,\n widget_answer_label: answerText,\n widget_answer_score: answerScore,\n duration_ms: duration,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private _selectAnswer(index: number): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedAnswer = index;\n\n this.localData[\"_t_g_\" + this.elementId + \"_sa\"] = index;\n\n this.element.classList.add(\"done\");\n\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n public selectAnswer(answer: HTMLElement): boolean {\n if (this.selectedAnswer !== undefined) {\n return true;\n }\n\n const index = this.variants.indexOf(answer);\n if (index !== -1) {\n const answerScore = getValueOrDefault(getTagDataAsNumber(this.variants[index], \"score\"), 0);\n this._completeWidget(index, answerScore);\n }\n\n if (Boolean(this.withTimeToAnswer && this.answerTimeout)) {\n this.cancelTick();\n }\n\n return false;\n }\n\n private doneWithoutAnswer(): void {\n if (this.selectedAnswer !== undefined) {\n return;\n }\n const index = -1,\n answerScore = 0;\n this._completeWidget(index, answerScore);\n }\n\n // complete answer select and save local data + stat event\n private _completeWidget(index: number, answerScore: number): void {\n this._selectAnswer(index);\n\n this.localData[\"t_score\"] = (this.localData[\"t_score\"] === undefined ? 0 : this.localData[\"t_score\"]) + answerScore;\n\n let answeredQuestion = 0;\n for (const key in this.localData) {\n if (this.localData.hasOwnProperty(key)) {\n if (/^_t_g_[A-z0-9-_]+_sa$/.test(key)) {\n answeredQuestion++;\n }\n }\n }\n if (this.localData[\"_t_fa_at\"] === undefined) {\n this.localData[\"_t_fa_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n if (answeredQuestion === this.testCount) {\n this.localData[\"_t_done_at\"] = Math.round(new Date().getTime() / 1000);\n }\n\n // answer on question\n this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n // spent percent of time\n if (this.slideTestWithTimer()) {\n this.localData[\"_&ts_t_g_\" + this.elementId + \"_a_tspent\"] = Math.round((1 - this.timeLeft / this.timeLeftDefault) * 100);\n }\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.setLocalData(this.localData, true);\n\n this._statEventVoteAnswer(answerScore);\n }\n\n public isDone(): boolean {\n return this.localData[\"_t_done_at\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n public slideTestIsDone(): boolean {\n return this.localData[\"_t_g_\" + this.elementId + \"_sa\"] !== undefined && this.selectedAnswer !== undefined;\n }\n\n public slideTestWithTimer(): boolean {\n return Boolean(this.withTimeToAnswer && this.answerTimeout);\n }\n\n public static api = {\n widgetClassName: WidgetTest.widgetClassName,\n onRefreshUserData: WidgetTest.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n WidgetTest.initWidget<WidgetTest, WidgetTestOptions>(\n element,\n localData,\n (element, options) => new WidgetTest(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element)?.onStop();\n },\n /**\n * click on quiz answer\n */\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetTest.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(widgetElement);\n if (widget) {\n return widget.selectAnswer(element);\n }\n }\n return false;\n },\n slideTestIsDone: function (element: HTMLElement) {\n const widget = WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element);\n if (widget) {\n return widget.slideTestIsDone();\n }\n return true;\n },\n slideTestWithTimer: function (element: HTMLElement) {\n const widget = WidgetTest.getInstance<WidgetTest, WidgetTestOptions>(element);\n if (widget) {\n return widget.slideTestWithTimer();\n }\n return true;\n },\n };\n}\n","import { SDKApi } from \"@skd_api\";\nimport { WidgetVoteOptions, WidgetVoteSharedData } from \"./vote.h\";\nimport { extend, forEach, getTagData, getTagDataAsNumber, getValueOrDefault, isArray, isNumber, isObject, slice } from \"@utils\";\nimport { OnWidgetComplete, WidgetBase, Widgets } from \"../base\";\n\nexport class WidgetVote extends WidgetBase<WidgetVoteOptions> {\n static DEFAULTS: WidgetVoteOptions = {\n slide: null,\n activateAfterCreate: false,\n create: false,\n localData: {},\n };\n\n public static widgetClassName = \"narrative-element-vote\";\n\n private question: HTMLElement = null!;\n private answers: Array<HTMLElement> = null!;\n private questionCount: number = null!;\n private selectedAnswer: number | undefined = undefined;\n\n private label: HTMLElement | null;\n private readonly variants: Array<HTMLElement>;\n private readonly variantsTexts: Array<string>;\n private selectedVariant: number | undefined;\n private voteAllocation: any;\n private readonly hideClientTotalResult: boolean;\n private readonly multipleChoice: boolean;\n\n /**\n * @throws Error\n * @param element\n * @param options\n * @param onWidgetComplete\n * @param sdkApi\n */\n constructor(element: HTMLElement, options: Partial<WidgetVoteOptions>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi) {\n super(element, options, onWidgetComplete, sdkApi);\n\n this.voteAllocation = getTagData(this.slide, \"voteAllocation\");\n this.label = this.element.querySelector(\".label-view .label\");\n this.variants = slice.call(this.element.querySelectorAll(\".variants-box .variant-view-group\"));\n this.variantsTexts = [];\n forEach(this.variants, (element, index) => {\n const variantView = element.querySelector(\".variant-view .label\");\n if (variantView) {\n this.variantsTexts.push(variantView.textContent ?? \"\");\n }\n });\n\n this.hideClientTotalResult = getValueOrDefault(Boolean(getTagDataAsNumber(this.element, \"hideClientTotalResult\")), false);\n this.multipleChoice = getValueOrDefault(Boolean(getTagDataAsNumber(this.element, \"multipleChoice\")), false);\n }\n\n private _initFromLocalData(): void {\n const value = this.localData[\"_v_g_\" + this.elementId + \"_sa\"];\n if (!this.multipleChoice) {\n let index = value;\n if (Array.isArray(value)) {\n index = value[0];\n }\n this.variants[index]?.classList.add(\"checked\");\n this._selectVariant(index, true);\n if (!this.hideClientTotalResult) {\n this.displayPercents([index], true);\n }\n this._fillWidget(true);\n }\n if (this.multipleChoice) {\n let values = [];\n if (Array.isArray(value)) {\n values = value;\n } else {\n values.push(value);\n }\n\n for (let i = 0; i < values.length; ++i) {\n const index = values[i];\n this.variants[index]?.classList.add(\"checked\");\n this._selectVariant(index, true);\n }\n if (!this.hideClientTotalResult) {\n this.displayPercents(values, true);\n }\n this._fillWidget(true);\n }\n }\n\n /**\n * Start or restart widget\n * @param localData\n */\n public onRefreshUserData(localData: Record<string, any>) {\n super.onRefreshUserData(localData);\n\n this.selectedVariant = undefined;\n\n if (this.localData) {\n if (this.localData[\"_v_g_\" + this.elementId + \"_sa\"] != null) {\n this._initFromLocalData();\n } else {\n this._clearSelectedVariants();\n this.element.classList.remove(\"done\");\n this.element.classList.remove(\"input-done\");\n this.element.classList.remove(\"filled\");\n }\n }\n\n this.firstOpenTime = new Date().getTime();\n }\n\n private _clearSelectedVariants(): void {\n this.variants.forEach((variant, index) => {\n variant.classList.remove(\"checked\");\n variant.classList.remove(\"selected\");\n variant.style.setProperty(\"--selected-variant-view-clip-area\", String(100));\n });\n }\n\n private _statEventVoteVariant(): void {\n try {\n let isValid = false;\n let selectedVariant: number = null!;\n if (!this.multipleChoice) {\n if (this.selectedVariant != null) {\n isValid = true;\n selectedVariant = this.selectedVariant;\n }\n }\n let selectedVariantsLabels: Array<string> = [];\n let selectedVariantsIdxs: Array<number> = [];\n if (this.multipleChoice) {\n selectedVariantsIdxs = this._getCheckedVariants();\n if (selectedVariantsIdxs.length > 0) {\n isValid = true;\n selectedVariant = selectedVariantsIdxs[0];\n selectedVariantsIdxs.forEach(idx => selectedVariantsLabels.push(this.variantsTexts[idx] ? this.variantsTexts[idx] : \"\"));\n }\n }\n\n if (isValid) {\n let labelText = this.label?.textContent ?? \"\";\n\n let variantText = this.variantsTexts[selectedVariant] ? this.variantsTexts[selectedVariant] : \"\";\n\n let duration = new Date().getTime() - this.firstOpenTime;\n\n // доп поля - для multiple choice\n // первые оставляем пустыми в этом случае\n\n this.sendStatisticEventToApp(\n \"w-vote-answer\",\n {\n ...this.statisticEventBaseFieldsShortForm,\n wi: this.elementId,\n wl: labelText,\n wa: selectedVariant,\n wv: variantText,\n d: duration,\n was: selectedVariantsIdxs,\n wvs: selectedVariantsLabels,\n },\n {\n ...this.statisticEventBaseFieldsFullForm,\n widget_id: this.elementId,\n widget_label: labelText,\n widget_answer: selectedVariant,\n widget_value: variantText,\n duration_ms: duration,\n widget_answers: selectedVariantsIdxs,\n widget_values: selectedVariantsLabels,\n }\n );\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n // user click on (un)checked (radio btn) variant\n private _checkVariant(index: number): void {\n if (this.variants[index]) {\n if (this.variants[index].classList.contains(\"checked\")) {\n this.variants[index].classList.remove(\"checked\");\n } else {\n this.variants[index].classList.add(\"checked\");\n }\n }\n }\n\n private _getCheckedVariants(): Array<number> {\n const map: Array<number> = [];\n this.variants.forEach((variant, index) => {\n if (variant.classList.contains(\"checked\")) {\n map.push(index);\n }\n });\n return map;\n }\n\n private _selectVariant(index: number, filled: boolean = false): void {\n if (this.variants[index]) {\n this.variants[index].classList.add(\"selected\");\n }\n\n this.selectedVariant = index;\n\n if (!this.multipleChoice) {\n this.localData[\"_v_g_\" + this.elementId + \"_sa\"] = index;\n }\n\n if (this.hideClientTotalResult) {\n const cb = () => {\n if (this.variants[index]) {\n this.variants[index].style.setProperty(\"--selected-variant-view-clip-area\", String(0));\n }\n };\n if (filled) {\n cb();\n } else {\n this.env.requestAnimationFrame(cb);\n }\n }\n }\n\n private _fillWidget(filled: boolean = false): void {\n this.element.classList.add(\"done\");\n if (filled) {\n this.element.classList.add(\"filled\");\n }\n\n if (!this.multipleChoice) {\n if (this.submitButtonView != null) {\n this._setInputDone();\n this._showSubmitBtn();\n }\n }\n if (this.multipleChoice) {\n this._removeInputDone();\n this._hideSubmitBtn();\n }\n\n this.startReadyPromise.then(() => {\n if (this.disableTimer) {\n this.onWidgetComplete();\n }\n });\n }\n\n private _showSubmitBtn() {\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null) {\n this.submitButtonAnimatedView.style.maxHeight = `${this.submitButtonViewHeight}px`;\n }\n });\n }\n\n private _hideSubmitBtn() {\n this.env.requestAnimationFrame(() => {\n if (this.submitButtonAnimatedView != null && this.submitButtonViewHeight != null) {\n this.submitButtonAnimatedView.style.maxHeight = \"0px\";\n }\n });\n }\n\n public selectVariant(variant: HTMLElement): boolean {\n if (!this.multipleChoice) {\n if (this.selectedVariant != null) {\n return true;\n }\n }\n if (this.multipleChoice) {\n if (this.isDone()) {\n return true;\n }\n }\n\n const selectedVariantIndex = this.variants.indexOf(variant);\n\n if (selectedVariantIndex !== -1) {\n this._checkVariant(selectedVariantIndex);\n\n if (this.multipleChoice) {\n if (this._getCheckedVariants().length > 0) {\n this._setInputDone();\n this._showSubmitBtn();\n } else {\n this._removeInputDone();\n this._hideSubmitBtn();\n }\n }\n if (!this.multipleChoice) {\n this._selectVariant(selectedVariantIndex);\n if (!this.hideClientTotalResult) {\n this.displayPercents([selectedVariantIndex]);\n }\n this._fillWidget();\n this._completeWidget();\n }\n }\n\n return false;\n }\n\n private _setInputDone() {\n if (this.submitButtonView != null) {\n this.element.classList.add(\"input-done\");\n }\n }\n\n private _removeInputDone() {\n // if (this.submitButtonView != null) {\n setTimeout(() => {\n this.element.classList.add(\"border-radius-transition-250\");\n this.env.requestAnimationFrame(() => {\n this.element.classList.remove(\"input-done\");\n setTimeout(() => this.element.classList.remove(\"border-radius-transition-250\"), 250);\n });\n }, 250);\n // }\n }\n\n private _completeWidget() {\n this.localData[\"_v_g_\" + this.elementId + \"_done_at\"] = Math.round(new Date().getTime() / 1000);\n\n // ответ на вопрос\n this.localData[\"_&ts_v_g_\" + this.elementId + \"_a_at\"] = Math.round(new Date().getTime() / 1000);\n\n if (this.widgetDone) {\n this.widgetDone.classList.add(\"active\", \"opacity-active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"active\");\n setTimeout(() => {\n this.widgetDone?.classList.remove(\"opacity-active\");\n }, 250);\n }, 2000);\n }\n\n this.setLocalData(this.localData, true);\n\n this._statEventVoteVariant();\n }\n\n private submitMultipleChoice() {\n const variants = this._getCheckedVariants();\n if (variants.length > 0) {\n this.localData[\"_v_g_\" + this.elementId + \"_sa\"] = variants;\n\n for (let i = 0; i < variants.length; ++i) {\n const index = variants[i];\n this._selectVariant(index);\n }\n if (!this.hideClientTotalResult) {\n this.displayPercents(variants);\n }\n this._fillWidget();\n this._completeWidget();\n } else {\n // todo - toast with error (select at least one variant)\n }\n }\n\n public click(): boolean {\n if (this.isDone()) {\n return true;\n }\n\n if (this.multipleChoice) {\n this.submitMultipleChoice();\n return false;\n } else {\n // for single mode - return true and sdk will proceed click as nextClick()\n return true;\n }\n }\n\n private displayPercents(selectedVariantsIndexes: Array<number>, filled: boolean = false): void {\n // voteAllocation[0] - variant total count allocation\n // voteAllocation[1]\n // ...\n // voteAllocation[7]\n let voteAllocation: WidgetVoteSharedData[string] = [];\n let voteAllocationTs: number | undefined = undefined;\n const sharedData = this.sdkApi.getWidgetsSharedData<Widgets.Vote>(this.cardId, Widgets.Vote);\n if (sharedData && sharedData[this.elementId] != null && (isObject(sharedData[this.elementId]) || isArray(sharedData[this.elementId]))) {\n voteAllocation = sharedData[this.elementId];\n if (isObject(sharedData[this.elementId])) {\n voteAllocation = slice.call(Object.values(sharedData[this.elementId])) as unknown as WidgetVoteSharedData[string];\n }\n voteAllocationTs = sharedData.ts;\n }\n\n const voteDoneAt = this.localData[\"_v_g_\" + this.elementId + \"_done_at\"];\n\n if (voteAllocationTs === undefined || voteDoneAt === undefined || voteDoneAt > voteAllocationTs) {\n forEach(this.variants, function (element, index) {\n const key = index as number;\n if (voteAllocation[key] === undefined || !isNumber(voteAllocation[key])) {\n voteAllocation[key] = 0;\n }\n if (selectedVariantsIndexes.includes(key)) {\n ++voteAllocation[key];\n }\n });\n }\n\n // calc percents\n let percents: Array<number> = [],\n total = 0;\n forEach(this.variants, (element, index) => {\n const key = index as number;\n if (voteAllocation[key] !== undefined) {\n percents[key] = isNumber(voteAllocation[key]) ? voteAllocation[key] : parseInt(String(voteAllocation[key]));\n if (!isNumber(percents[key]) || isNaN(percents[key])) {\n percents[key] = 0;\n }\n } else {\n percents[key] = 0;\n }\n total += percents[key];\n });\n for (let i = 0; i < percents.length; ++i) {\n if (total !== 0) {\n percents[i] = Math.round((percents[i] / total) * 100 * 10) / 10;\n if (percents[i] > 100) {\n percents[i] = 100;\n }\n // percents[i] += '%';\n } else {\n // percents[i] = '0%';\n }\n }\n\n const self = this;\n forEach(this.variants, (element, index) => {\n const key = index as number;\n const percentLabels = slice.call(element.querySelectorAll(\".percent-label\"));\n\n forEach(percentLabels, label => {\n if (percents[key] != null) {\n label.textContent = percents[key] + \"%\";\n }\n });\n element.classList.add(\"selected\");\n });\n\n const cb = function () {\n forEach(self.variants, function (element, index) {\n const key = index as number;\n if (percents[key] != null) {\n element.style.setProperty(\"--selected-variant-view-clip-area\", String(100 - percents[key]));\n }\n });\n };\n\n if (filled) {\n cb();\n } else {\n this.env.requestAnimationFrame(cb);\n }\n }\n\n public isDone(): boolean {\n return this.localData[\"_v_g_\" + this.elementId + \"_done_at\"] != null;\n }\n\n public slideVoteIsDone(): boolean {\n return this.localData[\"_v_g_\" + this.elementId + \"_sa\"] != null;\n }\n\n public static api = {\n widgetClassName: WidgetVote.widgetClassName,\n onRefreshUserData: WidgetVote.onRefreshUserData,\n init: function (element: HTMLElement, localData: Record<string, any>, onWidgetComplete: OnWidgetComplete, sdkApi: SDKApi): void {\n WidgetVote.initWidget<WidgetVote, WidgetVoteOptions>(\n element,\n localData,\n (element, options) => new WidgetVote(element, options, onWidgetComplete, sdkApi)\n );\n },\n onStart: function (element: HTMLElement) {\n WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(element)?.onStart();\n },\n onStop: function (element: HTMLElement) {\n WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(element)?.onStop();\n },\n select: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetVote.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(widgetElement);\n if (widget) {\n return widget.selectVariant(element);\n }\n }\n return false;\n },\n click: function (element: HTMLElement): boolean {\n const widgetElement = element.closest<HTMLElement>(`.${WidgetVote.widgetClassName}`);\n if (widgetElement) {\n const widget = WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(widgetElement);\n if (widget) {\n return widget.click();\n }\n }\n return true;\n },\n slideVoteIsDone: function (element: HTMLElement): boolean {\n const widget = WidgetVote.getInstance<WidgetVote, WidgetVoteOptions>(element);\n if (widget) {\n return widget.slideVoteIsDone();\n }\n return true;\n },\n };\n}\n","import { SDKInterface } from \"../../../sdk_api/es_module_sdk_api.h\";\nimport { WidgetBarcode } from \"../../../widgets/barcode\";\nimport { WidgetCopy } from \"../../../widgets/copy\";\nimport { WidgetDataInput } from \"../../../widgets/data_input\";\nimport { WidgetDateCountdown } from \"../../../widgets/date_countdown\";\nimport { WidgetMultiSlide } from \"../../../widgets/multi_slide\";\nimport { WidgetPoll } from \"../../../widgets/poll\";\nimport { WidgetPollLayers } from \"../../../widgets/poll_layers\";\nimport { WidgetProducts } from \"../../../widgets/products\";\nimport { WidgetQuest } from \"../../../widgets/quest\";\nimport { WidgetQuiz } from \"../../../widgets/quiz\";\nimport { WidgetQuizGrouped } from \"../../../widgets/quiz_grouped\";\nimport { WidgetRangeSlider } from \"../../../widgets/range_slider\";\nimport { WidgetRate } from \"../../../widgets/rate\";\nimport { WidgetShare } from \"../../../widgets/share\";\nimport { WidgetTest } from \"../../../widgets/test\";\nimport { WidgetVote } from \"../../../widgets/vote\";\nimport { ILayoutApi, SlideApiPeerDeps } from \"../layout_api.h\";\n\nexport class EsModuleLayoutApi implements ILayoutApi {\n constructor(private readonly slideApiPeerDeps: () => SlideApiPeerDeps) {}\n get widgetCopyApi(): typeof WidgetCopy.api | undefined {\n return WidgetCopy.api;\n }\n get widgetBarcodeApi(): typeof WidgetBarcode.api | undefined {\n return WidgetBarcode.api;\n }\n get widgetDataInputApi(): typeof WidgetDataInput.api | undefined {\n return WidgetDataInput.api;\n }\n get widgetDateCountdownApi(): typeof WidgetDateCountdown.api | undefined {\n return WidgetDateCountdown.api;\n }\n get widgetMultiSlideApi(): typeof WidgetMultiSlide.api | undefined {\n return WidgetMultiSlide.api;\n }\n get widgetPollApi(): typeof WidgetPoll.api | undefined {\n return WidgetPoll.api;\n }\n get widgetPollLayersApi(): typeof WidgetPollLayers.api | undefined {\n return WidgetPollLayers.api;\n }\n get widgetQuestApi(): typeof WidgetQuest.api | undefined {\n return WidgetQuest.api;\n }\n get widgetQuizApi(): typeof WidgetQuiz.api | undefined {\n return WidgetQuiz.api;\n }\n get widgetQuizGroupedApi(): typeof WidgetQuizGrouped.api | undefined {\n return WidgetQuizGrouped.api;\n }\n get widgetRangeSliderApi(): typeof WidgetRangeSlider.api | undefined {\n return WidgetRangeSlider.api;\n }\n get widgetRateApi(): typeof WidgetRate.api | undefined {\n return WidgetRate.api;\n }\n get widgetShareApi(): typeof WidgetShare.api | undefined {\n return WidgetShare.api;\n }\n get widgetTestApi(): typeof WidgetTest.api | undefined {\n return WidgetTest.api;\n }\n get widgetVoteApi(): typeof WidgetVote.api | undefined {\n return WidgetVote.api;\n }\n get widgetProductsApi(): typeof WidgetProducts.api | undefined {\n return WidgetProducts.api;\n }\n get VideoPlayer(): SlideApiPeerDeps[\"VODPlayer\"] | undefined {\n return this.slideApiPeerDeps().VODPlayer;\n }\n}\n","import { container } from \"@composition\";\nimport { slideApiPeerDeps } from \"../../../entry_points/es_module/es_module\";\nimport { EsModuleLayoutApi } from \"../adapters/es_module_layout_api\";\nimport { ILayoutApi } from \"../layout_api.h\";\n\ncontainer.registerSingleton<ILayoutApi>(() => new EsModuleLayoutApi(() => slideApiPeerDeps));\n"],"names":["isObject","Utils.waitForImageHtmlElementLoad","Utils.waitForVideoHtmlElementLoad","Utils.isObject","WidgetFactory.tryCreateFromHtmlElement","Utils.isFunction","BaseSlideApi","drawingSVG"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|