flipbookengine 0.6.5 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +24 -3
  2. package/README.md +136 -8
  3. package/dist/components/App.d.ts +19 -0
  4. package/dist/components/HotspotLayer.d.ts +14 -0
  5. package/dist/components/NotesPanel.d.ts +14 -0
  6. package/dist/components/PluginPanels.d.ts +5 -0
  7. package/dist/components/SearchPanel.d.ts +11 -0
  8. package/dist/components/Toolbar.d.ts +6 -0
  9. package/dist/components/Viewer.d.ts +6 -0
  10. package/dist/core/LayoutManager.d.ts +1 -1
  11. package/dist/core/PdfRenderer.d.ts +11 -0
  12. package/dist/core-entry.d.ts +13 -0
  13. package/dist/core.d.ts +1 -0
  14. package/dist/embed.d.ts +80 -0
  15. package/dist/engine-Dt2Fn6O-.js +4060 -0
  16. package/dist/engine-Dt2Fn6O-.js.map +1 -0
  17. package/dist/engine.d.ts +101 -0
  18. package/dist/feature-Cicli9ie.js +17 -0
  19. package/dist/feature-Cicli9ie.js.map +1 -0
  20. package/dist/flipbook-engine.core.js +8 -0
  21. package/dist/flipbook-engine.core.js.map +1 -0
  22. package/dist/flipbook-engine.css +1 -1
  23. package/dist/flipbook-engine.iife.js +56 -47
  24. package/dist/flipbook-engine.iife.js.map +1 -1
  25. package/dist/flipbook-engine.js +10 -6
  26. package/dist/flipbook-engine.js.map +1 -1
  27. package/dist/flipbook-engine.plugins-annotations.js +14 -0
  28. package/dist/flipbook-engine.plugins-annotations.js.map +1 -0
  29. package/dist/flipbook-engine.plugins-bookmarks.js +16 -0
  30. package/dist/flipbook-engine.plugins-bookmarks.js.map +1 -0
  31. package/dist/flipbook-engine.plugins-deep-link.js +14 -0
  32. package/dist/flipbook-engine.plugins-deep-link.js.map +1 -0
  33. package/dist/flipbook-engine.plugins-hotspots.js +15 -0
  34. package/dist/flipbook-engine.plugins-hotspots.js.map +1 -0
  35. package/dist/flipbook-engine.plugins-notes.js +16 -0
  36. package/dist/flipbook-engine.plugins-notes.js.map +1 -0
  37. package/dist/flipbook-engine.plugins-search.js +15 -0
  38. package/dist/flipbook-engine.plugins-search.js.map +1 -0
  39. package/dist/flipbook-engine.plugins-share.js +13 -0
  40. package/dist/flipbook-engine.plugins-share.js.map +1 -0
  41. package/dist/flipbook-engine.plugins-toc.js +14 -0
  42. package/dist/flipbook-engine.plugins-toc.js.map +1 -0
  43. package/dist/flipbook-engine.plugins.js +5 -0
  44. package/dist/flipbook-engine.plugins.js.map +1 -0
  45. package/dist/flipbook-engine.react.js +1 -1
  46. package/dist/flipbook-engine.vue.js +1 -1
  47. package/dist/i18n/locales/en.d.ts +17 -0
  48. package/dist/i18n/locales/tr.d.ts +17 -0
  49. package/dist/i18n/service.d.ts +51 -0
  50. package/dist/index-BhTR2SK6.js +366 -0
  51. package/dist/index-BhTR2SK6.js.map +1 -0
  52. package/dist/index.d.ts +7 -0
  53. package/dist/model/annotations.d.ts +14 -0
  54. package/dist/model/hotspots.d.ts +40 -0
  55. package/dist/model/search.d.ts +25 -0
  56. package/dist/plugins/annotations.d.ts +4 -0
  57. package/dist/plugins/bookmarks.d.ts +4 -0
  58. package/dist/plugins/deep-link.d.ts +4 -0
  59. package/dist/plugins/feature.d.ts +5 -0
  60. package/dist/plugins/hotspots.d.ts +4 -0
  61. package/dist/plugins/index.d.ts +65 -0
  62. package/dist/plugins/notes.d.ts +4 -0
  63. package/dist/plugins/search.d.ts +4 -0
  64. package/dist/plugins/share.d.ts +4 -0
  65. package/dist/plugins/toc.d.ts +4 -0
  66. package/dist/plugins-annotations.d.ts +1 -0
  67. package/dist/plugins-bookmarks.d.ts +1 -0
  68. package/dist/plugins-deep-link.d.ts +1 -0
  69. package/dist/plugins-hotspots.d.ts +1 -0
  70. package/dist/plugins-notes.d.ts +1 -0
  71. package/dist/plugins-search.d.ts +1 -0
  72. package/dist/plugins-share.d.ts +1 -0
  73. package/dist/plugins-toc.d.ts +1 -0
  74. package/dist/plugins.d.ts +1 -0
  75. package/dist/state/store.d.ts +19 -5
  76. package/dist/vue/index.d.ts +1 -1
  77. package/docs/api-reference.md +206 -0
  78. package/docs/frameworks.md +73 -0
  79. package/docs/getting-started.md +128 -0
  80. package/docs/i18n.md +47 -0
  81. package/docs/migration-0.4.0.md +24 -0
  82. package/docs/migration-0.5.0.md +25 -0
  83. package/docs/migration-1.0.0.md +59 -0
  84. package/docs/plugin-architecture.md +103 -0
  85. package/docs/release-checklist.md +37 -0
  86. package/docs/theming.md +61 -0
  87. package/package.json +165 -114
  88. package/dist/engine-DhQ2zxpm.js +0 -3535
  89. package/dist/engine-DhQ2zxpm.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine-DhQ2zxpm.js","sources":["../node_modules/@preact/signals-core/dist/signals-core.module.js","../node_modules/@serenity-is/domwise/dist/index.js","../src/i18n/locales/en.ts","../src/i18n/locales/tr.ts","../src/i18n/service.ts","../src/components/Toolbar.tsx","../src/components/Thumbnails.tsx","../src/components/TableOfContents.tsx","../src/components/Viewer.tsx","../src/components/NavigationArrows.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/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\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 play: 'Play',\n pause: 'Pause',\n tableOfContents: 'Table of Contents'\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 play: 'Otomatik Oynat',\n pause: 'Duraklat',\n tableOfContents: 'İçindekiler'\n} as const;\n","/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nimport { enMessages } from './locales/en';\nimport { trMessages } from './locales/tr';\n\nexport interface FlipbookMessages {\n emptyStateTitle: string;\n thumbnails: string;\n singlePageMode: string;\n pages: string;\n previous: string;\n next: string;\n zoomOut: string;\n zoomIn: string;\n fullscreen: string;\n settings: string;\n downloadCatalog: string;\n play: string;\n pause: string;\n tableOfContents: string;\n}\n\nexport const builtInMessages = {\n en: enMessages,\n tr: trMessages\n} as const;\n\nexport type FlipbookLocale = keyof typeof builtInMessages;\nexport type PartialFlipbookMessages = Partial<FlipbookMessages>;\n\nexport interface I18nConfiguration {\n locale?: FlipbookLocale | string;\n messages?: Partial<Record<string, PartialFlipbookMessages>>;\n}\n\nexport function resolveMessages(config: I18nConfiguration = {}): FlipbookMessages {\n const locale = config.locale ?? 'en';\n const builtIn = builtInMessages[locale as FlipbookLocale] ?? builtInMessages.en;\n const custom = config.messages?.[locale] ?? {};\n return {\n ...builtInMessages.en,\n ...builtIn,\n ...custom\n };\n}\n","/**\n * @license FlipbookEngine v0.6.5\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 { resolveMessages } from '../i18n/service';\ninterface ToolbarProps {\n store: FlipbookStore;\n onToggleThumbs: () => void;\n onToggleToc: () => void;\n onToggleSingleMode: () => void;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onDownload?: () => void;\n onSoundToggle: () => void;\n onNextPage: () => void;\n onPrevPage: () => void;\n onToggleAutoPlay: () => void;\n onToggleFullscreen: () => void;\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 <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(() => `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 {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 </div>\n </div>\n );\n}\n\n\n\n\n\n\n","/**\n * @license FlipbookEngine v0.6.5\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 v0.6.5\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}","/**\r\n * @license FlipbookEngine v0.6.5\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';\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;\r\n}\r\n\r\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={`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 <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 <img\r\n data-pdf-page={page.assetId.startsWith('pdf-page-') ? (page.sourcePageNumber ?? page.pageNumber) : undefined}\r\n class={`bk-single-img page-content ${page.cropMode !== 'full' ? 'page-content--split page-content--' + page.cropMode : ''}`}\r\n src={props.store.zoomState.value.isActive ? page.normal : (page.low || page.normal)}\r\n alt={`Page ${props.store.currentPage.value + 1}`}\r\n style=\"opacity: 1; transition: opacity 0.3s; box-shadow: var(--flipbook-shadow);\"\r\n />\r\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 v0.6.5\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 } from '@preact/signals-core';\n/**\n * @license FlipbookEngine v0.6.5\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 { Viewer } from './Viewer';\nimport { NavigationArrows } from './NavigationArrows';\nimport type { FlipbookStore } from '../state/store';\nimport type { PageFlipAdapter } from '../adapters/PageFlipAdapter';\nimport type { InteractionManager } from '../core/InteractionManager';\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 onToggleFullscreen: () => void;\n store: FlipbookStore;\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 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 />\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 </div>\n\n <Toolbar store={props.store}\n onToggleThumbs={handleToggleThumbs}\n onToggleToc={handleToggleToc}\n onToggleSingleMode={handleToggleSingleMode}\n onZoomIn={handleZoomIn}\n onZoomOut={handleZoomOut}\n onDownload={props.onDownload}\n onNextPage={handleNextPage}\n onPrevPage={handlePrevPage}\n onSoundToggle={() => props.store.soundEnabled.value = !props.store.soundEnabled.value}\n onToggleAutoPlay={handleToggleAutoPlay}\n onToggleFullscreen={handleToggleFullscreen}\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 v0.6.5\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 v0.6.5\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 v0.6.5\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 v0.6.5\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';\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>; showArrows: Signal<boolean>; orientation: Signal<Orientation>;\n flipState: Signal<FlipState>; themeMode: Signal<FlipbookThemeMode>; allowDownload: Signal<boolean>;\n hasDownloadUrl: Signal<boolean>; primaryColor: Signal<string>; whiteLabel: Signal<boolean>;\n isZoomed: Signal<boolean>; isAutoPlaying: Signal<boolean>; autoPlayInterval: Signal<number>;\n soundEnabled: Signal<boolean>; 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): 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), 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), primaryColor = signal('#7367f0');\n const whiteLabel = signal(false), isZoomed = signal(false), isAutoPlaying = signal(false);\n const autoPlayInterval = signal(3000), soundEnabled = signal(true);\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) => {\n totalPages.value = total; pages.value = mappedPages; hasDownloadUrl.value = hasPdfUrl;\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 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 currentPage.value = 0;\n };\n const reset = () => {\n currentPage.value = 0;\n totalPages.value = 0;\n isSingleMode.value = false;\n showThumbs.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 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 };\n return { currentPage, totalPages, isSingleMode, showThumbs, showToc, showArrows, orientation, flipState, themeMode, allowDownload, hasDownloadUrl, primaryColor, whiteLabel, isZoomed, isAutoPlaying, autoPlayInterval, soundEnabled, 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, showArrows = legacyStore.showArrows, orientation = legacyStore.orientation;\nexport const flipState = legacyStore.flipState, themeMode = legacyStore.themeMode, allowDownload = legacyStore.allowDownload;\nexport const hasDownloadUrl = legacyStore.hasDownloadUrl, primaryColor = legacyStore.primaryColor, whiteLabel = legacyStore.whiteLabel;\nexport const isZoomed = legacyStore.isZoomed, isAutoPlaying = legacyStore.isAutoPlaying, autoPlayInterval = legacyStore.autoPlayInterval;\nexport const soundEnabled = legacyStore.soundEnabled, 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';\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;\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 /** 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 v0.6.5\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 './styles/flipbook-engine.css';\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 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}\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}\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\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 ...options\n };\n this.setupEventSync();\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 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);\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 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 });\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 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 this.options = { ...this.options, ...options };\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\n if (this.container) {\n applyThemeConfiguration(this.container, this.options);\n }\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 }\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.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 }\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","enMessages","trMessages","builtInMessages","resolveMessages","config","locale","builtIn","custom","Toolbar","messages","computed","jsxs","total","left","Thumbnails","page","isActive","event","renderEntries","entries","store","onEntryClick","entry","TableOfContents","Viewer","classes","isHard","NavigationArrows","isLeftVisible","isRightVisible","App","handleToggleThumbs","handleToggleToc","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","signal","isSingleMode","showThumbs","showToc","showArrows","orientation","flipState","themeMode","allowDownload","hasDownloadUrl","primaryColor","whiteLabel","isZoomed","isAutoPlaying","autoPlayInterval","soundEnabled","zoomState","pages","toc","isDoublePageLayout","isFrontCover","isBackCover","mappedPages","hasPdfUrl","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","mode","layouts","split","baseShortSide","firstPageLayout","firstPage","aspectRatio","onProgress","pageCount","resolvedPages","nextPage","completed","renderWorker","normalSrc","workerCount","_b","_d","_c","_FlipbookEngine","selector","imageList","generation","abortController","viewport","sourceAssets","referencePage","size","pdfStage","pageLayouts","bookWrapperEl","bookSizerEl","bookContainerEl","pageFlipAdapterRef","interactionManagerRef","appNode","resolve","finish","placeholder","layout","sourceIndex","sourcePageNumber","cropMode","renderer","request","next","sourcePage","src","targetIdx","zoomLevel","requestedZoom","scale","mergedMessages","isSingle","images","upgrade","pdfPage","highQualitySrc","Observer","pdfPages","keepContainer","hadSession","payload","FlipbookEngine","globalScope","flipbookNamespace"],"mappings":"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","x_google_ignoreList":[0,1,11]}