{"version":3,"file":"online-digital-brochure-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/./sources/src/components/go-trial-button.ts","webpack://flippingbooksite/./sources/src/components/hidden.ts","webpack://flippingbooksite/./sources/src/components/our-products/index.ts","webpack://flippingbooksite/./sources/src/components/calendly-button/base/index.ts","webpack://flippingbooksite/./sources/src/components/calendly-button/fbo/index.ts","webpack://flippingbooksite/./sources/src/components/image.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/book-demo.ts","webpack://flippingbooksite/./sources/src/components/carousel/autoscroll.ts","webpack://flippingbooksite/./sources/src/services/horizon-scroll-blocker.ts","webpack://flippingbooksite/./sources/src/services/swipe-watcher.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/examples/active-demo-index.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/examples/demo.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/examples/demo-groups.ts","webpack://flippingbooksite/./sources/src/components/disablable-element.ts","webpack://flippingbooksite/./sources/src/components/carousel-indicator/base/dot.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/examples/demo-indicator.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/examples/horizon-scroller.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/examples/visible-demos-count.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/examples/index.ts","webpack://flippingbooksite/./sources/src/util/run-intersector.ts","webpack://flippingbooksite/./sources/src/services/layout-checker.ts","webpack://flippingbooksite/./sources/src/services/instance/layoutChecker.ts","webpack://flippingbooksite/./sources/src/components/FeaturePane/index.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/features.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/first-screen.ts","webpack://flippingbooksite/./sources/src/components/how-to/index.ts","webpack://flippingbooksite/./sources/src/components/how-to/drop-cap/roman-straight/index.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/how-to.ts","webpack://flippingbooksite/./sources/src/pages/demos/online-digital-brochure/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/instance/siteAntispamService.ts","webpack://flippingbooksite/./sources/src/services/intersector.ts","webpack://flippingbooksite/./sources/src/util/current-layout.ts","webpack://flippingbooksite/./sources/src/util/get-login-consumer.ts","webpack://flippingbooksite/./sources/src/util/image.ts","webpack://flippingbooksite/./sources/src/util/is-logged-in.ts","webpack://flippingbooksite/./sources/src/util/is-visible.ts","webpack://flippingbooksite/./sources/src/util/run-once-on-intersect.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 { 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 { 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 { BemBlock, BemElement } from '../../pages/bem';\r\nimport { GoTrialButton } from '../go-trial-button';\r\nimport { AnimatedHiddenElement } from '../hidden';\r\n\r\nimport './style.css';\r\n\r\nclass Product extends BemElement {\r\n    onDescribe() {\r\n        this.el.addEventListener('transitionend', this.activateScale);\r\n    }\r\n\r\n    private activateScale = () => {\r\n        this.applyModifiers({ scaled: true });\r\n        this.el.removeEventListener('transitionend', this.activateScale);\r\n    };\r\n}\r\n\r\nexport class Products extends BemBlock {\r\n    protected blockName() {\r\n        return 'S-Our-Products';\r\n    }\r\n\r\n    onDescribe() {\r\n        super.onDescribe();\r\n\r\n        this.describeElement('intersection', AnimatedHiddenElement, {\r\n            treshold: 0.7,\r\n        });\r\n\r\n        this.describeAllElements('product', Product, {});\r\n\r\n        if (this.params.ctaAnalytics) {\r\n            this.describeElement('go-trial', GoTrialButton, {\r\n                position: 'middle',\r\n            });\r\n        }\r\n    }\r\n}\r\n","import { BemElement } from '../../../pages/bem';\r\n\r\nimport './style.css';\r\n\r\nexport abstract class CalendlyButton extends BemElement {\r\n    onDescribe() {}\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 { BemBlock, BemElement } from '../pages/bem';\r\n\r\nimport { AnimatedHiddenElement } from './hidden';\r\n\r\nclass GenericLoadableImage<P extends LoadableImage.Params> extends BemElement<P, HTMLImageElement> {\r\n    private imageLoaded = false;\r\n\r\n    private onLoad = () => {\r\n        this.imageLoaded = true;\r\n        this.params.onLoad();\r\n    };\r\n\r\n    onDescribe() {\r\n        if (this.el.complete) {\r\n            this.onLoad();\r\n            return;\r\n        }\r\n\r\n        this.el.addEventListener('load', this.onLoad);\r\n    }\r\n\r\n    /**\r\n    IE 10 ignores onload event for some reason.\r\n    This method is used as a last resort fallback to show image from `BlockWithPicture`\r\n    @see {BlockWithPicture}\r\n    */\r\n    forceCheckCompletion() {\r\n        if (!this.imageLoaded && this.el.complete) {\r\n            this.onLoad();\r\n        }\r\n    }\r\n}\r\n\r\nexport namespace LoadableImage {\r\n    export interface Params {\r\n        onLoad: () => void;\r\n    }\r\n}\r\n\r\nexport class LoadableImage extends GenericLoadableImage<LoadableImage.Params> {}\r\n\r\nexport class HiddenLoadableImage extends LoadableImage {\r\n    constructor(el: HTMLImageElement, elementName: string, elementClassName: string) {\r\n        super(el, elementName, elementClassName, {\r\n            onLoad: () => this.show(),\r\n        });\r\n    }\r\n\r\n    private show() {\r\n        this.applyModifiers({ shown: true });\r\n    }\r\n}\r\n\r\nexport abstract class BlockWithPicture<\r\n    P extends BlockWithPicture.Params = Record<string, never>,\r\n    E extends HTMLElement = HTMLElement,\r\n> extends BemBlock<P, E> {\r\n    protected abstract pictureElement(): string;\r\n    protected abstract containerElement(): string;\r\n\r\n    protected container = this.describeElement(this.containerElement(), AnimatedHiddenElement, {\r\n        onTransitionEnd: this.params.onTransitionEnd,\r\n        onScrollOut: this.params.onScrollOut,\r\n        treshold: this.animationTreshold(),\r\n        // We check image completion when it comes into viewport so it fires it's `onLoad` handler if loaded.\r\n        // This is a workaround for IE10 ignoring image's `onload` event.\r\n        onScrollIn: () => this.picture.forceCheckCompletion(),\r\n    });\r\n\r\n    protected picture = this.describeElement(this.pictureElement(), LoadableImage, {\r\n        onLoad: () => this.container.show(),\r\n    });\r\n\r\n    protected animationTreshold(): number {\r\n        return 0.5;\r\n    }\r\n}\r\n\r\nexport namespace BlockWithPicture {\r\n    export interface Params {\r\n        onTransitionEnd?: (e: TransitionEvent) => void;\r\n        onScrollOut?: () => void;\r\n    }\r\n}\r\n","import { CalendlyButtonFBO } from '../../../components/calendly-button/fbo';\r\nimport { LoadableImage } from '../../../components/image';\r\nimport { runOnceOnIntersect } from '../../../util/run-once-on-intersect';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class BookDemo extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Brochure-Book-Demo';\r\n    }\r\n\r\n    private runIntersector = () => {\r\n        runOnceOnIntersect({\r\n            el: this.ensureElement('animation-trigger'),\r\n            fn: () => this.applyModifiers({ 'salesman-shown': true }),\r\n        });\r\n    };\r\n\r\n    onDescribe() {\r\n        this.describeElement('calendly', CalendlyButtonFBO, {});\r\n\r\n        this.describeElement('salesman', LoadableImage, { onLoad: this.runIntersector });\r\n    }\r\n}\r\n","import { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nexport class AutoScroll extends Parametrized<AutoScroll.Params> {\r\n    private intervalId: number | undefined;\r\n    private prefersReducedMotion = matchMedia('(prefers-reduced-motion)').matches;\r\n\r\n    activate() {\r\n        if (this.params.disable || this.prefersReducedMotion) {\r\n            return;\r\n        }\r\n\r\n        this.deactivate();\r\n\r\n        this.intervalId = window.setInterval(this.params.scrollAction, this.params.interval);\r\n    }\r\n\r\n    deactivate() {\r\n        clearInterval(this.intervalId);\r\n        this.intervalId = undefined;\r\n    }\r\n\r\n    reactivate() {\r\n        this.deactivate();\r\n        this.activate();\r\n    }\r\n}\r\n\r\nnamespace AutoScroll {\r\n    export interface Params {\r\n        scrollAction: () => void;\r\n        interval: number;\r\n        disable?: boolean;\r\n    }\r\n}\r\n","const threshold = 5;\r\n\r\nexport class HorizonScrollBlocker {\r\n    private firstClientX = 0;\r\n    private clientX = 0;\r\n\r\n    private touchStart = (e: TouchEvent) => {\r\n        this.firstClientX = e.touches[0].clientX;\r\n    };\r\n\r\n    private preventTouch = (e: TouchEvent) => {\r\n        this.clientX = e.touches[0].clientX - this.firstClientX;\r\n\r\n        const isHorizonScroll = Math.abs(this.clientX) > threshold;\r\n\r\n        if (isHorizonScroll) {\r\n            e.preventDefault();\r\n        }\r\n    };\r\n\r\n    constructor(el: HTMLElement) {\r\n        el.addEventListener('touchstart', this.touchStart, { passive: false });\r\n        el.addEventListener('touchmove', this.preventTouch, { passive: false });\r\n    }\r\n}\r\n","import { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nexport class SwipeWatcher extends Parametrized<SwipeWatcher.Params> {\r\n    private startX = 0;\r\n    private startY = 0;\r\n\r\n    constructor(params: SwipeWatcher.Params) {\r\n        super(params);\r\n\r\n        const { el } = params;\r\n\r\n        const eventParams = { passive: true };\r\n\r\n        el.addEventListener('touchstart', this.handleTouchStart, eventParams);\r\n        el.addEventListener('touchend', this.handleTouchEnd, eventParams);\r\n    }\r\n\r\n    private handleTouchStart = (e: TouchEvent) => {\r\n        this.startX = e.changedTouches[0].screenX;\r\n        this.startY = e.changedTouches[0].screenY;\r\n    };\r\n\r\n    private handleTouchEnd = (e: TouchEvent) => {\r\n        const diffX = e.changedTouches[0].screenX - this.startX;\r\n        const diffY = e.changedTouches[0].screenY - this.startY;\r\n        const ratioX = Math.abs(diffX / diffY);\r\n        const ratioY = Math.abs(diffY / diffX);\r\n        const absDiff = Math.abs(ratioX > ratioY ? diffX : diffY);\r\n\r\n        if (absDiff < 30) {\r\n            // Ignore small movements\r\n            return;\r\n        }\r\n\r\n        if (ratioX > ratioY) {\r\n            if (diffX >= 0) {\r\n                if (this.params.onRight) {\r\n                    this.params.onRight();\r\n                }\r\n            } else {\r\n                if (this.params.onLeft) {\r\n                    this.params.onLeft();\r\n                }\r\n            }\r\n        } else {\r\n            if (diffY >= 0) {\r\n                if (this.params.onDown) {\r\n                    this.params.onDown();\r\n                }\r\n            } else {\r\n                if (this.params.onUp) {\r\n                    this.params.onUp();\r\n                }\r\n            }\r\n        }\r\n    };\r\n}\r\n\r\nnamespace SwipeWatcher {\r\n    export interface Params {\r\n        el: HTMLElement;\r\n        onUp?: () => void;\r\n        onDown?: () => void;\r\n        onLeft?: () => void;\r\n        onRight?: () => void;\r\n    }\r\n}\r\n","import { Listenable } from '@flippingbook/web.utils/dist/service';\r\n\r\nexport class ActiveDemoIndex extends Listenable {\r\n    private value = 0;\r\n\r\n    get() {\r\n        return this.value;\r\n    }\r\n\r\n    set(value: number) {\r\n        this.value = value;\r\n        this.notify();\r\n    }\r\n}\r\n","import { BemElement } from '../../../bem';\r\n\r\nexport class Demo extends BemElement {\r\n    get relativeOffset() {\r\n        return this.el.offsetLeft;\r\n    }\r\n\r\n    get width() {\r\n        return this.el.getBoundingClientRect().width;\r\n    }\r\n}\r\n","import { BemElement } from '../../../bem';\r\n\r\nimport type { ScrollableElement } from './horizon-scroller';\r\n\r\nimport type { LeftDemos } from './index';\r\n\r\nexport class DemoGroups extends BemElement<DemoGroups.Params> implements ScrollableElement {\r\n    private offset = 0;\r\n\r\n    get element() {\r\n        return this.el;\r\n    }\r\n\r\n    get width() {\r\n        return this.el.getBoundingClientRect().width;\r\n    }\r\n\r\n    private normalizeOffset(offset: number) {\r\n        const absValue = Math.abs(offset);\r\n        const centerDemosElementWidth = this.params.centerDemosElement.getBoundingClientRect().width;\r\n\r\n        if (absValue > this.params.leftDemos.width * 0.7 + centerDemosElementWidth) {\r\n            return -(absValue % centerDemosElementWidth);\r\n        }\r\n\r\n        if (absValue < this.params.leftDemos.width * 0.7) {\r\n            return -(absValue + centerDemosElementWidth);\r\n        }\r\n\r\n        return -absValue;\r\n    }\r\n\r\n    getOffset() {\r\n        return this.offset;\r\n    }\r\n\r\n    setOffset(offset: number) {\r\n        this.offset = this.normalizeOffset(offset);\r\n        this.el.style.transform = `translate3d(${this.offset}px, 0, 0)`;\r\n    }\r\n\r\n    flikerLayout() {\r\n        /* for ios and macOS Safari: force rerender fix image shift */\r\n        return new Promise<void>((resolve) => {\r\n            requestAnimationFrame(() => {\r\n                this.el.style.top = '1px';\r\n                requestAnimationFrame(() => {\r\n                    this.el.style.top = '';\r\n                    requestAnimationFrame(() => resolve());\r\n                });\r\n            });\r\n        });\r\n    }\r\n\r\n    onDescribe(): void {\r\n        this.el.addEventListener('mouseenter', this.params.onMouseEnter);\r\n        this.el.addEventListener('mouseleave', this.params.onMouseLeave);\r\n    }\r\n}\r\n\r\nnamespace DemoGroups {\r\n    export interface Params {\r\n        centerDemosElement: HTMLElement;\r\n        leftDemos: LeftDemos;\r\n        onMouseEnter: () => void;\r\n        onMouseLeave: () => void;\r\n    }\r\n}\r\n","import { BemElement } from '../pages/bem';\r\n\r\nexport class DisablableElement<T = Record<string, never>, E extends HTMLElement = HTMLElement> extends BemElement<\r\n    T,\r\n    E\r\n> {\r\n    setDisabled(disabled: boolean) {\r\n        if (disabled) {\r\n            this.el.setAttribute('disabled', '');\r\n        } else {\r\n            this.el.removeAttribute('disabled');\r\n        }\r\n    }\r\n}\r\n","import type { DescribeOptions } from '../../../pages/bem';\r\nimport { DisablableElement } from '../../disablable-element';\r\n\r\nexport class Dot extends DisablableElement<Dot.Params> {\r\n    onDescribe(options?: DescribeOptions): void {\r\n        if (options?.index === undefined) {\r\n            return;\r\n        }\r\n\r\n        const { index } = options;\r\n\r\n        const onClick = () => this.params.onClick(index);\r\n        this.el.addEventListener('click', onClick);\r\n\r\n        this.el.addEventListener('touchstart', this.params.onTouch, {\r\n            passive: false,\r\n        });\r\n    }\r\n}\r\n\r\nnamespace Dot {\r\n    export interface Params {\r\n        onClick: (elementIndex: number) => void;\r\n        onTouch: () => void;\r\n    }\r\n}\r\n","import { Dot } from '../../../../components/carousel-indicator/base/dot';\r\nimport { BemBlock } from '../../../bem';\r\n\r\nexport class DemoIndicator extends BemBlock<DemoIndicator.Params> {\r\n    protected blockName(): string {\r\n        return 'S-Brochure-Examples-Indicator';\r\n    }\r\n\r\n    private dotsContainer = this.ensureElement('dots');\r\n\r\n    private dots: Dot[] = [];\r\n    private activeDotIndex = 0;\r\n\r\n    private createDotElement() {\r\n        const button = document.createElement('button');\r\n        button.className = this.elementClass('dot');\r\n\r\n        return button;\r\n    }\r\n\r\n    getCount() {\r\n        return this.dots.length;\r\n    }\r\n\r\n    setCount(count: number) {\r\n        this.dotsContainer.innerHTML = '';\r\n\r\n        for (let i = 0; i < count; i++) {\r\n            const dotElement = this.createDotElement();\r\n            this.dotsContainer.appendChild(dotElement);\r\n        }\r\n\r\n        this.dots = this.describeAllElements('dot', Dot, {\r\n            onClick: this.params.onDotClick,\r\n            onTouch: this.params.onDotTouch,\r\n        });\r\n    }\r\n\r\n    getActiveDotIndex() {\r\n        return this.activeDotIndex;\r\n    }\r\n\r\n    setActiveDot(dotIndex: number) {\r\n        const oldActiveDot = this.dots[this.activeDotIndex];\r\n\r\n        if (oldActiveDot) {\r\n            oldActiveDot.setDisabled(false);\r\n        }\r\n\r\n        const newActiveDot = this.dots[dotIndex];\r\n\r\n        if (newActiveDot) {\r\n            this.dots[dotIndex].setDisabled(true);\r\n        }\r\n\r\n        this.applyModifiers({ 'small-first': dotIndex > 1 });\r\n        this.applyModifiers({ 'small-last': dotIndex < this.dots.length - 2 });\r\n\r\n        this.activeDotIndex = dotIndex;\r\n    }\r\n\r\n    onDescribe(): void {\r\n        this.el.addEventListener('mouseenter', this.params.onMouseEnter);\r\n        this.el.addEventListener('mouseleave', this.params.onMouseLeave);\r\n    }\r\n}\r\n\r\nnamespace DemoIndicator {\r\n    export interface Params {\r\n        onDotClick: (dotIndex: number) => void;\r\n        onDotTouch: () => void;\r\n        onMouseEnter: () => void;\r\n        onMouseLeave: () => void;\r\n    }\r\n}\r\n","import { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nexport interface ScrollableElement {\r\n    getOffset: () => number;\r\n    setOffset: (offset: number) => void;\r\n}\r\n\r\ninterface Params<T extends ScrollableElement> {\r\n    element: T;\r\n}\r\n\r\nconst ANIMATION_DURATION_MS = 600;\r\n\r\nconst FPS = 60;\r\nconst ONE_SECOND = 1000;\r\nconst ANIMATION_INTERVAL = ONE_SECOND / FPS;\r\nconst ANIMATION_INTERVAL_WITH_TOLERANCE = ANIMATION_INTERVAL - 5;\r\n\r\nfunction easeInOut(t: number) {\r\n    return 0.5 * (Math.sin((t - 0.5) * Math.PI) + 1);\r\n}\r\n\r\nexport class HorizonScroller extends Parametrized<Params<ScrollableElement>> {\r\n    private animationId: number = 0;\r\n\r\n    private setAnimationId(id: number) {\r\n        this.animationId = id;\r\n    }\r\n\r\n    private stopScrollAnimation() {\r\n        cancelAnimationFrame(this.animationId);\r\n    }\r\n\r\n    scrollTo(to: number) {\r\n        const from = this.params.element.getOffset();\r\n\r\n        if (from === to) {\r\n            return;\r\n        }\r\n\r\n        this.stopScrollAnimation();\r\n\r\n        let startTime: number;\r\n        let lastTime: number;\r\n\r\n        const fullOffsetAbs = Math.abs(from - to);\r\n\r\n        const getNewOffset =\r\n            from < to\r\n                ? (progress: number) => from + progress * fullOffsetAbs\r\n                : (progress: number) => from - progress * fullOffsetAbs;\r\n\r\n        const scrollByStep = (now: number) => {\r\n            const animationId = requestAnimationFrame(scrollByStep);\r\n            this.setAnimationId(animationId);\r\n\r\n            if (startTime === undefined) {\r\n                startTime = now;\r\n                return;\r\n            }\r\n\r\n            if (lastTime === undefined) {\r\n                lastTime = now;\r\n                return;\r\n            }\r\n\r\n            const delta = now - lastTime;\r\n\r\n            if (delta > ANIMATION_INTERVAL_WITH_TOLERANCE) {\r\n                lastTime = now;\r\n\r\n                const timeProgress = Math.min(1, (now - startTime) / ANIMATION_DURATION_MS);\r\n                const timeProgressWithTimeFunction = easeInOut(timeProgress);\r\n\r\n                const newOffset = getNewOffset(timeProgressWithTimeFunction);\r\n\r\n                if (timeProgressWithTimeFunction === 1) {\r\n                    this.params.element.setOffset(to);\r\n                    this.stopScrollAnimation();\r\n                    return;\r\n                }\r\n\r\n                this.params.element.setOffset(newOffset);\r\n            }\r\n        };\r\n\r\n        requestAnimationFrame(scrollByStep);\r\n    }\r\n}\r\n","import { ListenableParametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\ninterface Params {\r\n    demoContainer: HTMLElement;\r\n    threeDemoLayoutTestElement: HTMLElement;\r\n    twoDemoLayoutTestElement: HTMLElement;\r\n}\r\n\r\ntype DemosCount = 1 | 2 | 3;\r\n\r\nexport class VisibleDemosCount extends ListenableParametrized<Params> {\r\n    private value: DemosCount;\r\n\r\n    private getVisibleDemosCount(): DemosCount {\r\n        if (this.params.threeDemoLayoutTestElement.clientWidth > 0) {\r\n            return 3;\r\n        }\r\n\r\n        if (this.params.twoDemoLayoutTestElement.clientWidth > 0) {\r\n            return 2;\r\n        }\r\n\r\n        return 1;\r\n    }\r\n\r\n    private set = () => {\r\n        this.value = this.getVisibleDemosCount();\r\n        this.notify();\r\n    };\r\n\r\n    constructor(params: Params) {\r\n        super(params);\r\n\r\n        this.value = this.getVisibleDemosCount();\r\n\r\n        const observer = new ResizeObserver(this.set);\r\n        observer.observe(params.demoContainer);\r\n    }\r\n\r\n    get() {\r\n        return this.value;\r\n    }\r\n}\r\n","import { AutoScroll } from '../../../../components/carousel/autoscroll';\r\nimport { GoTrialButton } from '../../../../components/go-trial-button';\r\nimport { HorizonScrollBlocker } from '../../../../services/horizon-scroll-blocker';\r\nimport { SwipeWatcher } from '../../../../services/swipe-watcher';\r\nimport { waitForAllImagesLoad } from '../../../../util/image';\r\nimport { runIntersector } from '../../../../util/run-intersector';\r\nimport { BemBlock, BemElement } from '../../../bem';\r\n\r\nimport { ActiveDemoIndex } from './active-demo-index';\r\nimport { Demo } from './demo';\r\nimport { DemoGroups } from './demo-groups';\r\nimport { DemoIndicator } from './demo-indicator';\r\nimport { HorizonScroller } from './horizon-scroller';\r\nimport { VisibleDemosCount } from './visible-demos-count';\r\n\r\nconst AUTOSCROLL_INTERVAL_MS = 6000;\r\n\r\nexport class LeftDemos extends BemElement {\r\n    get width() {\r\n        return this.el.getBoundingClientRect().width;\r\n    }\r\n}\r\n\r\nexport class Examples extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Brochure-Examples';\r\n    }\r\n\r\n    private centerDemosElement = this.ensureElement('center-demos');\r\n\r\n    private autoScroll = new AutoScroll({\r\n        scrollAction: () => this.scrollToLeftByStep(1),\r\n        interval: AUTOSCROLL_INTERVAL_MS,\r\n    });\r\n\r\n    private demos = this.describeAllElements('center-demo', Demo, {});\r\n\r\n    private leftDemos = this.describeElement('left-demos', LeftDemos, {});\r\n    private demoGroups = this.describeElement('demo-groups', DemoGroups, {\r\n        centerDemosElement: this.centerDemosElement,\r\n        leftDemos: this.leftDemos,\r\n        onMouseEnter: () => this.autoScroll.deactivate(),\r\n        onMouseLeave: () => this.autoScroll.activate(),\r\n    });\r\n\r\n    private horizonScroller = new HorizonScroller({\r\n        element: this.demoGroups,\r\n    });\r\n\r\n    private visibleDemosCount = new VisibleDemosCount({\r\n        demoContainer: this.demoGroups.element,\r\n        twoDemoLayoutTestElement: this.ensureElement('two-demo-layout-test'),\r\n        threeDemoLayoutTestElement: this.ensureElement('three-demo-layout-test'),\r\n    });\r\n\r\n    private activeDemoIndex = new ActiveDemoIndex();\r\n\r\n    private dots = this.describeBlock('indicator', DemoIndicator, {\r\n        onDotClick: (newDotIndex: number) => {\r\n            const activeDotIndex = this.dots.getActiveDotIndex();\r\n\r\n            const step = newDotIndex - activeDotIndex;\r\n\r\n            const scrollAction = step > -1 ? 'scrollToLeftByStep' : 'scrollToRightByStep';\r\n\r\n            void this[scrollAction](Math.abs(step));\r\n        },\r\n        onDotTouch: () => {\r\n            this.autoScroll.reactivate();\r\n        },\r\n        onMouseEnter: () => this.autoScroll.deactivate(),\r\n        onMouseLeave: () => this.autoScroll.activate(),\r\n    });\r\n\r\n    private normalizeIndex(i: number) {\r\n        return i % this.demos.length;\r\n    }\r\n\r\n    private normalizeDemoIndexByVisibleCount() {\r\n        const visibleDemosCount = this.visibleDemosCount.get();\r\n\r\n        if (visibleDemosCount === 2) {\r\n            const activeDemoIndex = this.activeDemoIndex.get();\r\n\r\n            if (activeDemoIndex % 2 === 0) {\r\n                return;\r\n            }\r\n\r\n            const maxDemoIndex = this.demos.length - 3;\r\n\r\n            if (activeDemoIndex === maxDemoIndex) {\r\n                this.activeDemoIndex.set(activeDemoIndex + 1);\r\n                return;\r\n            }\r\n\r\n            if (activeDemoIndex % 6 === 3) {\r\n                this.activeDemoIndex.set(activeDemoIndex + 1);\r\n                return;\r\n            }\r\n\r\n            this.activeDemoIndex.set(activeDemoIndex - 1);\r\n            return;\r\n        }\r\n\r\n        if (visibleDemosCount === 3) {\r\n            const activeDemoIndex = this.activeDemoIndex.get();\r\n\r\n            const maxDemoIndex = this.demos.length - 3;\r\n\r\n            if (activeDemoIndex > maxDemoIndex) {\r\n                this.activeDemoIndex.set(maxDemoIndex);\r\n                return;\r\n            }\r\n\r\n            const remainder = activeDemoIndex % 3;\r\n\r\n            if (remainder === 0) {\r\n                return;\r\n            }\r\n\r\n            this.activeDemoIndex.set(activeDemoIndex - remainder);\r\n        }\r\n    }\r\n\r\n    private getOffsetToCenterDemosByIndex(activeDemoIndex: number) {\r\n        const visibleDemosCount = this.visibleDemosCount.get();\r\n\r\n        if (visibleDemosCount === 3) {\r\n            const middleDemo = this.demos[activeDemoIndex + 1];\r\n\r\n            return middleDemo.relativeOffset + middleDemo.width / 2;\r\n        }\r\n\r\n        const leftDemo = this.demos[activeDemoIndex];\r\n        const leftDemoOffset = leftDemo.relativeOffset;\r\n\r\n        if (visibleDemosCount === 2) {\r\n            const rightDemo = this.demos[activeDemoIndex + 1];\r\n            const rightDemoOffset = rightDemo.relativeOffset;\r\n\r\n            const demosWidth = rightDemoOffset + rightDemo.width - leftDemoOffset;\r\n\r\n            return leftDemoOffset + demosWidth / 2;\r\n        }\r\n\r\n        return leftDemoOffset + leftDemo.width / 2;\r\n    }\r\n\r\n    private updateDotCount = () => {\r\n        const visibleDemosCount = this.visibleDemosCount.get();\r\n        const dotsCount = Math.ceil(this.demos.length / visibleDemosCount);\r\n        this.dots.setCount(dotsCount);\r\n    };\r\n\r\n    private updateActiveDot = () => {\r\n        const visibleDemosCount = this.visibleDemosCount.get();\r\n        const activeDotIndex = Math.floor((this.activeDemoIndex.get() + visibleDemosCount - 1) / visibleDemosCount);\r\n\r\n        this.dots.setActiveDot(activeDotIndex);\r\n    };\r\n\r\n    private updateCenterPosition() {\r\n        const activeDemoIndex = this.activeDemoIndex.get();\r\n        const offsetToCenterDemos = this.getOffsetToCenterDemosByIndex(activeDemoIndex);\r\n        const delta = this.leftDemos.width + offsetToCenterDemos - this.demoGroups.width;\r\n        const offset = this.demoGroups.width / 2 + delta;\r\n\r\n        this.demoGroups.setOffset(-offset);\r\n    }\r\n\r\n    private onVisibleDemoCountChange = () => {\r\n        this.normalizeDemoIndexByVisibleCount();\r\n        this.updateCenterPosition();\r\n        this.updateDotCount();\r\n        this.updateActiveDot();\r\n    };\r\n\r\n    private scrollToLeftByStep(step: number) {\r\n        const activeDemoIndex = this.activeDemoIndex.get();\r\n        const visibleDemosCount = this.visibleDemosCount.get();\r\n\r\n        const maxDemoIndex = this.demos.length - visibleDemosCount;\r\n        const newActiveDemoIndex = Math.min(\r\n            maxDemoIndex,\r\n            this.normalizeIndex(activeDemoIndex + visibleDemosCount * step),\r\n        );\r\n\r\n        const offsetToCenterDemos = this.getOffsetToCenterDemosByIndex(newActiveDemoIndex);\r\n        const delta = this.leftDemos.width + offsetToCenterDemos - this.demoGroups.width;\r\n        const offset = this.demoGroups.width / 2 + delta;\r\n\r\n        const maxDotIndex = this.dots.getCount() - 1;\r\n\r\n        const toOffset =\r\n            this.dots.getActiveDotIndex() + step > maxDotIndex\r\n                ? offset + this.centerDemosElement.getBoundingClientRect().width\r\n                : offset;\r\n\r\n        this.horizonScroller.scrollTo(-toOffset);\r\n\r\n        this.activeDemoIndex.set(newActiveDemoIndex);\r\n    }\r\n\r\n    private scrollToRightByStep(step: number) {\r\n        const activeDemoIndex = this.activeDemoIndex.get();\r\n        const visibleDemosCount = this.visibleDemosCount.get();\r\n\r\n        const maxDemoIndex = this.demos.length - visibleDemosCount;\r\n        const newActiveDemoIndex =\r\n            activeDemoIndex === maxDemoIndex && visibleDemosCount % 2 === 0\r\n                ? this.demos.length - 1 - visibleDemosCount * step\r\n                : this.normalizeIndex(this.demos.length + activeDemoIndex - visibleDemosCount * step);\r\n\r\n        const offsetToCenterDemos = this.getOffsetToCenterDemosByIndex(newActiveDemoIndex);\r\n        const delta = this.leftDemos.width + offsetToCenterDemos - this.demoGroups.width;\r\n        const offset = this.demoGroups.width / 2 + delta;\r\n\r\n        const minDotIndex = 0;\r\n\r\n        const toOffset =\r\n            this.dots.getActiveDotIndex() - step < minDotIndex\r\n                ? offset - this.centerDemosElement.getBoundingClientRect().width\r\n                : offset;\r\n\r\n        this.horizonScroller.scrollTo(-toOffset);\r\n\r\n        this.activeDemoIndex.set(newActiveDemoIndex);\r\n    }\r\n\r\n    private placeDemoPreviewImages() {\r\n        return new Promise<void>((resolve) => {\r\n            requestAnimationFrame(() => {\r\n                this.applyModifiers({ 'preview-placed': true });\r\n                requestAnimationFrame(() => resolve());\r\n            });\r\n        });\r\n    }\r\n\r\n    private showDemoPreviewImages() {\r\n        return new Promise<void>((resolve) => {\r\n            requestAnimationFrame(() => {\r\n                this.applyModifiers({ 'preview-loaded': true });\r\n                requestAnimationFrame(() => resolve());\r\n            });\r\n        });\r\n    }\r\n\r\n    onDescribe() {\r\n        void (async () => {\r\n            await waitForAllImagesLoad({\r\n                container: this.el,\r\n                classNames: [this.elementClass('preview-image')],\r\n            });\r\n\r\n            await this.placeDemoPreviewImages();\r\n            await this.demoGroups.flikerLayout();\r\n\r\n            this.onVisibleDemoCountChange();\r\n\r\n            await this.showDemoPreviewImages();\r\n\r\n            this.describeElement('go-trial', GoTrialButton, {\r\n                position: 'middle',\r\n            });\r\n\r\n            const demoGroupsWrapperElement = this.ensureElement('demo-groups-wrapper');\r\n\r\n            // eslint-disable-next-line no-new\r\n            new SwipeWatcher({\r\n                el: demoGroupsWrapperElement,\r\n                onLeft: () => {\r\n                    this.autoScroll.reactivate();\r\n                    this.scrollToLeftByStep(1);\r\n                },\r\n                onRight: () => {\r\n                    this.autoScroll.reactivate();\r\n                    this.scrollToRightByStep(1);\r\n                },\r\n            });\r\n\r\n            // eslint-disable-next-line no-new\r\n            new HorizonScrollBlocker(demoGroupsWrapperElement);\r\n\r\n            this.visibleDemosCount.listen(this.onVisibleDemoCountChange);\r\n            this.activeDemoIndex.listen(this.updateActiveDot);\r\n\r\n            runIntersector({\r\n                el: this.el,\r\n                onIntersected: () => this.autoScroll.activate(),\r\n                onNotIntersected: () => this.autoScroll.deactivate(),\r\n            });\r\n\r\n            document.addEventListener('visibilitychange', () => {\r\n                if (document.visibilityState === 'visible') {\r\n                    this.autoScroll.activate();\r\n                    return;\r\n                }\r\n\r\n                this.autoScroll.deactivate();\r\n            });\r\n        })();\r\n    }\r\n}\r\n","import { SingleElementIntersector } from '../services/intersector';\r\n\r\nexport function runIntersector(params: { el: HTMLElement; onIntersected: () => void; onNotIntersected: () => void }) {\r\n    const { el, onIntersected, onNotIntersected } = params;\r\n\r\n    let isIntersected = false;\r\n\r\n    const intersector = new SingleElementIntersector({\r\n        el,\r\n        onIntersectionChange: (entry: IntersectionObserverEntry) => {\r\n            const { isIntersecting } = entry;\r\n\r\n            if (isIntersected !== isIntersecting) {\r\n                isIntersected = isIntersecting;\r\n\r\n                const action = isIntersecting ? onIntersected : onNotIntersected;\r\n\r\n                action();\r\n            }\r\n        },\r\n        threshold: [0, 1],\r\n    });\r\n\r\n    intersector.observe();\r\n}\r\n","import { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nimport { currentLayout } from '../util/current-layout';\r\n\r\nexport class LayoutChecker extends Parametrized<LayoutChecker.Params> {\r\n    isIn() {\r\n        return this.params.layout === currentLayout();\r\n    }\r\n}\r\n\r\nexport namespace LayoutChecker {\r\n    export type LayoutSize = 'lg' | 'md' | 'sm' | 'xs';\r\n\r\n    export interface Params {\r\n        layout: LayoutSize;\r\n    }\r\n}\r\n","import { LayoutChecker } from '../layout-checker';\r\n\r\nexport const mobileLayoutChecker = new LayoutChecker({ layout: 'xs' });\r\nexport const tabletLayoutChecker = new LayoutChecker({ layout: 'sm' });\r\nexport const largeLayoutChecker = new LayoutChecker({ layout: 'lg' });\r\n","import _throttle from 'lodash-es/throttle';\r\n\r\nimport { BemBlock } from '../../pages/bem';\r\nimport { mobileLayoutChecker, tabletLayoutChecker } from '../../services/instance/layoutChecker';\r\nimport './style.css';\r\n\r\nconst onTabletLineSize = 2;\r\n\r\nexport class FeaturePane extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Feature-Pane';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.alignmentTitlesHeight();\r\n        window.addEventListener('resize', this.onResizeThrottled);\r\n    }\r\n\r\n    private onResizeThrottled = _throttle(() => this.alignmentTitlesHeight(), 300);\r\n\r\n    private titleElements = this.allElements('title-text');\r\n    private onDesktopLineSize = Number(this.el.dataset.lineSize) || 3;\r\n\r\n    private alignmentTitlesHeight() {\r\n        if (this.titleElements.length) {\r\n            const isMobile = mobileLayoutChecker.isIn();\r\n\r\n            this.resetTitlesHeight();\r\n            if (!isMobile) {\r\n                const isTablet = tabletLayoutChecker.isIn();\r\n\r\n                requestAnimationFrame(() => {\r\n                    this.recalculateTitlesHeight(isTablet ? onTabletLineSize : this.onDesktopLineSize);\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    private resetTitlesHeight() {\r\n        this.titleElements.forEach((titleElement: HTMLElement) => {\r\n            titleElement.style.height = '';\r\n        });\r\n    }\r\n\r\n    private recalculateTitlesHeight(lineSize: number) {\r\n        const heights = this.getMaxTitleHeightsByLineSize(lineSize);\r\n\r\n        if (heights.length) {\r\n            this.setTitlesHeight(heights, lineSize);\r\n        }\r\n    }\r\n\r\n    private getMaxTitleHeightsByLineSize(lineSize: number) {\r\n        const elementHeights = this.titleElements.map(\r\n            (titleElement: HTMLElement) => titleElement.getBoundingClientRect().height,\r\n        );\r\n        const linesCount = Math.ceil(this.titleElements.length / lineSize);\r\n        const maxHeightsByLine = Array.from(Array(linesCount), (_, i) => {\r\n            const startIndex = i * lineSize;\r\n            const endIndex = i * lineSize + lineSize;\r\n\r\n            return Math.max(...elementHeights.slice(startIndex, endIndex));\r\n        });\r\n\r\n        return maxHeightsByLine;\r\n    }\r\n\r\n    private setTitlesHeight(heights: number[], lineSize: number) {\r\n        this.titleElements.forEach((titleElement: HTMLElement, i: number) => {\r\n            titleElement.style.height = `${heights[Math.floor(i / lineSize)]}px`;\r\n        });\r\n    }\r\n}\r\n","import { FeaturePane } from '../../../components/FeaturePane';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class Features extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Brochure-Features';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeBlock('feature-pane', FeaturePane, {});\r\n    }\r\n}\r\n","import { CalendlyButtonFBO } from '../../../components/calendly-button/fbo';\r\nimport { GoTrialButton } from '../../../components/go-trial-button';\r\nimport { LoadableImage } from '../../../components/image';\r\nimport { BemBlock } from '../../bem';\r\n\r\nexport class FirstScreen extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Brochure-First-Screen';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeElement('go-trial', GoTrialButton, {\r\n            position: 'top',\r\n        });\r\n\r\n        if (this.element('calendly')) {\r\n            this.describeElement('calendly', CalendlyButtonFBO, {});\r\n        }\r\n\r\n        this.describeElement('corner-image', LoadableImage, {\r\n            onLoad: () => this.applyModifiers({ 'tab-shown': true }),\r\n        });\r\n\r\n        this.describeElement('book-image', LoadableImage, {\r\n            onLoad: () => this.applyModifiers({ 'book-loaded': true }),\r\n        });\r\n    }\r\n}\r\n","import { BemBlock } from '../../pages/bem';\r\nimport './style.css';\r\n\r\nexport abstract class HowToBaseBlock<P = Record<string, never>> extends BemBlock<P> {\r\n    protected blockName(): string {\r\n        return 'S-How-To';\r\n    }\r\n}\r\n","import { BemElement } from '../../../../pages/bem';\r\nimport './style.css';\r\n\r\nexport class RomanStraightDropCap extends BemElement {}\r\n","import { HowToBaseBlock } from '../../../components/how-to';\r\nimport { RomanStraightDropCap } from '../../../components/how-to/drop-cap/roman-straight';\r\nimport { BemBlock } from '../../bem';\r\n\r\nclass HowToBlock extends HowToBaseBlock {\r\n    onDescribe() {\r\n        this.describeAllElements('drop-cap', RomanStraightDropCap, {});\r\n    }\r\n}\r\n\r\nexport class HowTo extends BemBlock {\r\n    protected blockName(): string {\r\n        return 'S-Brochure-How-To';\r\n    }\r\n\r\n    onDescribe() {\r\n        this.describeBlock('how-to', HowToBlock, {});\r\n    }\r\n}\r\n","import { BasePage } from '../../../components/base-page';\r\nimport { GoTrialButtonWrapper } from '../../../components/go-trial-button';\r\nimport { Products } from '../../../components/our-products';\r\nimport { runOnceOnIntersect } from '../../../util/run-once-on-intersect';\r\nimport { runWithNewTask } from '../../../util/run-with-new-task';\r\n\r\nimport { BookDemo } from './book-demo';\r\nimport { Examples } from './examples';\r\nimport { Features } from './features';\r\nimport { FirstScreen } from './first-screen';\r\nimport { HowTo } from './how-to';\r\n\r\nimport '../../../components/demo-wrapper';\r\nimport '../../../components/more-link';\r\nimport './styles/index.css';\r\n\r\nclass OnlineDigitalBrochureDemoPage extends BasePage {\r\n    protected blockName(): string {\r\n        return 'S-Brochure';\r\n    }\r\n\r\n    onDescribe() {\r\n        super.onDescribe();\r\n\r\n        void runWithNewTask(() => this.describeBlock('first-screen', FirstScreen, {}));\r\n\r\n        void runWithNewTask(() => this.describeBlock('how-to', HowTo, {}));\r\n\r\n        if (this.element('book-demo')) {\r\n            void runWithNewTask(() => this.describeBlock('book-demo', BookDemo, {}));\r\n        }\r\n\r\n        void runWithNewTask(() => this.describeBlock('features', Features, {}));\r\n\r\n        void runWithNewTask(async () => {\r\n            const { BrandsBlock } = await import('../../../components/brands-block');\r\n            this.describeBlock('brands', BrandsBlock, {});\r\n        });\r\n\r\n        void runWithNewTask(() => {\r\n            const faqElementName = 'faq';\r\n\r\n            runOnceOnIntersect({\r\n                el: this.ensureElement(faqElementName),\r\n                fn: async () => {\r\n                    const { FAQWrapper } = await import('../../../components/faq');\r\n                    this.describeBlock(faqElementName, FAQWrapper(`${this.blockName()}-FAQ`), {});\r\n                },\r\n            });\r\n        });\r\n\r\n        void runWithNewTask(() =>\r\n            this.describeBlock('call-to-action', GoTrialButtonWrapper(`${this.blockName()}-Call-To-Action`), {\r\n                position: 'bottom',\r\n            }),\r\n        );\r\n\r\n        void runWithNewTask(() => this.describeBlock('products', Products, {}));\r\n\r\n        const examplesElementName = 'examples';\r\n\r\n        runOnceOnIntersect({\r\n            el: this.ensureElement(examplesElementName),\r\n            fn: () => {\r\n                this.describeBlock(examplesElementName, Examples, {});\r\n            },\r\n            rootMargin: '300px',\r\n        });\r\n\r\n        const productsElementName = 'products';\r\n\r\n        runOnceOnIntersect({\r\n            el: this.ensureElement(productsElementName),\r\n            fn: () => this.applyModifiers({ 'product-waves-shown': true }),\r\n            rootMargin: '200px',\r\n        });\r\n    }\r\n}\r\n\r\nexport { OnlineDigitalBrochureDemoPage 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","export const siteAntispamService = {\r\n    getUserDetachedContext: () => window.__flippingbook_user_detached_context__,\r\n};\r\n","import { Parametrized } from '@flippingbook/web.utils/dist/service';\r\n\r\nexport class SingleElementIntersector extends Parametrized<SingleElementIntersector.Params> {\r\n    private intersector: IntersectionObserver;\r\n\r\n    private observerCallback = (entries: IntersectionObserverEntry[], observer: IntersectionObserver) =>\r\n        entries.forEach((entry) => this.params.onIntersectionChange(entry, observer));\r\n\r\n    constructor(params: SingleElementIntersector.Params) {\r\n        super(params);\r\n        this.intersector = new IntersectionObserver(this.observerCallback, params);\r\n    }\r\n\r\n    observe() {\r\n        this.intersector.observe(this.params.el);\r\n    }\r\n\r\n    unobserve() {\r\n        this.intersector.unobserve(this.params.el);\r\n    }\r\n}\r\n\r\nexport namespace SingleElementIntersector {\r\n    export interface Params extends IntersectionObserverInit {\r\n        el: HTMLElement;\r\n        onIntersectionChange: (entry: IntersectionObserverEntry, observer: IntersectionObserver) => void;\r\n    }\r\n}\r\n","import 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","function waitForImageLoad(image: HTMLImageElement) {\r\n    return new Promise<void>((resolve) => {\r\n        if (image.complete) {\r\n            resolve();\r\n            return;\r\n        }\r\n\r\n        const handleImageLoad = () => {\r\n            image.removeEventListener('load', handleImageLoad);\r\n            resolve();\r\n        };\r\n\r\n        image.addEventListener('load', handleImageLoad);\r\n    });\r\n}\r\n\r\nfunction getImageLoadList(params: { container?: HTMLElement; classNames: string[] }) {\r\n    const selector = params.classNames.map((c) => `.${c}`).join(', ');\r\n    const container = params.container || document;\r\n    const imgElements = Array.from(container.querySelectorAll<HTMLImageElement>(selector));\r\n\r\n    return imgElements.map((imgElement) => waitForImageLoad(imgElement));\r\n}\r\n\r\nexport function waitForAllImagesLoad(params: { container?: HTMLElement; classNames: string[] }) {\r\n    const loadList = getImageLoadList(params);\r\n    return Promise.all(loadList);\r\n}\r\n\r\nexport function waitForAnyImagesLoad(params: { container?: HTMLElement; classNames: string[] }) {\r\n    const loadList = getImageLoadList(params);\r\n    return Promise.race(loadList);\r\n}\r\n\r\nexport function setLoadedClassForImage() {\r\n    const imgElements = Array.from(document.querySelectorAll<HTMLImageElement>('img'));\r\n    const loadedClassName = 'loaded';\r\n\r\n    imgElements.forEach((imgElement) => {\r\n        if (imgElement.complete) {\r\n            imgElement.classList.add(loadedClassName);\r\n            return;\r\n        }\r\n\r\n        const handleImageLoad = () => {\r\n            imgElement.removeEventListener('load', handleImageLoad);\r\n            imgElement.classList.add(loadedClassName);\r\n        };\r\n\r\n        imgElement.addEventListener('load', handleImageLoad);\r\n    });\r\n}\r\n","import { localStorage, sessionStorage } from '@flippingbook/web.utils/dist/storage';\r\n\r\nexport function isLoggedIn() {\r\n    return Boolean(\r\n        (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","import { SingleElementIntersector } from '../services/intersector';\r\n\r\nimport { runWithNewTask } from './run-with-new-task';\r\n\r\nconst blockThreshold = [0, 1];\r\n\r\ninterface Params {\r\n    el: HTMLElement;\r\n    fn: () => void | Promise<void>;\r\n    threshold?: number | number[];\r\n    rootMargin?: string;\r\n}\r\n\r\nexport function runOnceOnIntersect(params: Params) {\r\n    const { el, fn, threshold, rootMargin = '0px' } = params;\r\n\r\n    const intersector = new SingleElementIntersector({\r\n        onIntersectionChange: (entry: IntersectionObserverEntry) => {\r\n            if (entry.isIntersecting) {\r\n                intersector.unobserve();\r\n\r\n                void runWithNewTask(fn);\r\n            }\r\n        },\r\n        threshold: threshold || blockThreshold,\r\n        el,\r\n        rootMargin,\r\n    });\r\n    intersector.observe();\r\n}\r\n","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 = 562;","__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\t562: 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\t562: 0,\n\t4514: 0,\n\t5949: 0,\n\t5908: 0,\n\t2577: 0,\n\t8393: 0,\n\t702: 0,\n\t790: 0,\n\t1266: 0,\n\t2688: 0,\n\t3083: 0,\n\t3171: 0,\n\t5464: 0,\n\t5545: 0,\n\t5552: 0,\n\t7926: 0,\n\t8321: 0,\n\t8409: 0,\n\t9194: 0,\n\t356: 0,\n\t2737: 0,\n\t3213: 0,\n\t5118: 0,\n\t5594: 0,\n\t7499: 0,\n\t9880: 0,\n\t9928: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(59(08|49)|9(194|928|974)|1597|2577|3213|4514|8393)$/.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,8393,9194,3213,9928,8351,8403,4829], () => (__webpack_require__(84122)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","GoTrialButton","B","direction","this","el","getAttribute","product","sendAnalytics","send","params","position","onLinkClick","async","ev","preventDefault","stopPropagation","newLink","loggedIn","baseRegisterUrl","resolve","subsystem","service","registerUrl","getUserDetachedContext","window","encodeURIComponent","location","origin","getLink","url","setTimeout","href","onDescribe","addEventListener","GoTrialButtonWrapper","blockName","describeElement","HiddenElement","shown","show","applyModifiers","onShow","modifiers","super","AnimatedHiddenElement","animated","reducedMotionMode","matchMedia","matches","onIntersectionChange","entry","threshold","treshold","observe","onTransitionEnd","isIntersecting","intersectionRatio","onShown","onHidden","animate","onScrollIn","boundingClientRect","top","onScrollOut","onAnimate","Product","activateScale","scaled","removeEventListener","Products","describeAllElements","ctaAnalytics","CalendlyButton","CalendlyButtonFBO","GenericLoadableImage","imageLoaded","onLoad","complete","forceCheckCompletion","LoadableImage","BookDemo","runIntersector","ensureElement","fn","AutoScroll","Parametrized","prefersReducedMotion","activate","disable","deactivate","intervalId","setInterval","scrollAction","interval","clearInterval","undefined","reactivate","HorizonScrollBlocker","constructor","firstClientX","clientX","touchStart","e","touches","preventTouch","Math","abs","passive","SwipeWatcher","startX","startY","handleTouchStart","changedTouches","screenX","screenY","handleTouchEnd","diffX","diffY","ratioX","ratioY","onRight","onLeft","onDown","onUp","eventParams","ActiveDemoIndex","Listenable","value","get","set","notify","Demo","relativeOffset","offsetLeft","width","getBoundingClientRect","DemoGroups","offset","element","normalizeOffset","absValue","centerDemosElementWidth","centerDemosElement","leftDemos","getOffset","setOffset","style","transform","flikerLayout","Promise","requestAnimationFrame","onMouseEnter","onMouseLeave","DisablableElement","setDisabled","disabled","setAttribute","removeAttribute","Dot","options","index","onClick","onTouch","DemoIndicator","dotsContainer","dots","activeDotIndex","createDotElement","button","document","createElement","className","elementClass","getCount","length","setCount","count","innerHTML","i","dotElement","appendChild","onDotClick","onDotTouch","getActiveDotIndex","setActiveDot","dotIndex","oldActiveDot","HorizonScroller","animationId","setAnimationId","id","stopScrollAnimation","cancelAnimationFrame","scrollTo","to","from","startTime","lastTime","fullOffsetAbs","getNewOffset","progress","scrollByStep","now","ANIMATION_INTERVAL","timeProgress","min","timeProgressWithTimeFunction","t","sin","PI","newOffset","VisibleDemosCount","ListenableParametrized","getVisibleDemosCount","threeDemoLayoutTestElement","clientWidth","twoDemoLayoutTestElement","ResizeObserver","demoContainer","LeftDemos","Examples","autoScroll","scrollToLeftByStep","demos","demoGroups","horizonScroller","visibleDemosCount","activeDemoIndex","describeBlock","newDotIndex","step","updateDotCount","dotsCount","ceil","updateActiveDot","floor","onVisibleDemoCountChange","normalizeDemoIndexByVisibleCount","updateCenterPosition","normalizeIndex","maxDemoIndex","remainder","getOffsetToCenterDemosByIndex","middleDemo","leftDemo","leftDemoOffset","rightDemo","offsetToCenterDemos","delta","newActiveDemoIndex","maxDotIndex","toOffset","scrollToRightByStep","placeDemoPreviewImages","showDemoPreviewImages","container","classNames","demoGroupsWrapperElement","listen","onIntersected","onNotIntersected","isIntersected","visibilityState","LayoutChecker","isIn","layout","mobileLayoutChecker","tabletLayoutChecker","FeaturePane","onResizeThrottled","alignmentTitlesHeight","titleElements","allElements","onDesktopLineSize","Number","dataset","lineSize","isMobile","resetTitlesHeight","isTablet","recalculateTitlesHeight","forEach","titleElement","height","heights","getMaxTitleHeightsByLineSize","setTitlesHeight","elementHeights","map","linesCount","Array","_","startIndex","endIndex","max","slice","Features","FirstScreen","HowToBaseBlock","RomanStraightDropCap","HowToBlock","HowTo","OnlineDigitalBrochureDemoPage","BrandsBlock","FAQWrapper","examplesElementName","rootMargin","release","SiteAnalyticsService","gaEvent","eventName","properties","area","event","eventData","gtagEventParams","CTAAnalyticsService","analytics","category","button_location","siteAntispamService","__flippingbook_user_detached_context__","SingleElementIntersector","observerCallback","entries","observer","intersector","IntersectionObserver","unobserve","currentLayout","testarea","getElementById","getElementsByTagName","reduce","acc","substring","getLoginConsumer","Mediaparts","Bootstrap","Params","loginConsumer","getImageLoadList","selector","c","join","querySelectorAll","imgElement","waitForImageLoad","image","handleImageLoad","waitForAllImagesLoad","loadList","all","setLoadedClassForImage","imgElements","loadedClassName","classList","add","isLoggedIn","Boolean","flippingbook","user","isVisible","elem","offsetWidth","offsetHeight","getClientRects","blockThreshold","runOnceOnIntersect","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","call","m","amdO","O","result","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","getPrototypeOf","obj","mode","then","ns","create","def","current","indexOf","getOwnPropertyNames","definition","o","defineProperty","enumerable","f","chunkId","promises","u","miniCssF","g","globalThis","Function","prop","prototype","hasOwnProperty","l","done","push","script","needAttach","scripts","s","charset","timeout","nc","src","onScriptComplete","prev","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","Symbol","toStringTag","nmd","paths","children","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","test","promise","error","realSrc","message","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}