{"version":3,"file":"presentation-examples-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/analytics.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/formatDateForServer.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/index.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/parseWsDate.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/parsers/paymentInfo.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/throttle.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/try-parse-date.ts","webpack://flippingbooksite/./node_modules/@flippingbook/web.utils/src/util/wait.ts","webpack://flippingbooksite/./sources/src/components/go-trial-button.ts","webpack://flippingbooksite/./sources/src/components/embed/index.ts","webpack://flippingbooksite/./sources/src/components/bookshelf-embed/index.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/bookshelves.ts","webpack://flippingbooksite/./sources/src/components/calendly-button/fbo/index.ts","webpack://flippingbooksite/./sources/src/services/layout-checker.ts","webpack://flippingbooksite/./sources/src/services/instance/layoutChecker.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/document/example.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/document/index.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/trackable.ts","webpack://flippingbooksite/./sources/src/util/run-by-fps.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/embedding.ts","webpack://flippingbooksite/./sources/src/components/watch-video-link/index.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/features/branding.ts","webpack://flippingbooksite/./sources/src/components/hidden.ts","webpack://flippingbooksite/./sources/src/components/video.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/features/embed-video.ts","webpack://flippingbooksite/./sources/src/util/delay.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/features/forms.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/features/gifs.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/features/password.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/features/popup.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/features.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/gallery/demos-collection.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/gallery/scrollable.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/gallery/index.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/first-screen.ts","webpack://flippingbooksite/./sources/src/components/animated-bubbles/index.ts","webpack://flippingbooksite/./sources/src/components/tabber/TabberElement.ts","webpack://flippingbooksite/./sources/src/components/tabber/TabberPanel.ts","webpack://flippingbooksite/./sources/src/components/tabber/TabberTab.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/industries.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/sticky-navigation.ts","webpack://flippingbooksite/./sources/src/pages/presentation-examples/index.ts","webpack://flippingbooksite/./sources/src/services/analytics.ts","webpack://flippingbooksite/./sources/src/services/instance/analytics.ts","webpack://flippingbooksite/./sources/src/services/CTAanalytics.ts","webpack://flippingbooksite/./sources/src/services/instance/cta-analytics.ts","webpack://flippingbooksite/./sources/src/services/dialog-provider.ts","webpack://flippingbooksite/./sources/src/services/instance/dialogProvider.ts","webpack://flippingbooksite/./sources/src/services/instance/siteAntispamService.ts","webpack://flippingbooksite/./sources/src/util/current-layout.ts","webpack://flippingbooksite/./sources/src/util/get-login-consumer.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 type { IFbAnalytics } from './fb-analytics';\nimport type { Product } from './ProductsList';\nimport { Parametrized } from './service';\nimport type { UserInfo } from './user';\nimport { wait } from './util';\n\ndeclare global {\n    interface Window {\n        fbAnalytics?: IFbAnalytics;\n    }\n}\n\nexport interface IAnalyticsService {\n    event(\n        eventName: string,\n        eventData: IAnalyticsService.EventData,\n        gtagEventParams?: Partial<IAnalyticsService.GtagEventParams>,\n    ): Promise<void>;\n    gaEvent(eventName: string, properties?: Record<string, unknown>): Promise<void>;\n    identify(user: UserInfo): Promise<void>;\n    clearIdentify(): Promise<void>;\n    alias(user: UserInfo): Promise<void>;\n    formatDate(date: Date): string;\n    pageView(eventData?: IAnalyticsService.EventData): Promise<void>;\n    trackSignup(params: IAnalyticsService.TrackSignupParams): Promise<void>;\n    update(user: UserInfo): Promise<void>;\n    writeToUserProfile(params: IAnalyticsService.EventData): Promise<void>;\n    writeToUserProfileOnce(params: IAnalyticsService.EventData): Promise<void>;\n    incrementUserProfileKey(props: IAnalyticsService.IncrementEventData): Promise<void>;\n    optOut(params: Partial<IAnalyticsService.OptOutParams>): void;\n}\n\nexport namespace IAnalyticsService {\n    export interface TrackSignupParams {\n        user: UserInfo;\n        method: string;\n        product: Product;\n        captchaAttempts?: number;\n        locale: string;\n        pageLocale: string;\n    }\n\n    export interface GtagEventParams {\n        non_interaction?: boolean;\n    }\n\n    export interface EventData {\n        [key: string]: string | number | string[] | number[];\n    }\n\n    export interface IncrementEventData {\n        prop: string;\n        value?: number;\n        /**\n         * @deprecated Use await or .then() instead\n         */\n        callback?: () => void;\n    }\n\n    export interface OptOutParams {\n        ga: boolean;\n        mixpanel: boolean;\n        bing: boolean;\n        fb: boolean;\n    }\n}\n\nconst GA_EVENT_TIMEOUT = 350;\nconst MIXPANEL_LOADED_TIMEOUT = 3000;\nconst MIXPANEL_EVENT_TIMEOUT = 350;\n\nfunction getGAEventCommonParams() {\n    return {\n        page_title: document.title,\n        page_path: window.location.pathname,\n        page_location: window.location.href,\n    };\n}\n\nexport class AnalyticsService extends Parametrized<AnalyticsService.Params> implements IAnalyticsService {\n    protected optOutState: IAnalyticsService.OptOutParams;\n\n    constructor(params: AnalyticsService.Params) {\n        super(params);\n\n        const { bing = false, fb = false, ga = false, mixpanel = false } = params.optOut || {};\n\n        this.optOutState = {\n            bing,\n            fb,\n            ga,\n            mixpanel,\n        };\n    }\n\n    async event(\n        eventName: string,\n        eventData: IAnalyticsService.EventData,\n        gtagEventParams?: Partial<IAnalyticsService.GtagEventParams>,\n    ): Promise<void> {\n        const gaId = this.getGaId();\n\n        // Track with mixpanel\n        const mixpanelPromise = this.mixpanelTrack(eventName, {\n            'GA Client ID': gaId,\n            ...eventData,\n        });\n\n        const fbAnalyticsPromise = this.withFbAnalytics((fbAnalytics) =>\n            fbAnalytics.send(eventName, {\n                'GA Client ID': gaId,\n                ...eventData,\n            }),\n        );\n\n        // Google Analytics\n        void this.gaEvent(eventName, {\n            category: 'mixpanel',\n            ...eventData,\n            ...gtagEventParams,\n        });\n\n        // Bing Ads\n        if (!this.optOutState.bing) {\n            const bing = 'uetq' in window ? uetq : [];\n            bing.push({\n                el: eventName, // Event label\n                ev: eventData.value || 0, // Event value\n            });\n        }\n\n        await Promise.allSettled([mixpanelPromise, fbAnalyticsPromise]);\n    }\n\n    private mixpanelTrack(eventName: string, properties?: Record<string, unknown>) {\n        return this.withMixpanel((mixpanel) => {\n            return Promise.race([\n                wait(MIXPANEL_EVENT_TIMEOUT),\n                new Promise<void>((resolve) => mixpanel.track(eventName, properties, resolve)),\n            ]);\n        });\n    }\n\n    // Google Analytics v4\n    gaEvent(eventName: string, properties?: Record<string, unknown>): Promise<void> {\n        return new Promise((resolve) => {\n            const timeout = setTimeout(() => {\n                clearTimeout(timeout);\n                resolve();\n            }, GA_EVENT_TIMEOUT);\n\n            const opts = {\n                ...getGAEventCommonParams(),\n                non_interaction: false,\n                event_callback: () => {\n                    clearTimeout(timeout);\n                    resolve();\n                },\n                ...properties,\n            };\n\n            void this.withGtag((gtag) => gtag('event', eventName, opts));\n        });\n    }\n\n    formatDate(date: Date): string {\n        return `${date.getUTCFullYear()}-${date.getUTCMonth() + 1}-${date.getUTCDate()}`;\n    }\n\n    pageView(eventData?: IAnalyticsService.EventData) {\n        return this.withGtag((gtag) => {\n            const commonParams = getGAEventCommonParams();\n\n            gtag('set', commonParams);\n            gtag('event', 'page_view', {\n                ...commonParams,\n                ...(eventData && {\n                    ...eventData,\n                }),\n            });\n        });\n    }\n\n    private gaIdentify(user: UserInfo) {\n        return this.withGtag((gtag) => {\n            gtag('set', {\n                user_id: user.Id,\n                dimension2: 'Member',\n            });\n\n            return this.gaEvent('Registration Tracking', {\n                non_interaction: true,\n            });\n        });\n    }\n\n    private mixpanelSetBaseFields(user: UserInfo) {\n        return this.writeToUserProfileOnce({\n            ssouid: user.Id,\n            $email: user.Email,\n            ...(user.FirstName && {\n                $first_name: user.FirstName,\n            }),\n            ...(user.LastName && {\n                $last_name: user.LastName,\n            }),\n        });\n    }\n\n    private mixpanelIdentify(user: UserInfo) {\n        return this.withMixpanel((mixpanel) => {\n            mixpanel.identify(String(user.Id));\n            return this.mixpanelSetBaseFields(user);\n        });\n    }\n\n    private mixpanelAlias(user: UserInfo) {\n        return this.withMixpanel((mixpanel) => {\n            mixpanel.alias(String(user.Id));\n            return this.mixpanelSetBaseFields(user);\n        });\n    }\n\n    private fbAnalyticsIdentify(user: UserInfo) {\n        return this.withFbAnalytics((fbAnalytics) => fbAnalytics.setSsoId(user.Id));\n    }\n\n    async identify(user: UserInfo) {\n        await Promise.all([this.mixpanelIdentify(user), this.gaIdentify(user), this.fbAnalyticsIdentify(user)]);\n    }\n\n    private clearGAIdentify() {\n        return this.withGtag((gtag) => {\n            gtag('set', {\n                dimension2: 'Guest',\n            });\n\n            return this.gaEvent('Registration Tracking', {\n                non_interaction: true,\n            });\n        });\n    }\n\n    private clearMixpanelIdentify() {\n        return this.withMixpanel((mixpanel) => {\n            mixpanel.reset();\n        });\n    }\n\n    private clearFbAnalyticsIdentify() {\n        return this.withFbAnalytics((fbAnalytics) => {\n            fbAnalytics.clear();\n        });\n    }\n\n    async clearIdentify() {\n        await Promise.all([this.clearMixpanelIdentify(), this.clearGAIdentify(), this.clearFbAnalyticsIdentify()]);\n    }\n\n    async alias(user: UserInfo) {\n        await Promise.all([this.mixpanelAlias(user), this.gaIdentify(user)]);\n    }\n\n    update(user: UserInfo) {\n        return this.writeToUserProfile({\n            ssouid: user.Id,\n            $email: user.Email,\n            ...(user.FirstName && {\n                $first_name: user.FirstName,\n            }),\n            ...(user.LastName && {\n                $last_name: user.LastName,\n            }),\n        });\n    }\n\n    async trackSignup(params: IAnalyticsService.TrackSignupParams) {\n        const { user, product, method, locale, pageLocale, captchaAttempts = 0 } = params;\n\n        await this.event('First Registration', {\n            'Registration Method': method,\n            InitialProduct: product,\n            ssouid: String(user.Id),\n            'Captcha Tries Count': String(captchaAttempts),\n            'Previous Page Localization':\n                locale === pageLocale ? `Full ${locale.toUpperCase()}` : `Partly ${locale.toUpperCase()}`,\n        });\n\n        await this.identify(user);\n    }\n\n    writeToUserProfile(params: IAnalyticsService.EventData): Promise<void> {\n        return this.withMixpanel((mixpanel) => {\n            return Promise.race([\n                wait(MIXPANEL_EVENT_TIMEOUT),\n                new Promise<void>((resolve) => mixpanel.people.set(params, resolve)),\n            ]);\n        });\n    }\n\n    private async getLoadedMixpanel() {\n        if ('mixpanelLoaded' in window) {\n            return Promise.race([wait(MIXPANEL_LOADED_TIMEOUT), mixpanelLoaded.promise]);\n        }\n\n        return undefined;\n    }\n\n    writeToUserProfileOnce(params: IAnalyticsService.EventData): Promise<void> {\n        return this.withMixpanel(async (mixpanel) => {\n            const loadedMixpanel = await this.getLoadedMixpanel();\n\n            const properties = Object.keys(params).reduce<IAnalyticsService.EventData>((acc, propertyName) => {\n                const propertyValueFromMixPanel = loadedMixpanel\n                    ? loadedMixpanel.get_property(propertyName)\n                    : undefined;\n\n                return {\n                    ...acc,\n                    [propertyName]:\n                        propertyValueFromMixPanel === undefined ? params[propertyName] : propertyValueFromMixPanel,\n                };\n            }, {});\n\n            return Promise.race([\n                wait(MIXPANEL_EVENT_TIMEOUT),\n                new Promise<void>((resolve) => (loadedMixpanel || mixpanel).people.set_once(properties, resolve)),\n            ]);\n        });\n    }\n\n    incrementUserProfileKey(props: IAnalyticsService.IncrementEventData): Promise<void> {\n        const { prop, value, callback = () => {} } = props;\n\n        return this.withMixpanel((mixpanel) => {\n            return Promise.race([\n                wait(MIXPANEL_EVENT_TIMEOUT),\n                new Promise<void>((resolve) => mixpanel.people.increment(prop, value, resolve)),\n            ]).then(() => callback());\n        });\n    }\n\n    private withGtag(cb: (gtag: Gtag.Gtag) => void | Promise<void>): Promise<void> {\n        if (!this.optOutState.ga && this.hasGtag()) {\n            return Promise.resolve(cb(gtag));\n        }\n        return Promise.resolve();\n    }\n\n    private withMixpanel(cb: (mixpanel: Mixpanel) => void | Promise<void>): Promise<void> {\n        if (!this.optOutState.mixpanel && 'mixpanel' in window) {\n            return Promise.resolve(cb(mixpanel));\n        }\n        return Promise.resolve();\n    }\n\n    private withFbAnalytics(cb: (fbAnalytics: IFbAnalytics) => void | Promise<void>): Promise<void> {\n        const fb = window?.fbAnalytics;\n\n        if (fb) {\n            return Promise.resolve(cb(fb));\n        }\n        return Promise.resolve();\n    }\n\n    private getGaId() {\n        if ('gaGlobal' in window && !!gaGlobal) {\n            try {\n                return JSON.parse(gaGlobal.vid) as string;\n            } catch {\n                // skip\n            }\n        }\n\n        if (document && 'cookie' in document) {\n            const gaCookie = document.cookie\n                .split(';')\n                .map((c) => c.replace(/\\s/g, '').split('=', 2))\n                .find((c) => c[0] === '_ga');\n            if (gaCookie) {\n                const pattern = 'GAx.y.';\n                return gaCookie[1].substring(pattern.length);\n            }\n        }\n\n        return '';\n    }\n\n    private hasGtag() {\n        return typeof gtag === 'function';\n    }\n\n    optOut(params: Partial<IAnalyticsService.OptOutParams>) {\n        this.optOutState = {\n            ...this.optOutState,\n            ...params,\n        };\n    }\n}\n\nexport namespace AnalyticsService {\n    export interface Params {\n        optOut?: Partial<IAnalyticsService.OptOutParams>;\n    }\n}\n","export function formatDateForServer(date: Date): string {\n    return date.toISOString();\n}\n\nexport function formatDateForServerShort(date: Date): string {\n    return date.toISOString().replace(/T.*$/, '');\n}\n\nexport function formatStartDate(date: Date): string {\n    const utcLikeLocal = new Date(\n        date.getUTCFullYear(),\n        date.getUTCMonth(),\n        date.getUTCDate(),\n        0,\n        date.getTimezoneOffset() * -1,\n    );\n    return formatDateForServerShort(utcLikeLocal);\n}\n\nexport function formatEndDate(date: Date): string {\n    const nextDay = new Date(\n        date.getUTCFullYear(),\n        date.getUTCMonth(),\n        date.getUTCDate() + 1,\n        0,\n        date.getTimezoneOffset() * -1,\n    );\n    return formatDateForServerShort(nextDay);\n}\n","import parseWsDate from './parseWsDate';\n\nexport { loadCss, loadJs } from './load';\nexport { parsePaymentInfo } from './parsers/paymentInfo';\nexport { formatDateForServer } from './formatDateForServer';\nexport { wait } from './wait';\nexport { throttle } from './throttle';\n\nexport { parseWsDate };\n","const parseWsDate = (wsDate: string | Date | null): Date | null => {\n    if (!wsDate) {\n        return null;\n    }\n    if (wsDate instanceof Date) {\n        return wsDate;\n    }\n    try {\n        return new Date(parseInt(wsDate.substring(6), 10));\n    } catch {\n        return null;\n    }\n};\n\nexport default parseWsDate;\n","import type { PaymentInfo as PaymentInfoJson } from '../../apis/payments';\nimport type { PaymentInfo } from '../../subscriptions';\nimport { tryParseDate } from '../try-parse-date';\n\nexport const parsePaymentInfo = (payment: PaymentInfoJson): PaymentInfo => {\n    return {\n        ...payment,\n        LastUpdate: tryParseDate(payment.LastUpdate ? payment.LastUpdate : ''),\n        Items: payment.Items.map(parsePaymentInfo),\n    };\n};\n","export const throttle = <T extends unknown[]>(callback: (...args: T) => unknown, delay?: number) => {\n    let shouldWait = false;\n\n    return (...args: T) => {\n        if (!shouldWait) {\n            callback(...args);\n\n            shouldWait = true;\n\n            setTimeout(() => {\n                shouldWait = false;\n            }, delay);\n        }\n    };\n};\n","export function tryParseDate(dateString: string): Date | null {\n    if (!Number.isNaN(Date.parse(dateString))) {\n        return new Date(dateString);\n    }\n    return null;\n}\n","export const wait = (timeout: number) => new Promise<void>((resolve) => setTimeout(resolve, timeout));\n","import { BemBlock, BemElement } from '../pages/bem';\r\nimport type { CTAAnalyticsService } from '../services/CTAanalytics';\r\nimport { ctaAnalytics } from '../services/instance/cta-analytics';\r\nimport { serviceLocator } from '../services/instance/serviceLocator';\r\nimport { siteAntispamService } from '../services/instance/siteAntispamService';\r\nimport { getLoginConsumer } from '../util/get-login-consumer';\r\nimport { isLoggedIn } from '../util/is-logged-in';\r\nimport { runWithNewTask } from '../util/run-with-new-task';\r\n\r\nfunction goToUrlOnNextTask(url: string) {\r\n    // transition to the page should be performed after all other events\r\n    // Example: sending analytics\r\n    setTimeout(() => {\r\n        window.location.href = url;\r\n    }, 0);\r\n}\r\n\r\nasync function getLink(product: string, direction: string | null) {\r\n    const loggedIn = isLoggedIn();\r\n\r\n    const [baseRegisterUrl] = await serviceLocator.resolve({\r\n        subsystem: 'generic',\r\n        service: 'logon-register-ui',\r\n    });\r\n    const consumer = getLoginConsumer();\r\n    const userDetachedContext = siteAntispamService.getUserDetachedContext();\r\n    const registerUrl = `${baseRegisterUrl}?r=${consumer}&t=both&asc=${userDetachedContext}`;\r\n\r\n    if (product === 'fb-online') {\r\n        return !loggedIn ? `${registerUrl}&products=FBOnline` : '/account/online';\r\n    }\r\n\r\n    if (product === 'fb-publisher' && direction === 'auto') {\r\n        return !loggedIn\r\n            ? `${registerUrl}&products=Publisher2&resume-url=${window.encodeURIComponent(\r\n                  `${window.location.origin}/downloads?autostart=true`,\r\n              )}`\r\n            : '/downloads?autostart=true';\r\n    }\r\n\r\n    if (product === 'fb-publisher' && direction === 'account') {\r\n        return '/account/software';\r\n    }\r\n\r\n    if (product === 'fb-publisher') {\r\n        return '/downloads';\r\n    }\r\n\r\n    if (product === 'fb-server') {\r\n        return '/automation';\r\n    }\r\n\r\n    if (loggedIn) {\r\n        return '/account/autonav';\r\n    }\r\n\r\n    return '/account/signup';\r\n}\r\n\r\nexport class GoTrialButton extends BemElement<GoTrialButton.Params> {\r\n    private direction = this.el.getAttribute('data-direction');\r\n    private product = this.el.getAttribute('data-product') || 'fb-online';\r\n\r\n    public onDescribe() {\r\n        this.el.addEventListener('click', (ev) => {\r\n            void this.onLinkClick(ev);\r\n        });\r\n    }\r\n\r\n    private sendAnalytics = () => {\r\n        return ctaAnalytics.send(this.params.position);\r\n    };\r\n\r\n    private onLinkClick = async (ev: Event) => {\r\n        ev.preventDefault();\r\n        ev.stopPropagation();\r\n\r\n        await runWithNewTask(() => this.sendAnalytics());\r\n\r\n        const newLink = await getLink(this.product, this.direction);\r\n        goToUrlOnNextTask(newLink);\r\n    };\r\n}\r\nexport namespace GoTrialButton {\r\n    export interface Params {\r\n        position: CTAAnalyticsService.Position;\r\n    }\r\n}\r\n\r\nexport const GoTrialButtonWrapper = (blockName: string) =>\r\n    class GoTrialButtonWrapper extends BemBlock<GoTrialButton.Params> {\r\n        protected blockName(): string {\r\n            return blockName;\r\n        }\r\n\r\n        onDescribe() {\r\n            this.describeElement('go-trial', GoTrialButton, this.params);\r\n        }\r\n    };\r\n","import { BemBlock, BemElement } from '../../pages/bem';\r\nimport { ConsentGroup } from '../../services/consentService';\r\nimport { consentService } from '../../services/instance/consentService';\r\nimport { flipbookEmbedScript } from '../../services/instance/flipbook-embed-script';\r\nimport { SingleElementIntersector } from '../../services/intersector';\r\nimport { InteractiveStub } from '../interactive-stub';\r\n\r\nconst THRESHOLD = 0;\r\n\r\nconst embedLinkParamsMap = {\r\n    fbo: {\r\n        type: 'fbo',\r\n        globalEmbedName: 'fboEmbed',\r\n        activationClassName: 'fbo-embed',\r\n        embedIdName: 'fboId',\r\n        onEmbedScriptAdd: (id: string) => flipbookEmbedScript.addFBOScriptByHashId(id),\r\n    },\r\n    salespal: {\r\n        type: 'fbp',\r\n        globalEmbedName: 'fbpEmbed',\r\n        activationClassName: 'fbp-embed',\r\n        embedIdName: 'fbpId',\r\n        onEmbedScriptAdd: (id: string) => flipbookEmbedScript.addSalespalScriptById(id),\r\n    },\r\n    cldbz: {\r\n        type: 'fbc',\r\n        globalEmbedName: 'fbcEmbed',\r\n        activationClassName: 'fbc-embed',\r\n        embedIdName: 'fbcId',\r\n        onEmbedScriptAdd: (id: string) => flipbookEmbedScript.addCLDBZScript(id),\r\n    },\r\n};\r\n\r\nclass EmbedLink extends BemElement<EmbedLink.Params> {\r\n    get embedId() {\r\n        return this.el.dataset[this.params.embedIdName] || '';\r\n    }\r\n\r\n    addEmbedScript() {\r\n        return this.params.onEmbedScriptAdd(this.embedId);\r\n    }\r\n\r\n    showLink() {\r\n        this.el.style.display = '';\r\n    }\r\n\r\n    prepareForActivate() {\r\n        this.el.style.display = 'none';\r\n        if (!consentService.hasConsent([ConsentGroup.Targeting, ConsentGroup.Performance])) {\r\n            this.el.setAttribute(`data-${this.params.type}-nocookie`, '');\r\n        }\r\n        this.el.classList.add(this.params.activationClassName);\r\n    }\r\n\r\n    activateEmbeds() {\r\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n        // @ts-ignore\r\n        window[this.params.globalEmbedName].parseAllEmbeds();\r\n    }\r\n}\r\n\r\nnamespace EmbedLink {\r\n    export interface Params {\r\n        type: Embed.EmbedType;\r\n        globalEmbedName: string;\r\n        activationClassName: string;\r\n        embedIdName: string;\r\n        onEmbedScriptAdd: (id: string) => Promise<void>;\r\n    }\r\n}\r\n\r\nexport class Embed extends BemBlock<Embed.Params> {\r\n    protected blockName(): string {\r\n        return 'S-Embed';\r\n    }\r\n\r\n    private embedLink = this.describeElement('link', EmbedLink, embedLinkParamsMap[this.params.type]);\r\n\r\n    private hideStub = () => this.applyModifiers({ loaded: true });\r\n\r\n    watch() {\r\n        const threshold = this.params.threshold || THRESHOLD;\r\n        const intersector = new SingleElementIntersector({\r\n            el: this.el,\r\n            onIntersectionChange: async (entry: IntersectionObserverEntry) => {\r\n                if (entry.isIntersecting && entry.intersectionRatio >= threshold) {\r\n                    intersector.unobserve();\r\n                    this.embedLink.prepareForActivate();\r\n\r\n                    try {\r\n                        await this.embedLink.addEmbedScript();\r\n                        this.embedLink.activateEmbeds();\r\n                    } catch {\r\n                        this.embedLink.showLink();\r\n                    }\r\n                }\r\n            },\r\n            threshold,\r\n        });\r\n        intersector.observe();\r\n    }\r\n\r\n    onDescribe(): void {\r\n        const reducedMotionMode = window.matchMedia('(prefers-reduced-motion)').matches;\r\n\r\n        if (!reducedMotionMode) {\r\n            this.watch();\r\n            return;\r\n        }\r\n\r\n        const stubParams: InteractiveStub.Params = {\r\n            onClick: async () => {\r\n                this.embedLink.prepareForActivate();\r\n\r\n                let hideStubTimeoutId = 0;\r\n\r\n                const publicationLoadedHandler = (event: MessageEvent) => {\r\n                    if (\r\n                        /.flippingbook.(com|cld.bz)$/.test(event.origin) &&\r\n                        event.data.action === 'publicationLoaded' &&\r\n                        this.embedLink.embedId === event.data.id\r\n                    ) {\r\n                        clearTimeout(hideStubTimeoutId);\r\n                        window.removeEventListener('message', publicationLoadedHandler);\r\n                        setTimeout(() => this.hideStub(), 1000);\r\n                    }\r\n                };\r\n\r\n                try {\r\n                    window.addEventListener('message', publicationLoadedHandler);\r\n\r\n                    await this.embedLink.addEmbedScript();\r\n                    this.embedLink.activateEmbeds();\r\n\r\n                    if (this.params.noIframe) {\r\n                        window.removeEventListener('message', publicationLoadedHandler);\r\n                        this.hideStub();\r\n                    }\r\n\r\n                    hideStubTimeoutId = window.setTimeout(() => {\r\n                        window.removeEventListener('message', publicationLoadedHandler);\r\n                        this.hideStub();\r\n                    }, 3000);\r\n                } catch {\r\n                    this.embedLink.showLink();\r\n                    window.removeEventListener('message', publicationLoadedHandler);\r\n                }\r\n            },\r\n        };\r\n\r\n        this.describeBlock('stub', InteractiveStub, stubParams);\r\n    }\r\n}\r\n\r\nexport namespace Embed {\r\n    export type EmbedType = 'fbo' | 'salespal' | 'cldbz';\r\n\r\n    export interface Params {\r\n        type: EmbedType;\r\n        noIframe?: boolean;\r\n        threshold?: number;\r\n    }\r\n}\r\n\r\nexport const EmbedWrapper = (blockName: string) =>\r\n    class EmbedWrapper extends BemBlock<Embed.Params> {\r\n        protected blockName(): string {\r\n            return blockName;\r\n        }\r\n\r\n        onDescribe() {\r\n            this.describeBlock('embed', Embed, this.params);\r\n        }\r\n    };\r\n","import { BemBlock } from '../../pages/bem';\r\nimport { loadJs } from '../../util/load';\r\nimport { InteractiveStub } from '../interactive-stub';\r\n\r\nconst EMBED_SCRIPT_URL = 'https://cld.bz/e/s-embed.js';\r\n\r\nexport class BookshelfEmbed extends BemBlock<BookshelfEmbed.Params> {\r\n    protected blockName(): string {\r\n        return 'S-Bookshelf-Embed';\r\n    }\r\n\r\n    onDescribe(): void {\r\n        const shelf = this.ensure('cld-bz-series-embed');\r\n\r\n        shelf.addEventListener(\r\n            'thumbnails-loaded',\r\n            () => {\r\n                this.applyModifiers({ loaded: true });\r\n                this.params.onLoad?.();\r\n            },\r\n            { once: true },\r\n        );\r\n\r\n        const reducedMotionMode = window.matchMedia('(prefers-reduced-motion)').matches;\r\n\r\n        if (!reducedMotionMode) {\r\n            void loadJs(EMBED_SCRIPT_URL);\r\n            return;\r\n        }\r\n\r\n        const stubParams: InteractiveStub.Params = {\r\n            onClick: () => {\r\n                void loadJs(EMBED_SCRIPT_URL);\r\n            },\r\n        };\r\n\r\n        this.describeBlock('stub', InteractiveStub, stubParams);\r\n    }\r\n}\r\n\r\nexport namespace BookshelfEmbed {\r\n    export interface Params {\r\n        onLoad?: () => void;\r\n    }\r\n}\r\n","import { BookshelfEmbed } from '../../components/bookshelf-embed';\r\nimport { BemBlock } from '../bem';\r\n\r\nexport class Bookshelves extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-Book-Shelves';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeBlock('bookshelf', BookshelfEmbed, {});\r\n    }\r\n}\r\n","import { CalendlyButton } from '../base';\r\n\r\nimport './style.css';\r\n\r\nexport class CalendlyButtonFBO extends CalendlyButton {}\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 { BemBlock } from '../../bem';\r\n\r\nexport class Example extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-Create-Example';\r\n    }\r\n\r\n    get height() {\r\n        return this.el.clientHeight;\r\n    }\r\n}\r\n","import { CalendlyButtonFBO } from '../../../components/calendly-button/fbo';\r\nimport { mobileLayoutChecker, tabletLayoutChecker } from '../../../services/instance/layoutChecker';\r\nimport { BemBlock } from '../../bem';\r\n\r\nimport { Example } from './example';\r\n\r\nconst COLUMN_TOLERANCE = 2;\r\n\r\nfunction getExamplesColumns(examples: Example[]) {\r\n    const desktopColumns = [examples.slice(0, 4), examples.slice(4, 8), examples.slice(8)];\r\n\r\n    const tabletColumns = [examples.slice(0, 6), examples.slice(6)];\r\n\r\n    return { desktopColumns, tabletColumns };\r\n}\r\n\r\nfunction getColumnHeight(column: Example[]) {\r\n    return column.reduce((sum, example) => sum + example.height, 0);\r\n}\r\n\r\nfunction getColumnMaxHeight(columns: Example[][]) {\r\n    return columns.reduce((height, column) => Math.max(height, getColumnHeight(column)), 0) + COLUMN_TOLERANCE;\r\n}\r\n\r\nexport class DocumentBlock extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-Create';\r\n    }\r\n\r\n    onDescribe() {\r\n        const calendlyClassName = 'calendly';\r\n\r\n        if (this.element(calendlyClassName)) {\r\n            this.describeElement(calendlyClassName, CalendlyButtonFBO, {});\r\n        }\r\n\r\n        const exampleElements = Array.from(this.findAll(`.${this.blockName()}-Example`));\r\n        const examples = exampleElements.map((item) => new Example(item, {}));\r\n        const { desktopColumns, tabletColumns } = getExamplesColumns(examples);\r\n\r\n        const examplesContainer = this.ensureElement('examples');\r\n\r\n        function updateHeight() {\r\n            const columns = mobileLayoutChecker.isIn()\r\n                ? null\r\n                : tabletLayoutChecker.isIn()\r\n                  ? tabletColumns\r\n                  : desktopColumns;\r\n\r\n            const height = columns === null ? '' : `${getColumnMaxHeight(columns)}px`;\r\n\r\n            requestAnimationFrame(() => {\r\n                examplesContainer.style.height = height;\r\n            });\r\n        }\r\n\r\n        updateHeight();\r\n        window.addEventListener('resize', updateHeight);\r\n    }\r\n}\r\n","import { SingleElementIntersector } from '../../services/intersector';\r\nimport { runByFps } from '../../util/run-by-fps';\r\nimport { BemBlock, BemElement } from '../bem';\r\n\r\nconst threshold = 0.9;\r\n\r\nclass ImageContainer extends BemElement<ImageContainer.Params> {\r\n    onDescribe() {\r\n        this.el.addEventListener('click', this.params.onClick);\r\n\r\n        const intersector = new SingleElementIntersector({\r\n            threshold,\r\n            el: this.el,\r\n            onIntersectionChange: (entry) => {\r\n                const visible = entry.isIntersecting && entry.intersectionRatio >= threshold;\r\n\r\n                if (visible) {\r\n                    intersector.unobserve();\r\n                    this.params.onShown();\r\n                }\r\n            },\r\n        });\r\n        intersector.observe();\r\n    }\r\n}\r\n\r\nnamespace ImageContainer {\r\n    export interface Params {\r\n        onShown: () => void;\r\n        onClick: () => void;\r\n    }\r\n}\r\n\r\nexport class Trackable extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-Embedding-Trackable';\r\n    }\r\n\r\n    private restartAnimation = () => {\r\n        requestAnimationFrame(() => {\r\n            this.applyModifiers({ animated: false });\r\n\r\n            requestAnimationFrame(() => {\r\n                this.applyModifiers({ animated: true });\r\n            });\r\n        });\r\n    };\r\n\r\n    onDescribe() {\r\n        const runAnimation = () => this.applyModifiers({ animated: true });\r\n\r\n        this.describeElement('images', ImageContainer, {\r\n            onShown: () =>\r\n                runByFps({\r\n                    fn: runAnimation,\r\n                    fps: 50,\r\n                    maxSuccessFpsCount: 3,\r\n                }),\r\n            onClick: () => this.restartAnimation(),\r\n        });\r\n    }\r\n}\r\n","interface Params {\r\n    fn: () => void;\r\n    fps: number;\r\n    maxSuccessFpsCount?: number;\r\n    timeout?: number;\r\n}\r\n\r\nexport function runByFps(params: Params) {\r\n    const { fn, fps, maxSuccessFpsCount = 60, timeout = 1500 } = params;\r\n\r\n    let successFpsCount = 0;\r\n    let startTime = 0;\r\n    let prevTime = 0;\r\n\r\n    const interval = 1000 / fps;\r\n\r\n    const measure = (now: number) => {\r\n        if (!prevTime) {\r\n            prevTime = now;\r\n            startTime = now;\r\n            requestAnimationFrame(measure);\r\n            return;\r\n        }\r\n\r\n        const elapsedTime = now - startTime;\r\n\r\n        if (elapsedTime > timeout) {\r\n            requestAnimationFrame(fn);\r\n            return;\r\n        }\r\n\r\n        const duration = now - prevTime;\r\n\r\n        prevTime = now;\r\n\r\n        if (duration > interval) {\r\n            successFpsCount = 0;\r\n\r\n            requestAnimationFrame(measure);\r\n            return;\r\n        }\r\n\r\n        successFpsCount += 1;\r\n\r\n        const action = successFpsCount >= maxSuccessFpsCount ? fn : measure;\r\n\r\n        requestAnimationFrame(action);\r\n    };\r\n\r\n    requestAnimationFrame(measure);\r\n}\r\n","import { Embed } from '../../components/embed';\r\nimport { BemBlock } from '../bem';\r\n\r\nimport { Trackable } from './trackable';\r\n\r\nexport class Embedding extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-Embedding';\r\n    }\r\n\r\n    onDescribe() {\r\n        const trackable = this.el.querySelector(`.${this.blockName()}-Trackable`);\r\n\r\n        if (trackable) {\r\n            new Trackable(trackable as HTMLElement, {}).onDescribe();\r\n        }\r\n\r\n        this.describeBlock('flipbook', Embed, { type: 'fbo' });\r\n    }\r\n}\r\n","import { BemBlock } from '../../pages/bem';\r\nimport { runOnceOnIntersect } from '../../util/run-once-on-intersect';\r\nimport { AnimatedElement } from '../animated-element';\r\n\r\nimport './style.css';\r\n\r\nexport class WatchVideoLink extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Watch-Video-Link';\r\n    }\r\n\r\n    onDescribe() {\r\n        const circleIcon = this.describeElement('circle', AnimatedElement, {\r\n            animationType: 'animation',\r\n        });\r\n\r\n        const startAnimation = async () => {\r\n            await circleIcon.animate();\r\n            requestAnimationFrame(() => this.applyModifiers({ 'shown-text': true }));\r\n        };\r\n\r\n        runOnceOnIntersect({\r\n            el: this.el,\r\n            fn: () => {\r\n                window.setTimeout(() => {\r\n                    void startAnimation();\r\n                }, 500);\r\n            },\r\n            threshold: 1,\r\n        });\r\n    }\r\n}\r\n","import { WatchVideoLink } from '../../../components/watch-video-link';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class Branding extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-Features-Branding';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeBlock('watch-video-brand', WatchVideoLink, {});\r\n    }\r\n}\r\n","import { BemElement } from '../pages/bem';\r\nimport type { BemBlock } from '../pages/bem';\r\nimport { SingleElementIntersector } from '../services/intersector';\r\n\r\nexport class HiddenElement<P extends HiddenElement.Params = Record<string, never>> extends BemElement<P> {\r\n    private shown = false;\r\n\r\n    show() {\r\n        this.shown = true;\r\n        this.applyModifiers();\r\n        this.params.onShow?.();\r\n    }\r\n\r\n    protected applyModifiers(modifiers: BemBlock.ModifiersMap = {}) {\r\n        return super.applyModifiers({ ...modifiers, shown: this.shown });\r\n    }\r\n}\r\n\r\nexport namespace HiddenElement {\r\n    export interface Params {\r\n        onShow?: () => void;\r\n    }\r\n}\r\n\r\nexport class AnimatedHiddenElement<P extends AnimatedHiddenElement.Params> extends HiddenElement<P> {\r\n    private animated = false;\r\n    private reducedMotionMode: boolean = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n\r\n    onDescribe() {\r\n        super.onDescribe();\r\n        if (this.reducedMotionMode) {\r\n            return;\r\n        }\r\n        new SingleElementIntersector({\r\n            el: this.el,\r\n            onIntersectionChange: (entry) => this.onIntersectionChange(entry),\r\n            threshold: [0, this.treshold()],\r\n        }).observe();\r\n        if (this.params.onTransitionEnd) {\r\n            this.el.addEventListener('transitionend', this.params.onTransitionEnd);\r\n        }\r\n    }\r\n\r\n    protected applyModifiers(modifiers: BemBlock.ModifiersMap = {}) {\r\n        return super.applyModifiers({ ...modifiers, animated: this.animated });\r\n    }\r\n\r\n    private onIntersectionChange(entry: IntersectionObserverEntry) {\r\n        if (entry.isIntersecting && entry.intersectionRatio >= this.treshold()) {\r\n            this.onShown();\r\n        } else {\r\n            this.onHidden(entry);\r\n        }\r\n    }\r\n\r\n    private onShown() {\r\n        this.animate();\r\n        if (this.params.onScrollIn) {\r\n            this.params.onScrollIn();\r\n        }\r\n    }\r\n\r\n    private onHidden(entry: IntersectionObserverEntry): void {\r\n        if (entry.boundingClientRect.top < 0) {\r\n            this.animate();\r\n        }\r\n        this.params.onScrollOut?.();\r\n    }\r\n\r\n    private animate() {\r\n        this.animated = true;\r\n        this.applyModifiers();\r\n        this.params.onAnimate?.();\r\n    }\r\n\r\n    protected treshold(): number {\r\n        return this.params.treshold || 0;\r\n    }\r\n}\r\n\r\nexport namespace AnimatedHiddenElement {\r\n    export interface Params extends HiddenElement.Params {\r\n        onTransitionEnd?: (e: TransitionEvent) => void;\r\n        onScrollOut?: () => void;\r\n        onScrollIn?: () => void;\r\n        onAnimate?: () => void;\r\n        treshold?: number;\r\n    }\r\n}\r\n","import { Deferred } from '@flippingbook/web.utils/dist/util/deferred';\r\n\r\nimport { BemElement } from '../pages/bem';\r\nimport { SingleElementIntersector } from '../services/intersector';\r\nimport { runOnceOnIntersect } from '../util/run-once-on-intersect';\r\n\r\nconst HAVE_CURRENT_DATA = 2;\r\n\r\nexport class Video extends BemElement<Video.Params, HTMLVideoElement> {\r\n    private isVisible: boolean = false;\r\n    private isPlaying: boolean = false;\r\n    private prefersReducedMotion: boolean = window.matchMedia('(prefers-reduced-motion)').matches;\r\n    private autoplayEnabled: boolean = Boolean(this.params.autoplay && !this.prefersReducedMotion);\r\n\r\n    private loadedPromise = new Deferred();\r\n\r\n    private static isHighResScreen() {\r\n        return window.devicePixelRatio > 1;\r\n    }\r\n\r\n    private static setSourceForElement(el: HTMLVideoElement | HTMLSourceElement) {\r\n        const dataHighResSrc = el.dataset.highResSrc;\r\n        const dataSrc = el.dataset.src;\r\n\r\n        const src = dataHighResSrc && Video.isHighResScreen() ? dataHighResSrc : dataSrc;\r\n\r\n        if (src) {\r\n            el.setAttribute('src', src);\r\n        }\r\n    }\r\n\r\n    private onLoadedData = () => {\r\n        if (this.el.readyState >= HAVE_CURRENT_DATA) {\r\n            this.loadedPromise.resolve();\r\n            this.params.onLoad?.();\r\n        }\r\n    };\r\n\r\n    private onLoadedMetadata = () => {\r\n        this.el.load();\r\n        this.el.removeEventListener('loadedmetadata', this.onLoadedMetadata);\r\n    };\r\n\r\n    onDescribe() {\r\n        new SingleElementIntersector({\r\n            el: this.el,\r\n            onIntersectionChange: (entry) => this.onObserve(entry),\r\n            threshold: [0, this.treshold()],\r\n        }).observe();\r\n\r\n        this.el.addEventListener('ended', () => this.ended());\r\n        this.el.addEventListener('play', () => this.onPlay());\r\n        this.el.addEventListener('playing', () => this.onPlaying());\r\n        this.el.addEventListener('pause', () => this.onPause());\r\n        this.el.addEventListener('click', () => this.onClick());\r\n        this.el.addEventListener('loadeddata', () => this.onLoadedData());\r\n        this.el.addEventListener('loadedmetadata', this.onLoadedMetadata);\r\n\r\n        const onTimeUpdate = this.params.onTimeUpdate;\r\n\r\n        if (onTimeUpdate) {\r\n            this.el.addEventListener('timeupdate', () => onTimeUpdate());\r\n        }\r\n\r\n        runOnceOnIntersect({\r\n            el: this.el,\r\n            fn: () => {\r\n                if (this.el.childElementCount) {\r\n                    for (const child of this.el.children) {\r\n                        if (child.tagName !== 'SOURCE') {\r\n                            continue;\r\n                        }\r\n\r\n                        Video.setSourceForElement(child as HTMLSourceElement);\r\n                    }\r\n\r\n                    this.el.load();\r\n                    return;\r\n                }\r\n\r\n                Video.setSourceForElement(this.el);\r\n            },\r\n            threshold: [0, this.treshold()],\r\n        });\r\n\r\n        if (this.prefersReducedMotion) {\r\n            void this.onReducedMotionMode();\r\n        }\r\n        this.onLoadedData();\r\n    }\r\n\r\n    private onObserve(entry: IntersectionObserverEntry) {\r\n        if (entry.isIntersecting && entry.intersectionRatio >= this.treshold()) {\r\n            this.becameVisible();\r\n        } else {\r\n            this.becameHidden();\r\n        }\r\n    }\r\n\r\n    async autoplay() {\r\n        if (this.prefersReducedMotion) {\r\n            return;\r\n        }\r\n\r\n        this.autoplayEnabled = true;\r\n        if (!this.isVisible) {\r\n            return;\r\n        }\r\n        try {\r\n            await this.loadedPromise.promise;\r\n            await this.el.play();\r\n        } catch {\r\n            this.applyModifiers({ failed: true });\r\n            this.params.onPlaybackFail?.();\r\n        }\r\n    }\r\n\r\n    async play(from?: number): Promise<void> {\r\n        if (this.prefersReducedMotion) {\r\n            return;\r\n        }\r\n\r\n        return this.start(from);\r\n    }\r\n\r\n    protected async start(from?: number): Promise<void> {\r\n        if (from !== undefined) {\r\n            this.currentTime = from;\r\n        }\r\n        this.autoplayEnabled = true;\r\n\r\n        if (!this.isPlaying) {\r\n            await this.loadedPromise.promise;\r\n            await this.el.play();\r\n        }\r\n    }\r\n\r\n    stop() {\r\n        this.pause();\r\n        if (!this.params.freezeLastFrame) {\r\n            this.currentTime = 0;\r\n        }\r\n        this.autoplayEnabled = false;\r\n    }\r\n\r\n    get isActive() {\r\n        return this.autoplayEnabled;\r\n    }\r\n\r\n    get currentTime() {\r\n        return this.el.currentTime;\r\n    }\r\n\r\n    private set currentTime(time: number) {\r\n        this.el.currentTime = time;\r\n    }\r\n\r\n    private pause() {\r\n        if (this.isPlaying) {\r\n            this.el.pause?.();\r\n        }\r\n    }\r\n\r\n    private becameVisible() {\r\n        this.isVisible = true;\r\n        if (this.autoplayEnabled) {\r\n            void this.start();\r\n        }\r\n    }\r\n\r\n    private becameHidden() {\r\n        this.isVisible = false;\r\n        this.pause();\r\n    }\r\n\r\n    private ended() {\r\n        this.stop();\r\n        this.params.onPlayEnd?.();\r\n    }\r\n\r\n    private onPlay() {\r\n        this.applyModifiers({ failed: false });\r\n        this.params.onPlay?.();\r\n    }\r\n\r\n    private onPlaying() {\r\n        this.isPlaying = true;\r\n    }\r\n\r\n    private onPause() {\r\n        this.isPlaying = false;\r\n    }\r\n\r\n    private onClick() {\r\n        if (this.prefersReducedMotion) {\r\n            void this.start(0);\r\n        }\r\n        this.params.onClick?.();\r\n    }\r\n\r\n    private async onReducedMotionMode() {\r\n        this.el.loop = false;\r\n        this.el.autoplay = false;\r\n        this.el.style.cursor = 'pointer';\r\n\r\n        await this.loadedPromise.promise;\r\n        this.currentTime = this.params.reducedMotionModeFreezeTime ?? this.el.duration;\r\n    }\r\n\r\n    protected treshold() {\r\n        return this.params.autoplayTreshold === undefined ? 0.5 : this.params.autoplayTreshold;\r\n    }\r\n}\r\n\r\nexport namespace Video {\r\n    export interface Params {\r\n        autoplay?: boolean;\r\n        freezeLastFrame?: boolean;\r\n        reducedMotionModeFreezeTime?: number;\r\n        onPlay?: () => void;\r\n        onTimeUpdate?: () => void;\r\n        onPlayEnd?: () => void;\r\n        onClick?: () => void;\r\n        onPlaybackFail?: () => void;\r\n        onLoad?: () => void;\r\n        autoplayTreshold?: number;\r\n    }\r\n}\r\n\r\nexport class ClickableVideo extends Video {\r\n    constructor(el: HTMLVideoElement, elementName: string, elementClassName: string, params: Video.Params) {\r\n        super(el, elementName, elementClassName, {\r\n            ...params,\r\n            onPlayEnd: () => {\r\n                this.onVideoEnd();\r\n                params.onPlayEnd?.();\r\n            },\r\n            onClick: () => {\r\n                this.onVideoClick();\r\n                params.onClick?.();\r\n            },\r\n        });\r\n    }\r\n\r\n    private onVideoEnd() {\r\n        this.applyModifiers({ playing: false, ended: true });\r\n    }\r\n\r\n    private onVideoClick() {\r\n        this.applyModifiers({ playing: true, ended: false });\r\n        void this.start(0);\r\n    }\r\n}\r\n","import { AnimatedHiddenElement } from '../../../components/hidden';\r\nimport { Video } from '../../../components/video';\r\nimport { delay } from '../../../util/delay';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class EmbedVideoBlock extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Features-Embed';\r\n    }\r\n\r\n    public onDescribe() {\r\n        const reducedMotionMode = window.matchMedia('(prefers-reduced-motion)').matches;\r\n\r\n        if (reducedMotionMode) {\r\n            this.applyModifiers({ visible: true });\r\n            return;\r\n        }\r\n\r\n        const { video, videoLoadedPromise } = (() => {\r\n            let videoLoadedPromiseResolve = () => {};\r\n            const videoLoadedPromise = new Promise<void>((resolve) => {\r\n                videoLoadedPromiseResolve = resolve;\r\n            });\r\n\r\n            const video = this.describeElement('video', Video, {\r\n                autoplay: false,\r\n                reducedMotionModeFreezeTime: 0.5,\r\n                onLoad: videoLoadedPromiseResolve,\r\n            });\r\n\r\n            return { video, videoLoadedPromise };\r\n        })();\r\n\r\n        let showed = false;\r\n\r\n        const onAnimate = async () => {\r\n            if (showed) {\r\n                return;\r\n            }\r\n\r\n            showed = true;\r\n\r\n            await videoLoadedPromise;\r\n            this.applyModifiers({ visible: true });\r\n            await delay(1300);\r\n            void video.play();\r\n        };\r\n\r\n        this.describeElement('image-wrapper', AnimatedHiddenElement, {\r\n            onAnimate,\r\n            treshold: 1,\r\n        });\r\n    }\r\n}\r\n","export function delay(ms: number) {\r\n    return new Promise((resolve) => setTimeout(resolve, ms));\r\n}\r\n","import { runOnceOnIntersect } from '../../../util/run-once-on-intersect';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class FormsBlock extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Features-Forms';\r\n    }\r\n\r\n    onDescribe() {\r\n        runOnceOnIntersect({\r\n            el: this.el,\r\n            fn: () => this.applyModifiers({ 'show-play-button': true }),\r\n            threshold: 0.5,\r\n        });\r\n    }\r\n}\r\n","import { Video } from '../../../components/video';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class GifsBlock extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Features-Gifs';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeElement('video', Video, {\r\n            autoplay: true,\r\n            autoplayTreshold: 1,\r\n            freezeLastFrame: true,\r\n            onLoad: () => {\r\n                this.applyModifiers({ 'video-loaded': true });\r\n            },\r\n        });\r\n    }\r\n}\r\n","import { Video } from '../../../components/video';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class PasswordBlock extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Features-Password';\r\n    }\r\n\r\n    public onDescribe() {\r\n        this.describeElement('video', Video, {\r\n            autoplay: true,\r\n            autoplayTreshold: 1,\r\n            freezeLastFrame: true,\r\n        });\r\n    }\r\n}\r\n","import { AnimatedHiddenElement } from '../../../components/hidden';\r\nimport { WatchVideoLink } from '../../../components/watch-video-link';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class PopupBlock extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Features-Popup';\r\n    }\r\n\r\n    private showed = false;\r\n\r\n    public onDescribe() {\r\n        this.describeElement('image-wrapper', AnimatedHiddenElement, {\r\n            onAnimate: this.onVisible,\r\n            treshold: 1,\r\n        });\r\n        this.describeBlock('watch-video-brand', WatchVideoLink, {});\r\n    }\r\n\r\n    private onVisible = () => {\r\n        if (!this.showed) {\r\n            this.applyModifiers({ visible: true });\r\n            this.showed = true;\r\n        }\r\n    };\r\n}\r\n","import { GoTrialButton } from '../../components/go-trial-button';\r\nimport { BemBlock } from '../bem';\r\n\r\nimport { Branding } from './features/branding';\r\nimport { EmbedVideoBlock } from './features/embed-video';\r\nimport { FormsBlock } from './features/forms';\r\nimport { GifsBlock } from './features/gifs';\r\nimport { PasswordBlock } from './features/password';\r\nimport { PopupBlock } from './features/popup';\r\n\r\nexport class PresentationExamplesFeatures extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Features';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeBlock('feature-branding', Branding, {});\r\n        this.describeBlock('feature-embed', EmbedVideoBlock, {});\r\n        this.describeBlock('feature-gifs', GifsBlock, {});\r\n        this.describeBlock('feature-password', PasswordBlock, {});\r\n        this.describeBlock('feature-popup', PopupBlock, {});\r\n        this.describeBlock('feature-forms', FormsBlock, {});\r\n\r\n        this.describeElement('cta-button', GoTrialButton, {\r\n            position: 'middle',\r\n        });\r\n    }\r\n}\r\n","import { SingleElementIntersector } from '../../../services/intersector';\r\nimport { BemElement } from '../../bem';\r\n\r\nconst THRESHOLD = 0;\r\n\r\nexport class DemosCollection extends BemElement<DemosCollection.Params> {\r\n    private width = this.el.clientWidth;\r\n\r\n    private onVisibilityChange = (entry: IntersectionObserverEntry) => {\r\n        const visible = entry.isIntersecting && entry.intersectionRatio >= THRESHOLD;\r\n\r\n        if (this.width !== this.el.clientWidth) {\r\n            this.width = this.el.clientWidth;\r\n        }\r\n\r\n        this.params.onChange({\r\n            visible,\r\n            width: this.width,\r\n        });\r\n    };\r\n\r\n    getClone() {\r\n        return this.el.cloneNode(true);\r\n    }\r\n\r\n    getWidth() {\r\n        return this.width;\r\n    }\r\n\r\n    onDescribe() {\r\n        new SingleElementIntersector({\r\n            threshold: THRESHOLD,\r\n            el: this.el,\r\n            onIntersectionChange: this.onVisibilityChange,\r\n        }).observe();\r\n    }\r\n}\r\n\r\nnamespace DemosCollection {\r\n    export interface Params {\r\n        onChange: (params: { width: number; visible: boolean }) => void;\r\n    }\r\n}\r\n","import { BemElement } from '../../bem';\r\n\r\nconst ANIMATION_BASE_INCREMENT = 1;\r\n\r\nexport class Scrollable extends BemElement {\r\n    private clones: Node[] = [];\r\n    private animationId: number = 0;\r\n    private animationProgress: number = 0;\r\n\r\n    setWidth(width: number) {\r\n        this.el.style.width = `${width}px`;\r\n    }\r\n\r\n    getCloneCount() {\r\n        return this.clones.length;\r\n    }\r\n\r\n    addClone(clone: Node) {\r\n        this.clones.push(clone);\r\n        this.el.appendChild(clone);\r\n    }\r\n\r\n    removeLastClone() {\r\n        const clone = this.clones.pop();\r\n\r\n        if (clone) {\r\n            this.el.removeChild(clone);\r\n        }\r\n    }\r\n\r\n    stopScrollAnimation() {\r\n        cancelAnimationFrame(this.animationId);\r\n    }\r\n\r\n    runScrollAnimation(endOffset: number) {\r\n        this.stopScrollAnimation();\r\n\r\n        const el = this.el;\r\n\r\n        const setAnimationId = (id: number) => {\r\n            this.animationId = id;\r\n        };\r\n\r\n        const getProgress = () => this.animationProgress;\r\n        const setProgress = (value: number) => {\r\n            this.animationProgress = value;\r\n        };\r\n\r\n        let startTime: number;\r\n\r\n        const fps = 60;\r\n\r\n        const interval = (1000 / fps) * 2;\r\n        const tolerance = 5;\r\n\r\n        function scrollByStep(now: number) {\r\n            const animationId = requestAnimationFrame(scrollByStep);\r\n            setAnimationId(animationId);\r\n\r\n            if (startTime === undefined) {\r\n                startTime = now;\r\n                return;\r\n            }\r\n\r\n            const delta = now - startTime;\r\n\r\n            if (delta > interval - tolerance) {\r\n                startTime = now;\r\n\r\n                const progress = getProgress();\r\n\r\n                const offset = Math.min(endOffset, progress + ANIMATION_BASE_INCREMENT);\r\n\r\n                const newOffset = offset === endOffset ? 0 : offset;\r\n\r\n                setProgress(newOffset);\r\n                el.style.transform = `translate3d(-${newOffset}px, 0, 0)`;\r\n            }\r\n        }\r\n\r\n        requestAnimationFrame(scrollByStep);\r\n    }\r\n\r\n    onDescribe() {}\r\n}\r\n","import _throttle from 'lodash-es/throttle';\r\n\r\nimport { dialogProvider } from '../../../services/instance/dialogProvider';\r\nimport { BemBlock } from '../../bem';\r\n\r\nimport { DemosCollection } from './demos-collection';\r\nimport { Scrollable } from './scrollable';\r\nimport './style.css';\r\n\r\nfunction useGalleryPopUps(params: { onPopUpChange: (isOpen: boolean) => void }) {\r\n    const { onPopUpChange } = params;\r\n\r\n    dialogProvider.listen(() => {\r\n        const isDialogOpen = dialogProvider.isDialogOpen();\r\n        onPopUpChange(isDialogOpen);\r\n    });\r\n}\r\n\r\nexport class Gallery extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-First-Screen-Gallery';\r\n    }\r\n\r\n    onDescribe() {\r\n        let demoCollectionWidth = 0;\r\n        let demoCollectionVisible = false;\r\n\r\n        const reducedMotionMode = window.matchMedia('(prefers-reduced-motion)').matches;\r\n\r\n        const canRunAnimation = () => (reducedMotionMode ? false : demoCollectionWidth > 0 && demoCollectionVisible);\r\n\r\n        const scrollable = this.describeElement('scrollable', Scrollable, {});\r\n\r\n        const firstDemoCollection = this.describeElement('demos', DemosCollection, {\r\n            onChange: ({ width, visible }) => {\r\n                demoCollectionWidth = width;\r\n                demoCollectionVisible = visible;\r\n\r\n                if (canRunAnimation()) {\r\n                    scrollable.runScrollAnimation(width);\r\n                } else {\r\n                    scrollable.stopScrollAnimation();\r\n                }\r\n            },\r\n        });\r\n\r\n        useGalleryPopUps({\r\n            onPopUpChange: (isOpen) => {\r\n                if (isOpen) {\r\n                    scrollable.stopScrollAnimation();\r\n                    return;\r\n                }\r\n\r\n                if (canRunAnimation()) {\r\n                    scrollable.runScrollAnimation(demoCollectionWidth);\r\n                }\r\n            },\r\n        });\r\n\r\n        const updateCloneCount = _throttle(() => {\r\n            const demoCollectionWidth = firstDemoCollection.getWidth();\r\n            scrollable.setWidth(demoCollectionWidth);\r\n\r\n            const rootWidth = this.el.clientWidth;\r\n            const newCloneCount = demoCollectionWidth === 0 ? 0 : Math.floor(rootWidth / demoCollectionWidth);\r\n            const existingCloneCount = scrollable.getCloneCount();\r\n\r\n            if (newCloneCount > existingCloneCount) {\r\n                const addCount = newCloneCount - existingCloneCount;\r\n\r\n                [...Array(addCount)].forEach(() => {\r\n                    const newNode = firstDemoCollection.getClone();\r\n                    scrollable.addClone(newNode);\r\n                });\r\n            }\r\n\r\n            if (newCloneCount < existingCloneCount) {\r\n                const removeCount = existingCloneCount - newCloneCount;\r\n\r\n                [...Array(removeCount)].forEach(() => {\r\n                    scrollable.removeLastClone();\r\n                });\r\n            }\r\n        }, 200);\r\n\r\n        updateCloneCount();\r\n\r\n        window.addEventListener('resize', updateCloneCount);\r\n    }\r\n}\r\n","import { GoTrialButton } from '../../components/go-trial-button';\r\nimport { BemBlock } from '../bem';\r\n\r\nimport { Gallery } from './gallery';\r\n\r\nexport class FirstScreen extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Demos-First-Screen';\r\n    }\r\n\r\n    onDescribe() {\r\n        const galleryElement = this.el.querySelector(`.${this.blockName()}-Gallery`);\r\n        new Gallery(galleryElement as HTMLElement, {}).onDescribe();\r\n\r\n        this.describeElement('cta', GoTrialButton, {\r\n            position: 'top',\r\n        });\r\n    }\r\n}\r\n","import { BemBlock, BemElement } from '../../pages/bem';\r\nimport { SingleElementIntersector } from '../../services/intersector';\r\n\r\nimport './style.css';\r\n\r\nconst THRESHOLD = 1;\r\nconst VISIBILITY_ANIMATION_TIMEOUT = 100;\r\nconst WINKING_ANIMATION_DURATION = 1000;\r\nconst WINKING_ANIMATION_TIMEOUT = 5000;\r\nconst ANIMATION_MODES = ['heartbeating', 'shaking', 'vibrating'];\r\n\r\nexport class Bubble extends BemElement<IntegrationsBubble.Params> {\r\n    private isIntersected = false;\r\n\r\n    private intersector = new SingleElementIntersector({\r\n        el: this.el,\r\n        onIntersectionChange: (e: IntersectionObserverEntry) => this.onIntersectionChange(e),\r\n        threshold: [0, THRESHOLD],\r\n    });\r\n\r\n    onDescribe() {\r\n        this.intersector.observe();\r\n    }\r\n\r\n    public isIntersectedBubble = () => this.isIntersected;\r\n\r\n    private onIntersectionChange = (entry: IntersectionObserverEntry) => {\r\n        this.applyModifiers({ readyForAnimation: entry.isIntersecting });\r\n\r\n        if (entry.isIntersecting) {\r\n            this.params.onIntersectionChange(this);\r\n        }\r\n    };\r\n\r\n    public setVisible() {\r\n        this.isIntersected = true;\r\n        this.applyModifiers({ visible: true });\r\n        this.intersector.unobserve();\r\n    }\r\n\r\n    public setMode(mode: string, enabled: boolean = true) {\r\n        this.applyModifiers({ [mode]: enabled });\r\n    }\r\n}\r\n\r\nexport namespace IntegrationsBubble {\r\n    export interface Params {\r\n        onIntersectionChange: (bubble: Bubble) => void;\r\n    }\r\n}\r\n\r\nexport class BubbleGroup extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Bubble-Group';\r\n    }\r\n\r\n    private intersectedBubbles = [] as Bubble[];\r\n    private winkingInterval: number | null = null;\r\n    private isIntersected: boolean = false;\r\n\r\n    onDescribe() {\r\n        this.describeAllElements('bubble', Bubble, {\r\n            onIntersectionChange: this.pushBubble,\r\n        });\r\n\r\n        new SingleElementIntersector({\r\n            el: this.el,\r\n            onIntersectionChange: (e: IntersectionObserverEntry) => this.onIntersectionChange(e),\r\n            threshold: [0, THRESHOLD],\r\n        }).observe();\r\n    }\r\n\r\n    private onIntersectionChange = (entry: IntersectionObserverEntry) => {\r\n        if (entry.isIntersecting === this.isIntersected) {\r\n            return;\r\n        }\r\n\r\n        this.isIntersected = entry.isIntersecting;\r\n\r\n        if (entry.isIntersecting) {\r\n            this.setWinking();\r\n            return;\r\n        }\r\n        this.removeWinking();\r\n    };\r\n\r\n    private setWinking = () => {\r\n        const onInterval = () => {\r\n            if (!this.intersectedBubbles.length) {\r\n                return;\r\n            }\r\n\r\n            const bubble = this.intersectedBubbles[Math.floor(Math.random() * this.intersectedBubbles.length)];\r\n            const animationMode = ANIMATION_MODES[Math.floor(Math.random() * ANIMATION_MODES.length)];\r\n            bubble.setMode(animationMode);\r\n\r\n            window.setTimeout(() => bubble.setMode(animationMode, false), WINKING_ANIMATION_DURATION);\r\n        };\r\n\r\n        this.winkingInterval = window.setInterval(onInterval, WINKING_ANIMATION_TIMEOUT);\r\n    };\r\n\r\n    private removeWinking = () => {\r\n        if (this.winkingInterval) {\r\n            window.clearInterval(this.winkingInterval);\r\n        }\r\n        this.winkingInterval = null;\r\n    };\r\n\r\n    private pushBubble = (bubble: Bubble) => {\r\n        this.intersectedBubbles.push(bubble);\r\n        this.setVisible(bubble);\r\n    };\r\n\r\n    private setVisible = (bubble: Bubble) => {\r\n        const timeout = this.getNotVisibleBubblesCount() * VISIBILITY_ANIMATION_TIMEOUT;\r\n        setTimeout(() => bubble.setVisible(), timeout);\r\n    };\r\n\r\n    private getNotVisibleBubblesCount = () => {\r\n        return this.intersectedBubbles.reduce(\r\n            (acc: number, curr: Bubble) => acc + Number(!curr.isIntersectedBubble()),\r\n            0,\r\n        );\r\n    };\r\n}\r\n","import { BemElement } from '../../pages/bem';\r\nimport { runWithNewTask } from '../../util/run-with-new-task';\r\n\r\nimport type { TabberPanel } from './TabberPanel';\r\nimport type { TabberTab } from './TabberTab';\r\n\r\nexport class TabberElement extends BemElement<TabberElement.Params> {\r\n    public onDescribe() {\r\n        this.params.tabs.forEach((tab) => {\r\n            void runWithNewTask(() => tab.addOnClickListener(this.onTabClick));\r\n        });\r\n        if (this.params.defaultTabId) {\r\n            this.onTabClick(this.params.defaultTabId);\r\n        }\r\n    }\r\n\r\n    private onTabClick = (id: string) => {\r\n        this.params.tabs.forEach((tab) => tab.updateTabState(id));\r\n        this.params.panels.forEach((panel) => panel.updateContentState(id));\r\n    };\r\n}\r\n\r\nexport namespace TabberElement {\r\n    export interface Params {\r\n        tabs: TabberTab[];\r\n        panels: TabberPanel[];\r\n        defaultTabId?: string;\r\n    }\r\n}\r\n","import { BemElement } from '../../pages/bem';\r\n\r\nexport class TabberPanel extends BemElement<TabberPanel.Params> {\r\n    private id = this.el.getAttribute('data-id') || this.el.getAttribute('aria-labelledby') || '';\r\n\r\n    public onDescribe() {\r\n        this.applyModifiers({ 'active-default': false });\r\n    }\r\n\r\n    public getId = () => {\r\n        return this.id;\r\n    };\r\n\r\n    public updateContentState = (id: string) => {\r\n        const active = this.id === id;\r\n        this.applyModifiers({ active });\r\n\r\n        if (active) {\r\n            this.el.removeAttribute('hidden');\r\n        } else {\r\n            this.el.setAttribute('hidden', 'hidden');\r\n        }\r\n    };\r\n}\r\n\r\nexport namespace TabberPanel {\r\n    export interface Params {\r\n        animated: boolean;\r\n    }\r\n}\r\n","import { BemElement } from '../../pages/bem';\r\n\r\nexport class TabberTab extends BemElement {\r\n    private id = this.el.getAttribute('data-id') || this.el.getAttribute('id') || '';\r\n    private label = this.el.getAttribute('data-label') || '';\r\n\r\n    public getId = () => {\r\n        return this.id;\r\n    };\r\n\r\n    public getOffsetParams = () => {\r\n        return {\r\n            offsetLeft: this.el.offsetLeft,\r\n            width: this.el.offsetWidth,\r\n        };\r\n    };\r\n\r\n    public addOnClickListener = (listenter: (id: string, label: string) => void) => {\r\n        const onClick = (ev: Event) => {\r\n            ev.preventDefault();\r\n            listenter(this.id, this.label);\r\n        };\r\n        this.el.addEventListener('click', onClick);\r\n    };\r\n\r\n    public updateTabState = (dataId: string) => {\r\n        const active = dataId === this.id;\r\n        this.applyModifiers({ active });\r\n        this.el.setAttribute('aria-selected', active ? 'true' : 'false');\r\n    };\r\n}\r\n","import { BubbleGroup } from '../../components/animated-bubbles';\r\nimport { GoTrialButton } from '../../components/go-trial-button';\r\nimport { HorizonScrollableBlock } from '../../components/horizon-scrollable-block';\r\nimport { TabberElement } from '../../components/tabber/TabberElement';\r\nimport { TabberPanel } from '../../components/tabber/TabberPanel';\r\nimport { TabberTab } from '../../components/tabber/TabberTab';\r\nimport { runWithNewTask } from '../../util/run-with-new-task';\r\nimport { BemBlock } from '../bem';\r\n\r\nimport './style/industries.css';\r\n\r\nexport class DemosIndustries extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Industries';\r\n    }\r\n\r\n    private tabs = this.describeAllElements('tabs-tab', TabberTab, {});\r\n    private tabHeader = this.describeBlock('tabs-scrollable', HorizonScrollableBlock, {});\r\n\r\n    onDescribe() {\r\n        const tabs = this.tabs;\r\n        const panels = this.describeAllElements('tabs-panel', TabberPanel, {\r\n            animated: true,\r\n        });\r\n\r\n        tabs.forEach((tab) => {\r\n            void runWithNewTask(() => {\r\n                tab.addOnClickListener(this.onTabClick);\r\n            });\r\n        });\r\n\r\n        const defaultTabId = tabs[0].getId();\r\n\r\n        const tabsParams: TabberElement.Params = {\r\n            tabs,\r\n            panels,\r\n            defaultTabId,\r\n        };\r\n\r\n        this.describeElement('tabs', TabberElement, tabsParams);\r\n\r\n        this.describeElement('cta-button', GoTrialButton, {\r\n            position: 'middle',\r\n        });\r\n\r\n        this.describeBlock('bubble-group', BubbleGroup, {});\r\n    }\r\n\r\n    private onTabClick = (id: string) => {\r\n        const tab = this.tabs.find((x) => x.getId() === id);\r\n\r\n        if (tab) {\r\n            this.tabHeader.scrollToElement(tab);\r\n        }\r\n    };\r\n}\r\n","import { GoTrialButton } from '../../components/go-trial-button';\r\nimport { createScrollSpyMenu, HorizontalScrollspyMenu } from '../../components/horizontal-scrollspy-menu';\r\nimport type { AbstractActiveBlockWrapper } from '../../components/horizontal-scrollspy-menu/active-block-wrapper';\r\nimport { BemBlock } from '../bem';\r\n\r\nimport './style/sticky-navigation.css';\r\n\r\nexport enum BlockType {\r\n    EXAMPLES = 'examples-block',\r\n    FEATURES = 'features-block',\r\n    USE_CASES = 'use-cases-block',\r\n    SHARING = 'sharing-block',\r\n}\r\n\r\nconst blocks = ['examples-block', 'features-block', 'use-cases-block', 'sharing-block'];\r\n\r\nexport class StickyNavigation extends BemBlock<StickyNavigation.Params> {\r\n    protected blockName(): string {\r\n        return 'S-Demos-Sticky-Navigation';\r\n    }\r\n\r\n    onDescribe() {\r\n        const scrollSpyParams: HorizontalScrollspyMenu.Params = {\r\n            pageElement: this.params.pageElement,\r\n            headings: this.params.headings,\r\n            unitBlocks: blocks,\r\n            scrollSpyOffset: 7.5,\r\n        };\r\n\r\n        const scrollSpyMenu = this.describeBlock('scrollspy-wrapper', HorizontalScrollspyMenu, scrollSpyParams);\r\n\r\n        createScrollSpyMenu({\r\n            menu: scrollSpyMenu,\r\n            activeScrollBlocksElement: this.params.activeScrollBlocks,\r\n        });\r\n\r\n        this.describeElement('try-for-free', GoTrialButton, {\r\n            position: 'header',\r\n        });\r\n    }\r\n}\r\n\r\nexport namespace StickyNavigation {\r\n    export interface Params {\r\n        headings: HTMLElement[];\r\n        pageElement: HTMLElement;\r\n        activeScrollBlocks: AbstractActiveBlockWrapper<BlockType>[];\r\n    }\r\n}\r\n","import { BasePage } from '../../components/base-page';\r\nimport { EmbedWrapper } from '../../components/embed';\r\nimport { GoTrialButtonWrapper } from '../../components/go-trial-button';\r\nimport { ActiveBlockWrapper } from '../../components/horizontal-scrollspy-menu/active-block-wrapper';\r\nimport type { AbstractActiveBlockWrapper } from '../../components/horizontal-scrollspy-menu/active-block-wrapper';\r\nimport { runWithNewTask } from '../../util/run-with-new-task';\r\n\r\nimport { Bookshelves } from './bookshelves';\r\nimport { DocumentBlock } from './document';\r\nimport { Embedding } from './embedding';\r\nimport { PresentationExamplesFeatures } from './features';\r\nimport { FirstScreen } from './first-screen';\r\nimport { DemosIndustries } from './industries';\r\nimport { BlockType, StickyNavigation } from './sticky-navigation';\r\n\r\nimport '../../components/demo-wrapper';\r\nimport './style/index.css';\r\n\r\nclass PresentationExamples extends BasePage {\r\n    protected blockName(): string {\r\n        return 'S-Demos';\r\n    }\r\n\r\n    onDescribe() {\r\n        super.onDescribe();\r\n\r\n        this.describeBlock('first-screen', FirstScreen, {});\r\n        this.describeBlock('embed', EmbedWrapper(`${this.blockName()}-Embed`), {\r\n            type: 'fbo',\r\n            threshold: 0.25,\r\n        });\r\n        this.describeBlock('use-cases-block', DemosIndustries, {});\r\n        this.describeBlock('features-block', PresentationExamplesFeatures, {});\r\n        this.describeBlock('embedding', Embedding, {});\r\n\r\n        const stickyContainer = this.ensureElement('sticky-container');\r\n\r\n        const activeScrollBlocks = [\r\n            ['examples-block', 'Create', BlockType.EXAMPLES],\r\n            ['features-block', 'Features', BlockType.FEATURES],\r\n            ['use-cases-block', 'Industries', BlockType.USE_CASES],\r\n            ['sharing-block', 'Sharing-Block', BlockType.SHARING],\r\n        ] as const;\r\n\r\n        const headings: HTMLElement[] = [];\r\n        const activeScrollBlocksElement: AbstractActiveBlockWrapper<BlockType>[] = [];\r\n\r\n        activeScrollBlocks.forEach(([element, block, type]) => {\r\n            const el = this.describeBlock(element, ActiveBlockWrapper(`${this.blockName()}-${block}`), {\r\n                type,\r\n            });\r\n\r\n            activeScrollBlocksElement.push(el);\r\n            headings.push(this.ensureElement(element));\r\n        });\r\n\r\n        this.describeBlock('sticky-navigation', StickyNavigation, {\r\n            pageElement: stickyContainer,\r\n            activeScrollBlocks: activeScrollBlocksElement,\r\n            headings,\r\n        });\r\n\r\n        this.describeBlock('examples-block', DocumentBlock, {});\r\n\r\n        void runWithNewTask(() => this.describeBlock('book-shelves', Bookshelves, {}));\r\n\r\n        this.describeBlock('call-to-action', GoTrialButtonWrapper(`${this.blockName()}-CallToAction`), {\r\n            position: 'bottom',\r\n        });\r\n    }\r\n}\r\n\r\nexport { PresentationExamples 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 type { IAnalyticsService } from '@flippingbook/web.utils/dist/analytics';\r\nimport { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nexport class CTAAnalyticsService extends Parametrized<CTAAnalyticsService.Params> {\r\n    send(position: CTAAnalyticsService.Position) {\r\n        return this.params.analytics.gaEvent('button_click_trial', {\r\n            category: 'button',\r\n            button_location: position,\r\n        });\r\n    }\r\n}\r\n\r\nexport namespace CTAAnalyticsService {\r\n    export type Position = 'header' | 'mobile-menu' | 'top' | 'middle' | 'bottom';\r\n\r\n    export interface Params {\r\n        analytics: IAnalyticsService;\r\n    }\r\n}\r\n","import { CTAAnalyticsService } from '../CTAanalytics';\r\n\r\nimport { analytics } from './analytics';\r\n\r\nexport const ctaAnalytics = new CTAAnalyticsService({\r\n    analytics,\r\n});\r\n","import { Listenable } from '@flippingbook/web.utils/dist/service';\r\n\r\nimport type { Dialog } from '../components/dialog';\r\nimport type { DialogMount } from '../components/dialog-mount';\r\n\r\nexport class DialogProvider<T extends Dialog.Params> extends Listenable implements IDialogProvider {\r\n    private dialog: Dialog<T> | null = null;\r\n    canHideDialog = false;\r\n\r\n    getDialog(): Dialog<T> | null {\r\n        return this.dialog;\r\n    }\r\n\r\n    showDialog(dialog: Dialog<T>) {\r\n        this.canHideDialog = true;\r\n        this.dialog = dialog;\r\n        this.notify();\r\n    }\r\n\r\n    hideDialog() {\r\n        if (this.dialog === null) {\r\n            return;\r\n        }\r\n\r\n        this.dialog = null;\r\n        this.notify();\r\n    }\r\n\r\n    isDialogOpen() {\r\n        return this.dialog !== null;\r\n    }\r\n}\r\n\r\nexport interface IDialogProvider extends DialogMount.IDialogProvider {\r\n    showDialog(dialog: Dialog<Dialog.Params>): void;\r\n    isDialogOpen(): boolean;\r\n}\r\n","import { DialogProvider } from '../dialog-provider';\r\nexport const dialogProvider = new DialogProvider();\r\n","export const siteAntispamService = {\r\n    getUserDetachedContext: () => window.__flippingbook_user_detached_context__,\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","export function getLoginConsumer(): string {\r\n    return window.Mediaparts?.Bootstrap?.Params?.loginConsumer || 'site';\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        (window.flippingbook.user && window.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 = 681;","__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\t681: 0,\n\t8571: 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\t681: 0,\n\t8571: 0,\n\t4514: 0,\n\t5949: 0,\n\t5908: 0,\n\t2577: 0,\n\t548: 0,\n\t4531: 0,\n\t8684: 0,\n\t919: 0,\n\t9791: 0,\n\t861: 0,\n\t4757: 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(!/^(4(514|531|757)|5(48|908|949)|86(1|84)|1597|2577|919|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,2577,548,4531,8684,919,861,4757,8351,9509,4829,6469], () => (__webpack_require__(61720)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","MIXPANEL_EVENT_TIMEOUT","getGAEventCommonParams","page_title","document","title","page_path","window","location","pathname","page_location","href","AnalyticsService","Parametrized","constructor","params","super","bing","fb","ga","mixpanel","optOut","this","optOutState","event","eventName","eventData","gtagEventParams","gaId","getGaId","mixpanelPromise","mixpanelTrack","fbAnalyticsPromise","withFbAnalytics","fbAnalytics","send","gaEvent","category","uetq","push","el","ev","value","Promise","allSettled","properties","withMixpanel","race","wait","resolve","track","timeout","setTimeout","clearTimeout","opts","non_interaction","event_callback","withGtag","gtag","formatDate","date","getUTCFullYear","getUTCMonth","getUTCDate","pageView","commonParams","gaIdentify","user","user_id","Id","dimension2","mixpanelSetBaseFields","writeToUserProfileOnce","ssouid","$email","Email","FirstName","$first_name","LastName","$last_name","mixpanelIdentify","identify","String","mixpanelAlias","alias","fbAnalyticsIdentify","setSsoId","all","clearGAIdentify","clearMixpanelIdentify","reset","clearFbAnalyticsIdentify","clear","clearIdentify","update","writeToUserProfile","trackSignup","product","method","locale","pageLocale","captchaAttempts","InitialProduct","toUpperCase","people","set","getLoadedMixpanel","mixpanelLoaded","promise","async","loadedMixpanel","Object","keys","reduce","acc","propertyName","propertyValueFromMixPanel","get_property","undefined","set_once","incrementUserProfileKey","props","prop","callback","increment","then","cb","hasGtag","gaGlobal","JSON","parse","vid","gaCookie","cookie","split","map","c","replace","find","pattern","substring","length","formatDateForServerShort","toISOString","Date","getTimezoneOffset","parseWsDate","loadCss","loadJs","parsePaymentInfo","formatDateForServer","throttle","wsDate","parseInt","payment","LastUpdate","tryParseDate","Items","delay","shouldWait","args","dateString","Number","isNaN","GoTrialButton","B","direction","getAttribute","sendAnalytics","position","onLinkClick","preventDefault","stopPropagation","newLink","loggedIn","baseRegisterUrl","subsystem","service","registerUrl","getUserDetachedContext","encodeURIComponent","origin","getLink","url","onDescribe","addEventListener","GoTrialButtonWrapper","blockName","describeElement","embedLinkParamsMap","fbo","type","globalEmbedName","activationClassName","embedIdName","onEmbedScriptAdd","id","addFBOScriptByHashId","salespal","addSalespalScriptById","cldbz","addCLDBZScript","EmbedLink","embedId","dataset","addEmbedScript","showLink","style","display","prepareForActivate","hasConsent","Targeting","Performance","setAttribute","classList","add","activateEmbeds","parseAllEmbeds","Embed","embedLink","hideStub","applyModifiers","loaded","watch","threshold","intersector","onIntersectionChange","entry","isIntersecting","intersectionRatio","unobserve","observe","matchMedia","matches","stubParams","onClick","hideStubTimeoutId","publicationLoadedHandler","test","data","action","removeEventListener","noIframe","describeBlock","EmbedWrapper","EMBED_SCRIPT_URL","BookshelfEmbed","ensure","onLoad","once","load","Bookshelves","CalendlyButtonFBO","LayoutChecker","isIn","layout","mobileLayoutChecker","tabletLayoutChecker","Example","height","clientHeight","DocumentBlock","calendlyClassName","element","examples","Array","from","findAll","item","desktopColumns","tabletColumns","slice","getExamplesColumns","examplesContainer","ensureElement","updateHeight","columns","column","Math","max","sum","example","getColumnHeight","getColumnMaxHeight","requestAnimationFrame","ImageContainer","onShown","Trackable","restartAnimation","animated","runAnimation","fn","fps","maxSuccessFpsCount","successFpsCount","startTime","prevTime","interval","measure","now","duration","runByFps","Embedding","trackable","querySelector","WatchVideoLink","circleIcon","animationType","startAnimation","animate","Branding","HiddenElement","shown","show","onShow","modifiers","AnimatedHiddenElement","reducedMotionMode","treshold","onTransitionEnd","onHidden","onScrollIn","boundingClientRect","top","onScrollOut","onAnimate","Video","isVisible","isPlaying","prefersReducedMotion","autoplayEnabled","Boolean","autoplay","loadedPromise","onLoadedData","readyState","onLoadedMetadata","isHighResScreen","devicePixelRatio","setSourceForElement","dataHighResSrc","highResSrc","dataSrc","src","onObserve","ended","onPlay","onPlaying","onPause","onTimeUpdate","childElementCount","child","children","tagName","onReducedMotionMode","becameVisible","becameHidden","play","failed","onPlaybackFail","start","currentTime","stop","pause","freezeLastFrame","isActive","time","onPlayEnd","loop","cursor","reducedMotionModeFreezeTime","autoplayTreshold","EmbedVideoBlock","visible","video","videoLoadedPromise","videoLoadedPromiseResolve","showed","ms","FormsBlock","GifsBlock","PasswordBlock","PopupBlock","onVisible","PresentationExamplesFeatures","DemosCollection","width","clientWidth","onVisibilityChange","onChange","getClone","cloneNode","getWidth","Scrollable","clones","animationId","animationProgress","setWidth","getCloneCount","addClone","clone","appendChild","removeLastClone","pop","removeChild","stopScrollAnimation","cancelAnimationFrame","runScrollAnimation","endOffset","setAnimationId","getProgress","setProgress","scrollByStep","progress","offset","min","newOffset","transform","Gallery","demoCollectionWidth","demoCollectionVisible","canRunAnimation","scrollable","firstDemoCollection","onPopUpChange","dialogProvider","listen","isDialogOpen","useGalleryPopUps","isOpen","updateCloneCount","rootWidth","newCloneCount","floor","existingCloneCount","forEach","newNode","FirstScreen","galleryElement","ANIMATION_MODES","Bubble","isIntersected","e","isIntersectedBubble","readyForAnimation","setVisible","setMode","mode","enabled","BubbleGroup","intersectedBubbles","winkingInterval","setWinking","removeWinking","setInterval","bubble","random","animationMode","clearInterval","pushBubble","getNotVisibleBubblesCount","curr","describeAllElements","TabberElement","onTabClick","tabs","tab","updateTabState","panels","panel","updateContentState","addOnClickListener","defaultTabId","TabberPanel","getId","active","removeAttribute","TabberTab","label","getOffsetParams","offsetLeft","offsetWidth","listenter","dataId","DemosIndustries","tabHeader","x","scrollToElement","tabsParams","BlockType","blocks","StickyNavigation","scrollSpyParams","pageElement","headings","unitBlocks","scrollSpyOffset","scrollSpyMenu","menu","activeScrollBlocksElement","activeScrollBlocks","PresentationExamples","stickyContainer","EXAMPLES","FEATURES","USE_CASES","SHARING","block","release","SiteAnalyticsService","area","CTAAnalyticsService","analytics","button_location","ctaAnalytics","DialogProvider","Listenable","dialog","canHideDialog","getDialog","showDialog","notify","hideDialog","siteAntispamService","__flippingbook_user_detached_context__","currentLayout","testarea","getElementById","getElementsByTagName","className","getLoginConsumer","Mediaparts","Bootstrap","Params","loginConsumer","isLoggedIn","flippingbook","get","elem","offsetHeight","getClientRects","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","m","amdO","O","result","chunkIds","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","getPrototypeOf","obj","t","ns","create","def","current","indexOf","getOwnPropertyNames","definition","o","defineProperty","enumerable","f","chunkId","promises","u","miniCssF","g","globalThis","Function","prototype","hasOwnProperty","l","done","script","needAttach","scripts","s","createElement","charset","nc","onScriptComplete","prev","onerror","onload","doneFns","parentNode","bind","target","head","Symbol","toStringTag","nmd","paths","p","loadStylesheet","reject","fullhref","existingLinkTags","dataHref","tag","rel","existingStyleTags","findStylesheet","oldTag","linkTag","nonce","errorType","realHref","err","Error","name","code","request","insertBefore","nextSibling","createStylesheet","installedCssChunks","miniCss","installedChunks","installedChunkData","error","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}