{"version":3,"file":"order-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/./sources/src/components/button/index.ts","webpack://flippingbooksite/./sources/src/services/intersector.ts","webpack://flippingbooksite/./sources/src/util/run-once-on-intersect.ts","webpack://flippingbooksite/./sources/src/components/switch/index.ts","webpack://flippingbooksite/./sources/src/components/tooltip/index.ts","webpack://flippingbooksite/./sources/src/pages/order/buy-link.ts","webpack://flippingbooksite/./sources/src/pages/order/compare-table-group-row.ts","webpack://flippingbooksite/./sources/src/pages/order/compare-table-hidable-group.ts","webpack://flippingbooksite/./sources/src/pages/order/compare-table-visible-group.ts","webpack://flippingbooksite/./sources/src/pages/order/stickyObserver/index.ts","webpack://flippingbooksite/./sources/src/pages/order/compare-table.ts","webpack://flippingbooksite/./sources/src/services/layout-checker.ts","webpack://flippingbooksite/./sources/src/services/instance/layoutChecker.ts","webpack://flippingbooksite/./sources/src/pages/order/base-card.ts","webpack://flippingbooksite/./sources/src/pages/order/price.ts","webpack://flippingbooksite/./sources/src/components/counter/index.ts","webpack://flippingbooksite/./sources/src/pages/order/counter/index.ts","webpack://flippingbooksite/./sources/src/pages/order/default-card.ts","webpack://flippingbooksite/./sources/src/pages/order/cards.ts","webpack://flippingbooksite/./sources/src/pages/order/editions-block.ts","webpack://flippingbooksite/./sources/src/pages/order/page-analytics.ts","webpack://flippingbooksite/./sources/src/pages/order/index.ts","webpack://flippingbooksite/./sources/src/services/analytics.ts","webpack://flippingbooksite/./sources/src/services/instance/analytics.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/current-layout.ts","webpack://flippingbooksite/./sources/src/util/image.ts","webpack://flippingbooksite/./sources/src/util/is-visible.ts","webpack://flippingbooksite/./sources/src/util/run-with-mixpanel-dependency.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 { 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 { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nexport class SingleElementIntersector extends Parametrized<SingleElementIntersector.Params> {\r\n    private intersector: IntersectionObserver;\r\n\r\n    private observerCallback = (entries: IntersectionObserverEntry[], observer: IntersectionObserver) =>\r\n        entries.forEach((entry) => this.params.onIntersectionChange(entry, observer));\r\n\r\n    constructor(params: SingleElementIntersector.Params) {\r\n        super(params);\r\n        this.intersector = new IntersectionObserver(this.observerCallback, params);\r\n    }\r\n\r\n    observe() {\r\n        this.intersector.observe(this.params.el);\r\n    }\r\n\r\n    unobserve() {\r\n        this.intersector.unobserve(this.params.el);\r\n    }\r\n}\r\n\r\nexport namespace SingleElementIntersector {\r\n    export interface Params extends IntersectionObserverInit {\r\n        el: HTMLElement;\r\n        onIntersectionChange: (entry: IntersectionObserverEntry, observer: IntersectionObserver) => void;\r\n    }\r\n}\r\n","import { SingleElementIntersector } from '../services/intersector';\r\n\r\nimport { runWithNewTask } from './run-with-new-task';\r\n\r\nconst blockThreshold = [0, 1];\r\n\r\ninterface Params {\r\n    el: HTMLElement;\r\n    fn: () => void | Promise<void>;\r\n    threshold?: number | number[];\r\n    rootMargin?: string;\r\n}\r\n\r\nexport function runOnceOnIntersect(params: Params) {\r\n    const { el, fn, threshold, rootMargin = '0px' } = params;\r\n\r\n    const intersector = new SingleElementIntersector({\r\n        onIntersectionChange: (entry: IntersectionObserverEntry) => {\r\n            if (entry.isIntersecting) {\r\n                intersector.unobserve();\r\n\r\n                void runWithNewTask(fn);\r\n            }\r\n        },\r\n        threshold: threshold || blockThreshold,\r\n        el,\r\n        rootMargin,\r\n    });\r\n    intersector.observe();\r\n}\r\n","import { BemBlock, BemElement } from '../../pages/bem';\r\n\r\nimport './styles/index.css';\r\n\r\nexport class Switch extends BemBlock<Switch.Params> {\r\n    protected blockName() {\r\n        return 'S-Switch';\r\n    }\r\n\r\n    private checkboxInput = this.describeElement('input', Switch.Input, this.params);\r\n\r\n    setChecked(value: boolean) {\r\n        this.checkboxInput.setChecked(value);\r\n    }\r\n}\r\n\r\nexport namespace Switch {\r\n    export interface Params {\r\n        onInit?: (checked: boolean) => void;\r\n        onChange: (checked: boolean) => void;\r\n    }\r\n\r\n    export class Input extends BemElement<Params, HTMLInputElement> {\r\n        setChecked(value: boolean) {\r\n            this.el.checked = value;\r\n        }\r\n\r\n        onDescribe() {\r\n            this.el.addEventListener('change', () => this.params.onChange(this.el.checked));\r\n\r\n            if (this.params.onInit) {\r\n                this.params.onInit(this.el.checked);\r\n            }\r\n        }\r\n    }\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 { tokenService } from '../../services/instance/tokenService';\r\nimport { BemElement } from '../bem';\r\n\r\nexport class BuyLink extends BemElement<Record<string, never>, HTMLAnchorElement> {\r\n    private token: string | undefined;\r\n\r\n    onDescribe() {\r\n        const updateHrefWithToken = () => {\r\n            const token = tokenService.get();\r\n            this.token = token;\r\n\r\n            const href = this.el.getAttribute('href');\r\n\r\n            if (href) {\r\n                this.setHref(href);\r\n            }\r\n        };\r\n\r\n        tokenService.listen(updateHrefWithToken);\r\n    }\r\n\r\n    setHref(href: string) {\r\n        const link = this.token ? `${href}&token=${this.token}` : href;\r\n\r\n        this.el.setAttribute('href', link);\r\n    }\r\n}\r\n","import { BemElement } from '../bem';\r\n\r\nexport class ComparableTableGroupRow extends BemElement {\r\n    private hasDiffs = false;\r\n\r\n    onDescribe() {\r\n        this.hasDiffs = ComparableTableGroupRow.hasDifferencesByRow(this.el);\r\n        this.applyModifiers({ 'has-diffs': this.hasDiffs });\r\n    }\r\n\r\n    public hasDifferences() {\r\n        return this.hasDiffs;\r\n    }\r\n\r\n    public getGroupName() {\r\n        const parentElement = this.el.parentElement;\r\n\r\n        if (!parentElement) {\r\n            throw new Error('row has no parent');\r\n        }\r\n\r\n        return parentElement.getAttribute('data-group-name');\r\n    }\r\n\r\n    public setEvenOnDiff(isEven: boolean) {\r\n        const modifier = isEven ? 'on-diff-even' : 'on-diff-odd';\r\n\r\n        this.applyModifiers({ [modifier]: true });\r\n    }\r\n\r\n    public static hasDifferencesByRow(row: HTMLElement) {\r\n        const cells: HTMLElement[] = Array.from(row.children) as HTMLElement[];\r\n        const allEqual = (arr: string[]) => !arr.length || arr.every((i) => i === arr[1]);\r\n        return !allEqual(cells.slice(1).map((x) => x.innerHTML));\r\n    }\r\n}\r\n","import { BemElement } from '../bem';\r\n\r\nexport class ComparableTableHidableGroup extends BemElement {\r\n    public expand = () => {\r\n        this.applyModifiers({ expanded: true });\r\n    };\r\n\r\n    public collapse = () => {\r\n        this.applyModifiers({ expanded: false });\r\n    };\r\n\r\n    private groupId = this.el.getAttribute('data-group-id');\r\n\r\n    public getGroupId = () => {\r\n        return this.groupId;\r\n    };\r\n}\r\n","import { BemElement } from '../bem';\r\n\r\nimport { ComparableTableGroupRow } from './compare-table-group-row';\r\n\r\nexport class ComparableTableVisibleGroup extends BemElement {\r\n    onDescribe() {\r\n        const rows = this.getRows();\r\n\r\n        const hasDiffs = rows.slice(1).some((row: HTMLElement) => ComparableTableGroupRow.hasDifferencesByRow(row));\r\n\r\n        this.applyModifiers({ 'has-diffs': hasDiffs });\r\n    }\r\n\r\n    private getRows = () => {\r\n        return Array.from(this.el.children) as HTMLElement[];\r\n    };\r\n}\r\n","// https://developers.google.com/web/updates/2017/09/sticky-headers\r\n\r\nimport './style.css';\r\n\r\nfunction addSentinel(el: HTMLElement) {\r\n    const sentinel = document.createElement('tbody');\r\n    sentinel.classList.add('S-Pricing-Sticky-Sentinel');\r\n    return el?.parentElement?.appendChild(sentinel);\r\n}\r\n\r\nfunction fireEvent(stuck: boolean) {\r\n    const e = new CustomEvent('sticky-change', { detail: { stuck } });\r\n    document.dispatchEvent(e);\r\n}\r\n\r\nexport function observeHeaders(el: HTMLElement) {\r\n    const observer = new IntersectionObserver(\r\n        (records) => {\r\n            for (const record of records) {\r\n                const targetInfo = record.boundingClientRect;\r\n\r\n                // Started sticking.\r\n                if (!record.isIntersecting && targetInfo.bottom < 0) {\r\n                    fireEvent(true);\r\n                }\r\n\r\n                // Stopped sticking.\r\n                if (record.isIntersecting && targetInfo.bottom >= 0) {\r\n                    fireEvent(false);\r\n                }\r\n            }\r\n        },\r\n        {\r\n            threshold: 0,\r\n        },\r\n    );\r\n\r\n    const sentinel = addSentinel(el);\r\n    if (sentinel) {\r\n        observer.observe(sentinel);\r\n    }\r\n}\r\n","import { Switch } from '../../components/switch';\r\nimport { Tooltip } from '../../components/tooltip';\r\nimport { BemBlock, BemElement } from '../bem';\r\n\r\nimport { BuyLink } from './buy-link';\r\nimport { ComparableTableGroupRow } from './compare-table-group-row';\r\nimport { ComparableTableHidableGroup } from './compare-table-hidable-group';\r\nimport { ComparableTableVisibleGroup } from './compare-table-visible-group';\r\nimport { observeHeaders } from './stickyObserver';\r\nimport type { Payment } from './types';\r\n\r\nexport class TableGroupChangeVisibilityBtn extends BemElement<TableGroupChangeVisibilityBtn.Params> {\r\n    private groupId = this.el.getAttribute('data-group-id') || '';\r\n    private expand = false;\r\n\r\n    onDescribe() {\r\n        this.el.addEventListener('click', (e: MouseEvent) => {\r\n            (e.currentTarget as HTMLElement).blur();\r\n            this.expand = !this.expand;\r\n\r\n            this.applyModifiers({\r\n                expanded: this.expand,\r\n            });\r\n\r\n            this.params.onClick(this.groupId, this.expand);\r\n        });\r\n    }\r\n}\r\n\r\nexport namespace TableGroupChangeVisibilityBtn {\r\n    export interface Params {\r\n        onClick: (groupId: string, expand: boolean) => void;\r\n    }\r\n}\r\n\r\nexport class StickyHeader extends BemElement<StickyHeader.Params> {\r\n    private setOffset = (offset: number) => {\r\n        this.el.style.top = `${offset}px`;\r\n    };\r\n\r\n    public onDescribe() {\r\n        observeHeaders(this.el);\r\n        window.addEventListener('resize', () => this.setOffset(this.params.containerEl.offsetTop));\r\n        this.setOffset(this.params.containerEl.offsetTop);\r\n    }\r\n}\r\n\r\nexport namespace StickyHeader {\r\n    export interface Params {\r\n        containerEl: HTMLElement;\r\n    }\r\n}\r\n\r\nexport class ComparableTable extends BemBlock<ComparableTable.Params> {\r\n    protected blockName() {\r\n        return 'S-Order-Comparable-Table';\r\n    }\r\n\r\n    private showButtonClick = (groupId: string, expand: boolean) => {\r\n        this.hidableGroups.forEach((group) => {\r\n            if (group.getGroupId() === groupId) {\r\n                group[expand ? 'expand' : 'collapse']();\r\n            }\r\n        });\r\n    };\r\n\r\n    private proButton = this.describeElement('header-btn-Professional', BuyLink, {});\r\n\r\n    private corporateButton = this.describeElement('header-btn-Corporate', BuyLink, {});\r\n\r\n    private hidableGroups = this.describeAllElements('hidable-group', ComparableTableHidableGroup, {});\r\n\r\n    private markOddEvenDiffRows(rows: ComparableTableGroupRow[]) {\r\n        const rowGroupMap = new Map<string | null, boolean>();\r\n\r\n        rows.forEach((row) => {\r\n            const hasDiff = row.hasDifferences();\r\n\r\n            if (!hasDiff) {\r\n                return;\r\n            }\r\n\r\n            const groupName = row.getGroupName();\r\n\r\n            const isEven = !rowGroupMap.get(groupName);\r\n            rowGroupMap.set(groupName, isEven);\r\n            row.setEvenOnDiff(isEven);\r\n        });\r\n    }\r\n\r\n    public onDescribe() {\r\n        this.describeAllElements('visible-group', ComparableTableVisibleGroup, {});\r\n\r\n        this.describeBlock('table-header-switcher', Switch, {\r\n            onChange: this.onChange,\r\n            onInit: (checked: boolean) => this.onChange(checked),\r\n        } as Switch.Params);\r\n\r\n        const rows = this.describeAllElements('row', ComparableTableGroupRow, {});\r\n        this.markOddEvenDiffRows(rows);\r\n\r\n        this.describeAllElements('show-btn', TableGroupChangeVisibilityBtn, { onClick: this.showButtonClick });\r\n\r\n        this.describeAllElements('tooltip', Tooltip, {\r\n            placement: 'top',\r\n            maxWidth: '18rem',\r\n        });\r\n        this.describeAllElements('tooltip-cell', Tooltip, {\r\n            maxWidth: '18rem',\r\n        });\r\n\r\n        document.addEventListener('sticky-change', ((e: CustomEvent<{ stuck: boolean }>) => {\r\n            this.applyModifiers({ 'show-buy-btn': e.detail.stuck });\r\n        }) as EventListener);\r\n\r\n        this.describeElement('sticky-header', StickyHeader, {\r\n            containerEl: this.params.containerEl,\r\n        });\r\n    }\r\n\r\n    public updateProButtonLink = (count: number, payment?: Payment) => {\r\n        if (count > this.params.professionalMaxValuableCount) {\r\n            this.applyModifiers({ 'pro-limit-exceeded': true });\r\n            return;\r\n        }\r\n\r\n        this.applyModifiers({ 'pro-limit-exceeded': false });\r\n\r\n        if (payment) {\r\n            this.proButton.setHref(payment.link);\r\n        }\r\n    };\r\n\r\n    public updateCorporateButtonLink = (count: number, payment?: Payment) => {\r\n        if (count > this.params.corporateMaxValuableCount) {\r\n            this.applyModifiers({ 'corp-limit-exceeded': true });\r\n            return;\r\n        }\r\n\r\n        this.applyModifiers({ 'corp-limit-exceeded': false });\r\n\r\n        if (payment) {\r\n            this.corporateButton.setHref(payment.link);\r\n        }\r\n    };\r\n\r\n    private onChange = (checked: boolean) => {\r\n        this.applyModifiers({ 'show-diffs': checked });\r\n    };\r\n}\r\n\r\nexport namespace ComparableTable {\r\n    export interface Params {\r\n        professionalMaxValuableCount: number;\r\n        corporateMaxValuableCount: number;\r\n        containerEl: HTMLElement;\r\n    }\r\n}\r\n","import { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nimport { currentLayout } from '../util/current-layout';\r\n\r\nexport class LayoutChecker extends Parametrized<LayoutChecker.Params> {\r\n    isIn() {\r\n        return this.params.layout === currentLayout();\r\n    }\r\n}\r\n\r\nexport namespace LayoutChecker {\r\n    export type LayoutSize = 'lg' | 'md' | 'sm' | 'xs';\r\n\r\n    export interface Params {\r\n        layout: LayoutSize;\r\n    }\r\n}\r\n","import { LayoutChecker } from '../layout-checker';\r\n\r\nexport const mobileLayoutChecker = new LayoutChecker({ layout: 'xs' });\r\nexport const tabletLayoutChecker = new LayoutChecker({ layout: 'sm' });\r\nexport const largeLayoutChecker = new LayoutChecker({ layout: 'lg' });\r\n","import _debounce from 'lodash-es/debounce';\r\nimport { createSingleton, type CreateSingletonInstance, type Props as TippyProps } from 'tippy.js';\r\n\r\nimport { Tooltip } from '../../components/tooltip';\r\nimport { mobileLayoutChecker } from '../../services/instance/layoutChecker';\r\nimport { BemBlock } from '../bem';\r\n\r\nconst MOBILE_TOOLTIP_PROPS: Partial<TippyProps> = { placement: 'top', maxWidth: '18rem', offset: [0, 3] };\r\nconst DEFAULT_TOOLTIP_PROPS: Partial<TippyProps> = { placement: 'right', maxWidth: '22rem', offset: [-20, 3] };\r\nexport class BaseCard<T> extends BemBlock<T> {\r\n    protected blockName() {\r\n        return 'S-Order-Editions-Cards-Card';\r\n    }\r\n\r\n    private tooltips: CreateSingletonInstance<TippyProps> | null = null;\r\n    private isMobile = mobileLayoutChecker.isIn();\r\n\r\n    onDescribe() {\r\n        const tooltipBlocks = this.describeAllElements('tooltip', Tooltip, {\r\n            maxWidth: '22rem',\r\n        });\r\n\r\n        this.tooltips = createSingleton(\r\n            tooltipBlocks.map((x) => x.getInstance()),\r\n            {\r\n                theme: 'light-and-purple',\r\n                animation: 'scale',\r\n                ...(this.isMobile ? MOBILE_TOOLTIP_PROPS : DEFAULT_TOOLTIP_PROPS),\r\n            },\r\n        );\r\n        window.addEventListener('resize', _debounce(this.onResize, 100));\r\n    }\r\n\r\n    private onResize = () => {\r\n        const isMobile = mobileLayoutChecker.isIn();\r\n        if (this.isMobile === isMobile) {\r\n            return;\r\n        }\r\n\r\n        this.isMobile = isMobile;\r\n        const tooltipProps = isMobile ? MOBILE_TOOLTIP_PROPS : DEFAULT_TOOLTIP_PROPS;\r\n        this.tooltips?.setProps(tooltipProps);\r\n    };\r\n}\r\n","import { BemElement } from '../bem';\r\n\r\nexport class Price extends BemElement {\r\n    set(value: string) {\r\n        this.el.innerHTML = value;\r\n    }\r\n}\r\n","import { BemBlock, BemElement } from '../../pages/bem';\r\nimport { Clickable } from '../button';\r\n\r\nimport './style.css';\r\n\r\nclass Button extends Clickable<Clickable.Params, HTMLButtonElement> {\r\n    enable() {\r\n        this.setDisabled(false);\r\n    }\r\n\r\n    disable() {\r\n        this.setDisabled(true);\r\n    }\r\n\r\n    private setDisabled(value: boolean) {\r\n        this.applyModifiers({\r\n            disabled: value,\r\n        });\r\n\r\n        this.el.disabled = value;\r\n    }\r\n}\r\n\r\nclass Value extends BemElement<Value.Params> {\r\n    private selfValue: number = 0;\r\n\r\n    onDescribe() {\r\n        const parsedValue = Number(this.el.innerText);\r\n\r\n        if (!isNaN(parsedValue)) {\r\n            this.selfValue = parsedValue;\r\n        }\r\n\r\n        this.params.onInit(this.selfValue);\r\n    }\r\n\r\n    get value() {\r\n        return this.selfValue;\r\n    }\r\n\r\n    setValue(value: number) {\r\n        this.selfValue = value;\r\n        this.el.innerText = `${value}`;\r\n\r\n        if (this.params.onChange) {\r\n            this.params.onChange(value);\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Value {\r\n    export interface Params {\r\n        onChange?: (value: number) => void;\r\n        onInit: (value: number) => void;\r\n    }\r\n}\r\n\r\nexport class Counter extends BemBlock<Counter.Params> {\r\n    protected blockName() {\r\n        return 'S-Counter';\r\n    }\r\n\r\n    private updateDecrementButton = ({ min, value }: { min: number; value: number }) => {\r\n        const action = value <= min ? 'disable' : 'enable';\r\n\r\n        this.decrementButton[action]();\r\n    };\r\n\r\n    private updateIncrementButton = ({ max, value }: { max: number; value: number }) => {\r\n        const action = value >= max ? 'disable' : 'enable';\r\n\r\n        this.incrementButton[action]();\r\n    };\r\n\r\n    private decrementButton = this.describeElement('dec', Button, {\r\n        onClick: () => this.incrementByDelta(-1),\r\n    } as Clickable.Params);\r\n\r\n    private incrementButton = this.describeElement('inc', Button, {\r\n        onClick: () => this.incrementByDelta(1),\r\n    } as Clickable.Params);\r\n\r\n    private onChange = (value: number) => {\r\n        const { min, max } = this.params;\r\n\r\n        if (min !== undefined) {\r\n            this.updateDecrementButton({\r\n                min,\r\n                value,\r\n            });\r\n        }\r\n\r\n        if (max !== undefined) {\r\n            this.updateIncrementButton({\r\n                max,\r\n                value,\r\n            });\r\n        }\r\n\r\n        if (this.params.onChange) {\r\n            this.params.onChange(value);\r\n        }\r\n    };\r\n\r\n    private onInit = (value: number) => {\r\n        if (this.params.onInit) {\r\n            this.params.onInit(value);\r\n        }\r\n    };\r\n\r\n    private valueComponent = this.describeElement('value', Value, {\r\n        onChange: this.onChange,\r\n        onInit: this.onInit,\r\n    } as Value.Params);\r\n\r\n    private incrementByDelta(delta: number) {\r\n        const newValue = this.valueComponent.value + delta;\r\n\r\n        const restrictedByMin = this.params.min === undefined ? newValue : Math.max(newValue, this.params.min);\r\n\r\n        const restrictedByMax =\r\n            this.params.max === undefined ? restrictedByMin : Math.min(restrictedByMin, this.params.max);\r\n\r\n        this.valueComponent.setValue(restrictedByMax);\r\n    }\r\n}\r\n\r\nexport namespace Counter {\r\n    export interface Params {\r\n        max?: number;\r\n        min?: number;\r\n        onChange?: (value: number) => void;\r\n        onInit?: (value: number) => void;\r\n    }\r\n}\r\n","import { Counter } from '../../../components/counter';\r\nimport { Tooltip } from '../../../components/tooltip';\r\nimport { BemBlock } from '../../bem';\r\n\r\nimport './style.css';\r\n\r\nexport class PricingCounter extends BemBlock<PricingCounter.Params> {\r\n    protected blockName() {\r\n        return 'S-Order-Counter';\r\n    }\r\n\r\n    onDescribe() {\r\n        const counterParams: Counter.Params = {\r\n            ...this.params,\r\n            onChange: (count) => {\r\n                this.params.onChange(count);\r\n            },\r\n        };\r\n\r\n        this.describeBlock('counter', Counter, counterParams);\r\n\r\n        this.describeElement('tooltip', Tooltip, {\r\n            maxWidth: '20rem',\r\n        });\r\n    }\r\n}\r\n\r\nnamespace PricingCounter {\r\n    export interface Params {\r\n        max: number;\r\n        min: number;\r\n        onChange: (value: number) => void;\r\n    }\r\n}\r\n","import { BuyLink } from '../order/buy-link';\r\nimport { Price } from '../order/price';\r\n\r\nimport { BaseCard } from './base-card';\r\nimport { PricingCounter } from './counter';\r\nimport type { Payment } from './types';\r\n\r\nconst USER_COUNT_DELTA = 1;\r\n\r\nfunction getPaymentByUserCount(payments: Payment[], userCount: number) {\r\n    return payments.find((payment) => payment.userCount === userCount);\r\n}\r\n\r\nexport class DefaultCard extends BaseCard<DefaultCard.Params> {\r\n    protected blockName() {\r\n        return 'S-Order-Editions-Cards-Card';\r\n    }\r\n\r\n    private price = this.describeElement('price', Price, {});\r\n    private buyLink = this.describeElement('buy', BuyLink, {});\r\n    private renewPrice = this.describeElement('renew-price', Price, {});\r\n\r\n    protected offerMicrodataElement = this.element('offer-microdata');\r\n\r\n    private onUserCountChange = (count: number) => {\r\n        const paymentUserCount = count - USER_COUNT_DELTA;\r\n        const payment = getPaymentByUserCount(this.params.payments, paymentUserCount);\r\n\r\n        if (count <= this.params.maxValuableCount) {\r\n            this.applyModifiers({ 'limit-exceeded': false });\r\n\r\n            if (!this.element('offer-microdata') && this.offerMicrodataElement) {\r\n                this.el.appendChild(this.offerMicrodataElement);\r\n            }\r\n\r\n            if (payment) {\r\n                this.price.set(payment.priceFormatted);\r\n                this.buyLink.setHref(payment.link);\r\n                this.setPaymentMicrodata(payment);\r\n            }\r\n        } else {\r\n            this.applyModifiers({ 'limit-exceeded': true });\r\n            this.offerMicrodataElement?.remove();\r\n        }\r\n\r\n        if (payment) {\r\n            this.renewPrice.set(payment.renewPrice);\r\n        }\r\n        this.params.onChange?.(count, payment);\r\n    };\r\n\r\n    onDescribe() {\r\n        super.onDescribe();\r\n\r\n        this.describeBlock('counter', PricingCounter, {\r\n            min: 1,\r\n            max: 99,\r\n            onChange: this.onUserCountChange,\r\n        });\r\n    }\r\n\r\n    private setPaymentMicrodata(payment: Payment) {\r\n        const priceElements = this.el.querySelectorAll('meta[itemprop=\"price\"]');\r\n\r\n        priceElements.forEach((priceMeta) => {\r\n            priceMeta.setAttribute('content', payment.price);\r\n        });\r\n    }\r\n}\r\n\r\nexport namespace DefaultCard {\r\n    export interface Params {\r\n        payments: Payment[];\r\n        maxValuableCount: number;\r\n        onChange?: (count: number, payment?: Payment) => void;\r\n    }\r\n}\r\n","import { BemBlock } from '../bem';\r\n\r\nimport { BaseCard } from './base-card';\r\nimport { DefaultCard } from './default-card';\r\nimport type { Payment } from './types';\r\n\r\nexport class Cards extends BemBlock<Cards.Params> {\r\n    protected blockName() {\r\n        return 'S-Order-Editions-Cards';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeBlock('professional', DefaultCard, {\r\n            payments: this.params.professionalPayments,\r\n            onChange: this.params.onProChange,\r\n            maxValuableCount: this.params.professionalMaxValuableCount,\r\n        } as DefaultCard.Params);\r\n        this.describeBlock('business', DefaultCard, {\r\n            payments: this.params.corporatePayments,\r\n            onChange: this.params.onCorporateChange,\r\n            maxValuableCount: this.params.corporateMaxValuableCount,\r\n        } as DefaultCard.Params);\r\n\r\n        this.describeBlock('enterprise', BaseCard, {});\r\n    }\r\n}\r\n\r\nnamespace Cards {\r\n    export interface Params {\r\n        professionalPayments: Payment[];\r\n        corporatePayments: Payment[];\r\n        professionalMaxValuableCount: number;\r\n        corporateMaxValuableCount: number;\r\n        onProChange: (count: number, payment?: Payment) => void;\r\n        onCorporateChange: (count: number, payment?: Payment) => void;\r\n    }\r\n}\r\n","import { BemBlock } from '../bem';\r\n\r\nimport { Cards } from './cards';\r\nimport type { Payment } from './types';\r\n\r\nexport class EditionsBlock extends BemBlock<EditionsBlock.Params> {\r\n    protected blockName() {\r\n        return 'S-Order-Editions';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeBlock('cards', Cards, {\r\n            professionalPayments: this.params.professionalPayments,\r\n            corporatePayments: this.params.corporatePayments,\r\n            professionalMaxValuableCount: this.params.professionalMaxValuableCount,\r\n            corporateMaxValuableCount: this.params.corporateMaxValuableCount,\r\n            onProChange: this.params.onProChange,\r\n            onCorporateChange: this.params.onCorporateChange,\r\n        });\r\n    }\r\n}\r\n\r\nnamespace EditionsBlock {\r\n    export interface Params {\r\n        professionalPayments: Payment[];\r\n        corporatePayments: Payment[];\r\n        professionalMaxValuableCount: number;\r\n        corporateMaxValuableCount: number;\r\n        onProChange: (count: number, payment?: Payment) => void;\r\n        onCorporateChange: (count: number, payment?: Payment) => void;\r\n    }\r\n}\r\n","import type { IAnalyticsService } from '@flippingbook/web.utils/dist/analytics';\r\nimport { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nimport { analytics } from '../../services/instance/analytics';\r\nimport { runWithMixpanelDependency } from '../../util/run-with-mixpanel-dependency';\r\n\r\nclass PageAnalytics extends Parametrized<PageAnalytics.Params> {\r\n    sendPageView(loggedIn: boolean) {\r\n        const analyticParams: { Login: string } | Record<string, never> = loggedIn ? { Login: 'Login' } : {};\r\n\r\n        runWithMixpanelDependency(() => {\r\n            void analytics.event('Pricing page', analyticParams);\r\n        });\r\n    }\r\n}\r\n\r\nnamespace PageAnalytics {\r\n    export interface Params {\r\n        analytics: IAnalyticsService;\r\n    }\r\n}\r\n\r\nexport const pageAnalytics = new PageAnalytics({ analytics });\r\n","import { BasePage } from '../../components/base-page';\r\nimport { user } from '../../services/instance/user';\r\nimport { runOnceOnIntersect } from '../../util/run-once-on-intersect';\r\nimport { runWithNewTask } from '../../util/run-with-new-task';\r\n\r\nimport { ComparableTable } from './compare-table';\r\nimport { EditionsBlock } from './editions-block';\r\nimport { pageAnalytics } from './page-analytics';\r\nimport type { Payment } from './types';\r\n\r\nimport './styles/index.css';\r\n\r\nclass Order extends BasePage<Order.Params> {\r\n    protected blockName() {\r\n        return 'S-Order';\r\n    }\r\n\r\n    async onDescribe() {\r\n        super.onDescribe();\r\n\r\n        void runWithNewTask(() => {\r\n            const comparableTable = this.describeBlock('table', ComparableTable, {\r\n                containerEl: this.el,\r\n                professionalMaxValuableCount: this.params.professionalMaxValuableCount,\r\n                corporateMaxValuableCount: this.params.corporateMaxValuableCount,\r\n            });\r\n\r\n            this.describeBlock('editions', EditionsBlock, {\r\n                professionalPayments: this.params.professionalPayments,\r\n                corporatePayments: this.params.corporatePayments,\r\n                professionalMaxValuableCount: this.params.professionalMaxValuableCount,\r\n                corporateMaxValuableCount: this.params.corporateMaxValuableCount,\r\n                onProChange: comparableTable.updateProButtonLink,\r\n                onCorporateChange: comparableTable.updateCorporateButtonLink,\r\n            });\r\n        });\r\n\r\n        const faqElementName = 'faq';\r\n\r\n        runOnceOnIntersect({\r\n            el: this.ensureElement(faqElementName),\r\n            fn: async () => {\r\n                const { FAQ } = await import('./faq');\r\n                this.describeBlock(faqElementName, FAQ, {});\r\n            },\r\n        });\r\n\r\n        try {\r\n            const { loggedIn } = await user.check();\r\n            pageAnalytics.sendPageView(loggedIn);\r\n        } catch {\r\n            pageAnalytics.sendPageView(false);\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Order {\r\n    export interface Params {\r\n        professionalMaxValuableCount: number;\r\n        corporateMaxValuableCount: number;\r\n        professionalPayments: Payment[];\r\n        corporatePayments: Payment[];\r\n    }\r\n}\r\n\r\nexport { Order 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 { 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","import type { LayoutChecker } from '../services/layout-checker';\r\n\r\nimport { isVisible } from './is-visible';\r\n\r\nexport const currentLayout = () => {\r\n    const testarea = document.getElementById('layout-test')!;\r\n    const divs = Array.from(testarea.getElementsByTagName('div'));\r\n    const hiddenElem = divs.reduce((acc, el) => (!isVisible(el) ? el.className : acc), '');\r\n    return hiddenElem.substring(7) as LayoutChecker.LayoutSize;\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","// 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","export function runWithMixpanelDependency<T>(callback: () => T) {\r\n    if (window.mixpanel) {\r\n        callback();\r\n        return;\r\n    }\r\n\r\n    window.addEventListener('mixpanelInitiated', callback);\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 = 8709;","__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\t8709: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"957\":1,\"1597\":1,\"2989\":1,\"5515\":1,\"6396\":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\t8709: 0,\n\t4514: 0,\n\t5949: 0,\n\t5908: 0,\n\t1891: 0,\n\t9876: 0,\n\t3505: 0,\n\t7788: 0,\n\t2590: 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|2590|3505|4514|7788|9876|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,9876,3505,7788,2590,8351,6208,8417,5307,4829], () => (__webpack_require__(20131)))\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","Clickable","B","onDescribe","onClick","el","addEventListener","Button","SingleElementIntersector","Parametrized","observerCallback","entries","observer","entry","onIntersectionChange","intersector","IntersectionObserver","observe","unobserve","blockThreshold","Switch","checkboxInput","describeElement","Input","blockName","setChecked","value","checked","onChange","onInit","DEFAULT_TIPPY_PROPS","theme","arrow","appendTo","document","body","allowHTML","trigger","animation","hideOnClick","interactive","zIndex","offset","Tooltip","className","tooltipInstance","setContent","content","contentEl","createElement","classList","setAttribute","getAttribute","innerHTML","onShow","instance","hideTooltip","passive","ev","target","hide","removeEventListener","showTooltip","show","removeAllListeners","tooltipStore","tooltipId","other","setProps","onUntrigger","getTooltip","getInstance","BuyLink","tokenService","token","get","href","setHref","link","ComparableTableGroupRow","hasDiffs","hasDifferencesByRow","applyModifiers","hasDifferences","getGroupName","parentElement","Error","setEvenOnDiff","isEven","modifier","row","cells","Array","from","children","arr","slice","map","x","length","every","i","ComparableTableHidableGroup","expand","expanded","collapse","groupId","getGroupId","ComparableTableVisibleGroup","getRows","some","fireEvent","stuck","e","CustomEvent","detail","dispatchEvent","observeHeaders","records","record","targetInfo","boundingClientRect","isIntersecting","bottom","threshold","sentinel","appendChild","addSentinel","TableGroupChangeVisibilityBtn","currentTarget","blur","StickyHeader","setOffset","style","top","window","containerEl","offsetTop","ComparableTable","showButtonClick","hidableGroups","group","proButton","corporateButton","describeAllElements","updateProButtonLink","count","payment","professionalMaxValuableCount","updateCorporateButtonLink","corporateMaxValuableCount","markOddEvenDiffRows","rows","rowGroupMap","Map","groupName","set","describeBlock","placement","maxWidth","LayoutChecker","isIn","layout","mobileLayoutChecker","MOBILE_TOOLTIP_PROPS","DEFAULT_TOOLTIP_PROPS","BaseCard","tooltips","isMobile","onResize","tooltipProps","tooltipBlocks","Price","enable","setDisabled","disable","disabled","Value","selfValue","parsedValue","Number","innerText","isNaN","setValue","Counter","updateDecrementButton","min","action","decrementButton","updateIncrementButton","max","incrementButton","incrementByDelta","undefined","valueComponent","delta","newValue","restrictedByMin","Math","restrictedByMax","PricingCounter","counterParams","DefaultCard","price","buyLink","renewPrice","offerMicrodataElement","element","onUserCountChange","paymentUserCount","payments","userCount","find","maxValuableCount","priceFormatted","setPaymentMicrodata","remove","querySelectorAll","priceMeta","Cards","professionalPayments","onProChange","corporatePayments","onCorporateChange","EditionsBlock","PageAnalytics","sendPageView","loggedIn","analyticParams","Login","analytics","event","pageAnalytics","Order","comparableTable","fn","rootMargin","runOnceOnIntersect","ensureElement","async","FAQ","user","check","release","SiteAnalyticsService","gaEvent","eventName","properties","area","eventData","gtagEventParams","SiteUserService","checkWithIdentify","result","me","identify","cleanupStorage","Object","keys","filter","key","exec","removeItem","logout","returnUrl","location","clearIdentify","sessionStorage","localStorage","logonApi","serviceLocator","client","navigator","navigate","replace","currentLayout","testarea","getElementById","getElementsByTagName","reduce","acc","substring","setLoadedClassForImage","imgElements","loadedClassName","imgElement","complete","handleImageLoad","isVisible","elem","offsetWidth","offsetHeight","getClientRects","runWithMixpanelDependency","callback","mixpanel","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","id","loaded","__webpack_modules__","call","m","amdO","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","splice","r","n","getter","__esModule","d","a","getPrototypeOf","obj","t","mode","then","ns","create","def","current","indexOf","getOwnPropertyNames","definition","o","defineProperty","enumerable","f","chunkId","Promise","all","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","url","done","push","script","needAttach","scripts","s","charset","timeout","nc","src","onScriptComplete","prev","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","setTimeout","bind","type","head","Symbol","toStringTag","nmd","paths","p","loadStylesheet","resolve","reject","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","oldTag","linkTag","nonce","errorType","realHref","err","name","code","request","insertBefore","nextSibling","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","test","promise","error","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}