{"version":3,"file":"help-article-page-bundle.js","mappings":"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","sources":["webpack://flippingbooksite/webpack/runtime/chunk loaded","webpack://flippingbooksite/webpack/runtime/create fake namespace object","webpack://flippingbooksite/webpack/runtime/load script","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/service.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/storage/StorageProvider.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/storage/index.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/load.ts","webpack://flippingbooksite/./sources/src/components/button/index.ts","webpack://flippingbooksite/./sources/src/components/open-chat-button/index.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/article-content.ts","webpack://flippingbooksite/./sources/src/util/colorize-article-table.ts","webpack://flippingbooksite/./sources/src/components/embed-stub/index.ts","webpack://flippingbooksite/./sources/src/components/tooltip/index.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/product-info.ts","webpack://flippingbooksite/./sources/src/services/instance/csrfTokenService.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/rating/content.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/rating/utils.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/rating/main-screen.ts","webpack://flippingbooksite/./sources/src/components/disablable-element.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/rating/no-screen.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/rating/yes-screen.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/rating/index.ts","webpack://flippingbooksite/./sources/src/pages/help-article-page/index.ts","webpack://flippingbooksite/./sources/src/services/analytics.ts","webpack://flippingbooksite/./sources/src/services/instance/analytics.ts","webpack://flippingbooksite/./sources/src/components/driftIcon/index.ts","webpack://flippingbooksite/./sources/src/services/drift.ts","webpack://flippingbooksite/./sources/src/services/instance/driftService.ts","webpack://flippingbooksite/./sources/src/services/instance/api/licenseApi.ts","webpack://flippingbooksite/./sources/src/services/instance/api/paymentsApi.ts","webpack://flippingbooksite/./sources/src/services/instance/api/siteApi.ts","webpack://flippingbooksite/./sources/src/services/instance/licenseService.ts","webpack://flippingbooksite/./sources/src/services/instance/tokenService.ts","webpack://flippingbooksite/./sources/src/services/user.ts","webpack://flippingbooksite/./sources/src/services/instance/api/logonApi.ts","webpack://flippingbooksite/./sources/src/services/instance/user.ts","webpack://flippingbooksite/./sources/src/util/image.ts","webpack://flippingbooksite/./sources/src/util/is-logged-in.ts","webpack://flippingbooksite/./sources/src/util/is-visible.ts","webpack://flippingbooksite/external var \"{\\\"featureFlags\\\":{},\\\"sentryDsn\\\":\\\"https://8fa71d45f6aa4a06be961166e0ee495b@sentry.io/1359544\\\",\\\"sentryEnable\\\":false}\"","webpack://flippingbooksite/webpack/bootstrap","webpack://flippingbooksite/webpack/runtime/amd options","webpack://flippingbooksite/webpack/runtime/compat get default export","webpack://flippingbooksite/webpack/runtime/define property getters","webpack://flippingbooksite/webpack/runtime/ensure chunk","webpack://flippingbooksite/webpack/runtime/get javascript chunk filename","webpack://flippingbooksite/webpack/runtime/get mini-css chunk filename","webpack://flippingbooksite/webpack/runtime/global","webpack://flippingbooksite/webpack/runtime/hasOwnProperty shorthand","webpack://flippingbooksite/webpack/runtime/make namespace object","webpack://flippingbooksite/webpack/runtime/node module decorator","webpack://flippingbooksite/webpack/runtime/runtimeId","webpack://flippingbooksite/webpack/runtime/publicPath","webpack://flippingbooksite/webpack/runtime/css loading","webpack://flippingbooksite/webpack/runtime/jsonp chunk loading","webpack://flippingbooksite/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"flippingbooksite:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { readonly } from './types';\n\nexport interface IService {\n    listen(cb: () => void): void;\n    unlisten(cb: () => void): void;\n}\n\nexport abstract class Listenable {\n    private readonly listeners = new Set<() => void>();\n\n    listen(cb: () => void) {\n        this.listeners.add(cb);\n    }\n\n    unlisten(cb: () => void) {\n        this.listeners.delete(cb);\n    }\n\n    protected notify() {\n        this.listeners.forEach((l) => l());\n    }\n}\n\nexport abstract class Parametrized<P> {\n    protected params: P;\n\n    constructor(params: P) {\n        this.params = params;\n    }\n}\n\nexport abstract class ListenableParametrized<P> extends Listenable {\n    protected params: P;\n\n    constructor(params: P) {\n        super();\n        this.params = params;\n    }\n}\n\nexport interface IServiceDataStorage<T> extends IService {\n    getData(): Readonly<T> | null;\n    updateData(update: T): Readonly<T>;\n    overwriteData(newData: T | null): Readonly<T> | null;\n}\n\nexport class ServiceDataStorage<T> extends Listenable implements IServiceDataStorage<T> {\n    private data: Readonly<T> | null = null;\n\n    getData(): Readonly<T> | null {\n        return this.data === null ? null : readonly(this.data);\n    }\n\n    updateData(update: T): Readonly<T> {\n        this.data = {\n            ...(this.data || {}),\n            ...update,\n        };\n        this.notify();\n        return readonly(this.data);\n    }\n\n    overwriteData(newData: T | null): Readonly<T> | null {\n        this.data = newData;\n        this.notify();\n        return this.data === null ? null : readonly(this.data);\n    }\n}\n\nexport abstract class AbstractService<T extends object, P = Record<string, unknown>>\n    extends ListenableParametrized<P & { serviceStorage?: IServiceDataStorage<T> }>\n    implements IService\n{\n    protected storage: IServiceDataStorage<T>;\n\n    constructor(params: P & { serviceStorage?: IServiceDataStorage<T> }) {\n        super(params);\n\n        this.storage = params.serviceStorage ?? new ServiceDataStorage<T>();\n        this.storage.listen(() => this.notify());\n    }\n\n    protected get data(): Readonly<T> | null {\n        return this.storage.getData();\n    }\n\n    protected updateData(update: T): Readonly<T> {\n        return this.storage.updateData(update);\n    }\n\n    protected overwriteData(newData: T | null): Readonly<T> | null {\n        return this.storage.overwriteData(newData);\n    }\n}\n","import type { IStorageProvider } from './IStorageProvider';\n\ntype StorageType = 'sessionStorage' | 'localStorage';\n\nclass RealStorage implements IStorageProvider {\n    private baseObj: Storage;\n\n    constructor(baseObj: Storage) {\n        this.baseObj = baseObj;\n    }\n\n    get(key: string) {\n        return this.baseObj.getItem(key);\n    }\n\n    set(key: string, value: string) {\n        return this.baseObj.setItem(key, value);\n    }\n\n    remove(key: string) {\n        return this.baseObj.removeItem(key);\n    }\n\n    clear() {\n        return this.baseObj.clear();\n    }\n\n    getJSON<T>(key: string): T | null {\n        const val = this.get(key);\n        if (val) {\n            return JSON.parse(val) as T;\n        }\n        return null;\n    }\n\n    setJSON(key: string, value: unknown) {\n        return this.set(key, JSON.stringify(value));\n    }\n}\n\nclass ObjectStorage implements IStorageProvider {\n    private data: { [id: string]: string } = {};\n\n    get(key: string) {\n        return this.data[key];\n    }\n\n    set(key: string, value: string) {\n        this.data[key] = value;\n    }\n\n    remove(key: string) {\n        delete this.data[key];\n    }\n\n    clear() {\n        this.data = {};\n    }\n\n    getJSON<T>(key: string): T | null {\n        const val = this.get(key);\n        if (val) {\n            return JSON.parse(val) as T;\n        }\n        return null;\n    }\n\n    setJSON(key: string, value: unknown) {\n        return this.set(key, JSON.stringify(value));\n    }\n}\n\nconst isStorageSupported = (storage: StorageType) => {\n    try {\n        window[storage].setItem('test-storage-supported', '1');\n        window[storage].removeItem('test-storage-supported');\n        return true;\n    } catch {\n        return false;\n    }\n};\n\nconst getStorage = (storage: StorageType) => {\n    return isStorageSupported(storage) ? new RealStorage(window[storage]) : new ObjectStorage();\n};\n\nexport const localStorage: IStorageProvider = getStorage('localStorage');\nexport const sessionStorage: IStorageProvider = getStorage('sessionStorage');\nexport const objectStorage: IStorageProvider = new ObjectStorage();\n","export { IStorageProvider } from './IStorageProvider';\nexport { localStorage, sessionStorage, objectStorage } from './StorageProvider';\n","const EXTERNAL_URL_REGEX = /^https?:/;\n\nconst contentUrl = (contentRoot: string, src: string) =>\n    EXTERNAL_URL_REGEX.test(src) ? src : contentRoot + (src.charAt(0) === '/' ? src : `/${src}`);\n\nexport const loadJs = (contentRoot: string) => (src: string) =>\n    new Promise<void>((resolve, reject) => {\n        const scriptTag = document.createElement('script');\n        scriptTag.addEventListener('load', () => resolve());\n        // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n        scriptTag.addEventListener('error', () => reject());\n        scriptTag.setAttribute('src', contentUrl(contentRoot, src));\n        document.head.appendChild(scriptTag);\n    });\n\nexport const loadCss = (contentRoot: string) => (src: string) =>\n    new Promise<void>((resolve, reject) => {\n        const linkTag = document.createElement('link');\n        linkTag.setAttribute('rel', 'stylesheet');\n        linkTag.addEventListener('load', () => resolve());\n        // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n        linkTag.addEventListener('error', () => reject());\n        linkTag.setAttribute('href', contentUrl(contentRoot, src));\n        document.head.appendChild(linkTag);\n    });\n","import { BemElement } from '../../pages/bem';\r\n\r\nexport abstract class Clickable<P extends Clickable.Params, E extends HTMLElement = HTMLElement> extends BemElement<\r\n    P,\r\n    E\r\n> {\r\n    onDescribe() {\r\n        super.onDescribe();\r\n        if (this.params.onClick) {\r\n            this.el.addEventListener('click', this.params.onClick);\r\n        }\r\n    }\r\n}\r\n\r\nexport namespace Clickable {\r\n    export interface Params {\r\n        onClick: ((ev: MouseEvent) => void) | (() => void);\r\n    }\r\n}\r\n\r\nexport class Button extends Clickable<Button.Params, HTMLButtonElement> {}\r\n\r\nexport namespace Button {\r\n    export interface Params extends Clickable.Params {}\r\n}\r\n\r\nexport class LinkButton extends Clickable<LinkButton.Params, HTMLAnchorElement> {}\r\n\r\nexport namespace LinkButton {\r\n    export interface Params extends Clickable.Params {}\r\n}\r\n","import { BemElement } from '../../pages/bem';\r\nimport { driftService } from '../../services/instance/driftService';\r\n\r\nexport class OpenChatButton extends BemElement<OpenChatButton.Params> {\r\n    onDescribe() {\r\n        this.el.addEventListener('click', this.openChat);\r\n    }\r\n\r\n    private openChat = () => {\r\n        driftService.openSupportChat();\r\n\r\n        if (this.params.onOpen) {\r\n            this.params.onOpen();\r\n        }\r\n    };\r\n}\r\n\r\nexport namespace OpenChatButton {\r\n    export interface Params {\r\n        onOpen?: () => void;\r\n    }\r\n}\r\n","import { createEmbedStubs } from '../../components/embed-stub';\r\nimport { colorizeArticleTable } from '../../util/colorize-article-table';\r\nimport { BemBlock } from '../bem';\r\n\r\nexport class ArticleContent extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Help-Page-Article-Content';\r\n    }\r\n\r\n    onDescribe() {\r\n        colorizeArticleTable(this.el);\r\n\r\n        createEmbedStubs(this.el);\r\n    }\r\n}\r\n","import { isVisible } from './is-visible';\r\n\r\nexport function colorizeArticleTable(element: HTMLElement) {\r\n    Array.from(element.querySelectorAll<HTMLTableElement>('table')).forEach((table) => {\r\n        if (table.closest('.email')) {\r\n            return;\r\n        }\r\n\r\n        if (!table.classList.contains('data-ng')) {\r\n            Array.from(table.querySelectorAll<HTMLTableRowElement>('tbody tr:nth-child(odd)'))\r\n                .filter((tr) => isVisible(tr))\r\n                .forEach((tr) => tr.classList.add('alternate'));\r\n        }\r\n\r\n        const trs = Array.from(table.querySelectorAll<HTMLTableRowElement>('tr')).filter((tr) => isVisible(tr));\r\n\r\n        if (trs.length) {\r\n            trs[0].classList.add('first');\r\n            trs[trs.length - 1].classList.add('last');\r\n\r\n            trs.forEach((tr) => {\r\n                Array.from(tr.querySelectorAll<HTMLTableCellElement>('td:first-child, th:first-child')).forEach((td) =>\r\n                    td.classList.add('first'),\r\n                );\r\n                Array.from(tr.querySelectorAll<HTMLTableCellElement>('td:last-child, th:last-child')).forEach((td) =>\r\n                    td.classList.add('last'),\r\n                );\r\n                Array.from(\r\n                    tr.querySelectorAll<HTMLTableCellElement>(\r\n                        'td:not(:first-child):not(:last-child), th:not(:first-child):not(:last-child)',\r\n                    ),\r\n                ).forEach((td) => td.classList.add('middle'));\r\n            });\r\n        }\r\n    });\r\n}\r\n","import { consentService } from '../../services/instance/consentService';\r\n\r\nimport './style.css';\r\n\r\nconst STUB_CONTENT =\r\n    '<div class=\"optanon-placeholder-content\"><p class=\"optanon-placeholder-content-info\">You can’t see this content due to your cookie settings. Please update your preferences and allow all cookies to view the content.</p>' +\r\n    '<button class=\"ot-sdk-show-settings\">Manage cookies</button></div>';\r\n\r\nexport function createEmbedStubs(el: HTMLElement) {\r\n    const createStubs = () => {\r\n        const placeholders = el.getElementsByClassName('optanon-placeholder');\r\n        if (placeholders) {\r\n            for (const placeholder of placeholders) {\r\n                placeholder.innerHTML = STUB_CONTENT;\r\n            }\r\n        }\r\n    };\r\n\r\n    const activateStubs = () => {\r\n        const placeholders = el.getElementsByClassName('optanon-placeholder');\r\n        if (placeholders) {\r\n            for (const placeholder of placeholders) {\r\n                let categories;\r\n                placeholder.classList.forEach((classItem) => {\r\n                    classItem.startsWith('optanon-placeholder-category-');\r\n                    categories = classItem.replace('optanon-placeholder-category-', '').split('-');\r\n                });\r\n\r\n                if (categories && !consentService.hasConsent(categories)) {\r\n                    placeholder.classList.add('optanon-placeholder--visible');\r\n                }\r\n            }\r\n        }\r\n        const contents = el.getElementsByClassName('optanon-content');\r\n        if (contents) {\r\n            for (const content of contents) {\r\n                let categories;\r\n                content.classList.forEach((classItem) => {\r\n                    classItem.startsWith('optanon-content-category-');\r\n                    categories = classItem.replace('optanon-content-category-', '').split('-');\r\n                });\r\n\r\n                if (categories && !consentService.hasConsent(categories)) {\r\n                    content.classList.add('optanon-content--invisible');\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    createStubs();\r\n    consentService.onBannerClosed(activateStubs);\r\n}\r\n","import tippy, { type Instance, type Props as TippyProps } from 'tippy.js';\r\nimport 'tippy.js/themes/light.css';\r\n\r\nimport { BemElement } from '../../pages/bem';\r\n\r\nimport './style.css';\r\nimport type { TooltipStore } from './tooltipStore';\r\n\r\nexport const DEFAULT_TIPPY_PROPS: Partial<TippyProps> = {\r\n    theme: 'light',\r\n    arrow: true,\r\n    appendTo: document.body,\r\n    allowHTML: true,\r\n    trigger: 'mouseenter',\r\n    animation: 'fade',\r\n    hideOnClick: false,\r\n    interactive: true,\r\n    zIndex: 10000,\r\n    offset: [0, 3],\r\n};\r\n\r\nexport class Tooltip extends BemElement<Tooltip.Params> {\r\n    private className = () => {\r\n        return 'S-Tooltip';\r\n    };\r\n\r\n    private tooltipInstance: Instance<TippyProps> = tippy(this.el);\r\n\r\n    public onDescribe() {\r\n        const { tooltipStore, tooltipId, ...other } = this.params;\r\n\r\n        this.tooltipInstance.setProps({\r\n            ...DEFAULT_TIPPY_PROPS,\r\n            onUntrigger: this.removeAllListeners,\r\n            ...other,\r\n            onShow: this.onShow,\r\n        });\r\n\r\n        let content = this.el.getAttribute('data-tooltip') || '';\r\n\r\n        if (this.params.tooltipId && this.params.tooltipStore) {\r\n            const tooltipStore = this.params.tooltipStore;\r\n            const tooltipId = this.params.tooltipId;\r\n\r\n            content = tooltipStore.getTooltip(this.params.tooltipId);\r\n            tooltipStore.listen(() => this.setContent(tooltipStore.getTooltip(tooltipId)));\r\n        }\r\n\r\n        this.setContent(content);\r\n    }\r\n\r\n    public setContent = (content: string) => {\r\n        const contentEl = document.createElement('p');\r\n        contentEl.classList.add(`${this.className()}__content`);\r\n        contentEl.setAttribute('data-target-content', this.el.getAttribute('data-target-content') || '');\r\n        contentEl.innerHTML = content;\r\n\r\n        this.tooltipInstance?.setContent(contentEl);\r\n    };\r\n\r\n    private onShow = (instance: Instance<TippyProps>) => {\r\n        document.addEventListener('touchmove', this.hideTooltip, { passive: true });\r\n        this.params.onShow?.(instance);\r\n    };\r\n\r\n    private hideTooltip = (ev: TouchEvent) => {\r\n        if (ev.target !== this.el) {\r\n            this.tooltipInstance?.hide();\r\n            document.removeEventListener('touchmove', this.hideTooltip);\r\n            this.el.addEventListener('click', this.showTooltip);\r\n        }\r\n    };\r\n\r\n    private showTooltip = () => {\r\n        this.tooltipInstance?.show();\r\n        this.el.removeEventListener('click', this.showTooltip);\r\n    };\r\n\r\n    private removeAllListeners = () => {\r\n        document.removeEventListener('touchmove', this.hideTooltip);\r\n        this.el.removeEventListener('click', this.showTooltip);\r\n    };\r\n\r\n    public getInstance() {\r\n        return this.tooltipInstance;\r\n    }\r\n}\r\n\r\nexport namespace Tooltip {\r\n    export type Params = Partial<TippyProps> & {\r\n        tooltipStore?: TooltipStore;\r\n        tooltipId?: string;\r\n    };\r\n}\r\n","import { Tooltip } from '../../components/tooltip';\r\nimport { BemBlock } from '../bem';\r\n\r\nexport class ProductInfo extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Help-Page-Product-Info';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeElement('tooltip-icon', Tooltip, {\r\n            maxWidth: '18rem',\r\n        });\r\n    }\r\n}\r\n","import type { ICsrfTokenService } from '@flippingbook/web.utils/dist/csrf';\r\n\r\nexport const csrfTokenService: ICsrfTokenService = {\r\n    get: () => window.__flippingbook_csrf__,\r\n};\r\n","import { BemElement } from '../../bem';\r\n\r\nexport class Content extends BemElement {\r\n    setContent(content: string) {\r\n        this.el.innerHTML = content;\r\n    }\r\n\r\n    show() {\r\n        return new Promise<void>((resolve) => {\r\n            const handleTransitionEnd = () => {\r\n                this.el.removeEventListener('transitionend', handleTransitionEnd);\r\n                this.el.style.height = '';\r\n\r\n                resolve();\r\n            };\r\n\r\n            this.el.addEventListener('transitionend', handleTransitionEnd);\r\n\r\n            requestAnimationFrame(() => {\r\n                this.el.style.opacity = '0';\r\n\r\n                const firstChild = this.el.firstChild;\r\n\r\n                if (firstChild) {\r\n                    this.el.style.height = `${(firstChild as HTMLElement).scrollHeight}px`;\r\n                }\r\n\r\n                requestAnimationFrame(() => {\r\n                    this.el.style.opacity = '1';\r\n                });\r\n            });\r\n        });\r\n    }\r\n\r\n    hide() {\r\n        return new Promise<void>((resolve) => {\r\n            const handleTransitionEnd = () => {\r\n                this.el.removeEventListener('transitionend', handleTransitionEnd);\r\n\r\n                resolve();\r\n            };\r\n\r\n            this.el.addEventListener('transitionend', handleTransitionEnd);\r\n\r\n            requestAnimationFrame(() => {\r\n                this.el.style.opacity = '1';\r\n                this.el.style.height = `${this.el.scrollHeight}px`;\r\n\r\n                requestAnimationFrame(() => {\r\n                    this.el.style.opacity = '0';\r\n                });\r\n            });\r\n        });\r\n    }\r\n}\r\n","export const BASE_BUTTON_CLASS = 'S-Btn-Base';\r\n\r\nexport function getEmojiPicture(name: string, className?: string) {\r\n    const path = `${flippingbook.contentBase as string}images/help/rating/${name}`;\r\n\r\n    return (\r\n        `<picture ${className ? `class=${className}` : ''}>` +\r\n        `<source type=\"image/webp\" srcset=\"${path}.webp, ${path}@2x.webp 2x\" />` +\r\n        `<source type=\"image/png\" srcset=\"${path}.png, ${path}@2x.png 2x\" />` +\r\n        `<img src=\"${path}.png\" width=\"30\" height=\"30\" alt=\"\"/>` +\r\n        `</picture>`\r\n    );\r\n}\r\n","import { Button } from '../../../components/button';\r\nimport { BemBlock } from '../../bem';\r\n\r\nimport { BASE_BUTTON_CLASS, getEmojiPicture } from './utils';\r\n\r\nexport class ArticleRatingMainScreen extends BemBlock<ArticleRatingMainScreen.Params> {\r\n    protected blockName() {\r\n        return 'S-Help-Page-Rating-Main-Screen';\r\n    }\r\n\r\n    private template =\r\n        `<h3 class=\"${this.elementClass('title')}\">Was this article helpful?</h3>` +\r\n        `<div class=\"${this.elementClass('buttons')}\">` +\r\n        `<button class=\"${this.elementClass('yes')} ${BASE_BUTTON_CLASS}\">${getEmojiPicture(\r\n            'yes',\r\n        )}<span class=\"${this.elementClass('button-text')}\">Yes</span></button>` +\r\n        `<button class=\"${this.elementClass('no')} ${BASE_BUTTON_CLASS}\">${getEmojiPicture(\r\n            'no',\r\n        )}<span class=\"${this.elementClass('button-text')}\">No</span></button>` +\r\n        `</div>`;\r\n\r\n    onDescribe() {\r\n        this.el.innerHTML = this.template;\r\n\r\n        const yesButtonParams: Button.Params = {\r\n            onClick: this.params.onYesClick,\r\n        };\r\n\r\n        this.describeElement('yes', Button, yesButtonParams);\r\n\r\n        const noButtonParams: Button.Params = {\r\n            onClick: this.params.onNoClick,\r\n        };\r\n\r\n        this.describeElement('no', Button, noButtonParams);\r\n    }\r\n}\r\n\r\nnamespace ArticleRatingMainScreen {\r\n    export interface Params {\r\n        onYesClick: () => void;\r\n        onNoClick: () => void;\r\n    }\r\n}\r\n","import { BemElement } from '../pages/bem';\r\n\r\nexport class DisablableElement<T = Record<string, never>, E extends HTMLElement = HTMLElement> extends BemElement<\r\n    T,\r\n    E\r\n> {\r\n    setDisabled(disabled: boolean) {\r\n        if (disabled) {\r\n            this.el.setAttribute('disabled', '');\r\n        } else {\r\n            this.el.removeAttribute('disabled');\r\n        }\r\n    }\r\n}\r\n","import { DisablableElement } from '../../../components/disablable-element';\r\nimport { OpenChatButton } from '../../../components/open-chat-button';\r\nimport { BemBlock, BemElement } from '../../bem';\r\n\r\nimport { BASE_BUTTON_CLASS, getEmojiPicture } from './utils';\r\n\r\nconst ANSWERS = [\r\n    'I couldn’t find the options you mentioned',\r\n    'The solution didn’t fix my problem',\r\n    'It’s too difficult to do or understand',\r\n    'It wasn’t the info I was looking for',\r\n];\r\n\r\nclass Form extends BemElement<Form.Params> {\r\n    onDescribe() {\r\n        this.el.addEventListener('submit', (event: SubmitEvent) => {\r\n            event.preventDefault();\r\n            this.params.onSubmit();\r\n        });\r\n    }\r\n}\r\n\r\nnamespace Form {\r\n    export interface Params {\r\n        onSubmit: () => void;\r\n    }\r\n}\r\n\r\nclass Input extends BemElement<Input.Params, HTMLInputElement> {\r\n    onDescribe() {\r\n        const { onChange, onFocus } = this.params;\r\n\r\n        const handleChange = () => onChange?.(this.el.value);\r\n        const handleFocus = () => onFocus?.();\r\n\r\n        this.el.addEventListener('input', handleChange);\r\n        this.el.addEventListener('focus', handleFocus);\r\n    }\r\n\r\n    click() {\r\n        this.el.click();\r\n    }\r\n\r\n    setValue(value: string) {\r\n        this.el.setAttribute('value', value);\r\n\r\n        if (!this.el.checked) {\r\n            this.el.setAttribute('checked', '');\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Input {\r\n    export interface Params {\r\n        onChange?: (value: string) => void;\r\n        onFocus?: () => void;\r\n    }\r\n}\r\n\r\nexport class ArticleRatingNoScreen extends BemBlock<ArticleRatingNoScreen.Params> {\r\n    protected blockName() {\r\n        return 'S-Help-Page-Rating-No-Screen';\r\n    }\r\n\r\n    private reason = '';\r\n\r\n    private getAnswersHtml() {\r\n        const list = ANSWERS.map((answer) => {\r\n            return (\r\n                `<label class=\"${this.elementClass('radio-label')}\">` +\r\n                `<input class=\"${this.elementClass('radio')}\" name=\"rating-option\" type=\"radio\" value=\"${answer}\" />` +\r\n                `<span>${answer}</span>` +\r\n                '</label>'\r\n            );\r\n        }).join('');\r\n\r\n        const other =\r\n            `<label class=\"${this.elementClass('radio-label')}\">` +\r\n            `<input class=\"${this.elementClass('radio')} ${this.elementClass(\r\n                'radio-other',\r\n            )}\" name=\"rating-option\" type=\"radio\" value=\"Other\" />` +\r\n            `<input class=\"${this.elementClass(\r\n                'input-other',\r\n            )}\" name=\"rating-option\" type=\"text\" placeholder=\"Other\" />` +\r\n            `</label>`;\r\n\r\n        return list + other;\r\n    }\r\n\r\n    private template =\r\n        `${getEmojiPicture('no', this.elementClass('no-picture'))}<p class=\"${this.elementClass(\r\n            'description',\r\n        )}\">Sorry to hear that. Why was that?</p>` +\r\n        `<form class=\"${this.elementClass('form')}\">` +\r\n        `<div class=\"${this.elementClass(\r\n            'answers',\r\n        )}\">${this.getAnswersHtml()}</div><button class=\"btn btn-primary ${this.elementClass(\r\n            'submit',\r\n        )}\" type=\"submit\" disabled>Submit</button>` +\r\n        `</form>` +\r\n        `<p class=\"${this.elementClass(\r\n            'submit-done',\r\n        )}\">Thank you for your feedback. You&nbsp;can now close this window.</p>` +\r\n        `<p class=\"${this.elementClass('note')}\">Our customer support team will be glad to help you further.</p>` +\r\n        `<p class=\"${this.elementClass('contacts')}\">` +\r\n        `<button class=\"${BASE_BUTTON_CLASS} ${this.elementClass('chat')}\" type=\"button\">Chat with us</button>` +\r\n        ` or ` +\r\n        `<a href=\"/contacts?contact-form=support&subject=${encodeURIComponent(\r\n            `Feedback about Helpdesk Article ${this.params.articleTitle}`,\r\n        )}\" target=\"_blank\" class=\"${this.elementClass('mail')}\">mail us</a>.` +\r\n        `</p>`;\r\n\r\n    onDescribe() {\r\n        this.el.innerHTML = this.template;\r\n\r\n        const submitButton = this.describeElement('submit', DisablableElement, {});\r\n\r\n        const setReason = (reason: string) => {\r\n            this.reason = reason.trim();\r\n            submitButton.setDisabled(false);\r\n        };\r\n\r\n        this.describeElement('form', Form, {\r\n            onSubmit: () => {\r\n                this.params.onReasonSelected(this.reason);\r\n\r\n                this.applyModifiers({ submitted: true });\r\n            },\r\n        });\r\n\r\n        this.describeElement('chat', OpenChatButton, {});\r\n\r\n        const radioOther = this.describeElement('radio-other', Input, {});\r\n\r\n        const inputOtherParams: Input.Params = {\r\n            onChange: (value: string) => {\r\n                radioOther.setValue(value);\r\n                setReason(value);\r\n            },\r\n            onFocus: () => radioOther.click(),\r\n        };\r\n        this.describeElement('input-other', Input, inputOtherParams);\r\n\r\n        const radioElementsParams: Input.Params = {\r\n            onChange: setReason,\r\n        };\r\n        this.describeAllElements('radio', Input, radioElementsParams);\r\n    }\r\n}\r\n\r\nnamespace ArticleRatingNoScreen {\r\n    export interface Params {\r\n        articleTitle: string;\r\n        onReasonSelected: (reason: string) => void;\r\n    }\r\n}\r\n","import { BemBlock, BemElement } from '../../bem';\r\n\r\nimport { getEmojiPicture } from './utils';\r\n\r\nconst STOP_TIMER_TIME_MS = 3000;\r\nconst UPDATE_SECONDS_INTERVAL_MS = 1000;\r\nconst SECONDS_INITIAL_VALUE = 3;\r\n\r\nclass Seconds extends BemElement<{ value: number }> {\r\n    private value = this.params.value;\r\n\r\n    dec() {\r\n        this.value -= 1;\r\n        this.el.textContent = `${this.value}`;\r\n    }\r\n\r\n    get() {\r\n        return this.value;\r\n    }\r\n}\r\n\r\nexport class ArticleRatingYesScreen extends BemBlock<ArticleRatingYesScreen.Params> {\r\n    protected blockName() {\r\n        return 'S-Help-Page-Rating-Yes-Screen';\r\n    }\r\n\r\n    private template =\r\n        `${getEmojiPicture('yes')}<p class=\"${this.elementClass(\r\n            'description',\r\n        )}\">Glad to hear that, thanks for letting us know!</p>` +\r\n        `<p class=\"${this.elementClass('note')}\">This window will close in <span class=${this.elementClass(\r\n            'seconds',\r\n        )}>${SECONDS_INITIAL_VALUE}</span> seconds</p>`;\r\n\r\n    onDescribe() {\r\n        this.el.innerHTML = this.template;\r\n\r\n        const seconds = this.describeElement('seconds', Seconds, { value: SECONDS_INITIAL_VALUE });\r\n\r\n        const startTime = Date.now();\r\n\r\n        const closeIntervalId = window.setInterval(() => {\r\n            if (Date.now() - startTime > STOP_TIMER_TIME_MS) {\r\n                this.params.onClose();\r\n                return;\r\n            }\r\n\r\n            seconds.dec();\r\n        }, UPDATE_SECONDS_INTERVAL_MS);\r\n        this.params.onCloseTimerHasStarted(closeIntervalId);\r\n    }\r\n}\r\n\r\nnamespace ArticleRatingYesScreen {\r\n    export interface Params {\r\n        onClose: () => void;\r\n        onCloseTimerHasStarted: (timerId: number) => void;\r\n    }\r\n}\r\n","import { sessionStorage } from '@flippingbook/web.utils/dist/storage/StorageProvider';\r\n\r\nimport { Button } from '../../../components/button';\r\nimport { serviceClient } from '../../../services/instance/api/serviceClient';\r\nimport { csrfTokenService } from '../../../services/instance/csrfTokenService';\r\nimport { BemBlock } from '../../bem';\r\n\r\nimport { Content } from './content';\r\nimport { ArticleRatingMainScreen } from './main-screen';\r\nimport { ArticleRatingNoScreen } from './no-screen';\r\nimport { BASE_BUTTON_CLASS } from './utils';\r\nimport { ArticleRatingYesScreen } from './yes-screen';\r\n\r\nconst FIRST_APPEARANCE_TIME_SEC = 20 * 1000;\r\n\r\nconst SESSION_ID_KEY = 'S.Help.Article.Feedback.SessionId';\r\n\r\nenum Vote {\r\n    YES = 1,\r\n    NO = -1,\r\n}\r\n\r\ninterface SendVoteParams {\r\n    Path: string;\r\n    Value: Vote;\r\n    SessionId: number;\r\n}\r\n\r\ninterface SendReasonParams {\r\n    Path: string;\r\n    Reaction: string;\r\n    SessionId: number;\r\n}\r\n\r\nexport class ArticleRating extends BemBlock<ArticleRating.Params> {\r\n    protected blockName() {\r\n        return 'S-Help-Page-Rating';\r\n    }\r\n\r\n    private initialScreenTemplate =\r\n        `<div class=\"${this.elementClass('content')}\"></div>` +\r\n        `<button class=\"${this.elementClass('close')} ${BASE_BUTTON_CLASS}\"><span class=\"${this.elementClass(\r\n            'close-text',\r\n        )}\">+</span></button>`;\r\n\r\n    private mainScreenInitTemplate = `<div class=\"${this.blockName()}-Main-Screen\"></div>`;\r\n    private yesScreenInitTemplate = `<div class=\"${this.blockName()}-Yes-Screen\"></div>`;\r\n    private noScreenInitTemplate = `<div class=\"${this.blockName()}-No-Screen\"></div>`;\r\n\r\n    private setContent(content: string) {\r\n        this.el.innerHTML = content;\r\n    }\r\n\r\n    private closeIntervalId: number | undefined = undefined;\r\n\r\n    private async sendPageVote(params: SendVoteParams | SendReasonParams) {\r\n        try {\r\n            await serviceClient.callService('flippingbook-site', 'PersistentPages', 'page/vote', {\r\n                headers: {\r\n                    'X-CSRF-Token': csrfTokenService.get(),\r\n                },\r\n                body: { ...params },\r\n            });\r\n        } catch {\r\n            // do nothing\r\n        }\r\n    }\r\n\r\n    private async sendVote(params: SendVoteParams) {\r\n        return this.sendPageVote(params);\r\n    }\r\n\r\n    private async sendReason(params: SendReasonParams) {\r\n        return this.sendPageVote(params);\r\n    }\r\n\r\n    private init = () => {\r\n        const sessionIdFromStorage = sessionStorage.getJSON<number>(SESSION_ID_KEY);\r\n        sessionStorage.remove(SESSION_ID_KEY);\r\n\r\n        const newSessionId = sessionIdFromStorage || Math.random();\r\n\r\n        window.addEventListener('beforeunload', () => {\r\n            sessionStorage.setJSON(SESSION_ID_KEY, newSessionId);\r\n        });\r\n\r\n        this.setContent(this.initialScreenTemplate);\r\n\r\n        const destroy = () => {\r\n            clearInterval(this.closeIntervalId);\r\n\r\n            const handleTransitionEnd = () => {\r\n                this.el.removeEventListener('transitionend', handleTransitionEnd);\r\n                this.el.textContent = '';\r\n            };\r\n\r\n            this.el.addEventListener('transitionend', handleTransitionEnd);\r\n\r\n            requestAnimationFrame(() => {\r\n                this.el.style.opacity = '0';\r\n            });\r\n        };\r\n\r\n        const closeButtonParams: Button.Params = {\r\n            onClick: destroy,\r\n        };\r\n        this.describeElement('close', Button, closeButtonParams);\r\n\r\n        const content = this.describeElement('content', Content, {});\r\n        content.setContent(this.mainScreenInitTemplate);\r\n\r\n        const handleYesClick = async () => {\r\n            void this.sendVote({\r\n                Path: this.params.path,\r\n                Value: Vote.YES,\r\n                SessionId: newSessionId,\r\n            });\r\n\r\n            await content.hide();\r\n\r\n            content.setContent(this.yesScreenInitTemplate);\r\n\r\n            this.describeBlock('content', ArticleRatingYesScreen, {\r\n                onClose: destroy,\r\n                onCloseTimerHasStarted: (closeIntervalId) => {\r\n                    this.closeIntervalId = closeIntervalId;\r\n                },\r\n            });\r\n\r\n            void content.show();\r\n        };\r\n\r\n        const handleNoClick = async () => {\r\n            void this.sendVote({\r\n                Path: this.params.path,\r\n                Value: Vote.NO,\r\n                SessionId: newSessionId,\r\n            });\r\n\r\n            await content.hide();\r\n\r\n            content.setContent(this.noScreenInitTemplate);\r\n\r\n            this.describeBlock('content', ArticleRatingNoScreen, {\r\n                articleTitle: this.params.articleTitle,\r\n                onReasonSelected: (reason: string) => {\r\n                    void this.sendReason({\r\n                        Reaction: reason,\r\n                        Path: this.params.path,\r\n                        SessionId: newSessionId,\r\n                    });\r\n                },\r\n            });\r\n\r\n            void content.show();\r\n        };\r\n\r\n        this.describeBlock('content', ArticleRatingMainScreen, {\r\n            onYesClick: () => {\r\n                void handleYesClick();\r\n            },\r\n            onNoClick: () => {\r\n                void handleNoClick();\r\n            },\r\n        });\r\n\r\n        requestAnimationFrame(() => this.applyModifiers({ visible: true }));\r\n    };\r\n\r\n    onDescribe() {\r\n        setTimeout(this.init, FIRST_APPEARANCE_TIME_SEC);\r\n    }\r\n}\r\n\r\nnamespace ArticleRating {\r\n    export interface Params {\r\n        path: string;\r\n        articleTitle: string;\r\n    }\r\n}\r\n","import { BasePage } from '../../components/base-page';\r\nimport { runWithNewTask } from '../../util/run-with-new-task';\r\n\r\nimport { ArticleContent } from './article-content';\r\nimport { ProductInfo } from './product-info';\r\nimport { ArticleRating } from './rating';\r\n\r\nimport './styles/index.css';\r\n\r\nclass HelpArticlePage extends BasePage<HelpArticlePage.Params> {\r\n    protected blockName() {\r\n        return 'S-Help-Page';\r\n    }\r\n\r\n    onDescribe() {\r\n        super.onDescribe();\r\n\r\n        void runWithNewTask(() => {\r\n            this.describeBlock('content', ArticleContent, {});\r\n        });\r\n\r\n        void runWithNewTask(() => {\r\n            this.describeBlock('rating', ArticleRating, {\r\n                path: this.params.path,\r\n                articleTitle: this.params.articleTitle,\r\n            });\r\n        });\r\n\r\n        if (this.element('product-info')) {\r\n            void runWithNewTask(() => {\r\n                this.describeBlock('product-info', ProductInfo, {});\r\n            });\r\n        }\r\n    }\r\n}\r\nnamespace HelpArticlePage {\r\n    export interface Params {\r\n        path: string;\r\n        articleTitle: string;\r\n    }\r\n}\r\n\r\nexport { HelpArticlePage as page };\r\n","import { AnalyticsService } from '@flippingbook/web.utils/dist/analytics';\r\nimport type { IAnalyticsService } from '@flippingbook/web.utils/dist/analytics';\r\n\r\nconst release = process.env.BUILD_DATE || 'local';\r\n\r\nexport class SiteAnalyticsService extends AnalyticsService implements IAnalyticsService {\r\n    override gaEvent(eventName: string, properties?: Record<string, unknown>) {\r\n        return super.gaEvent(eventName, {\r\n            area: 'website',\r\n            release,\r\n            ...properties,\r\n        });\r\n    }\r\n\r\n    override event(\r\n        eventName: string,\r\n        eventData: IAnalyticsService.EventData,\r\n        gtagEventParams?: Partial<IAnalyticsService.GtagEventParams>,\r\n    ) {\r\n        return super.event(\r\n            eventName,\r\n            {\r\n                release,\r\n                ...eventData,\r\n            },\r\n            gtagEventParams,\r\n        );\r\n    }\r\n}\r\n","import type { IAnalyticsService } from '@flippingbook/web.utils/dist/analytics';\r\n\r\nimport { SiteAnalyticsService } from '../analytics';\r\n\r\nexport const analytics: IAnalyticsService = new SiteAnalyticsService({});\r\n","import { BemBlock } from '../../pages/bem';\r\n\r\nimport './style.css';\r\n\r\nexport class DriftIcon extends BemBlock<DriftIcon.Params> {\r\n    protected blockName() {\r\n        return 'S-Drift-Icon';\r\n    }\r\n\r\n    private onClick = () => {\r\n        this.params.onClickOnce();\r\n        this.el.removeEventListener('click', this.onClick);\r\n    };\r\n\r\n    show() {\r\n        this.applyModifiers({ visible: true });\r\n    }\r\n\r\n    hide() {\r\n        this.applyModifiers({ visible: false });\r\n    }\r\n\r\n    loading(value: boolean) {\r\n        this.applyModifiers({ loading: value });\r\n    }\r\n\r\n    onDescribe() {\r\n        this.show();\r\n        this.el.addEventListener('click', this.onClick);\r\n    }\r\n}\r\n\r\nexport namespace DriftIcon {\r\n    export interface Params {\r\n        onClickOnce: () => void;\r\n    }\r\n}\r\n","import type { ILicenseService, LicenseInfo } from '@flippingbook/web.utils/dist/license/ILicenseService';\r\nimport { Product } from '@flippingbook/web.utils/dist/ProductsList';\r\nimport { Parametrized } from '@flippingbook/web.utils/dist/service';\r\nimport type { IUserService } from '@flippingbook/web.utils/dist/user/IUserService';\r\n\r\nimport { DriftIcon } from '../components/driftIcon';\r\nimport { user } from '../services/instance/user';\r\nimport { isLoggedIn } from '../util/is-logged-in';\r\nimport { runWithNewTask } from '../util/run-with-new-task';\r\n\r\nimport type { IL10nService } from './l10n-serivce';\r\n\r\ninterface UserAttributes {\r\n    email: string;\r\n    name: string;\r\n    [key: string]: string | number | Record<string, unknown>;\r\n}\r\n\r\ninterface UserInfo {\r\n    id: number;\r\n    attributes: UserAttributes;\r\n}\r\n\r\nconst DRIFT_ICON_CLASS = 'S-Drift-Icon';\r\n\r\nexport class DriftService extends Parametrized<DriftService.Params> {\r\n    private isWidgetLoaded = false;\r\n    private isWidgetInit = false;\r\n    private isWidgetReady = false;\r\n    private driftIcon: DriftIcon | null = null;\r\n\r\n    init(): void {\r\n        this.isWidgetInit = true;\r\n\r\n        const t = (window.driftt = window.drift = window.driftt || []);\r\n\r\n        window.drift.SNIPPET_VERSION = '0.3.1';\r\n\r\n        if (!t.init) {\r\n            if (t.invoked) {\r\n                // eslint-disable-next-line no-void\r\n                return void (window.console && console.error && console.error('Drift snippet included twice.'));\r\n            }\r\n\r\n            t.invoked = !0;\r\n            t.methods = ['identify', 'config', 'track', 'reset', 'debug', 'show', 'ping', 'page', 'hide', 'off', 'on'];\r\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n            // @ts-ignore\r\n            t.factory = function (e) {\r\n                return function () {\r\n                    const n = Array.prototype.slice.call(arguments);\r\n                    // eslint-disable-next-line no-sequences\r\n                    return n.unshift(e), t.push(n), t;\r\n                };\r\n            };\r\n\r\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n            // @ts-ignore\r\n            // eslint-disable-next-line\r\n            t.methods.forEach((e) => (t[e] = t.factory(e)));\r\n\r\n            t.load = function () {\r\n                const id = Mediaparts?.DriftSettings?.id;\r\n\r\n                if (!id) {\r\n                    return;\r\n                }\r\n\r\n                const e = 3e5;\r\n                const n = Math.ceil(+new Date() / e) * e;\r\n                const o = document.createElement('script');\r\n                o.type = 'text/javascript';\r\n                o.async = !0;\r\n                o.crossOrigin = 'anonymous';\r\n                o.src = `https://js.driftt.com/include/${n}/${id}.js`;\r\n                const i = document.getElementsByTagName('script')[0];\r\n                i.parentNode?.insertBefore(o, i);\r\n            };\r\n        }\r\n    }\r\n\r\n    private getMe() {\r\n        try {\r\n            return this.params.userService.me();\r\n        } catch {\r\n            throw new Error('Could not get user info for Drift');\r\n        }\r\n    }\r\n\r\n    private getLicenses() {\r\n        try {\r\n            return this.params.licenseService.getMyLicenses(Product.FBOnline, Product.Publisher2, Product.Publ);\r\n        } catch {\r\n            throw new Error('Could not get licenses for Drift');\r\n        }\r\n    }\r\n\r\n    private async getDriftUserInfo(): Promise<UserInfo | undefined> {\r\n        const me = await this.getMe();\r\n\r\n        if (me.Email.startsWith('qapubl+')) {\r\n            return;\r\n        }\r\n\r\n        const [licenses] = await Promise.all([this.getLicenses(), this.params.l10nService.loadTranslations()]);\r\n\r\n        const loc = this.params.l10nService.get();\r\n\r\n        const fboLicense = licenses[Product.FBOnline];\r\n        const publisherLicense = licenses[Product.Publisher2];\r\n        const cloudLicense = licenses[Product.Publ];\r\n\r\n        const formatInternalName = (license: LicenseInfo) => {\r\n            const internalName = license.ProductEdition.InternalName as keyof typeof loc.ProductNames;\r\n            return loc.ProductNames[internalName];\r\n        };\r\n\r\n        const formatInstallationsLimit = (license: LicenseInfo) => {\r\n            return this.params.l10nService.pluralForm(loc.Common.SeatsPlurals, license.InstallationsLimit || 0);\r\n        };\r\n\r\n        const userAttributes = {\r\n            'FBO Plan': fboLicense ? formatInternalName(fboLicense) : '-',\r\n            'FBP Edition': publisherLicense\r\n                ? `${formatInternalName(publisherLicense)} ${formatInstallationsLimit(publisherLicense)}`\r\n                : '-',\r\n            'FBP Cloud Subscription': cloudLicense ? formatInternalName(cloudLicense) : '-',\r\n            'FBO Expiration Date': (fboLicense?.ExpirationDate ?? new Date(0)).toString(),\r\n            'FBO Issue Date': (fboLicense?.IssueDate ?? new Date(0)).toString(),\r\n            'FBP Issue Date': (publisherLicense?.IssueDate ?? new Date(0)).toString(),\r\n            'FBP Expiration Date': (publisherLicense?.ExpirationDate ?? new Date(0)).toString(),\r\n        };\r\n\r\n        return {\r\n            id: me.Id,\r\n            attributes: {\r\n                email: me.Email,\r\n                name: [me.FirstName, me.LastName].filter(Boolean).join(' '),\r\n                FirstName: me.FirstName,\r\n                ...userAttributes,\r\n            },\r\n        };\r\n    }\r\n\r\n    private async getUserData() {\r\n        const userInfo = await this.getDriftUserInfo();\r\n\r\n        if (userInfo) {\r\n            const { id, attributes } = userInfo;\r\n\r\n            window.drift.identify(`${id}`, attributes);\r\n        }\r\n    }\r\n\r\n    async loadDriftWidget(params: { onLoaded?: (api: DriftApi) => void } = {}) {\r\n        const { onLoaded } = params;\r\n\r\n        this.isWidgetLoaded = true;\r\n\r\n        if (!this.isWidgetInit) {\r\n            this.init();\r\n        }\r\n\r\n        if (isLoggedIn()) {\r\n            try {\r\n                const checkedUser = await user.checkWithIdentify();\r\n\r\n                if (checkedUser.loggedIn) {\r\n                    if (flippingbook.user) {\r\n                        flippingbook.user.loggedIn = true;\r\n                    }\r\n                    await this.getUserData();\r\n                }\r\n            } catch {\r\n                // skip\r\n            }\r\n        }\r\n\r\n        window.drift.load();\r\n        window.drift.on('ready', (api) => {\r\n            this.isWidgetReady = true;\r\n\r\n            if (onLoaded) {\r\n                onLoaded(api);\r\n            }\r\n        });\r\n    }\r\n\r\n    initDriftIcon() {\r\n        const driftIconBlock = document.querySelector(`.${DRIFT_ICON_CLASS}`);\r\n\r\n        if (!driftIconBlock) {\r\n            return;\r\n        }\r\n\r\n        const driftIcon = new DriftIcon(driftIconBlock as HTMLElement, {\r\n            onClickOnce: this.openSupportChat,\r\n        });\r\n\r\n        driftIcon.onDescribe();\r\n        this.driftIcon = driftIcon;\r\n    }\r\n\r\n    openSupportChat = () => {\r\n        if (!this.isWidgetLoaded) {\r\n            const driftIcon = this.driftIcon;\r\n\r\n            if (driftIcon) {\r\n                void runWithNewTask(() => driftIcon.loading(true));\r\n\r\n                void runWithNewTask(() =>\r\n                    this.loadDriftWidget({\r\n                        onLoaded: (api: DriftApi) => {\r\n                            driftIcon.loading(false);\r\n                            driftIcon.hide();\r\n\r\n                            api.openChat();\r\n                        },\r\n                    }),\r\n                );\r\n            }\r\n        }\r\n\r\n        if (this.isWidgetReady) {\r\n            window.drift.api.openChat();\r\n        }\r\n    };\r\n}\r\n\r\nnamespace DriftService {\r\n    export interface Params {\r\n        userService: IUserService;\r\n        licenseService: ILicenseService;\r\n        l10nService: IL10nService;\r\n    }\r\n}\r\n","import { DriftService } from '../drift';\r\n\r\nimport { l10n } from './l10n';\r\nimport { licenseService } from './licenseService';\r\nimport { user } from './user';\r\n\r\nexport const driftService = new DriftService({\r\n    licenseService,\r\n    userService: user,\r\n    l10nService: l10n,\r\n});\r\n","import { LicenseApi } from '@flippingbook/web.utils/dist/apis/license';\r\nimport type { ILicenseApi } from '@flippingbook/web.utils/dist/apis/license';\r\n\r\nimport { tokenService } from '../tokenService';\r\n\r\nimport { serviceClient as client } from './serviceClient';\r\n\r\nexport const licenseApi: ILicenseApi = new LicenseApi({\r\n    client,\r\n    tokenService,\r\n});\r\n","import { PaymentsApi } from '@flippingbook/web.utils/dist/apis/payments';\r\nimport type { IPaymentsApi } from '@flippingbook/web.utils/dist/apis/payments';\r\n\r\nimport { tokenService } from '../tokenService';\r\n\r\nimport { serviceClient as client } from './serviceClient';\r\n\r\nexport const paymentsApi: IPaymentsApi = new PaymentsApi({\r\n    client,\r\n    tokenService,\r\n});\r\n","import { SiteApi } from '@flippingbook/web.utils/dist/apis/site';\r\nimport type { ISiteApi } from '@flippingbook/web.utils/dist/apis/site';\r\n\r\nimport { tokenService } from '../tokenService';\r\n\r\nimport { httpClient } from './httpClient';\r\n\r\nexport const siteApi: ISiteApi = new SiteApi({\r\n    httpClient,\r\n    tokenService,\r\n});\r\n","import { LicenseService } from '@flippingbook/web.utils/dist/license';\r\nimport type { ILicenseService } from '@flippingbook/web.utils/dist/license';\r\n\r\nimport { licenseApi } from './api/licenseApi';\r\nimport { paymentsApi } from './api/paymentsApi';\r\nimport { siteApi } from './api/siteApi';\r\n\r\nexport const licenseService: ILicenseService = new LicenseService({\r\n    siteApi,\r\n    licenseApi,\r\n    paymentsApi,\r\n});\r\n","import { sessionStorage as storage } from '@flippingbook/web.utils/dist/storage/StorageProvider';\r\nimport { TokenService } from '@flippingbook/web.utils/dist/token';\r\n\r\nexport const tokenService = new TokenService({\r\n    storage,\r\n});\r\n","import type { IAnalyticsService } from '@flippingbook/web.utils/dist/analytics';\r\nimport { UserService } from '@flippingbook/web.utils/dist/user';\r\nimport type { IUserService } from '@flippingbook/web.utils/dist/user';\r\nimport type { UserResultType } from '@flippingbook/web.utils/dist/user/IUserService';\r\n\r\nexport interface ISiteUserService extends IUserService {\r\n    checkWithIdentify(): Promise<UserResultType>;\r\n}\r\n\r\nexport class SiteUserService extends UserService {\r\n    private analytics: IAnalyticsService;\r\n\r\n    constructor(params: SiteUserService.Params) {\r\n        super(params);\r\n        this.analytics = params.analytics;\r\n    }\r\n\r\n    async checkWithIdentify() {\r\n        const result = await super.check();\r\n\r\n        if (!result.loggedIn) {\r\n            return result;\r\n        }\r\n\r\n        const me = await this.me();\r\n        await this.analytics.identify(me);\r\n\r\n        return result;\r\n    }\r\n\r\n    private cleanupStorage(storage: Storage) {\r\n        Object.keys(storage)\r\n            .filter((key) => !/^--/.exec(key || ''))\r\n            .forEach((key) => storage.removeItem(key));\r\n    }\r\n\r\n    async logout(params: { returnUrl?: string } = { returnUrl: window.location.href }) {\r\n        await this.analytics.clearIdentify();\r\n        this.cleanupStorage(window.sessionStorage);\r\n        this.cleanupStorage(window.localStorage);\r\n        return super.logout(params);\r\n    }\r\n}\r\n\r\nexport namespace SiteUserService {\r\n    export interface Params extends UserService.Params {\r\n        analytics: IAnalyticsService;\r\n    }\r\n}\r\n","import { LogonApi } from '@flippingbook/web.utils/dist/apis/logon';\r\nimport type { ILogonApi } from '@flippingbook/web.utils/dist/apis/logon';\r\n\r\nimport { serviceLocator } from '../serviceLocator';\r\nimport { tokenService } from '../tokenService';\r\n\r\nimport { serviceClient as client } from './serviceClient';\r\n\r\nexport const logonApi: ILogonApi = new LogonApi({\r\n    tokenService,\r\n    serviceLocator,\r\n    client,\r\n    navigator: {\r\n        navigate(href) {\r\n            return window.location.replace(href);\r\n        },\r\n    },\r\n});\r\n","import { SiteUserService } from '../user';\r\nimport type { ISiteUserService } from '../user';\r\n\r\nimport { analytics } from './analytics';\r\nimport { logonApi } from './api/logonApi';\r\nimport { tokenService } from './tokenService';\r\n\r\nexport const user: ISiteUserService = new SiteUserService({\r\n    logonApi,\r\n    analytics,\r\n    tokenService,\r\n});\r\n","function waitForImageLoad(image: HTMLImageElement) {\r\n    return new Promise<void>((resolve) => {\r\n        if (image.complete) {\r\n            resolve();\r\n            return;\r\n        }\r\n\r\n        const handleImageLoad = () => {\r\n            image.removeEventListener('load', handleImageLoad);\r\n            resolve();\r\n        };\r\n\r\n        image.addEventListener('load', handleImageLoad);\r\n    });\r\n}\r\n\r\nfunction getImageLoadList(params: { container?: HTMLElement; classNames: string[] }) {\r\n    const selector = params.classNames.map((c) => `.${c}`).join(', ');\r\n    const container = params.container || document;\r\n    const imgElements = Array.from(container.querySelectorAll<HTMLImageElement>(selector));\r\n\r\n    return imgElements.map((imgElement) => waitForImageLoad(imgElement));\r\n}\r\n\r\nexport function waitForAllImagesLoad(params: { container?: HTMLElement; classNames: string[] }) {\r\n    const loadList = getImageLoadList(params);\r\n    return Promise.all(loadList);\r\n}\r\n\r\nexport function waitForAnyImagesLoad(params: { container?: HTMLElement; classNames: string[] }) {\r\n    const loadList = getImageLoadList(params);\r\n    return Promise.race(loadList);\r\n}\r\n\r\nexport function setLoadedClassForImage() {\r\n    const imgElements = Array.from(document.querySelectorAll<HTMLImageElement>('img'));\r\n    const loadedClassName = 'loaded';\r\n\r\n    imgElements.forEach((imgElement) => {\r\n        if (imgElement.complete) {\r\n            imgElement.classList.add(loadedClassName);\r\n            return;\r\n        }\r\n\r\n        const handleImageLoad = () => {\r\n            imgElement.removeEventListener('load', handleImageLoad);\r\n            imgElement.classList.add(loadedClassName);\r\n        };\r\n\r\n        imgElement.addEventListener('load', handleImageLoad);\r\n    });\r\n}\r\n","import { localStorage, sessionStorage } from '@flippingbook/web.utils/dist/storage';\r\n\r\nexport function isLoggedIn() {\r\n    return Boolean(\r\n        (flippingbook.user && flippingbook.user.loggedIn) ||\r\n            sessionStorage.get('PA.TokenService.Token') ||\r\n            localStorage.get('FlippingBook.PA.DefaultProduct'),\r\n    );\r\n}\r\n","// like jQuery :visible\r\nexport const isVisible = function <E extends HTMLElement = HTMLElement>(elem: E) {\r\n    return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\r\n};\r\n","module.exports = {\"featureFlags\":{},\"sentryDsn\":\"https://8fa71d45f6aa4a06be961166e0ee495b@sentry.io/1359544\",\"sentryEnable\":false};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-bundle.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \"-bundle.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 3365;","__webpack_require__.p = \"/content/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t1392: 0,\n\t3365: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"957\":1,\"1597\":1,\"2989\":1,\"5515\":1,\"6783\":1,\"9974\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr\n\n// no prefetching\n\n// no preloaded","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t1392: 0,\n\t3365: 0,\n\t4514: 0,\n\t5949: 0,\n\t5908: 0,\n\t1891: 0,\n\t299: 0,\n\t8724: 0,\n\t9662: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(59(08|49)|1597|1891|299|4514|9662|9974)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunkflippingbooksite\"] = globalThis[\"webpackChunkflippingbooksite\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4514,5949,5908,1891,299,9662,8351,6208,4558,8417,6173,4829], () => (__webpack_require__(98781)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","Listenable","listeners","Set","listen","cb","this","add","unlisten","delete","notify","forEach","l","constructor","params","ListenableParametrized","super","ServiceDataStorage","data","getData","readonly","updateData","update","overwriteData","newData","storage","serviceStorage","RealStorage","baseObj","get","key","getItem","set","value","setItem","remove","removeItem","clear","getJSON","val","JSON","parse","setJSON","stringify","ObjectStorage","getStorage","window","isStorageSupported","localStorage","sessionStorage","objectStorage","EXTERNAL_URL_REGEX","contentUrl","contentRoot","src","test","charAt","loadJs","Promise","resolve","reject","scriptTag","document","createElement","addEventListener","setAttribute","head","appendChild","loadCss","linkTag","Clickable","B","onDescribe","onClick","el","Button","OpenChatButton","openChat","driftService","openSupportChat","onOpen","ArticleContent","blockName","element","Array","from","querySelectorAll","table","closest","classList","contains","filter","tr","trs","length","td","placeholders","getElementsByClassName","placeholder","innerHTML","createStubs","consentService","onBannerClosed","categories","classItem","startsWith","replace","split","hasConsent","contents","content","DEFAULT_TIPPY_PROPS","theme","arrow","appendTo","body","allowHTML","trigger","animation","hideOnClick","interactive","zIndex","offset","Tooltip","className","tooltipInstance","setContent","contentEl","getAttribute","onShow","instance","hideTooltip","passive","ev","target","hide","removeEventListener","showTooltip","show","removeAllListeners","tooltipStore","tooltipId","other","setProps","onUntrigger","getTooltip","getInstance","ProductInfo","describeElement","maxWidth","csrfTokenService","__flippingbook_csrf__","Content","handleTransitionEnd","style","height","requestAnimationFrame","opacity","firstChild","scrollHeight","BASE_BUTTON_CLASS","getEmojiPicture","name","path","flippingbook","contentBase","ArticleRatingMainScreen","template","elementClass","yesButtonParams","onYesClick","noButtonParams","onNoClick","DisablableElement","setDisabled","disabled","removeAttribute","ANSWERS","Form","event","preventDefault","onSubmit","Input","onChange","onFocus","click","setValue","checked","ArticleRatingNoScreen","reason","getAnswersHtml","encodeURIComponent","articleTitle","map","answer","join","submitButton","setReason","trim","onReasonSelected","applyModifiers","submitted","radioOther","inputOtherParams","radioElementsParams","describeAllElements","Seconds","dec","textContent","ArticleRatingYesScreen","seconds","startTime","Date","now","closeIntervalId","setInterval","onClose","onCloseTimerHasStarted","SESSION_ID_KEY","Vote","ArticleRating","initialScreenTemplate","mainScreenInitTemplate","yesScreenInitTemplate","noScreenInitTemplate","undefined","init","sessionIdFromStorage","newSessionId","Math","random","destroy","clearInterval","closeButtonParams","handleYesClick","async","sendVote","Path","Value","YES","SessionId","describeBlock","handleNoClick","NO","sendReason","Reaction","visible","sendPageVote","serviceClient","callService","headers","setTimeout","HelpArticlePage","release","SiteAnalyticsService","gaEvent","eventName","properties","area","eventData","gtagEventParams","DriftIcon","onClickOnce","loading","DriftService","Parametrized","isWidgetLoaded","isWidgetInit","isWidgetReady","driftIcon","loadDriftWidget","onLoaded","api","drift","t","driftt","SNIPPET_VERSION","invoked","console","error","methods","factory","e","n","prototype","slice","call","arguments","unshift","push","load","id","Mediaparts","DriftSettings","ceil","o","type","crossOrigin","i","getElementsByTagName","parentNode","insertBefore","getMe","userService","me","Error","getLicenses","licenseService","getMyLicenses","Product","FBOnline","Publisher2","Publ","getDriftUserInfo","Email","licenses","all","l10nService","loadTranslations","loc","fboLicense","publisherLicense","cloudLicense","formatInternalName","license","internalName","ProductEdition","InternalName","ProductNames","userAttributes","pluralForm","Common","SeatsPlurals","InstallationsLimit","formatInstallationsLimit","ExpirationDate","toString","IssueDate","Id","attributes","email","FirstName","LastName","Boolean","getUserData","userInfo","identify","user","checkWithIdentify","loggedIn","on","initDriftIcon","driftIconBlock","querySelector","l10n","licenseApi","client","tokenService","paymentsApi","siteApi","httpClient","SiteUserService","analytics","result","check","cleanupStorage","Object","keys","exec","logout","returnUrl","location","href","clearIdentify","logonApi","serviceLocator","navigator","navigate","setLoadedClassForImage","imgElements","loadedClassName","imgElement","complete","handleImageLoad","isLoggedIn","isVisible","elem","offsetWidth","offsetHeight","getClientRects","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","m","amdO","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","r","getter","__esModule","d","a","getPrototypeOf","obj","mode","then","ns","create","def","current","indexOf","getOwnPropertyNames","definition","defineProperty","enumerable","f","chunkId","reduce","promises","u","miniCssF","g","globalThis","Function","prop","hasOwnProperty","url","done","script","needAttach","scripts","s","charset","timeout","nc","onScriptComplete","prev","onerror","onload","clearTimeout","doneFns","removeChild","bind","Symbol","toStringTag","nmd","paths","children","p","loadStylesheet","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","oldTag","nonce","errorType","realHref","err","code","request","nextSibling","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","promise","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}