flipbookengine 0.2.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/README.md +272 -187
- package/THIRD-PARTY-NOTICES.md +56 -0
- package/dist/adapters/PageFlipAdapter.d.ts +5 -1
- package/dist/components/App.d.ts +3 -0
- package/dist/components/NavigationArrows.d.ts +9 -0
- package/dist/components/Thumbnails.d.ts +3 -0
- package/dist/components/Toolbar.d.ts +3 -0
- package/dist/components/Viewer.d.ts +3 -0
- package/dist/core/InteractionManager.d.ts +4 -1
- package/dist/core/LayoutManager.d.ts +19 -1
- package/dist/core/PdfRenderer.d.ts +33 -0
- package/dist/engine-G9HiVpA-.js +3253 -0
- package/dist/engine-G9HiVpA-.js.map +1 -0
- package/dist/engine.d.ts +37 -3
- package/dist/flipbook-engine.css +1 -1
- package/dist/flipbook-engine.iife.js +94 -48
- package/dist/flipbook-engine.iife.js.map +1 -1
- package/dist/flipbook-engine.js +4 -20635
- package/dist/flipbook-engine.js.map +1 -1
- package/dist/flipbook-engine.react.js +44 -29
- package/dist/flipbook-engine.react.js.map +1 -1
- package/dist/flipbook-engine.vue.js +25 -22
- package/dist/flipbook-engine.vue.js.map +1 -1
- package/dist/react/index.d.ts +4 -1
- package/dist/state/store.d.ts +41 -21
- package/dist/theme/theme.d.ts +0 -1
- package/dist/vue/index.d.ts +5 -2
- package/package.json +113 -105
|
@@ -1,43 +1,58 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import {
|
|
4
|
-
const v =
|
|
5
|
-
className:
|
|
6
|
-
style:
|
|
7
|
-
pdfUrl:
|
|
8
|
-
pages:
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as P, useRef as g, useImperativeHandle as x, useEffect as c } from "react";
|
|
3
|
+
import { F as d } from "./engine-G9HiVpA-.js";
|
|
4
|
+
const v = P(({
|
|
5
|
+
className: a,
|
|
6
|
+
style: f,
|
|
7
|
+
pdfUrl: i,
|
|
8
|
+
pages: s,
|
|
9
9
|
onPageChange: n,
|
|
10
10
|
...u
|
|
11
|
-
},
|
|
12
|
-
const
|
|
13
|
-
return
|
|
11
|
+
}, l) => {
|
|
12
|
+
const o = g(null), r = g(null);
|
|
13
|
+
return x(l, () => ({
|
|
14
14
|
get engine() {
|
|
15
|
-
return
|
|
15
|
+
return r.current;
|
|
16
|
+
},
|
|
17
|
+
nextPage: () => {
|
|
18
|
+
var e;
|
|
19
|
+
return (e = r.current) == null ? void 0 : e.nextPage();
|
|
20
|
+
},
|
|
21
|
+
prevPage: () => {
|
|
22
|
+
var e;
|
|
23
|
+
return (e = r.current) == null ? void 0 : e.prevPage();
|
|
24
|
+
},
|
|
25
|
+
goToPage: (e) => {
|
|
26
|
+
var t;
|
|
27
|
+
return (t = r.current) == null ? void 0 : t.goToPage(e);
|
|
16
28
|
},
|
|
17
29
|
flipNext: () => {
|
|
18
|
-
var
|
|
19
|
-
return (
|
|
30
|
+
var e;
|
|
31
|
+
return (e = r.current) == null ? void 0 : e.nextPage();
|
|
20
32
|
},
|
|
21
33
|
flipPrev: () => {
|
|
22
|
-
var
|
|
23
|
-
return (
|
|
34
|
+
var e;
|
|
35
|
+
return (e = r.current) == null ? void 0 : e.prevPage();
|
|
24
36
|
},
|
|
25
|
-
turnToPage: (
|
|
26
|
-
|
|
37
|
+
turnToPage: (e) => {
|
|
38
|
+
var t;
|
|
39
|
+
return (t = r.current) == null ? void 0 : t.goToPage(e);
|
|
27
40
|
}
|
|
28
|
-
})), c(() => {
|
|
29
|
-
if (!
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
return
|
|
34
|
-
|
|
41
|
+
}), []), c(() => {
|
|
42
|
+
if (!o.current) return;
|
|
43
|
+
const e = new d(o.current, u);
|
|
44
|
+
r.current = e;
|
|
45
|
+
const t = e.on("pageChange", (p) => n == null ? void 0 : n(p));
|
|
46
|
+
return () => {
|
|
47
|
+
t(), e.destroy(), r.current = null;
|
|
35
48
|
};
|
|
36
49
|
}, []), c(() => {
|
|
37
|
-
e
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
const e = r.current;
|
|
51
|
+
e && e.setPages(s, i).catch(console.error);
|
|
52
|
+
}, [i, s]), c(() => {
|
|
53
|
+
var e;
|
|
54
|
+
(e = r.current) == null || e.updateOptions(u);
|
|
55
|
+
}, [u]), /* @__PURE__ */ m("div", { ref: o, className: a, style: { width: "100%", height: "100%", minHeight: "400px", ...f } });
|
|
41
56
|
});
|
|
42
57
|
v.displayName = "Flipbook";
|
|
43
58
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flipbook-engine.react.js","sources":["../src/react/index.tsx"],"sourcesContent":["/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\n/** @jsxImportSource react */\nimport React, { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\nimport { FlipbookEngine, FlipbookEngineOptions, FlipbookPageAsset } from '../index';\n\nexport interface FlipbookProps extends Omit<FlipbookEngineOptions, 'theme'> {\n className?: string;\n style?: React.CSSProperties;\n pdfUrl
|
|
1
|
+
{"version":3,"file":"flipbook-engine.react.js","sources":["../src/react/index.tsx"],"sourcesContent":["/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\n/** @jsxImportSource react */\nimport React, { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\nimport { FlipbookEngine, FlipbookEngineOptions, FlipbookPageAsset } from '../index';\n\nexport interface FlipbookProps extends Omit<FlipbookEngineOptions, 'theme'> {\n className?: string;\n style?: React.CSSProperties;\n pdfUrl?: string;\n pages?: FlipbookPageAsset[];\n theme?: 'auto' | 'light' | 'dark';\n onPageChange?: (e: { currentPage: number; totalPages: number }) => void;\n}\n\nexport interface FlipbookRef {\n engine: FlipbookEngine | null;\n nextPage: () => void;\n prevPage: () => void;\n goToPage: (pageIndex: number) => void;\n flipNext: () => void;\n flipPrev: () => void;\n turnToPage: (pageIndex: number) => void;\n}\n\nexport const Flipbook = forwardRef<FlipbookRef, FlipbookProps>(({\n className,\n style,\n pdfUrl,\n pages,\n onPageChange,\n ...options\n}, ref) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const engineRef = useRef<FlipbookEngine | null>(null);\n\n useImperativeHandle(ref, () => ({\n get engine() { return engineRef.current; },\n nextPage: () => engineRef.current?.nextPage(),\n prevPage: () => engineRef.current?.prevPage(),\n goToPage: (index: number) => engineRef.current?.goToPage(index),\n flipNext: () => engineRef.current?.nextPage(),\n flipPrev: () => engineRef.current?.prevPage(),\n turnToPage: (index: number) => engineRef.current?.goToPage(index)\n }), []);\n\n // Create one engine for the mounted component. Source data is managed by the\n // separate effect below so PDF-only renders do not trigger a second empty init.\n useEffect(() => {\n if (!containerRef.current) return;\n\n const engine = new FlipbookEngine(containerRef.current, options);\n engineRef.current = engine;\n const unsubscribeChange = engine.on('pageChange', (e: any) => onPageChange?.(e));\n\n return () => {\n unsubscribeChange();\n engine.destroy();\n engineRef.current = null;\n };\n // The engine is intentionally created once per mount, including Strict Mode remounts.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // A source update is the only place that initializes or reinitializes the engine.\n useEffect(() => {\n const engine = engineRef.current;\n if (!engine) return;\n engine.setPages(pages, pdfUrl).catch(console.error);\n }, [pdfUrl, pages]);\n\n useEffect(() => {\n engineRef.current?.updateOptions(options);\n }, [options]);\n\n return <div ref={containerRef} className={className} style={{ width: '100%', height: '100%', minHeight: '400px', ...style }} />;\n});\n\nFlipbook.displayName = 'Flipbook';\r\n"],"names":["Flipbook","forwardRef","className","style","pdfUrl","pages","onPageChange","options","ref","containerRef","useRef","engineRef","useImperativeHandle","_a","index","useEffect","engine","FlipbookEngine","unsubscribeChange","e","jsx"],"mappings":";;;AA8BO,MAAMA,IAAWC,EAAuC,CAAC;AAAA,EAC5D,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,GAAGC;AACP,GAAGC,MAAQ;AACP,QAAMC,IAAeC,EAAuB,IAAI,GAC1CC,IAAYD,EAA8B,IAAI;AAEpD,SAAAE,EAAoBJ,GAAK,OAAO;AAAA,IAC5B,IAAI,SAAS;AAAE,aAAOG,EAAU;AAAA,IAAS;AAAA,IACzC,UAAU,MAAA;;AAAM,cAAAE,IAAAF,EAAU,YAAV,gBAAAE,EAAmB;AAAA;AAAA,IACnC,UAAU,MAAA;;AAAM,cAAAA,IAAAF,EAAU,YAAV,gBAAAE,EAAmB;AAAA;AAAA,IACnC,UAAU,CAACC,MAAA;;AAAkB,cAAAD,IAAAF,EAAU,YAAV,gBAAAE,EAAmB,SAASC;AAAA;AAAA,IACzD,UAAU,MAAA;;AAAM,cAAAD,IAAAF,EAAU,YAAV,gBAAAE,EAAmB;AAAA;AAAA,IACnC,UAAU,MAAA;;AAAM,cAAAA,IAAAF,EAAU,YAAV,gBAAAE,EAAmB;AAAA;AAAA,IACnC,YAAY,CAACC,MAAA;;AAAkB,cAAAD,IAAAF,EAAU,YAAV,gBAAAE,EAAmB,SAASC;AAAA;AAAA,EAAK,IAChE,CAAA,CAAE,GAINC,EAAU,MAAM;AACZ,QAAI,CAACN,EAAa,QAAS;AAE3B,UAAMO,IAAS,IAAIC,EAAeR,EAAa,SAASF,CAAO;AAC/D,IAAAI,EAAU,UAAUK;AACpB,UAAME,IAAoBF,EAAO,GAAG,cAAc,CAACG,MAAWb,KAAA,gBAAAA,EAAea,EAAE;AAE/E,WAAO,MAAM;AACT,MAAAD,EAAA,GACAF,EAAO,QAAA,GACPL,EAAU,UAAU;AAAA,IACxB;AAAA,EAGJ,GAAG,CAAA,CAAE,GAGLI,EAAU,MAAM;AACZ,UAAMC,IAASL,EAAU;AACzB,IAAKK,KACLA,EAAO,SAASX,GAAOD,CAAM,EAAE,MAAM,QAAQ,KAAK;AAAA,EACtD,GAAG,CAACA,GAAQC,CAAK,CAAC,GAElBU,EAAU,MAAM;;AACZ,KAAAF,IAAAF,EAAU,YAAV,QAAAE,EAAmB,cAAcN;AAAA,EACrC,GAAG,CAACA,CAAO,CAAC,GAEL,gBAAAa,EAAC,OAAA,EAAI,KAAKX,GAAc,WAAAP,GAAsB,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,WAAW,SAAS,GAAGC,KAAS;AACjI,CAAC;AAEDH,EAAS,cAAc;"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import {
|
|
3
|
-
const
|
|
1
|
+
import { defineComponent as d, ref as s, onMounted as g, onBeforeUnmount as P, watch as l, h as c } from "vue";
|
|
2
|
+
import { F as h } from "./engine-G9HiVpA-.js";
|
|
3
|
+
const v = d({
|
|
4
4
|
name: "Flipbook",
|
|
5
5
|
props: {
|
|
6
6
|
pdfUrl: {
|
|
7
7
|
type: String,
|
|
8
|
-
required: !
|
|
8
|
+
required: !1,
|
|
9
|
+
default: ""
|
|
9
10
|
},
|
|
10
11
|
pages: {
|
|
11
12
|
type: Array,
|
|
@@ -18,31 +19,33 @@ const m = l({
|
|
|
18
19
|
}
|
|
19
20
|
},
|
|
20
21
|
emits: ["pageChange"],
|
|
21
|
-
setup(
|
|
22
|
-
const
|
|
23
|
-
let e = null,
|
|
24
|
-
return
|
|
25
|
-
|
|
26
|
-
}),
|
|
27
|
-
|
|
28
|
-
}),
|
|
29
|
-
e
|
|
30
|
-
}, { deep: !0 }),
|
|
31
|
-
e
|
|
32
|
-
}, { deep: !0 }),
|
|
22
|
+
setup(o, { emit: p, expose: f }) {
|
|
23
|
+
const r = s(null);
|
|
24
|
+
let e = null, a;
|
|
25
|
+
return g(() => {
|
|
26
|
+
r.value && (e = new h(r.value, o.options), a = e.on("pageChange", (t) => p("pageChange", t)), e.setPages(o.pages, o.pdfUrl).catch(console.error));
|
|
27
|
+
}), P(() => {
|
|
28
|
+
a == null || a(), e == null || e.destroy(), e = null;
|
|
29
|
+
}), l(() => o.options, (t) => {
|
|
30
|
+
e == null || e.updateOptions(t);
|
|
31
|
+
}, { deep: !0 }), l([() => o.pdfUrl, () => o.pages], ([t, u]) => {
|
|
32
|
+
e == null || e.setPages(u || [], t || "").catch(console.error);
|
|
33
|
+
}, { deep: !0 }), f({
|
|
33
34
|
getEngine: () => e,
|
|
35
|
+
engine: () => e,
|
|
36
|
+
nextPage: () => e == null ? void 0 : e.nextPage(),
|
|
37
|
+
prevPage: () => e == null ? void 0 : e.prevPage(),
|
|
38
|
+
goToPage: (t) => e == null ? void 0 : e.goToPage(t),
|
|
34
39
|
flipNext: () => e == null ? void 0 : e.nextPage(),
|
|
35
40
|
flipPrev: () => e == null ? void 0 : e.prevPage(),
|
|
36
|
-
turnToPage: (t) =>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}), () => s("div", {
|
|
40
|
-
ref: o,
|
|
41
|
+
turnToPage: (t) => e == null ? void 0 : e.goToPage(t)
|
|
42
|
+
}), () => c("div", {
|
|
43
|
+
ref: r,
|
|
41
44
|
style: { width: "100%", height: "100%", minHeight: "400px" }
|
|
42
45
|
});
|
|
43
46
|
}
|
|
44
47
|
});
|
|
45
48
|
export {
|
|
46
|
-
|
|
49
|
+
v as Flipbook
|
|
47
50
|
};
|
|
48
51
|
//# sourceMappingURL=flipbook-engine.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flipbook-engine.vue.js","sources":["../src/vue/index.ts"],"sourcesContent":["/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nimport { defineComponent, h, ref, onMounted, onBeforeUnmount, watch, PropType } from 'vue';\nimport { FlipbookEngine, FlipbookEngineOptions, FlipbookPageAsset } from '../index';\n\nexport const Flipbook = defineComponent({\n name: 'Flipbook',\n props: {\n pdfUrl: {\n type: String,\n required:
|
|
1
|
+
{"version":3,"file":"flipbook-engine.vue.js","sources":["../src/vue/index.ts"],"sourcesContent":["/**\n * FlipbookEngine\n * Copyright (c) 2026 Murat Dogan\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * https://flipbookengine.com\n */\n\nimport { defineComponent, h, ref, onMounted, onBeforeUnmount, watch, PropType } from 'vue';\nimport { FlipbookEngine, FlipbookEngineOptions, FlipbookPageAsset } from '../index';\n\nexport const Flipbook = defineComponent({\n name: 'Flipbook',\n props: {\n pdfUrl: {\n type: String,\n required: false,\n default: ''\n },\n pages: {\n type: Array as PropType<FlipbookPageAsset[]>,\n required: false,\n default: () => []\n },\n options: {\n type: Object as PropType<Omit<FlipbookEngineOptions, 'theme'> & { theme?: 'auto' | 'light' | 'dark' }>,\n default: () => ({})\n }\n },\n emits: ['pageChange'],\n setup(props, { emit, expose }) {\n const containerRef = ref<HTMLElement | null>(null);\n let engine: FlipbookEngine | null = null;\n let unsubscribeChange: (() => void) | undefined;\n\n onMounted(() => {\n if (!containerRef.value) return;\n\n engine = new FlipbookEngine(containerRef.value, props.options as any);\n unsubscribeChange = engine.on('pageChange', (e: any) => emit('pageChange', e));\n engine.setPages(props.pages, props.pdfUrl).catch(console.error);\n });\n\n onBeforeUnmount(() => {\n unsubscribeChange?.();\n engine?.destroy();\n engine = null;\n });\n\n watch(() => props.options, (newOptions) => {\n engine?.updateOptions(newOptions as any);\n }, { deep: true });\n\n // Source changes are handled together to guarantee one reinitialization per update.\n watch([() => props.pdfUrl, () => props.pages], ([newPdfUrl, newPages]) => {\n engine?.setPages(newPages || [], newPdfUrl || '').catch(console.error);\n }, { deep: true });\n\n expose({\n getEngine: () => engine,\n engine: () => engine,\n nextPage: () => engine?.nextPage(),\n prevPage: () => engine?.prevPage(),\n goToPage: (index: number) => engine?.goToPage(index),\n flipNext: () => engine?.nextPage(),\n flipPrev: () => engine?.prevPage(),\n turnToPage: (index: number) => engine?.goToPage(index)\n });\n\n return () => h('div', {\n ref: containerRef,\n style: { width: '100%', height: '100%', minHeight: '400px' }\n });\n }\n});\r\n"],"names":["Flipbook","defineComponent","props","emit","expose","containerRef","ref","engine","unsubscribeChange","onMounted","FlipbookEngine","e","onBeforeUnmount","watch","newOptions","newPdfUrl","newPages","index","h"],"mappings":";;AAUO,MAAMA,IAAWC,EAAgB;AAAA,EACpC,MAAM;AAAA,EACN,OAAO;AAAA,IACH,QAAQ;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,IAEb,OAAO;AAAA,MACH,MAAM;AAAA,MACN,UAAU;AAAA,MACV,SAAS,MAAM,CAAA;AAAA,IAAC;AAAA,IAEpB,SAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,OAAO,CAAA;AAAA,IAAC;AAAA,EACrB;AAAA,EAEJ,OAAO,CAAC,YAAY;AAAA,EACpB,MAAMC,GAAO,EAAE,MAAAC,GAAM,QAAAC,KAAU;AAC3B,UAAMC,IAAeC,EAAwB,IAAI;AACjD,QAAIC,IAAgC,MAChCC;AAEJ,WAAAC,EAAU,MAAM;AACZ,MAAKJ,EAAa,UAElBE,IAAS,IAAIG,EAAeL,EAAa,OAAOH,EAAM,OAAc,GACpEM,IAAoBD,EAAO,GAAG,cAAc,CAACI,MAAWR,EAAK,cAAcQ,CAAC,CAAC,GAC7EJ,EAAO,SAASL,EAAM,OAAOA,EAAM,MAAM,EAAE,MAAM,QAAQ,KAAK;AAAA,IAClE,CAAC,GAEDU,EAAgB,MAAM;AAClB,MAAAJ,KAAA,QAAAA,KACAD,KAAA,QAAAA,EAAQ,WACRA,IAAS;AAAA,IACb,CAAC,GAEDM,EAAM,MAAMX,EAAM,SAAS,CAACY,MAAe;AACvC,MAAAP,KAAA,QAAAA,EAAQ,cAAcO;AAAA,IAC1B,GAAG,EAAE,MAAM,IAAM,GAGjBD,EAAM,CAAC,MAAMX,EAAM,QAAQ,MAAMA,EAAM,KAAK,GAAG,CAAC,CAACa,GAAWC,CAAQ,MAAM;AACtE,MAAAT,KAAA,QAAAA,EAAQ,SAASS,KAAY,IAAID,KAAa,IAAI,MAAM,QAAQ;AAAA,IACpE,GAAG,EAAE,MAAM,IAAM,GAEjBX,EAAO;AAAA,MACH,WAAW,MAAMG;AAAA,MACjB,QAAQ,MAAMA;AAAA,MACd,UAAU,MAAMA,KAAA,gBAAAA,EAAQ;AAAA,MACxB,UAAU,MAAMA,KAAA,gBAAAA,EAAQ;AAAA,MACxB,UAAU,CAACU,MAAkBV,KAAA,gBAAAA,EAAQ,SAASU;AAAA,MAC9C,UAAU,MAAMV,KAAA,gBAAAA,EAAQ;AAAA,MACxB,UAAU,MAAMA,KAAA,gBAAAA,EAAQ;AAAA,MACxB,YAAY,CAACU,MAAkBV,KAAA,gBAAAA,EAAQ,SAASU;AAAA,IAAK,CACxD,GAEM,MAAMC,EAAE,OAAO;AAAA,MAClB,KAAKb;AAAA,MACL,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,WAAW,QAAA;AAAA,IAAQ,CAC9D;AAAA,EACL;AACJ,CAAC;"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { FlipbookEngine, FlipbookEngineOptions, FlipbookPageAsset } from '../ind
|
|
|
4
4
|
export interface FlipbookProps extends Omit<FlipbookEngineOptions, 'theme'> {
|
|
5
5
|
className?: string;
|
|
6
6
|
style?: React.CSSProperties;
|
|
7
|
-
pdfUrl
|
|
7
|
+
pdfUrl?: string;
|
|
8
8
|
pages?: FlipbookPageAsset[];
|
|
9
9
|
theme?: 'auto' | 'light' | 'dark';
|
|
10
10
|
onPageChange?: (e: {
|
|
@@ -14,6 +14,9 @@ export interface FlipbookProps extends Omit<FlipbookEngineOptions, 'theme'> {
|
|
|
14
14
|
}
|
|
15
15
|
export interface FlipbookRef {
|
|
16
16
|
engine: FlipbookEngine | null;
|
|
17
|
+
nextPage: () => void;
|
|
18
|
+
prevPage: () => void;
|
|
19
|
+
goToPage: (pageIndex: number) => void;
|
|
17
20
|
flipNext: () => void;
|
|
18
21
|
flipPrev: () => void;
|
|
19
22
|
turnToPage: (pageIndex: number) => void;
|
package/dist/state/store.d.ts
CHANGED
|
@@ -1,31 +1,51 @@
|
|
|
1
|
+
import { Signal, ReadonlySignal } from '@preact/signals-core';
|
|
1
2
|
import { FlipbookThemeMode } from '../theme/theme';
|
|
2
3
|
import { NormalizedFlipbookPage } from '../model/pages';
|
|
3
4
|
import { FlipbookEngineOptions } from '../engine';
|
|
5
|
+
import { PartialFlipbookMessages } from '../i18n/service';
|
|
4
6
|
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export declare const showThumbs: import('@preact/signals-core').Signal<boolean>;
|
|
9
|
-
export declare const orientation: import('@preact/signals-core').Signal<"landscape" | "portrait">;
|
|
10
|
-
export declare const flipState: import('@preact/signals-core').Signal<"read" | "fold_corner" | "flipping">;
|
|
11
|
-
export declare const themeMode: import('@preact/signals-core').Signal<FlipbookThemeMode>;
|
|
12
|
-
export declare const allowDownload: import('@preact/signals-core').Signal<boolean>;
|
|
13
|
-
export declare const hasDownloadUrl: import('@preact/signals-core').Signal<boolean>;
|
|
14
|
-
export declare const primaryColor: import('@preact/signals-core').Signal<string>;
|
|
15
|
-
export declare const whiteLabel: import('@preact/signals-core').Signal<boolean>;
|
|
16
|
-
export declare const isZoomed: import('@preact/signals-core').Signal<boolean>;
|
|
17
|
-
export declare const isAutoPlaying: import('@preact/signals-core').Signal<boolean>;
|
|
18
|
-
export declare const autoPlayInterval: import('@preact/signals-core').Signal<number>;
|
|
19
|
-
export declare const soundEnabled: import('@preact/signals-core').Signal<boolean>;
|
|
20
|
-
export declare const zoomState: import('@preact/signals-core').Signal<{
|
|
7
|
+
export type FlipState = 'read' | 'fold_corner' | 'flipping';
|
|
8
|
+
export type Orientation = 'landscape' | 'portrait';
|
|
9
|
+
export interface ZoomState {
|
|
21
10
|
isActive: boolean;
|
|
22
11
|
translateX: number;
|
|
23
12
|
translateY: number;
|
|
24
13
|
isDragging: boolean;
|
|
25
14
|
scale: number;
|
|
26
|
-
}
|
|
27
|
-
export
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
15
|
+
}
|
|
16
|
+
export interface FlipbookStore {
|
|
17
|
+
currentPage: Signal<number>;
|
|
18
|
+
totalPages: Signal<number>;
|
|
19
|
+
isSingleMode: Signal<boolean>;
|
|
20
|
+
showThumbs: Signal<boolean>;
|
|
21
|
+
showArrows: Signal<boolean>;
|
|
22
|
+
orientation: Signal<Orientation>;
|
|
23
|
+
flipState: Signal<FlipState>;
|
|
24
|
+
themeMode: Signal<FlipbookThemeMode>;
|
|
25
|
+
allowDownload: Signal<boolean>;
|
|
26
|
+
hasDownloadUrl: Signal<boolean>;
|
|
27
|
+
primaryColor: Signal<string>;
|
|
28
|
+
whiteLabel: Signal<boolean>;
|
|
29
|
+
isZoomed: Signal<boolean>;
|
|
30
|
+
isAutoPlaying: Signal<boolean>;
|
|
31
|
+
autoPlayInterval: Signal<number>;
|
|
32
|
+
soundEnabled: Signal<boolean>;
|
|
33
|
+
locale: Signal<string>;
|
|
34
|
+
messages: Signal<Partial<Record<string, PartialFlipbookMessages>>>;
|
|
35
|
+
zoomState: Signal<ZoomState>;
|
|
36
|
+
pages: Signal<NormalizedFlipbookPage[]>;
|
|
37
|
+
isDoublePageLayout: ReadonlySignal<boolean>;
|
|
38
|
+
isFrontCover: ReadonlySignal<boolean>;
|
|
39
|
+
isBackCover: ReadonlySignal<boolean>;
|
|
40
|
+
init(options: FlipbookEngineOptions, total: number, mappedPages: NormalizedFlipbookPage[], hasPdfUrl: boolean): void;
|
|
41
|
+
}
|
|
42
|
+
/** Creates an isolated reactive state container for one FlipbookEngine instance. */
|
|
43
|
+
export declare function createFlipbookStore(): FlipbookStore;
|
|
44
|
+
export declare const currentPage: Signal<number>, totalPages: Signal<number>, isSingleMode: Signal<boolean>;
|
|
45
|
+
export declare const showThumbs: Signal<boolean>, showArrows: Signal<boolean>, orientation: Signal<Orientation>;
|
|
46
|
+
export declare const flipState: Signal<FlipState>, themeMode: Signal<FlipbookThemeMode>, allowDownload: Signal<boolean>;
|
|
47
|
+
export declare const hasDownloadUrl: Signal<boolean>, primaryColor: Signal<string>, whiteLabel: Signal<boolean>;
|
|
48
|
+
export declare const isZoomed: Signal<boolean>, isAutoPlaying: Signal<boolean>, autoPlayInterval: Signal<number>;
|
|
49
|
+
export declare const soundEnabled: Signal<boolean>, locale: Signal<string>, messages: Signal<Partial<Record<string, Partial<import('..').FlipbookMessages>>>>, zoomState: Signal<ZoomState>, pages: Signal<NormalizedFlipbookPage[]>;
|
|
50
|
+
export declare const isDoublePageLayout: ReadonlySignal<boolean>, isFrontCover: ReadonlySignal<boolean>, isBackCover: ReadonlySignal<boolean>;
|
|
31
51
|
export declare function initStore(options: FlipbookEngineOptions, total: number, mappedPages: NormalizedFlipbookPage[], hasPdfUrl: boolean): void;
|
package/dist/theme/theme.d.ts
CHANGED
|
@@ -10,5 +10,4 @@ export interface ThemeConfiguration {
|
|
|
10
10
|
primaryColor?: string;
|
|
11
11
|
cssVariables?: Record<string, string>;
|
|
12
12
|
}
|
|
13
|
-
export declare function ensureRuntimeStyles(): void;
|
|
14
13
|
export declare function applyThemeConfiguration(container: HTMLElement, config: ThemeConfiguration): void;
|
package/dist/vue/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ import { FlipbookEngineOptions, FlipbookPageAsset } from '../index';
|
|
|
4
4
|
export declare const Flipbook: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
5
5
|
pdfUrl: {
|
|
6
6
|
type: StringConstructor;
|
|
7
|
-
required:
|
|
7
|
+
required: false;
|
|
8
|
+
default: string;
|
|
8
9
|
};
|
|
9
10
|
pages: {
|
|
10
11
|
type: PropType<FlipbookPageAsset[]>;
|
|
@@ -22,7 +23,8 @@ export declare const Flipbook: import('vue').DefineComponent<import('vue').Extra
|
|
|
22
23
|
}>, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, "pageChange"[], "pageChange", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
23
24
|
pdfUrl: {
|
|
24
25
|
type: StringConstructor;
|
|
25
|
-
required:
|
|
26
|
+
required: false;
|
|
27
|
+
default: string;
|
|
26
28
|
};
|
|
27
29
|
pages: {
|
|
28
30
|
type: PropType<FlipbookPageAsset[]>;
|
|
@@ -39,6 +41,7 @@ export declare const Flipbook: import('vue').DefineComponent<import('vue').Extra
|
|
|
39
41
|
onPageChange?: ((...args: any[]) => any) | undefined;
|
|
40
42
|
}>, {
|
|
41
43
|
pages: FlipbookPageAsset[];
|
|
44
|
+
pdfUrl: string;
|
|
42
45
|
options: Omit<FlipbookEngineOptions, "theme"> & {
|
|
43
46
|
theme?: "auto" | "light" | "dark";
|
|
44
47
|
};
|
package/package.json
CHANGED
|
@@ -1,105 +1,113 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "flipbookengine",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "A modern, embeddable HTML flipbook engine for PDF-backed catalogs and digital publications.",
|
|
5
|
-
"private": false,
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "vite",
|
|
8
|
-
"build": "vite build && vite build --config vite.config.iife.js",
|
|
9
|
-
"test": "tsx --loader ./tests/css-loader.js --test tests/*.test.ts",
|
|
10
|
-
"typecheck": "tsc --noEmit",
|
|
11
|
-
"clean": "rimraf dist"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"url": "https://github.com/Bizeka/flipbook-engine
|
|
33
|
-
},
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
},
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"default": "./dist/flipbook-engine.
|
|
62
|
-
},
|
|
63
|
-
"./
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"
|
|
83
|
-
"optional": true
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "flipbookengine",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "A modern, embeddable HTML flipbook engine for PDF-backed catalogs and digital publications.",
|
|
5
|
+
"private": false,
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite",
|
|
8
|
+
"build": "vite build && vite build --config vite.config.iife.js",
|
|
9
|
+
"test": "tsx --loader ./tests/css-loader.js --test tests/*.test.ts",
|
|
10
|
+
"typecheck": "tsc --noEmit",
|
|
11
|
+
"clean": "rimraf dist",
|
|
12
|
+
"pack:check": "npm pack --dry-run",
|
|
13
|
+
"audit:deps": "npm audit --omit=dev --audit-level=high",
|
|
14
|
+
"release:verify": "npm run typecheck && npm test && npm run build && npm run audit:deps && npm run pack:check"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"flipbook",
|
|
18
|
+
"catalog",
|
|
19
|
+
"pdf",
|
|
20
|
+
"viewer",
|
|
21
|
+
"publication",
|
|
22
|
+
"pageflip",
|
|
23
|
+
"digital-catalog",
|
|
24
|
+
"page-flip",
|
|
25
|
+
"typescript"
|
|
26
|
+
],
|
|
27
|
+
"author": "Murat Dogan",
|
|
28
|
+
"license": "AGPL-3.0-or-later",
|
|
29
|
+
"homepage": "https://flipbookengine.com",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/Bizeka/flipbook-engine.git"
|
|
33
|
+
},
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/Bizeka/flipbook-engine/issues"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18"
|
|
39
|
+
},
|
|
40
|
+
"sideEffects": [
|
|
41
|
+
"**/*.css"
|
|
42
|
+
],
|
|
43
|
+
"files": [
|
|
44
|
+
"dist",
|
|
45
|
+
"react",
|
|
46
|
+
"vue",
|
|
47
|
+
"README.md",
|
|
48
|
+
"LICENSE",
|
|
49
|
+
"CHANGELOG.md",
|
|
50
|
+
"COMMERCIAL_LICENSE.md",
|
|
51
|
+
"TRADEMARK_POLICY.md",
|
|
52
|
+
"THIRD-PARTY-NOTICES.md"
|
|
53
|
+
],
|
|
54
|
+
"main": "./dist/flipbook-engine.js",
|
|
55
|
+
"module": "./dist/flipbook-engine.js",
|
|
56
|
+
"types": "./dist/index.d.ts",
|
|
57
|
+
"exports": {
|
|
58
|
+
".": {
|
|
59
|
+
"types": "./dist/index.d.ts",
|
|
60
|
+
"import": "./dist/flipbook-engine.js",
|
|
61
|
+
"default": "./dist/flipbook-engine.js"
|
|
62
|
+
},
|
|
63
|
+
"./styles.css": {
|
|
64
|
+
"default": "./dist/flipbook-engine.css"
|
|
65
|
+
},
|
|
66
|
+
"./react": {
|
|
67
|
+
"types": "./dist/react/index.d.ts",
|
|
68
|
+
"import": "./dist/flipbook-engine.react.js",
|
|
69
|
+
"default": "./dist/flipbook-engine.react.js"
|
|
70
|
+
},
|
|
71
|
+
"./vue": {
|
|
72
|
+
"types": "./dist/vue/index.d.ts",
|
|
73
|
+
"import": "./dist/flipbook-engine.vue.js",
|
|
74
|
+
"default": "./dist/flipbook-engine.vue.js"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"peerDependencies": {
|
|
78
|
+
"react": ">=16.8.0",
|
|
79
|
+
"vue": ">=3.0.0"
|
|
80
|
+
},
|
|
81
|
+
"peerDependenciesMeta": {
|
|
82
|
+
"react": {
|
|
83
|
+
"optional": true
|
|
84
|
+
},
|
|
85
|
+
"vue": {
|
|
86
|
+
"optional": true
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@types/jsdom": "^28.0.3",
|
|
91
|
+
"@types/node": "^25.0.10",
|
|
92
|
+
"@types/page-flip": "^2.0.4",
|
|
93
|
+
"@types/react": "^19.2.14",
|
|
94
|
+
"jsdom": "^29.1.1",
|
|
95
|
+
"react": "^19.2.6",
|
|
96
|
+
"rimraf": "^6.0.0",
|
|
97
|
+
"tsx": "^4.22.4",
|
|
98
|
+
"typescript": "^5.0.0",
|
|
99
|
+
"vite": "^5.0.0",
|
|
100
|
+
"vite-plugin-dts": "^3.0.0",
|
|
101
|
+
"vue": "^3.5.34"
|
|
102
|
+
},
|
|
103
|
+
"type": "module",
|
|
104
|
+
"dependencies": {
|
|
105
|
+
"@preact/signals-core": "^1.14.3",
|
|
106
|
+
"@serenity-is/domwise": "^10.2.3",
|
|
107
|
+
"page-flip": "^2.0.7",
|
|
108
|
+
"pdfjs-dist": "^5.4.530"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|