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