flipbookengine 0.6.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -3
- package/README.md +150 -11
- package/dist/components/App.d.ts +19 -0
- package/dist/components/HotspotLayer.d.ts +14 -0
- package/dist/components/NotesPanel.d.ts +14 -0
- package/dist/components/PluginPanels.d.ts +5 -0
- package/dist/components/SearchPanel.d.ts +11 -0
- package/dist/components/Toolbar.d.ts +6 -0
- package/dist/components/Viewer.d.ts +6 -0
- package/dist/core/LayoutManager.d.ts +1 -1
- package/dist/core/PdfRenderer.d.ts +23 -2
- package/dist/core-entry.d.ts +13 -0
- package/dist/core.d.ts +1 -0
- package/dist/embed.d.ts +80 -0
- package/dist/engine-Dt2Fn6O-.js +4060 -0
- package/dist/engine-Dt2Fn6O-.js.map +1 -0
- package/dist/engine.d.ts +111 -1
- package/dist/feature-Cicli9ie.js +17 -0
- package/dist/feature-Cicli9ie.js.map +1 -0
- package/dist/flipbook-engine.core.js +8 -0
- package/dist/flipbook-engine.core.js.map +1 -0
- package/dist/flipbook-engine.css +1 -1
- package/dist/flipbook-engine.iife.js +56 -47
- package/dist/flipbook-engine.iife.js.map +1 -1
- package/dist/flipbook-engine.js +9 -4
- package/dist/flipbook-engine.js.map +1 -1
- package/dist/flipbook-engine.plugins-annotations.js +14 -0
- package/dist/flipbook-engine.plugins-annotations.js.map +1 -0
- package/dist/flipbook-engine.plugins-bookmarks.js +16 -0
- package/dist/flipbook-engine.plugins-bookmarks.js.map +1 -0
- package/dist/flipbook-engine.plugins-deep-link.js +14 -0
- package/dist/flipbook-engine.plugins-deep-link.js.map +1 -0
- package/dist/flipbook-engine.plugins-hotspots.js +15 -0
- package/dist/flipbook-engine.plugins-hotspots.js.map +1 -0
- package/dist/flipbook-engine.plugins-notes.js +16 -0
- package/dist/flipbook-engine.plugins-notes.js.map +1 -0
- package/dist/flipbook-engine.plugins-search.js +15 -0
- package/dist/flipbook-engine.plugins-search.js.map +1 -0
- package/dist/flipbook-engine.plugins-share.js +13 -0
- package/dist/flipbook-engine.plugins-share.js.map +1 -0
- package/dist/flipbook-engine.plugins-toc.js +14 -0
- package/dist/flipbook-engine.plugins-toc.js.map +1 -0
- package/dist/flipbook-engine.plugins.js +5 -0
- package/dist/flipbook-engine.plugins.js.map +1 -0
- package/dist/flipbook-engine.react.js +1 -1
- package/dist/flipbook-engine.vue.js +1 -1
- package/dist/i18n/locales/en.d.ts +17 -0
- package/dist/i18n/locales/tr.d.ts +17 -0
- package/dist/i18n/service.d.ts +51 -0
- package/dist/index-BhTR2SK6.js +366 -0
- package/dist/index-BhTR2SK6.js.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/model/annotations.d.ts +14 -0
- package/dist/model/hotspots.d.ts +40 -0
- package/dist/model/pages.d.ts +2 -0
- package/dist/model/search.d.ts +25 -0
- package/dist/plugins/annotations.d.ts +4 -0
- package/dist/plugins/bookmarks.d.ts +4 -0
- package/dist/plugins/deep-link.d.ts +4 -0
- package/dist/plugins/feature.d.ts +5 -0
- package/dist/plugins/hotspots.d.ts +4 -0
- package/dist/plugins/index.d.ts +65 -0
- package/dist/plugins/notes.d.ts +4 -0
- package/dist/plugins/search.d.ts +4 -0
- package/dist/plugins/share.d.ts +4 -0
- package/dist/plugins/toc.d.ts +4 -0
- package/dist/plugins-annotations.d.ts +1 -0
- package/dist/plugins-bookmarks.d.ts +1 -0
- package/dist/plugins-deep-link.d.ts +1 -0
- package/dist/plugins-hotspots.d.ts +1 -0
- package/dist/plugins-notes.d.ts +1 -0
- package/dist/plugins-search.d.ts +1 -0
- package/dist/plugins-share.d.ts +1 -0
- package/dist/plugins-toc.d.ts +1 -0
- package/dist/plugins.d.ts +1 -0
- package/dist/state/store.d.ts +19 -5
- package/dist/theme/theme.d.ts +16 -0
- package/dist/vue/index.d.ts +1 -1
- package/docs/api-reference.md +206 -0
- package/docs/frameworks.md +73 -0
- package/docs/getting-started.md +128 -0
- package/docs/i18n.md +47 -0
- package/docs/migration-0.4.0.md +24 -0
- package/docs/migration-0.5.0.md +25 -0
- package/docs/migration-1.0.0.md +59 -0
- package/docs/plugin-architecture.md +103 -0
- package/docs/release-checklist.md +37 -0
- package/docs/theming.md +61 -0
- package/package.json +165 -114
- package/dist/engine-MdZzt6R9.js +0 -3474
- package/dist/engine-MdZzt6R9.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-Dt2Fn6O-.js","sources":["../node_modules/@serenity-is/domwise/dist/index.js","../src/i18n/locales/en.ts","../src/i18n/locales/tr.ts","../src/i18n/service.ts","../src/components/Toolbar.tsx","../src/components/Thumbnails.tsx","../src/components/TableOfContents.tsx","../src/components/NotesPanel.tsx","../src/components/HotspotLayer.tsx","../src/components/Viewer.tsx","../src/components/NavigationArrows.tsx","../src/components/SearchPanel.tsx","../src/components/PluginPanels.tsx","../src/components/App.tsx","../node_modules/page-flip/dist/js/page-flip.browser.js","../src/adapters/PageFlipAdapter.ts","../src/core/LayoutManager.ts","../src/core/InteractionManager.ts","../src/model/toc.ts","../src/state/store.ts","../src/model/pages.ts","../src/theme/theme.ts","../src/core/PdfRenderCache.ts","../src/core/PdfRenderer.ts","../src/embed.ts","../src/engine.ts"],"sourcesContent":["// src/bind-this.ts\nvar hasOwnProperty = Object.hasOwnProperty;\nvar bindThisHandler = {\n get: (target, property) => {\n if (hasOwnProperty.call(target, property)) {\n return target[property];\n }\n const m2 = target[property];\n if (typeof m2 === \"function\") {\n return target[property] = m2.bind(target);\n }\n return m2;\n }\n};\nvar bindThisProxyMap = /* @__PURE__ */ new WeakMap();\nfunction bindThis(obj) {\n let proxy = bindThisProxyMap.get(obj);\n if (!proxy) {\n proxy = new Proxy(obj, bindThisHandler);\n bindThisProxyMap.set(obj, proxy);\n }\n return proxy;\n}\n\n// src/prop-hook.ts\nvar initPropHookSymbol = /* @__PURE__ */ Symbol.for(\"Serenity.initPropHook\");\n\n// src/util.ts\nfunction isElement(val) {\n return !!(val && typeof val.nodeType === \"number\");\n}\nfunction isString(val) {\n return typeof val === \"string\";\n}\nfunction isNumber(val) {\n return typeof val === \"number\";\n}\nfunction isObject(val) {\n return typeof val === \"object\" && val !== null;\n}\nfunction isComponentClass(val) {\n return !!(val && val.isComponent);\n}\nfunction isArrayLike(val) {\n return isObject(val) && typeof val.length === \"number\" && typeof val.nodeType !== \"number\";\n}\nfunction isPropHook(value) {\n return typeof value === \"function\" && typeof value[initPropHookSymbol] === \"function\";\n}\nfunction isVisibleChild(val) {\n return val != null && typeof val !== \"boolean\";\n}\n\n// src/class-name.ts\nfunction className(value) {\n if (Array.isArray(value)) {\n return value.map(className).filter(Boolean).join(\" \");\n } else if (isObject(value)) {\n if (Symbol.iterator in value) {\n return className(Array.from(value));\n }\n return Object.keys(value).filter((k) => value[k]).join(\" \");\n } else if (isVisibleChild(value)) {\n return \"\" + value;\n } else {\n return \"\";\n }\n}\n\n// src/ref.ts\nfunction createRef() {\n return Object.seal({ current: null });\n}\nfunction isRefObject(maybeRef) {\n return maybeRef != null && typeof maybeRef === \"object\" && \"current\" in maybeRef;\n}\nfunction setRef(ref, current) {\n if (isRefObject(ref)) {\n ref.current = current;\n } else if (typeof ref === \"function\") {\n ref(current);\n }\n}\n\n// src/component.ts\nvar Component = class {\n static {\n this.isComponent = true;\n }\n constructor(props) {\n this.props = props;\n }\n render() {\n return null;\n }\n};\nfunction initComponentClass(Class, attr, children) {\n attr = { ...attr, children };\n const instance = new Class(attr);\n const node = instance.render();\n if (\"ref\" in attr) {\n setRef(attr.ref, instance);\n }\n return node;\n}\n\n// src/mathml-consts.ts\nvar MathMLNamespace = \"http://www.w3.org/1998/Math/MathML\";\nvar mathMLOnlyTags = /* @__PURE__ */ new Set([\"math\", \"annotation\", \"annotation-xml\", \"maction\", \"merror\", \"mfrac\", \"mi\", \"mmultiscripts\", \"mn\", \"mo\", \"mover\", \"mpadded\", \"mphantom\", \"mprescripts\", \"mroot\", \"mrow\", \"ms\", \"mspace\", \"msqrt\", \"mstyle\", \"msub\", \"msubsup\", \"msup\", \"mtable\", \"mtd\", \"mtext\", \"mtr\", \"munder\", \"munderover\", \"semantics\", \"menclose\", \"mfenced\"]);\n\n// src/svg-consts.ts\nvar svgOnlyTags = /* @__PURE__ */ new Set([\n // \"a\",\n \"animate\",\n \"animateMotion\",\n \"animateTransform\",\n \"circle\",\n \"clipPath\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"filter\",\n \"foreignObject\",\n \"g\",\n \"image\",\n \"line\",\n \"linearGradient\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"mpath\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"radialGradient\",\n \"rect\",\n // \"script\",\n \"set\",\n \"stop\",\n // \"style\",\n \"svg\",\n \"switch\",\n \"symbol\",\n \"text\",\n \"textPath\",\n // \"title\",\n \"tref\",\n \"tspan\",\n \"use\",\n \"view\"\n]);\nvar nonPresentationSVGAttributes = /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;\nvar SVGNamespace = \"http://www.w3.org/2000/svg\";\n\n// src/in-namespace-uri.ts\nvar jsxNamespaceURISymbol = /* @__PURE__ */ Symbol.for(\"Serenity.jsxNamespaceURI\");\nfunction currentNamespaceURI(value) {\n const current = globalThis[jsxNamespaceURISymbol];\n if (!arguments.length) {\n return current;\n }\n globalThis[jsxNamespaceURISymbol] = value;\n return current;\n}\nfunction inNamespaceURI(namespaceURI, children) {\n const prev = currentNamespaceURI(namespaceURI);\n let result;\n try {\n result = children();\n } finally {\n currentNamespaceURI(prev);\n }\n return result;\n}\nfunction inSVGNamespace(fn) {\n return inNamespaceURI(SVGNamespace, fn);\n}\nfunction inMathMLNamespace(fn) {\n return inNamespaceURI(MathMLNamespace, fn);\n}\nfunction inHTMLNamespace(fn) {\n return inNamespaceURI(null, fn);\n}\n\n// src/shadow.ts\nvar jsxTypeKeySymbol = /* @__PURE__ */ Symbol.for(\"Serenity.jsxTypeKey\");\nvar shadowRootKey = \"ShadowRoot\";\nfunction ShadowRootNode({\n children,\n ref,\n ...attr\n}) {\n return {\n [jsxTypeKeySymbol]: shadowRootKey,\n ref,\n attr,\n children\n };\n}\nfunction isShadowRoot(el) {\n return el != null && el[jsxTypeKeySymbol] === shadowRootKey;\n}\n\n// src/disposing-listener.ts\nvar disposingListenersSymbol = /* @__PURE__ */ Symbol.for(\"Serenity.disposingListeners\");\nvar lifecycleRootSymbol = /* @__PURE__ */ Symbol.for(\"Serenity.lifecycleRoot\");\nfunction getDisposingListeners() {\n return globalThis[disposingListenersSymbol] ||= /* @__PURE__ */ new WeakMap();\n}\nfunction disposingEventListener(ev) {\n if (ev && ev.target && (!ev.currentTarget || ev.currentTarget === ev.target))\n invokeDisposingListeners(ev?.target);\n}\nfunction dispatchDisposingEvent(target, opt) {\n if (!target || typeof CustomEvent !== \"function\")\n return;\n const event = new CustomEvent(\"disposing\", {\n bubbles: opt?.bubbles ?? false,\n cancelable: opt?.cancelable ?? false\n });\n target.dispatchEvent(event);\n}\nfunction invokeDisposingListeners(node, opt) {\n if (!node)\n return;\n const disposingListeners = getDisposingListeners();\n function invokeFor(el) {\n const listeners = disposingListeners.get(el);\n if (!listeners)\n return;\n disposingListeners.delete(el);\n el.removeEventListener(\"disposing\", disposingEventListener);\n for (const disposer of listeners) {\n try {\n disposer.callback(el);\n } catch {\n }\n }\n }\n if (opt?.descendants && node instanceof Element && node.hasChildNodes()) {\n const descendants = [];\n const iterator = document.createNodeIterator(\n node,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT\n );\n let currentNode;\n while (currentNode = iterator.nextNode()) {\n if (currentNode !== node) {\n descendants.push(currentNode);\n }\n }\n for (let i2 = 0; i2 < descendants.length; i2++) {\n invokeFor(descendants[i2]);\n }\n }\n if (!opt?.excludeSelf) {\n invokeFor(node);\n }\n}\nfunction addDisposingListener(target, handler, regKey) {\n if (!target || !handler)\n return target;\n const disposingListeners = getDisposingListeners();\n let listeners = disposingListeners.get(target);\n if (!listeners) {\n if (typeof target.addEventListener !== \"function\")\n return target;\n disposingListeners.set(target, listeners = [{\n callback: handler,\n regKey\n }]);\n target.addEventListener(\"disposing\", disposingEventListener, { once: true });\n return target;\n }\n const existing = listeners.find((x2) => x2.callback === handler);\n if (existing) {\n if (existing.regKey && regKey && existing.regKey !== regKey) {\n throw new Error(\"A disposing listener with the same callback but different regKey is already registered on the target element.\");\n }\n if (regKey && !existing.regKey) {\n existing.regKey = regKey;\n }\n return target;\n }\n listeners.push({ callback: handler, regKey });\n return target;\n}\nfunction removeDisposingListener(target, handler, regKey) {\n if (!target || !handler && !regKey)\n return target;\n const disposingListeners = getDisposingListeners();\n const listeners = disposingListeners.get(target);\n if (listeners) {\n for (let index = listeners.length - 1; index >= 0; index--) {\n const listener = listeners[index];\n if (regKey && listener.regKey === regKey || handler && handler === listener.callback) {\n listeners.splice(index, 1);\n }\n }\n if (listeners.length === 0) {\n disposingListeners.delete(target);\n if (typeof target.removeEventListener === \"function\") {\n target.removeEventListener(\"disposing\", disposingEventListener);\n }\n }\n }\n return target;\n}\nfunction currentLifecycleRoot(...args) {\n if (args.length > 0) {\n const prev = globalThis[lifecycleRootSymbol] || null;\n globalThis[lifecycleRootSymbol] = args[0] || null;\n return prev;\n }\n return globalThis[lifecycleRootSymbol] || null;\n}\n\n// src/signal-util.ts\nfunction isSignalLike(obj) {\n return obj != null && typeof obj === \"object\" && typeof obj.subscribe === \"function\" && typeof obj.peek === \"function\" && \"value\" in obj;\n}\nvar SignalObserveArgsImpl = class {\n #dispose;\n #node;\n constructor(signal2, lifecycleRoot, lifecycleNode) {\n this.signal = signal2;\n this.isInitial = true;\n this.hasChanged = false;\n this.lifecycleRoot = lifecycleRoot;\n this.#node = lifecycleNode;\n }\n get lifecycleNode() {\n return this.#node;\n }\n #delDispose() {\n removeDisposingListener(this.#node, this.effectDisposer);\n removeDisposingListener(this.#node, this.signal?.derivedDisposer);\n }\n #addDispose() {\n addDisposingListener(this.#node, this.effectDisposer);\n addDisposingListener(this.#node, this.signal?.derivedDisposer);\n }\n get effectDisposer() {\n return this.#dispose;\n }\n set effectDisposer(value) {\n this.#delDispose();\n this.#dispose = value;\n this.#addDispose();\n }\n set lifecycleNode(value) {\n if (value !== this.#node) {\n this.#delDispose();\n this.#node = value;\n this.#addDispose();\n }\n }\n};\nfunction observeSignal(signal2, callback, opt) {\n const lifecycleRoot = opt?.useLifecycleRoot ? currentLifecycleRoot() : void 0;\n const args = new SignalObserveArgsImpl(signal2, lifecycleRoot, opt?.lifecycleNode);\n const disposer = args.signal.subscribe(function(value) {\n args.newValue = value;\n if (args.isInitial && this?.dispose) {\n args.effectDisposer = this.dispose.bind(this);\n }\n args.hasChanged = !args.isInitial && args.prevValue !== args.newValue;\n try {\n callback(args);\n } finally {\n args.prevValue = args.newValue;\n args.isInitial = false;\n }\n });\n if (disposer && !args.effectDisposer) {\n args.effectDisposer = disposer;\n }\n return args.effectDisposer;\n}\nfunction derivedSignal(input, fn) {\n if (!isSignalLike(input)) {\n throw new Error(\"Input must be a SignalLike\");\n }\n const callback = () => fn(input.value);\n if (typeof input.constructor === \"function\" && input.constructor !== {}.constructor) {\n try {\n let derived = new input.constructor(callback);\n let disposer2;\n if (isSignalLike(derived)) {\n if (derived.peek() === callback) {\n disposer2 = input.subscribe(() => {\n derived.value = callback();\n });\n }\n if (disposer2) {\n derived.derivedDisposer = function() {\n disposer2();\n delete derived.derivedDisposer;\n };\n }\n return derived;\n }\n } catch (error) {\n }\n }\n let primitive;\n const disposer = input.subscribe(() => {\n if (!primitive) {\n primitive = new PrimitiveComputed(callback);\n return;\n }\n primitive.update();\n });\n if (disposer) {\n primitive.derivedDisposer = function() {\n disposer();\n delete primitive.derivedDisposer;\n };\n }\n return primitive;\n}\nvar PrimitiveComputed = class {\n #subs = /* @__PURE__ */ new Set();\n #value;\n #fn;\n constructor(fn) {\n this.#fn = fn;\n this.update(true);\n }\n update(force) {\n const newValue = this.#fn();\n if (newValue !== this.#value || force) {\n this.#value = newValue;\n this.#subs.forEach((sub) => sub(newValue));\n }\n }\n subscribe(callback) {\n callback(this.#value);\n this.#subs.add(callback);\n return () => this.#subs.delete(callback);\n }\n peek() {\n return this.#value;\n }\n get value() {\n return this.#value;\n }\n};\n\n// src/jsx-append-children.ts\nfunction appendChild(parent, child) {\n if (parent instanceof window.HTMLTemplateElement) {\n parent.content.appendChild(child);\n } else {\n parent.appendChild(child);\n }\n}\nvar fragmentPlaceholderIdx = 0;\nvar placeholderPrefix = \"__domwisefrag_\";\nfunction isPlaceholder(node) {\n return node instanceof Comment && node.data.startsWith(placeholderPrefix);\n}\nfunction isFragmentWithPlaceholder(node) {\n return node instanceof DocumentFragment && isPlaceholder(node.firstChild);\n}\nfunction replaceNode(oldNode, newNode) {\n if (typeof oldNode.replaceWith === \"function\")\n oldNode.replaceWith(newNode);\n else\n oldNode.parentNode?.replaceChild(newNode, oldNode);\n}\nfunction wrapAsNode(value) {\n if (value instanceof DocumentFragment) {\n ++fragmentPlaceholderIdx;\n value.prepend(document.createComment(placeholderPrefix + fragmentPlaceholderIdx));\n value.append(document.createComment(placeholderPrefix + fragmentPlaceholderIdx));\n return value;\n }\n if (value instanceof Node) {\n return value;\n }\n if (!isVisibleChild(value)) {\n return document.createComment(\"\");\n }\n return document.createTextNode(value);\n}\nfunction appendChildrenWithSignal(parent, signal2) {\n let prevNode;\n observeSignal(signal2, (args) => {\n if (args.isInitial) {\n prevNode = wrapAsNode(args.newValue);\n let prevNodeNew2 = isFragmentWithPlaceholder(prevNode) ? prevNode.firstChild : prevNode;\n appendChildren(parent, prevNode);\n args.lifecycleNode = (prevNode = prevNodeNew2) ?? parent;\n return;\n }\n if (!args.hasChanged) {\n return;\n }\n const newNode = wrapAsNode(args.newValue);\n if (isPlaceholder(prevNode)) {\n let n2;\n while (n2 = prevNode.nextSibling) {\n n2.parentNode?.removeChild(n2);\n if (n2 instanceof Comment && n2.data === prevNode.data) {\n break;\n }\n }\n }\n let prevNodeNew = isFragmentWithPlaceholder(newNode) ? newNode.firstChild : newNode;\n replaceNode(prevNode, newNode);\n args.lifecycleNode = (prevNode = prevNodeNew) ?? parent;\n });\n}\nfunction appendChildren(parent, children) {\n if (!isVisibleChild(children)) return;\n if (isArrayLike(children)) {\n for (const child of [...children]) {\n appendChildren(parent, child);\n }\n } else if (isString(children) || isNumber(children)) {\n appendChild(parent, document.createTextNode(children));\n } else if (isElement(children)) {\n appendChild(parent, children);\n } else if (isShadowRoot(children)) {\n const shadowRoot = parent.attachShadow(children.attr);\n appendChildren(shadowRoot, children.children);\n setRef(children.ref, shadowRoot);\n } else if (isSignalLike(children)) {\n appendChildrenWithSignal(parent, children);\n }\n}\n\n// src/jsx-assign-class.ts\nfunction unsignalizePrevClass(prev) {\n if (prev == null)\n return prev;\n if (isArrayLike(prev)) {\n prev = Array.from(prev).map((item) => {\n if (isSignalLike(item))\n return item.peek();\n return item;\n });\n } else if (isObject(prev)) {\n prev = { ...prev };\n Object.entries(prev).forEach(([key, val]) => {\n if (isSignalLike(val))\n prev[key] = val.peek();\n });\n }\n return prev;\n}\nfunction clearPrevClass(node, prev) {\n if (prev == null || prev === false || prev === true)\n return;\n prev = unsignalizePrevClass(prev);\n const prevClassNames = (className(prev) ?? \"\").split(\" \");\n for (let cls of prevClassNames) {\n if (cls) {\n node.classList.remove(cls);\n }\n }\n}\nfunction assignClass(node, value, prev) {\n if (value == null || value === false) {\n clearPrevClass(node, prev);\n return;\n }\n prev = unsignalizePrevClass(prev);\n if (isArrayLike(value)) {\n value = Array.from(value).map((x2) => {\n let val = x2;\n if (isSignalLike(x2)) {\n observeSignal(x2, (args) => {\n if (args.isInitial) {\n val = args.newValue;\n return;\n }\n applyClassName(node, args.newValue, args.prevValue);\n }, {\n lifecycleNode: node\n });\n }\n return val;\n });\n } else if (isObject(value)) {\n value = { ...value };\n Object.entries(value).forEach(([key, val]) => {\n if (isSignalLike(val)) {\n observeSignal(val, (args) => {\n if (args.isInitial) {\n value[key] = args.newValue;\n return;\n }\n applyClassName(node, Boolean(args.newValue) && key, Boolean(args.prevValue) && key);\n }, {\n lifecycleNode: node\n });\n }\n });\n }\n applyClassName(node, value, prev);\n}\nfunction applyClassName(node, value, prev) {\n const newList = (className(value) ?? \"\").split(\" \");\n if (prev) {\n const prevList = (className(prev) ?? \"\").split(\" \");\n for (let cls of prevList) {\n if (cls && !newList.includes(cls)) {\n node.classList.remove(cls);\n }\n }\n }\n for (let cls of newList) {\n cls && node.classList.add(cls);\n }\n}\n\n// src/jsx-assign-style.ts\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\nvar isUnitlessNumber = /* @__PURE__ */ (() => {\n let rec = {\n animationIterationCount: 0,\n borderImageOutset: 0,\n borderImageSlice: 0,\n borderImageWidth: 0,\n boxFlex: 0,\n boxFlexGroup: 0,\n boxOrdinalGroup: 0,\n columnCount: 0,\n columns: 0,\n flex: 0,\n flexGrow: 0,\n flexPositive: 0,\n flexShrink: 0,\n flexNegative: 0,\n flexOrder: 0,\n gridArea: 0,\n gridRow: 0,\n gridRowEnd: 0,\n gridRowSpan: 0,\n gridRowStart: 0,\n gridColumn: 0,\n gridColumnEnd: 0,\n gridColumnSpan: 0,\n gridColumnStart: 0,\n fontWeight: 0,\n lineClamp: 0,\n lineHeight: 0,\n opacity: 0,\n order: 0,\n orphans: 0,\n tabSize: 0,\n widows: 0,\n zIndex: 0,\n zoom: 0,\n // SVG-related properties\n fillOpacity: 0,\n floodOpacity: 0,\n stopOpacity: 0,\n strokeDasharray: 0,\n strokeDashoffset: 0,\n strokeMiterlimit: 0,\n strokeOpacity: 0,\n strokeWidth: 0\n };\n const prefixes = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\n Object.keys(rec).forEach((prop) => {\n prefixes.forEach((prefix) => {\n rec[prefixKey(prefix, prop)] = 0;\n });\n });\n return rec;\n})();\nfunction setStylePropValue(node, key, val) {\n if (key.indexOf(\"-\") === 0) {\n node.style.setProperty(key, val);\n } else if (isNumber(val) && isUnitlessNumber[key] !== 0) {\n node.style[key] = val + \"px\";\n } else {\n node.style[key] = val;\n }\n}\nfunction clearPrevStyle(node, prev) {\n if (prev == null || prev === false || prev === true)\n return;\n if (isString(prev)) {\n node.removeAttribute(\"style\");\n return;\n }\n if (isObject(prev)) {\n Object.keys(prev).forEach((key) => {\n setStylePropValue(node, key, \"\");\n });\n }\n}\nfunction assignStyle(node, value, prev) {\n if (value == null || value === false || value === true) {\n clearPrevStyle(node, prev);\n return;\n }\n if (isString(value)) {\n node.setAttribute(\"style\", value);\n return;\n }\n if (isObject(value)) {\n if (isObject(prev)) {\n value = { ...value };\n Object.keys(prev).forEach((key) => {\n if (!(key in value))\n value[key] = \"\";\n });\n } else\n clearPrevStyle(node, prev);\n Object.entries(value).forEach(([key, val]) => {\n if (isSignalLike(val)) {\n observeSignal(val, (args) => setStylePropValue(node, key, args.newValue), {\n lifecycleNode: node\n });\n } else {\n setStylePropValue(node, key, val);\n }\n });\n return;\n }\n}\n\n// src/jsx-assign-props.ts\nvar XLinkNamespace = \"http://www.w3.org/1999/xlink\";\nvar XMLNamespace = \"http://www.w3.org/XML/1998/namespace\";\nfunction normalizeAttribute(s2, separator) {\n return s2.replace(/[A-Z]/g, (match) => separator + match.toLowerCase());\n}\nvar mappedKeys = /* @__PURE__ */ new Map([\n [\"autoComplete\", \"autocomplete\"],\n [\"autoFocus\", \"autofocus\"],\n [\"className\", \"class\"],\n [\"colSpan\", \"colspan\"],\n [\"contentEditable\", \"contenteditable\"],\n [\"formNoValidate\", \"formnovalidate\"],\n [\"htmlFor\", \"for\"],\n [\"innerText\", \"textContent\"],\n [\"minLength\", \"minlength\"],\n [\"maxLength\", \"maxlength\"],\n [\"readOnly\", \"readonly\"],\n [\"reffererPolicy\", \"referrerpolicy\"],\n [\"rowSpan\", \"rowspan\"],\n [\"spellCheck\", \"spellcheck\"],\n [\"tabIndex\", \"tabindex\"],\n [\"onDoubleClick\", \"onDblClick\"],\n [\"onDoubleClickCapture\", \"onDblClickCapture\"]\n]);\nfunction assignProp(node, key, value, prev) {\n switch (key) {\n case \"dataset\":\n if (prev != null) {\n Object.entries(prev).forEach(([k, v2]) => {\n if (v2 != null) {\n delete node.dataset[k];\n }\n });\n }\n Object.entries(value).forEach(([dataKey, dataValue]) => {\n if (dataValue != null) {\n node.dataset[dataKey] = dataValue;\n }\n });\n return;\n case \"textContent\":\n if (isVisibleChild(value)) {\n node[key] = value;\n } else if (isVisibleChild(prev)) {\n node[key] = \"\";\n }\n return;\n case \"dangerouslySetInnerHTML\":\n if (isObject(value)) {\n node.innerHTML = value[\"__html\"];\n } else if (isObject(prev)) {\n node.innerHTML = \"\";\n }\n return;\n case \"value\":\n if (value == null) {\n if (prev != null) {\n node[key] = null;\n }\n return;\n } else if (node instanceof window.HTMLSelectElement) {\n return;\n } else if (node instanceof window.HTMLTextAreaElement) {\n node.value = value;\n return;\n }\n break;\n case \"class\":\n assignClass(node, value, prev);\n return;\n case \"spellcheck\":\n node.spellcheck = value === \"\" || value === true || value === \"true\" ? true : value === false || value === \"false\" ? false : value;\n return;\n case \"draggable\":\n if (value === false || value === \"false\")\n value = \"false\";\n else if (value === \"\")\n value = null;\n else if (value === true || value === \"true\")\n value = \"true\";\n break;\n case \"contenteditable\":\n if (value === false)\n value = \"false\";\n else if (value === \"\" || value === true)\n value = \"true\";\n break;\n case \"ref\":\n case \"namespaceURI\":\n return;\n case \"style\":\n assignStyle(node, value, prev);\n return;\n case \"on\":\n case \"onCapture\":\n const useCapture = key === \"onCapture\";\n if (prev != null) {\n Object.entries(prev).forEach(([eventName, eventHandler]) => {\n if (value == null || value[eventName] !== eventHandler) {\n node.removeEventListener(eventName, eventHandler, useCapture);\n }\n });\n }\n Object.entries(value).forEach(([eventName, eventHandler]) => {\n if (prev == null || prev[eventName] !== eventHandler) {\n node.addEventListener(eventName, eventHandler, useCapture);\n }\n });\n return;\n case \"xlinkActuate\":\n case \"xlinkArcrole\":\n case \"xlinkHref\":\n case \"xlinkRole\":\n case \"xlinkShow\":\n case \"xlinkTitle\":\n case \"xlinkType\":\n node.setAttributeNS(XLinkNamespace, normalizeAttribute(key, \":\"), value);\n return;\n case \"xmlnsXlink\":\n node.setAttribute(\"xmlns:xlink\", value);\n return;\n case \"xmlBase\":\n case \"xmlLang\":\n case \"xmlSpace\":\n node.setAttributeNS(XMLNamespace, normalizeAttribute(key, \":\"), value);\n return;\n }\n if (typeof value === \"function\") {\n if (key[0] === \"o\" && key[1] === \"n\") {\n if (prev != null && prev === value)\n return;\n let attribute = key.toLowerCase();\n const useCapture = attribute.endsWith(\"capture\");\n let eventName;\n if (!useCapture && (node[attribute] === null || prev != null && node[attribute] === prev)) {\n node[attribute] = value;\n addDisposingListener(node, nodeEventPropDisposer.bind(node, attribute));\n } else if (useCapture) {\n eventName = attribute.substring(2, attribute.length - 7);\n if (prev != null) {\n node.removeEventListener(eventName, prev, true);\n }\n node.addEventListener(eventName, value, true);\n } else {\n if (attribute in window) {\n const standardEventName = attribute.substring(2);\n eventName = standardEventName;\n } else {\n const customEventName = attribute[2] + key.slice(3);\n eventName = customEventName;\n }\n if (prev != null) {\n node.removeEventListener(eventName, prev);\n }\n node.addEventListener(eventName, value);\n }\n } else {\n console.warn(`A function was provided for JSX ${node.tagName} element ${key} which does not start with \"on\":`, value, node.tagName);\n }\n return;\n }\n if (isObject(prev)) {\n if (prev === value) {\n return;\n }\n delete node[key];\n }\n if (prev === true) {\n if (prev === value) {\n return;\n }\n node.removeAttribute(key);\n }\n if (prev !== false && prev != null) {\n if (prev === value) {\n return;\n }\n if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) {\n node.removeAttributeNS(normalizeAttribute(key, \"-\"), value);\n } else {\n node.removeAttribute(key);\n }\n }\n if (isObject(value)) {\n node[key] = value;\n return;\n }\n if (value === true) {\n node.setAttribute(key, \"\");\n return;\n }\n if (value !== false && value != null) {\n if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) {\n node.setAttribute(normalizeAttribute(key, \"-\"), value);\n } else {\n node.setAttribute(key, value);\n }\n }\n}\nfunction assignProps(node, props) {\n for (let [key, value] of Object.entries(props)) {\n key = mappedKeys.get(key) ?? key;\n if (isSignalLike(value)) {\n observeSignal(value, (args) => assignProp(node, key, args.newValue, args.prevValue), {\n lifecycleNode: node\n });\n } else if (isPropHook(value)) {\n value[initPropHookSymbol](node, key);\n } else {\n assignProp(node, key, value);\n }\n }\n return node;\n}\nfunction nodeEventPropDisposer(key) {\n this[key] = null;\n}\n\n// src/jsx-factory.ts\nfunction jsx(tag, props) {\n let { children, ...attr } = props || {};\n let ns = attr.namespaceURI;\n if (!ns) {\n if (svgOnlyTags.has(tag))\n ns = SVGNamespace;\n else if (mathMLOnlyTags.has(tag))\n ns = MathMLNamespace;\n else\n ns = currentNamespaceURI();\n }\n let node;\n if (isString(tag)) {\n node = ns ? document.createElementNS(ns, tag) : document.createElement(tag);\n assignProps(node, attr);\n appendChildren(node, children);\n if (node instanceof window.HTMLSelectElement && attr.value != null) {\n if (attr.multiple === true && Array.isArray(attr.value)) {\n const values = attr.value.map((value) => String(value));\n node.querySelectorAll(\"option\").forEach((option) => option.selected = values.includes(option.value));\n } else {\n node.value = attr.value;\n }\n }\n setRef(attr.ref, node);\n } else if (typeof tag === \"function\") {\n if (isObject(tag.defaultProps)) {\n attr = { ...tag.defaultProps, ...attr };\n }\n node = isComponentClass(tag) ? initComponentClass(tag, attr, children) : tag({ ...attr, children });\n } else {\n throw new TypeError(`Invalid JSX element type: ${tag}`);\n }\n return node;\n}\n\n// src/compat-api.ts\nfunction createElement(tag, attr, ...children) {\n if (isString(attr) || Array.isArray(attr)) {\n children.unshift(attr);\n attr = {};\n }\n attr = attr || {};\n if (attr.children != null && !children.length) {\n ({ children, ...attr } = attr);\n }\n return jsx(tag, { ...attr, children });\n}\nfunction useImperativeHandle(ref, init) {\n setRef(ref, init());\n}\n\n// src/fragment.ts\nfunction Fragment(attr) {\n const fragment = document.createDocumentFragment();\n appendChildren(fragment, attr.children);\n return fragment;\n}\n\n// src/hooks.ts\nfunction useClassList(initialValue) {\n let temp = document.createElement(\"div\");\n if (initialValue != null) {\n temp.className = className(initialValue);\n }\n let list = temp.classList;\n function ClassList() {\n return list;\n }\n function dispose() {\n list = null;\n temp = null;\n }\n Object.defineProperties(\n ClassList,\n Object.getOwnPropertyDescriptors({\n [initPropHookSymbol](node, prop) {\n if (prop !== \"class\")\n throw new Error(\"useClassList can only be used for 'class' attribute.\");\n temp && removeDisposingListener(temp, dispose);\n list && node?.setAttribute(\"class\", list.value);\n addDisposingListener(temp = node, dispose);\n list = node?.classList ?? list;\n },\n get size() {\n return list.length;\n },\n get value() {\n return list.value;\n },\n add(...tokens) {\n list.add(...tokens);\n },\n remove(...tokens) {\n list.remove(...tokens);\n },\n toggle(token, force) {\n list.toggle(token, force);\n },\n contains(token) {\n return list.contains(token);\n }\n })\n );\n return ClassList;\n}\nfunction propBinding(value) {\n if (arguments.length && value !== this.value) {\n this.node && this.prop && assignProp(this.node, this.prop, value, this.value);\n this.value = value;\n }\n return this.value;\n}\nfunction propBindingDispose() {\n delete this.node;\n}\nfunction propBindingInit(el, key) {\n if (this.node && el && this.node !== el || this.prop && key && this.prop !== key) {\n throw new Error(\"usePropBinding can only be used with one element and one attribute. Create a new setter for each element / prop.\");\n }\n if (this.node)\n removeDisposingListener(this.node, this.dispose);\n this.node = el;\n if (this.node) {\n addDisposingListener(this.node, this.dispose);\n assignProp(this.node, this.prop ??= key, this.value);\n }\n}\nfunction usePropBinding(initialValue) {\n const accessorThis = {\n value: initialValue\n };\n accessorThis.dispose = propBindingDispose.bind(accessorThis);\n const hook = propBinding.bind(accessorThis);\n hook[initPropHookSymbol] = propBindingInit.bind(accessorThis);\n return hook;\n}\nfunction useText(initialValue) {\n const text = new Text();\n Object.defineProperty(text, \"toString\", {\n value() {\n return this.textContent;\n }\n });\n function setText(value) {\n text.textContent = value;\n }\n if (initialValue != null) {\n setText(initialValue);\n }\n return [text, setText];\n}\n\n// ../../node_modules/.pnpm/@preact+signals-core@1.14.1/node_modules/@preact/signals-core/dist/signals-core.module.js\nvar i = /* @__PURE__ */ Symbol.for(\"preact-signals\");\nfunction t() {\n if (!(s > 1)) {\n var i2, t2 = false;\n !(function() {\n var i3 = c;\n c = void 0;\n while (void 0 !== i3) {\n if (i3.S.v === i3.v) i3.S.i = i3.i;\n i3 = i3.o;\n }\n })();\n while (void 0 !== h) {\n var n2 = h;\n h = void 0;\n v++;\n while (void 0 !== n2) {\n var r2 = n2.u;\n n2.u = void 0;\n n2.f &= -3;\n if (!(8 & n2.f) && w(n2)) try {\n n2.c();\n } catch (n3) {\n if (!t2) {\n i2 = n3;\n t2 = true;\n }\n }\n n2 = r2;\n }\n }\n v = 0;\n s--;\n if (t2) throw i2;\n } else s--;\n}\nfunction n(i2) {\n if (s > 0) return i2();\n e = ++u;\n s++;\n try {\n return i2();\n } finally {\n t();\n }\n}\nvar r = void 0;\nfunction o(i2) {\n var t2 = r;\n r = void 0;\n try {\n return i2();\n } finally {\n r = t2;\n }\n}\nvar f;\nvar h = void 0;\nvar s = 0;\nvar v = 0;\nvar u = 0;\nvar e = 0;\nvar c = void 0;\nvar d = 0;\nfunction a(i2) {\n if (void 0 !== r) {\n var t2 = i2.n;\n if (void 0 === t2 || t2.t !== r) {\n t2 = { i: 0, S: i2, p: r.s, n: void 0, t: r, e: void 0, x: void 0, r: t2 };\n if (void 0 !== r.s) r.s.n = t2;\n r.s = t2;\n i2.n = t2;\n if (32 & r.f) i2.S(t2);\n return t2;\n } else if (-1 === t2.i) {\n t2.i = 0;\n if (void 0 !== t2.n) {\n t2.n.p = t2.p;\n if (void 0 !== t2.p) t2.p.n = t2.n;\n t2.p = r.s;\n t2.n = void 0;\n r.s.n = t2;\n r.s = t2;\n }\n return t2;\n }\n }\n}\nfunction l(i2, t2) {\n this.v = i2;\n this.i = 0;\n this.n = void 0;\n this.t = void 0;\n this.l = 0;\n this.W = null == t2 ? void 0 : t2.watched;\n this.Z = null == t2 ? void 0 : t2.unwatched;\n this.name = null == t2 ? void 0 : t2.name;\n}\nl.prototype.brand = i;\nl.prototype.h = function() {\n return true;\n};\nl.prototype.S = function(i2) {\n var t2 = this, n2 = this.t;\n if (n2 !== i2 && void 0 === i2.e) {\n i2.x = n2;\n this.t = i2;\n if (void 0 !== n2) n2.e = i2;\n else o(function() {\n var i3;\n null == (i3 = t2.W) || i3.call(t2);\n });\n }\n};\nl.prototype.U = function(i2) {\n var t2 = this;\n if (void 0 !== this.t) {\n var n2 = i2.e, r2 = i2.x;\n if (void 0 !== n2) {\n n2.x = r2;\n i2.e = void 0;\n }\n if (void 0 !== r2) {\n r2.e = n2;\n i2.x = void 0;\n }\n if (i2 === this.t) {\n this.t = r2;\n if (void 0 === r2) o(function() {\n var i3;\n null == (i3 = t2.Z) || i3.call(t2);\n });\n }\n }\n};\nl.prototype.subscribe = function(i2) {\n var t2 = this;\n return j(function() {\n var n2 = t2.value, o2 = r;\n r = void 0;\n try {\n i2(n2);\n } finally {\n r = o2;\n }\n }, { name: \"sub\" });\n};\nl.prototype.valueOf = function() {\n return this.value;\n};\nl.prototype.toString = function() {\n return this.value + \"\";\n};\nl.prototype.toJSON = function() {\n return this.value;\n};\nl.prototype.peek = function() {\n var i2 = r;\n r = void 0;\n try {\n return this.value;\n } finally {\n r = i2;\n }\n};\nObject.defineProperty(l.prototype, \"value\", { get: function() {\n var i2 = a(this);\n if (void 0 !== i2) i2.i = this.i;\n return this.v;\n}, set: function(i2) {\n if (i2 !== this.v) {\n if (v > 100) throw new Error(\"Cycle detected\");\n !(function(i3) {\n if (0 !== s && 0 === v) {\n if (i3.l !== e) {\n i3.l = e;\n c = { S: i3, v: i3.v, i: i3.i, o: c };\n }\n }\n })(this);\n this.v = i2;\n this.i++;\n d++;\n s++;\n try {\n for (var n2 = this.t; void 0 !== n2; n2 = n2.x) n2.t.N();\n } finally {\n t();\n }\n }\n} });\nfunction y(i2, t2) {\n return new l(i2, t2);\n}\nfunction w(i2) {\n for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) if (t2.S.i !== t2.i || !t2.S.h() || t2.S.i !== t2.i) return true;\n return false;\n}\nfunction _(i2) {\n for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) {\n var n2 = t2.S.n;\n if (void 0 !== n2) t2.r = n2;\n t2.S.n = t2;\n t2.i = -1;\n if (void 0 === t2.n) {\n i2.s = t2;\n break;\n }\n }\n}\nfunction b(i2) {\n var t2 = i2.s, n2 = void 0;\n while (void 0 !== t2) {\n var r2 = t2.p;\n if (-1 === t2.i) {\n t2.S.U(t2);\n if (void 0 !== r2) r2.n = t2.n;\n if (void 0 !== t2.n) t2.n.p = r2;\n } else n2 = t2;\n t2.S.n = t2.r;\n if (void 0 !== t2.r) t2.r = void 0;\n t2 = r2;\n }\n i2.s = n2;\n}\nfunction p(i2, t2) {\n l.call(this, void 0);\n this.x = i2;\n this.s = void 0;\n this.g = d - 1;\n this.f = 4;\n this.W = null == t2 ? void 0 : t2.watched;\n this.Z = null == t2 ? void 0 : t2.unwatched;\n this.name = null == t2 ? void 0 : t2.name;\n}\np.prototype = new l();\np.prototype.h = function() {\n this.f &= -3;\n if (1 & this.f) return false;\n if (32 == (36 & this.f)) return true;\n this.f &= -5;\n if (this.g === d) return true;\n this.g = d;\n this.f |= 1;\n if (this.i > 0 && !w(this)) {\n this.f &= -2;\n return true;\n }\n var i2 = r;\n try {\n _(this);\n r = this;\n var t2 = this.x();\n if (16 & this.f || this.v !== t2 || 0 === this.i) {\n this.v = t2;\n this.f &= -17;\n this.i++;\n }\n } catch (i3) {\n this.v = i3;\n this.f |= 16;\n this.i++;\n }\n r = i2;\n b(this);\n this.f &= -2;\n return true;\n};\np.prototype.S = function(i2) {\n if (void 0 === this.t) {\n this.f |= 36;\n for (var t2 = this.s; void 0 !== t2; t2 = t2.n) t2.S.S(t2);\n }\n l.prototype.S.call(this, i2);\n};\np.prototype.U = function(i2) {\n if (void 0 !== this.t) {\n l.prototype.U.call(this, i2);\n if (void 0 === this.t) {\n this.f &= -33;\n for (var t2 = this.s; void 0 !== t2; t2 = t2.n) t2.S.U(t2);\n }\n }\n};\np.prototype.N = function() {\n if (!(2 & this.f)) {\n this.f |= 6;\n for (var i2 = this.t; void 0 !== i2; i2 = i2.x) i2.t.N();\n }\n};\nObject.defineProperty(p.prototype, \"value\", { get: function() {\n if (1 & this.f) throw new Error(\"Cycle detected\");\n var i2 = a(this);\n this.h();\n if (void 0 !== i2) i2.i = this.i;\n if (16 & this.f) throw this.v;\n return this.v;\n} });\nfunction g(i2, t2) {\n return new p(i2, t2);\n}\nfunction S(i2) {\n var n2 = i2.m;\n i2.m = void 0;\n if (\"function\" == typeof n2) {\n s++;\n var o2 = r;\n r = void 0;\n try {\n n2();\n } catch (t2) {\n i2.f &= -2;\n i2.f |= 8;\n m(i2);\n throw t2;\n } finally {\n r = o2;\n t();\n }\n }\n}\nfunction m(i2) {\n for (var t2 = i2.s; void 0 !== t2; t2 = t2.n) t2.S.U(t2);\n i2.x = void 0;\n i2.s = void 0;\n S(i2);\n}\nfunction x(i2) {\n if (r !== this) throw new Error(\"Out-of-order effect\");\n b(this);\n r = i2;\n this.f &= -2;\n if (8 & this.f) m(this);\n t();\n}\nfunction E(i2, t2) {\n this.x = i2;\n this.m = void 0;\n this.s = void 0;\n this.u = void 0;\n this.f = 32;\n this.name = null == t2 ? void 0 : t2.name;\n if (f) f.push(this);\n}\nE.prototype.c = function() {\n var i2 = this.S();\n try {\n if (8 & this.f) return;\n if (void 0 === this.x) return;\n var t2 = this.x();\n if (\"function\" == typeof t2) this.m = t2;\n } finally {\n i2();\n }\n};\nE.prototype.S = function() {\n if (1 & this.f) throw new Error(\"Cycle detected\");\n this.f |= 1;\n this.f &= -9;\n S(this);\n _(this);\n s++;\n var i2 = r;\n r = this;\n return x.bind(this, i2);\n};\nE.prototype.N = function() {\n if (!(2 & this.f)) {\n this.f |= 2;\n this.u = h;\n h = this;\n }\n};\nE.prototype.d = function() {\n this.f |= 8;\n if (!(1 & this.f)) m(this);\n};\nE.prototype.dispose = function() {\n this.d();\n};\nfunction j(i2, t2) {\n var n2 = new E(i2, t2);\n try {\n n2.c();\n } catch (i3) {\n n2.d();\n throw i3;\n }\n var r2 = n2.d.bind(n2);\n r2[Symbol.dispose] = r2;\n return r2;\n}\n\n// src/signals.ts\nvar signal = y;\nvar computed = g;\nvar effect = j;\nvar batch = n;\nvar untracked = o;\nfunction useSignal(initialValue) {\n return signal(initialValue);\n}\nfunction useUpdatableComputed() {\n const updater = signal(0);\n const factory = (fn) => {\n return computed(() => {\n updater.value;\n return fn();\n });\n };\n const update = () => {\n updater.value++;\n };\n return { computed: factory, update };\n}\nexport {\n Component,\n Fragment,\n MathMLNamespace,\n SVGNamespace,\n ShadowRootNode,\n addDisposingListener,\n batch,\n bindThis,\n className,\n computed,\n createElement,\n createRef,\n currentLifecycleRoot,\n currentNamespaceURI,\n derivedSignal,\n dispatchDisposingEvent,\n effect,\n createElement as h,\n inHTMLNamespace,\n inMathMLNamespace,\n inNamespaceURI,\n inSVGNamespace,\n initPropHookSymbol,\n invokeDisposingListeners,\n isSignalLike,\n jsx,\n jsx as jsxs,\n observeSignal,\n removeDisposingListener,\n setRef,\n signal,\n untracked,\n useClassList,\n useImperativeHandle,\n usePropBinding,\n createRef as useRef,\n useSignal,\n useText,\n useUpdatableComputed\n};\n//# sourceMappingURL=index.js.map\n","/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nexport const enMessages = {\n emptyStateTitle: 'No data available.',\n thumbnails: 'Thumbnails',\n singlePageMode: 'Single Page Mode',\n pages: 'Pages',\n previous: 'Previous',\n next: 'Next',\n zoomOut: 'Zoom Out',\n zoomIn: 'Zoom In',\n fullscreen: 'Fullscreen',\n settings: 'Settings',\n downloadCatalog: 'Download Catalog',\n share: 'Share',\n bookmark: 'Bookmark page',\n removeBookmark: 'Remove bookmark',\n notes: 'Page note',\n saveNote: 'Save note',\n clearNote: 'Clear note',\n closeNote: 'Close note editor',\n editNote: 'Edit',\n deleteNote: 'Delete',\n play: 'Play',\n pause: 'Pause',\n tableOfContents: 'Table of Contents',\n search: 'Search',\n searchPlaceholder: 'Search PDF text',\n clearSearch: 'Clear',\n closeSearch: 'Close search',\n noSearchResults: 'No results',\n searchUnavailable: 'Text search is available only in Direct PDF mode.',\n closeHotspot: 'Close popup',\n annotation: 'Page annotation'\n} as const;\n","/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nexport const trMessages = {\n emptyStateTitle: 'Veri bulunamadi.',\n thumbnails: 'Küçük Resimler',\n singlePageMode: 'Tek Sayfa Modu',\n pages: 'Sayfalar',\n previous: 'Önceki',\n next: 'Sonraki',\n zoomOut: 'Uzaklaş',\n zoomIn: 'Yaklaş',\n fullscreen: 'Tam Ekran',\n settings: 'Ayarlar',\n downloadCatalog: 'Kataloğu İndir',\n share: 'Paylaş',\n bookmark: 'Sayfayı yer imlerine ekle',\n removeBookmark: 'Yer imini kaldır',\n notes: 'Sayfa notu',\n saveNote: 'Notu kaydet',\n clearNote: 'Notu temizle',\n closeNote: 'Not editörünü kapat',\n editNote: 'Düzenle',\n deleteNote: 'Sil',\n play: 'Otomatik Oynat',\n pause: 'Duraklat',\n tableOfContents: 'İçindekiler',\n search: 'Ara',\n searchPlaceholder: 'PDF metninde ara',\n clearSearch: 'Temizle',\n closeSearch: 'Aramayı kapat',\n noSearchResults: 'Sonuç bulunamadı',\n searchUnavailable: 'Metin arama yalnızca Doğrudan PDF modunda desteklenir.',\n closeHotspot: 'Açılır pencereyi kapat',\n annotation: 'Sayfa açıklaması'\n} as const;\n","/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nimport { enMessages } from './locales/en';\nimport { trMessages } from './locales/tr';\n\nexport interface FlipbookMessages {\n emptyStateTitle: string;\n thumbnails: string;\n singlePageMode: string;\n pages: string;\n previous: string;\n next: string;\n zoomOut: string;\n zoomIn: string;\n fullscreen: string;\n settings: string;\n downloadCatalog: string;\n share: string;\n bookmark: string;\n removeBookmark: string;\n notes: string;\n saveNote: string;\n clearNote: string;\n closeNote: string;\n editNote: string;\n deleteNote: string;\n play: string;\n pause: string;\n tableOfContents: string;\n search: string;\n searchPlaceholder: string;\n clearSearch: string;\n closeSearch: string;\n noSearchResults: string;\n searchUnavailable: string;\n closeHotspot: string;\n annotation: string;\n}\n\nexport const builtInMessages = {\n en: enMessages,\n tr: trMessages\n} as const;\n\nexport type FlipbookLocale = keyof typeof builtInMessages;\nexport type PartialFlipbookMessages = Partial<FlipbookMessages>;\n\nexport interface I18nConfiguration {\n locale?: FlipbookLocale | string;\n messages?: Partial<Record<string, PartialFlipbookMessages>>;\n}\n\nexport function resolveMessages(config: I18nConfiguration = {}): FlipbookMessages {\n const locale = config.locale ?? 'en';\n const builtIn = builtInMessages[locale as FlipbookLocale] ?? builtInMessages.en;\n const custom = config.messages?.[locale] ?? {};\n return {\n ...builtInMessages.en,\n ...builtIn,\n ...custom\n };\n}\n","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n *\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\n *\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\n * under the terms of the GNU Affero General Public License v3.0.\n *\n * 2. Commercial License: If you wish to use this software in commercial,\n * closed-source, or SaaS products without the AGPLv3 obligations,\n * you must purchase a Commercial License from:\n * https://flipbookengine.com/pricing\n */\n\nimport { computed } from '@preact/signals-core';\nimport type { FlipbookStore } from '../state/store';\nimport type { FlipbookPluginRegistry } from '../plugins';\nimport { resolveMessages } from '../i18n/service';\ninterface ToolbarProps {\n store: FlipbookStore;\n onToggleThumbs: () => void;\n onToggleToc: () => void;\n onToggleSearch: () => void;\n onToggleSingleMode: () => void;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onDownload?: () => void;\n onShare: () => void;\n onToggleBookmark: () => void;\n onToggleNotes: () => void;\n onSoundToggle: () => void;\n onNextPage: () => void;\n onPrevPage: () => void;\n onToggleAutoPlay: () => void;\n onToggleFullscreen: () => void;\n pluginRegistry?: FlipbookPluginRegistry;\n}\n\nfunction renderPluginToolbarButtons(props: { registry?: FlipbookPluginRegistry; placement: 'start' | 'end' }): any[] {\n if (!props.registry) return [];\n props.registry.version.value;\n const buttons = props.registry.getToolbarButtons().filter((button) => (button.placement || 'end') === props.placement);\n return buttons.map((button) => {\n const disabled = typeof button.disabled === 'function' ? button.disabled() : button.disabled;\n return (\n <button\n type=\"button\"\n class=\"bk-btn bk-btn--plugin\"\n onClick={button.onClick}\n disabled={disabled}\n aria-label={button.title || button.label}\n title={button.title || button.label}\n >\n {button.icon ? <span class=\"bk-plugin-button-icon\" aria-hidden=\"true\">{button.icon}</span> : null}\n <span class=\"bk-plugin-button-label\">{button.label}</span>\n </button>\n );\n });\n}\n\nexport function Toolbar(props: ToolbarProps) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n\n return (\n <div class=\"bk-toolbar\" role=\"toolbar\" aria-label=\"Flipbook controls\">\n <div class=\"bk-btn-group\">\n {renderPluginToolbarButtons({ registry: props.pluginRegistry, placement: 'start' })}\n <button type=\"button\"\n class={computed(() => `bk-btn ${props.store.showThumbs.value ? 'active' : ''}`)}\n onClick={props.onToggleThumbs}\n aria-label={computed(() => messages.value.thumbnails || 'Thumbnails')} aria-pressed={computed(() => props.store.showThumbs.value ? 'true' : 'false')} title={computed(() => messages.value.thumbnails || 'Thumbnails')}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect></svg>\n </button>\n {computed(() => props.store.toc.value.length ? (\n <button type=\"button\"\n class={computed(() => props.store.showToc.value ? 'bk-btn active' : 'bk-btn')}\n onClick={props.onToggleToc}\n aria-label={computed(() => messages.value.tableOfContents || 'Table of Contents')}\n aria-pressed={computed(() => props.store.showToc.value ? 'true' : 'false')}\n title={computed(() => messages.value.tableOfContents || 'Table of Contents')}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line></svg>\n </button>\n ) : null)}\n\n <button type=\"button\"\n class={computed(() => props.store.showSearch.value ? 'bk-btn active' : 'bk-btn')}\n onClick={props.onToggleSearch}\n disabled={computed(() => !props.store.isPdfMode.value)}\n aria-label={computed(() => props.store.isPdfMode.value ? (messages.value.search || 'Search') : (messages.value.searchUnavailable || 'Text search is available only in Direct PDF mode.'))}\n aria-pressed={computed(() => props.store.showSearch.value ? 'true' : 'false')}\n title={computed(() => props.store.isPdfMode.value ? (messages.value.search || 'Search') : (messages.value.searchUnavailable || 'Text search is available only in Direct PDF mode.'))}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"7\"></circle><line x1=\"16\" y1=\"16\" x2=\"21\" y2=\"21\"></line></svg>\n </button>\n\n <button type=\"button\"\n class={computed(() => `bk-btn bz-hide-mobile ${props.store.isSingleMode.value ? 'active' : ''}`)}\n onClick={props.onToggleSingleMode}\n aria-label={computed(() => messages.value.singlePageMode || 'Single Page')} aria-pressed={computed(() => props.store.isSingleMode.value ? 'true' : 'false')} title={computed(() => messages.value.singlePageMode || 'Single Page')}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line><polyline points=\"10 9 9 9 8 9\"></polyline></svg>\n </button>\n\n <button type=\"button\"\n class={computed(() => `bk-btn ${props.store.isAutoPlaying.value ? 'active' : ''}`)}\n onClick={props.onToggleAutoPlay}\n aria-label={computed(() => props.store.isAutoPlaying.value ? (messages.value.pause || 'Pause') : (messages.value.play || 'Play'))} aria-pressed={computed(() => props.store.isAutoPlaying.value ? 'true' : 'false')} title={computed(() => props.store.isAutoPlaying.value ? (messages.value.pause || 'Pause') : (messages.value.play || 'Play'))}\n >\n <svg style={{ display: computed(() => props.store.isAutoPlaying.value ? 'block' : 'none') as any }} xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect></svg>\n\n <svg style={{ display: computed(() => !props.store.isAutoPlaying.value ? 'block' : 'none') as any }} xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"5 3 19 12 5 21 5 3\"></polygon></svg>\n </button>\n </div>\n\n <div class=\"bk-btn-group bk-btn-group--center\">\n <button type=\"button\" class=\"bk-btn\" onClick={props.onPrevPage} aria-label={computed(() => messages.value.previous || 'Previous')} title={computed(() => messages.value.previous || 'Previous')}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>\n </button>\n <span class=\"bz-page-info\" aria-live=\"polite\" aria-atomic=\"true\">\n {computed(() => {\n const current = props.store.currentPage.value;\n const total = props.store.totalPages.value;\n if (props.store.isSingleMode.value || current === 0 || current >= total - 1) {\n return `${current + 1} / ${total}`;\n }\n const left = current % 2 === 1 ? current : current - 1;\n return `${left + 1}-${left + 2} / ${total}`;\n })}\n </span>\n <button type=\"button\" class=\"bk-btn\" onClick={props.onNextPage} aria-label={computed(() => messages.value.next || 'Next')} title={computed(() => messages.value.next || 'Next')}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>\n </button>\n </div>\n\n <div class=\"bk-btn-group\">\n <button type=\"button\" class=\"bk-btn\" onClick={props.onZoomIn} aria-label={computed(() => messages.value.zoomIn || 'Zoom In')} title={computed(() => messages.value.zoomIn || 'Zoom In')}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>\n </button>\n <button type=\"button\"\n class={computed(() => `bk-btn ${props.store.isZoomed.value ? 'active' : ''}`)}\n onClick={props.onZoomOut}\n aria-label={computed(() => messages.value.zoomOut || 'Zoom Out')} title={computed(() => messages.value.zoomOut || 'Zoom Out')}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>\n </button>\n\n <button type=\"button\" class=\"bk-btn bk-btn--fullscreen\" onClick={props.onToggleFullscreen} aria-label={computed(() => messages.value.fullscreen || 'Fullscreen')} title={computed(() => messages.value.fullscreen || 'Fullscreen')}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\"></path></svg>\n </button>\n\n <button type=\"button\" class=\"bk-btn bk-btn--share\" onClick={props.onShare} aria-label={computed(() => messages.value.share || 'Share')} title={computed(() => messages.value.share || 'Share')}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"18\" cy=\"5\" r=\"3\"></circle><circle cx=\"6\" cy=\"12\" r=\"3\"></circle><circle cx=\"18\" cy=\"19\" r=\"3\"></circle><line x1=\"8.59\" y1=\"13.51\" x2=\"15.42\" y2=\"17.49\"></line><line x1=\"15.41\" y1=\"6.51\" x2=\"8.59\" y2=\"10.49\"></line></svg>\n </button>\n\n <button type=\"button\" class={computed(() => `bk-btn bk-btn--bookmark ${props.store.bookmarkedPages.value.has(props.store.currentPage.value) ? 'active' : ''}`)} onClick={props.onToggleBookmark} aria-label={computed(() => props.store.bookmarkedPages.value.has(props.store.currentPage.value) ? (messages.value.removeBookmark || 'Remove bookmark') : (messages.value.bookmark || 'Bookmark page'))} title={computed(() => props.store.bookmarkedPages.value.has(props.store.currentPage.value) ? (messages.value.removeBookmark || 'Remove bookmark') : (messages.value.bookmark || 'Bookmark page'))} aria-pressed={computed(() => props.store.bookmarkedPages.value.has(props.store.currentPage.value) ? 'true' : 'false')}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v18l-7-4-7 4V4z\"></path></svg>\n </button>\n\n <button type=\"button\"\n class={computed(() => `bk-btn bk-btn--notes ${props.store.showNotes.value ? 'active' : ''}`)}\n onClick={props.onToggleNotes}\n aria-label={computed(() => messages.value.notes || 'Page note')}\n title={computed(() => messages.value.notes || 'Page note')}\n aria-pressed={computed(() => props.store.showNotes.value ? 'true' : 'false')}\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline><line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\"></line><line x1=\"8\" y1=\"17\" x2=\"14\" y2=\"17\"></line></svg>\n </button>\n\n {computed(() => {\n if (props.store.allowDownload.value && props.store.hasDownloadUrl.value && props.onDownload) {\n return (\n <button type=\"button\" class=\"bk-btn bk-btn--download\" onClick={props.onDownload} aria-label={computed(() => messages.value.downloadCatalog || 'Download')} title={computed(() => messages.value.downloadCatalog || 'Download')}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"7 10 12 15 17 10\"></polyline><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line></svg>\n </button>\n );\n }\n return null;\n })}\n\n <button type=\"button\"\n // @ts-ignore\n class={computed(() => `bk-btn ${!props.store.soundEnabled.value ? 'muted' : ''}`)}\n onClick={props.onSoundToggle}\n aria-label=\"Sound\" aria-pressed={computed(() => props.store.soundEnabled.value ? 'true' : 'false')} title=\"Sound\"\n >\n <svg style={{ display: computed(() => props.store.soundEnabled.value ? 'block' : 'none') as any }} xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"></path><path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\"></path></svg>\n\n <svg style={{ display: computed(() => !props.store.soundEnabled.value ? 'block' : 'none') as any }} xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon><line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"></line><line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"></line></svg>\n </button>\n {renderPluginToolbarButtons({ registry: props.pluginRegistry, placement: 'end' })}\n </div>\n </div>\n );\n}\n\n\n\n\n\n\n","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n *\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\n *\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\n * under the terms of the GNU Affero General Public License v3.0.\n *\n * 2. Commercial License: If you wish to use this software in commercial,\n * closed-source, or SaaS products without the AGPLv3 obligations,\n * you must purchase a Commercial License from:\n * https://flipbookengine.com/pricing\n */\n\n\nimport { computed } from '@preact/signals-core';\nimport type { FlipbookStore } from '../state/store';\n\ninterface ThumbnailsProps {\n store: FlipbookStore;\n onThumbClick: (pageIndex: number) => void;\n}\n\nexport function Thumbnails(props: ThumbnailsProps) {\n return (\n <div class=\"bk-thumbs\" style={computed(() => props.store.showThumbs.value ? 'display:flex;' : 'display:none;')}>\n {props.store.pages.value.map((page, index) => {\n const isActive = () => {\n const current = props.store.currentPage.value;\n if (props.store.isSingleMode.value || current === 0 || current >= props.store.pages.value.length - 1) {\n return current === index;\n }\n const left = current % 2 === 1 ? current : current - 1;\n return index === left || index === left + 1;\n };\n\n return (\n <div\n // @ts-ignore\n class={computed(() => `thumb-item ${isActive() ? 'active' : ''}`)}\n role=\"button\"\n tabindex=\"0\"\n aria-label={`Go to page ${index + 1}`}\n aria-current={computed(() => isActive() ? 'page' : undefined)}\n onClick={() => props.onThumbClick(index)}\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n props.onThumbClick(index);\n }\n }}\n >\n <div class=\"thumb-img-wrapper\">\n <img\n data-pdf-page={page.assetId.startsWith('pdf-page-') ? (page.sourcePageNumber ?? page.pageNumber) : undefined}\n class={`thumb-img ${page.cropMode !== 'full' ? 'thumb-img--split thumb-img--' + page.cropMode : ''}`}\n src={page.thumb || page.low || page.normal}\n alt={`Page ${index + 1}`}\n loading=\"lazy\"\n onError={(e: any) => { e.currentTarget.style.display = 'none'; }}\n />\n <span class='thumb-page-number'>{index + 1}</span>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n\n","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { computed } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookTocEntry } from '../model/toc';\nimport type { FlipbookStore } from '../state/store';\n\ninterface TableOfContentsProps {\n store: FlipbookStore;\n onEntryClick: (pageIndex: number) => void;\n}\n\nfunction renderEntries(entries: FlipbookTocEntry[], store: FlipbookStore, onEntryClick: (pageIndex: number) => void): any {\n return (\n <ol class=\"bk-toc-list\">\n {entries.map((entry) => (\n <li class=\"bk-toc-item\">\n <button\n type=\"button\"\n class={computed(() => store.currentPage.value === entry.pageIndex ? 'bk-toc-entry active' : 'bk-toc-entry')}\n aria-current={computed(() => store.currentPage.value === entry.pageIndex ? 'page' : undefined)}\n onClick={() => onEntryClick(entry.pageIndex)}\n >\n <span class=\"bk-toc-title\">{entry.title}</span>\n <span class=\"bk-toc-page\">{entry.pageIndex + 1}</span>\n </button>\n {entry.children?.length ? renderEntries(entry.children, store, onEntryClick) : null}\n </li>\n ))}\n </ol>\n );\n}\n\nexport function TableOfContents(props: TableOfContentsProps) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n return (\n <nav\n class=\"bk-toc\"\n aria-label={computed(() => messages.value.tableOfContents || 'Table of Contents')}\n style={computed(() => props.store.showToc.value && props.store.toc.value.length ? 'display:flex;' : 'display:none;')}\n >\n <div class=\"bk-toc-heading\">{computed(() => messages.value.tableOfContents || 'Table of Contents')}</div>\n {renderEntries(props.store.toc.value, props.store, props.onEntryClick)}\n </nav>\n );\n}","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { computed, signal } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookStore } from '../state/store';\n\ninterface NotesPanelProps {\n store: FlipbookStore;\n onSave: (note: string) => void;\n onClear: () => void;\n onClose: () => void;\n}\n\n/**\n * Page-level note UI. Persistence remains host-owned through the engine API and\n * noteChange event; the panel intentionally does not know about a backend.\n */\nexport function NotesPanel(props: NotesPanelProps) {\n const messages = computed(() => resolveMessages({\n locale: props.store.locale.value,\n messages: props.store.messages.value\n }));\n const draft = signal('');\n const editing = signal(false);\n const noteInputRef = { current: null as HTMLTextAreaElement | null };\n let draftPage = -1;\n\n const draftValue = computed(() => {\n const page = props.store.currentPage.value;\n const note = props.store.pageNotes.value.get(page) ?? '';\n if (draftPage !== page) {\n draftPage = page;\n draft.value = note;\n editing.value = !note;\n }\n return draft.value;\n });\n const currentNote = computed(() => props.store.pageNotes.value.get(props.store.currentPage.value) ?? '');\n\n const handleInput = (event: Event) => {\n draft.value = (event.currentTarget as HTMLTextAreaElement).value;\n };\n const beginEdit = () => {\n draft.value = currentNote.value;\n editing.value = true;\n };\n const save = (event?: Event) => {\n event?.preventDefault();\n props.onSave(noteInputRef.current?.value ?? draft.value);\n editing.value = false;\n };\n const clear = (event?: Event) => {\n event?.preventDefault();\n draft.value = '';\n if (noteInputRef.current) noteInputRef.current.value = '';\n props.onClear();\n editing.value = true;\n };\n\n const renderEditor = () => (\n <div class=\"bk-notes-editor\">\n <textarea\n ref={noteInputRef}\n class=\"bk-notes-input\"\n aria-label={computed(() => messages.value.notes || 'Page note')}\n placeholder={computed(() => messages.value.notes || 'Page note')}\n value={draftValue}\n onInput={handleInput}\n rows={4}\n ></textarea>\n <div class=\"bk-notes-actions\">\n <button type=\"button\" class=\"bk-notes-clear\" onClick={clear}>\n {computed(() => messages.value.clearNote || 'Clear note')}\n </button>\n <button type=\"button\" class=\"bk-notes-save\" onClick={save}>\n {computed(() => messages.value.saveNote || 'Save note')}\n </button>\n </div>\n </div>\n );\n\n const renderSavedNote = () => (\n <div class=\"bk-note-saved\">\n <p class=\"bk-note-content\">{currentNote}</p>\n <div class=\"bk-note-actions\">\n <button type=\"button\" class=\"bk-note-badge bk-note-badge--edit\" onClick={beginEdit}>\n {computed(() => messages.value.editNote || 'Edit')}\n </button>\n <button type=\"button\" class=\"bk-note-badge bk-note-badge--delete\" onClick={clear}>\n {computed(() => messages.value.deleteNote || 'Delete')}\n </button>\n </div>\n </div>\n );\n\n return (\n <aside\n class=\"bk-notes-panel\"\n style={computed(() => props.store.showNotes.value ? 'display:flex;' : 'display:none;')}\n aria-label={computed(() => messages.value.notes || 'Page note')}\n >\n <div class=\"bk-notes-heading-row\">\n <div class=\"bk-notes-heading\">{computed(() => messages.value.notes || 'Page note')}</div>\n <button type=\"button\" class=\"bk-notes-close\" onClick={props.onClose} aria-label={computed(() => messages.value.closeNote || 'Close note editor')} title={computed(() => messages.value.closeNote || 'Close note editor')}>\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n {computed(() => currentNote.value && !editing.value ? renderSavedNote() : renderEditor())}\n </aside>\n );\n}\n","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { computed, signal } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookHotspot, FlipbookHotspotMedia } from '../model/hotspots';\nimport type { FlipbookAnnotation } from '../model/annotations';\nimport type { FlipbookStore } from '../state/store';\n\ninterface HotspotLayerProps {\n store: FlipbookStore;\n pageIndex: number;\n onActivate: (hotspot: FlipbookHotspot) => void;\n onClose: () => void;\n onAnnotationActivate: (annotation: FlipbookAnnotation) => void;\n onAnnotationClose: () => void;\n}\n\nfunction renderMedia(media: FlipbookHotspotMedia, fallbackLabel: string) {\n if (media.type === 'image') {\n return <img class=\"bk-hotspot-media-image\" src={media.src} alt={media.alt || ''} loading=\"lazy\" />;\n }\n if (media.type === 'video') {\n return <video class=\"bk-hotspot-media-video\" controls preload=\"metadata\" poster={media.poster} aria-label={media.alt || fallbackLabel}><source src={media.src} /></video>;\n }\n return <audio class=\"bk-hotspot-media-audio\" controls preload=\"metadata\" aria-label={media.alt || fallbackLabel}><source src={media.src} /></audio>;\n}\n\nfunction stopPageFlipInteraction(event: Event): void {\r\n // Keep popup/media gestures from reaching page-flip listeners. Do not preventDefault:\r\n // media controls and native scrolling must remain usable.\r\n event.stopPropagation();\r\n}\r\n\r\nfunction normalizedRectStyle(hotspot: FlipbookHotspot): string {\n const clamp = (value: number) => Math.max(0, Math.min(1, value)) * 100;\n return 'left:' + clamp(hotspot.x) + '%;top:' + clamp(hotspot.y) + '%;width:' + clamp(hotspot.width) + '%;height:' + clamp(hotspot.height) + '%;';\n}\n\nexport function HotspotLayer(props: HotspotLayerProps) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n const hotspots = computed(() => props.store.hotspots.value.filter((item) => item.pageIndex === props.pageIndex));\n const annotations = computed(() => props.store.annotations.value.filter((item) => item.pageIndex === props.pageIndex));\n const activeGalleryIndex = signal(0);\n return (\n <div class=\"bk-hotspot-layer\">\n {hotspots.value.map((hotspot) => (\n <button type=\"button\" class=\"bk-hotspot\" style={normalizedRectStyle(hotspot)} aria-label={hotspot.label} onClick={() => { activeGalleryIndex.value = 0; props.onActivate(hotspot); }}>\n <span class=\"bk-hotspot-label\">{hotspot.label}</span>\n </button>\n ))}\n {annotations.value.map((annotation) => (\n <button type=\"button\" class=\"bk-annotation-marker\" style={'left:' + Math.max(0, Math.min(1, annotation.x)) * 100 + '%;top:' + Math.max(0, Math.min(1, annotation.y)) * 100 + '%;' + (annotation.color ? 'color:' + annotation.color + ';' : '')} aria-label={annotation.text} onClick={() => props.onAnnotationActivate(annotation)}>●</button>\n ))}\n {computed(() => {\n const active = props.store.hotspots.value.find((item) => item.id === props.store.activeHotspotId.value && item.pageIndex === props.pageIndex);\n if (!active) return null;\n const gallery = active.gallery || [];\n const selectedIndex = gallery.length ? Math.min(activeGalleryIndex.value, gallery.length - 1) : 0;\n const selectedGalleryItem = gallery[selectedIndex];\n return (\n <div class=\"bk-hotspot-popup\" onPointerDown={stopPageFlipInteraction} onPointerMove={stopPageFlipInteraction} onPointerUp={stopPageFlipInteraction} onPointerCancel={stopPageFlipInteraction} onTouchStart={stopPageFlipInteraction} onTouchMove={stopPageFlipInteraction} onTouchEnd={stopPageFlipInteraction} onMouseDown={stopPageFlipInteraction} role=\"dialog\" aria-label={active.label}>\n <div class=\"bk-hotspot-popup-heading\"><strong>{active.label}</strong><button type=\"button\" class=\"bk-hotspot-popup-close\" onClick={props.onClose} aria-label={computed(() => messages.value.closeHotspot || 'Close popup')}>×</button></div>\n {active.content ? <p>{active.content}</p> : null}\n {active.media ? <div class=\"bk-hotspot-popup-media\">{renderMedia(active.media, active.label)}</div> : null}\n {selectedGalleryItem ? (\n <div class=\"bk-hotspot-gallery\" aria-label={active.label + ' gallery'}>\n <div class=\"bk-hotspot-gallery-thumbs\">\n {gallery.map((item, index) => (\n <button type=\"button\" class={computed(() => 'bk-hotspot-gallery-thumb' + (index === selectedIndex ? ' is-selected' : ''))} onClick={() => { activeGalleryIndex.value = index; }} aria-label={item.alt || 'Gallery image ' + (index + 1)} aria-pressed={computed(() => index === selectedIndex ? 'true' : 'false')}>\n <img src={item.src} alt={item.alt || ''} loading=\"lazy\" />\n </button>\n ))}\n </div>\n {selectedGalleryItem.href ? (\n <a href={selectedGalleryItem.href} target={selectedGalleryItem.target || '_blank'} rel=\"noopener noreferrer\"><img class=\"bk-hotspot-gallery-selected\" src={selectedGalleryItem.src} alt={selectedGalleryItem.alt || ''} /></a>\n ) : <img class=\"bk-hotspot-gallery-selected\" src={selectedGalleryItem.src} alt={selectedGalleryItem.alt || ''} />}\n </div>\n ) : null}\n {active.href ? <a class=\"bk-hotspot-link\" href={active.href} target={active.target || '_blank'} rel=\"noopener noreferrer\">{active.kind === 'commerce' ? active.label : active.href}</a> : null}\n </div>\n );\n })}\n {computed(() => {\n const active = props.store.annotations.value.find((item) => item.id === props.store.activeAnnotationId.value && item.pageIndex === props.pageIndex);\n if (!active) return null;\n return (\n <div class=\"bk-annotation-popup\" onPointerDown={stopPageFlipInteraction} onPointerMove={stopPageFlipInteraction} onPointerUp={stopPageFlipInteraction} onPointerCancel={stopPageFlipInteraction} onTouchStart={stopPageFlipInteraction} onTouchMove={stopPageFlipInteraction} onTouchEnd={stopPageFlipInteraction} onMouseDown={stopPageFlipInteraction} role=\"dialog\" aria-label={computed(() => messages.value.annotation || 'Page annotation')}>\n <div class=\"bk-hotspot-popup-heading\"><strong>{computed(() => messages.value.annotation || 'Page annotation')}</strong><button type=\"button\" class=\"bk-hotspot-popup-close\" onClick={props.onAnnotationClose} aria-label=\"Close\">×</button></div>\n <p>{active.text}</p>\n </div>\n );\n })}\n </div>\n );\n}\r\n","/**\r\n * @license FlipbookEngine v1.0.0\r\n * Copyright (c) 2026 Murat Dogan\r\n *\r\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\r\n *\r\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\r\n * under the terms of the GNU Affero General Public License v3.0.\r\n *\r\n * 2. Commercial License: If you wish to use this software in commercial,\r\n * closed-source, or SaaS products without the AGPLv3 obligations,\r\n * you must purchase a Commercial License from:\r\n * https://flipbookengine.com/pricing\r\n */\r\n\r\n\r\nimport { computed } from '@preact/signals-core';\r\nimport type { FlipbookStore } from '../state/store';\nimport { HotspotLayer } from './HotspotLayer';\nimport type { FlipbookHotspot } from '../model/hotspots';\nimport type { FlipbookAnnotation } from '../model/annotations';\r\n\r\ninterface ViewerProps {\r\n store: FlipbookStore;\r\n bookWrapperRef: (el: HTMLElement) => void;\r\n bookSizerRef: (el: HTMLElement) => void;\r\n bookContainerRef: (el: HTMLElement) => void;\n onHotspotActivate: (hotspot: FlipbookHotspot) => void;\n onHotspotClose: () => void;\n onAnnotationActivate: (annotation: FlipbookAnnotation) => void;\n onAnnotationClose: () => void;\r\n}\r\n\r\n\nfunction SearchHighlightLayer(props: { store: FlipbookStore; pageIndex: number }) {\n const highlights = computed(() => props.store.searchResults.value\n .filter((result) => result.pageIndex === props.pageIndex)\n .flatMap((result) => result.highlights ?? []));\n return (\n <div class=\"bk-search-highlight-layer\" aria-hidden=\"true\">\n {computed(() => (\n <div class=\"bk-search-highlight-items\">\n {highlights.value.map((highlight) => (\n <span class=\"bk-search-text-highlight\" style={'left:' + (highlight.x * 100) + '%;top:' + (highlight.y * 100) + '%;width:' + (highlight.width * 100) + '%;height:' + (highlight.height * 100) + '%;'} />\n ))}\n </div>\n ))}\n </div>\n );\n}\n\nexport function Viewer(props: ViewerProps) {\r\n return (\r\n <div\r\n role=\"region\"\r\n aria-label=\"Flipbook viewer\"\r\n class={computed(() => {\r\n let classes = 'bk-book-wrapper ';\r\n if (props.store.isDoublePageLayout.value) classes += 'double-mode ';\r\n if (props.store.isFrontCover.value) classes += 'bk-is-cover ';\r\n if (props.store.isBackCover.value) classes += 'bk-is-back-cover ';\r\n if (props.store.zoomState.value.isActive) classes += 'zoomed ';\r\n return classes.trim();\r\n })}\r\n ref={props.bookWrapperRef}\r\n >\r\n <div\r\n class=\"bk-book-sizer\"\r\n ref={props.bookSizerRef}\r\n >\r\n <div\r\n ref={props.bookContainerRef}\r\n class={computed(() => 'bk-book ' + (props.store.flipState.value !== 'read' ? 'is-flipping' : ''))}\r\n style={computed(() => `display: ${props.store.isSingleMode.value ? 'none' : 'block'};`)}\r\n >\r\n {props.store.pages.value.map((page, index) => {\r\n const isHard = index === 0 || index === props.store.pages.value.length - 1;\r\n\r\n return (\r\n <div\r\n // @ts-ignore\r\n class={computed(() => `bz-page ${index === 0 ? 'bz-page--cover' : ''} ${index === props.store.pages.value.length - 1 ? 'bz-page--back' : ''}`)}\r\n data-density={isHard ? \"hard\" : \"soft\"}\r\n data-idx={index}\r\n >\r\n <div class=\"bz-page-content\" style=\"position:relative; width:100%; height:100%; overflow:hidden;\">\r\n <img\r\n data-pdf-page={page.assetId.startsWith('pdf-page-') ? (page.sourcePageNumber ?? page.pageNumber) : undefined}\r\n src={page.low || page.normal}\r\n data-src={page.normal}\r\n class={`page-content ${page.cropMode !== 'full' ? 'page-content--split page-content--' + page.cropMode : ''}`}\r\n alt={`Page ${index + 1}`}\r\n loading=\"lazy\"\r\n />\r\n <SearchHighlightLayer store={props.store} pageIndex={index} />\n <HotspotLayer store={props.store} pageIndex={index} onActivate={props.onHotspotActivate} onClose={props.onHotspotClose} onAnnotationActivate={props.onAnnotationActivate} onAnnotationClose={props.onAnnotationClose} />\n <div class=\"page-shadow\"></div>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n\r\n <div\r\n class=\"bk-single-view\"\r\n style={computed(() => `display: ${props.store.isSingleMode.value ? 'flex' : 'none'}; width: 100%; height: 100%; justify-content: center; align-items: center; position: absolute; top: 0; left: 0; z-index: 10;`)}\r\n >\r\n {computed(() => {\r\n const page = props.store.pages.value[props.store.currentPage.value];\r\n if (!page) return null;\r\n return (\r\n <div class=\"bk-single-page\">\n <img\n data-pdf-page={page.assetId.startsWith('pdf-page-') ? (page.sourcePageNumber ?? page.pageNumber) : undefined}\n class={computed(() => `bk-single-img page-content ${page.cropMode !== 'full' ? 'page-content--split page-content--' + page.cropMode : ''}`)}\n src={props.store.zoomState.value.isActive ? page.normal : (page.low || page.normal)}\n alt={`Page ${props.store.currentPage.value + 1}`}\n style=\"opacity: 1; transition: opacity 0.3s; box-shadow: var(--flipbook-shadow);\"\n />\n <SearchHighlightLayer store={props.store} pageIndex={props.store.currentPage.value} />\n </div>\n );\r\n })}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n","/**\r\n * @license FlipbookEngine v1.0.0\r\n * Copyright (c) 2026 Murat Dogan\r\n *\r\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\r\n */\r\n\r\n\r\nimport { computed } from '@preact/signals-core';\r\nimport type { FlipbookStore } from '../state/store';\r\n\r\ninterface NavigationArrowsProps {\r\n store: FlipbookStore;\r\n onPrevPage: () => void;\r\n onNextPage: () => void;\r\n}\r\n\r\nexport function NavigationArrows(props: NavigationArrowsProps) {\r\n const isLeftVisible = computed(() => {\r\n return props.store.showArrows.value && props.store.currentPage.value > 0;\r\n });\r\n\r\n const isRightVisible = computed(() => {\r\n if (!props.store.showArrows.value || props.store.totalPages.value <= 1) return false;\r\n // If double page layout, the last visible spread starts at totalPages - 2 (if even) or totalPages - 1 (if odd)\r\n // A simple check: if current page is the last page, hide it.\r\n return props.store.currentPage.value < props.store.totalPages.value - 1;\r\n });\r\n\r\n return (\r\n <div class=\"bk-nav-arrows\" style={computed(() => props.store.showArrows.value ? 'display: flex;' : 'display: none;')}>\r\n <button type=\"button\"\r\n class=\"bk-nav-arrow bk-nav-prev\"\r\n style={computed(() => isLeftVisible.value ? 'visibility: visible;' : 'visibility: hidden;')}\r\n onClick={(e: Event) => { e.preventDefault(); props.onPrevPage(); }}\r\n aria-label=\"Previous Page\"\r\n >\r\n <div class=\"bk-arrow-icon bk-arrow-left\"></div>\r\n </button>\r\n <button type=\"button\"\r\n class=\"bk-nav-arrow bk-nav-next\"\r\n style={computed(() => isRightVisible.value ? 'visibility: visible;' : 'visibility: hidden;')}\r\n onClick={(e: Event) => { e.preventDefault(); props.onNextPage(); }}\r\n aria-label=\"Next Page\"\r\n >\r\n <div class=\"bk-arrow-icon bk-arrow-right\"></div>\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\n","import { computed, signal } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookStore } from '../state/store';\n\ninterface SearchPanelProps {\n store: FlipbookStore;\n onSearch: (query: string) => void;\n onClear: () => void;\n onClose: () => void;\n onSelect: (pageIndex: number) => void;\n}\n\nexport function SearchPanel(props: SearchPanelProps) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n const inputRef = { current: null as HTMLInputElement | null };\n const query = signal('');\n const submit = () => {\n const value = inputRef.current?.value ?? query.value;\n query.value = value;\n props.onSearch(value);\n };\n const clear = () => {\n if (inputRef.current) inputRef.current.value = '';\n query.value = '';\n props.onClear();\n };\n return (\n <section class=\"bk-search-panel\" style={computed(() => props.store.showSearch.value ? 'display:flex;' : 'display:none;')} aria-label={computed(() => messages.value.search || 'Search')}>\n <div class=\"bk-search-heading-row\">\n <strong class=\"bk-search-heading\">{computed(() => messages.value.search || 'Search')}</strong>\n <button type=\"button\" class=\"bk-search-close\" onClick={props.onClose} aria-label={computed(() => messages.value.closeSearch || 'Close search')}>×</button>\n </div>\n <div class=\"bk-search-form\">\n <input ref={(el) => { inputRef.current = el; }} class=\"bk-search-input\" type=\"search\" placeholder={computed(() => messages.value.searchPlaceholder || 'Search PDF text')} value={computed(() => props.store.searchQuery.value)} onInput={(event) => { query.value = (event.currentTarget as HTMLInputElement).value; }} onKeyDown={(event) => { if (event.key === 'Enter') submit(); }} />\n <button type=\"button\" class=\"bk-search-submit\" onClick={submit}>{computed(() => messages.value.search || 'Search')}</button>\n <button type=\"button\" class=\"bk-search-clear\" onClick={clear}>{computed(() => messages.value.clearSearch || 'Clear')}</button>\n </div>\n <div class=\"bk-search-results\" aria-live=\"polite\">\n {computed(() => {\n const results = props.store.searchResults.value;\n if (!props.store.searchQuery.value) return null;\n if (!results.length) return <div class=\"bk-search-empty\">{messages.value.noSearchResults || 'No results'}</div>;\n return <div class=\"bk-search-result-list\">\n {results.map((result) => (\n <button type=\"button\" class=\"bk-search-result\" onClick={() => props.onSelect(result.pageIndex)}>\n <span class=\"bk-search-result-page\">{result.pageNumber}</span>\n <span class=\"bk-search-result-text\">{result.snippet}</span>\n <span class=\"bk-search-result-count\">{result.matches}</span>\n </button>\n ))}\n </div>;\n })}\n </div>\n </section>\n );\n}\n","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { computed } from '@preact/signals-core';\nimport type { FlipbookPluginPanel, FlipbookPluginRegistry } from '../plugins';\n\nfunction PluginPanelHost(props: { panel: FlipbookPluginPanel; panelKey: string; registry: FlipbookPluginRegistry }) {\n let cleanup: (() => void) | undefined;\n const mount = (element: HTMLElement | null) => {\n cleanup?.();\n cleanup = undefined;\n if (element) cleanup = props.panel.render(element) || undefined;\n };\n\n return (\n <section\n class={computed(() => `bk-plugin-panel ${props.registry.activePanelId.value === props.panelKey ? 'is-open' : ''}`)}\n aria-hidden={computed(() => props.registry.activePanelId.value === props.panelKey ? 'false' : 'true')}\n aria-label={props.panel.title || props.panel.id}\n >\n <div class=\"bk-plugin-panel-content\" ref={mount}></div>\n </section>\n );\n}\n\nexport function PluginPanels(props: { registry: FlipbookPluginRegistry }) {\n const panels = props.registry.getPanels();\n\n return (\n <div class=\"bk-plugin-panels\">\n {panels.map((panel) => <PluginPanelHost panel={panel} panelKey={panel.key} registry={props.registry} />)}\n </div>\n );\n}\n\n","import { computed } from '@preact/signals-core';\n/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n *\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\n *\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\n * under the terms of the GNU Affero General Public License v3.0.\n *\n * 2. Commercial License: If you wish to use this software in commercial,\n * closed-source, or SaaS products without the AGPLv3 obligations,\n * you must purchase a Commercial License from:\n * https://flipbookengine.com/pricing\n */\n\n\nimport { Toolbar } from './Toolbar';\nimport { Thumbnails } from './Thumbnails';\nimport { TableOfContents } from './TableOfContents';\nimport { NotesPanel } from './NotesPanel';\nimport { Viewer } from './Viewer';\nimport { NavigationArrows } from './NavigationArrows';\nimport { SearchPanel } from './SearchPanel';\nimport { PluginPanels } from './PluginPanels';\nimport type { FlipbookSearchOptions } from '../model/search';\nimport type { FlipbookHotspot } from '../model/hotspots';\nimport type { FlipbookAnnotation } from '../model/annotations';\nimport type { FlipbookStore } from '../state/store';\nimport type { PageFlipAdapter } from '../adapters/PageFlipAdapter';\nimport type { InteractionManager } from '../core/InteractionManager';\nimport type { FlipbookPluginRegistry } from '../plugins';\n\ninterface AppProps {\n pageFlipAdapterRef: { current: PageFlipAdapter | null };\n interactionManagerRef: { current: InteractionManager | null };\n bookWrapperRef: (el: HTMLElement) => void;\n bookSizerRef: (el: HTMLElement) => void;\n bookContainerRef: (el: HTMLElement) => void;\n className?: string;\n onDownload: () => void;\n onShare: () => void;\n onToggleBookmark: () => void;\n onToggleNotes: () => void;\n onSaveNote: (note: string) => void;\n onClearNote: () => void;\n onCloseNotes: () => void;\n onSearch: (query: string, options?: FlipbookSearchOptions) => void;\n onClearSearch: () => void;\n onCloseSearch: () => void;\n onSelectSearchResult: (pageIndex: number) => void;\n onHotspotActivate: (hotspot: FlipbookHotspot) => void;\n onHotspotClose: () => void;\n onAnnotationActivate: (annotation: FlipbookAnnotation) => void;\n onAnnotationClose: () => void;\n onToggleFullscreen: () => void;\n store: FlipbookStore;\n pluginRegistry?: FlipbookPluginRegistry;\n}\n\nexport function App(props: AppProps) {\n const handleToggleThumbs = () => {\n props.store.showThumbs.value = !props.store.showThumbs.value;\n };\n\n const handleToggleToc = () => {\n props.store.showToc.value = !props.store.showToc.value;\n };\n\n const handleToggleNotes = () => {\n props.onToggleNotes();\n };\n\n const handleToggleSingleMode = () => {\n props.store.isSingleMode.value = !props.store.isSingleMode.value;\n };\n\n const handleToggleAutoPlay = () => {\n props.store.isAutoPlaying.value = !props.store.isAutoPlaying.value;\n };\n\n const handleZoomIn = () => {\n props.interactionManagerRef.current?.zoomIn();\n };\n\n const handleZoomOut = () => {\n props.interactionManagerRef.current?.zoomOut();\n };\n\n const handleToggleFullscreen = () => props.onToggleFullscreen();\n const handleTocEntryClick = (pageIndex: number) => {\n props.store.currentPage.value = pageIndex;\n props.store.showToc.value = false;\n };\n\n const handleThumbClick = (index: number) => {\n if (props.store.currentPage.value !== index) {\n props.store.currentPage.value = index;\n props.pageFlipAdapterRef.current?.playSound();\n }\n };\n\n const handleNextPage = () => {\n props.pageFlipAdapterRef.current?.turnToNextPage();\n };\n\n const handlePrevPage = () => {\n props.pageFlipAdapterRef.current?.turnToPrevPage();\n };\n\n return (\n <div\n class={computed(() => `bk-wrapper bk-theme-${props.store.themeMode.value} ${props.className || ''}`)}\n >\n <div class=\"bk-main-area\">\n <Viewer store={props.store}\n bookWrapperRef={props.bookWrapperRef}\n bookSizerRef={props.bookSizerRef}\n bookContainerRef={props.bookContainerRef}\n onHotspotActivate={props.onHotspotActivate}\n onHotspotClose={props.onHotspotClose}\n onAnnotationActivate={props.onAnnotationActivate}\n onAnnotationClose={props.onAnnotationClose}\n />\n\n <NavigationArrows store={props.store}\n onPrevPage={handlePrevPage}\n onNextPage={handleNextPage}\n />\n\n {!props.store.whiteLabel.value ? (\n <div class=\"bk-watermark\">\n Powered by <a href=\"https://flipbookengine.com\" target=\"_blank\" rel=\"noopener\" style=\"text-decoration: underline;\">FlipbookEngine</a>\n </div>\n ) : null}\n <TableOfContents store={props.store} onEntryClick={handleTocEntryClick} />\n <SearchPanel store={props.store} onSearch={props.onSearch} onClear={props.onClearSearch} onClose={props.onCloseSearch} onSelect={props.onSelectSearchResult} />\n <NotesPanel store={props.store} onSave={props.onSaveNote} onClear={props.onClearNote} onClose={props.onCloseNotes} />\n {props.pluginRegistry ? <PluginPanels registry={props.pluginRegistry} /> : null}\n </div>\n\n <Toolbar store={props.store}\n onToggleThumbs={handleToggleThumbs}\n onToggleToc={handleToggleToc}\n onToggleSearch={() => props.store.showSearch.value = !props.store.showSearch.value}\n onToggleSingleMode={handleToggleSingleMode}\n onZoomIn={handleZoomIn}\n onZoomOut={handleZoomOut}\n onDownload={props.onDownload}\n onShare={props.onShare}\n onToggleBookmark={props.onToggleBookmark}\n onToggleNotes={handleToggleNotes}\n onNextPage={handleNextPage}\n onPrevPage={handlePrevPage}\n onSoundToggle={() => props.store.soundEnabled.value = !props.store.soundEnabled.value}\n onToggleAutoPlay={handleToggleAutoPlay}\n onToggleFullscreen={handleToggleFullscreen}\n pluginRegistry={props.pluginRegistry}\n />\n\n <Thumbnails store={props.store}\n onThumbClick={handleThumbClick}\n />\n </div>\n );\n}\n\n\n\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],e):e((t=t||self).St={})}(this,(function(t){\"use strict\";class e{constructor(t,e){this.state={angle:0,area:[],position:{x:0,y:0},hardAngle:0,hardDrawingAngle:0},this.createdDensity=e,this.nowDrawingDensity=this.createdDensity,this.render=t}setDensity(t){this.createdDensity=t,this.nowDrawingDensity=t}setDrawingDensity(t){this.nowDrawingDensity=t}setPosition(t){this.state.position=t}setAngle(t){this.state.angle=t}setArea(t){this.state.area=t}setHardDrawingAngle(t){this.state.hardDrawingAngle=t}setHardAngle(t){this.state.hardAngle=t,this.state.hardDrawingAngle=t}setOrientation(t){this.orientation=t}getDrawingDensity(){return this.nowDrawingDensity}getDensity(){return this.createdDensity}getHardAngle(){return this.state.hardAngle}}class i extends e{constructor(t,e,i){super(t,i),this.image=null,this.isLoad=!1,this.loadingAngle=0,this.image=new Image,this.image.src=e}draw(t){const e=this.render.getContext(),i=this.render.convertToGlobal(this.state.position),s=this.render.getRect().pageWidth,n=this.render.getRect().height;e.save(),e.translate(i.x,i.y),e.beginPath();for(let t of this.state.area)null!==t&&(t=this.render.convertToGlobal(t),e.lineTo(t.x-i.x,t.y-i.y));e.rotate(this.state.angle),e.clip(),this.isLoad?e.drawImage(this.image,0,0,s,n):this.drawLoader(e,{x:0,y:0},s,n),e.restore()}simpleDraw(t){const e=this.render.getRect(),i=this.render.getContext(),s=e.pageWidth,n=e.height,h=1===t?e.left+e.pageWidth:e.left,r=e.top;this.isLoad?i.drawImage(this.image,h,r,s,n):this.drawLoader(i,{x:h,y:r},s,n)}drawLoader(t,e,i,s){t.beginPath(),t.strokeStyle=\"rgb(200, 200, 200)\",t.fillStyle=\"rgb(255, 255, 255)\",t.lineWidth=1,t.rect(e.x+1,e.y+1,i-1,s-1),t.stroke(),t.fill();const n={x:e.x+i/2,y:e.y+s/2};t.beginPath(),t.lineWidth=10,t.arc(n.x,n.y,20,this.loadingAngle,3*Math.PI/2+this.loadingAngle),t.stroke(),t.closePath(),this.loadingAngle+=.07,this.loadingAngle>=2*Math.PI&&(this.loadingAngle=0)}load(){this.isLoad||(this.image.onload=()=>{this.isLoad=!0})}newTemporaryCopy(){return this}getTemporaryCopy(){return this}hideTemporaryCopy(){}}class s{constructor(t,e){this.pages=[],this.currentPageIndex=0,this.currentSpreadIndex=0,this.landscapeSpread=[],this.portraitSpread=[],this.render=e,this.app=t,this.currentPageIndex=0,this.isShowCover=this.app.getSettings().showCover}destroy(){this.pages=[]}createSpread(){this.landscapeSpread=[],this.portraitSpread=[];for(let t=0;t<this.pages.length;t++)this.portraitSpread.push([t]);let t=0;this.isShowCover&&(this.pages[0].setDensity(\"hard\"),this.landscapeSpread.push([t]),t++);for(let e=t;e<this.pages.length;e+=2)e<this.pages.length-1?this.landscapeSpread.push([e,e+1]):(this.landscapeSpread.push([e]),this.pages[e].setDensity(\"hard\"))}getSpread(){return\"landscape\"===this.render.getOrientation()?this.landscapeSpread:this.portraitSpread}getSpreadIndexByPage(t){const e=this.getSpread();for(let i=0;i<e.length;i++)if(t===e[i][0]||t===e[i][1])return i;return null}getPageCount(){return this.pages.length}getPages(){return this.pages}getPage(t){if(t>=0&&t<this.pages.length)return this.pages[t];throw new Error(\"Invalid page number\")}nextBy(t){const e=this.pages.indexOf(t);return e<this.pages.length-1?this.pages[e+1]:null}prevBy(t){const e=this.pages.indexOf(t);return e>0?this.pages[e-1]:null}getFlippingPage(t){const e=this.currentSpreadIndex;if(\"portrait\"===this.render.getOrientation())return 0===t?this.pages[e].newTemporaryCopy():this.pages[e-1];{const i=0===t?this.getSpread()[e+1]:this.getSpread()[e-1];return 1===i.length||0===t?this.pages[i[0]]:this.pages[i[1]]}}getBottomPage(t){const e=this.currentSpreadIndex;if(\"portrait\"===this.render.getOrientation())return 0===t?this.pages[e+1]:this.pages[e-1];{const i=0===t?this.getSpread()[e+1]:this.getSpread()[e-1];return 1===i.length?this.pages[i[0]]:0===t?this.pages[i[1]]:this.pages[i[0]]}}showNext(){this.currentSpreadIndex<this.getSpread().length&&(this.currentSpreadIndex++,this.showSpread())}showPrev(){this.currentSpreadIndex>0&&(this.currentSpreadIndex--,this.showSpread())}getCurrentPageIndex(){return this.currentPageIndex}show(t=null){if(null===t&&(t=this.currentPageIndex),t<0||t>=this.pages.length)return;const e=this.getSpreadIndexByPage(t);null!==e&&(this.currentSpreadIndex=e,this.showSpread())}getCurrentSpreadIndex(){return this.currentSpreadIndex}setCurrentSpreadIndex(t){if(!(t>=0&&t<this.getSpread().length))throw new Error(\"Invalid page\");this.currentSpreadIndex=t}showSpread(){const t=this.getSpread()[this.currentSpreadIndex];2===t.length?(this.render.setLeftPage(this.pages[t[0]]),this.render.setRightPage(this.pages[t[1]])):\"landscape\"===this.render.getOrientation()&&t[0]===this.pages.length-1?(this.render.setLeftPage(this.pages[t[0]]),this.render.setRightPage(null)):(this.render.setLeftPage(null),this.render.setRightPage(this.pages[t[0]])),this.currentPageIndex=t[0],this.app.updatePageIndex(this.currentPageIndex)}}class n extends s{constructor(t,e,i){super(t,e),this.imagesHref=i}load(){for(const t of this.imagesHref){const e=new i(this.render,t,\"soft\");e.load(),this.pages.push(e)}this.createSpread()}}class h{static GetDistanceBetweenTwoPoint(t,e){return null===t||null===e?1/0:Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}static GetSegmentLength(t){return h.GetDistanceBetweenTwoPoint(t[0],t[1])}static GetAngleBetweenTwoLine(t,e){const i=t[0].y-t[1].y,s=e[0].y-e[1].y,n=t[1].x-t[0].x,h=e[1].x-e[0].x;return Math.acos((i*s+n*h)/(Math.sqrt(i*i+n*n)*Math.sqrt(s*s+h*h)))}static PointInRect(t,e){return null===e?null:e.x>=t.left&&e.x<=t.width+t.left&&e.y>=t.top&&e.y<=t.top+t.height?e:null}static GetRotatedPoint(t,e,i){return{x:t.x*Math.cos(i)+t.y*Math.sin(i)+e.x,y:t.y*Math.cos(i)-t.x*Math.sin(i)+e.y}}static LimitPointToCircle(t,e,i){if(h.GetDistanceBetweenTwoPoint(t,i)<=e)return i;const s=t.x,n=t.y,r=i.x,o=i.y;let a=Math.sqrt(Math.pow(e,2)*Math.pow(s-r,2)/(Math.pow(s-r,2)+Math.pow(n-o,2)))+s;i.x<0&&(a*=-1);let g=(a-s)*(n-o)/(s-r)+n;return s-r+n===0&&(g=e),{x:a,y:g}}static GetIntersectBetweenTwoSegment(t,e,i){return h.PointInRect(t,h.GetIntersectBeetwenTwoLine(e,i))}static GetIntersectBeetwenTwoLine(t,e){const i=t[0].y-t[1].y,s=e[0].y-e[1].y,n=t[1].x-t[0].x,h=e[1].x-e[0].x,r=t[0].x*t[1].y-t[1].x*t[0].y,o=e[0].x*e[1].y-e[1].x*e[0].y,a=i*o-s*r,g=n*o-h*r,l=-(r*h-o*n)/(i*h-s*n),d=-(i*o-s*r)/(i*h-s*n);if(isFinite(l)&&isFinite(d))return{x:l,y:d};if(Math.abs(a-g)<.1)throw new Error(\"Segment included\");return null}static GetCordsFromTwoPoint(t,e){const i=Math.abs(t.x-e.x),s=Math.abs(t.y-e.y),n=Math.max(i,s),h=[t];function r(t,e,i,s,n){return e>t?t+n*(i/s):e<t?t-n*(i/s):t}for(let o=1;o<=n;o+=1)h.push({x:r(t.x,e.x,i,n,o),y:r(t.y,e.y,s,n,o)});return h}}class r extends e{constructor(t,e,i){super(t,i),this.copiedElement=null,this.temporaryCopy=null,this.isLoad=!1,this.element=e,this.element.classList.add(\"stf__item\"),this.element.classList.add(\"--\"+i)}newTemporaryCopy(){return\"hard\"===this.nowDrawingDensity?this:(null===this.temporaryCopy&&(this.copiedElement=this.element.cloneNode(!0),this.element.parentElement.appendChild(this.copiedElement),this.temporaryCopy=new r(this.render,this.copiedElement,this.nowDrawingDensity)),this.getTemporaryCopy())}getTemporaryCopy(){return this.temporaryCopy}hideTemporaryCopy(){null!==this.temporaryCopy&&(this.copiedElement.remove(),this.copiedElement=null,this.temporaryCopy=null)}draw(t){const e=t||this.nowDrawingDensity,i=this.render.convertToGlobal(this.state.position),s=this.render.getRect().pageWidth,n=this.render.getRect().height;this.element.classList.remove(\"--simple\");const h=`\\n display: block;\\n z-index: ${this.element.style.zIndex};\\n left: 0;\\n top: 0;\\n width: ${s}px;\\n height: ${n}px;\\n `;\"hard\"===e?this.drawHard(h):this.drawSoft(i,h)}drawHard(t=\"\"){const e=this.render.getRect().left+this.render.getRect().width/2,i=this.state.hardDrawingAngle,s=t+\"\\n backface-visibility: hidden;\\n -webkit-backface-visibility: hidden;\\n clip-path: none;\\n -webkit-clip-path: none;\\n \"+(0===this.orientation?`transform-origin: ${this.render.getRect().pageWidth}px 0; \\n transform: translate3d(0, 0, 0) rotateY(${i}deg);`:`transform-origin: 0 0; \\n transform: translate3d(${e}px, 0, 0) rotateY(${i}deg);`);this.element.style.cssText=s}drawSoft(t,e=\"\"){let i=\"polygon( \";for(const t of this.state.area)if(null!==t){let e=1===this.render.getDirection()?{x:-t.x+this.state.position.x,y:t.y-this.state.position.y}:{x:t.x-this.state.position.x,y:t.y-this.state.position.y};e=h.GetRotatedPoint(e,{x:0,y:0},this.state.angle),i+=e.x+\"px \"+e.y+\"px, \"}i=i.slice(0,-2),i+=\")\";const s=e+`transform-origin: 0 0; clip-path: ${i}; -webkit-clip-path: ${i};`+(this.render.isSafari()&&0===this.state.angle?`transform: translate(${t.x}px, ${t.y}px);`:`transform: translate3d(${t.x}px, ${t.y}px, 0) rotate(${this.state.angle}rad);`);this.element.style.cssText=s}simpleDraw(t){const e=this.render.getRect(),i=e.pageWidth,s=e.height,n=1===t?e.left+e.pageWidth:e.left,h=e.top;this.element.classList.add(\"--simple\"),this.element.style.cssText=`\\n position: absolute; \\n display: block; \\n height: ${s}px; \\n left: ${n}px; \\n top: ${h}px; \\n width: ${i}px; \\n z-index: ${this.render.getSettings().startZIndex+1};`}getElement(){return this.element}load(){this.isLoad=!0}setOrientation(t){super.setOrientation(t),this.element.classList.remove(\"--left\",\"--right\"),this.element.classList.add(1===t?\"--right\":\"--left\")}setDrawingDensity(t){this.element.classList.remove(\"--soft\",\"--hard\"),this.element.classList.add(\"--\"+t),super.setDrawingDensity(t)}}class o extends s{constructor(t,e,i,s){super(t,e),this.element=i,this.pagesElement=s}load(){for(const t of this.pagesElement){const e=new r(this.render,t,\"hard\"===t.dataset.density?\"hard\":\"soft\");e.load(),this.pages.push(e)}this.createSpread()}}class a{constructor(t,e,i,s){this.direction=t,this.corner=e,this.topIntersectPoint=null,this.sideIntersectPoint=null,this.bottomIntersectPoint=null,this.pageWidth=parseInt(i,10),this.pageHeight=parseInt(s,10)}calc(t){try{return this.position=this.calcAngleAndPosition(t),this.calculateIntersectPoint(this.position),!0}catch(t){return!1}}getFlippingClipArea(){const t=[];let e=!1;return t.push(this.rect.topLeft),t.push(this.topIntersectPoint),null===this.sideIntersectPoint?e=!0:(t.push(this.sideIntersectPoint),null===this.bottomIntersectPoint&&(e=!1)),t.push(this.bottomIntersectPoint),(e||\"bottom\"===this.corner)&&t.push(this.rect.bottomLeft),t}getBottomClipArea(){const t=[];return t.push(this.topIntersectPoint),\"top\"===this.corner?t.push({x:this.pageWidth,y:0}):(null!==this.topIntersectPoint&&t.push({x:this.pageWidth,y:0}),t.push({x:this.pageWidth,y:this.pageHeight})),null!==this.sideIntersectPoint?h.GetDistanceBetweenTwoPoint(this.sideIntersectPoint,this.topIntersectPoint)>=10&&t.push(this.sideIntersectPoint):\"top\"===this.corner&&t.push({x:this.pageWidth,y:this.pageHeight}),t.push(this.bottomIntersectPoint),t.push(this.topIntersectPoint),t}getAngle(){return 0===this.direction?-this.angle:this.angle}getRect(){return this.rect}getPosition(){return this.position}getActiveCorner(){return 0===this.direction?this.rect.topLeft:this.rect.topRight}getDirection(){return this.direction}getFlippingProgress(){return Math.abs((this.position.x-this.pageWidth)/(2*this.pageWidth)*100)}getCorner(){return this.corner}getBottomPagePosition(){return 1===this.direction?{x:this.pageWidth,y:0}:{x:0,y:0}}getShadowStartPoint(){return\"top\"===this.corner?this.topIntersectPoint:null!==this.sideIntersectPoint?this.sideIntersectPoint:this.topIntersectPoint}getShadowAngle(){const t=h.GetAngleBetweenTwoLine(this.getSegmentToShadowLine(),[{x:0,y:0},{x:this.pageWidth,y:0}]);return 0===this.direction?t:Math.PI-t}calcAngleAndPosition(t){let e=t;if(this.updateAngleAndGeometry(e),e=\"top\"===this.corner?this.checkPositionAtCenterLine(e,{x:0,y:0},{x:0,y:this.pageHeight}):this.checkPositionAtCenterLine(e,{x:0,y:this.pageHeight},{x:0,y:0}),Math.abs(e.x-this.pageWidth)<1&&Math.abs(e.y)<1)throw new Error(\"Point is too small\");return e}updateAngleAndGeometry(t){this.angle=this.calculateAngle(t),this.rect=this.getPageRect(t)}calculateAngle(t){const e=this.pageWidth-t.x+1,i=\"bottom\"===this.corner?this.pageHeight-t.y:t.y;let s=2*Math.acos(e/Math.sqrt(i*i+e*e));i<0&&(s=-s);const n=Math.PI-s;if(!isFinite(s)||n>=0&&n<.003)throw new Error(\"The G point is too small\");return\"bottom\"===this.corner&&(s=-s),s}getPageRect(t){return\"top\"===this.corner?this.getRectFromBasePoint([{x:0,y:0},{x:this.pageWidth,y:0},{x:0,y:this.pageHeight},{x:this.pageWidth,y:this.pageHeight}],t):this.getRectFromBasePoint([{x:0,y:-this.pageHeight},{x:this.pageWidth,y:-this.pageHeight},{x:0,y:0},{x:this.pageWidth,y:0}],t)}getRectFromBasePoint(t,e){return{topLeft:this.getRotatedPoint(t[0],e),topRight:this.getRotatedPoint(t[1],e),bottomLeft:this.getRotatedPoint(t[2],e),bottomRight:this.getRotatedPoint(t[3],e)}}getRotatedPoint(t,e){return{x:t.x*Math.cos(this.angle)+t.y*Math.sin(this.angle)+e.x,y:t.y*Math.cos(this.angle)-t.x*Math.sin(this.angle)+e.y}}calculateIntersectPoint(t){const e={left:-1,top:-1,width:this.pageWidth+2,height:this.pageHeight+2};\"top\"===this.corner?(this.topIntersectPoint=h.GetIntersectBetweenTwoSegment(e,[t,this.rect.topRight],[{x:0,y:0},{x:this.pageWidth,y:0}]),this.sideIntersectPoint=h.GetIntersectBetweenTwoSegment(e,[t,this.rect.bottomLeft],[{x:this.pageWidth,y:0},{x:this.pageWidth,y:this.pageHeight}]),this.bottomIntersectPoint=h.GetIntersectBetweenTwoSegment(e,[this.rect.bottomLeft,this.rect.bottomRight],[{x:0,y:this.pageHeight},{x:this.pageWidth,y:this.pageHeight}])):(this.topIntersectPoint=h.GetIntersectBetweenTwoSegment(e,[this.rect.topLeft,this.rect.topRight],[{x:0,y:0},{x:this.pageWidth,y:0}]),this.sideIntersectPoint=h.GetIntersectBetweenTwoSegment(e,[t,this.rect.topLeft],[{x:this.pageWidth,y:0},{x:this.pageWidth,y:this.pageHeight}]),this.bottomIntersectPoint=h.GetIntersectBetweenTwoSegment(e,[this.rect.bottomLeft,this.rect.bottomRight],[{x:0,y:this.pageHeight},{x:this.pageWidth,y:this.pageHeight}]))}checkPositionAtCenterLine(t,e,i){let s=t;const n=h.LimitPointToCircle(e,this.pageWidth,s);s!==n&&(s=n,this.updateAngleAndGeometry(s));const r=Math.sqrt(Math.pow(this.pageWidth,2)+Math.pow(this.pageHeight,2));let o=this.rect.bottomRight,a=this.rect.topLeft;if(\"bottom\"===this.corner&&(o=this.rect.topRight,a=this.rect.bottomLeft),o.x<=0){const t=h.LimitPointToCircle(i,r,a);t!==s&&(s=t,this.updateAngleAndGeometry(s))}return s}getSegmentToShadowLine(){const t=this.getShadowStartPoint();return[t,t!==this.sideIntersectPoint&&null!==this.sideIntersectPoint?this.sideIntersectPoint:this.bottomIntersectPoint]}}class g{constructor(t,e){this.flippingPage=null,this.bottomPage=null,this.calc=null,this.state=\"read\",this.render=t,this.app=e}fold(t){this.setState(\"user_fold\"),null===this.calc&&this.start(t),this.do(this.render.convertToPage(t))}flip(t){if(this.app.getSettings().disableFlipByClick&&!this.isPointOnCorners(t))return;if(null!==this.calc&&this.render.finishAnimation(),!this.start(t))return;const e=this.getBoundsRect();this.setState(\"flipping\");const i=e.height/10,s=\"bottom\"===this.calc.getCorner()?e.height-i:i,n=\"bottom\"===this.calc.getCorner()?e.height:0;this.calc.calc({x:e.pageWidth-i,y:s}),this.animateFlippingTo({x:e.pageWidth-i,y:s},{x:-e.pageWidth,y:n},!0)}start(t){this.reset();const e=this.render.convertToBook(t),i=this.getBoundsRect(),s=this.getDirectionByPoint(e),n=e.y>=i.height/2?\"bottom\":\"top\";if(!this.checkDirection(s))return!1;try{if(this.flippingPage=this.app.getPageCollection().getFlippingPage(s),this.bottomPage=this.app.getPageCollection().getBottomPage(s),\"landscape\"===this.render.getOrientation())if(1===s){const t=this.app.getPageCollection().nextBy(this.flippingPage);null!==t&&this.flippingPage.getDensity()!==t.getDensity()&&(this.flippingPage.setDrawingDensity(\"hard\"),t.setDrawingDensity(\"hard\"))}else{const t=this.app.getPageCollection().prevBy(this.flippingPage);null!==t&&this.flippingPage.getDensity()!==t.getDensity()&&(this.flippingPage.setDrawingDensity(\"hard\"),t.setDrawingDensity(\"hard\"))}return this.render.setDirection(s),this.calc=new a(s,n,i.pageWidth.toString(10),i.height.toString(10)),!0}catch(t){return!1}}do(t){if(null!==this.calc&&this.calc.calc(t)){const t=this.calc.getFlippingProgress();this.bottomPage.setArea(this.calc.getBottomClipArea()),this.bottomPage.setPosition(this.calc.getBottomPagePosition()),this.bottomPage.setAngle(0),this.bottomPage.setHardAngle(0),this.flippingPage.setArea(this.calc.getFlippingClipArea()),this.flippingPage.setPosition(this.calc.getActiveCorner()),this.flippingPage.setAngle(this.calc.getAngle()),0===this.calc.getDirection()?this.flippingPage.setHardAngle(90*(200-2*t)/100):this.flippingPage.setHardAngle(-90*(200-2*t)/100),this.render.setPageRect(this.calc.getRect()),this.render.setBottomPage(this.bottomPage),this.render.setFlippingPage(this.flippingPage),this.render.setShadowData(this.calc.getShadowStartPoint(),this.calc.getShadowAngle(),t,this.calc.getDirection())}}flipToPage(t,e){const i=this.app.getPageCollection().getCurrentSpreadIndex(),s=this.app.getPageCollection().getSpreadIndexByPage(t);try{s>i&&(this.app.getPageCollection().setCurrentSpreadIndex(s-1),this.flipNext(e)),s<i&&(this.app.getPageCollection().setCurrentSpreadIndex(s+1),this.flipPrev(e))}catch(t){}}flipNext(t){this.flip({x:this.render.getRect().left+2*this.render.getRect().pageWidth-10,y:\"top\"===t?1:this.render.getRect().height-2})}flipPrev(t){this.flip({x:10,y:\"top\"===t?1:this.render.getRect().height-2})}stopMove(){if(null===this.calc)return;const t=this.calc.getPosition(),e=this.getBoundsRect(),i=\"bottom\"===this.calc.getCorner()?e.height:0;t.x<=0?this.animateFlippingTo(t,{x:-e.pageWidth,y:i},!0):this.animateFlippingTo(t,{x:e.pageWidth,y:i},!1)}showCorner(t){if(!this.checkState(\"read\",\"fold_corner\"))return;const e=this.getBoundsRect(),i=e.pageWidth;if(this.isPointOnCorners(t))if(null===this.calc){if(!this.start(t))return;this.setState(\"fold_corner\"),this.calc.calc({x:i-1,y:1});const s=50,n=\"bottom\"===this.calc.getCorner()?e.height-1:1,h=\"bottom\"===this.calc.getCorner()?e.height-s:s;this.animateFlippingTo({x:i-1,y:n},{x:i-s,y:h},!1,!1)}else this.do(this.render.convertToPage(t));else this.setState(\"read\"),this.render.finishAnimation(),this.stopMove()}animateFlippingTo(t,e,i,s=!0){const n=h.GetCordsFromTwoPoint(t,e),r=[];for(const t of n)r.push(()=>this.do(t));const o=this.getAnimationDuration(n.length);this.render.startAnimation(r,o,()=>{this.calc&&(i&&(1===this.calc.getDirection()?this.app.turnToPrevPage():this.app.turnToNextPage()),s&&(this.render.setBottomPage(null),this.render.setFlippingPage(null),this.render.clearShadow(),this.setState(\"read\"),this.reset()))})}getCalculation(){return this.calc}getState(){return this.state}setState(t){this.state!==t&&(this.app.updateState(t),this.state=t)}getDirectionByPoint(t){const e=this.getBoundsRect();if(\"portrait\"===this.render.getOrientation()){if(t.x-e.pageWidth<=e.width/5)return 1}else if(t.x<e.width/2)return 1;return 0}getAnimationDuration(t){const e=this.app.getSettings().flippingTime;return t>=1e3?e:t/1e3*e}checkDirection(t){return 0===t?this.app.getCurrentPageIndex()<this.app.getPageCount()-1:this.app.getCurrentPageIndex()>=1}reset(){this.calc=null,this.flippingPage=null,this.bottomPage=null}getBoundsRect(){return this.render.getRect()}checkState(...t){for(const e of t)if(this.state===e)return!0;return!1}isPointOnCorners(t){const e=this.getBoundsRect(),i=e.pageWidth,s=Math.sqrt(Math.pow(i,2)+Math.pow(e.height,2))/5,n=this.render.convertToBook(t);return n.x>0&&n.y>0&&n.x<e.width&&n.y<e.height&&(n.x<s||n.x>e.width-s)&&(n.y<s||n.y>e.height-s)}}class l{constructor(t,e){this.leftPage=null,this.rightPage=null,this.flippingPage=null,this.bottomPage=null,this.direction=null,this.orientation=null,this.shadow=null,this.animation=null,this.pageRect=null,this.boundsRect=null,this.timer=0,this.safari=!1,this.setting=e,this.app=t;const i=new RegExp(\"Version\\\\/[\\\\d\\\\.]+.*Safari/\");this.safari=null!==i.exec(window.navigator.userAgent)}render(t){if(null!==this.animation){const e=Math.round((t-this.animation.startedAt)/this.animation.durationFrame);e<this.animation.frames.length?this.animation.frames[e]():(this.animation.onAnimateEnd(),this.animation=null)}this.timer=t,this.drawFrame()}start(){this.update();const t=e=>{this.render(e),requestAnimationFrame(t)};requestAnimationFrame(t)}startAnimation(t,e,i){this.finishAnimation(),this.animation={frames:t,duration:e,durationFrame:e/t.length,onAnimateEnd:i,startedAt:this.timer}}finishAnimation(){null!==this.animation&&(this.animation.frames[this.animation.frames.length-1](),null!==this.animation.onAnimateEnd&&this.animation.onAnimateEnd()),this.animation=null}update(){this.boundsRect=null;const t=this.calculateBoundsRect();this.orientation!==t&&(this.orientation=t,this.app.updateOrientation(t))}calculateBoundsRect(){let t=\"landscape\";const e=this.getBlockWidth(),i=e/2,s=this.getBlockHeight()/2,n=this.setting.width/this.setting.height;let h=this.setting.width,r=this.setting.height,o=i-h;return\"stretch\"===this.setting.size?(e<2*this.setting.minWidth&&this.app.getSettings().usePortrait&&(t=\"portrait\"),h=\"portrait\"===t?this.getBlockWidth():this.getBlockWidth()/2,h>this.setting.maxWidth&&(h=this.setting.maxWidth),r=h/n,r>this.getBlockHeight()&&(r=this.getBlockHeight(),h=r*n),o=\"portrait\"===t?i-h/2-h:i-h):e<2*h&&this.app.getSettings().usePortrait&&(t=\"portrait\",o=i-h/2-h),this.boundsRect={left:o,top:s-r/2,width:2*h,height:r,pageWidth:h},t}setShadowData(t,e,i,s){if(!this.app.getSettings().drawShadow)return;const n=100*this.getSettings().maxShadowOpacity;this.shadow={pos:t,angle:e,width:3*this.getRect().pageWidth/4*i/100,opacity:(100-i)*n/100/100,direction:s,progress:2*i}}clearShadow(){this.shadow=null}getBlockWidth(){return this.app.getUI().getDistElement().offsetWidth}getBlockHeight(){return this.app.getUI().getDistElement().offsetHeight}getDirection(){return this.direction}getRect(){return null===this.boundsRect&&this.calculateBoundsRect(),this.boundsRect}getSettings(){return this.app.getSettings()}getOrientation(){return this.orientation}setPageRect(t){this.pageRect=t}setDirection(t){this.direction=t}setRightPage(t){null!==t&&t.setOrientation(1),this.rightPage=t}setLeftPage(t){null!==t&&t.setOrientation(0),this.leftPage=t}setBottomPage(t){null!==t&&t.setOrientation(1===this.direction?0:1),this.bottomPage=t}setFlippingPage(t){null!==t&&t.setOrientation(0===this.direction&&\"portrait\"!==this.orientation?0:1),this.flippingPage=t}convertToBook(t){const e=this.getRect();return{x:t.x-e.left,y:t.y-e.top}}isSafari(){return this.safari}convertToPage(t,e){e||(e=this.direction);const i=this.getRect();return{x:0===e?t.x-i.left-i.width/2:i.width/2-t.x+i.left,y:t.y-i.top}}convertToGlobal(t,e){if(e||(e=this.direction),null==t)return null;const i=this.getRect();return{x:0===e?t.x+i.left+i.width/2:i.width/2-t.x+i.left,y:t.y+i.top}}convertRectToGlobal(t,e){return e||(e=this.direction),{topLeft:this.convertToGlobal(t.topLeft,e),topRight:this.convertToGlobal(t.topRight,e),bottomLeft:this.convertToGlobal(t.bottomLeft,e),bottomRight:this.convertToGlobal(t.bottomRight,e)}}}class d extends l{constructor(t,e,i){super(t,e),this.canvas=i,this.ctx=i.getContext(\"2d\")}getContext(){return this.ctx}reload(){}drawFrame(){this.clear(),\"portrait\"!==this.orientation&&null!=this.leftPage&&this.leftPage.simpleDraw(0),null!=this.rightPage&&this.rightPage.simpleDraw(1),null!=this.bottomPage&&this.bottomPage.draw(),this.drawBookShadow(),null!=this.flippingPage&&this.flippingPage.draw(),null!=this.shadow&&(this.drawOuterShadow(),this.drawInnerShadow());const t=this.getRect();\"portrait\"===this.orientation&&(this.ctx.beginPath(),this.ctx.rect(t.left+t.pageWidth,t.top,t.width,t.height),this.ctx.clip())}drawBookShadow(){const t=this.getRect();this.ctx.save(),this.ctx.beginPath();const e=t.width/20;this.ctx.rect(t.left,t.top,t.width,t.height);const i={x:t.left+t.width/2-e/2,y:0};this.ctx.translate(i.x,i.y);const s=this.ctx.createLinearGradient(0,0,e,0);s.addColorStop(0,\"rgba(0, 0, 0, 0)\"),s.addColorStop(.4,\"rgba(0, 0, 0, 0.2)\"),s.addColorStop(.49,\"rgba(0, 0, 0, 0.1)\"),s.addColorStop(.5,\"rgba(0, 0, 0, 0.5)\"),s.addColorStop(.51,\"rgba(0, 0, 0, 0.4)\"),s.addColorStop(1,\"rgba(0, 0, 0, 0)\"),this.ctx.clip(),this.ctx.fillStyle=s,this.ctx.fillRect(0,0,e,2*t.height),this.ctx.restore()}drawOuterShadow(){const t=this.getRect();this.ctx.save(),this.ctx.beginPath(),this.ctx.rect(t.left,t.top,t.width,t.height);const e=this.convertToGlobal({x:this.shadow.pos.x,y:this.shadow.pos.y});this.ctx.translate(e.x,e.y),this.ctx.rotate(Math.PI+this.shadow.angle+Math.PI/2);const i=this.ctx.createLinearGradient(0,0,this.shadow.width,0);0===this.shadow.direction?(this.ctx.translate(0,-100),i.addColorStop(0,\"rgba(0, 0, 0, \"+this.shadow.opacity+\")\"),i.addColorStop(1,\"rgba(0, 0, 0, 0)\")):(this.ctx.translate(-this.shadow.width,-100),i.addColorStop(0,\"rgba(0, 0, 0, 0)\"),i.addColorStop(1,\"rgba(0, 0, 0, \"+this.shadow.opacity+\")\")),this.ctx.clip(),this.ctx.fillStyle=i,this.ctx.fillRect(0,0,this.shadow.width,2*t.height),this.ctx.restore()}drawInnerShadow(){const t=this.getRect();this.ctx.save(),this.ctx.beginPath();const e=this.convertToGlobal({x:this.shadow.pos.x,y:this.shadow.pos.y}),i=this.convertRectToGlobal(this.pageRect);this.ctx.moveTo(i.topLeft.x,i.topLeft.y),this.ctx.lineTo(i.topRight.x,i.topRight.y),this.ctx.lineTo(i.bottomRight.x,i.bottomRight.y),this.ctx.lineTo(i.bottomLeft.x,i.bottomLeft.y),this.ctx.translate(e.x,e.y),this.ctx.rotate(Math.PI+this.shadow.angle+Math.PI/2);const s=3*this.shadow.width/4,n=this.ctx.createLinearGradient(0,0,s,0);0===this.shadow.direction?(this.ctx.translate(-s,-100),n.addColorStop(1,\"rgba(0, 0, 0, \"+this.shadow.opacity+\")\"),n.addColorStop(.9,\"rgba(0, 0, 0, 0.05)\"),n.addColorStop(.7,\"rgba(0, 0, 0, \"+this.shadow.opacity+\")\"),n.addColorStop(0,\"rgba(0, 0, 0, 0)\")):(this.ctx.translate(0,-100),n.addColorStop(0,\"rgba(0, 0, 0, \"+this.shadow.opacity+\")\"),n.addColorStop(.1,\"rgba(0, 0, 0, 0.05)\"),n.addColorStop(.3,\"rgba(0, 0, 0, \"+this.shadow.opacity+\")\"),n.addColorStop(1,\"rgba(0, 0, 0, 0)\")),this.ctx.clip(),this.ctx.fillStyle=n,this.ctx.fillRect(0,0,s,2*t.height),this.ctx.restore()}clear(){this.ctx.fillStyle=\"white\",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height)}}class p{constructor(t,e,i){this.touchPoint=null,this.swipeTimeout=250,this.onResize=()=>{this.update()},this.onMouseDown=t=>{if(this.checkTarget(t.target)){const e=this.getMousePos(t.clientX,t.clientY);this.app.startUserTouch(e),t.preventDefault()}},this.onTouchStart=t=>{if(this.checkTarget(t.target)&&t.changedTouches.length>0){const e=t.changedTouches[0],i=this.getMousePos(e.clientX,e.clientY);this.touchPoint={point:i,time:Date.now()},setTimeout(()=>{null!==this.touchPoint&&this.app.startUserTouch(i)},this.swipeTimeout),this.app.getSettings().mobileScrollSupport||t.preventDefault()}},this.onMouseUp=t=>{const e=this.getMousePos(t.clientX,t.clientY);this.app.userStop(e)},this.onMouseMove=t=>{const e=this.getMousePos(t.clientX,t.clientY);this.app.userMove(e,!1)},this.onTouchMove=t=>{if(t.changedTouches.length>0){const e=t.changedTouches[0],i=this.getMousePos(e.clientX,e.clientY);this.app.getSettings().mobileScrollSupport?(null!==this.touchPoint&&(Math.abs(this.touchPoint.point.x-i.x)>10||\"read\"!==this.app.getState())&&t.cancelable&&this.app.userMove(i,!0),\"read\"!==this.app.getState()&&t.preventDefault()):this.app.userMove(i,!0)}},this.onTouchEnd=t=>{if(t.changedTouches.length>0){const e=t.changedTouches[0],i=this.getMousePos(e.clientX,e.clientY);let s=!1;if(null!==this.touchPoint){const t=i.x-this.touchPoint.point.x,e=Math.abs(i.y-this.touchPoint.point.y);Math.abs(t)>this.swipeDistance&&e<2*this.swipeDistance&&Date.now()-this.touchPoint.time<this.swipeTimeout&&(t>0?this.app.flipPrev(this.touchPoint.point.y<this.app.getRender().getRect().height/2?\"top\":\"bottom\"):this.app.flipNext(this.touchPoint.point.y<this.app.getRender().getRect().height/2?\"top\":\"bottom\"),s=!0),this.touchPoint=null}this.app.userStop(i,s)}},this.parentElement=t,t.classList.add(\"stf__parent\"),t.insertAdjacentHTML(\"afterbegin\",'<div class=\"stf__wrapper\"></div>'),this.wrapper=t.querySelector(\".stf__wrapper\"),this.app=e;const s=this.app.getSettings().usePortrait?1:2;t.style.minWidth=i.minWidth*s+\"px\",t.style.minHeight=i.minHeight+\"px\",\"fixed\"===i.size&&(t.style.minWidth=i.width*s+\"px\",t.style.minHeight=i.height+\"px\"),i.autoSize&&(t.style.width=\"100%\",t.style.maxWidth=2*i.maxWidth+\"px\"),t.style.display=\"block\",window.addEventListener(\"resize\",this.onResize,!1),this.swipeDistance=i.swipeDistance}destroy(){this.app.getSettings().useMouseEvents&&this.removeHandlers(),this.distElement.remove(),this.wrapper.remove()}getDistElement(){return this.distElement}getWrapper(){return this.wrapper}setOrientationStyle(t){this.wrapper.classList.remove(\"--portrait\",\"--landscape\"),\"portrait\"===t?(this.app.getSettings().autoSize&&(this.wrapper.style.paddingBottom=this.app.getSettings().height/this.app.getSettings().width*100+\"%\"),this.wrapper.classList.add(\"--portrait\")):(this.app.getSettings().autoSize&&(this.wrapper.style.paddingBottom=this.app.getSettings().height/(2*this.app.getSettings().width)*100+\"%\"),this.wrapper.classList.add(\"--landscape\")),this.update()}removeHandlers(){window.removeEventListener(\"resize\",this.onResize),this.distElement.removeEventListener(\"mousedown\",this.onMouseDown),this.distElement.removeEventListener(\"touchstart\",this.onTouchStart),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"touchend\",this.onTouchEnd)}setHandlers(){window.addEventListener(\"resize\",this.onResize,!1),this.app.getSettings().useMouseEvents&&(this.distElement.addEventListener(\"mousedown\",this.onMouseDown),this.distElement.addEventListener(\"touchstart\",this.onTouchStart),window.addEventListener(\"mousemove\",this.onMouseMove),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!this.app.getSettings().mobileScrollSupport}),window.addEventListener(\"mouseup\",this.onMouseUp),window.addEventListener(\"touchend\",this.onTouchEnd))}getMousePos(t,e){const i=this.distElement.getBoundingClientRect();return{x:t-i.left,y:e-i.top}}checkTarget(t){return!this.app.getSettings().clickEventForward||![\"a\",\"button\"].includes(t.tagName.toLowerCase())}}class c extends p{constructor(t,e,i,s){super(t,e,i),this.wrapper.insertAdjacentHTML(\"afterbegin\",'<div class=\"stf__block\"></div>'),this.distElement=t.querySelector(\".stf__block\"),this.items=s;for(const t of s)this.distElement.appendChild(t);this.setHandlers()}clear(){for(const t of this.items)this.parentElement.appendChild(t)}updateItems(t){this.removeHandlers(),this.distElement.innerHTML=\"\";for(const e of t)this.distElement.appendChild(e);this.items=t,this.setHandlers()}update(){this.app.getRender().update()}}class u extends p{constructor(t,e,i){super(t,e,i),this.wrapper.innerHTML='<canvas class=\"stf__canvas\"></canvas>',this.canvas=t.querySelectorAll(\"canvas\")[0],this.distElement=this.canvas,this.resizeCanvas(),this.setHandlers()}resizeCanvas(){const t=getComputedStyle(this.canvas),e=parseInt(t.getPropertyValue(\"width\"),10),i=parseInt(t.getPropertyValue(\"height\"),10);this.canvas.width=e,this.canvas.height=i}getCanvas(){return this.canvas}update(){this.resizeCanvas(),this.app.getRender().update()}}class w extends l{constructor(t,e,i){super(t,e),this.outerShadow=null,this.innerShadow=null,this.hardShadow=null,this.hardInnerShadow=null,this.element=i,this.createShadows()}createShadows(){this.element.insertAdjacentHTML(\"beforeend\",'<div class=\"stf__outerShadow\"></div>\\n <div class=\"stf__innerShadow\"></div>\\n <div class=\"stf__hardShadow\"></div>\\n <div class=\"stf__hardInnerShadow\"></div>'),this.outerShadow=this.element.querySelector(\".stf__outerShadow\"),this.innerShadow=this.element.querySelector(\".stf__innerShadow\"),this.hardShadow=this.element.querySelector(\".stf__hardShadow\"),this.hardInnerShadow=this.element.querySelector(\".stf__hardInnerShadow\")}clearShadow(){super.clearShadow(),this.outerShadow.style.cssText=\"display: none\",this.innerShadow.style.cssText=\"display: none\",this.hardShadow.style.cssText=\"display: none\",this.hardInnerShadow.style.cssText=\"display: none\"}reload(){this.element.querySelector(\".stf__outerShadow\")||this.createShadows()}drawHardInnerShadow(){const t=this.getRect(),e=this.shadow.progress>100?200-this.shadow.progress:this.shadow.progress;let i=(100-e)*(2.5*t.pageWidth)/100+20;i>t.pageWidth&&(i=t.pageWidth);let s=`\\n display: block;\\n z-index: ${(this.getSettings().startZIndex+5).toString(10)};\\n width: ${i}px;\\n height: ${t.height}px;\\n background: linear-gradient(to right,\\n rgba(0, 0, 0, ${this.shadow.opacity*e/100}) 5%,\\n rgba(0, 0, 0, 0) 100%);\\n left: ${t.left+t.width/2}px;\\n transform-origin: 0 0;\\n `;s+=0===this.getDirection()&&this.shadow.progress>100||1===this.getDirection()&&this.shadow.progress<=100?\"transform: translate3d(0, 0, 0);\":\"transform: translate3d(0, 0, 0) rotateY(180deg);\",this.hardInnerShadow.style.cssText=s}drawHardOuterShadow(){const t=this.getRect();let e=(100-(this.shadow.progress>100?200-this.shadow.progress:this.shadow.progress))*(2.5*t.pageWidth)/100+20;e>t.pageWidth&&(e=t.pageWidth);let i=`\\n display: block;\\n z-index: ${(this.getSettings().startZIndex+4).toString(10)};\\n width: ${e}px;\\n height: ${t.height}px;\\n background: linear-gradient(to left, rgba(0, 0, 0, ${this.shadow.opacity}) 5%, rgba(0, 0, 0, 0) 100%);\\n left: ${t.left+t.width/2}px;\\n transform-origin: 0 0;\\n `;i+=0===this.getDirection()&&this.shadow.progress>100||1===this.getDirection()&&this.shadow.progress<=100?\"transform: translate3d(0, 0, 0) rotateY(180deg);\":\"transform: translate3d(0, 0, 0);\",this.hardShadow.style.cssText=i}drawInnerShadow(){const t=this.getRect(),e=3*this.shadow.width/4,i=0===this.getDirection()?e:0,s=0===this.getDirection()?\"to left\":\"to right\",n=this.convertToGlobal(this.shadow.pos),r=this.shadow.angle+3*Math.PI/2,o=[this.pageRect.topLeft,this.pageRect.topRight,this.pageRect.bottomRight,this.pageRect.bottomLeft];let a=\"polygon( \";for(const t of o){let e=1===this.getDirection()?{x:-t.x+this.shadow.pos.x,y:t.y-this.shadow.pos.y}:{x:t.x-this.shadow.pos.x,y:t.y-this.shadow.pos.y};e=h.GetRotatedPoint(e,{x:i,y:100},r),a+=e.x+\"px \"+e.y+\"px, \"}a=a.slice(0,-2),a+=\")\";const g=`\\n display: block;\\n z-index: ${(this.getSettings().startZIndex+10).toString(10)};\\n width: ${e}px;\\n height: ${2*t.height}px;\\n background: linear-gradient(${s},\\n rgba(0, 0, 0, ${this.shadow.opacity}) 5%,\\n rgba(0, 0, 0, 0.05) 15%,\\n rgba(0, 0, 0, ${this.shadow.opacity}) 35%,\\n rgba(0, 0, 0, 0) 100%);\\n transform-origin: ${i}px 100px;\\n transform: translate3d(${n.x-i}px, ${n.y-100}px, 0) rotate(${r}rad);\\n clip-path: ${a};\\n -webkit-clip-path: ${a};\\n `;this.innerShadow.style.cssText=g}drawOuterShadow(){const t=this.getRect(),e=this.convertToGlobal({x:this.shadow.pos.x,y:this.shadow.pos.y}),i=this.shadow.angle+3*Math.PI/2,s=1===this.getDirection()?this.shadow.width:0,n=0===this.getDirection()?\"to right\":\"to left\",r=[{x:0,y:0},{x:t.pageWidth,y:0},{x:t.pageWidth,y:t.height},{x:0,y:t.height}];let o=\"polygon( \";for(const t of r)if(null!==t){let e=1===this.getDirection()?{x:-t.x+this.shadow.pos.x,y:t.y-this.shadow.pos.y}:{x:t.x-this.shadow.pos.x,y:t.y-this.shadow.pos.y};e=h.GetRotatedPoint(e,{x:s,y:100},i),o+=e.x+\"px \"+e.y+\"px, \"}o=o.slice(0,-2),o+=\")\";const a=`\\n display: block;\\n z-index: ${(this.getSettings().startZIndex+10).toString(10)};\\n width: ${this.shadow.width}px;\\n height: ${2*t.height}px;\\n background: linear-gradient(${n}, rgba(0, 0, 0, ${this.shadow.opacity}), rgba(0, 0, 0, 0));\\n transform-origin: ${s}px 100px;\\n transform: translate3d(${e.x-s}px, ${e.y-100}px, 0) rotate(${i}rad);\\n clip-path: ${o};\\n -webkit-clip-path: ${o};\\n `;this.outerShadow.style.cssText=a}drawLeftPage(){\"portrait\"!==this.orientation&&null!==this.leftPage&&(1===this.direction&&null!==this.flippingPage&&\"hard\"===this.flippingPage.getDrawingDensity()?(this.leftPage.getElement().style.zIndex=(this.getSettings().startZIndex+5).toString(10),this.leftPage.setHardDrawingAngle(180+this.flippingPage.getHardAngle()),this.leftPage.draw(this.flippingPage.getDrawingDensity())):this.leftPage.simpleDraw(0))}drawRightPage(){null!==this.rightPage&&(0===this.direction&&null!==this.flippingPage&&\"hard\"===this.flippingPage.getDrawingDensity()?(this.rightPage.getElement().style.zIndex=(this.getSettings().startZIndex+5).toString(10),this.rightPage.setHardDrawingAngle(180+this.flippingPage.getHardAngle()),this.rightPage.draw(this.flippingPage.getDrawingDensity())):this.rightPage.simpleDraw(1))}drawBottomPage(){if(null===this.bottomPage)return;const t=null!=this.flippingPage?this.flippingPage.getDrawingDensity():null;\"portrait\"===this.orientation&&1===this.direction||(this.bottomPage.getElement().style.zIndex=(this.getSettings().startZIndex+3).toString(10),this.bottomPage.draw(t))}drawFrame(){this.clear(),this.drawLeftPage(),this.drawRightPage(),this.drawBottomPage(),null!=this.flippingPage&&(this.flippingPage.getElement().style.zIndex=(this.getSettings().startZIndex+5).toString(10),this.flippingPage.draw()),null!=this.shadow&&null!==this.flippingPage&&(\"soft\"===this.flippingPage.getDrawingDensity()?(this.drawOuterShadow(),this.drawInnerShadow()):(this.drawHardOuterShadow(),this.drawHardInnerShadow()))}clear(){for(const t of this.app.getPageCollection().getPages())t!==this.leftPage&&t!==this.rightPage&&t!==this.flippingPage&&t!==this.bottomPage&&(t.getElement().style.cssText=\"display: none\"),t.getTemporaryCopy()!==this.flippingPage&&t.hideTemporaryCopy()}update(){super.update(),null!==this.rightPage&&this.rightPage.setOrientation(1),null!==this.leftPage&&this.leftPage.setOrientation(0)}}class x{constructor(){this._default={startPage:0,size:\"fixed\",width:0,height:0,minWidth:0,maxWidth:0,minHeight:0,maxHeight:0,drawShadow:!0,flippingTime:1e3,usePortrait:!0,startZIndex:0,autoSize:!0,maxShadowOpacity:1,showCover:!1,mobileScrollSupport:!0,swipeDistance:30,clickEventForward:!0,useMouseEvents:!0,showPageCorners:!0,disableFlipByClick:!1}}getSettings(t){const e=this._default;if(Object.assign(e,t),\"stretch\"!==e.size&&\"fixed\"!==e.size)throw new Error('Invalid size type. Available only \"fixed\" and \"stretch\" value');if(e.width<=0||e.height<=0)throw new Error(\"Invalid width or height\");if(e.flippingTime<=0)throw new Error(\"Invalid flipping time\");return\"stretch\"===e.size?(e.minWidth<=0&&(e.minWidth=100),e.maxWidth<e.minWidth&&(e.maxWidth=2e3),e.minHeight<=0&&(e.minHeight=100),e.maxHeight<e.minHeight&&(e.maxHeight=2e3)):(e.minWidth=e.width,e.maxWidth=e.width,e.minHeight=e.height,e.maxHeight=e.height),e}}!function(t,e){void 0===e&&(e={});var i=e.insertAt;if(t&&\"undefined\"!=typeof document){var s=document.head||document.getElementsByTagName(\"head\")[0],n=document.createElement(\"style\");n.type=\"text/css\",\"top\"===i&&s.firstChild?s.insertBefore(n,s.firstChild):s.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}}(\".stf__parent {\\n position: relative;\\n display: block;\\n box-sizing: border-box;\\n transform: translateZ(0);\\n\\n -ms-touch-action: pan-y;\\n touch-action: pan-y;\\n}\\n\\n.sft__wrapper {\\n position: relative;\\n width: 100%;\\n box-sizing: border-box;\\n}\\n\\n.stf__parent canvas {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n left: 0;\\n top: 0;\\n}\\n\\n.stf__block {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n box-sizing: border-box;\\n perspective: 2000px;\\n}\\n\\n.stf__item {\\n display: none;\\n position: absolute;\\n transform-style: preserve-3d;\\n}\\n\\n.stf__outerShadow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n}\\n\\n.stf__innerShadow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n}\\n\\n.stf__hardShadow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n}\\n\\n.stf__hardInnerShadow {\\n position: absolute;\\n left: 0;\\n top: 0;\\n}\");t.PageFlip=class extends class{constructor(){this.events=new Map}on(t,e){return this.events.has(t)?this.events.get(t).push(e):this.events.set(t,[e]),this}off(t){this.events.delete(t)}trigger(t,e,i=null){if(this.events.has(t))for(const s of this.events.get(t))s({data:i,object:e})}}{constructor(t,e){super(),this.isUserTouch=!1,this.isUserMove=!1,this.setting=null,this.pages=null,this.setting=(new x).getSettings(e),this.block=t}destroy(){this.ui.destroy(),this.block.remove()}update(){this.render.update(),this.pages.show()}loadFromImages(t){this.ui=new u(this.block,this,this.setting);const e=this.ui.getCanvas();this.render=new d(this,this.setting,e),this.flipController=new g(this.render,this),this.pages=new n(this,this.render,t),this.pages.load(),this.render.start(),this.pages.show(this.setting.startPage),setTimeout(()=>{this.ui.update(),this.trigger(\"init\",this,{page:this.setting.startPage,mode:this.render.getOrientation()})},1)}loadFromHTML(t){this.ui=new c(this.block,this,this.setting,t),this.render=new w(this,this.setting,this.ui.getDistElement()),this.flipController=new g(this.render,this),this.pages=new o(this,this.render,this.ui.getDistElement(),t),this.pages.load(),this.render.start(),this.pages.show(this.setting.startPage),setTimeout(()=>{this.ui.update(),this.trigger(\"init\",this,{page:this.setting.startPage,mode:this.render.getOrientation()})},1)}updateFromImages(t){const e=this.pages.getCurrentPageIndex();this.pages.destroy(),this.pages=new n(this,this.render,t),this.pages.load(),this.pages.show(e),this.trigger(\"update\",this,{page:e,mode:this.render.getOrientation()})}updateFromHtml(t){const e=this.pages.getCurrentPageIndex();this.pages.destroy(),this.pages=new o(this,this.render,this.ui.getDistElement(),t),this.pages.load(),this.ui.updateItems(t),this.render.reload(),this.pages.show(e),this.trigger(\"update\",this,{page:e,mode:this.render.getOrientation()})}clear(){this.pages.destroy(),this.ui.clear()}turnToPrevPage(){this.pages.showPrev()}turnToNextPage(){this.pages.showNext()}turnToPage(t){this.pages.show(t)}flipNext(t=\"top\"){this.flipController.flipNext(t)}flipPrev(t=\"top\"){this.flipController.flipPrev(t)}flip(t,e=\"top\"){this.flipController.flipToPage(t,e)}updateState(t){this.trigger(\"changeState\",this,t)}updatePageIndex(t){this.trigger(\"flip\",this,t)}updateOrientation(t){this.ui.setOrientationStyle(t),this.update(),this.trigger(\"changeOrientation\",this,t)}getPageCount(){return this.pages.getPageCount()}getCurrentPageIndex(){return this.pages.getCurrentPageIndex()}getPage(t){return this.pages.getPage(t)}getRender(){return this.render}getFlipController(){return this.flipController}getOrientation(){return this.render.getOrientation()}getBoundsRect(){return this.render.getRect()}getSettings(){return this.setting}getUI(){return this.ui}getState(){return this.flipController.getState()}getPageCollection(){return this.pages}startUserTouch(t){this.mousePosition=t,this.isUserTouch=!0,this.isUserMove=!1}userMove(t,e){this.isUserTouch||e||!this.setting.showPageCorners?this.isUserTouch&&h.GetDistanceBetweenTwoPoint(this.mousePosition,t)>5&&(this.isUserMove=!0,this.flipController.fold(t)):this.flipController.showCorner(t)}userStop(t,e=!1){this.isUserTouch&&(this.isUserTouch=!1,e||(this.isUserMove?this.flipController.stopMove():this.flipController.flip(t)))}},Object.defineProperty(t,\"__esModule\",{value:!0})}));\n","/**\r\n * @license FlipbookEngine v1.0.0\r\n * Copyright (c) 2026 Murat Dogan\r\n *\r\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\r\n *\r\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\r\n * under the terms of the GNU Affero General Public License v3.0.\r\n *\r\n * 2. Commercial License: If you wish to use this software in commercial,\r\n * closed-source, or SaaS products without the AGPLv3 obligations,\r\n * you must purchase a Commercial License from:\r\n * https://flipbookengine.com/pricing\r\n */\r\n\r\n\r\nimport { PageFlip } from 'page-flip';\r\nimport { effect } from '@preact/signals-core';\r\nimport type { FlipbookStore } from '../state/store';\r\nimport type { FlipbookEngineOptions } from '../engine';\r\n\r\nexport function prefersReducedMotion(): boolean {\r\n return typeof window !== 'undefined'\r\n && typeof window.matchMedia === 'function'\r\n && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n}\r\n\r\nexport function resolveFlippingTime(flippingTime?: number, reducedMotion = prefersReducedMotion()): number {\r\n if (reducedMotion) return 0;\r\n return typeof flippingTime === 'number' && flippingTime >= 0 ? flippingTime : 1000;\r\n}\r\nexport class PageFlipAdapter {\r\n private pageFlip: any = null;\r\n private bookContainer: HTMLElement;\r\n private options: FlipbookEngineOptions;\r\n private store: FlipbookStore;\r\n private unsubs: Array<() => void> = [];\r\n private audioEl: HTMLAudioElement | null = null;\r\n private audioUnlockHandler: (() => void) | null = null;\r\n private isLibraryFlipping = false;\r\n private autoPlayTimer: any = null;\r\n private layoutUpdateTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n constructor(bookContainer: HTMLElement, options: FlipbookEngineOptions, store: FlipbookStore) {\r\n this.bookContainer = bookContainer;\r\n this.options = options;\r\n this.store = store;\r\n if (options.soundUrl) {\r\n this.audioEl = new Audio(options.soundUrl);\r\n this.unlockAudio();\r\n }\r\n }\r\n\r\n private unlockAudio() {\r\n if (!this.audioEl) return;\r\n const unlock = () => {\r\n if (this.audioEl) {\r\n const playback = this.audioEl.play();\r\n if (playback && typeof playback.then === 'function') {\r\n playback.then(() => {\r\n this.audioEl!.pause();\r\n this.audioEl!.currentTime = 0;\r\n }).catch(() => {});\r\n }\r\n }\r\n document.removeEventListener('touchstart', unlock);\r\n document.removeEventListener('click', unlock);\r\n this.audioUnlockHandler = null;\r\n };\r\n this.audioUnlockHandler = unlock;\r\n document.addEventListener('touchstart', unlock, { once: true });\r\n document.addEventListener('click', unlock, { once: true });\r\n }\r\n\r\n public init(viewportWidth: number, viewportHeight: number) {\r\n this.pageFlip = new PageFlip(this.bookContainer, {\r\n width: viewportWidth,\r\n height: viewportHeight,\r\n size: \"stretch\" as any,\r\n minWidth: 100,\r\n maxWidth: 3000,\r\n minHeight: 100,\r\n maxHeight: 3000,\r\n drawShadow: true,\r\n showCover: true,\r\n usePortrait: true,\r\n // Keep native mobile scrolling available; this avoids preventDefault on non-cancelable touchstart events.\n mobileScrollSupport: true,\r\n maxShadowOpacity: this.options.maxShadowOpacity || 0.5,\r\n flippingTime: resolveFlippingTime(this.options.flippingTime)\r\n });\r\n\r\n // Load the HTML pages from the DOM\r\n const pageElements = this.bookContainer.querySelectorAll('.bz-page');\r\n this.pageFlip.loadFromHTML(Array.from(pageElements));\r\n\r\n this.bindEvents();\r\n this.setupSignalSync();\r\n }\r\n\r\n private bindEvents() {\r\n // When the library flips a page, update our signal\r\n this.pageFlip.on('flip', (e: any) => {\r\n // Check if we are not just initializing\r\n if (this.store.currentPage.value !== e.data) {\r\n this.isLibraryFlipping = true;\r\n this.store.currentPage.value = e.data;\r\n this.playSound();\r\n this.isLibraryFlipping = false;\r\n }\r\n });\r\n\r\n // When the library changes state, update our signal\r\n this.pageFlip.on('changeState', (e: any) => {\r\n this.store.flipState.value = e.data;\r\n });\r\n\r\n // When the library changes orientation, update our signal\r\n this.pageFlip.on('changeOrientation', (e: any) => {\r\n if (this.store.orientation.value !== e.data) {\r\n this.store.orientation.value = e.data;\r\n }\r\n });\r\n }\r\n\r\n private setupSignalSync() {\r\n // When our signal changes, tell the library to flip (if needed)\r\n this.unsubs.push(\r\n effect(() => {\r\n const targetPage = this.store.currentPage.value;\r\n const state = this.store.flipState.peek();\r\n if (!this.pageFlip || this.isLibraryFlipping || state !== 'read') return;\r\n\r\n const libCurrentPage = this.pageFlip.getCurrentPageIndex();\r\n if (libCurrentPage !== targetPage && !this.store.isSingleMode.value) {\r\n const getSpreadIndex = (p: number) => p === 0 ? 0 : Math.ceil(p / 2);\r\n const targetSpread = getSpreadIndex(targetPage);\r\n const currentSpread = getSpreadIndex(libCurrentPage);\r\n\r\n if (targetSpread === currentSpread + 1) {\r\n this.pageFlip.flipNext();\r\n } else if (targetSpread === currentSpread - 1) {\r\n this.pageFlip.flipPrev();\r\n } else if (targetSpread !== currentSpread) {\r\n this.pageFlip.turnToPage(targetPage);\r\n }\r\n }\r\n })\r\n );\r\n\r\n // Watch for singleMode changes from DOMWise UI to trigger layout updates\r\n this.unsubs.push(\r\n effect(() => {\r\n this.store.isSingleMode.value;\r\n if (!this.pageFlip) return;\r\n\r\n // We use setTimeout to wait for LayoutManager to update the container dimensions first\r\n if (this.layoutUpdateTimer) clearTimeout(this.layoutUpdateTimer);\r\n this.layoutUpdateTimer = setTimeout(() => {\r\n this.layoutUpdateTimer = null;\r\n if (this.pageFlip) {\r\n this.pageFlip.update();\r\n }\r\n window.dispatchEvent(new Event('resize'));\r\n }, 50);\r\n })\r\n );\r\n\r\n // AutoPlay loop\r\n this.unsubs.push(\r\n effect(() => {\r\n const playing = this.store.isAutoPlaying.value;\r\n const interval = this.store.autoPlayInterval.value || 3000;\r\n\r\n if (this.autoPlayTimer) {\r\n clearInterval(this.autoPlayTimer);\r\n this.autoPlayTimer = null;\r\n }\r\n\r\n if (playing) {\r\n this.autoPlayTimer = setInterval(() => {\r\n // Check if we are at the end\r\n const maxIndex = this.store.pages.value.length - 1;\r\n if (this.store.currentPage.peek() >= maxIndex || (this.store.currentPage.peek() >= maxIndex - 1 && !this.store.isSingleMode.peek())) {\r\n // If at end, pause or loop\r\n // Let's just pause\r\n this.store.isAutoPlaying.value = false;\r\n return;\r\n }\r\n this.turnToNextPage();\r\n }, interval);\r\n }\r\n })\r\n );\r\n }\r\n\r\n public turnToNextPage() {\r\n if (this.store.isSingleMode.value) {\r\n const nextIdx = this.store.currentPage.value + 1;\r\n if (nextIdx < this.store.pages.value.length) {\r\n this.store.currentPage.value = nextIdx;\r\n this.playSound();\r\n }\r\n } else if (this.pageFlip) {\r\n this.pageFlip.flipNext();\r\n }\r\n }\r\n\r\n public turnToPrevPage() {\r\n if (this.store.isSingleMode.value) {\r\n const prevIdx = this.store.currentPage.value - 1;\r\n if (prevIdx >= 0) {\r\n this.store.currentPage.value = prevIdx;\r\n this.playSound();\r\n }\r\n } else if (this.pageFlip) {\r\n this.pageFlip.flipPrev();\r\n }\r\n }\r\n\r\n public playSound() {\r\n if (this.store.soundEnabled.value && this.audioEl) {\r\n this.audioEl.currentTime = 0;\r\n const playback = this.audioEl.play();\r\n if (playback && typeof playback.catch === 'function') {\r\n playback.catch(err => console.warn('Flipbook Audio Play Error:', err));\r\n }\r\n }\r\n }\r\n\r\n public update() {\r\n if (this.pageFlip) {\r\n this.pageFlip.update();\r\n }\r\n if (this.layoutUpdateTimer) {\r\n clearTimeout(this.layoutUpdateTimer);\r\n this.layoutUpdateTimer = null;\r\n }\r\n }\r\n\r\n public destroy() {\r\n if (this.autoPlayTimer) {\r\n clearInterval(this.autoPlayTimer);\r\n this.autoPlayTimer = null;\r\n }\r\n if (this.audioUnlockHandler) {\r\n document.removeEventListener('touchstart', this.audioUnlockHandler);\r\n document.removeEventListener('click', this.audioUnlockHandler);\r\n this.audioUnlockHandler = null;\r\n }\r\n this.unsubs.forEach(unsub => unsub());\r\n this.unsubs = [];\r\n if (this.pageFlip) {\r\n this.pageFlip.destroy();\r\n this.pageFlip = null;\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","import { effect } from '@preact/signals-core';\r\nimport type { FlipbookStore } from '../state/store';\r\n\r\n/**\r\n * @license FlipbookEngine v1.0.0\r\n * Copyright (c) 2026 Murat Dogan\r\n *\r\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\r\n *\r\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\r\n * under the terms of the GNU Affero General Public License v3.0.\r\n *\r\n * 2. Commercial License: If you wish to use this software in commercial,\r\n * closed-source, or SaaS products without the AGPLv3 obligations,\r\n * you must purchase a Commercial License from:\r\n * https://flipbookengine.com/pricing\r\n */\r\n\r\n\r\n\r\nexport class LayoutManager {\r\n private wrapperElement: HTMLElement | null = null;\r\n private sizerElement: HTMLElement | null = null;\r\n private pageViewport: { width: number; height: number };\r\n private store: FlipbookStore;\r\n private resizeObserver: ResizeObserver | null = null;\r\n private orientationMediaQuery: MediaQueryList | null = null;\r\n private orientationChangeHandler: ((e: MediaQueryListEvent | MediaQueryList) => void) | null = null;\r\n private unsubs: Array<() => void> = [];\r\n private updateTimer: ReturnType<typeof setTimeout> | null = null;\r\n public onResizeCallback?: () => void;\r\n\r\n constructor(pageViewport: { width: number; height: number }, store: FlipbookStore) {\r\n this.pageViewport = pageViewport;\r\n this.store = store;\r\n }\r\n\r\n public init(wrapperElement: HTMLElement, sizerElement: HTMLElement) {\r\n this.wrapperElement = wrapperElement;\r\n this.sizerElement = sizerElement;\r\n\r\n this.setupResizeObserver();\r\n this.setupOrientationMedia();\r\n this.setupStateSync();\r\n\r\n // Initial update\r\n this.updateBookAspectRatio();\r\n }\r\n\r\n private setupStateSync() {\r\n // When single mode or orientation changes, we need to recalculate the aspect ratio\r\n this.unsubs.push(\r\n effect(() => {\r\n // Accessing signals to track dependencies\r\n this.store.isSingleMode.value;\r\n this.store.orientation.value;\r\n\r\n // Debounce slightly to allow DOM to settle if classes were added\r\n this.scheduleAspectRatioUpdate();\r\n })\r\n );\r\n }\r\n\r\n private setupResizeObserver() {\r\n if (typeof ResizeObserver !== 'undefined' && this.wrapperElement) {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.updateBookAspectRatio();\r\n });\r\n this.resizeObserver.observe(this.wrapperElement);\r\n }\r\n }\r\n\r\n private setupOrientationMedia() {\r\n if (typeof window !== 'undefined' && window.matchMedia) {\r\n this.orientationMediaQuery = window.matchMedia(\"(orientation: portrait)\");\r\n\r\n const handleOrientationChange = (e: MediaQueryListEvent | MediaQueryList) => {\r\n if (e.matches) {\r\n // Mobile device turned to portrait -> force single mode?\r\n // This can be decided by the business logic, for now we just recalculate\r\n }\r\n this.updateBookAspectRatio();\r\n };\r\n\r\n this.orientationChangeHandler = handleOrientationChange;\r\n\r\n // Add listener\r\n if (this.orientationMediaQuery.addEventListener) {\r\n this.orientationMediaQuery.addEventListener('change', handleOrientationChange);\r\n } else {\r\n this.orientationMediaQuery.addListener(handleOrientationChange);\r\n }\r\n\r\n // Call once\r\n handleOrientationChange(this.orientationMediaQuery);\r\n }\r\n }\r\n\r\n public updateBookAspectRatio() {\r\n if (!this.wrapperElement || !this.sizerElement) return;\r\n\r\n const availWidth = this.wrapperElement.clientWidth;\r\n const availHeight = this.wrapperElement.clientHeight;\r\n\r\n if (availWidth === 0 || availHeight === 0) return;\r\n\r\n const width = this.pageViewport.width;\r\n const height = this.pageViewport.height;\r\n\r\n // Standard aspect ratio calculation\r\n const isPhysicalPortrait = availWidth < availHeight;\r\n\r\n // If the library is in landscape mode AND we are not in forced single mode, we need double width\r\n const isDouble = this.store.isDoublePageLayout.value;\r\n const targetRatio = isDouble ? (width * 2) / height : width / height;\r\n\r\n let bookWidth = availWidth;\r\n let bookHeight = availWidth / targetRatio;\r\n\r\n // We must fit the entire book on the screen to prevent unwanted vertical scrolling.\r\n if (bookHeight > availHeight) {\r\n bookHeight = availHeight;\r\n bookWidth = availHeight * targetRatio;\r\n }\r\n\r\n // Apply exact pixel sizes.\r\n // Ensure the width is ALWAYS an EVEN number to prevent sub-pixel rendering gaps.\r\n let finalWidth = Math.ceil(bookWidth);\r\n if (finalWidth % 2 !== 0) finalWidth += 1;\r\n\r\n this.sizerElement.style.width = `${finalWidth}px`;\r\n this.sizerElement.style.height = `${Math.floor(bookHeight)}px`;\r\n this.sizerElement.style.aspectRatio = '';\r\n\r\n if (this.onResizeCallback) {\r\n this.onResizeCallback();\r\n }\r\n }\r\n\r\n public destroy() {\r\n if (this.updateTimer) {\r\n clearTimeout(this.updateTimer);\r\n this.updateTimer = null;\r\n }\r\n this.unsubs.forEach(unsub => unsub());\r\n this.unsubs = [];\r\n\r\n if (this.resizeObserver && this.wrapperElement) {\r\n this.resizeObserver.unobserve(this.wrapperElement);\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = null;\r\n }\r\n\r\n if (this.orientationMediaQuery) {\r\n if (this.orientationChangeHandler) {\r\n if (this.orientationMediaQuery.removeEventListener) {\r\n this.orientationMediaQuery.removeEventListener('change', this.orientationChangeHandler);\r\n } else {\r\n this.orientationMediaQuery.removeListener(this.orientationChangeHandler);\r\n }\r\n }\r\n this.orientationChangeHandler = null;\r\n this.orientationMediaQuery = null;\r\n }\r\n }\r\n\r\n private scheduleAspectRatioUpdate() {\r\n if (this.updateTimer) clearTimeout(this.updateTimer);\r\n this.updateTimer = setTimeout(() => {\r\n this.updateTimer = null;\r\n this.updateBookAspectRatio();\r\n }, 10);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","/**\r\n * @license FlipbookEngine v1.0.0\r\n * Copyright (c) 2026 Murat Dogan\r\n *\r\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\r\n *\r\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\r\n * under the terms of the GNU Affero General Public License v3.0.\r\n *\r\n * 2. Commercial License: If you wish to use this software in commercial,\r\n * closed-source, or SaaS products without the AGPLv3 obligations,\r\n * you must purchase a Commercial License from:\r\n * https://flipbookengine.com/pricing\r\n */\r\n\r\n\r\nimport { effect } from '@preact/signals-core';\r\nimport type { FlipbookStore } from '../state/store';\r\nimport type { PageFlipAdapter } from '../adapters/PageFlipAdapter';\r\n\r\nexport class InteractionManager {\r\n private container: HTMLElement;\r\n private pageFlipAdapter: PageFlipAdapter;\r\n private store: FlipbookStore;\r\n private touchStartX: number | null = null;\r\n private unsubs: Array<() => void> = [];\r\n private listenerAbortController: AbortController;\r\n\r\n constructor(container: HTMLElement, pageFlipAdapter: PageFlipAdapter, store: FlipbookStore) {\r\n this.container = container;\r\n this.pageFlipAdapter = pageFlipAdapter;\r\n this.store = store;\r\n const AbortControllerCtor = container.ownerDocument.defaultView?.AbortController ?? globalThis.AbortController;\r\n this.listenerAbortController = new AbortControllerCtor();\r\n }\r\n\r\n public init() {\r\n this.bindWheel();\r\n this.bindMouseDrag();\r\n this.bindTouch();\r\n this.setupStateSync();\r\n }\r\n\r\n private setupStateSync() {\r\n this.unsubs.push(\r\n effect(() => {\r\n this.store.isZoomed.value = this.store.zoomState.value.isActive;\r\n\r\n if (this.store.zoomState.value.isActive) {\r\n this.container.style.transform = `translate(${this.store.zoomState.value.translateX}px, ${this.store.zoomState.value.translateY}px) scale(${this.store.zoomState.value.scale})`;\r\n this.container.style.transition = 'none';\r\n } else {\r\n this.container.style.transform = '';\r\n this.container.style.transition = 'transform 0.3s ease';\r\n }\r\n })\r\n );\r\n }\r\n\r\n private bindWheel() {\r\n this.container.addEventListener('wheel', (e) => {\r\n if (this.store.zoomState.value.isActive) {\r\n e.preventDefault();\r\n this.updateZoomPan(\r\n this.store.zoomState.value.translateX - e.deltaX,\r\n this.store.zoomState.value.translateY - e.deltaY\r\n );\r\n }\r\n }, { passive: false, signal: this.listenerAbortController.signal });\r\n }\r\n\r\n private bindMouseDrag() {\r\n let isDragging = false;\r\n let startX = 0;\r\n let startY = 0;\r\n let initialTx = 0;\r\n let initialTy = 0;\r\n\r\n this.container.addEventListener('mousedown', (e) => {\r\n if (this.store.zoomState.value.isActive) {\r\n isDragging = true;\r\n startX = e.clientX;\r\n startY = e.clientY;\r\n initialTx = this.store.zoomState.value.translateX;\r\n initialTy = this.store.zoomState.value.translateY;\r\n this.container.style.cursor = 'grabbing';\r\n }\r\n }, { signal: this.listenerAbortController.signal });\r\n\r\n window.addEventListener('mousemove', (e) => {\r\n if (!isDragging || !this.store.zoomState.value.isActive) return;\r\n const dx = e.clientX - startX;\r\n const dy = e.clientY - startY;\r\n this.updateZoomPan(initialTx + dx, initialTy + dy);\r\n }, { signal: this.listenerAbortController.signal });\r\n\r\n window.addEventListener('mouseup', () => {\r\n if (isDragging) {\r\n isDragging = false;\r\n this.container.style.cursor = this.store.zoomState.value.isActive ? 'grab' : '';\r\n }\r\n }, { signal: this.listenerAbortController.signal });\r\n }\r\n\r\n private bindTouch() {\r\n let isDragging = false;\r\n let startTx = 0;\r\n let startTy = 0;\r\n\r\n this.container.addEventListener('touchstart', (e) => {\r\n if (e.touches.length === 1) {\r\n if (!this.store.zoomState.value.isActive) {\r\n this.touchStartX = e.touches[0].clientX;\r\n } else {\r\n isDragging = true;\r\n this.touchStartX = e.touches[0].clientX;\r\n const touchStartY = e.touches[0].clientY;\r\n startTx = this.store.zoomState.value.translateX;\r\n startTy = this.store.zoomState.value.translateY;\r\n (this.container as any)._touchStartY = touchStartY;\r\n }\r\n }\r\n }, { passive: true, signal: this.listenerAbortController.signal });\r\n\r\n this.container.addEventListener('touchmove', (e) => {\r\n if (isDragging && this.store.zoomState.value.isActive && e.touches.length === 1 && this.touchStartX !== null) {\r\n e.preventDefault();\r\n const dx = e.touches[0].clientX - this.touchStartX;\r\n const dy = e.touches[0].clientY - (this.container as any)._touchStartY;\r\n this.updateZoomPan(startTx + dx, startTy + dy);\r\n }\r\n }, { passive: false, signal: this.listenerAbortController.signal });\r\n\r\n this.container.addEventListener('touchend', (e) => {\r\n if (this.touchStartX !== null && !this.store.zoomState.value.isActive && this.store.isSingleMode.value && e.changedTouches.length === 1) {\r\n const diffX = e.changedTouches[0].clientX - this.touchStartX;\r\n if (diffX > 50 && this.store.currentPage.value > 0) {\r\n this.pageFlipAdapter.turnToPrevPage();\r\n } else if (diffX < -50 && this.store.currentPage.value < this.store.totalPages.value - 1) {\r\n this.pageFlipAdapter.turnToNextPage();\r\n }\r\n }\r\n this.touchStartX = null;\r\n isDragging = false;\r\n }, { passive: true, signal: this.listenerAbortController.signal });\r\n }\r\n\r\n public zoomIn() {\r\n let newScale = this.store.zoomState.value.scale + 0.5;\r\n if (newScale > 5) newScale = 5;\r\n\r\n this.store.zoomState.value = {\r\n ...this.store.zoomState.value,\r\n isActive: newScale > 1,\r\n scale: newScale\r\n };\r\n if (newScale > 1) {\r\n this.container.style.cursor = 'grab';\r\n }\r\n }\r\n\r\n public zoomOut() {\r\n let newScale = this.store.zoomState.value.scale - 0.5;\r\n if (newScale <= 1) {\r\n newScale = 1;\r\n this.store.zoomState.value = { ...this.store.zoomState.value, isActive: false, translateX: 0, translateY: 0, scale: 1 };\r\n this.container.style.cursor = '';\r\n } else {\r\n this.store.zoomState.value = { ...this.store.zoomState.value, isActive: true, scale: newScale };\r\n }\r\n }\r\n\r\n private updateZoomPan(x: number, y: number) {\r\n this.store.zoomState.value = {\r\n ...this.store.zoomState.value,\r\n translateX: x,\r\n translateY: y\r\n };\r\n }\r\n\r\n public destroy() {\r\n this.listenerAbortController.abort();\r\n this.unsubs.forEach(unsub => unsub());\r\n this.unsubs = [];\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nexport interface FlipbookTocEntry {\n id?: string;\n title: string;\n pageIndex: number;\n children?: FlipbookTocEntry[];\n}\n\nfunction normalizeEntry(entry: FlipbookTocEntry, totalPages: number, id: string): FlipbookTocEntry | null {\n if (!entry || typeof entry.title !== 'string' || !entry.title.trim() || !Number.isFinite(entry.pageIndex)) return null;\n const maxIndex = Math.max(0, totalPages - 1);\n const children = Array.isArray(entry.children)\n ? entry.children.map((child, index) => normalizeEntry(child, totalPages, id + '-' + index)).filter((child): child is FlipbookTocEntry => child !== null)\n : [];\n return {\n id: entry.id ?? id,\n title: entry.title.trim(),\n pageIndex: Math.max(0, Math.min(maxIndex, Math.trunc(entry.pageIndex))),\n ...(children.length ? { children } : {})\n };\n}\n\nexport function normalizeFlipbookToc(entries: FlipbookTocEntry[], totalPages: number): FlipbookTocEntry[] {\n if (!Array.isArray(entries)) return [];\n return entries.map((entry, index) => normalizeEntry(entry, totalPages, 'toc-' + index)).filter((entry): entry is FlipbookTocEntry => entry !== null);\n}","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n *\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\n */\nimport { signal, computed, type Signal, type ReadonlySignal } from '@preact/signals-core';\nimport type { FlipbookThemeMode } from '../theme/theme';\nimport type { NormalizedFlipbookPage } from '../model/pages';\nimport { normalizeFlipbookToc, type FlipbookTocEntry } from '../model/toc';\nimport type { FlipbookEngineOptions } from '../engine';\nimport type { PartialFlipbookMessages } from '../i18n/service';\nimport type { FlipbookSearchResult } from '../model/search';\nimport type { FlipbookHotspot } from '../model/hotspots';\nimport type { FlipbookAnnotation } from '../model/annotations';\n\nexport type FlipState = 'read' | 'fold_corner' | 'flipping';\nexport type Orientation = 'landscape' | 'portrait';\nexport interface ZoomState { isActive: boolean; translateX: number; translateY: number; isDragging: boolean; scale: number; }\n\nexport interface FlipbookStore {\n currentPage: Signal<number>; totalPages: Signal<number>; isSingleMode: Signal<boolean>;\n showThumbs: Signal<boolean>; showToc: Signal<boolean>; showNotes: Signal<boolean>; showSearch: Signal<boolean>; showArrows: Signal<boolean>; orientation: Signal<Orientation>;\n flipState: Signal<FlipState>; themeMode: Signal<FlipbookThemeMode>; allowDownload: Signal<boolean>; bookmarkedPages: Signal<ReadonlySet<number>>; pageNotes: Signal<ReadonlyMap<number, string>>;\n hasDownloadUrl: Signal<boolean>; isPdfMode: Signal<boolean>; primaryColor: Signal<string>; whiteLabel: Signal<boolean>;\n isZoomed: Signal<boolean>; isAutoPlaying: Signal<boolean>; autoPlayInterval: Signal<number>;\n soundEnabled: Signal<boolean>; searchQuery: Signal<string>; searchResults: Signal<FlipbookSearchResult[]>; hotspots: Signal<FlipbookHotspot[]>; activeHotspotId: Signal<string | null>; annotations: Signal<FlipbookAnnotation[]>; activeAnnotationId: Signal<string | null>; locale: Signal<string>; messages: Signal<Partial<Record<string, PartialFlipbookMessages>>>; zoomState: Signal<ZoomState>; pages: Signal<NormalizedFlipbookPage[]>; toc: Signal<FlipbookTocEntry[]>;\n isDoublePageLayout: ReadonlySignal<boolean>; isFrontCover: ReadonlySignal<boolean>; isBackCover: ReadonlySignal<boolean>;\n init(options: FlipbookEngineOptions, total: number, mappedPages: NormalizedFlipbookPage[], hasPdfUrl: boolean, isPdfMode?: boolean): void;\n reset(): void;\n}\n\nconst initialZoomState = (): ZoomState => ({ isActive: false, translateX: 0, translateY: 0, isDragging: false, scale: 1 });\n\n/** Creates an isolated reactive state container for one FlipbookEngine instance. */\nexport function createFlipbookStore(): FlipbookStore {\n const currentPage = signal(0), totalPages = signal(0), isSingleMode = signal(false);\n const showThumbs = signal(false), showToc = signal(false), showNotes = signal(false), showSearch = signal(false), showArrows = signal(true), orientation = signal<Orientation>('landscape');\n const flipState = signal<FlipState>('read'), themeMode = signal<FlipbookThemeMode>('auto');\n const allowDownload = signal(true), hasDownloadUrl = signal(false), isPdfMode = signal(false), primaryColor = signal('#7367f0');\n const whiteLabel = signal(false), isZoomed = signal(false), isAutoPlaying = signal(false);\n const bookmarkedPages = signal<ReadonlySet<number>>(new Set());\n const pageNotes = signal<ReadonlyMap<number, string>>(new Map());\n const autoPlayInterval = signal(3000), soundEnabled = signal(true);\n const searchQuery = signal(''), searchResults = signal<FlipbookSearchResult[]>([]);\n const hotspots = signal<FlipbookHotspot[]>([]), activeHotspotId = signal<string | null>(null);\n const annotations = signal<FlipbookAnnotation[]>([]), activeAnnotationId = signal<string | null>(null);\n const locale = signal('en');\n const messages = signal<Partial<Record<string, PartialFlipbookMessages>>>({});\n const zoomState = signal<ZoomState>(initialZoomState()), pages = signal<NormalizedFlipbookPage[]>([]), toc = signal<FlipbookTocEntry[]>([]);\n const isDoublePageLayout = computed(() => !isSingleMode.value && orientation.value === 'landscape');\n const isFrontCover = computed(() => isDoublePageLayout.value && currentPage.value === 0);\n const isBackCover = computed(() => isDoublePageLayout.value && currentPage.value >= totalPages.value - 1);\n const init = (options: FlipbookEngineOptions, total: number, mappedPages: NormalizedFlipbookPage[], hasPdfUrl: boolean, pdfMode = hasPdfUrl) => {\n totalPages.value = total; pages.value = mappedPages; hasDownloadUrl.value = hasPdfUrl; isPdfMode.value = pdfMode;\n if (options.theme !== undefined) themeMode.value = options.theme;\n if (options.primaryColor !== undefined) primaryColor.value = options.primaryColor;\n if (options.showThumbs !== undefined) showThumbs.value = options.showThumbs;\n if (options.showToc !== undefined) showToc.value = options.showToc;\n showNotes.value = false;\n showSearch.value = false;\n searchQuery.value = '';\n searchResults.value = [];\n hotspots.value = options.hotspots ?? [];\n activeHotspotId.value = null;\n annotations.value = options.annotations ?? [];\n activeAnnotationId.value = null;\n toc.value = normalizeFlipbookToc(options.toc ?? [], total);\n if (options.showArrows !== undefined) showArrows.value = options.showArrows;\n if (options.allowDownload !== undefined) allowDownload.value = options.allowDownload;\n if (options.whiteLabel !== undefined) whiteLabel.value = options.whiteLabel;\n if (options.soundEnabled !== undefined) soundEnabled.value = options.soundEnabled;\n if (options.locale !== undefined) locale.value = options.locale;\n if (options.messages !== undefined) messages.value = options.messages;\n if (options.isSingleMode !== undefined) isSingleMode.value = options.isSingleMode;\n if (options.singleMode !== undefined) isSingleMode.value = options.singleMode;\n if (options.autoPlay !== undefined) isAutoPlaying.value = options.autoPlay;\n if (options.autoPlayInterval !== undefined) autoPlayInterval.value = options.autoPlayInterval;\n bookmarkedPages.value = new Set((options.bookmarks ?? []).map((page) => Math.trunc(page)).filter((page) => Number.isInteger(page) && page >= 0 && page < total));\n pageNotes.value = new Map(Object.entries(options.notes ?? {}).map(([page, note]) => [Math.trunc(Number(page)), String(note).trim()] as const).filter(([page, note]) => Number.isInteger(page) && page >= 0 && page < total && note.length > 0));\n currentPage.value = 0;\n };\n const reset = () => {\n currentPage.value = 0;\n totalPages.value = 0;\n isSingleMode.value = false;\n showThumbs.value = false;\n showToc.value = false;\n showNotes.value = false;\n showSearch.value = false;\n showArrows.value = true;\n orientation.value = 'landscape';\n flipState.value = 'read';\n themeMode.value = 'auto';\n allowDownload.value = true;\n hasDownloadUrl.value = false;\n isPdfMode.value = false;\n primaryColor.value = '#7367f0';\n whiteLabel.value = false;\n isZoomed.value = false;\n isAutoPlaying.value = false;\n autoPlayInterval.value = 3000;\n soundEnabled.value = true;\n locale.value = 'en';\n messages.value = {};\n zoomState.value = initialZoomState();\n pages.value = [];\r\n toc.value = [];\n bookmarkedPages.value = new Set();\n pageNotes.value = new Map();\n searchQuery.value = '';\n searchResults.value = [];\n hotspots.value = [];\n activeHotspotId.value = null;\n annotations.value = [];\n activeAnnotationId.value = null;\n };\n return { currentPage, totalPages, isSingleMode, showThumbs, showToc, showNotes, showSearch, showArrows, orientation, flipState, themeMode, allowDownload, bookmarkedPages, pageNotes, hasDownloadUrl, isPdfMode, primaryColor, whiteLabel, isZoomed, isAutoPlaying, autoPlayInterval, soundEnabled, searchQuery, searchResults, hotspots, activeHotspotId, annotations, activeAnnotationId, locale, messages, zoomState, pages, toc, isDoublePageLayout, isFrontCover, isBackCover, init, reset };\n}\n\n// Compatibility exports for consumers of the former internal singleton module.\nconst legacyStore = createFlipbookStore();\nexport const currentPage = legacyStore.currentPage, totalPages = legacyStore.totalPages, isSingleMode = legacyStore.isSingleMode;\nexport const showThumbs = legacyStore.showThumbs, showToc = legacyStore.showToc, showNotes = legacyStore.showNotes, showSearch = legacyStore.showSearch, showArrows = legacyStore.showArrows, orientation = legacyStore.orientation;\nexport const flipState = legacyStore.flipState, themeMode = legacyStore.themeMode, allowDownload = legacyStore.allowDownload, bookmarkedPages = legacyStore.bookmarkedPages, pageNotes = legacyStore.pageNotes;\nexport const hasDownloadUrl = legacyStore.hasDownloadUrl, isPdfMode = legacyStore.isPdfMode, primaryColor = legacyStore.primaryColor, whiteLabel = legacyStore.whiteLabel;\nexport const isZoomed = legacyStore.isZoomed, isAutoPlaying = legacyStore.isAutoPlaying, autoPlayInterval = legacyStore.autoPlayInterval;\nexport const soundEnabled = legacyStore.soundEnabled, searchQuery = legacyStore.searchQuery, searchResults = legacyStore.searchResults, hotspots = legacyStore.hotspots, activeHotspotId = legacyStore.activeHotspotId, annotations = legacyStore.annotations, activeAnnotationId = legacyStore.activeAnnotationId, locale = legacyStore.locale, messages = legacyStore.messages, zoomState = legacyStore.zoomState, pages = legacyStore.pages, toc = legacyStore.toc;\nexport const isDoublePageLayout = legacyStore.isDoublePageLayout, isFrontCover = legacyStore.isFrontCover, isBackCover = legacyStore.isBackCover;\nexport function initStore(options: FlipbookEngineOptions, total: number, mappedPages: NormalizedFlipbookPage[], hasPdfUrl: boolean) { legacyStore.init(options, total, mappedPages, hasPdfUrl); }\n\n\n","/**\r\n * FlipbookEngine\r\n * Copyright (c) 2026 Murat Dogan\r\n * SPDX-License-Identifier: AGPL-3.0-or-later\r\n * https://flipbookengine.com\r\n */\r\n\r\nexport type FlipbookPageKind = 'single' | 'spread' | 'cover';\r\nexport type FlipbookCropMode = 'full' | 'left' | 'right';\r\nexport type FlipbookSplitDirection = 'ltr' | 'rtl';\r\n\r\nexport interface FlipbookPageAsset {\r\n id?: string;\r\n pageNumber?: number;\r\n pageNumbers?: number[];\r\n kind?: FlipbookPageKind;\r\n splitDirection?: FlipbookSplitDirection;\r\n normal: string;\r\n low: string;\r\n thumb: string;\r\n}\r\n\r\nexport interface NormalizedFlipbookPage {\r\n index: number;\r\n assetId: string;\r\n pageNumber: number;\r\n /** Source document page for generated/split pages. */\r\n sourcePageNumber?: number;\r\n cropMode: FlipbookCropMode;\r\n normal: string;\r\n low: string;\r\n thumb: string;\r\n}\r\n\r\nexport function isFlipbookPageAsset(value: unknown): value is FlipbookPageAsset {\r\n if (!value || typeof value !== 'object') return false;\r\n const candidate = value as FlipbookPageAsset;\r\n return typeof candidate.normal === 'string'\r\n && typeof candidate.low === 'string'\r\n && typeof candidate.thumb === 'string';\r\n}\r\n\r\nfunction getAssetPageNumbers(asset: FlipbookPageAsset): number[] {\r\n if (Array.isArray(asset.pageNumbers) && asset.pageNumbers.length > 0) {\r\n return asset.pageNumbers;\r\n }\r\n\r\n if (typeof asset.pageNumber === 'number') {\r\n if (asset.kind === 'spread') return [asset.pageNumber, asset.pageNumber + 1];\r\n return [asset.pageNumber];\r\n }\r\n\r\n return [];\r\n}\r\n\r\nfunction getSpreadCropModes(splitDirection: FlipbookSplitDirection): FlipbookCropMode[] {\r\n return splitDirection === 'rtl' ? ['right', 'left'] : ['left', 'right'];\r\n}\r\n\r\nexport function normalizeFlipbookPages(assets: FlipbookPageAsset[]): NormalizedFlipbookPage[] {\r\n const normalized: NormalizedFlipbookPage[] = [];\r\n let fallbackPageNumber = 1;\r\n\r\n assets.forEach((asset, assetIndex) => {\r\n const kind = asset.kind ?? 'single';\r\n const assetId = asset.id ?? `asset-${assetIndex}`;\r\n const splitDirection = asset.splitDirection ?? 'ltr';\r\n const pageNumbers = getAssetPageNumbers(asset);\r\n\r\n if (kind === 'spread') {\r\n const spreadNumbers = pageNumbers.length >= 2 ? pageNumbers.slice(0, 2) : [fallbackPageNumber, fallbackPageNumber + 1];\r\n const cropModes = getSpreadCropModes(splitDirection);\r\n\r\n spreadNumbers.forEach((pageNumber, spreadIndex) => {\r\n normalized.push({\r\n index: normalized.length,\r\n assetId,\r\n pageNumber,\r\n sourcePageNumber: pageNumber,\r\n cropMode: cropModes[spreadIndex] ?? 'full',\r\n normal: asset.normal,\r\n low: asset.low,\r\n thumb: asset.thumb\r\n });\r\n });\r\n\r\n fallbackPageNumber = spreadNumbers[spreadNumbers.length - 1] + 1;\r\n return;\r\n }\r\n\r\n const pageNumber = pageNumbers[0] ?? fallbackPageNumber;\r\n normalized.push({\r\n index: normalized.length,\r\n assetId,\r\n pageNumber,\r\n sourcePageNumber: pageNumber,\r\n cropMode: 'full',\r\n normal: asset.normal,\r\n low: asset.low,\r\n thumb: asset.thumb\r\n });\r\n fallbackPageNumber = pageNumber + 1;\r\n });\r\n\r\n return normalized;\r\n}\r\n","/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nexport type FlipbookThemeMode = 'auto' | 'light' | 'dark';\n\nexport interface FlipbookBackgroundStyle {\n color?: string;\n image?: string;\n size?: string;\n position?: string;\n repeat?: string;\n}\n\nexport interface FlipbookBackgrounds {\n light?: FlipbookBackgroundStyle | null;\n dark?: FlipbookBackgroundStyle | null;\n}\n\nexport interface ThemeConfiguration {\n theme?: FlipbookThemeMode;\n primaryColor?: string;\n cssVariables?: Record<string, string>;\n background?: FlipbookBackgrounds | null;\n /** @deprecated Use background.light/dark instead. */\n backgroundColor?: string;\n /** @deprecated Use background.light/dark instead. */\n backgroundImage?: string;\n}\n\nfunction toCssImage(image?: string): string | undefined {\n if (!image) return undefined;\n const escaped = image.replace(/[\"\\\\\\r\\n]/g, (character) => '\\\\' + character);\n return 'url(\"' + escaped + '\")';\n}\n\nexport function applyThemeConfiguration(container: HTMLElement, config: ThemeConfiguration) {\n container.classList.add('bk-container');\n container.classList.remove('bk-theme-light', 'bk-theme-dark');\n container.classList.add('bk-theme-' + (config.theme ?? 'auto'));\n\n if (config.primaryColor) {\n container.style.setProperty('--flipbook-accent', config.primaryColor);\n }\n\n const background = config.background ?? {};\n const legacyLight = config.backgroundColor || config.backgroundImage\n ? { color: config.backgroundColor, image: config.backgroundImage }\n : undefined;\n const setBackground = (prefix: string, style?: FlipbookBackgroundStyle | null) => {\n const values: Record<string, string | undefined> = {\n ['--flipbook-bg-' + prefix + '-color']: style?.color,\n ['--flipbook-bg-' + prefix + '-image']: toCssImage(style?.image),\n ['--flipbook-bg-' + prefix + '-size']: style?.size,\n ['--flipbook-bg-' + prefix + '-position']: style?.position,\n ['--flipbook-bg-' + prefix + '-repeat']: style?.repeat\n };\n Object.entries(values).forEach(([name, value]) => {\n if (value) container.style.setProperty(name, value);\n else container.style.removeProperty(name);\n });\n };\n setBackground('light', background.light ?? legacyLight);\n setBackground('dark', background.dark);\n\n const userVariables = config.cssVariables ?? {};\n Object.entries(userVariables).forEach(([name, value]) => {\n const variableName = name.startsWith('--') ? name : '--' + name;\n container.style.setProperty(variableName, value);\n });\n}\n","/**\r\n * Small LRU cache for rendered PDF page data URLs.\r\n * The cache is intentionally owned by one PdfRenderer instance so pages from\r\n * different engine instances or documents can never be mixed.\r\n */\r\nexport class PdfRenderCache {\r\n private readonly entries = new Map<number, string>();\r\n private hits = 0;\r\n private misses = 0;\r\n\r\n constructor(private readonly maxEntries: number = 32) {\r\n if (!Number.isInteger(maxEntries) || maxEntries < 0) {\r\n throw new RangeError('PDF render cache size must be a non-negative integer.');\r\n }\r\n }\r\n\r\n public get(pageNumber: number): string | undefined {\r\n const value = this.entries.get(pageNumber);\r\n if (value === undefined) {\r\n this.misses++;\r\n return undefined;\r\n }\r\n this.hits++;\r\n this.entries.delete(pageNumber);\r\n this.entries.set(pageNumber, value);\r\n return value;\r\n }\r\n\r\n public set(pageNumber: number, dataUrl: string): void {\r\n if (this.maxEntries === 0 || !dataUrl) return;\r\n this.entries.delete(pageNumber);\r\n this.entries.set(pageNumber, dataUrl);\r\n while (this.entries.size > this.maxEntries) {\r\n const oldest = this.entries.keys().next().value as number | undefined;\r\n if (oldest === undefined) break;\r\n this.entries.delete(oldest);\r\n }\r\n }\r\n\r\n public clear(): void {\r\n this.entries.clear();\r\n this.hits = 0;\r\n this.misses = 0;\r\n }\r\n\r\n public get size(): number {\r\n return this.entries.size;\r\n }\r\n\r\n public getStats(): { size: number; maxEntries: number; hits: number; misses: number } {\r\n return { size: this.size, maxEntries: this.maxEntries, hits: this.hits, misses: this.misses };\r\n }\r\n}\r\n","import * as pdfjsLib from 'pdfjs-dist';\r\nimport type { NormalizedFlipbookPage } from '../model/pages';\nimport type { FlipbookSearchOptions, FlipbookSearchHighlight } from '../model/search';\r\nimport { PdfRenderCache } from './PdfRenderCache';\r\n\r\nexport interface PdfRenderProgress { completed: number; total: number; }\nexport type PdfPageMode = 'auto' | 'single' | 'split';\nexport interface PdfPageLayout { width: number; height: number; split: boolean; }\n\nconst A3_LANDSCAPE_WIDTH = 1190.55;\nconst A3_LANDSCAPE_HEIGHT = 841.89;\n\n/** Detects ISO A3 landscape pages while allowing PDF metadata rounding and bleed. */\nexport function isA3Landscape(width: number, height: number): boolean {\n const landscapeWidth = Math.max(width, height);\n const landscapeHeight = Math.min(width, height);\n const ratio = landscapeWidth / landscapeHeight;\n const nearA3Size = Math.abs(landscapeWidth - A3_LANDSCAPE_WIDTH) / A3_LANDSCAPE_WIDTH <= 0.08\n && Math.abs(landscapeHeight - A3_LANDSCAPE_HEIGHT) / A3_LANDSCAPE_HEIGHT <= 0.08;\n return width >= height && nearA3Size && Math.abs(ratio - (A3_LANDSCAPE_WIDTH / A3_LANDSCAPE_HEIGHT)) <= 0.04;\n}\r\n\r\nexport interface PdfRenderOptions {\r\n scale?: number;\r\n quality?: number;\r\n format?: string;\r\n workerSrc?: string;\r\n concurrency?: number;\r\n cacheSize?: number;\r\n}\r\n\r\nexport class PdfRenderer {\r\n private pdfDoc: any = null;\r\n private loadingTask: any = null;\r\n private options: Required<PdfRenderOptions>;\r\n private readonly cache: PdfRenderCache;\n private readonly textCache = new Map<number, string>();\r\n\r\n constructor(options: PdfRenderOptions = {}) {\r\n const cacheSize = Number.isFinite(options.cacheSize)\r\n ? Math.max(0, Math.floor(options.cacheSize as number))\r\n : 32;\r\n this.options = {\r\n scale: options.scale || 1.5,\r\n quality: options.quality || 0.85,\r\n format: options.format || 'image/webp',\r\n workerSrc: options.workerSrc || '',\r\n concurrency: Math.max(1, Math.floor(options.concurrency || 3)),\r\n cacheSize\r\n };\r\n this.cache = new PdfRenderCache(this.options.cacheSize);\r\n if (this.options.workerSrc) {\r\n pdfjsLib.GlobalWorkerOptions.workerSrc = this.options.workerSrc;\r\n }\r\n }\r\n\r\n /** Loads a PDF document and cancels PDF.js loading when the signal aborts. */\r\n public async loadDocument(pdfUrl: string, signal?: AbortSignal): Promise<number> {\r\n this.throwIfAborted(signal);\r\n this.cache.clear();\r\n const loadingTask = pdfjsLib.getDocument(pdfUrl);\r\n this.loadingTask = loadingTask;\r\n const abortLoading = () => loadingTask.destroy?.();\r\n signal?.addEventListener('abort', abortLoading, { once: true });\r\n try {\r\n this.pdfDoc = await loadingTask.promise;\r\n this.throwIfAborted(signal);\r\n return this.pdfDoc.numPages;\r\n } catch (error) {\r\n if (signal?.aborted) throw this.createAbortError();\r\n throw error;\r\n } finally {\r\n signal?.removeEventListener('abort', abortLoading);\r\n if (this.loadingTask === loadingTask) this.loadingTask = null;\r\n }\r\n }\r\n\r\n /** Renders a specific page to a Data URL. The page index is 1-based. */\r\n public async renderPageToDataUrl(pageIndex: number, signal?: AbortSignal): Promise<string> {\r\n if (!this.pdfDoc) throw new Error('PDF document is not loaded.');\r\n this.throwIfAborted(signal);\r\n const cached = this.cache.get(pageIndex);\r\n if (cached !== undefined) return cached;\r\n\r\n try {\r\n const page = await this.pdfDoc.getPage(pageIndex);\r\n this.throwIfAborted(signal);\r\n const vp = page.getViewport({ scale: this.options.scale });\r\n const canvas = document.createElement('canvas');\r\n canvas.width = vp.width;\r\n canvas.height = vp.height;\r\n const ctx = canvas.getContext('2d');\r\n\r\n if (ctx) {\r\n const renderTask = page.render({ canvasContext: ctx, viewport: vp });\r\n const cancelRender = () => renderTask.cancel?.();\r\n signal?.addEventListener('abort', cancelRender, { once: true });\r\n try {\r\n await renderTask.promise;\r\n this.throwIfAborted(signal);\r\n } finally {\r\n signal?.removeEventListener('abort', cancelRender);\r\n }\r\n const dataUrl = canvas.toDataURL(this.options.format, this.options.quality);\r\n this.cache.set(pageIndex, dataUrl);\r\n return dataUrl;\r\n }\r\n throw new Error('Unable to create a PDF canvas rendering context.');\r\n } catch (error) {\r\n if (signal?.aborted) throw this.createAbortError();\r\n throw error;\r\n }\r\n }\r\n\r\n /** Extracts text from a 1-based PDF source page using PDF.js text content. */\n public async extractPageText(pageNumber: number): Promise<string> {\n if (!this.pdfDoc) throw new Error('PDF document is not loaded.');\n if (!Number.isInteger(pageNumber) || pageNumber < 1 || pageNumber > this.pdfDoc.numPages) {\n throw new Error('PDF page number is out of range.');\n }\n const cached = this.textCache.get(pageNumber);\n if (cached !== undefined) return cached;\n const page = await this.pdfDoc.getPage(pageNumber);\n const content = await page.getTextContent();\n const text = (content?.items ?? [])\n .map((item: any) => typeof item?.str === 'string' ? item.str : '')\n .filter(Boolean)\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n this.textCache.set(pageNumber, text);\n return text;\n }\n\n /** Searches all PDF source pages and returns normalized rectangles for matched text. */\n public async searchText(query: string, options: FlipbookSearchOptions = {}): Promise<Array<{ sourcePageNumber: number; matches: number; snippet: string; highlights?: FlipbookSearchHighlight[] }>> {\n const normalizedQuery = String(query ?? '').trim();\n if (!this.pdfDoc || !normalizedQuery) return [];\n const caseSensitive = options.caseSensitive === true;\n const needle = caseSensitive ? normalizedQuery : normalizedQuery.toLocaleLowerCase();\n const maxResults = Number.isFinite(options.maxResults) ? Math.max(1, Math.trunc(options.maxResults as number)) : 100;\n const results: Array<{ sourcePageNumber: number; matches: number; snippet: string; highlights?: FlipbookSearchHighlight[] }> = [];\n for (let pageNumber = 1; pageNumber <= this.pdfDoc.numPages && results.length < maxResults; pageNumber++) {\n const page = await this.pdfDoc.getPage(pageNumber);\n const content = await page.getTextContent();\n const items = (content?.items ?? []).filter((item: any) => typeof item?.str === 'string' && item.str.length > 0);\n const text = items.map((item: any) => item.str).join(' ').replace(/\\s+/g, ' ').trim();\n const haystack = caseSensitive ? text : text.toLocaleLowerCase();\n let matches = 0;\n let offset = haystack.indexOf(needle);\n while (offset >= 0) { matches++; offset = haystack.indexOf(needle, offset + Math.max(1, needle.length)); }\n if (!matches) continue;\n const first = haystack.indexOf(needle);\n const start = Math.max(0, first - 70);\n const end = Math.min(text.length, first + normalizedQuery.length + 100);\n const highlights: FlipbookSearchHighlight[] = [];\n const viewport = typeof page.getViewport === 'function' ? page.getViewport({ scale: 1 }) : null;\n const viewportWidth = Number(viewport?.width);\n const viewportHeight = Number(viewport?.height);\n if (viewportWidth > 0 && viewportHeight > 0) {\n items.forEach((item: any) => {\n const itemText = String(item.str);\n const itemHaystack = caseSensitive ? itemText : itemText.toLocaleLowerCase();\n const transform = Array.isArray(item.transform) ? item.transform : [];\n const itemX = Number(transform[4]);\n const itemY = Number(transform[5]);\n const itemWidth = Number(item.width) || Math.abs(Number(transform[0])) || 0;\n const itemHeight = Number(item.height) || Math.abs(Number(transform[3])) || 0;\n if (!(itemWidth > 0 && itemHeight > 0 && Number.isFinite(itemX) && Number.isFinite(itemY))) return;\n let itemOffset = itemHaystack.indexOf(needle);\n while (itemOffset >= 0) {\n const ratioStart = Math.max(0, Math.min(1, itemOffset / Math.max(1, itemText.length)));\n const ratioWidth = Math.max(0.02, Math.min(1 - ratioStart, needle.length / Math.max(1, itemText.length)));\n highlights.push({\n x: Math.max(0, Math.min(1, (itemX + itemWidth * ratioStart) / viewportWidth)),\n y: Math.max(0, Math.min(1, (viewportHeight - itemY - itemHeight) / viewportHeight)),\n width: Math.max(0, Math.min(1, itemWidth * ratioWidth / viewportWidth)),\n height: Math.max(0, Math.min(1, itemHeight / viewportHeight))\n });\n itemOffset = itemHaystack.indexOf(needle, itemOffset + Math.max(1, needle.length));\n }\n });\n }\n const result: { sourcePageNumber: number; matches: number; snippet: string; highlights?: FlipbookSearchHighlight[] } = { sourcePageNumber: pageNumber, matches, snippet: text.slice(start, end).trim() };\n if (highlights.length) result.highlights = highlights;\n results.push(result);\n }\n return results;\n }\n\n /** Returns source page dimensions and whether the page should be split. */\n public async getPageLayouts(mode: PdfPageMode = 'auto'): Promise<PdfPageLayout[]> {\n if (!this.pdfDoc) return [];\n const layouts: PdfPageLayout[] = [];\n for (let pageNumber = 1; pageNumber <= this.pdfDoc.numPages; pageNumber++) {\n const page = await this.pdfDoc.getPage(pageNumber);\n const vp = page.getViewport({ scale: 1.0 });\n const split = mode === 'split'\n ? vp.width >= vp.height\n : mode === 'auto' && isA3Landscape(vp.width, vp.height);\n layouts.push({ width: vp.width, height: vp.height, split });\n }\n return layouts;\n }\n\n /** Calculates the best viewport dimensions based on the first logical page. */\n public async calculateViewportDimensions(baseShortSide: number = 420, firstPageLayout?: PdfPageLayout): Promise<{ width: number, height: number }> {\n if (!this.pdfDoc) throw new Error('PDF document is not loaded.');\n\n const firstPage = await this.pdfDoc.getPage(1);\n const vp = firstPageLayout\n ? { width: firstPageLayout.split ? firstPageLayout.width / 2 : firstPageLayout.width, height: firstPageLayout.height }\n : firstPage.getViewport({ scale: 1.0 });\n const aspectRatio = vp.width / vp.height;\n\n return aspectRatio >= 1\n ? { width: Math.round(baseShortSide * aspectRatio), height: baseShortSide }\n : { width: baseShortSide, height: Math.round(baseShortSide / aspectRatio) };\n }\n\n /** Renders pages concurrently with a bounded worker pool and preserves page order. */\r\n public async renderAllPages(signal?: AbortSignal, onProgress?: (progress: PdfRenderProgress) => void): Promise<NormalizedFlipbookPage[]> {\r\n if (!this.pdfDoc) return [];\r\n this.throwIfAborted(signal);\r\n\r\n const pageCount = this.pdfDoc.numPages;\r\n const resolvedPages = new Array<NormalizedFlipbookPage>(pageCount);\r\n let nextPage = 1;\r\n let completed = 0;\r\n const renderWorker = async () => {\r\n while (true) {\r\n this.throwIfAborted(signal);\r\n const pageIndex = nextPage++;\r\n if (pageIndex > pageCount) return;\r\n const normalSrc = await this.renderPageToDataUrl(pageIndex, signal);\r\n resolvedPages[pageIndex - 1] = {\r\n index: pageIndex - 1,\r\n assetId: `pdf-page-${pageIndex}`,\r\n pageNumber: pageIndex,\r\n cropMode: 'full',\r\n normal: normalSrc,\r\n low: normalSrc,\r\n thumb: normalSrc\r\n };\r\n completed++;\r\n onProgress?.({ completed, total: pageCount });\r\n }\r\n };\r\n\r\n const workerCount = Math.min(this.options.concurrency, pageCount);\r\n await Promise.all(Array.from({ length: workerCount }, () => renderWorker()));\r\n this.throwIfAborted(signal);\r\n return resolvedPages;\r\n }\r\n\r\n public getCacheStats() {\r\n return this.cache.getStats();\r\n }\r\n\r\n private throwIfAborted(signal?: AbortSignal) {\r\n if (signal?.aborted) throw this.createAbortError();\r\n }\r\n\r\n private createAbortError() {\r\n const error = new Error('PDF rendering was aborted.');\r\n error.name = 'AbortError';\r\n return error;\r\n }\r\n\r\n public destroy() {\r\n this.loadingTask?.destroy?.();\r\n this.loadingTask = null;\r\n if (this.pdfDoc) {\r\n this.pdfDoc.destroy?.();\r\n this.pdfDoc = null;\r\n }\r\n this.cache.clear();\r\n }\r\n}\r\n","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n *\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\n */\nimport type {\n FlipbookEngine,\n FlipbookEngineEventMap,\n FlipbookEngineEventName,\n FlipbookEngineOptions\n} from './engine';\nimport type { FlipbookSearchOptions, FlipbookSearchResult } from './model/search';\nimport type { FlipbookTocEntry } from './model/toc';\n\nexport type FlipbookEmbedCommandName =\n | 'goToPage'\n | 'nextPage'\n | 'prevPage'\n | 'setZoom'\n | 'setSingleMode'\n | 'updateOptions'\n | 'toggleFullscreen'\n | 'search'\n | 'clearSearch'\n | 'getSearchResults'\n | 'getToc'\n | 'setToc'\n | 'getState';\n\nexport interface FlipbookEmbedOptions {\n /**\n * Origins allowed to send commands. Defaults to the current origin.\n * Use an explicit origin for cross-origin iframe integrations.\n */\n allowedOrigins?: string[];\n /** Origin used for messages sent to the embedding parent. */\n targetOrigin?: string;\n /** Response timeout for the parent-side controller. */\n responseTimeout?: number;\n}\n\nexport interface FlipbookEmbedCommand {\n type: 'flipbook:command';\n command: FlipbookEmbedCommandName;\n requestId?: string;\n payload?: unknown;\n}\n\nexport interface FlipbookEmbedEvent<T extends FlipbookEngineEventName = FlipbookEngineEventName> {\n type: 'flipbook:event';\n event: T;\n payload: FlipbookEngineEventMap[T];\n}\n\nexport interface FlipbookEmbedResponse {\n type: 'flipbook:response';\n requestId?: string;\n ok: boolean;\n result?: unknown;\n error?: string;\n}\n\nexport interface FlipbookEmbedState {\n currentPage: number;\n totalPages: number;\n zoom: number;\n}\n\ntype AnyEventHandler = (payload: unknown) => void;\n\nconst EMBED_COMMAND = 'flipbook:command';\nconst EMBED_EVENT = 'flipbook:event';\nconst EMBED_RESPONSE = 'flipbook:response';\n\nfunction getWindow(): Window | null {\n return typeof window === 'undefined' ? null : window;\n}\n\nfunction normalizeOrigins(options: FlipbookEmbedOptions, currentOrigin: string): string[] {\n const configured = options.allowedOrigins?.filter(Boolean);\n return configured?.length ? configured : [currentOrigin];\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object' ? value as Record<string, unknown> : {};\n}\n\nfunction readNumber(value: unknown, name: string): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new Error(`${name} must be a finite number.`);\n }\n return value;\n}\n\n/**\n * Runs inside an iframe and exposes a restricted postMessage command bridge.\n * Commands are accepted only from window.parent and configured origins.\n */\nexport class FlipbookEmbedBridge {\n private readonly engine: FlipbookEngine;\n private readonly options: FlipbookEmbedOptions;\n private readonly listener: (event: MessageEvent) => void;\n private readonly unsubs: Array<() => void> = [];\n private connected = false;\n private parentOrigin: string | null = null;\n\n constructor(engine: FlipbookEngine, options: FlipbookEmbedOptions = {}) {\n this.engine = engine;\n this.options = options;\n this.listener = (event) => { void this.handleMessage(event); };\n }\n\n connect(): this {\n if (this.connected) return this;\n const currentWindow = getWindow();\n if (!currentWindow || currentWindow.parent === currentWindow) return this;\n\n this.connected = true;\n currentWindow.addEventListener('message', this.listener);\n (Object.keys(this.engineEventNames) as FlipbookEngineEventName[]).forEach((eventName) => {\n this.unsubs.push(this.engine.on(eventName, (payload) => {\n this.postEvent(eventName, payload);\n }));\n });\n return this;\n }\n\n disconnect(): void {\n if (!this.connected) return;\n getWindow()?.removeEventListener('message', this.listener);\n this.unsubs.splice(0).forEach((unsubscribe) => unsubscribe());\n this.connected = false;\n this.parentOrigin = null;\n }\n\n private readonly engineEventNames: Record<FlipbookEngineEventName, true> = {\n init: true,\n destroy: true,\n pageChange: true,\n zoomChange: true,\n thumbsToggle: true,\n tocToggle: true,\n singlePageModeChange: true,\n orientationChange: true,\n progress: true,\n error: true,\n deepLinkChange: true,\n bookmarkChange: true,\n noteChange: true,\n searchChange: true,\n hotspotActivate: true,\n annotationActivate: true\n };\n\n private isAllowedOrigin(origin: string): boolean {\n const currentWindow = getWindow();\n const currentOrigin = currentWindow?.location.origin ?? '';\n return normalizeOrigins(this.options, currentOrigin).includes('*')\n || normalizeOrigins(this.options, currentOrigin).includes(origin);\n }\n\n private post(message: FlipbookEmbedEvent | FlipbookEmbedResponse): void {\n const currentWindow = getWindow();\n const parent = currentWindow?.parent;\n if (!currentWindow || !parent || parent === currentWindow) return;\n\n // Do not guess among multiple allowed origins before the parent has\n // authenticated itself with a message; this avoids cross-origin event leakage.\n const origin = this.options.targetOrigin\n ?? this.parentOrigin\n ?? currentWindow.location.origin;\n parent.postMessage(message, origin);\n }\n\n private postEvent<T extends FlipbookEngineEventName>(event: T, payload: FlipbookEngineEventMap[T]): void {\n this.post({ type: EMBED_EVENT, event, payload } as FlipbookEmbedEvent);\n }\n\n private respond(requestId: string | undefined, result?: unknown, error?: unknown): void {\n this.post({\n type: EMBED_RESPONSE,\n requestId,\n ok: !error,\n ...(error ? { error: error instanceof Error ? error.message : String(error) } : { result })\n });\n }\n\n private async handleMessage(event: MessageEvent): Promise<void> {\n const currentWindow = getWindow();\n if (!currentWindow || event.source !== currentWindow.parent || !this.isAllowedOrigin(event.origin)) return;\n\n const message = readRecord(event.data);\n if (message.type !== EMBED_COMMAND || typeof message.command !== 'string') return;\n this.parentOrigin = event.origin;\n const requestId = typeof message.requestId === 'string' ? message.requestId : undefined;\n try {\n const payload = readRecord(message.payload);\n let result: unknown;\n switch (message.command as FlipbookEmbedCommandName) {\n case 'goToPage':\n this.engine.goToPage(Math.trunc(readNumber(payload.pageIndex, 'pageIndex')));\n result = this.getState();\n break;\n case 'nextPage':\n this.engine.nextPage();\n result = this.getState();\n break;\n case 'prevPage':\n this.engine.prevPage();\n result = this.getState();\n break;\n case 'setZoom':\n this.engine.setZoom(readNumber(payload.zoom, 'zoom'));\n result = this.getState();\n break;\n case 'setSingleMode':\n if (typeof payload.isSingle !== 'boolean') throw new Error('isSingle must be a boolean.');\n this.engine.setSingleMode(payload.isSingle);\n result = this.getState();\n break;\n case 'updateOptions':\n this.engine.updateOptions(payload.options as Partial<FlipbookEngineOptions>);\n result = this.getState();\n break;\n case 'toggleFullscreen':\n this.engine.toggleFullscreen();\n result = this.getState();\n break;\n case 'search':\n result = await this.engine.search(String(payload.query ?? ''), payload.options as FlipbookSearchOptions);\n break;\n case 'clearSearch':\n this.engine.clearSearch();\n result = this.getState();\n break;\n case 'getSearchResults':\n result = this.engine.getSearchResults();\n break;\n case 'getToc':\n result = this.engine.getToc();\n break;\n case 'setToc':\n if (!Array.isArray(payload.entries)) throw new Error('entries must be an array.');\n this.engine.setToc(payload.entries as FlipbookTocEntry[], typeof payload.show === 'boolean' ? payload.show : undefined);\n result = this.getState();\n break;\n case 'getState':\n result = this.getState();\n break;\n default:\n throw new Error(`Unknown embed command: ${message.command}`);\n }\n this.respond(requestId, result);\n } catch (error) {\n this.respond(requestId, undefined, error);\n }\n }\n\n private getState(): FlipbookEmbedState {\n return {\n currentPage: this.engine.getCurrentPage(),\n totalPages: this.engine.getTotalPages(),\n zoom: this.engine.getZoom()\n };\n }\n}\n\nexport interface FlipbookEmbedController {\n send(command: FlipbookEmbedCommandName, payload?: unknown): Promise<unknown>;\n goToPage(pageIndex: number): Promise<FlipbookEmbedState>;\n nextPage(): Promise<FlipbookEmbedState>;\n prevPage(): Promise<FlipbookEmbedState>;\n setZoom(zoom: number): Promise<FlipbookEmbedState>;\n setSingleMode(isSingle: boolean): Promise<FlipbookEmbedState>;\n updateOptions(options: Partial<FlipbookEngineOptions>): Promise<FlipbookEmbedState>;\n toggleFullscreen(): Promise<FlipbookEmbedState>;\n search(query: string, options?: FlipbookSearchOptions): Promise<FlipbookSearchResult[]>;\n clearSearch(): Promise<FlipbookEmbedState>;\n getSearchResults(): Promise<FlipbookSearchResult[]>;\n getToc(): Promise<FlipbookTocEntry[]>;\n setToc(entries: FlipbookTocEntry[], show?: boolean): Promise<FlipbookEmbedState>;\n getState(): Promise<FlipbookEmbedState>;\n on<T extends FlipbookEngineEventName>(event: T, handler: (payload: FlipbookEngineEventMap[T]) => void): () => void;\n destroy(): void;\n}\n\nexport function createFlipbookEmbedController(\n iframe: HTMLIFrameElement,\n options: FlipbookEmbedOptions = {}\n): FlipbookEmbedController {\n const currentWindow = getWindow();\n const targetOrigin = options.targetOrigin ?? currentWindow?.location.origin ?? '*';\n const timeout = options.responseTimeout ?? 5000;\n const pending = new Map<string, { resolve: (value: unknown) => void; reject: (reason?: unknown) => void; timer: ReturnType<typeof setTimeout> }>();\n const handlers: Partial<Record<FlipbookEngineEventName, Set<AnyEventHandler>>> = {};\n let sequence = 0;\n\n const allowedOrigin = (origin: string) => targetOrigin === '*' || origin === targetOrigin;\n const listener = (event: MessageEvent) => {\n if (event.source !== iframe.contentWindow || !allowedOrigin(event.origin)) return;\n const message = readRecord(event.data);\n if (message.type === EMBED_RESPONSE && typeof message.requestId === 'string') {\n const request = pending.get(message.requestId);\n if (!request) return;\n pending.delete(message.requestId);\n clearTimeout(request.timer);\n if (message.ok) request.resolve(message.result);\n else request.reject(new Error(typeof message.error === 'string' ? message.error : 'Embed command failed.'));\n return;\n }\n if (message.type === EMBED_EVENT && typeof message.event === 'string') {\n handlers[message.event as FlipbookEngineEventName]?.forEach((handler) => handler(message.payload));\n }\n };\n\n currentWindow?.addEventListener('message', listener);\n\n const send = (command: FlipbookEmbedCommandName, payload?: unknown): Promise<unknown> => {\n const requestId = `flipbook-${++sequence}`;\n return new Promise((resolve, reject) => {\n if (!iframe.contentWindow) {\n reject(new Error('The embed iframe is not ready.'));\n return;\n }\n const timer = setTimeout(() => {\n pending.delete(requestId);\n reject(new Error(`Embed command timed out: ${command}`));\n }, timeout);\n pending.set(requestId, { resolve, reject, timer });\n iframe.contentWindow.postMessage({ type: EMBED_COMMAND, command, payload, requestId }, targetOrigin);\n });\n };\n\n const controller: FlipbookEmbedController = {\n send,\n goToPage: (pageIndex) => send('goToPage', { pageIndex }) as Promise<FlipbookEmbedState>,\n nextPage: () => send('nextPage') as Promise<FlipbookEmbedState>,\n prevPage: () => send('prevPage') as Promise<FlipbookEmbedState>,\n setZoom: (zoom) => send('setZoom', { zoom }) as Promise<FlipbookEmbedState>,\n setSingleMode: (isSingle) => send('setSingleMode', { isSingle }) as Promise<FlipbookEmbedState>,\n updateOptions: (update) => send('updateOptions', { options: update }) as Promise<FlipbookEmbedState>,\n toggleFullscreen: () => send('toggleFullscreen') as Promise<FlipbookEmbedState>,\n search: (query, searchOptions) => send('search', { query, options: searchOptions }) as Promise<FlipbookSearchResult[]>,\n clearSearch: () => send('clearSearch') as Promise<FlipbookEmbedState>,\n getSearchResults: () => send('getSearchResults') as Promise<FlipbookSearchResult[]>,\n getToc: () => send('getToc') as Promise<FlipbookTocEntry[]>,\n setToc: (entries, show) => send('setToc', { entries, show }) as Promise<FlipbookEmbedState>,\n getState: () => send('getState') as Promise<FlipbookEmbedState>,\n on: (event, handler) => {\n const set = handlers[event] ?? new Set<AnyEventHandler>();\n set.add(handler as AnyEventHandler);\n handlers[event] = set;\n return () => set.delete(handler as AnyEventHandler);\n },\n destroy: () => {\n currentWindow?.removeEventListener('message', listener);\n pending.forEach((request) => {\n clearTimeout(request.timer);\n request.reject(new Error('Embed controller destroyed.'));\n });\n pending.clear();\n Object.keys(handlers).forEach((event) => delete handlers[event as FlipbookEngineEventName]);\n }\n };\n return controller;\n}\n","/**\n * @license FlipbookEngine v1.0.0\n * Copyright (c) 2026 Murat Dogan\n *\n * This source code is dual-licensed under the AGPLv3 and a Commercial License.\n *\n * 1. Open Source (AGPLv3): You may use, modify, and distribute this software\n * under the terms of the GNU Affero General Public License v3.0.\n *\n * 2. Commercial License: If you wish to use this software in commercial,\n * closed-source, or SaaS products without the AGPLv3 obligations,\n * you must purchase a Commercial License from:\n * https://flipbookengine.com/pricing\n */\nimport * as pdfjsLib from 'pdfjs-dist';\nimport { effect } from '@preact/signals-core';\nimport { App } from './components/App';\nimport { PageFlipAdapter } from './adapters/PageFlipAdapter';\nimport { LayoutManager } from './core/LayoutManager';\nimport { InteractionManager } from './core/InteractionManager';\nimport { createFlipbookStore, type FlipbookStore } from './state/store';\nimport { isFlipbookPageAsset, normalizeFlipbookPages, type FlipbookPageAsset, type NormalizedFlipbookPage } from './model/pages';\nimport { applyThemeConfiguration, type FlipbookBackgrounds, type FlipbookThemeMode } from './theme/theme';\nimport { resolveMessages, type FlipbookLocale, type PartialFlipbookMessages } from './i18n/service';\nimport { PdfRenderer, type PdfPageLayout, type PdfPageMode } from './core/PdfRenderer';\nimport { normalizeFlipbookToc, type FlipbookTocEntry } from './model/toc';\nimport type { FlipbookSearchHighlight, FlipbookSearchOptions, FlipbookSearchResult } from './model/search';\nimport type { FlipbookHotspot } from './model/hotspots';\nimport type { FlipbookAnnotation } from './model/annotations';\nimport './styles/flipbook-engine.css';\nimport { FlipbookEmbedBridge, type FlipbookEmbedOptions } from './embed';\nimport { FlipbookPluginRegistry, type FlipbookPlugin } from './plugins';\n\nexport interface FlipbookEngineOptions {\n allowDownload?: boolean;\n showThumbs?: boolean;\n showToc?: boolean;\n toc?: FlipbookTocEntry[];\n showArrows?: boolean;\n primaryColor?: string;\n soundEnabled?: boolean;\n soundUrl?: string;\n flippingTime?: number;\n maxShadowOpacity?: number;\n backgroundColor?: string;\n backgroundImage?: string;\n /** Optional per-theme viewer background. */\n background?: FlipbookBackgrounds | null;\n whiteLabel?: boolean;\n watermarkUrl?: string;\n theme?: FlipbookThemeMode;\n locale?: FlipbookLocale | string;\n messages?: Partial<Record<string, PartialFlipbookMessages>>;\n className?: string;\n cssVariables?: Record<string, string>;\n onDownload?: (url: string) => void;\n /** Called after the toolbar creates and shares/copies the current page URL. */\n onShare?: (url: string) => void;\n singleMode?: boolean;\n isSingleMode?: boolean;\n autoPlay?: boolean;\n autoPlayInterval?: number;\n pdfRenderScale?: number;\n pdfRenderQuality?: number;\n pdfRenderFormat?: string;\n pdfRenderConcurrency?: number;\n pdfRenderCacheSize?: number;\n pdfWorkerSrc?: string;\n /** Controls PDF page splitting: auto detects A3 landscape, single disables it, split splits every landscape page. */\n pdfPageMode?: PdfPageMode;\n /** Enables URL-based page deep links and browser history synchronization. */\n deepLink?: boolean;\n /** Zero-based page indexes initially marked as bookmarks. */\n bookmarks?: number[];\n /** Initial host-managed notes keyed by zero-based page index. */\n notes?: Record<number, string>;\n /** Optional interactive overlays anchored to logical pages using 0..1 coordinates. */\n hotspots?: FlipbookHotspot[];\n /** Optional host-provided note markers anchored to logical pages. */\n annotations?: FlipbookAnnotation[];\n /** Plugins installed before the first viewer render. */\n plugins?: FlipbookPlugin[];\n}\n\nexport interface PageImages extends FlipbookPageAsset {\n pageNumber: number;\n normal: string;\n low: string;\n thumb: string;\n}\n\nexport interface FlipbookEngineEventMap {\n init: { totalPages: number };\n destroy: undefined;\n pageChange: { currentPage: number; pageNumber: number; totalPages: number; isSingle: boolean };\n zoomChange: { zoom: number; isActive: boolean };\n thumbsToggle: { showThumbs: boolean };\n tocToggle: { showToc: boolean };\n singlePageModeChange: { isSingle: boolean };\n orientationChange: { orientation: 'landscape' | 'portrait' };\n progress: { phase: 'loading' | 'rendering'; completed: number; total: number };\n error: { code: 'PDF_LOAD_FAILED' | 'PDF_RENDER_FAILED'; message: string; cause?: unknown };\n deepLinkChange: { pageIndex: number; pageNumber: number; url: string };\n bookmarkChange: { pageIndex: number; pageNumber: number; bookmarked: boolean };\n noteChange: { pageIndex: number; pageNumber: number; note: string | null };\n searchChange: { query: string; results: FlipbookSearchResult[] };\n hotspotActivate: { hotspot: FlipbookHotspot; pageIndex: number };\n annotationActivate: { annotation: FlipbookAnnotation; pageIndex: number };\n}\n\nexport type FlipbookEngineEventName = keyof FlipbookEngineEventMap;\nexport type FlipbookLocaleMessages = PartialFlipbookMessages | Partial<Record<string, PartialFlipbookMessages>>;\n\ntype FlipbookEventHandler<T extends FlipbookEngineEventName> = (payload: FlipbookEngineEventMap[T]) => void;\ntype AnyFlipbookEventHandler = (payload: FlipbookEngineEventMap[FlipbookEngineEventName]) => void;\n\nexport class FlipbookEngine {\n private static readonly DEFAULT_PAGE_VIEWPORT = { width: 420, height: 594 };\n private container: HTMLElement | null = null;\n private options: FlipbookEngineOptions;\n private store: FlipbookStore = createFlipbookStore();\n\n // Core Managers\n private pageFlipAdapter: PageFlipAdapter | null = null;\n private layoutManager: LayoutManager | null = null;\n private interactionManager: InteractionManager | null = null;\n\n private pdfRenderer: PdfRenderer | null = null;\n private listeners: Partial<Record<FlipbookEngineEventName, Set<AnyFlipbookEventHandler>>> = {};\n private initializationTimer: ReturnType<typeof setTimeout> | null = null;\n private initGeneration = 0;\n private initAbortController: AbortController | null = null;\n private eventsReady = false;\n private lastEventState = { currentPage: 0, zoom: 1, zoomActive: false, showThumbs: false, showToc: false, isSingle: false, orientation: '' as '' | 'landscape' | 'portrait' };\n private eventSyncStop: (() => void) | null = null;\n private qualityObserver: IntersectionObserver | null = null;\n private pdfLazyStop: (() => void) | null = null;\n private hasActiveSession = false;\n private readonly pdfPageRequests = new Map<number, Promise<string>>();\n private readonly pdfRenderedPages = new Set<number>();\n private readonly pdfRenderedSources = new Map<number, string>();\n private pdfSourcePageCount = 0;\n private deepLinkListener: (() => void) | null = null;\n private readonly pluginRegistry = new FlipbookPluginRegistry();\n\n constructor(private selector: string | HTMLElement, options: FlipbookEngineOptions = {}) {\n this.options = {\n allowDownload: true,\n showThumbs: false,\n primaryColor: '#7367f0',\n theme: 'auto',\n soundUrl: 'https://flipbookengine.com/Content/page-flip.mp3',\n autoPlayInterval: 3000,\n pdfRenderScale: 1.5,\n pdfRenderQuality: 0.85,\n pdfRenderFormat: 'image/webp',\n pdfRenderConcurrency: 3,\n pdfRenderCacheSize: 32,\n pdfPageMode: 'auto',\n deepLink: false,\n ...options\n };\n this.setupEventSync();\n (options.plugins ?? []).forEach((plugin) => this.installPlugin(plugin));\n }\n\n public async init(pdfUrl: string, imageList?: Array<PageImages | FlipbookPageAsset>) {\n if (typeof this.selector === 'string') {\n this.container = document.querySelector(this.selector) as HTMLElement;\n } else {\n this.container = this.selector;\n }\n\n if (!this.container) return;\n\n this.eventsReady = false;\n this.destroy(true);\n this.setupDeepLinkListener();\n const generation = this.initGeneration;\n const abortController = new AbortController();\n this.initAbortController = abortController;\n\n let resolvedPages: NormalizedFlipbookPage[] = [];\n let viewport = { ...FlipbookEngine.DEFAULT_PAGE_VIEWPORT };\n\n if (imageList && imageList.length > 0) {\n if (abortController.signal.aborted) return;\n const sourceAssets = imageList.filter(isFlipbookPageAsset);\n resolvedPages = normalizeFlipbookPages(sourceAssets);\n\n // Resolve aspect ratio from first page\n const referencePage = resolvedPages[0];\n if (referencePage) {\n const size = await this.loadImageSize(referencePage.low || referencePage.normal);\n if (size) {\n const actualWidth = referencePage.cropMode !== 'full' ? size.width / 2 : size.width;\n const aspectRatio = actualWidth / size.height;\n const baseShortSide = 420;\n viewport = aspectRatio >= 1\n ? { width: Math.round(baseShortSide * aspectRatio), height: baseShortSide }\n : { width: baseShortSide, height: Math.round(baseShortSide / aspectRatio) };\n }\n }\n } else if (pdfUrl) {\n if (abortController.signal.aborted) return;\n let pdfStage: 'load' | 'render' = 'load';\n try {\n this.pdfRenderer = new PdfRenderer({\n scale: this.options.pdfRenderScale,\n quality: this.options.pdfRenderQuality,\n format: this.options.pdfRenderFormat,\n concurrency: this.options.pdfRenderConcurrency,\n cacheSize: this.options.pdfRenderCacheSize,\n workerSrc: this.options.pdfWorkerSrc\n });\n\n this.emit('progress', { phase: 'loading', completed: 0, total: 0 });\n const totalPages = await this.pdfRenderer.loadDocument(pdfUrl, abortController.signal);\n pdfStage = 'render';\n this.emit('progress', { phase: 'loading', completed: 1, total: totalPages });\n const pageLayouts = await this.pdfRenderer.getPageLayouts(this.options.pdfPageMode);\n viewport = pageLayouts.length\n ? await this.pdfRenderer.calculateViewportDimensions(420, pageLayouts[0])\n : await this.pdfRenderer.calculateViewportDimensions();\n resolvedPages = pageLayouts.length\n ? this.createPdfPlaceholders(pageLayouts)\n : Array.from({ length: totalPages }, (_, index) => this.createPdfPlaceholder(index + 1));\n this.pdfSourcePageCount = totalPages;\n } catch (e: any) {\n if (!abortController.signal.aborted) {\n console.error(\"PDF load failed:\", e);\n this.emit('error', {\n code: pdfStage === 'load' ? 'PDF_LOAD_FAILED' : 'PDF_RENDER_FAILED',\n message: e instanceof Error ? e.message : 'Unable to load PDF.',\n cause: e\n });\n }\n return;\n }\n }\n\n if (abortController.signal.aborted || generation !== this.initGeneration) return;\n if (!resolvedPages.length) return;\n\n // 1. Initialize State\n this.store.init(this.options, resolvedPages.length, resolvedPages, !!pdfUrl, !imageList?.length && !!pdfUrl);\n this.applyInitialDeepLink();\n\n // 2. Setup DOM container\n applyThemeConfiguration(this.container, this.options);\n this.container.innerHTML = '';\n\n // 3. Mount App Component\n // In DOMWise, TSX returns actual DOM nodes\n let bookWrapperEl: HTMLElement;\n let bookSizerEl: HTMLElement;\n let bookContainerEl: HTMLElement;\n\n const pageFlipAdapterRef = { current: null as any };\n const interactionManagerRef = { current: null as any };\n\n // Pass refs to capture DOM elements created by DOMWise\n const appNode = App({\n pageFlipAdapterRef,\n interactionManagerRef,\n bookWrapperRef: (el) => bookWrapperEl = el,\n bookSizerRef: (el) => bookSizerEl = el,\n bookContainerRef: (el) => bookContainerEl = el,\n className: this.options.className,\n store: this.store,\n pluginRegistry: this.pluginRegistry,\n onToggleFullscreen: () => this.toggleFullscreen(),\n onDownload: () => {\n if (!pdfUrl) return;\n if (this.options.onDownload) this.options.onDownload(pdfUrl);\n else window.open(pdfUrl, '_blank');\n },\n onShare: () => {\n void this.sharePage().then((url) => this.options.onShare?.(url)).catch((error) => {\n console.warn('Share err:', error);\n });\n },\n onToggleBookmark: () => this.toggleBookmark(),\n onToggleNotes: () => {\n this.store.showNotes.value = !this.store.showNotes.value;\n },\n onSaveNote: (note: string) => this.setNote(this.getCurrentPage(), note),\n onClearNote: () => this.clearNote(this.getCurrentPage()),\n onCloseNotes: () => {\n this.store.showNotes.value = false;\n },\n onSearch: (query, searchOptions) => { void this.search(query, searchOptions); },\n onClearSearch: () => this.clearSearch(),\n onCloseSearch: () => { this.store.showSearch.value = false; },\n onSelectSearchResult: (pageIndex) => { this.goToPage(pageIndex); this.store.showSearch.value = false; },\n onHotspotActivate: (hotspot) => this.activateHotspot(hotspot.id),\n onHotspotClose: () => this.closeHotspot(),\n onAnnotationActivate: (annotation) => this.activateAnnotation(annotation.id),\n onAnnotationClose: () => this.closeAnnotation()\n });\n\n this.container.appendChild(appNode as unknown as Node);\n this.setupQualityLoading();\n\n // 4. Initialize Core Managers\n this.layoutManager = new LayoutManager(viewport, this.store);\n this.layoutManager.onResizeCallback = () => {\n if (this.pageFlipAdapter) {\n this.pageFlipAdapter.update();\n }\n };\n this.layoutManager.init(bookWrapperEl!, bookSizerEl!);\n\n this.pageFlipAdapter = new PageFlipAdapter(bookContainerEl!, this.options, this.store);\n pageFlipAdapterRef.current = this.pageFlipAdapter;\n\n // Wait a tick for styles to apply before initializing PageFlip.\n // The init promise resolves only after this setup is complete.\n await new Promise<void>((resolve) => {\n const finish = () => {\n abortController.signal.removeEventListener('abort', finish);\n resolve();\n };\n abortController.signal.addEventListener('abort', finish, { once: true });\n this.initializationTimer = setTimeout(async () => {\n this.initializationTimer = null;\n abortController.signal.removeEventListener('abort', finish);\n if (abortController.signal.aborted || generation !== this.initGeneration || !this.pageFlipAdapter) {\n resolve();\n return;\n }\n\n this.pageFlipAdapter.init(viewport.width, viewport.height);\n this.interactionManager = new InteractionManager(bookWrapperEl!, this.pageFlipAdapter, this.store);\n this.interactionManager.init();\n interactionManagerRef.current = this.interactionManager;\n this.setupPdfLazyLoading();\n if (this.pdfRenderer && pdfUrl) {\n try {\n await this.renderPdfPage(1, abortController.signal);\n } catch {\n resolve();\n return;\n }\n }\n if (abortController.signal.aborted || generation !== this.initGeneration) {\n resolve();\n return;\n }\n\n this.eventsReady = true;\n this.captureEventState();\n this.hasActiveSession = true;\n this.emit('init', { totalPages: resolvedPages.length });\n resolve();\n }, 10);\n });\n if (this.initAbortController === abortController) {\n this.initAbortController = null;\n }\n }\n\n private createPdfPlaceholder(pageNumber: number): NormalizedFlipbookPage {\n const placeholder = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n return { index: pageNumber - 1, assetId: 'pdf-page-' + pageNumber + '-full', pageNumber, sourcePageNumber: pageNumber, cropMode: 'full', normal: placeholder, low: placeholder, thumb: placeholder };\n }\n\n private createPdfPlaceholders(layouts: PdfPageLayout[]): NormalizedFlipbookPage[] {\n const placeholder = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n const pages: NormalizedFlipbookPage[] = [];\n layouts.forEach((layout, sourceIndex) => {\n const sourcePageNumber = sourceIndex + 1;\n const crops = layout.split ? (['left', 'right'] as const) : (['full'] as const);\n crops.forEach((cropMode) => {\n const pageNumber = pages.length + 1;\n pages.push({\n index: pages.length,\n assetId: `pdf-page-${sourcePageNumber}-${cropMode}`,\n pageNumber,\n sourcePageNumber,\n cropMode,\n normal: placeholder,\n low: placeholder,\n thumb: placeholder\n });\n });\n });\n return pages;\n }\n\n private renderPdfPage(pageNumber: number, signal?: AbortSignal): Promise<string> {\n const renderer = this.pdfRenderer;\n const generation = this.initGeneration;\n if (!renderer) return Promise.resolve('');\n const existing = this.pdfPageRequests.get(pageNumber);\n if (existing) return existing;\n if (this.pdfRenderedPages.has(pageNumber)) {\n const dataUrl = this.pdfRenderedSources.get(pageNumber);\n if (dataUrl) this.hydratePdfImages(pageNumber, dataUrl);\n return Promise.resolve(dataUrl || '');\n }\n\n const request = renderer.renderPageToDataUrl(pageNumber, signal).then((dataUrl) => {\n if (generation !== this.initGeneration || signal?.aborted) throw this.createAbortError();\n if (!dataUrl) throw new Error('PDF page ' + pageNumber + ' produced no image.');\n this.pdfRenderedPages.add(pageNumber);\n this.pdfRenderedSources.set(pageNumber, dataUrl);\n this.hydratePdfImages(pageNumber, dataUrl);\n this.emit('progress', {\n phase: 'rendering',\n completed: this.pdfRenderedPages.size,\n total: this.pdfSourcePageCount || this.store.totalPages.value\n });\n return dataUrl;\n }).catch((error) => {\n if (generation !== this.initGeneration && error?.name !== 'AbortError') throw this.createAbortError();\n if (error?.name === 'AbortError') throw error;\n this.emit('error', {\n code: 'PDF_RENDER_FAILED',\n message: error instanceof Error ? error.message : 'Unable to render PDF page.',\n cause: error\n });\n throw error;\n }).finally(() => {\n if (this.pdfPageRequests.get(pageNumber) === request) this.pdfPageRequests.delete(pageNumber);\n });\n this.pdfPageRequests.set(pageNumber, request);\n return request;\n }\n\n private hydratePdfImages(pageNumber: number, dataUrl: string) {\n this.container?.querySelectorAll<HTMLImageElement>('img').forEach((image) => {\n if (image.dataset.pdfPage !== String(pageNumber)) return;\n image.src = dataUrl;\n delete image.dataset.pdfPage;\n });\n }\n private setupPdfLazyLoading() {\n this.pdfLazyStop?.();\n this.pdfLazyStop = null;\n if (!this.pdfRenderer) return;\n this.pdfLazyStop = effect(() => {\n const current = this.store.pages.value[this.store.currentPage.value];\n const next = this.store.pages.value[this.store.currentPage.value + 1];\n const sourcePages = new Set([current?.sourcePageNumber ?? current?.pageNumber, next?.sourcePageNumber ?? next?.pageNumber]);\n sourcePages.forEach((sourcePage) => {\n if (sourcePage) void this.renderPdfPage(sourcePage).catch(() => {});\n });\n });\n }\n private loadImageSize(src: string): Promise<{ width: number; height: number } | null> {\n return new Promise(resolve => {\n const image = new Image();\n image.onload = () => resolve({ width: image.naturalWidth || image.width, height: image.naturalHeight || image.height });\n image.onerror = () => resolve(null);\n image.src = src;\n });\n }\n\n public goToPage(targetIdx: number) {\n const maxIndex = Math.max(0, this.store.totalPages.value - 1);\n this.store.currentPage.value = Math.max(0, Math.min(maxIndex, Math.trunc(targetIdx)));\n }\n\n public getTotalPages(): number {\n return this.store.totalPages.value;\n }\n\n public getCurrentPage(): number {\n return this.store.currentPage.value;\n }\n\n /** Returns the normalized host-provided table of contents. */\n public getToc(): FlipbookTocEntry[] {\n const clone = (entry: FlipbookTocEntry): FlipbookTocEntry => ({\n ...entry,\n ...(entry.children ? { children: entry.children.map(clone) } : {})\n });\n return this.store.toc.value.map(clone);\n }\n\n /** Replaces the table of contents and optionally opens its panel. */\n public setToc(entries: FlipbookTocEntry[], show = this.store.showToc.value): void {\n this.store.toc.value = normalizeFlipbookToc(entries, this.store.totalPages.value);\n this.store.showToc.value = Boolean(show) && this.store.toc.value.length > 0;\n }\n\n /** Installs a plugin. Plugins installed after init are available to the next render. */\n public installPlugin(plugin: FlipbookPlugin): this {\n this.pluginRegistry.install(this, plugin);\n return this;\n }\n\n /** Removes an installed plugin and all of its registered contributions. */\n public uninstallPlugin(name: string): boolean {\n return this.pluginRegistry.uninstall(name);\n }\n\n /** Returns the names of installed plugins. */\n public getPluginNames(): string[] {\n return this.pluginRegistry.getPluginNames();\n }\n\n /** Calls a namespaced API registered by a plugin. */\n public callPluginApi<T = unknown>(pluginName: string, apiName: string, ...args: any[]): Promise<T> {\n return this.pluginRegistry.callApi<T>(pluginName, apiName, ...args);\n }\n\n /** Internal UI registry used by the built-in DOM renderer. */\n public getPluginRegistry() {\n return this.pluginRegistry;\n }\n\n /** Returns the zero-based page indexes currently marked as bookmarks. */\n public getBookmarkedPages(): number[] {\n return Array.from(this.store.bookmarkedPages.value).sort((a, b) => a - b);\n }\n\n /** Returns whether a zero-based page index is bookmarked. */\n public isBookmarked(pageIndex = this.getCurrentPage()): boolean {\n return this.store.bookmarkedPages.value.has(Math.trunc(pageIndex));\n }\n\n /** Sets the bookmark state for a zero-based page index and emits bookmarkChange when it changes. */\n public setBookmark(pageIndex: number, bookmarked = true): void {\n if (this.store.totalPages.value === 0 || !Number.isFinite(pageIndex)) return;\n const boundedIndex = Math.max(0, Math.min(this.store.totalPages.value - 1, Math.trunc(pageIndex)));\n const current = this.store.bookmarkedPages.value;\n if (current.has(boundedIndex) === bookmarked) return;\n const next = new Set(current);\n if (bookmarked) next.add(boundedIndex); else next.delete(boundedIndex);\n this.store.bookmarkedPages.value = next;\n this.emit('bookmarkChange', { pageIndex: boundedIndex, pageNumber: boundedIndex + 1, bookmarked });\n }\n\n /** Toggles the bookmark state for a zero-based page index. */\n public toggleBookmark(pageIndex = this.getCurrentPage()): void {\n this.setBookmark(pageIndex, !this.isBookmarked(pageIndex));\n }\n\n /** Returns all non-empty host-managed notes keyed by zero-based page index. */\n public getNotes(): Record<number, string> {\n return Object.fromEntries(this.store.pageNotes.value);\n }\n\n /** Returns the note for a zero-based page index, if one exists. */\n public getNote(pageIndex = this.getCurrentPage()): string | undefined {\n return this.store.pageNotes.value.get(Math.trunc(pageIndex));\n }\n\n /** Sets or clears a host-managed note and emits noteChange when it changes. */\n public setNote(pageIndex: number, note: string): void {\n if (this.store.totalPages.value === 0 || !Number.isFinite(pageIndex)) return;\n const boundedIndex = Math.max(0, Math.min(this.store.totalPages.value - 1, Math.trunc(pageIndex)));\n const normalizedNote = String(note ?? '').trim();\n const currentNote = this.store.pageNotes.value.get(boundedIndex);\n if (currentNote === (normalizedNote || undefined)) return;\n const next = new Map(this.store.pageNotes.value);\n if (normalizedNote) next.set(boundedIndex, normalizedNote); else next.delete(boundedIndex);\n this.store.pageNotes.value = next;\n this.emit('noteChange', { pageIndex: boundedIndex, pageNumber: boundedIndex + 1, note: normalizedNote || null });\n }\n\n /** Clears the host-managed note for a zero-based page index. */\n public clearNote(pageIndex = this.getCurrentPage()): void {\n this.setNote(pageIndex, '');\n }\n\n /** Searches the loaded PDF text without rendering pages and updates result highlights. */\n public async search(query: string, options: FlipbookSearchOptions = {}): Promise<FlipbookSearchResult[]> {\n const normalizedQuery = String(query ?? '').trim();\n if (!normalizedQuery || !this.pdfRenderer || !this.store.isPdfMode.value) {\n this.store.searchQuery.value = normalizedQuery;\n this.store.searchResults.value = [];\n this.emit('searchChange', { query: normalizedQuery, results: [] });\n return [];\n }\n const sourceResults = await this.pdfRenderer.searchText(normalizedQuery, options);\n const results: FlipbookSearchResult[] = [];\n sourceResults.forEach((source) => {\n this.store.pages.value.forEach((page) => {\n if ((page.sourcePageNumber ?? page.pageNumber) !== source.sourcePageNumber) return;\n const highlights = this.mapSearchHighlights(source.highlights, page.cropMode);\n if (source.highlights?.length && !highlights.length) return;\n results.push({ pageIndex: page.index, pageNumber: page.pageNumber, sourcePageNumber: source.sourcePageNumber, matches: source.matches, snippet: source.snippet, ...(source.highlights ? { highlights } : {}) });\n });\n });\n const maxResults = Number.isFinite(options.maxResults) ? Math.max(1, Math.trunc(options.maxResults as number)) : 100;\n this.store.searchQuery.value = normalizedQuery;\n this.store.searchResults.value = results.slice(0, maxResults);\n this.emit('searchChange', { query: normalizedQuery, results: this.store.searchResults.value });\n return this.store.searchResults.value;\n }\n\n private mapSearchHighlights(highlights: FlipbookSearchHighlight[] | undefined, cropMode: NormalizedFlipbookPage['cropMode']): FlipbookSearchHighlight[] {\n if (!highlights?.length || cropMode === 'full') return highlights ?? [];\n const cropStart = cropMode === 'right' ? 0.5 : 0;\n return highlights.flatMap((highlight) => {\n const start = Math.max(cropStart, highlight.x);\n const end = Math.min(cropStart + 0.5, highlight.x + highlight.width);\n if (end <= start) return [];\n return [{\n x: Math.max(0, Math.min(1, (start - cropStart) * 2)),\n y: Math.max(0, Math.min(1, highlight.y)),\n width: Math.max(0, Math.min(1, (end - start) * 2)),\n height: Math.max(0, Math.min(1, highlight.height))\n }];\n });\n }\n\n /** Clears the current client-side search. */\n public clearSearch(): void {\n this.store.searchQuery.value = '';\n this.store.searchResults.value = [];\n this.emit('searchChange', { query: '', results: [] });\n }\n\n public getSearchResults(): FlipbookSearchResult[] { return this.store.searchResults.value.slice(); }\n\n public getHotspots(pageIndex = this.getCurrentPage()): FlipbookHotspot[] {\n return this.store.hotspots.value.filter((hotspot) => hotspot.pageIndex === pageIndex);\n }\n\n public activateHotspot(hotspotId: string): void {\n const hotspot = this.store.hotspots.value.find((item) => item.id === hotspotId);\n if (!hotspot) return;\n this.store.activeHotspotId.value = hotspot.id;\n this.emit('hotspotActivate', { hotspot, pageIndex: hotspot.pageIndex });\n }\n\n public closeHotspot(): void { this.store.activeHotspotId.value = null; }\n\n public getAnnotations(pageIndex = this.getCurrentPage()): FlipbookAnnotation[] {\n return this.store.annotations.value.filter((annotation) => annotation.pageIndex === pageIndex);\n }\n\n public activateAnnotation(annotationId: string): void {\n const annotation = this.store.annotations.value.find((item) => item.id === annotationId);\n if (!annotation) return;\n this.store.activeAnnotationId.value = annotation.id;\n this.emit('annotationActivate', { annotation, pageIndex: annotation.pageIndex });\n }\n\n public closeAnnotation(): void { this.store.activeAnnotationId.value = null; }\n\n public getZoom(): number {\n return this.store.zoomState.value.scale;\n }\n\n public setZoom(zoomLevel: number) {\n const requestedZoom = Number.isFinite(zoomLevel) ? zoomLevel : 1;\n const scale = Math.max(0.5, Math.min(5, requestedZoom));\n this.store.zoomState.value = {\n ...this.store.zoomState.value,\n scale,\n isActive: scale > 1,\n ...(scale <= 1 ? { translateX: 0, translateY: 0 } : {})\n };\n this.store.isZoomed.value = scale > 1;\n }\n\n public nextPage() {\n if (this.pageFlipAdapter) this.pageFlipAdapter.turnToNextPage();\n }\n\n public toggleFullscreen() {\n const target = this.container;\n if (!target) return;\n if (!document.fullscreenElement) {\n target.requestFullscreen?.().catch((error) => console.warn('Fullscreen err:', error));\n } else {\n document.exitFullscreen?.().catch((error) => console.warn('Exit fullscreen err:', error));\n }\n }\n\n public setLocale(locale: FlipbookLocale | string, messages?: FlipbookLocaleMessages) {\n const mergedMessages = messages\n ? { ...this.options.messages, [locale]: (messages as Partial<Record<string, PartialFlipbookMessages>>)[locale] ?? messages }\n : this.options.messages;\n this.options = { ...this.options, locale, messages: mergedMessages };\n this.store.locale.value = locale;\n if (mergedMessages) this.store.messages.value = mergedMessages;\n }\n public prevPage() {\n if (this.pageFlipAdapter) this.pageFlipAdapter.turnToPrevPage();\n }\n\n public setSingleMode(isSingle: boolean) {\n this.store.isSingleMode.value = isSingle;\n if (isSingle && this.pdfRenderer) {\n setTimeout(() => {\n const page = this.store.pages.value[this.store.currentPage.value];\n const sourcePage = page?.sourcePageNumber ?? page?.pageNumber;\n if (sourcePage) void this.renderPdfPage(sourcePage).catch(() => {});\n }, 0);\n }\n }\n\n public updateOptions(options: Partial<FlipbookEngineOptions>) {\n const deepLinkChanged = options.deepLink !== undefined && options.deepLink !== this.options.deepLink;\n this.options = { ...this.options, ...options };\n if (deepLinkChanged) {\n if (this.options.deepLink) this.setupDeepLinkListener();\n else this.teardownDeepLinkListener();\n }\n if (options.theme !== undefined) this.store.themeMode.value = options.theme;\n if (options.primaryColor !== undefined) this.store.primaryColor.value = options.primaryColor;\n if (options.showThumbs !== undefined) this.store.showThumbs.value = options.showThumbs;\n if (options.showToc !== undefined) this.store.showToc.value = options.showToc;\n if (options.toc !== undefined) this.store.toc.value = normalizeFlipbookToc(options.toc, this.store.totalPages.value);\n if (options.showArrows !== undefined) this.store.showArrows.value = options.showArrows;\n if (options.allowDownload !== undefined) this.store.allowDownload.value = options.allowDownload;\n if (options.whiteLabel !== undefined) this.store.whiteLabel.value = options.whiteLabel;\n if (options.soundEnabled !== undefined) this.store.soundEnabled.value = options.soundEnabled;\n if (options.locale !== undefined) this.store.locale.value = options.locale;\n if (options.messages !== undefined) this.store.messages.value = options.messages;\n if (options.singleMode !== undefined) this.store.isSingleMode.value = options.singleMode;\n if (options.isSingleMode !== undefined) this.store.isSingleMode.value = options.isSingleMode;\n if (options.autoPlay !== undefined) this.store.isAutoPlaying.value = options.autoPlay;\n if (options.autoPlayInterval !== undefined) this.store.autoPlayInterval.value = options.autoPlayInterval;\n if (options.bookmarks !== undefined) this.store.bookmarkedPages.value = new Set(options.bookmarks.map((page) => Math.trunc(page)).filter((page) => Number.isInteger(page) && page >= 0 && page < this.store.totalPages.value));\n if (options.notes !== undefined) this.store.pageNotes.value = new Map(Object.entries(options.notes).map(([page, note]) => [Math.trunc(Number(page)), String(note).trim()] as const).filter(([page, note]) => Number.isInteger(page) && page >= 0 && page < this.store.totalPages.value && note.length > 0));\n if (options.hotspots !== undefined) this.store.hotspots.value = options.hotspots;\n if (options.annotations !== undefined) this.store.annotations.value = options.annotations;\n\n if (this.container) {\n applyThemeConfiguration(this.container, this.options);\n }\n }\n\n private setupDeepLinkListener() {\n this.teardownDeepLinkListener();\n if (!this.options.deepLink || typeof window === 'undefined') return;\n this.deepLinkListener = () => {\n if (!this.eventsReady || this.store.totalPages.value === 0) return;\n const pageIndex = this.readDeepLinkPage();\n if (pageIndex !== null && pageIndex !== this.store.currentPage.value) this.goToPage(pageIndex);\n };\n window.addEventListener('popstate', this.deepLinkListener);\n window.addEventListener('hashchange', this.deepLinkListener);\n }\n\n private teardownDeepLinkListener() {\n if (!this.deepLinkListener || typeof window === 'undefined') return;\n window.removeEventListener('popstate', this.deepLinkListener);\n window.removeEventListener('hashchange', this.deepLinkListener);\n this.deepLinkListener = null;\n }\n\n private readDeepLinkPage(url = typeof window === 'undefined' ? '' : window.location.href): number | null {\n if (!url || this.store.totalPages.value === 0) return null;\n try {\n const parsed = new URL(url, typeof document === 'undefined' ? undefined : document.baseURI);\n const hashPage = parsed.hash.match(/(?:^#|&)page=(\\d+)/i)?.[1];\n const rawPage = parsed.searchParams.get('page') ?? hashPage;\n if (rawPage == null) return 0;\n const pageNumber = Number(rawPage);\n if (!Number.isInteger(pageNumber) || pageNumber < 1) return null;\n return Math.min(pageNumber - 1, this.store.totalPages.value - 1);\n } catch {\n return null;\n }\n }\n\n private applyInitialDeepLink() {\n if (!this.options.deepLink) return;\n const pageIndex = this.readDeepLinkPage();\n if (pageIndex !== null) this.store.currentPage.value = pageIndex;\n }\n\n private updateDeepLink(pageIndex: number) {\n if (!this.options.deepLink || typeof window === 'undefined' || this.store.totalPages.value === 0) return;\n const boundedIndex = Math.max(0, Math.min(this.store.totalPages.value - 1, Math.trunc(pageIndex)));\n const pageNumber = boundedIndex + 1;\n try {\n const url = new URL(window.location.href);\n url.searchParams.set('page', String(pageNumber));\n const nextUrl = url.toString();\n if (nextUrl !== window.location.href) window.history.replaceState(window.history.state, '', nextUrl);\n this.emit('deepLinkChange', { pageIndex: boundedIndex, pageNumber, url: nextUrl });\n } catch {\n // Ignore restricted history contexts such as sandboxed documents.\n }\n }\n\n /** Returns a shareable URL addressing a 1-based page number. */\n public getPageUrl(pageIndex = this.getCurrentPage()): string {\n if (typeof window === 'undefined') return '';\n const totalPages = this.getTotalPages();\n const boundedIndex = totalPages > 0\n ? Math.max(0, Math.min(totalPages - 1, Math.trunc(pageIndex)))\n : Math.max(0, Math.trunc(pageIndex));\n const url = new URL(window.location.href);\n url.searchParams.set('page', String(boundedIndex + 1));\n return url.toString();\n }\n\n /** Opens the native share dialog or copies a page URL to the clipboard. */\n public async sharePage(pageIndex = this.getCurrentPage()): Promise<string> {\n const url = this.getPageUrl(pageIndex);\n if (typeof navigator !== 'undefined' && typeof navigator.share === 'function') {\n await navigator.share({ title: typeof document === 'undefined' ? undefined : document.title, url });\n } else if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(url);\n }\n return url;\n }\n\n /** Connects an optional postMessage bridge for iframe/embed integrations. */\n public connectEmbed(options: FlipbookEmbedOptions = {}): FlipbookEmbedBridge {\n return new FlipbookEmbedBridge(this, options).connect();\n }\n\n public async setPages(imageList?: Array<PageImages | FlipbookPageAsset>, pdfUrl?: string) {\n // Framework wrappers call this after their initial render. When no image\n // pages are supplied, the current PDF-backed viewer must stay mounted;\n // reinitializing with an empty source clears an otherwise valid PDF view.\n if (!imageList?.length) {\n if (pdfUrl) {\n await this.init(pdfUrl);\n }\n return;\n }\n\n await this.init(pdfUrl || '', imageList);\n }\n\n private setupQualityLoading() {\n this.teardownQualityLoading();\n if (!this.container) return;\n\n const images = Array.from(this.container.querySelectorAll<HTMLImageElement>('img[data-src], img[data-pdf-page]'));\n const upgrade = (image: HTMLImageElement) => {\n const pdfPage = Number(image.dataset.pdfPage);\n if (Number.isInteger(pdfPage) && pdfPage > 0) {\n void this.renderPdfPage(pdfPage).catch(() => {});\n return;\n }\n const highQualitySrc = image.dataset.src;\n if (!highQualitySrc) return;\n image.src = highQualitySrc;\n delete image.dataset.src;\n };\n\n const Observer = this.container.ownerDocument.defaultView?.IntersectionObserver;\n if (!Observer) {\n const pdfPages = new Set<number>();\n images.forEach((image) => {\n const pdfPage = Number(image.dataset.pdfPage);\n if (Number.isInteger(pdfPage) && pdfPage > 0) {\n if (pdfPages.size < 2) {\n pdfPages.add(pdfPage);\n upgrade(image);\n }\n } else {\n upgrade(image);\n }\n });\n return;\n }\n\n this.qualityObserver = new Observer((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n upgrade(entry.target as HTMLImageElement);\n this.qualityObserver?.unobserve(entry.target);\n }\n });\n }, { root: this.container, rootMargin: '240px' });\n images.forEach((image) => this.qualityObserver?.observe(image));\n }\n\n private teardownQualityLoading() {\n this.qualityObserver?.disconnect();\n this.qualityObserver = null;\n }\n private setupEventSync() {\n this.eventSyncStop = effect(() => {\n const state = {\n currentPage: this.store.currentPage.value,\n zoom: this.store.zoomState.value.scale,\n zoomActive: this.store.zoomState.value.isActive,\n showThumbs: this.store.showThumbs.value,\n showToc: this.store.showToc.value,\n isSingle: this.store.isSingleMode.value,\n orientation: this.store.orientation.value\n };\n if (!this.eventsReady) {\n this.lastEventState = state;\n return;\n }\n if (state.currentPage !== this.lastEventState.currentPage) {\n this.emit('pageChange', {\n currentPage: state.currentPage,\n pageNumber: state.currentPage + 1,\n totalPages: this.store.totalPages.value,\n isSingle: state.isSingle\n });\n this.updateDeepLink(state.currentPage);\n }\n if (state.zoom !== this.lastEventState.zoom || state.zoomActive !== this.lastEventState.zoomActive) {\n this.emit('zoomChange', { zoom: state.zoom, isActive: state.zoomActive });\n }\n if (state.showThumbs !== this.lastEventState.showThumbs) {\n this.emit('thumbsToggle', { showThumbs: state.showThumbs });\n }\n if (state.showToc !== this.lastEventState.showToc) {\n this.emit('tocToggle', { showToc: state.showToc });\n }\n if (state.isSingle !== this.lastEventState.isSingle) {\n this.emit('singlePageModeChange', { isSingle: state.isSingle });\n }\n if (state.orientation !== this.lastEventState.orientation) {\n this.emit('orientationChange', { orientation: state.orientation });\n }\n this.lastEventState = state;\n });\n }\n\n private captureEventState() {\n this.lastEventState = {\n currentPage: this.store.currentPage.value,\n zoom: this.store.zoomState.value.scale,\n zoomActive: this.store.zoomState.value.isActive,\n showThumbs: this.store.showThumbs.value,\n showToc: this.store.showToc.value,\n isSingle: this.store.isSingleMode.value,\n orientation: this.store.orientation.value\n };\n }\n public destroy(keepContainer = false) {\n const hadSession = this.hasActiveSession || !!this.initAbortController || !!this.pageFlipAdapter || !!this.layoutManager || !!this.interactionManager || !!this.pdfRenderer;\n this.initGeneration++;\n this.teardownDeepLinkListener();\n this.initAbortController?.abort();\n this.initAbortController = null;\n if (this.initializationTimer) {\n clearTimeout(this.initializationTimer);\n this.initializationTimer = null;\n }\n\n if (this.pageFlipAdapter) {\n this.pageFlipAdapter.destroy();\n }\n if (this.layoutManager) {\n this.layoutManager.destroy();\n }\n if (this.interactionManager) {\n this.interactionManager.destroy();\n }\n this.teardownQualityLoading();\n this.pdfLazyStop?.();\n this.pdfLazyStop = null;\n this.pdfPageRequests.clear();\n this.pdfRenderedPages.clear();\n this.pdfRenderedSources.clear();\n this.pdfSourcePageCount = 0;\n if (this.pdfRenderer) {\n this.pdfRenderer.destroy();\n }\n\n this.pageFlipAdapter = null;\n this.layoutManager = null;\n this.interactionManager = null;\n this.pdfRenderer = null;\n this.eventsReady = false;\n this.hasActiveSession = false;\n this.store.reset();\n\n if (!keepContainer && this.container) {\n this.container.innerHTML = '';\n }\n\n if (hadSession) this.emit('destroy', undefined);\n if (!keepContainer) this.pluginRegistry.clear();\n }\n\n private createAbortError() {\n const error = new Error('Flipbook initialization was aborted.');\n error.name = 'AbortError';\n return error;\n }\n\n public on<T extends FlipbookEngineEventName>(eventName: T, handler: FlipbookEventHandler<T>) {\n const listeners = this.listeners[eventName] ?? new Set<AnyFlipbookEventHandler>();\n listeners.add(handler as AnyFlipbookEventHandler);\n this.listeners[eventName] = listeners;\n return () => this.off(eventName, handler);\n }\n\n public off<T extends FlipbookEngineEventName>(eventName: T, handler: FlipbookEventHandler<T>) {\n this.listeners[eventName]?.delete(handler as AnyFlipbookEventHandler);\n }\n\n private emit<T extends FlipbookEngineEventName>(eventName: T, payload: FlipbookEngineEventMap[T]) {\n this.listeners[eventName]?.forEach((listener) => {\n (listener as FlipbookEventHandler<T>)(payload);\n });\n }\n}\n\nconst globalScope = globalThis as any;\nconst flipbookNamespace = globalScope.FlipbookEngine || {};\nflipbookNamespace.FlipbookEngine = FlipbookEngine;\nglobalScope.FlipbookEngine = flipbookNamespace;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],"names":["initPropHookSymbol","isElement","val","isString","isNumber","isObject","isComponentClass","isArrayLike","isPropHook","value","isVisibleChild","className","k","isRefObject","maybeRef","setRef","ref","current","initComponentClass","Class","attr","children","instance","node","MathMLNamespace","mathMLOnlyTags","svgOnlyTags","nonPresentationSVGAttributes","SVGNamespace","jsxNamespaceURISymbol","currentNamespaceURI","jsxTypeKeySymbol","shadowRootKey","isShadowRoot","el","disposingListenersSymbol","lifecycleRootSymbol","getDisposingListeners","disposingEventListener","ev","invokeDisposingListeners","opt","disposingListeners","invokeFor","listeners","disposer","addDisposingListener","target","handler","regKey","existing","x2","removeDisposingListener","index","listener","currentLifecycleRoot","args","prev","isSignalLike","obj","SignalObserveArgsImpl","_a","signal2","lifecycleRoot","lifecycleNode","__privateAdd","_SignalObserveArgsImpl_instances","_dispose","_node","__privateSet","__privateGet","__privateMethod","delDispose_fn","addDispose_fn","observeSignal","callback","appendChild","parent","child","fragmentPlaceholderIdx","placeholderPrefix","isPlaceholder","isFragmentWithPlaceholder","replaceNode","oldNode","newNode","wrapAsNode","appendChildrenWithSignal","prevNode","prevNodeNew2","appendChildren","n2","prevNodeNew","shadowRoot","unsignalizePrevClass","item","key","clearPrevClass","prevClassNames","cls","assignClass","applyClassName","newList","prevList","prefixKey","prefix","isUnitlessNumber","rec","prefixes","prop","setStylePropValue","clearPrevStyle","assignStyle","XLinkNamespace","XMLNamespace","normalizeAttribute","s2","separator","match","mappedKeys","assignProp","v2","dataKey","dataValue","useCapture","eventName","eventHandler","attribute","nodeEventPropDisposer","assignProps","props","jsx","tag","ns","values","option","i","t","s","i2","t2","i3","c","h","v","r2","w","n3","r","o","e","d","a","l","j","o2","_","b","p","S","m","x","E","enMessages","trMessages","builtInMessages","resolveMessages","config","locale","builtIn","custom","renderPluginToolbarButtons","button","disabled","jsxs","Toolbar","messages","computed","total","left","Thumbnails","page","isActive","event","renderEntries","entries","store","onEntryClick","entry","TableOfContents","NotesPanel","draft","signal","editing","noteInputRef","draftPage","draftValue","note","currentNote","handleInput","beginEdit","save","clear","renderEditor","renderSavedNote","renderMedia","media","fallbackLabel","stopPageFlipInteraction","normalizedRectStyle","hotspot","clamp","HotspotLayer","hotspots","annotations","activeGalleryIndex","annotation","active","gallery","selectedIndex","selectedGalleryItem","SearchHighlightLayer","highlights","result","highlight","Viewer","classes","isHard","NavigationArrows","isLeftVisible","isRightVisible","SearchPanel","inputRef","query","submit","results","PluginPanelHost","cleanup","mount","element","PluginPanels","panels","panel","App","handleToggleThumbs","handleToggleToc","handleToggleNotes","handleToggleSingleMode","handleToggleAutoPlay","handleZoomIn","handleZoomOut","handleToggleFullscreen","handleTocEntryClick","pageIndex","handleThumbClick","handleNextPage","handlePrevPage","exports","this","n","g","u","prefersReducedMotion","resolveFlippingTime","flippingTime","reducedMotion","PageFlipAdapter","bookContainer","options","__publicField","unlock","playback","viewportWidth","viewportHeight","PageFlip","pageElements","effect","targetPage","state","libCurrentPage","getSpreadIndex","targetSpread","currentSpread","playing","interval","maxIndex","nextIdx","prevIdx","err","unsub","LayoutManager","pageViewport","wrapperElement","sizerElement","handleOrientationChange","availWidth","availHeight","width","height","targetRatio","bookWidth","bookHeight","finalWidth","InteractionManager","container","pageFlipAdapter","AbortControllerCtor","isDragging","startX","startY","initialTx","initialTy","dx","dy","startTx","startTy","touchStartY","diffX","newScale","y","normalizeEntry","totalPages","id","normalizeFlipbookToc","initialZoomState","createFlipbookStore","currentPage","isSingleMode","showThumbs","showToc","showNotes","showSearch","showArrows","orientation","flipState","themeMode","allowDownload","hasDownloadUrl","isPdfMode","primaryColor","whiteLabel","isZoomed","isAutoPlaying","bookmarkedPages","pageNotes","autoPlayInterval","soundEnabled","searchQuery","searchResults","activeHotspotId","activeAnnotationId","zoomState","pages","toc","isDoublePageLayout","isFrontCover","isBackCover","mappedPages","hasPdfUrl","pdfMode","legacyStore","isFlipbookPageAsset","candidate","getAssetPageNumbers","asset","getSpreadCropModes","splitDirection","normalizeFlipbookPages","assets","normalized","fallbackPageNumber","assetIndex","kind","assetId","pageNumbers","spreadNumbers","cropModes","pageNumber","spreadIndex","toCssImage","image","character","applyThemeConfiguration","background","legacyLight","setBackground","style","name","userVariables","variableName","PdfRenderCache","maxEntries","dataUrl","oldest","A3_LANDSCAPE_WIDTH","A3_LANDSCAPE_HEIGHT","isA3Landscape","landscapeWidth","landscapeHeight","ratio","nearA3Size","PdfRenderer","cacheSize","pdfjsLib","pdfUrl","loadingTask","abortLoading","error","cached","vp","canvas","ctx","renderTask","cancelRender","content","text","normalizedQuery","caseSensitive","needle","maxResults","items","haystack","matches","offset","first","start","end","viewport","itemText","itemHaystack","transform","itemX","itemY","itemWidth","itemHeight","itemOffset","ratioStart","ratioWidth","mode","layouts","split","baseShortSide","firstPageLayout","firstPage","aspectRatio","onProgress","pageCount","resolvedPages","nextPage","completed","renderWorker","normalSrc","workerCount","_b","_d","_c","EMBED_COMMAND","EMBED_EVENT","EMBED_RESPONSE","getWindow","normalizeOrigins","currentOrigin","configured","readRecord","readNumber","FlipbookEmbedBridge","engine","currentWindow","payload","unsubscribe","origin","message","requestId","createFlipbookEmbedController","iframe","targetOrigin","timeout","pending","handlers","sequence","allowedOrigin","request","send","command","resolve","reject","timer","zoom","isSingle","update","searchOptions","show","set","_FlipbookEngine","selector","FlipbookPluginRegistry","plugin","imageList","generation","abortController","sourceAssets","referencePage","size","pdfStage","pageLayouts","bookWrapperEl","bookSizerEl","bookContainerEl","pageFlipAdapterRef","interactionManagerRef","appNode","url","finish","placeholder","layout","sourceIndex","sourcePageNumber","cropMode","renderer","next","sourcePage","src","targetIdx","clone","pluginName","apiName","bookmarked","boundedIndex","normalizedNote","sourceResults","source","cropStart","hotspotId","annotationId","zoomLevel","requestedZoom","scale","mergedMessages","deepLinkChanged","parsed","hashPage","rawPage","nextUrl","images","upgrade","pdfPage","highQualitySrc","Observer","pdfPages","keepContainer","hadSession","FlipbookEngine","globalScope","flipbookNamespace"],"mappings":"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","x_google_ignoreList":[0,14]}
|