flipbookengine 0.6.5 → 1.0.2

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.
Files changed (104) hide show
  1. package/CHANGELOG.md +115 -75
  2. package/README.md +429 -295
  3. package/dist/components/AnnotationPlacement.d.ts +5 -0
  4. package/dist/components/AnnotationPopover.d.ts +10 -0
  5. package/dist/components/App.d.ts +26 -0
  6. package/dist/components/HotspotLayer.d.ts +14 -0
  7. package/dist/components/NoteEditor.d.ts +13 -0
  8. package/dist/components/NotePlacementLayer.d.ts +11 -0
  9. package/dist/components/NotesPanel.d.ts +17 -0
  10. package/dist/components/PluginPanels.d.ts +5 -0
  11. package/dist/components/ReaderHelp.d.ts +3 -0
  12. package/dist/components/ReaderShortcuts.d.ts +16 -0
  13. package/dist/components/SearchPanel.d.ts +11 -0
  14. package/dist/components/TableOfContents.d.ts +1 -0
  15. package/dist/components/TextLayer.d.ts +8 -0
  16. package/dist/components/Toolbar.d.ts +7 -1
  17. package/dist/components/ToolbarMore.d.ts +6 -0
  18. package/dist/components/Viewer.d.ts +8 -0
  19. package/dist/core/LayoutManager.d.ts +1 -1
  20. package/dist/core/PdfRenderer.d.ts +11 -0
  21. package/dist/core/TextLayerLoader.d.ts +5 -0
  22. package/dist/core/domSignal.d.ts +2 -0
  23. package/dist/core-entry.d.ts +14 -0
  24. package/dist/core.d.ts +1 -0
  25. package/dist/embed.d.ts +80 -0
  26. package/dist/engine-DD5qEHLm.js +4657 -0
  27. package/dist/engine-DD5qEHLm.js.map +1 -0
  28. package/dist/engine.d.ts +124 -0
  29. package/dist/feature-Cicli9ie.js +17 -0
  30. package/dist/feature-Cicli9ie.js.map +1 -0
  31. package/dist/flipbook-engine.core.js +8 -0
  32. package/dist/flipbook-engine.core.js.map +1 -0
  33. package/dist/flipbook-engine.css +1 -1
  34. package/dist/flipbook-engine.iife.js +51 -55
  35. package/dist/flipbook-engine.iife.js.map +1 -1
  36. package/dist/flipbook-engine.js +10 -6
  37. package/dist/flipbook-engine.js.map +1 -1
  38. package/dist/flipbook-engine.plugins-annotations.js +14 -0
  39. package/dist/flipbook-engine.plugins-annotations.js.map +1 -0
  40. package/dist/flipbook-engine.plugins-bookmarks.js +16 -0
  41. package/dist/flipbook-engine.plugins-bookmarks.js.map +1 -0
  42. package/dist/flipbook-engine.plugins-deep-link.js +14 -0
  43. package/dist/flipbook-engine.plugins-deep-link.js.map +1 -0
  44. package/dist/flipbook-engine.plugins-hotspots.js +15 -0
  45. package/dist/flipbook-engine.plugins-hotspots.js.map +1 -0
  46. package/dist/flipbook-engine.plugins-notes.js +16 -0
  47. package/dist/flipbook-engine.plugins-notes.js.map +1 -0
  48. package/dist/flipbook-engine.plugins-search.js +15 -0
  49. package/dist/flipbook-engine.plugins-search.js.map +1 -0
  50. package/dist/flipbook-engine.plugins-share.js +13 -0
  51. package/dist/flipbook-engine.plugins-share.js.map +1 -0
  52. package/dist/flipbook-engine.plugins-toc.js +14 -0
  53. package/dist/flipbook-engine.plugins-toc.js.map +1 -0
  54. package/dist/flipbook-engine.plugins.js +5 -0
  55. package/dist/flipbook-engine.plugins.js.map +1 -0
  56. package/dist/flipbook-engine.react.js +1 -1
  57. package/dist/flipbook-engine.vue.js +1 -1
  58. package/dist/i18n/locales/en.d.ts +39 -0
  59. package/dist/i18n/locales/tr.d.ts +39 -0
  60. package/dist/i18n/service.d.ts +117 -0
  61. package/dist/index-BhTR2SK6.js +366 -0
  62. package/dist/index-BhTR2SK6.js.map +1 -0
  63. package/dist/index.d.ts +10 -0
  64. package/dist/model/annotations.d.ts +15 -0
  65. package/dist/model/backend.d.ts +8 -0
  66. package/dist/model/hotspots.d.ts +40 -0
  67. package/dist/model/note-editor.d.ts +22 -0
  68. package/dist/model/search.d.ts +25 -0
  69. package/dist/model/text-layer.d.ts +21 -0
  70. package/dist/plugins/annotations.d.ts +4 -0
  71. package/dist/plugins/bookmarks.d.ts +4 -0
  72. package/dist/plugins/deep-link.d.ts +4 -0
  73. package/dist/plugins/feature.d.ts +5 -0
  74. package/dist/plugins/hotspots.d.ts +4 -0
  75. package/dist/plugins/index.d.ts +65 -0
  76. package/dist/plugins/notes.d.ts +4 -0
  77. package/dist/plugins/search.d.ts +4 -0
  78. package/dist/plugins/share.d.ts +4 -0
  79. package/dist/plugins/toc.d.ts +4 -0
  80. package/dist/plugins-annotations.d.ts +1 -0
  81. package/dist/plugins-bookmarks.d.ts +1 -0
  82. package/dist/plugins-deep-link.d.ts +1 -0
  83. package/dist/plugins-hotspots.d.ts +1 -0
  84. package/dist/plugins-notes.d.ts +1 -0
  85. package/dist/plugins-search.d.ts +1 -0
  86. package/dist/plugins-share.d.ts +1 -0
  87. package/dist/plugins-toc.d.ts +1 -0
  88. package/dist/plugins.d.ts +1 -0
  89. package/dist/state/store.d.ts +35 -5
  90. package/dist/vue/index.d.ts +1 -1
  91. package/docs/api-reference.md +228 -0
  92. package/docs/backend-text-layers.md +40 -0
  93. package/docs/frameworks.md +73 -0
  94. package/docs/getting-started.md +128 -0
  95. package/docs/i18n.md +47 -0
  96. package/docs/migration-0.4.0.md +24 -0
  97. package/docs/migration-0.5.0.md +25 -0
  98. package/docs/migration-1.0.0.md +59 -0
  99. package/docs/plugin-architecture.md +103 -0
  100. package/docs/release-checklist.md +37 -0
  101. package/docs/theming.md +61 -0
  102. package/package.json +52 -1
  103. package/dist/engine-DhQ2zxpm.js +0 -3535
  104. package/dist/engine-DhQ2zxpm.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine-DD5qEHLm.js","sources":["../src/model/text-layer.ts","../src/core/TextLayerLoader.ts","../node_modules/@serenity-is/domwise/dist/index.js","../src/i18n/locales/en.ts","../src/i18n/locales/tr.ts","../src/i18n/service.ts","../src/components/ReaderHelp.ts","../src/components/ToolbarMore.tsx","../src/components/Toolbar.tsx","../src/components/Thumbnails.tsx","../src/components/TableOfContents.tsx","../src/components/NoteEditor.tsx","../src/model/note-editor.ts","../src/components/NotesPanel.tsx","../src/components/AnnotationPopover.tsx","../src/components/AnnotationPlacement.tsx","../src/core/domSignal.ts","../src/components/ReaderShortcuts.ts","../src/components/TextLayer.tsx","../src/components/HotspotLayer.tsx","../src/components/NotePlacementLayer.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":["/** Backend-owned text in logical-page, top-left, normalized coordinates. */\nexport interface FlipbookTextRun {\n text: string;\n start: number;\n x: number;\n y: number;\n width: number;\n height: number;\n direction?: 'ltr' | 'rtl';\n}\n\nexport interface FlipbookTextPage {\n schemaVersion: 1;\n pageIndex: number;\n /** Immutable source/extraction generation, shared with the image manifest. */\n revision: string;\n text: string;\n runs: FlipbookTextRun[];\n}\n\nexport type FlipbookTextLayerProvider = (pageIndex: number, signal: AbortSignal) => Promise<FlipbookTextPage | null>;\n\n/** Reject invalid host data before creating DOM or CSS. Run offsets use UTF-16 code units. */\nexport function validateTextPage(page: FlipbookTextPage, index: number): FlipbookTextPage {\n if (page.schemaVersion !== 1 || page.pageIndex !== index || typeof page.revision !== 'string' || !page.revision ||\n typeof page.text !== 'string' || page.text.length > 100000 || !Array.isArray(page.runs) || page.runs.length > 20000)\n throw new Error('Invalid text page');\n let end = 0;\n for (const run of page.runs) {\n if (typeof run.text !== 'string' || !run.text.length || !Number.isInteger(run.start) || run.start < end ||\n page.text.slice(run.start, run.start + run.text.length) !== run.text ||\n ![run.x, run.y, run.width, run.height].every(Number.isFinite) || run.x < 0 || run.y < 0 ||\n run.width <= 0 || run.height <= 0 || run.x + run.width > 1.000001 || run.y + run.height > 1.000001 ||\n (run.direction !== undefined && run.direction !== 'ltr' && run.direction !== 'rtl')) throw new Error('Invalid text run');\n end = run.start + run.text.length;\n }\n return { ...page, runs: page.runs.map(run => ({ ...run })) };\n}\n","import { effect } from '@preact/signals-core';\nimport type { FlipbookStore } from '../state/store';\nimport { validateTextPage, type FlipbookTextLayerProvider } from '../model/text-layer';\n\n/** At most three visible/adjacent pages; stale requests cannot update a new session. */\nexport function loadTextLayers(store: FlipbookStore, provider: FlipbookTextLayerProvider, lifetime: AbortSignal): () => void {\n const requests = new Map<number, AbortController>();\n const completed = new Set<number>();\n const stop = effect(() => {\n const current = store.currentPage.value, total = store.totalPages.value;\n const wanted = new Set([current - 1, current, current + 1].filter(index => index >= 0 && index < total));\n for (const [index, request] of requests) if (!wanted.has(index)) { request.abort(); requests.delete(index); }\n const retained = new Map([...store.textPages.peek()].filter(([index]) => wanted.has(index)));\n for (const index of [...completed]) if (!wanted.has(index)) completed.delete(index);\n store.textPages.value = retained;\n for (const index of wanted) {\n if (requests.has(index) || completed.has(index) || lifetime.aborted) continue;\n const request = new AbortController(); requests.set(index, request);\n Promise.resolve().then(() => provider(index, request.signal)).then(page => {\n if (request.signal.aborted || lifetime.aborted || requests.get(index) !== request) return;\n if (page) store.textPages.value = new Map(store.textPages.peek()).set(index, validateTextPage(page, index));\n completed.add(index);\n }).catch(() => {\n // Text is optional: failure must leave image navigation and search usable.\n if (!request.signal.aborted) completed.add(index);\n }).finally(() => { if (requests.get(index) === request) requests.delete(index); });\n }\n });\n const dispose = () => { stop(); for (const request of requests.values()) request.abort(); requests.clear(); };\n lifetime.addEventListener('abort', dispose, { once: true });\n return () => { lifetime.removeEventListener('abort', dispose); dispose(); };\n}\n","// 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 saving: 'Saving…',\n noteFailed: 'Could not save the note. Your draft is retained; try again.',\n searching: 'Searching…',\n searchFailed: 'Search failed. Try again.',\n closeContents: 'Close table of contents',\n moreActions: 'More actions',\n sound: 'Sound',\n myNotes: 'My notes', currentPage: 'This page', allNotes: 'All notes',\n privateNotes: 'Your personal notes for this document.', noNotes: 'No notes yet. Select a place on the page to add your first note.',\n addNote: 'Place a note', pageHasNote: 'This page has a note', page: 'Page', noteSaved: 'Saved',\n confirmDeleteNote: 'Delete this note?', cancel: 'Cancel', placeNote: 'Click or tap a place on the page for your note.',\n keyboardShortcuts: 'Keyboard shortcuts', textSelection: 'Select text', resetZoom: 'Fit page'\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 saving: 'Kaydediliyor…',\n noteFailed: 'Not kaydedilemedi. Taslağınız korundu; tekrar deneyin.',\n searching: 'Aranıyor…',\n searchFailed: 'Arama başarısız oldu. Tekrar deneyin.',\n closeContents: 'İçindekileri kapat',\n moreActions: 'Diğer işlemler',\n sound: 'Ses',\n myNotes: 'Notlarım', currentPage: 'Bu sayfa', allNotes: 'Tüm notlar',\n privateNotes: 'Bu belge için kişisel notlarınız.', noNotes: 'Henüz not yok. İlk notunuz için sayfada bir yer seçin.',\n addNote: 'Konuma not ekle', pageHasNote: 'Bu sayfada not var', page: 'Sayfa', noteSaved: 'Kaydedildi',\n confirmDeleteNote: 'Bu not silinsin mi?', cancel: 'Vazgeç', placeNote: 'Not eklemek için sayfada bir yere tıklayın veya dokunun.',\n keyboardShortcuts: 'Klavye kısayolları', textSelection: 'Metin seçimi', resetZoom: 'Sayfaya sığdır'\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 textSelection: string;\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 saving: string;\n noteFailed: string;\n searching: string;\n searchFailed: string;\n closeContents: string;\n moreActions: string;\n sound: string;\n myNotes: string;\n currentPage: string;\n allNotes: string;\n privateNotes: string;\n noNotes: string;\n addNote: string;\n pageHasNote: string;\n page: string;\n noteSaved: string;\n confirmDeleteNote: string;\n cancel: string;\n placeNote: string;\n keyboardShortcuts: string;\n resetZoom: 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","import { resolveMessages } from '../i18n/service';\nimport type { FlipbookStore } from '../state/store';\nexport function showReaderHelp(root: HTMLElement, store: FlipbookStore) {\n root.querySelector<HTMLDialogElement>('.bk-shortcuts-dialog')?.remove();\n const messages = resolveMessages({ locale: store.locale.value, messages: store.messages.value });\n const dialog = document.createElement('dialog'); dialog.className = 'bk-shortcuts-dialog'; dialog.setAttribute('aria-label', messages.keyboardShortcuts);\n const heading = document.createElement('strong'); heading.textContent = messages.keyboardShortcuts; dialog.append(heading);\n const list = document.createElement('dl');\n for (const [keys, label] of [['← / →', `${messages.previous} / ${messages.next}`], ['Home / End', messages.pages], ['+ / −', `${messages.zoomIn} / ${messages.zoomOut}`], ['0', messages.resetZoom], ['N', messages.addNote], ['Shift + N', messages.myNotes], ['/', messages.search], ['I', messages.tableOfContents], ['T', messages.thumbnails], ['F', messages.fullscreen], ['Esc', messages.closeHotspot], ['Tab / Shift + Tab', messages.moreActions]]) {\n const key = document.createElement('dt'); key.textContent = keys; const detail = document.createElement('dd'); detail.textContent = label; list.append(key, detail);\n }\n const close = document.createElement('button'); close.type = 'button'; close.textContent = messages.closeHotspot; close.addEventListener('click', () => dialog.close());\n dialog.append(list, close); root.append(dialog); const previous = root.ownerDocument.activeElement as HTMLElement;\n dialog.addEventListener('close', () => { dialog.remove(); if (previous?.isConnected) previous.focus(); }, { once: true }); dialog.showModal();\n}\r\n","import { computed, type ReadonlySignal } from '@preact/signals-core';\nimport type { FlipbookMessages } from '../i18n/service';\nimport { showReaderHelp } from './ReaderHelp';\nimport type { FlipbookStore } from '../state/store';\n\n/** Secondary commands retain their original handlers and reactive icons. */\nexport function attachToolbarMore(toolbar: HTMLElement, messages: ReadonlySignal<FlipbookMessages>, store: FlipbookStore) {\n const menu = <div class=\"bk-more-menu\"></div> as HTMLElement;\n const commands = [\n ['.bk-btn--autoplay', 'play'], ['.bk-btn--single', 'singlePageMode'],\n ['.bk-btn--share', 'share'], ['.bk-btn--bookmark', 'bookmark'], ['.bk-btn--download', 'downloadCatalog'], ['.bk-btn--sound', 'sound']\n ] as const;\n for (const [selector, key] of commands) {\n const button = toolbar.querySelector<HTMLButtonElement>(selector);\n if (!button) continue;\n button.append(<span>{computed(() => messages.value[key])}</span> as Node);\n menu.append(button);\n }\n menu.append(<button type=\"button\" class=\"bk-btn bk-btn--text-selection\" style={computed(() => store.textAvailable.value ? '' : 'display:none;')}\n aria-pressed={computed(() => store.textSelection.value ? 'true' : 'false')}\n onClick={() => { store.textSelection.value = !store.textSelection.value; store.placingNote.value = false; }}>{computed(() => messages.value.textSelection)}</button> as Node);\n menu.append(<button type=\"button\" class=\"bk-btn\" onClick={() => showReaderHelp(toolbar.closest<HTMLElement>('.bk-wrapper')!, store)}>{computed(() => messages.value.keyboardShortcuts)}</button> as Node);\n let details: HTMLDetailsElement;\n details = <details class=\"bk-more\" onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'Escape') { details.open = false; details.querySelector('summary')?.focus(); }\n }}>\n <summary class=\"bk-btn\" aria-label={computed(() => messages.value.moreActions)} title={computed(() => messages.value.moreActions)}>…</summary>\n {menu}\n </details> as HTMLDetailsElement;\n menu.addEventListener('click', event => { if ((event.target as Element).closest('button')) details.open = false; });\n toolbar.lastElementChild!.append(details);\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 *\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 { attachToolbarMore } from './ToolbarMore';\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 const toolbar = (\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.searchAvailable.value)}\n aria-label={computed(() => props.store.searchAvailable.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.searchAvailable.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 bk-btn--single 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 bk-btn--autoplay ${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 {computed(() => props.store.isAutoPlaying.value ? (\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=\"6\" y=\"4\" width=\"4\" height=\"16\"></rect><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\"></rect></svg>\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\"><polygon points=\"5 3 19 12 5 21 5 3\"></polygon></svg>\n ))}\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' : ''} ${props.store.pageNotes.value.has(props.store.currentPage.value) || props.store.annotations.value.some(note => note.pageIndex === props.store.currentPage.value) ? 'bk-has-page-note' : ''}`)}\n onClick={props.onToggleNotes}\n aria-label={computed(() => `${messages.value.myNotes} (${props.store.pageNotes.value.size + props.store.annotations.value.length})`)}\n title={computed(() => messages.value.myNotes)}\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 <span class=\"bk-notes-count\" aria-hidden=\"true\">{computed(() => props.store.pageNotes.value.size + props.store.annotations.value.length || \"\")}</span>\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 bk-btn--sound ${!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 {computed(() => props.store.soundEnabled.value ? (\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\"><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 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 ))}\n </button>\n {renderPluginToolbarButtons({ registry: props.pluginRegistry, placement: 'end' })}\n </div>\n </div>\n ) as HTMLElement;\n attachToolbarMore(toolbar, messages, props.store);\n return toolbar;\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 onClose?: () => void;\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 onKeyDown={(event: KeyboardEvent) => { if (event.key === 'Escape') props.onClose?.(); }}\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-search-heading-row\">\n <div class=\"bk-toc-heading\">{computed(() => messages.value.tableOfContents || 'Table of Contents')}</div>\n <button type=\"button\" class=\"bk-search-close\" onClick={props.onClose} aria-label={computed(() => messages.value.closeContents)}>×</button>\n </div>\n {renderEntries(props.store.toc.value, props.store, props.onEntryClick)}\n </nav>\n );\n}\n","import type { FlipbookNoteEditor, FlipbookNoteEditorFactory, FlipbookNoteValue } from '../model/note-editor';\n\nexport function NoteEditor(props: { value: FlipbookNoteValue; factory?: FlipbookNoteEditorFactory; signal: AbortSignal; label: string; view: { current: FlipbookNoteEditor | null }; onReady: (ready: boolean) => void; onDraft?: (value: FlipbookNoteValue) => void }) {\n const root = document.createElement('div'); root.className = 'bk-note-editor-host';\n let view: FlipbookNoteEditor | undefined, observer: MutationObserver | undefined;\n props.onReady(false);\n const cleanup = () => {\n observer?.disconnect();\n if (view && !props.signal.aborted) props.onDraft?.(view.getValue());\n view?.destroy(); view = undefined; props.view.current = null;\n };\n props.signal.addEventListener('abort', cleanup, { once: true });\n queueMicrotask(async () => {\n if (props.signal.aborted || !root.isConnected) return;\n if (props.factory) {\n try { view = await props.factory(root, props.value, props.signal); }\n catch { root.textContent = props.label; props.onReady(false); return; }\n } else {\n const input = document.createElement('textarea'); input.className = 'bk-notes-input'; input.rows = 4; input.maxLength = 4000;\n input.setAttribute('aria-label', props.label); input.placeholder = props.label; input.value = props.value.text; root.append(input);\n view = { getValue: () => ({ text: input.value }), setReadOnly: value => input.disabled = value, destroy: () => input.remove() };\n }\n if (props.signal.aborted || !root.isConnected) { cleanup(); return; }\n props.view.current = view!; props.onReady(true);\n observer = new root.ownerDocument.defaultView!.MutationObserver(() => { if (!root.isConnected) cleanup(); });\n observer.observe(root.ownerDocument.body, { childList: true, subtree: true });\n root.querySelector<HTMLElement>('[contenteditable=\"true\"],textarea')?.focus();\n });\n return root;\n}\r\n","export interface FlipbookNoteMark { type: string; attrs?: Record<string, string | null>; }\nexport interface FlipbookNoteDocument { type: string; text?: string; content?: FlipbookNoteDocument[]; marks?: FlipbookNoteMark[]; }\nexport interface FlipbookNoteValue { text: string; document?: FlipbookNoteDocument; }\nexport interface FlipbookNoteEditor { getValue(): FlipbookNoteValue; setReadOnly(value: boolean): void; destroy(): void; }\nexport type FlipbookNoteEditorFactory = (container: HTMLElement, value: FlipbookNoteValue, signal: AbortSignal) => FlipbookNoteEditor | Promise<FlipbookNoteEditor>;\n\n/** Render a restricted document as DOM nodes. Raw HTML is never accepted. */\nexport function renderNoteDocument(value: FlipbookNoteDocument | undefined, fallback: string): HTMLElement {\n const root = document.createElement('div'); root.className = 'bk-note-document';\n if (!value) { root.textContent = fallback; return root; }\n let remaining = 512;\n const render = (node: FlipbookNoteDocument, depth = 0): Node => {\n if (depth > 8 || remaining-- <= 0) return document.createTextNode('');\n if (node.type === 'text') {\n let content: Node = document.createTextNode(node.text ?? '');\n for (const mark of (node.marks ?? []).slice(0, 3)) {\n const element = document.createElement(mark.type === 'bold' ? 'strong' : mark.type === 'italic' ? 'em' : 'span');\n if (mark.type === 'textStyle') {\n for (const [name, value] of Object.entries(mark.attrs ?? {})) {\n if (!value) continue;\n if (name === 'fontSize' && /^(12|14|16|18|20|24|28|32)px$/.test(value)) element.style.fontSize = value;\n if ((name === 'color' || name === 'backgroundColor') && /^#[0-9a-f]{6}$/i.test(value)) element.style[name] = value;\n }\n }\n element.append(content); content = element;\n }\n return content;\n }\n const element = document.createElement(node.type === 'hardBreak' ? 'br' : node.type === 'paragraph' ? 'p' : 'div');\n for (const child of node.content ?? []) { if (remaining <= 0) break; element.append(render(child, depth + 1)); }\n return element;\n };\n root.append(render(value)); return root;\n}\r\n","/** Copyright (c) 2026 Murat Dogan. SPDX-License-Identifier: AGPL-3.0-or-later */\nimport { computed, signal } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookStore } from '../state/store';\nimport type { FlipbookAnnotation } from '../model/annotations';\nimport { NoteEditor } from './NoteEditor';\nimport { renderNoteDocument, type FlipbookNoteDocument, type FlipbookNoteEditor, type FlipbookNoteValue } from '../model/note-editor';\n\ninterface NotesPanelProps {\n store: FlipbookStore;\n onSave: (note: string, document?: FlipbookNoteDocument) => Promise<boolean>;\n onClear: () => Promise<boolean>;\n onClose: () => void;\n onSelect: (pageIndex: number) => void;\n onAnnotation: (annotation: FlipbookAnnotation) => void;\n onAdd: () => void;\n signal: AbortSignal;\n}\n\n/** The editor keeps its draft until the host confirms persistence. */\nexport function NotesPanel(props: NotesPanelProps) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n const draft = signal({ page: -1, text: '' });\n const editingPage = signal<number | null>(null);\n const input = { current: null as FlipbookNoteEditor | null };\n const ready = signal(false);\n const drafts = new Map<number, FlipbookNoteValue>();\n const pendingCommits = new Set<number>();\n const currentNote = computed(() => props.store.pageNotes.value.get(props.store.currentPage.value) ?? '');\n const draftValue = computed(() => draft.value.page === props.store.currentPage.value ? draft.value.text : currentNote.value);\n const editing = computed(() => editingPage.value === props.store.currentPage.value || !currentNote.value);\n const beginEdit = () => {\n draft.value = { page: props.store.currentPage.value, text: currentNote.value };\n editingPage.value = props.store.currentPage.value;\n };\n const save = async () => {\n const page = props.store.currentPage.value;\n const value = input.current?.getValue();\n if (!value) return;\n pendingCommits.add(page);\n input.current?.setReadOnly(true);\n if (await props.onSave(value.text, value.document) && props.store.currentPage.value === page) { drafts.delete(page); editingPage.value = null; }\n input.current?.setReadOnly(false);\n pendingCommits.delete(page);\n };\n const clear = async () => {\n const page = props.store.currentPage.value;\n pendingCommits.add(page);\n drafts.delete(page);\n if (await props.onClear()) {\n draft.value = { page, text: '' };\n if (props.store.currentPage.value === page) {\n editingPage.value = page;\n }\n }\n pendingCommits.delete(page);\n };\n return (\n <aside class=\"bk-notes-panel\" style={computed(() => props.store.showNotes.value ? 'display:flex;' : 'display:none;')}\n aria-label={computed(() => messages.value.myNotes)} onKeyDown={(event: KeyboardEvent) => { if (event.key === 'Escape') { event.stopPropagation(); props.onClose(); } }}>\n <div class=\"bk-notes-heading-row\">\n <div class=\"bk-notes-heading\">{computed(() => messages.value.myNotes)} <span class=\"bk-note-total\">{computed(() => props.store.pageNotes.value.size + props.store.annotations.value.length)}</span></div>\n <button type=\"button\" class=\"bk-notes-close\" onClick={props.onClose} aria-label={computed(() => messages.value.closeNote)}>×</button>\n </div>\n <p class=\"bk-note-privacy\">{computed(() => messages.value.privateNotes)}</p>\n <div class=\"bk-note-tabs\" role=\"group\" aria-label={computed(() => messages.value.myNotes)}>\n <button type=\"button\" aria-pressed={computed(() => props.store.notesView.value === 'all' ? 'true' : 'false')} onClick={() => props.store.notesView.value = 'all'}>{computed(() => messages.value.allNotes)}</button>\n <button type=\"button\" aria-pressed={computed(() => props.store.notesView.value === 'page' ? 'true' : 'false')} onClick={() => props.store.notesView.value = 'page'}>{computed(() => `${messages.value.currentPage} · ${props.store.currentPage.value + 1}`)}</button>\n </div>\n <button type=\"button\" class=\"bk-add-annotation\" style={computed(() => props.store.canAnnotate.value ? 'display:block;' : 'display:none;')} onClick={props.onAdd}>{computed(() => messages.value.addNote)}</button>\n <div class=\"bk-note-list\" style={computed(() => props.store.notesView.value === 'all' ? 'display:flex;' : 'display:none;')}>\n {computed(() => {\n const notes = [...props.store.pageNotes.value].map(([pageIndex, text]) => ({ id: `page-${pageIndex}`, pageIndex, text, annotation: undefined as FlipbookAnnotation | undefined }));\n notes.push(...props.store.annotations.value.map(annotation => ({ ...annotation, annotation })));\n notes.sort((a, b) => a.pageIndex - b.pageIndex || a.id.localeCompare(b.id));\n return notes.length ? <div class=\"bk-note-list-items\">{notes.map(note => <button type=\"button\" class=\"bk-note-list-item\" onClick={() => note.annotation ? props.onAnnotation(note.annotation) : props.onSelect(note.pageIndex)}>\n <strong>{messages.value.page} {note.pageIndex + 1}</strong><span>{note.text}</span>\n </button>)}</div> : <p class=\"bk-note-empty\">{messages.value.noNotes}</p>;\n })}\n </div>\n <div class=\"bk-current-note\" style={computed(() => props.store.notesView.value === 'page' ? 'display:block;' : 'display:none;')}>\n {computed(() => !props.store.showNotes.value || props.store.notesView.value !== 'page' ? null : currentNote.value && !editing.value ? (\n <div class=\"bk-note-saved\">\n <div class=\"bk-note-content\">{renderNoteDocument(props.store.pageNoteDocuments.value.get(props.store.currentPage.value), currentNote.value)}</div>\n <div class=\"bk-note-actions\">\n <button type=\"button\" class=\"bk-note-badge bk-note-badge--edit\" onClick={beginEdit} disabled={props.store.notesSaving}>{computed(() => messages.value.editNote)}</button>\n <button type=\"button\" class=\"bk-note-badge bk-note-badge--delete\" onClick={clear} disabled={props.store.notesSaving}>{computed(() => messages.value.deleteNote)}</button>\n </div>\n </div>\n ) : (\n <div class=\"bk-notes-editor\">\n <NoteEditor value={drafts.get(props.store.currentPage.value) ?? { text: draftValue.value, document: props.store.pageNoteDocuments.value.get(props.store.currentPage.value) }} factory={props.store.noteEditor.value} signal={props.signal} label={messages.value.notes} view={input} onReady={value => ready.value = value} onDraft={((page) => value => { if (!pendingCommits.has(page)) drafts.set(page, value); })(props.store.currentPage.value)} />\n <div class=\"bk-notes-actions\">\n <button type=\"button\" class=\"bk-notes-clear\" onClick={clear} disabled={props.store.notesSaving}>{computed(() => messages.value.clearNote)}</button>\n <button type=\"button\" class=\"bk-notes-save\" onClick={save} disabled={computed(() => props.store.notesSaving.value || !ready.value)}>{computed(() => messages.value.saveNote)}</button>\n </div>\n </div>\n ))}\n </div>\n <div role=\"status\" aria-live=\"polite\">{computed(() => props.store.notesSaving.value ? messages.value.saving : props.store.notesFailed.value ? messages.value.noteFailed : '')}</div>\n </aside>\n );\n}\r\n","import { computed, signal } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookAnnotation } from '../model/annotations';\nimport type { FlipbookStore } from '../state/store';\nimport { NoteEditor } from './NoteEditor';\nimport { renderNoteDocument, type FlipbookNoteEditor, type FlipbookNoteValue } from '../model/note-editor';\nexport function AnnotationPopover(props: { store: FlipbookStore; signal: AbortSignal; onSave: (note: FlipbookAnnotation) => Promise<boolean>; onDelete: (note: FlipbookAnnotation) => Promise<boolean>; onClose: () => void }) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n const selected = computed(() => props.store.pendingAnnotation.value ?? props.store.annotations.value.find(note => note.id === props.store.activeAnnotationId.value));\n const drafts = new Map<string, FlipbookNoteValue>();\n const editing = signal<string | null>(null), deleting = signal<string | null>(null);\n const input = { current: null as FlipbookNoteEditor | null };\n const ready = signal(false);\n return <aside class=\"bk-note-popover\" role=\"dialog\" aria-label={computed(() => messages.value.notes)}\n style={computed(() => props.store.canAnnotate.value && selected.value ? 'display:flex;' : 'display:none;')}\n onKeyDown={(event: KeyboardEvent) => { if (event.key === 'Escape') { event.stopPropagation(); props.onClose(); } }}>\n {computed(() => {\n const note = selected.value;\n if (!note) return null;\n const isEditing = !!props.store.pendingAnnotation.value || editing.value === note.id;\n return <>\n <div class=\"bk-notes-heading-row\"><strong>{messages.value.notes} · {messages.value.page} {note.pageIndex + 1}</strong><button type=\"button\" class=\"bk-notes-close\" onClick={props.onClose} aria-label={messages.value.closeNote}>×</button></div>\n {isEditing ? <>\n <NoteEditor value={drafts.get(note.id) ?? { text: note.text, document: note.document }} factory={props.store.noteEditor.value} signal={props.signal} label={messages.value.notes} view={input} onReady={value => ready.value = value} onDraft={value => drafts.set(note.id, value)} />\n <div class=\"bk-notes-actions\"><button type=\"button\" onClick={props.onClose}>{messages.value.cancel}</button>\n <button type=\"button\" class=\"bk-notes-save\" disabled={computed(() => props.store.notesSaving.value || !ready.value)} onClick={async () => {\n const value = input.current?.getValue();\n if (!value) return;\n drafts.set(note.id, value);\n input.current?.setReadOnly(true);\n if (await props.onSave({ ...note, ...value })) { editing.value = null; drafts.delete(note.id); }\n input.current?.setReadOnly(false);\n }}>{messages.value.saveNote}</button></div>\n </> : <>\n {renderNoteDocument(note.document, note.text)}\n {deleting.value === note.id ? <div class=\"bk-notes-actions\"><span>{messages.value.confirmDeleteNote}</span><button type=\"button\" onClick={() => deleting.value = null}>{messages.value.cancel}</button><button type=\"button\" disabled={props.store.notesSaving} onClick={() => props.onDelete(note)}>{messages.value.deleteNote}</button></div> :\n <div class=\"bk-notes-actions\"><button type=\"button\" onClick={() => editing.value = note.id}>{messages.value.editNote}</button><button type=\"button\" onClick={() => deleting.value = note.id}>{messages.value.deleteNote}</button></div>}\n </>}\n </>;\n })}\n <div role=\"status\" aria-live=\"polite\">{computed(() => props.store.notesSaving.value ? messages.value.saving : props.store.notesFailed.value ? messages.value.noteFailed : '')}</div>\n </aside>;\n}\r\n","import { computed } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookStore } from '../state/store';\nexport function AnnotationPlacement(props: { store: FlipbookStore }) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n return <div class=\"bk-note-placement-hint\" style={computed(() => props.store.placingNote.value ? 'display:flex;' : 'display:none;')} role=\"status\">\n <span>{computed(() => messages.value.placeNote)}</span>\n <button type=\"button\" onClick={(event: Event) => { props.store.placingNote.value = false; (event.currentTarget as HTMLElement).closest('.bk-wrapper')?.querySelector<HTMLElement>('.bk-btn--notes')?.focus(); }}>{computed(() => messages.value.cancel)} (Esc)</button>\n </div>;\n}\r\n","/** DOM event listeners require the AbortSignal from their own document realm. */\nexport function domSignal(element: HTMLElement, session: AbortSignal): AbortSignal {\n const Controller = element.ownerDocument.defaultView?.AbortController ?? AbortController;\n const controller = new Controller();\n if (session.aborted) controller.abort();\n else session.addEventListener('abort', () => controller.abort(), { once: true });\n return controller.signal;\n}\n","import { effect } from '@preact/signals-core';\nimport type { FlipbookStore } from '../state/store';\nimport type { InteractionManager } from '../core/InteractionManager';\nimport type { PageFlipAdapter } from '../adapters/PageFlipAdapter';\nimport { domSignal } from '../core/domSignal';\nimport { showReaderHelp } from './ReaderHelp';\n\nexport function ReaderShortcuts(root: HTMLElement, store: FlipbookStore, commands: {\n pageFlipAdapterRef: { current: PageFlipAdapter | null }; interactionManagerRef: { current: InteractionManager | null };\n onBeginAnnotation: () => void; onToggleNotes: () => void; onToggleFullscreen: () => void; onAnnotationClose: () => void;\n}, signal: AbortSignal) {\n signal = domSignal(root, signal);\n root.setAttribute('aria-keyshortcuts', 'ArrowLeft ArrowRight Home End + - 0 n Shift+n / i t f Escape');\n let previousFocus: HTMLElement | null = null, wasOpen = false;\n const stop = effect(() => {\n const open = store.showNotes.value || store.showSearch.value || store.showToc.value || !!store.pendingAnnotation.value || !!store.activeAnnotationId.value;\n if (open && !wasOpen) previousFocus = root.ownerDocument.activeElement as HTMLElement;\n if (open) queueMicrotask(() => {\n if (signal.aborted) return;\n const selector = store.pendingAnnotation.value || store.activeAnnotationId.value ? '.bk-note-popover' : store.showSearch.value ? '.bk-search-panel' : store.showNotes.value ? '.bk-notes-panel' : '.bk-toc';\n const panel = root.querySelector<HTMLElement>(selector);\n const target = panel?.querySelector<HTMLElement>('textarea:not([disabled]),input:not([disabled]),[contenteditable=\"true\"]') ?? panel?.querySelector<HTMLElement>('button');\n if (target && panel?.getBoundingClientRect().width) target.focus();\n });\n else if (wasOpen) queueMicrotask(() => { if (!signal.aborted && previousFocus?.isConnected) previousFocus.focus(); });\n wasOpen = open;\n });\n signal.addEventListener('abort', stop, { once: true });\n root.addEventListener('keydown', event => {\n if (event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey || event.isComposing) return;\n if ((event.target as Element).closest('dialog')) return;\n if (event.key === 'Escape') {\n event.preventDefault(); store.textSelection.value = false; store.placingNote.value = false; store.showNotes.value = false; store.showSearch.value = false; store.showToc.value = false; commands.onAnnotationClose(); root.querySelector<HTMLElement>('.bk-btn--notes')?.focus(); return;\n }\n if ((event.target as Element).closest('input,textarea,select,[contenteditable=\"true\"],dialog')) return;\n if (event.key === '?') { event.preventDefault(); showReaderHelp(root, store); return; }\n if ((event.target as Element).closest('.bk-toolbar') && ['ArrowLeft','ArrowRight','Home','End'].includes(event.key)) {\n const buttons = [...root.querySelectorAll<HTMLElement>('.bk-toolbar button,.bk-toolbar summary')].filter(button => button.getBoundingClientRect().width > 0);\n const current = buttons.indexOf(event.target as HTMLElement);\n const next = event.key === 'Home' ? 0 : event.key === 'End' ? buttons.length - 1 : (current + (event.key === 'ArrowRight' ? 1 : -1) + buttons.length) % buttons.length;\n buttons[next]?.focus(); event.preventDefault(); return;\n }\n const panel = store.showNotes.value || store.showSearch.value || store.showToc.value || !!store.pendingAnnotation.value || !!store.activeAnnotationId.value;\n const key = event.key.toLowerCase();\n if (store.textSelection.value && event.shiftKey && ['arrowleft', 'arrowright', 'arrowup', 'arrowdown', 'home', 'end'].includes(key)) return;\n if (key === 'n') { event.preventDefault(); if (event.shiftKey || !store.canAnnotate.value) commands.onToggleNotes(); else commands.onBeginAnnotation(); return; }\n if (panel || store.placingNote.value) return;\n switch (key) {\n case 'arrowleft': case 'pageup': commands.pageFlipAdapterRef.current?.turnToPrevPage(); break;\n case 'arrowright': case 'pagedown': commands.pageFlipAdapterRef.current?.turnToNextPage(); break;\n case 'home': store.currentPage.value = 0; break;\n case 'end': store.currentPage.value = Math.max(0, store.totalPages.value - 1); break;\n case '+': case '=': commands.interactionManagerRef.current?.zoomIn(); break;\n case '-': commands.interactionManagerRef.current?.zoomOut(); break;\n case '0': store.zoomState.value = { ...store.zoomState.value, scale: 1, isActive: false, translateX: 0, translateY: 0 }; break;\n case '/': if (store.searchAvailable.value) store.showSearch.value = true; break;\n case 'i': store.showToc.value = true; break;\n case 't': store.showThumbs.value = !store.showThumbs.value; break;\n case 'f': commands.onToggleFullscreen(); break;\n default: return;\n }\n event.preventDefault();\n }, { signal });\n}\r\n","import { computed } from '@preact/signals-core';\nimport type { FlipbookStore } from '../state/store';\nimport { domSignal } from '../core/domSignal';\n\nfunction fitRuns(group: HTMLElement, lifetime: AbortSignal) {\n const signal = domSignal(group, lifetime);\n const fit = () => {\n const layer = group.parentElement;\n if (!layer?.clientWidth) return;\n for (const span of group.querySelectorAll<HTMLElement>('[data-text-width]')) {\n const natural = span.scrollWidth;\n if (natural) span.style.transform = `scaleX(${Number(span.dataset.textWidth) * layer.clientWidth / natural})`;\n }\n };\n const view = group.ownerDocument.defaultView;\n const observer = view?.ResizeObserver ? new view.ResizeObserver(fit) : null;\n // Observe only groups containing loaded text, not every page in the book.\n queueMicrotask(() => { if (!signal.aborted && group.isConnected) { observer?.observe(group.parentElement!); fit(); } });\n const detached = view ? new view.MutationObserver(() => { if (!group.isConnected) dispose(); }) : null;\n const dispose = () => { observer?.disconnect(); detached?.disconnect(); signal.removeEventListener('abort', dispose); };\n detached?.observe(group.ownerDocument.documentElement, { childList: true, subtree: true });\n signal.addEventListener('abort', dispose, { once: true });\n}\n\n/** Transparent text is loaded independently of the PDF and page image resolution. */\nexport function TextLayer(props: { store: FlipbookStore; pageIndex: number; signal: AbortSignal }) {\n const stop = (event: Event) => { if (props.store.textSelection.value) event.stopPropagation(); };\n return <div class={computed(() => 'bk-text-layer' + (props.store.textSelection.value ? ' is-selectable' : ''))}\n aria-hidden={computed(() => props.store.textSelection.value ? 'false' : 'true')}\n onPointerDown={stop} onPointerMove={stop} onPointerUp={stop} onMouseDown={stop} onMouseMove={stop} onMouseUp={stop}\n onTouchStart={stop} onTouchMove={stop} onTouchEnd={stop} onClick={stop} onContextMenu={stop}>\n {computed(() => {\n const page = props.store.textPages.value.get(props.pageIndex);\n return page?.runs.length ? <div ref={(group: HTMLElement) => fitRuns(group, props.signal)}>{page.runs.map(run =>\n <span dir={run.direction ?? 'ltr'} data-text-start={run.start} data-text-width={run.width}\n style={`left:${run.x * 100}%;top:${run.y * 100}%;width:max-content;height:${run.height * 100}%;font-size:${run.height * 100}cqh;transform-origin:left top;`}>{run.text}</span>\n )}</div> : null;\n })}\n </div>;\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 {computed(() => <div class=\"bk-annotation-markers\">{annotations.value.map((annotation) => (\n <button type=\"button\" data-annotation-id={annotation.id} class={computed(() => 'bk-annotation-marker' + (props.store.activeAnnotationId.value === annotation.id ? ' active' : ''))} style={'left:' + Math.max(0, Math.min(1, annotation.x)) * 100 + '%;top:' + Math.max(0, Math.min(1, annotation.y)) * 100 + '%;'} aria-label={annotation.text} onPointerDown={stopPageFlipInteraction} onTouchStart={stopPageFlipInteraction} onMouseDown={stopPageFlipInteraction} onClick={(event: Event) => { event.stopPropagation(); props.onAnnotationActivate(annotation); }}>●</button>\n ))}</div>)}\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 if (props.store.canAnnotate.value) return null;\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","import { computed } from '@preact/signals-core';\nimport { resolveMessages } from '../i18n/service';\nimport type { FlipbookStore } from '../state/store';\nimport { domSignal } from '../core/domSignal';\n\ntype Place = (page: number, x: number, y: number) => void;\nconst controls = 'button,a,input,textarea,select,[contenteditable=\"true\"],.bk-hotspot-popup';\nconst stop = (event: Event) => event.stopPropagation();\n\nexport function NotePlacementLayer(props: { store: FlipbookStore; pageIndex: number; onPlace: Place }) {\n const messages = computed(() => resolveMessages({ locale: props.store.locale.value, messages: props.store.messages.value }));\n return <button type=\"button\" class=\"bk-note-placement-layer\" aria-label={computed(() => messages.value.placeNote)}\n style={computed(() => props.store.placingNote.value ? 'display:block;' : 'display:none;')}\n onPointerDown={stop} onPointerMove={stop} onPointerUp={stop} onTouchStart={stop} onTouchMove={stop} onTouchEnd={stop} onMouseDown={stop}\n onClick={(event: MouseEvent) => {\n event.preventDefault(); event.stopPropagation();\n const box = (event.currentTarget as HTMLElement).getBoundingClientRect();\n props.onPlace(props.pageIndex, event.detail === 0 ? .5 : (event.clientX - box.left) / box.width, event.detail === 0 ? .5 : (event.clientY - box.top) / box.height);\n }} />;\n}\n\n/** Long press tolerates small finger movement; dragging/pinching always cancels it. */\nexport function bindNoteGestures(element: HTMLElement, store: FlipbookStore, place: Place, signal: AbortSignal) {\n signal = domSignal(element, signal);\n let timer: ReturnType<typeof setTimeout> | undefined, held = false, startX = 0, startY = 0;\n let blockedClickUntil = 0;\n const cancel = () => { clearTimeout(timer); timer = undefined; };\n const pageAt = (target: EventTarget | null) => (target as Element | null)?.closest<HTMLElement>('.bz-page-content,.bk-single-page');\n const pick = (target: EventTarget | null, x: number, y: number) => {\n const page = pageAt(target), holder = page?.closest<HTMLElement>('[data-idx]');\n if (!page || !holder || !store.canAnnotate.value) return;\n const box = page.getBoundingClientRect();\n if (!box.width || !box.height) return;\n store.placingNote.value = true;\n place(Number(holder.dataset.idx), (x - box.left) / box.width, (y - box.top) / box.height);\n };\n element.addEventListener('pointerdown', event => {\n cancel();\n if (store.textSelection.value || !store.canAnnotate.value || store.placingNote.value || (event.target as Element).closest(controls)) return;\n if (event.button === 2) { event.stopPropagation(); return; }\n if (event.pointerType === 'mouse' || !event.isPrimary) return;\n startX = event.clientX; startY = event.clientY; held = false;\n timer = setTimeout(() => { held = true; blockedClickUntil = Date.now() + 1000; pick(event.target, startX, startY); }, 550);\n }, { capture: true, signal });\n element.addEventListener('pointermove', event => { if (Math.hypot(event.clientX - startX, event.clientY - startY) > 10) cancel(); }, { capture: true, signal });\n element.addEventListener('pointerup', event => {\n cancel();\n if (held) { event.preventDefault(); event.stopImmediatePropagation(); held = false; }\n }, { capture: true, signal });\n element.addEventListener('click', event => { if (Date.now() < blockedClickUntil) { event.preventDefault(); event.stopImmediatePropagation(); } }, { capture: true, signal });\n element.addEventListener('touchend', event => { if (Date.now() < blockedClickUntil) { event.preventDefault(); event.stopImmediatePropagation(); } }, { capture: true, passive: false, signal });\n element.addEventListener('pointercancel', () => { cancel(); held = false; }, { capture: true, signal });\n element.addEventListener('contextmenu', event => {\n if (store.textSelection.value || !store.canAnnotate.value || (event.target as Element).closest(controls)) return;\n event.preventDefault(); event.stopPropagation(); cancel();\n if (!held) pick(event.target, event.clientX, event.clientY);\n }, { capture: true, signal });\n signal.addEventListener('abort', cancel, { once: true });\n}\r\n","import { TextLayer } from './TextLayer';\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\nimport { NotePlacementLayer, bindNoteGestures } from './NotePlacementLayer';\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 onPlaceAnnotation: (pageIndex: number, x: number, y: number) => void;\r\n signal: AbortSignal;\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.isSingleMode.value) classes += 'single-mode ';\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={(element: HTMLElement) => { props.bookWrapperRef(element); bindNoteGestures(element, props.store, props.onPlaceAnnotation, props.signal); }}\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 />\r\n <TextLayer store={props.store} pageIndex={index} signal={props.signal} />\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 <NotePlacementLayer store={props.store} pageIndex={index} onPlace={props.onPlaceAnnotation} />\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\" data-idx={props.store.currentPage.value}>\r\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 {computed(() => props.store.isSingleMode.value ? (\n <>\n <TextLayer store={props.store} pageIndex={props.store.currentPage.value} signal={props.signal} />\n <SearchHighlightLayer store={props.store} pageIndex={props.store.currentPage.value} />\n <HotspotLayer store={props.store} pageIndex={props.store.currentPage.value} onActivate={props.onHotspotActivate} onClose={props.onHotspotClose} onAnnotationActivate={props.onAnnotationActivate} onAnnotationClose={props.onAnnotationClose} />\n <NotePlacementLayer store={props.store} pageIndex={props.store.currentPage.value} onPlace={props.onPlaceAnnotation} />\n </>\n ) : null)}\r\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 && !props.store.showToc.value && !props.store.showSearch.value && !props.store.showNotes.value && !props.store.placingNote.value && !props.store.pendingAnnotation.value && !props.store.activeAnnotationId.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(); e.stopPropagation(); 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(); e.stopPropagation(); 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')} onKeyDown={(event: KeyboardEvent) => { if (event.key === 'Escape') props.onClose(); }}>\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.searchBusy.value) return <div role=\"status\">{messages.value.searching}</div>;\n if (props.store.searchFailed.value) return <div role=\"alert\">{messages.value.searchFailed}</div>;\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 { AnnotationPopover } from './AnnotationPopover';\nimport { AnnotationPlacement } from './AnnotationPlacement';\nimport { ReaderShortcuts } from './ReaderShortcuts';\nimport type { FlipbookNoteDocument } from '../model/note-editor';\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 onSelectNote: (pageIndex: number) => void;\n onBeginAnnotation: () => void;\n onPlaceAnnotation: (pageIndex: number, x: number, y: number) => void;\n onSaveAnnotation: (annotation: FlipbookAnnotation) => Promise<boolean>;\n onDeleteAnnotation: (annotation: FlipbookAnnotation) => Promise<boolean>;\n onSaveNote: (note: string, document?: FlipbookNoteDocument) => Promise<boolean>;\n onClearNote: () => Promise<boolean>;\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 signal: AbortSignal;\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.showSearch.value = false;\n props.store.showNotes.value = false;\n props.store.showToc.value = !props.store.showToc.value;\n };\n\n const handleToggleNotes = () => {\n props.store.showToc.value = false;\n props.store.showSearch.value = false;\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 tabIndex={0}\n ref={(element: HTMLElement) => ReaderShortcuts(element, props.store, props, props.signal)}\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 onPlaceAnnotation={props.onPlaceAnnotation}\n signal={props.signal}\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} onClose={() => props.store.showToc.value = false} />\n <SearchPanel store={props.store} onSearch={props.onSearch} onClear={props.onClearSearch} onClose={props.onCloseSearch} onSelect={props.onSelectSearchResult} />\n <NotesPanel store={props.store} signal={props.signal} onSelect={props.onSelectNote} onAnnotation={props.onAnnotationActivate} onAdd={props.onBeginAnnotation} onSave={props.onSaveNote} onClear={props.onClearNote} onClose={props.onCloseNotes} />\n <AnnotationPopover store={props.store} signal={props.signal} onSave={props.onSaveAnnotation} onDelete={props.onDeleteAnnotation} onClose={props.onAnnotationClose} />\n <AnnotationPlacement store={props.store} />\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.showToc.value = false; props.store.showNotes.value = false; 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) => {\n if (this.store.textSelection.value || this.store.placingNote.value || (e.target as Element).closest('button,input,textarea,select,[contenteditable=true]')) return;\n if (e.ctrlKey || e.metaKey) { e.preventDefault(); e.deltaY < 0 ? this.zoomIn() : this.zoomOut(); return; }\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) => {\n if (e.button !== 0 || this.store.textSelection.value || this.store.placingNote.value || (e.target as Element).closest('button,a,input,textarea,select,[contenteditable=true]')) return;\r\n if (this.store.zoomState.value.isActive) {\r\n e.preventDefault(); e.stopPropagation();\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 }, { capture: true, 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 }, { capture: true, 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 }, { capture: true, signal: this.listenerAbortController.signal });\r\n }\r\n\r\n private bindTouch() {\n let startY = 0, startTx = 0, startTy = 0, pinchDistance = 0, pinchScale = 1;\n let pinchX = 0, pinchY = 0, pinchCenterX = 0, pinchCenterY = 0, wasPinch = false;\n const signal = this.listenerAbortController.signal;\n const interactive = (target: EventTarget | null) => (target as Element)?.closest('button,a,input,textarea,select,[contenteditable=\"true\"]');\n this.container.addEventListener('touchstart', event => {\n if (interactive(event.target) || this.store.textSelection.value || this.store.placingNote.value || this.store.pendingAnnotation.value || this.store.activeAnnotationId.value) { this.touchStartX = null; return; }\n if (event.touches.length === 2) {\n const [a, b] = Array.from(event.touches);\n const box = this.container.parentElement!.getBoundingClientRect();\n pinchDistance = Math.hypot(a.clientX - b.clientX, a.clientY - b.clientY);\n pinchScale = this.store.zoomState.value.scale;\n pinchX = (a.clientX + b.clientX) / 2; pinchY = (a.clientY + b.clientY) / 2;\n pinchCenterX = box.left + box.width / 2; pinchCenterY = box.top + box.height / 2;\n startTx = this.store.zoomState.value.translateX; startTy = this.store.zoomState.value.translateY;\n wasPinch = true; this.touchStartX = null;\n event.stopPropagation(); if (event.cancelable) event.preventDefault();\n } else if (event.touches.length === 1) {\n wasPinch = false; pinchDistance = 0;\n this.touchStartX = event.touches[0].clientX; startY = event.touches[0].clientY;\n startTx = this.store.zoomState.value.translateX; startTy = this.store.zoomState.value.translateY;\n if (this.store.zoomState.value.isActive) event.stopPropagation();\n }\n }, { capture: true, passive: false, signal });\n this.container.addEventListener('touchmove', event => {\n if (interactive(event.target) || this.store.placingNote.value) return;\n if (event.touches.length === 2 && pinchDistance > 0) {\n const [a, b] = Array.from(event.touches);\n const scale = Math.max(1, Math.min(5, pinchScale * Math.hypot(a.clientX - b.clientX, a.clientY - b.clientY) / pinchDistance));\n const ratio = scale / pinchScale;\n this.store.zoomState.value = { ...this.store.zoomState.value, scale, isActive: scale > 1,\n translateX: startTx + (pinchX - pinchCenterX) * (1 - ratio) + (a.clientX + b.clientX) / 2 - pinchX,\n translateY: startTy + (pinchY - pinchCenterY) * (1 - ratio) + (a.clientY + b.clientY) / 2 - pinchY };\n event.stopPropagation(); if (event.cancelable) event.preventDefault();\n } else if (!wasPinch && this.store.zoomState.value.isActive && this.touchStartX !== null && event.touches.length === 1) {\n this.updateZoomPan(startTx + event.touches[0].clientX - this.touchStartX, startTy + event.touches[0].clientY - startY);\n event.stopPropagation(); if (event.cancelable) event.preventDefault();\n }\n }, { capture: true, passive: false, signal });\n const finish = (event: TouchEvent) => {\n if (!wasPinch && !this.store.placingNote.value && !this.store.pendingAnnotation.value && !this.store.activeAnnotationId.value && this.touchStartX !== null && !this.store.zoomState.value.isActive && this.store.isSingleMode.value && event.changedTouches.length === 1) {\n const dx = event.changedTouches[0].clientX - this.touchStartX, dy = event.changedTouches[0].clientY - startY;\n if (Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy) * 1.4) dx > 0 ? this.pageFlipAdapter.turnToPrevPage() : this.pageFlipAdapter.turnToNextPage();\n }\n if (wasPinch || this.store.zoomState.value.isActive) event.stopPropagation();\n this.touchStartX = null; if (!event.touches.length) { wasPinch = false; pinchDistance = 0; }\n };\n this.container.addEventListener('touchend', finish, { capture: true, passive: true, signal });\n this.container.addEventListener('touchcancel', () => { this.touchStartX = null; wasPinch = false; pinchDistance = 0; }, { capture: true, signal });\n }\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}","import type { FlipbookTextPage } from '../model/text-layer';\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';\nimport type { FlipbookNoteDocument, FlipbookNoteEditorFactory } from '../model/note-editor';\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 textAvailable: Signal<boolean>; textPages: Signal<ReadonlyMap<number, FlipbookTextPage>>; textSelection: Signal<boolean>;\n pageNoteDocuments: Signal<ReadonlyMap<number, FlipbookNoteDocument>>; noteEditor: Signal<FlipbookNoteEditorFactory | undefined>; canAnnotate: Signal<boolean>; placingNote: Signal<boolean>; pendingAnnotation: Signal<FlipbookAnnotation | null>; notesView: Signal<'page' | 'all'>; searchAvailable: Signal<boolean>; searchBusy: Signal<boolean>; searchFailed: Signal<boolean>; notesSaving: Signal<boolean>; notesFailed: Signal<boolean>;\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 textPages = signal<ReadonlyMap<number, FlipbookTextPage>>(new Map());\n const textSelection = signal(false), textAvailable = signal(false);\n const pageNoteDocuments = signal<ReadonlyMap<number, FlipbookNoteDocument>>(new Map());\n const noteEditor = signal<FlipbookNoteEditorFactory | undefined>(undefined);\n const canAnnotate = signal(false), placingNote = signal(false), pendingAnnotation = signal<FlipbookAnnotation | null>(null);\n const notesView = signal<'page' | 'all'>('page');\n const searchAvailable = signal(false), searchBusy = signal(false), searchFailed = signal(false), notesSaving = signal(false), notesFailed = signal(false);\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 pageNoteDocuments.value = new Map(Object.entries(options.noteDocuments ?? {}).map(([page, doc]) => [Number(page), doc])); noteEditor.value = options.noteEditor; canAnnotate.value = !!options.annotationProvider; placingNote.value = false; pendingAnnotation.value = null;\n textAvailable.value = !!options.textLayerProvider;\n textPages.value = new Map(); textSelection.value = options.textSelection ?? false;\n searchAvailable.value = pdfMode || !!options.searchProvider;\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; notesView.value = 'page';\n showSearch.value = false; searchBusy.value = false; searchFailed.value = false; notesSaving.value = false; notesFailed.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 textPages.value = new Map(); textSelection.value = false; textAvailable.value = false;\n currentPage.value = 0;\n totalPages.value = 0;\n isSingleMode.value = false;\n showThumbs.value = false;\n showToc.value = false;\n showNotes.value = false; notesView.value = 'page';\n showSearch.value = false; searchBusy.value = false; searchFailed.value = false; notesSaving.value = false; notesFailed.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 searchAvailable.value = false; pageNoteDocuments.value = new Map(); canAnnotate.value = false; placingNote.value = false; pendingAnnotation.value = null;\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 { textAvailable, textPages, textSelection, pageNoteDocuments, noteEditor, canAnnotate, placingNote, pendingAnnotation, notesView, searchAvailable, searchBusy, searchFailed, notesSaving, notesFailed, 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 annotationChange: true, 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","import { loadTextLayers } from './core/TextLayerLoader';\nimport type { FlipbookTextLayerProvider } from './model/text-layer';\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 type { FlipbookSearchProvider, FlipbookNoteProvider, FlipbookAnnotationProvider } from './model/backend';\nimport type { FlipbookNoteDocument, FlipbookNoteEditorFactory } from './model/note-editor';\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 textLayerProvider?: FlipbookTextLayerProvider;\n /** Opt in to selection; turning pages remains available through toolbar/keyboard. */\n textSelection?: boolean;\n searchProvider?: FlipbookSearchProvider;\n noteProvider?: FlipbookNoteProvider;\n annotationProvider?: FlipbookAnnotationProvider;\n noteEditor?: FlipbookNoteEditorFactory;\n noteDocuments?: Record<number, FlipbookNoteDocument>;\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 annotationChange: { annotation: FlipbookAnnotation; action: 'save' | 'delete' };\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 searchSequence = 0;\n private textLayerStop: (() => void) | null = null;\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 if (this.options.textLayerProvider) this.textLayerStop = loadTextLayers(this.store, this.options.textLayerProvider, abortController.signal);\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 signal: abortController.signal,\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 if (!this.store.showNotes.value) this.store.notesView.value = this.store.pageNotes.value.size || this.store.annotations.value.length ? 'all' : 'page';\n this.store.showNotes.value = !this.store.showNotes.value;\n },\n onSelectNote: (pageIndex: number) => { this.goToPage(pageIndex); this.store.notesView.value = 'page'; },\n onBeginAnnotation: () => this.beginAnnotation(),\n onPlaceAnnotation: (pageIndex: number, x: number, y: number) => this.placeAnnotation(pageIndex, x, y),\n onSaveAnnotation: (annotation: FlipbookAnnotation) => this.saveAnnotation(annotation),\n onDeleteAnnotation: (annotation: FlipbookAnnotation) => this.saveAnnotation(annotation, 'delete'),\n onSaveNote: (note: string, document?: FlipbookNoteDocument) => this.saveNote(this.getCurrentPage(), note, document),\n onClearNote: () => this.saveNote(this.getCurrentPage(), null),\n onCloseNotes: () => {\n this.store.showNotes.value = false;\n },\n onSearch: (query, searchOptions) => { void this.search(query, searchOptions).catch(() => {}); },\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);\r\n const pages = this.store.pages.value;\r\n if (dataUrl) {\r\n for (const page of pages) {\r\n if ((page.sourcePageNumber ?? page.pageNumber) === pageNumber) {\r\n page.normal = dataUrl;\r\n page.low = dataUrl;\r\n page.thumb = dataUrl;\r\n }\r\n }\n }\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 currentIdx = this.store.currentPage.value;\n const pages = this.store.pages.value;\n const isSingle = this.store.isSingleMode.value;\n const targetIndices = isSingle\n ? [currentIdx - 1, currentIdx, currentIdx + 1]\n : [currentIdx - 1, currentIdx, currentIdx + 1, (currentIdx % 2 === 1 ? currentIdx + 2 : currentIdx + 1)];\n const sourcePages = new Set<number>();\n for (const idx of targetIndices) {\n if (idx >= 0 && idx < pages.length) {\n const p = pages[idx];\n const sp = p?.sourcePageNumber ?? p?.pageNumber;\n if (sp) sourcePages.add(sp);\n }\n }\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 sequence = ++this.searchSequence;\n const normalizedQuery = String(query ?? '').trim();\n this.store.searchBusy.value = false;\n this.store.searchFailed.value = false;\n if (this.options.searchProvider && normalizedQuery) {\n this.store.searchQuery.value = normalizedQuery;\n this.store.searchResults.value = [];\n this.store.searchBusy.value = true;\n const signal = this.initAbortController?.signal ?? new AbortController().signal;\n try {\n const results = await this.options.searchProvider(normalizedQuery, options, signal);\n if (signal.aborted || sequence !== this.searchSequence) return [];\n const max = Number.isFinite(options.maxResults) ? Math.max(1, Math.trunc(options.maxResults!)) : 100;\n this.store.searchResults.value = results.filter(result => Number.isInteger(result.pageIndex) && result.pageIndex >= 0 && result.pageIndex < this.store.totalPages.value).slice(0, max);\n this.emit('searchChange', { query: normalizedQuery, results: this.store.searchResults.value });\n return this.store.searchResults.value;\n } catch (error) {\n if (!signal.aborted && sequence === this.searchSequence) this.store.searchFailed.value = true;\n throw error;\n } finally { if (sequence === this.searchSequence) this.store.searchBusy.value = false; }\n }\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 if (sequence !== this.searchSequence) return [];\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.searchSequence++;\n this.store.searchBusy.value = false;\n this.store.searchFailed.value = false;\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 /** The native editor commits locally only after host persistence succeeds. */\n public async saveNote(pageIndex: number, note: string | null, document?: FlipbookNoteDocument): Promise<boolean> {\n if (this.store.notesSaving.value || !Number.isInteger(pageIndex) || pageIndex < 0 || pageIndex >= this.store.totalPages.value) return false;\n const signal = this.initAbortController?.signal ?? new AbortController().signal;\n const normalized = note?.trim() || null;\n this.store.notesSaving.value = true;\n this.store.notesFailed.value = false;\n try {\n await this.options.noteProvider?.(pageIndex, normalized, signal, document);\n if (signal.aborted) return false;\n this.setNote(pageIndex, normalized ?? '');\n const documents = new Map(this.store.pageNoteDocuments.value);\n if (document && normalized) documents.set(pageIndex, document); else documents.delete(pageIndex);\n this.store.pageNoteDocuments.value = documents;\n return true;\n } catch {\n if (!signal.aborted) this.store.notesFailed.value = true;\n return false;\n } finally { this.store.notesSaving.value = false; }\n }\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.goToPage(annotation.pageIndex);\n this.store.showNotes.value = false;\n this.store.showToc.value = false;\n this.store.showSearch.value = false;\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; this.store.pendingAnnotation.value = null; }\n\n public beginAnnotation(): void {\n if (!this.store.canAnnotate.value) return;\n this.closeAnnotation();\n this.store.showNotes.value = false;\n this.store.showToc.value = false;\n this.store.showSearch.value = false;\n this.store.textSelection.value = false;\n this.store.placingNote.value = true;\n queueMicrotask(() => {\n if (!this.store.placingNote.value) return;\n [...(this.container?.querySelectorAll<HTMLElement>('.bk-note-placement-layer') ?? [])]\n .find(element => element.getBoundingClientRect().width > 0)?.focus();\n });\n }\n\n public placeAnnotation(pageIndex: number, x: number, y: number): void {\n if (!this.store.placingNote.value || !Number.isInteger(pageIndex) || pageIndex < 0 || pageIndex >= this.store.totalPages.value || !Number.isFinite(x) || !Number.isFinite(y)) return;\n this.goToPage(pageIndex);\n this.store.pendingAnnotation.value = { id: crypto.randomUUID(), pageIndex, x: Math.max(0, Math.min(1, x)), y: Math.max(0, Math.min(1, y)), text: '' };\n this.store.placingNote.value = false;\n }\n\n public async saveAnnotation(annotation: FlipbookAnnotation, action: 'save' | 'delete' = 'save'): Promise<boolean> {\n if (!this.options.annotationProvider || this.store.notesSaving.value || !annotation.id ||\n !Number.isInteger(annotation.pageIndex) || annotation.pageIndex < 0 || annotation.pageIndex >= this.store.totalPages.value ||\n !Number.isFinite(annotation.x) || !Number.isFinite(annotation.y) || annotation.x < 0 || annotation.x > 1 || annotation.y < 0 || annotation.y > 1 ||\n (action === 'save' && (!annotation.text.trim() || annotation.text.length > 4000))) return false;\n const signal = this.initAbortController?.signal ?? new AbortController().signal;\n const saved = { ...annotation, text: annotation.text.trim() };\n this.store.notesSaving.value = true;\n this.store.notesFailed.value = false;\n try {\n await this.options.annotationProvider(saved, action, signal);\n if (signal.aborted) return false;\n const remaining = this.store.annotations.value.filter(note => note.id !== saved.id);\n this.store.annotations.value = action === 'delete' ? remaining : [...remaining, saved];\n this.store.pendingAnnotation.value = null;\n this.store.activeAnnotationId.value = action === 'delete' ? null : saved.id;\n this.emit('annotationChange', { annotation: saved, action });\n return true;\n } catch {\n if (!signal.aborted) this.store.notesFailed.value = true;\n return false;\n } finally { if (!signal.aborted) this.store.notesSaving.value = false; }\n }\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.options = { ...this.options, singleMode: isSingle, isSingleMode: isSingle };\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 if ('annotationProvider' in options) this.store.canAnnotate.value = !!options.annotationProvider;\n if ('searchProvider' in options) this.store.searchAvailable.value = !!options.searchProvider || this.store.isPdfMode.value;\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 setTextSelection(enabled: boolean) { this.store.textSelection.value = !!enabled; }\n\n public destroy(keepContainer = false) {\n this.textLayerStop?.(); this.textLayerStop = null;\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":["validateTextPage","page","index","end","run","loadTextLayers","store","provider","lifetime","requests","completed","stop","effect","current","total","wanted","request","retained","dispose","initPropHookSymbol","isElement","val","isString","isNumber","isObject","isComponentClass","isArrayLike","isPropHook","value","isVisibleChild","className","k","isRefObject","maybeRef","setRef","ref","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","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","Fragment","fragment","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","showReaderHelp","root","messages","dialog","heading","list","keys","label","detail","close","previous","attachToolbarMore","toolbar","menu","commands","selector","button","computed","details","event","renderPluginToolbarButtons","disabled","jsxs","Toolbar","left","note","Thumbnails","isActive","renderEntries","entries","onEntryClick","entry","TableOfContents","NoteEditor","view","observer","cleanup","input","renderNoteDocument","fallback","remaining","render","depth","content","mark","element","name","NotesPanel","draft","signal","editingPage","ready","drafts","pendingCommits","currentNote","draftValue","editing","beginEdit","save","_b","_c","clear","notes","pageIndex","text","annotation","AnnotationPopover","selected","deleting","isEditing","AnnotationPlacement","domSignal","session","Controller","controller","ReaderShortcuts","previousFocus","wasOpen","open","panel","buttons","next","_d","_e","_f","fitRuns","group","fit","layer","span","natural","detached","TextLayer","renderMedia","media","fallbackLabel","stopPageFlipInteraction","normalizedRectStyle","hotspot","clamp","HotspotLayer","hotspots","annotations","activeGalleryIndex","active","gallery","selectedIndex","selectedGalleryItem","controls","NotePlacementLayer","box","bindNoteGestures","place","timer","held","startX","startY","blockedClickUntil","cancel","pageAt","pick","y","holder","SearchHighlightLayer","highlights","result","highlight","Viewer","classes","isHard","NavigationArrows","isLeftVisible","isRightVisible","SearchPanel","inputRef","query","submit","results","PluginPanelHost","mount","PluginPanels","panels","App","handleToggleThumbs","handleToggleToc","handleToggleNotes","handleToggleSingleMode","handleToggleAutoPlay","handleZoomIn","handleZoomOut","handleToggleFullscreen","handleTocEntryClick","handleThumbClick","handleNextPage","handlePrevPage","exports","this","n","g","u","prefersReducedMotion","resolveFlippingTime","flippingTime","reducedMotion","PageFlipAdapter","bookContainer","options","__publicField","unlock","playback","viewportWidth","viewportHeight","PageFlip","pageElements","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","initialTx","initialTy","dx","dy","startTx","startTy","pinchDistance","pinchScale","pinchX","pinchY","pinchCenterX","pinchCenterY","wasPinch","interactive","scale","ratio","finish","newScale","normalizeEntry","totalPages","id","normalizeFlipbookToc","initialZoomState","createFlipbookStore","textPages","textSelection","textAvailable","pageNoteDocuments","noteEditor","canAnnotate","placingNote","pendingAnnotation","notesView","searchAvailable","searchBusy","searchFailed","notesSaving","notesFailed","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","doc","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","userVariables","variableName","PdfRenderCache","maxEntries","dataUrl","oldest","A3_LANDSCAPE_WIDTH","A3_LANDSCAPE_HEIGHT","isA3Landscape","landscapeWidth","landscapeHeight","nearA3Size","PdfRenderer","cacheSize","pdfjsLib","pdfUrl","loadingTask","abortLoading","error","cached","vp","canvas","ctx","renderTask","cancelRender","normalizedQuery","caseSensitive","needle","maxResults","items","haystack","matches","offset","first","start","viewport","itemText","itemHaystack","transform","itemX","itemY","itemWidth","itemHeight","itemOffset","ratioStart","ratioWidth","mode","layouts","split","baseShortSide","firstPageLayout","firstPage","aspectRatio","onProgress","pageCount","resolvedPages","nextPage","renderWorker","normalSrc","workerCount","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","send","command","resolve","reject","zoom","isSingle","update","searchOptions","show","set","_FlipbookEngine","FlipbookPluginRegistry","plugin","imageList","generation","abortController","sourceAssets","referencePage","size","pdfStage","pageLayouts","bookWrapperEl","bookSizerEl","bookContainerEl","pageFlipAdapterRef","interactionManagerRef","appNode","url","document","placeholder","layout","sourceIndex","sourcePageNumber","cropMode","renderer","currentIdx","targetIndices","sourcePages","idx","sp","sourcePage","src","targetIdx","clone","pluginName","apiName","bookmarked","boundedIndex","normalizedNote","max","sourceResults","source","cropStart","documents","hotspotId","annotationId","action","saved","zoomLevel","requestedZoom","mergedMessages","deepLinkChanged","parsed","hashPage","rawPage","nextUrl","images","upgrade","pdfPage","highQualitySrc","Observer","pdfPages","enabled","keepContainer","hadSession","FlipbookEngine","globalScope","flipbookNamespace"],"mappings":"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","x_google_ignoreList":[2,26]}