@prose-reader/react-reader 1.177.0 → 1.179.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/dist/ReactReader.d.ts +6 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +188 -155
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/dist/navigation/FloatingProgress.d.ts +1 -0
- package/dist/navigation/FloatingTime.d.ts +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ComponentProps } from 'react';
|
|
2
|
+
import { QuickMenu } from './navigation/QuickMenu/QuickMenu';
|
|
3
|
+
export declare const ReactReader: ({ enableFloatingTime, enableFloatingProgress, open, ...rest }: {
|
|
4
|
+
enableFloatingTime?: boolean;
|
|
5
|
+
enableFloatingProgress?: boolean;
|
|
6
|
+
} & ComponentProps<typeof QuickMenu>) => import("react/jsx-runtime").JSX.Element;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,34 +1,81 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import * as
|
|
3
|
-
import { createContext as
|
|
4
|
-
import { Popover as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
1
|
+
import { jsx as n, jsxs as c, Fragment as A } from "react/jsx-runtime";
|
|
2
|
+
import * as I from "react";
|
|
3
|
+
import { createContext as L, memo as P, useContext as N, useState as $, useEffect as y, useCallback as z } from "react";
|
|
4
|
+
import { Box as S, Text as m, Popover as g, Portal as _, IconButton as f, Progress as x, Stack as O, HStack as k, Presence as R, chakra as V } from "@chakra-ui/react";
|
|
5
|
+
import { useObserve as b, useSubscribe as j, useSignal as U } from "reactjrx";
|
|
6
|
+
import { NEVER as G, combineLatest as H, map as Q } from "rxjs";
|
|
7
|
+
import { RxDoubleArrowUp as Y, RxDoubleArrowLeft as q, RxDoubleArrowDown as J, RxDoubleArrowRight as K } from "react-icons/rx";
|
|
8
|
+
import { HiOutlineInformationCircle as X } from "react-icons/hi";
|
|
9
9
|
import Z from "rc-slider";
|
|
10
10
|
import "rc-slider/assets/index.css";
|
|
11
11
|
import { IoIosArrowBack as ee, IoMdMore as te } from "react-icons/io";
|
|
12
12
|
import { MdFullscreenExit as re, MdFullscreen as ne } from "react-icons/md";
|
|
13
|
-
const
|
|
13
|
+
const E = L(void 0), $e = P(
|
|
14
|
+
({
|
|
15
|
+
children: e,
|
|
16
|
+
reader: t
|
|
17
|
+
}) => /* @__PURE__ */ n(E.Provider, { value: t, children: e })
|
|
18
|
+
), v = () => N(E), p = () => {
|
|
19
|
+
const e = v();
|
|
20
|
+
return b(
|
|
21
|
+
() => e ? H([e.pagination.state$, e.context.state$]).pipe(
|
|
22
|
+
Q(([t, r]) => {
|
|
23
|
+
var s;
|
|
24
|
+
const o = (s = r.manifest) == null ? void 0 : s.spineItems.every(
|
|
25
|
+
(i) => {
|
|
26
|
+
var l;
|
|
27
|
+
return (l = i.mediaType) == null ? void 0 : l.startsWith("image/");
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
return {
|
|
31
|
+
...t,
|
|
32
|
+
hasChapters: !r.isFullyPrePaginated && !o
|
|
33
|
+
};
|
|
34
|
+
})
|
|
35
|
+
) : G,
|
|
36
|
+
[e]
|
|
37
|
+
);
|
|
38
|
+
}, oe = () => {
|
|
39
|
+
const e = p(), t = Math.floor(
|
|
40
|
+
((e == null ? void 0 : e.percentageEstimateOfBook) ?? 0) * 100
|
|
41
|
+
), r = t > 0 ? t : 1;
|
|
42
|
+
return (e == null ? void 0 : e.percentageEstimateOfBook) === void 0 ? null : /* @__PURE__ */ n(S, { position: "absolute", right: 0, bottom: 0, p: 2, children: /* @__PURE__ */ c(m, { fontSize: "sm", children: [
|
|
43
|
+
r,
|
|
44
|
+
" %"
|
|
45
|
+
] }) });
|
|
46
|
+
}, se = () => {
|
|
47
|
+
const [e, t] = $(/* @__PURE__ */ new Date());
|
|
48
|
+
return y(() => {
|
|
49
|
+
const r = setInterval(() => {
|
|
50
|
+
t(/* @__PURE__ */ new Date());
|
|
51
|
+
}, 6e4);
|
|
52
|
+
return () => clearInterval(r);
|
|
53
|
+
}, []), e;
|
|
54
|
+
}, ie = (e) => {
|
|
55
|
+
const t = se();
|
|
56
|
+
return /* @__PURE__ */ n(m, { fontSize: "xs", ...e, children: t.toLocaleTimeString(navigator.language, {
|
|
57
|
+
hour: "2-digit",
|
|
58
|
+
minute: "2-digit"
|
|
59
|
+
}) });
|
|
60
|
+
}, le = () => /* @__PURE__ */ n(S, { position: "absolute", left: 0, bottom: 0, p: 2, children: /* @__PURE__ */ n(ie, {}) }), ce = I.forwardRef(
|
|
14
61
|
function(t, r) {
|
|
15
62
|
const {
|
|
16
|
-
showArrow:
|
|
17
|
-
children:
|
|
18
|
-
portalled:
|
|
19
|
-
content:
|
|
63
|
+
showArrow: o,
|
|
64
|
+
children: s,
|
|
65
|
+
portalled: i = !0,
|
|
66
|
+
content: l,
|
|
20
67
|
portalRef: u,
|
|
21
68
|
...a
|
|
22
69
|
} = t;
|
|
23
70
|
return /* @__PURE__ */ c(
|
|
24
|
-
|
|
71
|
+
g.Root,
|
|
25
72
|
{
|
|
26
73
|
...a,
|
|
27
74
|
positioning: { ...a.positioning, gutter: 4 },
|
|
28
75
|
children: [
|
|
29
|
-
/* @__PURE__ */ n(
|
|
30
|
-
/* @__PURE__ */ n(
|
|
31
|
-
|
|
76
|
+
/* @__PURE__ */ n(g.Trigger, { asChild: !0, children: s }),
|
|
77
|
+
/* @__PURE__ */ n(_, { disabled: !i, container: u, children: /* @__PURE__ */ n(g.Positioner, { children: /* @__PURE__ */ c(
|
|
78
|
+
g.Content,
|
|
32
79
|
{
|
|
33
80
|
width: "auto",
|
|
34
81
|
px: "2",
|
|
@@ -37,8 +84,8 @@ const D = W(void 0), S = () => L(D), oe = p.forwardRef(
|
|
|
37
84
|
rounded: "sm",
|
|
38
85
|
ref: r,
|
|
39
86
|
children: [
|
|
40
|
-
|
|
41
|
-
|
|
87
|
+
o && /* @__PURE__ */ n(g.Arrow, { children: /* @__PURE__ */ n(g.ArrowTip, {}) }),
|
|
88
|
+
l
|
|
42
89
|
]
|
|
43
90
|
}
|
|
44
91
|
) }) })
|
|
@@ -46,83 +93,63 @@ const D = W(void 0), S = () => L(D), oe = p.forwardRef(
|
|
|
46
93
|
}
|
|
47
94
|
);
|
|
48
95
|
}
|
|
49
|
-
),
|
|
50
|
-
const { children:
|
|
51
|
-
return /* @__PURE__ */ n(
|
|
96
|
+
), ae = I.forwardRef(function(t, r) {
|
|
97
|
+
const { children: o, ...s } = t;
|
|
98
|
+
return /* @__PURE__ */ n(ce, { content: o, ...s, ref: r, children: /* @__PURE__ */ n(
|
|
52
99
|
f,
|
|
53
100
|
{
|
|
54
101
|
variant: "ghost",
|
|
55
102
|
"aria-label": "info",
|
|
56
103
|
size: "2xs",
|
|
57
104
|
colorPalette: "gray",
|
|
58
|
-
children: /* @__PURE__ */ n(
|
|
105
|
+
children: /* @__PURE__ */ n(X, {})
|
|
59
106
|
}
|
|
60
107
|
) });
|
|
61
|
-
}),
|
|
108
|
+
}), de = I.forwardRef(function(t, r) {
|
|
62
109
|
return /* @__PURE__ */ n(x.Track, { ...t, ref: r, children: /* @__PURE__ */ n(x.Range, {}) });
|
|
63
110
|
});
|
|
64
|
-
|
|
65
|
-
const { children:
|
|
66
|
-
return /* @__PURE__ */ c(x.Label, { ...
|
|
67
|
-
|
|
68
|
-
|
|
111
|
+
I.forwardRef(function(t, r) {
|
|
112
|
+
const { children: o, info: s, ...i } = t;
|
|
113
|
+
return /* @__PURE__ */ c(x.Label, { ...i, ref: r, children: [
|
|
114
|
+
o,
|
|
115
|
+
s && /* @__PURE__ */ n(ae, { children: s })
|
|
69
116
|
] });
|
|
70
117
|
});
|
|
71
|
-
const
|
|
72
|
-
const e =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var o;
|
|
77
|
-
const s = (o = r.manifest) == null ? void 0 : o.spineItems.every(
|
|
78
|
-
(l) => {
|
|
79
|
-
var i;
|
|
80
|
-
return (i = l.mediaType) == null ? void 0 : i.startsWith("image/");
|
|
81
|
-
}
|
|
82
|
-
);
|
|
83
|
-
return {
|
|
84
|
-
...t,
|
|
85
|
-
hasChapters: !r.isFullyPrePaginated && !s
|
|
86
|
-
};
|
|
87
|
-
})
|
|
88
|
-
) : J,
|
|
89
|
-
[e]
|
|
90
|
-
);
|
|
91
|
-
}, A = () => {
|
|
92
|
-
const e = P(), t = (e == null ? void 0 : e.numberOfTotalPages) === 1, r = ((e == null ? void 0 : e.beginNumberOfPagesInSpineItem) ?? 0) > 1, s = ((e == null ? void 0 : e.endNumberOfPagesInSpineItem) ?? 0) > 1, o = (e != null && e.hasChapters ? e == null ? void 0 : e.beginPageIndexInSpineItem : e == null ? void 0 : e.beginAbsolutePageIndex) ?? 0, l = (e != null && e.hasChapters ? e == null ? void 0 : e.endPageIndexInSpineItem : e == null ? void 0 : e.endAbsolutePageIndex) ?? 0, [i = 0, u = 0] = [
|
|
93
|
-
o,
|
|
94
|
-
l
|
|
95
|
-
].sort((m, v) => m - v), a = (e == null ? void 0 : e.beginPageIndexInSpineItem) !== (e == null ? void 0 : e.endPageIndexInSpineItem) || (e == null ? void 0 : e.beginSpineItemIndex) !== (e == null ? void 0 : e.endSpineItemIndex), d = e != null && e.hasChapters ? e == null ? void 0 : e.beginNumberOfPagesInSpineItem : e == null ? void 0 : e.numberOfTotalPages;
|
|
118
|
+
const ue = x.Root, me = x.ValueText, B = () => {
|
|
119
|
+
const e = p(), t = (e == null ? void 0 : e.numberOfTotalPages) === 1, r = ((e == null ? void 0 : e.beginNumberOfPagesInSpineItem) ?? 0) > 1, o = ((e == null ? void 0 : e.endNumberOfPagesInSpineItem) ?? 0) > 1, s = (e != null && e.hasChapters ? e == null ? void 0 : e.beginPageIndexInSpineItem : e == null ? void 0 : e.beginAbsolutePageIndex) ?? 0, i = (e != null && e.hasChapters ? e == null ? void 0 : e.endPageIndexInSpineItem : e == null ? void 0 : e.endAbsolutePageIndex) ?? 0, [l = 0, u = 0] = [
|
|
120
|
+
s,
|
|
121
|
+
i
|
|
122
|
+
].sort((h, C) => h - C), a = (e == null ? void 0 : e.beginPageIndexInSpineItem) !== (e == null ? void 0 : e.endPageIndexInSpineItem) || (e == null ? void 0 : e.beginSpineItemIndex) !== (e == null ? void 0 : e.endSpineItemIndex), d = e != null && e.hasChapters ? e == null ? void 0 : e.beginNumberOfPagesInSpineItem : e == null ? void 0 : e.numberOfTotalPages;
|
|
96
123
|
return {
|
|
97
124
|
hasOnlyOnePage: t,
|
|
98
|
-
beginPageIndex:
|
|
99
|
-
endPageIndex:
|
|
125
|
+
beginPageIndex: s,
|
|
126
|
+
endPageIndex: i,
|
|
100
127
|
isBeginWithinChapter: r,
|
|
101
|
-
isEndWithinChapter:
|
|
128
|
+
isEndWithinChapter: o,
|
|
102
129
|
beginAndEndAreDifferent: a,
|
|
103
130
|
totalApproximatePages: d,
|
|
104
|
-
leftPageIndex:
|
|
131
|
+
leftPageIndex: l,
|
|
105
132
|
rightPageIndex: u
|
|
106
133
|
};
|
|
107
|
-
},
|
|
108
|
-
const e =
|
|
134
|
+
}, he = () => {
|
|
135
|
+
const e = p(), {
|
|
109
136
|
hasOnlyOnePage: t,
|
|
110
137
|
leftPageIndex: r,
|
|
111
|
-
rightPageIndex:
|
|
112
|
-
totalApproximatePages:
|
|
113
|
-
beginAndEndAreDifferent:
|
|
114
|
-
} =
|
|
115
|
-
return /* @__PURE__ */ c(
|
|
116
|
-
/* @__PURE__ */ n(
|
|
117
|
-
/* @__PURE__ */ n(
|
|
118
|
-
/* @__PURE__ */ n(
|
|
138
|
+
rightPageIndex: o,
|
|
139
|
+
totalApproximatePages: s,
|
|
140
|
+
beginAndEndAreDifferent: i
|
|
141
|
+
} = B(), l = Math.round(((e == null ? void 0 : e.percentageEstimateOfBook) ?? 0) * 100), u = (d) => d != null && d.subChapter ? `${d.title} / ${u(d.subChapter)}` : (d == null ? void 0 : d.title) || "", a = u(e == null ? void 0 : e.beginChapterInfo);
|
|
142
|
+
return /* @__PURE__ */ c(O, { alignItems: "center", gap: 1, maxW: "100%", overflow: "auto", children: [
|
|
143
|
+
/* @__PURE__ */ n(ue, { value: l, size: "xs", width: 150, children: /* @__PURE__ */ c(k, { justifyContent: "space-between", children: [
|
|
144
|
+
/* @__PURE__ */ n(de, { width: 110 }),
|
|
145
|
+
/* @__PURE__ */ n(me, { children: `${l}%` })
|
|
119
146
|
] }) }),
|
|
120
|
-
/* @__PURE__ */ n(
|
|
121
|
-
!t && /* @__PURE__ */ c(
|
|
122
|
-
/* @__PURE__ */ n(
|
|
123
|
-
!!(e != null && e.hasChapters) && /* @__PURE__ */ c(
|
|
124
|
-
/* @__PURE__ */ n(
|
|
125
|
-
/* @__PURE__ */ c(
|
|
147
|
+
/* @__PURE__ */ n(m, { truncate: !0, maxWidth: "100%", fontSize: "sm", mt: 1, children: a ? `Chapter: ${a}` : " " }),
|
|
148
|
+
!t && /* @__PURE__ */ c(k, { children: [
|
|
149
|
+
/* @__PURE__ */ n(m, { fontSize: "xs", children: i ? `${r + 1} - ${o + 1} of ${s}` : `${r + 1} of ${s}` }),
|
|
150
|
+
!!(e != null && e.hasChapters) && /* @__PURE__ */ c(A, { children: [
|
|
151
|
+
/* @__PURE__ */ n(m, { children: "-" }),
|
|
152
|
+
/* @__PURE__ */ c(m, { fontSize: "xs", children: [
|
|
126
153
|
"(",
|
|
127
154
|
((e == null ? void 0 : e.beginAbsolutePageIndex) ?? 0) + 1,
|
|
128
155
|
")"
|
|
@@ -130,13 +157,13 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
130
157
|
] })
|
|
131
158
|
] })
|
|
132
159
|
] });
|
|
133
|
-
},
|
|
160
|
+
}, F = P(
|
|
134
161
|
({
|
|
135
162
|
children: e,
|
|
136
163
|
position: t,
|
|
137
164
|
...r
|
|
138
165
|
}) => /* @__PURE__ */ n(
|
|
139
|
-
|
|
166
|
+
R,
|
|
140
167
|
{
|
|
141
168
|
display: "flex",
|
|
142
169
|
flexDirection: "row",
|
|
@@ -160,8 +187,8 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
160
187
|
children: e
|
|
161
188
|
}
|
|
162
189
|
)
|
|
163
|
-
),
|
|
164
|
-
|
|
190
|
+
), ge = V(Z), fe = P((e) => /* @__PURE__ */ n(
|
|
191
|
+
S,
|
|
165
192
|
{
|
|
166
193
|
display: "contents",
|
|
167
194
|
css: {
|
|
@@ -170,7 +197,7 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
170
197
|
"--color-solid": "colors.colorPalette.solid"
|
|
171
198
|
},
|
|
172
199
|
children: /* @__PURE__ */ n(
|
|
173
|
-
|
|
200
|
+
ge,
|
|
174
201
|
{
|
|
175
202
|
keyboard: !1,
|
|
176
203
|
style: {
|
|
@@ -214,72 +241,58 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
214
241
|
}
|
|
215
242
|
)
|
|
216
243
|
}
|
|
217
|
-
)),
|
|
218
|
-
const e =
|
|
219
|
-
default:
|
|
244
|
+
)), xe = () => {
|
|
245
|
+
const e = p(), t = e == null ? void 0 : e.isUsingSpread, { beginPageIndex: r, totalApproximatePages: o = 0 } = B(), s = t ? Math.floor((r || 0) / 2) : r, [i, l] = U({
|
|
246
|
+
default: s || 0
|
|
220
247
|
}), u = 0, a = Math.max(
|
|
221
248
|
0,
|
|
222
|
-
t ? Math.floor((
|
|
249
|
+
t ? Math.floor((o - 1) / 2) : o - 1
|
|
223
250
|
);
|
|
224
|
-
return
|
|
225
|
-
|
|
226
|
-
}, [
|
|
227
|
-
value:
|
|
228
|
-
valueSignal:
|
|
251
|
+
return y(() => {
|
|
252
|
+
l.setValue(s || 0);
|
|
253
|
+
}, [s, l]), {
|
|
254
|
+
value: i,
|
|
255
|
+
valueSignal: l,
|
|
229
256
|
min: u,
|
|
230
257
|
max: a
|
|
231
258
|
};
|
|
232
|
-
},
|
|
233
|
-
const e =
|
|
234
|
-
(
|
|
235
|
-
const [
|
|
236
|
-
|
|
237
|
-
const
|
|
259
|
+
}, be = () => {
|
|
260
|
+
const e = v(), t = p(), { manifest: r } = b(() => e == null ? void 0 : e.context.state$, []) ?? {}, o = (r == null ? void 0 : r.readingDirection) === "rtl", s = t == null ? void 0 : t.isUsingSpread, { totalApproximatePages: i = 0, isBeginWithinChapter: l } = B(), u = 1, a = l, { value: d, valueSignal: h, min: C, max: M } = xe(), W = z(
|
|
261
|
+
(w) => {
|
|
262
|
+
const [T = 0] = Array.isArray(w) ? w : [w];
|
|
263
|
+
h.setValue(T);
|
|
264
|
+
const D = s ? Math.floor(T) * 2 : Math.floor(T);
|
|
238
265
|
a ? e == null || e.navigation.goToPageOfSpineItem({
|
|
239
|
-
pageIndex:
|
|
266
|
+
pageIndex: D,
|
|
240
267
|
spineItemId: e.pagination.getState().beginSpineItemIndex ?? 0,
|
|
241
268
|
animation: !1
|
|
242
269
|
}) : e == null || e.navigation.goToAbsolutePageIndex({
|
|
243
|
-
absolutePageIndex:
|
|
270
|
+
absolutePageIndex: D,
|
|
244
271
|
animation: !1
|
|
245
272
|
});
|
|
246
273
|
},
|
|
247
|
-
[e,
|
|
274
|
+
[e, s, h, a]
|
|
248
275
|
);
|
|
249
|
-
return
|
|
276
|
+
return j(
|
|
250
277
|
() => e == null ? void 0 : e.navigation.throttleLock({
|
|
251
278
|
duration: 100,
|
|
252
|
-
trigger:
|
|
279
|
+
trigger: h.subject
|
|
253
280
|
}),
|
|
254
|
-
[e,
|
|
255
|
-
),
|
|
256
|
-
|
|
281
|
+
[e, h]
|
|
282
|
+
), i === 1 || s && i === 2 ? null : /* @__PURE__ */ n(
|
|
283
|
+
fe,
|
|
257
284
|
{
|
|
258
285
|
value: [d],
|
|
259
|
-
max:
|
|
260
|
-
min:
|
|
261
|
-
reverse:
|
|
286
|
+
max: M,
|
|
287
|
+
min: C,
|
|
288
|
+
reverse: o,
|
|
262
289
|
step: u,
|
|
263
|
-
onChange:
|
|
290
|
+
onChange: W
|
|
264
291
|
}
|
|
265
292
|
);
|
|
266
|
-
},
|
|
267
|
-
const [
|
|
268
|
-
return
|
|
269
|
-
const r = setInterval(() => {
|
|
270
|
-
t(/* @__PURE__ */ new Date());
|
|
271
|
-
}, 6e4);
|
|
272
|
-
return () => clearInterval(r);
|
|
273
|
-
}, []), e;
|
|
274
|
-
}, fe = (e) => {
|
|
275
|
-
const t = ge();
|
|
276
|
-
return /* @__PURE__ */ n(g, { fontSize: "xs", ...e, children: t.toLocaleTimeString(navigator.language, {
|
|
277
|
-
hour: "2-digit",
|
|
278
|
-
minute: "2-digit"
|
|
279
|
-
}) });
|
|
280
|
-
}, xe = ({ open: e }) => {
|
|
281
|
-
const t = S(), r = b(() => t == null ? void 0 : t.navigation.state$, [t]), s = b(() => t == null ? void 0 : t.settings.values$, [t]), o = (s == null ? void 0 : s.computedPageTurnDirection) === "vertical";
|
|
282
|
-
return /* @__PURE__ */ c(E, { present: e, position: "bottom", height: 130, children: [
|
|
293
|
+
}, pe = ({ open: e }) => {
|
|
294
|
+
const t = v(), r = b(() => t == null ? void 0 : t.navigation.state$, [t]), o = b(() => t == null ? void 0 : t.settings.values$, [t]), s = (o == null ? void 0 : o.computedPageTurnDirection) === "vertical";
|
|
295
|
+
return /* @__PURE__ */ c(F, { present: e, position: "bottom", height: 130, children: [
|
|
283
296
|
/* @__PURE__ */ n(
|
|
284
297
|
f,
|
|
285
298
|
{
|
|
@@ -289,11 +302,11 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
289
302
|
flexShrink: 0,
|
|
290
303
|
onClick: () => t == null ? void 0 : t.navigation.goToLeftOrTopSpineItem(),
|
|
291
304
|
disabled: !(r != null && r.canGoLeftSpineItem) && !(r != null && r.canGoTopSpineItem),
|
|
292
|
-
children:
|
|
305
|
+
children: s ? /* @__PURE__ */ n(Y, {}) : /* @__PURE__ */ n(q, {})
|
|
293
306
|
}
|
|
294
307
|
),
|
|
295
308
|
/* @__PURE__ */ c(
|
|
296
|
-
|
|
309
|
+
O,
|
|
297
310
|
{
|
|
298
311
|
flex: 1,
|
|
299
312
|
maxW: 400,
|
|
@@ -302,8 +315,8 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
302
315
|
overflow: "visible",
|
|
303
316
|
px: 4,
|
|
304
317
|
children: [
|
|
305
|
-
/* @__PURE__ */ n(
|
|
306
|
-
/* @__PURE__ */ n(
|
|
318
|
+
/* @__PURE__ */ n(he, {}),
|
|
319
|
+
/* @__PURE__ */ n(S, { height: 5, maxW: 300, width: "100%", overflow: "visible", children: /* @__PURE__ */ n(be, {}) })
|
|
307
320
|
]
|
|
308
321
|
}
|
|
309
322
|
),
|
|
@@ -318,36 +331,35 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
318
331
|
onClick: () => {
|
|
319
332
|
t == null || t.navigation.goToRightOrBottomSpineItem();
|
|
320
333
|
},
|
|
321
|
-
children:
|
|
334
|
+
children: s ? /* @__PURE__ */ n(J, {}) : /* @__PURE__ */ n(K, {})
|
|
322
335
|
}
|
|
323
|
-
)
|
|
324
|
-
/* @__PURE__ */ n(fe, { position: "absolute", bottom: 0, left: 0, p: 2 })
|
|
336
|
+
)
|
|
325
337
|
] });
|
|
326
|
-
},
|
|
327
|
-
const [e, t] =
|
|
338
|
+
}, Ie = () => {
|
|
339
|
+
const [e, t] = $(!1), r = z(() => document.fullscreenElement ? document.exitFullscreen().catch(console.error).then(() => {
|
|
328
340
|
t(!1);
|
|
329
341
|
}) : document.documentElement.requestFullscreen({ navigationUI: "hide" }).catch(console.error).then(() => {
|
|
330
342
|
t(!0);
|
|
331
343
|
}), []);
|
|
332
|
-
return
|
|
333
|
-
function
|
|
344
|
+
return y(() => {
|
|
345
|
+
function o() {
|
|
334
346
|
t(!!document.fullscreenElement);
|
|
335
347
|
}
|
|
336
|
-
return document.addEventListener("fullscreenchange",
|
|
337
|
-
document.removeEventListener("fullscreenchange",
|
|
348
|
+
return document.addEventListener("fullscreenchange", o), () => {
|
|
349
|
+
document.removeEventListener("fullscreenchange", o);
|
|
338
350
|
};
|
|
339
351
|
}, []), {
|
|
340
352
|
isFullscreen: e,
|
|
341
353
|
onToggleFullscreenClick: r
|
|
342
354
|
};
|
|
343
|
-
},
|
|
355
|
+
}, Pe = ({
|
|
344
356
|
open: e,
|
|
345
357
|
onBackClick: t,
|
|
346
358
|
onMoreClick: r
|
|
347
359
|
}) => {
|
|
348
|
-
const
|
|
360
|
+
const o = v(), s = b(() => o == null ? void 0 : o.context.manifest$, [o]), { isFullscreen: i, onToggleFullscreenClick: l } = Ie();
|
|
349
361
|
return /* @__PURE__ */ c(
|
|
350
|
-
|
|
362
|
+
F,
|
|
351
363
|
{
|
|
352
364
|
present: e,
|
|
353
365
|
position: "top",
|
|
@@ -366,7 +378,7 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
366
378
|
}
|
|
367
379
|
),
|
|
368
380
|
/* @__PURE__ */ n(
|
|
369
|
-
|
|
381
|
+
O,
|
|
370
382
|
{
|
|
371
383
|
flex: 1,
|
|
372
384
|
maxW: 600,
|
|
@@ -374,10 +386,10 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
374
386
|
alignItems: "center",
|
|
375
387
|
overflow: "auto",
|
|
376
388
|
px: 4,
|
|
377
|
-
children: /* @__PURE__ */ n(
|
|
389
|
+
children: /* @__PURE__ */ n(m, { truncate: !0, maxWidth: "100%", children: s == null ? void 0 : s.title })
|
|
378
390
|
}
|
|
379
391
|
),
|
|
380
|
-
/* @__PURE__ */ c(
|
|
392
|
+
/* @__PURE__ */ c(k, { children: [
|
|
381
393
|
/* @__PURE__ */ n(
|
|
382
394
|
f,
|
|
383
395
|
{
|
|
@@ -396,38 +408,59 @@ const ie = x.Root, ce = x.ValueText, P = () => {
|
|
|
396
408
|
size: "lg",
|
|
397
409
|
flexShrink: 0,
|
|
398
410
|
variant: "ghost",
|
|
399
|
-
onClick:
|
|
400
|
-
children:
|
|
411
|
+
onClick: l,
|
|
412
|
+
children: i ? /* @__PURE__ */ n(re, {}) : /* @__PURE__ */ n(ne, {})
|
|
401
413
|
}
|
|
402
414
|
)
|
|
403
415
|
] })
|
|
404
416
|
]
|
|
405
417
|
}
|
|
406
418
|
);
|
|
407
|
-
},
|
|
419
|
+
}, Se = P(
|
|
408
420
|
({
|
|
409
421
|
open: e,
|
|
410
422
|
onBackClick: t,
|
|
411
423
|
onMoreClick: r
|
|
412
|
-
}) => /* @__PURE__ */ c(
|
|
424
|
+
}) => /* @__PURE__ */ c(A, { children: [
|
|
413
425
|
/* @__PURE__ */ n(
|
|
414
|
-
|
|
426
|
+
Pe,
|
|
415
427
|
{
|
|
416
428
|
open: e,
|
|
417
429
|
onBackClick: t,
|
|
418
430
|
onMoreClick: r
|
|
419
431
|
}
|
|
420
432
|
),
|
|
421
|
-
/* @__PURE__ */ n(
|
|
433
|
+
/* @__PURE__ */ n(pe, { open: e })
|
|
422
434
|
] })
|
|
423
|
-
),
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
)
|
|
435
|
+
), ze = ({
|
|
436
|
+
enableFloatingTime: e = !0,
|
|
437
|
+
enableFloatingProgress: t = !0,
|
|
438
|
+
open: r,
|
|
439
|
+
...o
|
|
440
|
+
}) => /* @__PURE__ */ c(A, { children: [
|
|
441
|
+
t && /* @__PURE__ */ n(
|
|
442
|
+
R,
|
|
443
|
+
{
|
|
444
|
+
present: !r,
|
|
445
|
+
animationName: { _open: "fade-in", _closed: "fade-out" },
|
|
446
|
+
animationDuration: "moderate",
|
|
447
|
+
children: /* @__PURE__ */ n(oe, {})
|
|
448
|
+
}
|
|
449
|
+
),
|
|
450
|
+
/* @__PURE__ */ n(Se, { open: r, ...o }),
|
|
451
|
+
/* @__PURE__ */ n(
|
|
452
|
+
R,
|
|
453
|
+
{
|
|
454
|
+
present: e || r,
|
|
455
|
+
animationName: { _open: "fade-in", _closed: "fade-out" },
|
|
456
|
+
animationDuration: "slow",
|
|
457
|
+
overflow: "hidden",
|
|
458
|
+
children: /* @__PURE__ */ n(le, {})
|
|
459
|
+
}
|
|
460
|
+
)
|
|
461
|
+
] });
|
|
429
462
|
export {
|
|
430
|
-
|
|
463
|
+
ze as ReactReader,
|
|
431
464
|
$e as ReactReaderProvider
|
|
432
465
|
};
|
|
433
466
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/context/context.ts","../src/context/useReader.ts","../src/components/ui/toggle-tip.tsx","../src/components/ui/progress.tsx","../src/pagination/usePagination.ts","../src/navigation/useNavigationContext.ts","../src/navigation/QuickMenu/PaginationInfoSection.tsx","../src/navigation/QuickMenu/QuickBar.tsx","../src/navigation/QuickMenu/ThemedSlider.tsx","../src/navigation/QuickMenu/Scrubber.tsx","../src/navigation/QuickMenu/TimeIndicator.tsx","../src/navigation/QuickMenu/BottomBar.tsx","../src/common/useFullscreen.ts","../src/navigation/QuickMenu/TopBar.tsx","../src/navigation/QuickMenu/QuickMenu.tsx","../src/context/ReactReaderProvider.tsx"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport { type Context, createContext } from \"react\"\n\nexport const ReaderContext: Context<Reader | undefined> = createContext<\n Reader | undefined\n>(undefined)\n","import type { Reader } from \"@prose-reader/core\"\nimport { useContext } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const useReader = (): Reader | undefined => {\n const context = useContext(ReaderContext)\n\n return context\n}\n","import { Popover as ChakraPopover, IconButton, Portal } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { HiOutlineInformationCircle } from \"react-icons/hi\"\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n showArrow?: boolean\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n content?: React.ReactNode\n}\n\nexport const ToggleTip = React.forwardRef<HTMLDivElement, ToggleTipProps>(\n function ToggleTip(props, ref) {\n const {\n showArrow,\n children,\n portalled = true,\n content,\n portalRef,\n ...rest\n } = props\n\n return (\n <ChakraPopover.Root\n {...rest}\n positioning={{ ...rest.positioning, gutter: 4 }}\n >\n <ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraPopover.Positioner>\n <ChakraPopover.Content\n width=\"auto\"\n px=\"2\"\n py=\"1\"\n textStyle=\"xs\"\n rounded=\"sm\"\n ref={ref}\n >\n {showArrow && (\n <ChakraPopover.Arrow>\n <ChakraPopover.ArrowTip />\n </ChakraPopover.Arrow>\n )}\n {content}\n </ChakraPopover.Content>\n </ChakraPopover.Positioner>\n </Portal>\n </ChakraPopover.Root>\n )\n },\n)\n\nexport const InfoTip = React.forwardRef<\n HTMLDivElement,\n Partial<ToggleTipProps>\n>(function InfoTip(props, ref) {\n const { children, ...rest } = props\n return (\n <ToggleTip content={children} {...rest} ref={ref}>\n <IconButton\n variant=\"ghost\"\n aria-label=\"info\"\n size=\"2xs\"\n colorPalette=\"gray\"\n >\n <HiOutlineInformationCircle />\n </IconButton>\n </ToggleTip>\n )\n})\n","import { Progress as ChakraProgress } from \"@chakra-ui/react\"\nimport { InfoTip } from \"./toggle-tip\"\nimport * as React from \"react\"\n\nexport const ProgressBar = React.forwardRef<\n HTMLDivElement,\n ChakraProgress.TrackProps\n>(function ProgressBar(props, ref) {\n return (\n <ChakraProgress.Track {...props} ref={ref}>\n <ChakraProgress.Range />\n </ChakraProgress.Track>\n )\n})\n\nexport interface ProgressLabelProps extends ChakraProgress.LabelProps {\n info?: React.ReactNode\n}\n\nexport const ProgressLabel = React.forwardRef<\n HTMLDivElement,\n ProgressLabelProps\n>(function ProgressLabel(props, ref) {\n const { children, info, ...rest } = props\n return (\n <ChakraProgress.Label {...rest} ref={ref}>\n {children}\n {info && <InfoTip>{info}</InfoTip>}\n </ChakraProgress.Label>\n )\n})\n\nexport const ProgressRoot = ChakraProgress.Root\nexport const ProgressValueText = ChakraProgress.ValueText\n","import type { Reader } from \"@prose-reader/core\"\nimport { useObserve } from \"reactjrx\"\nimport { NEVER, combineLatest, map } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\n\nexport const usePagination = ():\n | (Reader[\"pagination\"][\"state\"] & { hasChapters: boolean })\n | undefined => {\n const reader = useReader()\n\n return useObserve(\n () =>\n !reader\n ? NEVER\n : combineLatest([reader.pagination.state$, reader.context.state$]).pipe(\n map(([state, context]) => {\n const isOnlyImages = context.manifest?.spineItems.every((item) =>\n item.mediaType?.startsWith(\"image/\"),\n )\n\n return {\n ...state,\n hasChapters: !context.isFullyPrePaginated && !isOnlyImages,\n }\n }),\n ),\n [reader],\n )\n}\n","import { usePagination } from \"../pagination/usePagination\"\n\nexport const useNavigationContext = () => {\n const pagination = usePagination()\n const hasOnlyOnePage = pagination?.numberOfTotalPages === 1\n\n const isBeginWithinChapter =\n (pagination?.beginNumberOfPagesInSpineItem ?? 0) > 1\n\n const isEndWithinChapter = (pagination?.endNumberOfPagesInSpineItem ?? 0) > 1\n\n const beginPageIndex =\n (pagination?.hasChapters\n ? pagination?.beginPageIndexInSpineItem\n : pagination?.beginAbsolutePageIndex) ?? 0\n const endPageIndex =\n (pagination?.hasChapters\n ? pagination?.endPageIndexInSpineItem\n : pagination?.endAbsolutePageIndex) ?? 0\n\n const [leftPageIndex = 0, rightPageIndex = 0] = [\n beginPageIndex,\n endPageIndex,\n ].sort((a, b) => a - b)\n\n const beginAndEndAreDifferent =\n pagination?.beginPageIndexInSpineItem !==\n pagination?.endPageIndexInSpineItem ||\n pagination?.beginSpineItemIndex !== pagination?.endSpineItemIndex\n\n const totalApproximatePages = pagination?.hasChapters\n ? pagination?.beginNumberOfPagesInSpineItem\n : pagination?.numberOfTotalPages\n\n return {\n hasOnlyOnePage,\n beginPageIndex,\n endPageIndex,\n isBeginWithinChapter,\n isEndWithinChapter,\n beginAndEndAreDifferent,\n totalApproximatePages,\n leftPageIndex,\n rightPageIndex,\n }\n}\n","import { HStack, Stack, Text } from \"@chakra-ui/react\"\nimport {\n ProgressBar,\n ProgressRoot,\n ProgressValueText,\n} from \"../../components/ui/progress\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\n\nexport const PaginationInfoSection = () => {\n const pagination = usePagination()\n const {\n hasOnlyOnePage,\n leftPageIndex,\n rightPageIndex,\n totalApproximatePages,\n beginAndEndAreDifferent,\n } = useNavigationContext()\n const progress = Math.round((pagination?.percentageEstimateOfBook ?? 0) * 100)\n\n const buildTitleChain = (\n chapterInfo: NonNullable<typeof pagination>[\"beginChapterInfo\"],\n ): string => {\n if (chapterInfo?.subChapter) {\n return `${chapterInfo.title} / ${buildTitleChain(chapterInfo.subChapter)}`\n }\n return chapterInfo?.title || \"\"\n }\n\n const chapterTitle = buildTitleChain(pagination?.beginChapterInfo)\n\n return (\n <Stack alignItems=\"center\" gap={1} maxW=\"100%\" overflow=\"auto\">\n <ProgressRoot value={progress} size=\"xs\" width={150}>\n <HStack justifyContent=\"space-between\">\n <ProgressBar width={110} />\n <ProgressValueText>{`${progress}%`}</ProgressValueText>\n </HStack>\n </ProgressRoot>\n <Text truncate maxWidth=\"100%\" fontSize=\"sm\" mt={1}>\n {chapterTitle ? `Chapter: ${chapterTitle}` : `\\u00A0`}\n </Text>\n {!hasOnlyOnePage && (\n <HStack>\n <Text fontSize=\"xs\">\n {beginAndEndAreDifferent\n ? `${leftPageIndex + 1} - ${rightPageIndex + 1} of ${totalApproximatePages}`\n : `${leftPageIndex + 1} of ${totalApproximatePages}`}\n </Text>\n {!!pagination?.hasChapters && (\n <>\n <Text>-</Text>\n <Text fontSize=\"xs\">\n ({(pagination?.beginAbsolutePageIndex ?? 0) + 1})\n </Text>\n </>\n )}\n </HStack>\n )}\n </Stack>\n )\n}\n","import { Presence, type PresenceProps } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const QuickBar = memo(\n ({\n children,\n position,\n ...rest\n }: { position: \"top\" | \"bottom\" } & PresenceProps) => {\n return (\n <Presence\n display=\"flex\"\n flexDirection=\"row\"\n width=\"100%\"\n position=\"absolute\"\n {...(position === \"bottom\" ? { bottom: 0 } : { top: 0 })}\n animationName={\n position === \"bottom\"\n ? {\n _open: \"slide-from-bottom, fade-in\",\n _closed: \"slide-to-bottom, fade-out\",\n }\n : {\n _open: \"slide-from-top, fade-in\",\n _closed: \"slide-to-top, fade-out\",\n }\n }\n animationDuration=\"moderate\"\n bgColor=\"bg.panel\"\n alignItems=\"center\"\n justifyContent=\"center\"\n shadow=\"md\"\n px={4}\n {...rest}\n >\n {children}\n </Presence>\n )\n },\n)\n","import RcSlider from \"rc-slider\"\nimport { type ComponentProps, memo } from \"react\"\nimport \"rc-slider/assets/index.css\"\nimport { Box, chakra } from \"@chakra-ui/react\"\n\nconst ChakraRcSlider = chakra(RcSlider)\n\nexport const ThemedSlider = memo((props: ComponentProps<typeof RcSlider>) => {\n return (\n <Box\n display=\"contents\"\n css={{\n \"--bg\": \"colors.bg\",\n \"--bg-emphasized\": \"colors.bg.emphasized\",\n \"--color-solid\": \"colors.colorPalette.solid\",\n }}\n >\n <ChakraRcSlider\n keyboard={false}\n style={{\n padding: 0,\n }}\n css={{\n \"& > .rc-slider-handle:focus-visible\": {\n boxShadow: \"0 0 0 2px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle:active\": {\n boxShadow: \"0 0 5px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle.rc-slider-handle-dragging\": {\n boxShadow: \"0 0 0 3px var(--color-solid) !important\",\n },\n }}\n styles={{\n rail: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--bg-emphasized)\",\n },\n track: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--color-solid)\",\n },\n handle: {\n width: \"24px\",\n height: \"24px\",\n top: \"50%\",\n borderColor: \"var(--color-solid)\",\n transform: `translate(${props.reverse ? \"50%\" : \"-50%\"}, -50%)`,\n backgroundColor: \"var(--bg)\",\n marginTop: \"0px\",\n },\n }}\n {...props}\n />\n </Box>\n )\n})\n","import { type ComponentProps, useCallback, useEffect } from \"react\"\nimport { useObserve, useSignal, useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\nimport { ThemedSlider } from \"./ThemedSlider\"\n\nconst useSliderValues = () => {\n const pagination = usePagination()\n const isUsingSpread = pagination?.isUsingSpread\n const { beginPageIndex: currentRealPage, totalApproximatePages = 0 } =\n useNavigationContext()\n const currentPage = isUsingSpread\n ? Math.floor((currentRealPage || 0) / 2)\n : currentRealPage\n const [value, valueSignal] = useSignal({\n default: currentPage || 0,\n })\n const min = 0\n const max = Math.max(\n 0,\n isUsingSpread\n ? Math.floor((totalApproximatePages - 1) / 2)\n : totalApproximatePages - 1,\n )\n\n useEffect(() => {\n valueSignal.setValue(currentPage || 0)\n }, [currentPage, valueSignal])\n\n return {\n value,\n valueSignal,\n min,\n max,\n }\n}\n\nexport const Scrubber = () => {\n const reader = useReader()\n const pagination = usePagination()\n const { manifest } = useObserve(() => reader?.context.state$, []) ?? {}\n const reverse = manifest?.readingDirection === \"rtl\"\n const isUsingSpread = pagination?.isUsingSpread\n const { totalApproximatePages = 0, isBeginWithinChapter } =\n useNavigationContext()\n const step = 1\n const isScrubberWithinChapter = isBeginWithinChapter\n const { value, valueSignal, min, max } = useSliderValues()\n\n const onChange: NonNullable<ComponentProps<typeof ThemedSlider>[\"onChange\"]> =\n useCallback(\n (values) => {\n const [value = 0] = Array.isArray(values) ? values : [values]\n\n valueSignal.setValue(value)\n\n const pageIndex = isUsingSpread\n ? Math.floor(value) * 2\n : Math.floor(value)\n\n if (!isScrubberWithinChapter) {\n reader?.navigation.goToAbsolutePageIndex({\n absolutePageIndex: pageIndex,\n animation: false,\n })\n } else {\n reader?.navigation.goToPageOfSpineItem({\n pageIndex,\n spineItemId: reader.pagination.getState().beginSpineItemIndex ?? 0,\n animation: false,\n })\n }\n },\n [reader, isUsingSpread, valueSignal, isScrubberWithinChapter],\n )\n\n /**\n * @note\n * Scrubber can navigate fast and without lock we may end up with\n * slowness due to the reader\n * paginating and loading items in between.\n * This is good practice (but not required) to throttle it.\n */\n useSubscribe(\n () =>\n reader?.navigation.throttleLock({\n duration: 100,\n trigger: valueSignal.subject,\n }),\n [reader, valueSignal],\n )\n\n // const marks =\n // max > 1\n // ? Array.from({ length: max + 1 }, (_, i) => i).reduce(\n // (acc: number[], val) => [...acc, val],\n // [],\n // )\n // : []\n\n if (\n totalApproximatePages === 1 ||\n (isUsingSpread && totalApproximatePages === 2)\n ) {\n return null\n }\n\n // @tmp not available yet in chakra\n // if (reverse) return null\n\n return (\n <ThemedSlider\n value={[value]}\n max={max}\n min={min}\n reverse={reverse}\n step={step}\n onChange={onChange}\n />\n )\n // return (\n // <Slider\n // value={[value]}\n // max={max}\n // min={min}\n // marks={marks}\n // onChange={e => {\n // debugger\n // }}\n // onValueChange={onChange}\n // // reverse={reverse}\n // orientation=\"horizontal\"\n // step={step}\n // />\n // )\n}\n","import { Text, type TextProps } from \"@chakra-ui/react\"\nimport { useEffect, useState } from \"react\"\n\nexport const useTime = () => {\n const [time, setTime] = useState(new Date())\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date())\n }, 1000 * 60)\n\n return () => clearInterval(interval)\n }, [])\n\n return time\n}\n\nexport const TimeIndicator = (props: TextProps) => {\n const time = useTime()\n\n return (\n <Text fontSize=\"xs\" {...props}>\n {time.toLocaleTimeString(navigator.language, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </Text>\n )\n}\n","import { Box, IconButton, Stack } from \"@chakra-ui/react\"\nimport {\n RxDoubleArrowDown,\n RxDoubleArrowLeft,\n RxDoubleArrowRight,\n RxDoubleArrowUp,\n} from \"react-icons/rx\"\nimport { useObserve } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { PaginationInfoSection } from \"./PaginationInfoSection\"\nimport { QuickBar } from \"./QuickBar\"\nimport { Scrubber } from \"./Scrubber\"\nimport { TimeIndicator } from \"./TimeIndicator\"\n\nexport const BottomBar = ({ open }: { open: boolean }) => {\n const reader = useReader()\n const navigation = useObserve(() => reader?.navigation.state$, [reader])\n const settings = useObserve(() => reader?.settings.values$, [reader])\n const isVerticalDirection = settings?.computedPageTurnDirection === \"vertical\"\n\n return (\n <QuickBar present={open} position=\"bottom\" height={130}>\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => reader?.navigation.goToLeftOrTopSpineItem()}\n disabled={\n !navigation?.canGoLeftSpineItem && !navigation?.canGoTopSpineItem\n }\n >\n {isVerticalDirection ? <RxDoubleArrowUp /> : <RxDoubleArrowLeft />}\n </IconButton>\n <Stack\n flex={1}\n maxW={400}\n gap={2}\n alignItems=\"center\"\n overflow=\"visible\"\n px={4}\n >\n <PaginationInfoSection />\n <Box height={5} maxW={300} width=\"100%\" overflow=\"visible\">\n <Scrubber />\n </Box>\n </Stack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n disabled={\n !navigation?.canGoRightSpineItem && !navigation?.canGoBottomSpineItem\n }\n onClick={() => {\n reader?.navigation.goToRightOrBottomSpineItem()\n }}\n >\n {isVerticalDirection ? <RxDoubleArrowDown /> : <RxDoubleArrowRight />}\n </IconButton>\n <TimeIndicator position=\"absolute\" bottom={0} left={0} p={2} />\n </QuickBar>\n )\n}\n","import { useEffect } from \"react\"\n\nimport { useCallback } from \"react\"\n\nimport { useState } from \"react\"\n\nexport const useFullscreen = () => {\n const [isFullscreen, setIsFullscreen] = useState(false)\n\n const onToggleFullscreenClick = useCallback(() => {\n if (document.fullscreenElement) {\n return document\n .exitFullscreen()\n .catch(console.error)\n .then(() => {\n setIsFullscreen(false)\n })\n }\n\n return document.documentElement\n .requestFullscreen({ navigationUI: \"hide\" })\n .catch(console.error)\n .then(() => {\n setIsFullscreen(true)\n })\n }, [])\n\n useEffect(() => {\n function fullscreenchangeHandler() {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n document.addEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n }\n }, [])\n\n return {\n isFullscreen,\n onToggleFullscreenClick,\n }\n}\n","import { HStack, IconButton, Stack, Text } from \"@chakra-ui/react\"\nimport { IoIosArrowBack, IoMdMore } from \"react-icons/io\"\nimport { MdFullscreen, MdFullscreenExit } from \"react-icons/md\"\nimport { useObserve } from \"reactjrx\"\nimport { useFullscreen } from \"../../common/useFullscreen\"\nimport { useReader } from \"../../context/useReader\"\nimport { QuickBar } from \"./QuickBar\"\n\nexport const TopBar = ({\n open,\n onBackClick,\n onMoreClick,\n}: {\n open: boolean\n onBackClick: () => void\n onMoreClick: () => void\n}) => {\n const reader = useReader()\n const manifest = useObserve(() => reader?.context.manifest$, [reader])\n const { isFullscreen, onToggleFullscreenClick } = useFullscreen()\n\n return (\n <QuickBar\n present={open}\n position=\"top\"\n height=\"80px\"\n justifyContent=\"space-between\"\n >\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={onBackClick}\n >\n <IoIosArrowBack />\n </IconButton>\n <Stack\n flex={1}\n maxW={600}\n gap={1}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <Text truncate maxWidth=\"100%\">\n {manifest?.title}\n </Text>\n </Stack>\n <HStack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onMoreClick}\n >\n <IoMdMore />\n </IconButton>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onToggleFullscreenClick}\n >\n {isFullscreen ? <MdFullscreenExit /> : <MdFullscreen />}\n </IconButton>\n </HStack>\n </QuickBar>\n )\n}\n","import { memo } from \"react\"\nimport { BottomBar } from \"./BottomBar\"\nimport { TopBar } from \"./TopBar\"\n\nexport const QuickMenu = memo(\n ({\n open,\n onBackClick,\n onMoreClick,\n }: { open: boolean; onBackClick: () => void; onMoreClick: () => void }) => {\n return (\n <>\n <TopBar\n open={open}\n onBackClick={onBackClick}\n onMoreClick={onMoreClick}\n />\n <BottomBar open={open} />\n </>\n )\n },\n)\n","import type { Reader } from \"@prose-reader/core\"\nimport { memo } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const ReactReaderProvider = memo(\n ({\n children,\n reader,\n }: { children?: React.ReactNode; reader: Reader | undefined }) => {\n return (\n <ReaderContext.Provider value={reader}>{children}</ReaderContext.Provider>\n )\n },\n)\n"],"names":["ReaderContext","createContext","useReader","useContext","ToggleTip","React","props","ref","showArrow","children","portalled","content","portalRef","rest","jsxs","ChakraPopover","jsx","Portal","InfoTip","IconButton","HiOutlineInformationCircle","ProgressBar","ChakraProgress","info","ProgressRoot","ProgressValueText","usePagination","reader","useObserve","combineLatest","map","state","context","isOnlyImages","_a","item","NEVER","useNavigationContext","pagination","hasOnlyOnePage","isBeginWithinChapter","isEndWithinChapter","beginPageIndex","endPageIndex","leftPageIndex","rightPageIndex","a","b","beginAndEndAreDifferent","totalApproximatePages","PaginationInfoSection","progress","buildTitleChain","chapterInfo","chapterTitle","Stack","HStack","Text","Fragment","QuickBar","memo","position","Presence","ChakraRcSlider","chakra","RcSlider","ThemedSlider","Box","useSliderValues","isUsingSpread","currentRealPage","currentPage","value","valueSignal","useSignal","min","max","useEffect","Scrubber","manifest","reverse","step","isScrubberWithinChapter","onChange","useCallback","values","pageIndex","useSubscribe","useTime","time","setTime","useState","interval","TimeIndicator","BottomBar","open","navigation","settings","isVerticalDirection","RxDoubleArrowUp","RxDoubleArrowLeft","RxDoubleArrowDown","RxDoubleArrowRight","useFullscreen","isFullscreen","setIsFullscreen","onToggleFullscreenClick","fullscreenchangeHandler","TopBar","onBackClick","onMoreClick","IoIosArrowBack","IoMdMore","MdFullscreenExit","MdFullscreen","QuickMenu","ReactReaderProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/context/context.ts","../src/context/ReactReaderProvider.tsx","../src/context/useReader.ts","../src/pagination/usePagination.ts","../src/navigation/FloatingProgress.tsx","../src/navigation/QuickMenu/TimeIndicator.tsx","../src/navigation/FloatingTime.tsx","../src/components/ui/toggle-tip.tsx","../src/components/ui/progress.tsx","../src/navigation/useNavigationContext.ts","../src/navigation/QuickMenu/PaginationInfoSection.tsx","../src/navigation/QuickMenu/QuickBar.tsx","../src/navigation/QuickMenu/ThemedSlider.tsx","../src/navigation/QuickMenu/Scrubber.tsx","../src/navigation/QuickMenu/BottomBar.tsx","../src/common/useFullscreen.ts","../src/navigation/QuickMenu/TopBar.tsx","../src/navigation/QuickMenu/QuickMenu.tsx","../src/ReactReader.tsx"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport { type Context, createContext } from \"react\"\n\nexport const ReaderContext: Context<Reader | undefined> = createContext<\n Reader | undefined\n>(undefined)\n","import type { Reader } from \"@prose-reader/core\"\nimport { memo } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const ReactReaderProvider = memo(\n ({\n children,\n reader,\n }: { children?: React.ReactNode; reader: Reader | undefined }) => {\n return (\n <ReaderContext.Provider value={reader}>{children}</ReaderContext.Provider>\n )\n },\n)\n","import type { Reader } from \"@prose-reader/core\"\nimport { useContext } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const useReader = (): Reader | undefined => {\n const context = useContext(ReaderContext)\n\n return context\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { useObserve } from \"reactjrx\"\nimport { NEVER, combineLatest, map } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\n\nexport const usePagination = ():\n | (Reader[\"pagination\"][\"state\"] & { hasChapters: boolean })\n | undefined => {\n const reader = useReader()\n\n return useObserve(\n () =>\n !reader\n ? NEVER\n : combineLatest([reader.pagination.state$, reader.context.state$]).pipe(\n map(([state, context]) => {\n const isOnlyImages = context.manifest?.spineItems.every((item) =>\n item.mediaType?.startsWith(\"image/\"),\n )\n\n return {\n ...state,\n hasChapters: !context.isFullyPrePaginated && !isOnlyImages,\n }\n }),\n ),\n [reader],\n )\n}\n","import { Box, Text } from \"@chakra-ui/react\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const FloatingProgress = () => {\n const pagination = usePagination()\n const roundedProgress = Math.floor(\n (pagination?.percentageEstimateOfBook ?? 0) * 100,\n )\n const displayableProgress = roundedProgress > 0 ? roundedProgress : 1\n\n if (pagination?.percentageEstimateOfBook === undefined) return null\n\n return (\n <Box position=\"absolute\" right={0} bottom={0} p={2}>\n <Text fontSize=\"sm\">{displayableProgress} %</Text>\n </Box>\n )\n}\n","import { Text, type TextProps } from \"@chakra-ui/react\"\nimport { useEffect, useState } from \"react\"\n\nexport const useTime = () => {\n const [time, setTime] = useState(new Date())\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date())\n }, 1000 * 60)\n\n return () => clearInterval(interval)\n }, [])\n\n return time\n}\n\nexport const TimeIndicator = (props: TextProps) => {\n const time = useTime()\n\n return (\n <Text fontSize=\"xs\" {...props}>\n {time.toLocaleTimeString(navigator.language, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </Text>\n )\n}\n","import { Box } from \"@chakra-ui/react\"\nimport { TimeIndicator } from \"./QuickMenu/TimeIndicator\"\n\nexport const FloatingTime = () => {\n return (\n <Box position=\"absolute\" left={0} bottom={0} p={2}>\n <TimeIndicator />\n </Box>\n )\n}\n","import { Popover as ChakraPopover, IconButton, Portal } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { HiOutlineInformationCircle } from \"react-icons/hi\"\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n showArrow?: boolean\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n content?: React.ReactNode\n}\n\nexport const ToggleTip = React.forwardRef<HTMLDivElement, ToggleTipProps>(\n function ToggleTip(props, ref) {\n const {\n showArrow,\n children,\n portalled = true,\n content,\n portalRef,\n ...rest\n } = props\n\n return (\n <ChakraPopover.Root\n {...rest}\n positioning={{ ...rest.positioning, gutter: 4 }}\n >\n <ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraPopover.Positioner>\n <ChakraPopover.Content\n width=\"auto\"\n px=\"2\"\n py=\"1\"\n textStyle=\"xs\"\n rounded=\"sm\"\n ref={ref}\n >\n {showArrow && (\n <ChakraPopover.Arrow>\n <ChakraPopover.ArrowTip />\n </ChakraPopover.Arrow>\n )}\n {content}\n </ChakraPopover.Content>\n </ChakraPopover.Positioner>\n </Portal>\n </ChakraPopover.Root>\n )\n },\n)\n\nexport const InfoTip = React.forwardRef<\n HTMLDivElement,\n Partial<ToggleTipProps>\n>(function InfoTip(props, ref) {\n const { children, ...rest } = props\n return (\n <ToggleTip content={children} {...rest} ref={ref}>\n <IconButton\n variant=\"ghost\"\n aria-label=\"info\"\n size=\"2xs\"\n colorPalette=\"gray\"\n >\n <HiOutlineInformationCircle />\n </IconButton>\n </ToggleTip>\n )\n})\n","import { Progress as ChakraProgress } from \"@chakra-ui/react\"\nimport { InfoTip } from \"./toggle-tip\"\nimport * as React from \"react\"\n\nexport const ProgressBar = React.forwardRef<\n HTMLDivElement,\n ChakraProgress.TrackProps\n>(function ProgressBar(props, ref) {\n return (\n <ChakraProgress.Track {...props} ref={ref}>\n <ChakraProgress.Range />\n </ChakraProgress.Track>\n )\n})\n\nexport interface ProgressLabelProps extends ChakraProgress.LabelProps {\n info?: React.ReactNode\n}\n\nexport const ProgressLabel = React.forwardRef<\n HTMLDivElement,\n ProgressLabelProps\n>(function ProgressLabel(props, ref) {\n const { children, info, ...rest } = props\n return (\n <ChakraProgress.Label {...rest} ref={ref}>\n {children}\n {info && <InfoTip>{info}</InfoTip>}\n </ChakraProgress.Label>\n )\n})\n\nexport const ProgressRoot = ChakraProgress.Root\nexport const ProgressValueText = ChakraProgress.ValueText\n","import { usePagination } from \"../pagination/usePagination\"\n\nexport const useNavigationContext = () => {\n const pagination = usePagination()\n const hasOnlyOnePage = pagination?.numberOfTotalPages === 1\n\n const isBeginWithinChapter =\n (pagination?.beginNumberOfPagesInSpineItem ?? 0) > 1\n\n const isEndWithinChapter = (pagination?.endNumberOfPagesInSpineItem ?? 0) > 1\n\n const beginPageIndex =\n (pagination?.hasChapters\n ? pagination?.beginPageIndexInSpineItem\n : pagination?.beginAbsolutePageIndex) ?? 0\n const endPageIndex =\n (pagination?.hasChapters\n ? pagination?.endPageIndexInSpineItem\n : pagination?.endAbsolutePageIndex) ?? 0\n\n const [leftPageIndex = 0, rightPageIndex = 0] = [\n beginPageIndex,\n endPageIndex,\n ].sort((a, b) => a - b)\n\n const beginAndEndAreDifferent =\n pagination?.beginPageIndexInSpineItem !==\n pagination?.endPageIndexInSpineItem ||\n pagination?.beginSpineItemIndex !== pagination?.endSpineItemIndex\n\n const totalApproximatePages = pagination?.hasChapters\n ? pagination?.beginNumberOfPagesInSpineItem\n : pagination?.numberOfTotalPages\n\n return {\n hasOnlyOnePage,\n beginPageIndex,\n endPageIndex,\n isBeginWithinChapter,\n isEndWithinChapter,\n beginAndEndAreDifferent,\n totalApproximatePages,\n leftPageIndex,\n rightPageIndex,\n }\n}\n","import { HStack, Stack, Text } from \"@chakra-ui/react\"\nimport {\n ProgressBar,\n ProgressRoot,\n ProgressValueText,\n} from \"../../components/ui/progress\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\n\nexport const PaginationInfoSection = () => {\n const pagination = usePagination()\n const {\n hasOnlyOnePage,\n leftPageIndex,\n rightPageIndex,\n totalApproximatePages,\n beginAndEndAreDifferent,\n } = useNavigationContext()\n const progress = Math.round((pagination?.percentageEstimateOfBook ?? 0) * 100)\n\n const buildTitleChain = (\n chapterInfo: NonNullable<typeof pagination>[\"beginChapterInfo\"],\n ): string => {\n if (chapterInfo?.subChapter) {\n return `${chapterInfo.title} / ${buildTitleChain(chapterInfo.subChapter)}`\n }\n return chapterInfo?.title || \"\"\n }\n\n const chapterTitle = buildTitleChain(pagination?.beginChapterInfo)\n\n return (\n <Stack alignItems=\"center\" gap={1} maxW=\"100%\" overflow=\"auto\">\n <ProgressRoot value={progress} size=\"xs\" width={150}>\n <HStack justifyContent=\"space-between\">\n <ProgressBar width={110} />\n <ProgressValueText>{`${progress}%`}</ProgressValueText>\n </HStack>\n </ProgressRoot>\n <Text truncate maxWidth=\"100%\" fontSize=\"sm\" mt={1}>\n {chapterTitle ? `Chapter: ${chapterTitle}` : `\\u00A0`}\n </Text>\n {!hasOnlyOnePage && (\n <HStack>\n <Text fontSize=\"xs\">\n {beginAndEndAreDifferent\n ? `${leftPageIndex + 1} - ${rightPageIndex + 1} of ${totalApproximatePages}`\n : `${leftPageIndex + 1} of ${totalApproximatePages}`}\n </Text>\n {!!pagination?.hasChapters && (\n <>\n <Text>-</Text>\n <Text fontSize=\"xs\">\n ({(pagination?.beginAbsolutePageIndex ?? 0) + 1})\n </Text>\n </>\n )}\n </HStack>\n )}\n </Stack>\n )\n}\n","import { Presence, type PresenceProps } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const QuickBar = memo(\n ({\n children,\n position,\n ...rest\n }: { position: \"top\" | \"bottom\" } & PresenceProps) => {\n return (\n <Presence\n display=\"flex\"\n flexDirection=\"row\"\n width=\"100%\"\n position=\"absolute\"\n {...(position === \"bottom\" ? { bottom: 0 } : { top: 0 })}\n animationName={\n position === \"bottom\"\n ? {\n _open: \"slide-from-bottom, fade-in\",\n _closed: \"slide-to-bottom, fade-out\",\n }\n : {\n _open: \"slide-from-top, fade-in\",\n _closed: \"slide-to-top, fade-out\",\n }\n }\n animationDuration=\"moderate\"\n bgColor=\"bg.panel\"\n alignItems=\"center\"\n justifyContent=\"center\"\n shadow=\"md\"\n px={4}\n {...rest}\n >\n {children}\n </Presence>\n )\n },\n)\n","import RcSlider from \"rc-slider\"\nimport { type ComponentProps, memo } from \"react\"\nimport \"rc-slider/assets/index.css\"\nimport { Box, chakra } from \"@chakra-ui/react\"\n\nconst ChakraRcSlider = chakra(RcSlider)\n\nexport const ThemedSlider = memo((props: ComponentProps<typeof RcSlider>) => {\n return (\n <Box\n display=\"contents\"\n css={{\n \"--bg\": \"colors.bg\",\n \"--bg-emphasized\": \"colors.bg.emphasized\",\n \"--color-solid\": \"colors.colorPalette.solid\",\n }}\n >\n <ChakraRcSlider\n keyboard={false}\n style={{\n padding: 0,\n }}\n css={{\n \"& > .rc-slider-handle:focus-visible\": {\n boxShadow: \"0 0 0 2px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle:active\": {\n boxShadow: \"0 0 5px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle.rc-slider-handle-dragging\": {\n boxShadow: \"0 0 0 3px var(--color-solid) !important\",\n },\n }}\n styles={{\n rail: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--bg-emphasized)\",\n },\n track: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--color-solid)\",\n },\n handle: {\n width: \"24px\",\n height: \"24px\",\n top: \"50%\",\n borderColor: \"var(--color-solid)\",\n transform: `translate(${props.reverse ? \"50%\" : \"-50%\"}, -50%)`,\n backgroundColor: \"var(--bg)\",\n marginTop: \"0px\",\n },\n }}\n {...props}\n />\n </Box>\n )\n})\n","import { type ComponentProps, useCallback, useEffect } from \"react\"\nimport { useObserve, useSignal, useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\nimport { ThemedSlider } from \"./ThemedSlider\"\n\nconst useSliderValues = () => {\n const pagination = usePagination()\n const isUsingSpread = pagination?.isUsingSpread\n const { beginPageIndex: currentRealPage, totalApproximatePages = 0 } =\n useNavigationContext()\n const currentPage = isUsingSpread\n ? Math.floor((currentRealPage || 0) / 2)\n : currentRealPage\n const [value, valueSignal] = useSignal({\n default: currentPage || 0,\n })\n const min = 0\n const max = Math.max(\n 0,\n isUsingSpread\n ? Math.floor((totalApproximatePages - 1) / 2)\n : totalApproximatePages - 1,\n )\n\n useEffect(() => {\n valueSignal.setValue(currentPage || 0)\n }, [currentPage, valueSignal])\n\n return {\n value,\n valueSignal,\n min,\n max,\n }\n}\n\nexport const Scrubber = () => {\n const reader = useReader()\n const pagination = usePagination()\n const { manifest } = useObserve(() => reader?.context.state$, []) ?? {}\n const reverse = manifest?.readingDirection === \"rtl\"\n const isUsingSpread = pagination?.isUsingSpread\n const { totalApproximatePages = 0, isBeginWithinChapter } =\n useNavigationContext()\n const step = 1\n const isScrubberWithinChapter = isBeginWithinChapter\n const { value, valueSignal, min, max } = useSliderValues()\n\n const onChange: NonNullable<ComponentProps<typeof ThemedSlider>[\"onChange\"]> =\n useCallback(\n (values) => {\n const [value = 0] = Array.isArray(values) ? values : [values]\n\n valueSignal.setValue(value)\n\n const pageIndex = isUsingSpread\n ? Math.floor(value) * 2\n : Math.floor(value)\n\n if (!isScrubberWithinChapter) {\n reader?.navigation.goToAbsolutePageIndex({\n absolutePageIndex: pageIndex,\n animation: false,\n })\n } else {\n reader?.navigation.goToPageOfSpineItem({\n pageIndex,\n spineItemId: reader.pagination.getState().beginSpineItemIndex ?? 0,\n animation: false,\n })\n }\n },\n [reader, isUsingSpread, valueSignal, isScrubberWithinChapter],\n )\n\n /**\n * @note\n * Scrubber can navigate fast and without lock we may end up with\n * slowness due to the reader\n * paginating and loading items in between.\n * This is good practice (but not required) to throttle it.\n */\n useSubscribe(\n () =>\n reader?.navigation.throttleLock({\n duration: 100,\n trigger: valueSignal.subject,\n }),\n [reader, valueSignal],\n )\n\n // const marks =\n // max > 1\n // ? Array.from({ length: max + 1 }, (_, i) => i).reduce(\n // (acc: number[], val) => [...acc, val],\n // [],\n // )\n // : []\n\n if (\n totalApproximatePages === 1 ||\n (isUsingSpread && totalApproximatePages === 2)\n ) {\n return null\n }\n\n // @tmp not available yet in chakra\n // if (reverse) return null\n\n return (\n <ThemedSlider\n value={[value]}\n max={max}\n min={min}\n reverse={reverse}\n step={step}\n onChange={onChange}\n />\n )\n // return (\n // <Slider\n // value={[value]}\n // max={max}\n // min={min}\n // marks={marks}\n // onChange={e => {\n // debugger\n // }}\n // onValueChange={onChange}\n // // reverse={reverse}\n // orientation=\"horizontal\"\n // step={step}\n // />\n // )\n}\n","import { Box, IconButton, Stack } from \"@chakra-ui/react\"\nimport {\n RxDoubleArrowDown,\n RxDoubleArrowLeft,\n RxDoubleArrowRight,\n RxDoubleArrowUp,\n} from \"react-icons/rx\"\nimport { useObserve } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { PaginationInfoSection } from \"./PaginationInfoSection\"\nimport { QuickBar } from \"./QuickBar\"\nimport { Scrubber } from \"./Scrubber\"\n\nexport const BottomBar = ({ open }: { open: boolean }) => {\n const reader = useReader()\n const navigation = useObserve(() => reader?.navigation.state$, [reader])\n const settings = useObserve(() => reader?.settings.values$, [reader])\n const isVerticalDirection = settings?.computedPageTurnDirection === \"vertical\"\n\n return (\n <QuickBar present={open} position=\"bottom\" height={130}>\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => reader?.navigation.goToLeftOrTopSpineItem()}\n disabled={\n !navigation?.canGoLeftSpineItem && !navigation?.canGoTopSpineItem\n }\n >\n {isVerticalDirection ? <RxDoubleArrowUp /> : <RxDoubleArrowLeft />}\n </IconButton>\n <Stack\n flex={1}\n maxW={400}\n gap={2}\n alignItems=\"center\"\n overflow=\"visible\"\n px={4}\n >\n <PaginationInfoSection />\n <Box height={5} maxW={300} width=\"100%\" overflow=\"visible\">\n <Scrubber />\n </Box>\n </Stack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n disabled={\n !navigation?.canGoRightSpineItem && !navigation?.canGoBottomSpineItem\n }\n onClick={() => {\n reader?.navigation.goToRightOrBottomSpineItem()\n }}\n >\n {isVerticalDirection ? <RxDoubleArrowDown /> : <RxDoubleArrowRight />}\n </IconButton>\n </QuickBar>\n )\n}\n","import { useEffect } from \"react\"\n\nimport { useCallback } from \"react\"\n\nimport { useState } from \"react\"\n\nexport const useFullscreen = () => {\n const [isFullscreen, setIsFullscreen] = useState(false)\n\n const onToggleFullscreenClick = useCallback(() => {\n if (document.fullscreenElement) {\n return document\n .exitFullscreen()\n .catch(console.error)\n .then(() => {\n setIsFullscreen(false)\n })\n }\n\n return document.documentElement\n .requestFullscreen({ navigationUI: \"hide\" })\n .catch(console.error)\n .then(() => {\n setIsFullscreen(true)\n })\n }, [])\n\n useEffect(() => {\n function fullscreenchangeHandler() {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n document.addEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n }\n }, [])\n\n return {\n isFullscreen,\n onToggleFullscreenClick,\n }\n}\n","import { HStack, IconButton, Stack, Text } from \"@chakra-ui/react\"\nimport { IoIosArrowBack, IoMdMore } from \"react-icons/io\"\nimport { MdFullscreen, MdFullscreenExit } from \"react-icons/md\"\nimport { useObserve } from \"reactjrx\"\nimport { useFullscreen } from \"../../common/useFullscreen\"\nimport { useReader } from \"../../context/useReader\"\nimport { QuickBar } from \"./QuickBar\"\n\nexport const TopBar = ({\n open,\n onBackClick,\n onMoreClick,\n}: {\n open: boolean\n onBackClick: () => void\n onMoreClick: () => void\n}) => {\n const reader = useReader()\n const manifest = useObserve(() => reader?.context.manifest$, [reader])\n const { isFullscreen, onToggleFullscreenClick } = useFullscreen()\n\n return (\n <QuickBar\n present={open}\n position=\"top\"\n height=\"80px\"\n justifyContent=\"space-between\"\n >\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={onBackClick}\n >\n <IoIosArrowBack />\n </IconButton>\n <Stack\n flex={1}\n maxW={600}\n gap={1}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <Text truncate maxWidth=\"100%\">\n {manifest?.title}\n </Text>\n </Stack>\n <HStack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onMoreClick}\n >\n <IoMdMore />\n </IconButton>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onToggleFullscreenClick}\n >\n {isFullscreen ? <MdFullscreenExit /> : <MdFullscreen />}\n </IconButton>\n </HStack>\n </QuickBar>\n )\n}\n","import { memo } from \"react\"\nimport { BottomBar } from \"./BottomBar\"\nimport { TopBar } from \"./TopBar\"\n\nexport const QuickMenu = memo(\n ({\n open,\n onBackClick,\n onMoreClick,\n }: { open: boolean; onBackClick: () => void; onMoreClick: () => void }) => {\n return (\n <>\n <TopBar\n open={open}\n onBackClick={onBackClick}\n onMoreClick={onMoreClick}\n />\n <BottomBar open={open} />\n </>\n )\n },\n)\n","import { Presence } from \"@chakra-ui/react\"\nimport type { ComponentProps } from \"react\"\nimport { FloatingProgress } from \"./navigation/FloatingProgress\"\nimport { FloatingTime } from \"./navigation/FloatingTime\"\nimport { QuickMenu } from \"./navigation/QuickMenu/QuickMenu\"\n\nexport const ReactReader = ({\n enableFloatingTime = true,\n enableFloatingProgress = true,\n open,\n ...rest\n}: {\n enableFloatingTime?: boolean\n enableFloatingProgress?: boolean\n} & ComponentProps<typeof QuickMenu>) => {\n return (\n <>\n {enableFloatingProgress && (\n <Presence\n present={!open}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"moderate\"\n >\n <FloatingProgress />\n </Presence>\n )}\n <QuickMenu open={open} {...rest} />\n <Presence\n present={enableFloatingTime || open}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"slow\"\n overflow=\"hidden\"\n >\n <FloatingTime />\n </Presence>\n </>\n )\n}\n"],"names":["ReaderContext","createContext","ReactReaderProvider","memo","children","reader","useReader","useContext","usePagination","useObserve","combineLatest","map","state","context","isOnlyImages","_a","item","NEVER","FloatingProgress","pagination","roundedProgress","displayableProgress","jsx","Box","jsxs","Text","useTime","time","setTime","useState","useEffect","interval","TimeIndicator","props","FloatingTime","ToggleTip","React","ref","showArrow","portalled","content","portalRef","rest","ChakraPopover","Portal","InfoTip","IconButton","HiOutlineInformationCircle","ProgressBar","ChakraProgress","info","ProgressRoot","ProgressValueText","useNavigationContext","hasOnlyOnePage","isBeginWithinChapter","isEndWithinChapter","beginPageIndex","endPageIndex","leftPageIndex","rightPageIndex","a","b","beginAndEndAreDifferent","totalApproximatePages","PaginationInfoSection","progress","buildTitleChain","chapterInfo","chapterTitle","Stack","HStack","Fragment","QuickBar","position","Presence","ChakraRcSlider","chakra","RcSlider","ThemedSlider","useSliderValues","isUsingSpread","currentRealPage","currentPage","value","valueSignal","useSignal","min","max","Scrubber","manifest","reverse","step","isScrubberWithinChapter","onChange","useCallback","values","pageIndex","useSubscribe","BottomBar","open","navigation","settings","isVerticalDirection","RxDoubleArrowUp","RxDoubleArrowLeft","RxDoubleArrowDown","RxDoubleArrowRight","useFullscreen","isFullscreen","setIsFullscreen","onToggleFullscreenClick","fullscreenchangeHandler","TopBar","onBackClick","onMoreClick","IoIosArrowBack","IoMdMore","MdFullscreenExit","MdFullscreen","QuickMenu","ReactReader","enableFloatingTime","enableFloatingProgress"],"mappings":";;;;;;;;;;;;AAGa,MAAAA,IAA6CC,EAExD,MAAS,GCDEC,KAAsBC;AAAA,EACjC,CAAC;AAAA,IACC,UAAAC;AAAA,IACA,QAAAC;AAAA,EAAA,wBAGGL,EAAc,UAAd,EAAuB,OAAOK,GAAS,UAAAD,GAAS;AAGvD,GCTaE,IAAY,MACPC,EAAWP,CAAa,GCA7BQ,IAAgB,MAEZ;AACf,QAAMH,IAASC,EAAU;AAElB,SAAAG;AAAA,IACL,MACGJ,IAEGK,EAAc,CAACL,EAAO,WAAW,QAAQA,EAAO,QAAQ,MAAM,CAAC,EAAE;AAAA,MAC/DM,EAAI,CAAC,CAACC,GAAOC,CAAO,MAAM;;AAClB,cAAAC,KAAeC,IAAAF,EAAQ,aAAR,gBAAAE,EAAkB,WAAW;AAAA,UAAM,CAACC,MACvD;;AAAA,oBAAAD,IAAAC,EAAK,cAAL,gBAAAD,EAAgB,WAAW;AAAA;AAAA;AAGtB,eAAA;AAAA,UACL,GAAGH;AAAA,UACH,aAAa,CAACC,EAAQ,uBAAuB,CAACC;AAAA,QAChD;AAAA,MACD,CAAA;AAAA,IACH,IAZAG;AAAA,IAaN,CAACZ,CAAM;AAAA,EACT;AACF,GCzBaa,KAAmB,MAAM;AACpC,QAAMC,IAAaX,EAAc,GAC3BY,IAAkB,KAAK;AAAA,MAC1BD,KAAA,gBAAAA,EAAY,6BAA4B,KAAK;AAAA,EAChD,GACME,IAAsBD,IAAkB,IAAIA,IAAkB;AAEhE,UAAAD,KAAA,gBAAAA,EAAY,8BAA6B,SAAkB,OAG5D,gBAAAG,EAAAC,GAAA,EAAI,UAAS,YAAW,OAAO,GAAG,QAAQ,GAAG,GAAG,GAC/C,UAAC,gBAAAC,EAAAC,GAAA,EAAK,UAAS,MAAM,UAAA;AAAA,IAAAJ;AAAA,IAAoB;AAAA,EAAA,EAAA,CAAE,EAC7C,CAAA;AAEJ,GCdaK,KAAU,MAAM;AAC3B,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,oBAAI,MAAM;AAE3C,SAAAC,EAAU,MAAM;AACR,UAAAC,IAAW,YAAY,MAAM;AACzB,MAAAH,EAAA,oBAAI,MAAM;AAAA,IAAA,GACjB,GAAS;AAEL,WAAA,MAAM,cAAcG,CAAQ;AAAA,EACrC,GAAG,EAAE,GAEEJ;AACT,GAEaK,KAAgB,CAACC,MAAqB;AACjD,QAAMN,IAAOD,GAAQ;AAGnB,SAAA,gBAAAJ,EAACG,KAAK,UAAS,MAAM,GAAGQ,GACrB,UAAAN,EAAK,mBAAmB,UAAU,UAAU;AAAA,IAC3C,MAAM;AAAA,IACN,QAAQ;AAAA,EACT,CAAA,GACH;AAEJ,GCzBaO,KAAe,MAEvB,gBAAAZ,EAAAC,GAAA,EAAI,UAAS,YAAW,MAAM,GAAG,QAAQ,GAAG,GAAG,GAC9C,UAAC,gBAAAD,EAAAU,IAAA,CAAc,CAAA,GACjB,GCISG,KAAYC,EAAM;AAAA,EAC7B,SAAmBH,GAAOI,GAAK;AACvB,UAAA;AAAA,MACJ,WAAAC;AAAA,MACA,UAAAlC;AAAA,MACA,WAAAmC,IAAY;AAAA,MACZ,SAAAC;AAAA,MACA,WAAAC;AAAA,MACA,GAAGC;AAAA,IAAA,IACDT;AAGF,WAAA,gBAAAT;AAAA,MAACmB,EAAc;AAAA,MAAd;AAAA,QACE,GAAGD;AAAA,QACJ,aAAa,EAAE,GAAGA,EAAK,aAAa,QAAQ,EAAE;AAAA,QAE9C,UAAA;AAAA,UAAA,gBAAApB,EAACqB,EAAc,SAAd,EAAsB,SAAO,IAAE,UAAAvC,GAAS;AAAA,UACzC,gBAAAkB,EAACsB,GAAO,EAAA,UAAU,CAACL,GAAW,WAAWE,GACvC,UAAA,gBAAAnB,EAACqB,EAAc,YAAd,EACC,UAAA,gBAAAnB;AAAA,YAACmB,EAAc;AAAA,YAAd;AAAA,cACC,OAAM;AAAA,cACN,IAAG;AAAA,cACH,IAAG;AAAA,cACH,WAAU;AAAA,cACV,SAAQ;AAAA,cACR,KAAAN;AAAA,cAEC,UAAA;AAAA,gBACCC,KAAA,gBAAAhB,EAACqB,EAAc,OAAd,EACC,4BAACA,EAAc,UAAd,CAAuB,CAAA,GAC1B;AAAA,gBAEDH;AAAA,cAAA;AAAA,YAAA;AAAA,aAEL,EACF,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN,GAEaK,KAAUT,EAAM,WAG3B,SAAiBH,GAAOI,GAAK;AAC7B,QAAM,EAAE,UAAAjC,GAAU,GAAGsC,EAAA,IAAST;AAC9B,2BACGE,IAAU,EAAA,SAAS/B,GAAW,GAAGsC,GAAM,KAAAL,GACtC,UAAA,gBAAAf;AAAA,IAACwB;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,cAAW;AAAA,MACX,MAAK;AAAA,MACL,cAAa;AAAA,MAEb,4BAACC,GAA2B,CAAA,CAAA;AAAA,IAAA;AAAA,EAAA,GAEhC;AAEJ,CAAC,GCjEYC,KAAcZ,EAAM,WAG/B,SAAqBH,GAAOI,GAAK;AAE/B,SAAA,gBAAAf,EAAC2B,EAAe,OAAf,EAAsB,GAAGhB,GAAO,KAAAI,GAC/B,UAAC,gBAAAf,EAAA2B,EAAe,OAAf,CAAA,CAAqB,EACxB,CAAA;AAEJ,CAAC;AAM4Bb,EAAM,WAGjC,SAAuBH,GAAOI,GAAK;AACnC,QAAM,EAAE,UAAAjC,GAAU,MAAA8C,GAAM,GAAGR,EAAS,IAAAT;AACpC,2BACGgB,EAAe,OAAf,EAAsB,GAAGP,GAAM,KAAAL,GAC7B,UAAA;AAAA,IAAAjC;AAAA,IACA8C,KAAS,gBAAA5B,EAAAuB,IAAA,EAAS,UAAKK,EAAA,CAAA;AAAA,EAAA,GAC1B;AAEJ,CAAC;AAEM,MAAMC,KAAeF,EAAe,MAC9BG,KAAoBH,EAAe,WC/BnCI,IAAuB,MAAM;AACxC,QAAMlC,IAAaX,EAAc,GAC3B8C,KAAiBnC,KAAA,gBAAAA,EAAY,wBAAuB,GAEpDoC,MACHpC,KAAA,gBAAAA,EAAY,kCAAiC,KAAK,GAE/CqC,MAAsBrC,KAAA,gBAAAA,EAAY,gCAA+B,KAAK,GAEtEsC,KACHtC,KAAA,QAAAA,EAAY,cACTA,KAAA,gBAAAA,EAAY,4BACZA,KAAA,gBAAAA,EAAY,2BAA2B,GACvCuC,KACHvC,KAAA,QAAAA,EAAY,cACTA,KAAA,gBAAAA,EAAY,0BACZA,KAAA,gBAAAA,EAAY,yBAAyB,GAErC,CAACwC,IAAgB,GAAGC,IAAiB,CAAC,IAAI;AAAA,IAC9CH;AAAA,IACAC;AAAA,IACA,KAAK,CAACG,GAAGC,MAAMD,IAAIC,CAAC,GAEhBC,KACJ5C,KAAA,gBAAAA,EAAY,gCACVA,KAAA,gBAAAA,EAAY,6BACdA,KAAA,gBAAAA,EAAY,0BAAwBA,KAAA,gBAAAA,EAAY,oBAE5C6C,IAAwB7C,KAAA,QAAAA,EAAY,cACtCA,KAAA,gBAAAA,EAAY,gCACZA,KAAA,gBAAAA,EAAY;AAET,SAAA;AAAA,IACL,gBAAAmC;AAAA,IACA,gBAAAG;AAAA,IACA,cAAAC;AAAA,IACA,sBAAAH;AAAA,IACA,oBAAAC;AAAA,IACA,yBAAAO;AAAA,IACA,uBAAAC;AAAA,IACA,eAAAL;AAAA,IACA,gBAAAC;AAAA,EACF;AACF,GCpCaK,KAAwB,MAAM;AACzC,QAAM9C,IAAaX,EAAc,GAC3B;AAAA,IACJ,gBAAA8C;AAAA,IACA,eAAAK;AAAA,IACA,gBAAAC;AAAA,IACA,uBAAAI;AAAA,IACA,yBAAAD;AAAA,MACEV,EAAqB,GACnBa,IAAW,KAAK,QAAO/C,KAAA,gBAAAA,EAAY,6BAA4B,KAAK,GAAG,GAEvEgD,IAAkB,CACtBC,MAEIA,KAAA,QAAAA,EAAa,aACR,GAAGA,EAAY,KAAK,MAAMD,EAAgBC,EAAY,UAAU,CAAC,MAEnEA,KAAA,gBAAAA,EAAa,UAAS,IAGzBC,IAAeF,EAAgBhD,KAAA,gBAAAA,EAAY,gBAAgB;AAG/D,SAAA,gBAAAK,EAAC8C,KAAM,YAAW,UAAS,KAAK,GAAG,MAAK,QAAO,UAAS,QACtD,UAAA;AAAA,IAAC,gBAAAhD,EAAA6B,IAAA,EAAa,OAAOe,GAAU,MAAK,MAAK,OAAO,KAC9C,UAAA,gBAAA1C,EAAC+C,GAAO,EAAA,gBAAe,iBACrB,UAAA;AAAA,MAAC,gBAAAjD,EAAA0B,IAAA,EAAY,OAAO,IAAK,CAAA;AAAA,MACxB,gBAAA1B,EAAA8B,IAAA,EAAmB,UAAG,GAAAc,CAAQ,IAAI,CAAA;AAAA,IAAA,EAAA,CACrC,EACF,CAAA;AAAA,IACC,gBAAA5C,EAAAG,GAAA,EAAK,UAAQ,IAAC,UAAS,QAAO,UAAS,MAAK,IAAI,GAC9C,UAAA4C,IAAe,YAAYA,CAAY,KAAK,KAC/C;AAAA,IACC,CAACf,KACA,gBAAA9B,EAAC+C,GACC,EAAA,UAAA;AAAA,MAAA,gBAAAjD,EAACG,KAAK,UAAS,MACZ,cACG,GAAGkC,IAAgB,CAAC,MAAMC,IAAiB,CAAC,OAAOI,CAAqB,KACxE,GAAGL,IAAgB,CAAC,OAAOK,CAAqB,IACtD;AAAA,MACC,CAAC,EAAC7C,KAAA,QAAAA,EAAY,gBAEX,gBAAAK,EAAAgD,GAAA,EAAA,UAAA;AAAA,QAAA,gBAAAlD,EAACG,KAAK,UAAC,IAAA,CAAA;AAAA,QACP,gBAAAD,EAACC,GAAK,EAAA,UAAS,MAAK,UAAA;AAAA,UAAA;AAAA,YACfN,KAAA,gBAAAA,EAAY,2BAA0B,KAAK;AAAA,UAAE;AAAA,QAAA,EAClD,CAAA;AAAA,MAAA,EACF,CAAA;AAAA,IAAA,EAEJ,CAAA;AAAA,EAAA,GAEJ;AAEJ,GC1DasD,IAAWtE;AAAA,EACtB,CAAC;AAAA,IACC,UAAAC;AAAA,IACA,UAAAsE;AAAA,IACA,GAAGhC;AAAA,EAAA,MAGD,gBAAApB;AAAA,IAACqD;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,eAAc;AAAA,MACd,OAAM;AAAA,MACN,UAAS;AAAA,MACR,GAAID,MAAa,WAAW,EAAE,QAAQ,MAAM,EAAE,KAAK,EAAE;AAAA,MACtD,eACEA,MAAa,WACT;AAAA,QACE,OAAO;AAAA,QACP,SAAS;AAAA,MAAA,IAEX;AAAA,QACE,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,MAEN,mBAAkB;AAAA,MAClB,SAAQ;AAAA,MACR,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,QAAO;AAAA,MACP,IAAI;AAAA,MACH,GAAGhC;AAAA,MAEH,UAAAtC;AAAA,IAAA;AAAA,EACH;AAGN,GClCMwE,KAAiBC,EAAOC,CAAQ,GAEzBC,KAAe5E,EAAK,CAAC8B,MAE9B,gBAAAX;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,SAAQ;AAAA,IACR,KAAK;AAAA,MACH,QAAQ;AAAA,MACR,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,IACnB;AAAA,IAEA,UAAA,gBAAAD;AAAA,MAACsD;AAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,OAAO;AAAA,UACL,SAAS;AAAA,QACX;AAAA,QACA,KAAK;AAAA,UACH,uCAAuC;AAAA,YACrC,WAAW;AAAA,UACb;AAAA,UACA,gCAAgC;AAAA,YAC9B,WAAW;AAAA,UACb;AAAA,UACA,mDAAmD;AAAA,YACjD,WAAW;AAAA,UAAA;AAAA,QAEf;AAAA,QACA,QAAQ;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,WAAW;AAAA,YACX,iBAAiB;AAAA,UACnB;AAAA,UACA,QAAQ;AAAA,YACN,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,aAAa;AAAA,YACb,WAAW,aAAa3C,EAAM,UAAU,QAAQ,MAAM;AAAA,YACtD,iBAAiB;AAAA,YACjB,WAAW;AAAA,UAAA;AAAA,QAEf;AAAA,QACC,GAAGA;AAAA,MAAA;AAAA,IAAA;AAAA,EACN;AACF,CAEH,GCrDK+C,KAAkB,MAAM;AAC5B,QAAM7D,IAAaX,EAAc,GAC3ByE,IAAgB9D,KAAA,gBAAAA,EAAY,eAC5B,EAAE,gBAAgB+D,GAAiB,uBAAAlB,IAAwB,EAAA,IAC/DX,EAAqB,GACjB8B,IAAcF,IAChB,KAAK,OAAOC,KAAmB,KAAK,CAAC,IACrCA,GACE,CAACE,GAAOC,CAAW,IAAIC,EAAU;AAAA,IACrC,SAASH,KAAe;AAAA,EAAA,CACzB,GACKI,IAAM,GACNC,IAAM,KAAK;AAAA,IACf;AAAA,IACAP,IACI,KAAK,OAAOjB,IAAwB,KAAK,CAAC,IAC1CA,IAAwB;AAAA,EAC9B;AAEA,SAAAlC,EAAU,MAAM;AACF,IAAAuD,EAAA,SAASF,KAAe,CAAC;AAAA,EAAA,GACpC,CAACA,GAAaE,CAAW,CAAC,GAEtB;AAAA,IACL,OAAAD;AAAA,IACA,aAAAC;AAAA,IACA,KAAAE;AAAA,IACA,KAAAC;AAAA,EACF;AACF,GAEaC,KAAW,MAAM;AAC5B,QAAMpF,IAASC,EAAU,GACnBa,IAAaX,EAAc,GAC3B,EAAE,UAAAkF,EAAS,IAAIjF,EAAW,MAAMJ,KAAA,gBAAAA,EAAQ,QAAQ,QAAQ,CAAE,CAAA,KAAK,CAAC,GAChEsF,KAAUD,KAAA,gBAAAA,EAAU,sBAAqB,OACzCT,IAAgB9D,KAAA,gBAAAA,EAAY,eAC5B,EAAE,uBAAA6C,IAAwB,GAAG,sBAAAT,EAAA,IACjCF,EAAqB,GACjBuC,IAAO,GACPC,IAA0BtC,GAC1B,EAAE,OAAA6B,GAAO,aAAAC,GAAa,KAAAE,GAAK,KAAAC,EAAA,IAAQR,GAAgB,GAEnDc,IACJC;AAAA,IACE,CAACC,MAAW;AACJ,YAAA,CAACZ,IAAQ,CAAC,IAAI,MAAM,QAAQY,CAAM,IAAIA,IAAS,CAACA,CAAM;AAE5D,MAAAX,EAAY,SAASD,CAAK;AAEpB,YAAAa,IAAYhB,IACd,KAAK,MAAMG,CAAK,IAAI,IACpB,KAAK,MAAMA,CAAK;AAEpB,MAAKS,IAMHxF,KAAA,QAAAA,EAAQ,WAAW,oBAAoB;AAAA,QACrC,WAAA4F;AAAA,QACA,aAAa5F,EAAO,WAAW,WAAW,uBAAuB;AAAA,QACjE,WAAW;AAAA,MAAA,KARbA,KAAA,QAAAA,EAAQ,WAAW,sBAAsB;AAAA,QACvC,mBAAmB4F;AAAA,QACnB,WAAW;AAAA,MAAA;AAAA,IASjB;AAAA,IACA,CAAC5F,GAAQ4E,GAAeI,GAAaQ,CAAuB;AAAA,EAC9D;AA0BF,SAjBAK;AAAA,IACE,MACE7F,KAAA,gBAAAA,EAAQ,WAAW,aAAa;AAAA,MAC9B,UAAU;AAAA,MACV,SAASgF,EAAY;AAAA,IAAA;AAAA,IAEzB,CAAChF,GAAQgF,CAAW;AAAA,EACtB,GAWErB,MAA0B,KACzBiB,KAAiBjB,MAA0B,IAErC,OAOP,gBAAA1C;AAAA,IAACyD;AAAA,IAAA;AAAA,MACC,OAAO,CAACK,CAAK;AAAA,MACb,KAAAI;AAAA,MACA,KAAAD;AAAA,MACA,SAAAI;AAAA,MACA,MAAAC;AAAA,MACA,UAAAE;AAAA,IAAA;AAAA,EACF;AAiBJ,GC3HaK,KAAY,CAAC,EAAE,MAAAC,QAA8B;AACxD,QAAM/F,IAASC,EAAU,GACnB+F,IAAa5F,EAAW,MAAMJ,KAAA,gBAAAA,EAAQ,WAAW,QAAQ,CAACA,CAAM,CAAC,GACjEiG,IAAW7F,EAAW,MAAMJ,KAAA,gBAAAA,EAAQ,SAAS,SAAS,CAACA,CAAM,CAAC,GAC9DkG,KAAsBD,KAAA,gBAAAA,EAAU,+BAA8B;AAEpE,2BACG7B,GAAS,EAAA,SAAS2B,GAAM,UAAS,UAAS,QAAQ,KACjD,UAAA;AAAA,IAAA,gBAAA9E;AAAA,MAACwB;AAAA,MAAA;AAAA,QACC,cAAW;AAAA,QACX,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,YAAY;AAAA,QACZ,SAAS,MAAMzC,KAAA,gBAAAA,EAAQ,WAAW;AAAA,QAClC,UACE,EAACgG,KAAA,QAAAA,EAAY,uBAAsB,EAACA,KAAA,QAAAA,EAAY;AAAA,QAGjD,UAAsBE,IAAA,gBAAAjF,EAACkF,GAAgB,CAAA,CAAA,sBAAMC,GAAkB,CAAA,CAAA;AAAA,MAAA;AAAA,IAClE;AAAA,IACA,gBAAAjF;AAAA,MAAC8C;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,KAAK;AAAA,QACL,YAAW;AAAA,QACX,UAAS;AAAA,QACT,IAAI;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAhD,EAAC2C,IAAsB,EAAA;AAAA,UACtB,gBAAA3C,EAAAC,GAAA,EAAI,QAAQ,GAAG,MAAM,KAAK,OAAM,QAAO,UAAS,WAC/C,UAAC,gBAAAD,EAAAmE,IAAA,CAAA,CAAS,EACZ,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,IACA,gBAAAnE;AAAA,MAACwB;AAAA,MAAA;AAAA,QACC,cAAW;AAAA,QACX,MAAK;AAAA,QACL,YAAY;AAAA,QACZ,SAAQ;AAAA,QACR,UACE,EAACuD,KAAA,QAAAA,EAAY,wBAAuB,EAACA,KAAA,QAAAA,EAAY;AAAA,QAEnD,SAAS,MAAM;AACb,UAAAhG,KAAA,QAAAA,EAAQ,WAAW;AAAA,QACrB;AAAA,QAEC,UAAsBkG,IAAA,gBAAAjF,EAACoF,GAAkB,CAAA,CAAA,sBAAMC,GAAmB,CAAA,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACrE,GACF;AAEJ,GCxDaC,KAAgB,MAAM;AACjC,QAAM,CAACC,GAAcC,CAAe,IAAIjF,EAAS,EAAK,GAEhDkF,IAA0BhB,EAAY,MACtC,SAAS,oBACJ,SACJ,iBACA,MAAM,QAAQ,KAAK,EACnB,KAAK,MAAM;AACV,IAAAe,EAAgB,EAAK;AAAA,EAAA,CACtB,IAGE,SAAS,gBACb,kBAAkB,EAAE,cAAc,QAAQ,EAC1C,MAAM,QAAQ,KAAK,EACnB,KAAK,MAAM;AACV,IAAAA,EAAgB,EAAI;AAAA,EAAA,CACrB,GACF,EAAE;AAEL,SAAAhF,EAAU,MAAM;AACd,aAASkF,IAA0B;AACjB,MAAAF,EAAA,CAAC,CAAC,SAAS,iBAAiB;AAAA,IAAA;AAGrC,oBAAA,iBAAiB,oBAAoBE,CAAuB,GAE9D,MAAM;AACF,eAAA,oBAAoB,oBAAoBA,CAAuB;AAAA,IAC1E;AAAA,EACF,GAAG,EAAE,GAEE;AAAA,IACL,cAAAH;AAAA,IACA,yBAAAE;AAAA,EACF;AACF,GCnCaE,KAAS,CAAC;AAAA,EACrB,MAAAb;AAAA,EACA,aAAAc;AAAA,EACA,aAAAC;AACF,MAIM;AACJ,QAAM9G,IAASC,EAAU,GACnBoF,IAAWjF,EAAW,MAAMJ,KAAA,gBAAAA,EAAQ,QAAQ,WAAW,CAACA,CAAM,CAAC,GAC/D,EAAE,cAAAwG,GAAc,yBAAAE,EAAwB,IAAIH,GAAc;AAG9D,SAAA,gBAAApF;AAAA,IAACiD;AAAA,IAAA;AAAA,MACC,SAAS2B;AAAA,MACT,UAAS;AAAA,MACT,QAAO;AAAA,MACP,gBAAe;AAAA,MAEf,UAAA;AAAA,QAAA,gBAAA9E;AAAA,UAACwB;AAAA,UAAA;AAAA,YACC,cAAW;AAAA,YACX,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,YAAY;AAAA,YACZ,SAASoE;AAAA,YAET,4BAACE,IAAe,CAAA,CAAA;AAAA,UAAA;AAAA,QAClB;AAAA,QACA,gBAAA9F;AAAA,UAACgD;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,YACL,YAAW;AAAA,YACX,UAAS;AAAA,YACT,IAAI;AAAA,YAEJ,4BAAC7C,GAAK,EAAA,UAAQ,IAAC,UAAS,QACrB,iCAAU,MACb,CAAA;AAAA,UAAA;AAAA,QACF;AAAA,0BACC8C,GACC,EAAA,UAAA;AAAA,UAAA,gBAAAjD;AAAA,YAACwB;AAAA,YAAA;AAAA,cACC,cAAW;AAAA,cACX,MAAK;AAAA,cACL,YAAY;AAAA,cACZ,SAAQ;AAAA,cACR,SAASqE;AAAA,cAET,4BAACE,IAAS,CAAA,CAAA;AAAA,YAAA;AAAA,UACZ;AAAA,UACA,gBAAA/F;AAAA,YAACwB;AAAA,YAAA;AAAA,cACC,cAAW;AAAA,cACX,MAAK;AAAA,cACL,YAAY;AAAA,cACZ,SAAQ;AAAA,cACR,SAASiE;AAAA,cAER,UAAeF,IAAA,gBAAAvF,EAACgG,IAAiB,CAAA,CAAA,sBAAMC,IAAa,CAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACvD,EACF,CAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF;AAEJ,GCnEaC,KAAYrH;AAAA,EACvB,CAAC;AAAA,IACC,MAAAiG;AAAA,IACA,aAAAc;AAAA,IACA,aAAAC;AAAA,EAAA,MAII,gBAAA3F,EAAAgD,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAAlD;AAAA,MAAC2F;AAAA,MAAA;AAAA,QACC,MAAAb;AAAA,QACA,aAAAc;AAAA,QACA,aAAAC;AAAA,MAAA;AAAA,IACF;AAAA,IACA,gBAAA7F,EAAC6E,MAAU,MAAAC,EAAY,CAAA;AAAA,EAAA,GACzB;AAGN,GCfaqB,KAAc,CAAC;AAAA,EAC1B,oBAAAC,IAAqB;AAAA,EACrB,wBAAAC,IAAyB;AAAA,EACzB,MAAAvB;AAAA,EACA,GAAG1D;AACL,MAMO,gBAAAlB,EAAAgD,GAAA,EAAA,UAAA;AAAA,EACCmD,KAAA,gBAAArG;AAAA,IAACqD;AAAA,IAAA;AAAA,MACC,SAAS,CAACyB;AAAA,MACV,eAAe,EAAE,OAAO,WAAW,SAAS,WAAW;AAAA,MACvD,mBAAkB;AAAA,MAElB,4BAAClF,IAAiB,CAAA,CAAA;AAAA,IAAA;AAAA,EACpB;AAAA,EAED,gBAAAI,EAAAkG,IAAA,EAAU,MAAApB,GAAa,GAAG1D,EAAM,CAAA;AAAA,EACjC,gBAAApB;AAAA,IAACqD;AAAA,IAAA;AAAA,MACC,SAAS+C,KAAsBtB;AAAA,MAC/B,eAAe,EAAE,OAAO,WAAW,SAAS,WAAW;AAAA,MACvD,mBAAkB;AAAA,MAClB,UAAS;AAAA,MAET,4BAAClE,IAAa,CAAA,CAAA;AAAA,IAAA;AAAA,EAAA;AAChB,GACF;"}
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(i,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("react/jsx-runtime"),require("react"),require("@chakra-ui/react"),require("react-icons/rx"),require("reactjrx"),require("react-icons/hi"),require("rxjs"),require("rc-slider"),require("rc-slider/assets/index.css"),require("react-icons/io"),require("react-icons/md")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","@chakra-ui/react","react-icons/rx","reactjrx","react-icons/hi","rxjs","rc-slider","rc-slider/assets/index.css","react-icons/io","react-icons/md"],t):(i=typeof globalThis<"u"?globalThis:i||self,t(i["prose-react-reader"]={},i.jsxRuntime,i.React,i.react,i.rx,i.reactjrx,i.hi,i.rxjs,i.RcSlider,null,i.io,i.md))})(this,function(i,t,a,s,b,f,B,I,D,Z,k,w){"use strict";function $(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(r,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return r.default=e,Object.freeze(r)}const p=$(a),y=a.createContext(void 0),m=()=>a.useContext(y),z=p.forwardRef(function(r,o){const{showArrow:n,children:l,portalled:c=!0,content:d,portalRef:g,...u}=r;return t.jsxs(s.Popover.Root,{...u,positioning:{...u.positioning,gutter:4},children:[t.jsx(s.Popover.Trigger,{asChild:!0,children:l}),t.jsx(s.Portal,{disabled:!c,container:g,children:t.jsx(s.Popover.Positioner,{children:t.jsxs(s.Popover.Content,{width:"auto",px:"2",py:"1",textStyle:"xs",rounded:"sm",ref:o,children:[n&&t.jsx(s.Popover.Arrow,{children:t.jsx(s.Popover.ArrowTip,{})}),d]})})})]})}),E=p.forwardRef(function(r,o){const{children:n,...l}=r;return t.jsx(z,{content:n,...l,ref:o,children:t.jsx(s.IconButton,{variant:"ghost","aria-label":"info",size:"2xs",colorPalette:"gray",children:t.jsx(B.HiOutlineInformationCircle,{})})})}),M=p.forwardRef(function(r,o){return t.jsx(s.Progress.Track,{...r,ref:o,children:t.jsx(s.Progress.Range,{})})});p.forwardRef(function(r,o){const{children:n,info:l,...c}=r;return t.jsxs(s.Progress.Label,{...c,ref:o,children:[n,l&&t.jsx(E,{children:l})]})});const F=s.Progress.Root,q=s.Progress.ValueText,P=()=>{const e=m();return f.useObserve(()=>e?I.combineLatest([e.pagination.state$,e.context.state$]).pipe(I.map(([r,o])=>{var l;const n=(l=o.manifest)==null?void 0:l.spineItems.every(c=>{var d;return(d=c.mediaType)==null?void 0:d.startsWith("image/")});return{...r,hasChapters:!o.isFullyPrePaginated&&!n}})):I.NEVER,[e])},S=()=>{const e=P(),r=(e==null?void 0:e.numberOfTotalPages)===1,o=((e==null?void 0:e.beginNumberOfPagesInSpineItem)??0)>1,n=((e==null?void 0:e.endNumberOfPagesInSpineItem)??0)>1,l=(e!=null&&e.hasChapters?e==null?void 0:e.beginPageIndexInSpineItem:e==null?void 0:e.beginAbsolutePageIndex)??0,c=(e!=null&&e.hasChapters?e==null?void 0:e.endPageIndexInSpineItem:e==null?void 0:e.endAbsolutePageIndex)??0,[d=0,g=0]=[l,c].sort((x,v)=>x-v),u=(e==null?void 0:e.beginPageIndexInSpineItem)!==(e==null?void 0:e.endPageIndexInSpineItem)||(e==null?void 0:e.beginSpineItemIndex)!==(e==null?void 0:e.endSpineItemIndex),h=e!=null&&e.hasChapters?e==null?void 0:e.beginNumberOfPagesInSpineItem:e==null?void 0:e.numberOfTotalPages;return{hasOnlyOnePage:r,beginPageIndex:l,endPageIndex:c,isBeginWithinChapter:o,isEndWithinChapter:n,beginAndEndAreDifferent:u,totalApproximatePages:h,leftPageIndex:d,rightPageIndex:g}},W=()=>{const e=P(),{hasOnlyOnePage:r,leftPageIndex:o,rightPageIndex:n,totalApproximatePages:l,beginAndEndAreDifferent:c}=S(),d=Math.round(((e==null?void 0:e.percentageEstimateOfBook)??0)*100),g=h=>h!=null&&h.subChapter?`${h.title} / ${g(h.subChapter)}`:(h==null?void 0:h.title)||"",u=g(e==null?void 0:e.beginChapterInfo);return t.jsxs(s.Stack,{alignItems:"center",gap:1,maxW:"100%",overflow:"auto",children:[t.jsx(F,{value:d,size:"xs",width:150,children:t.jsxs(s.HStack,{justifyContent:"space-between",children:[t.jsx(M,{width:110}),t.jsx(q,{children:`${d}%`})]})}),t.jsx(s.Text,{truncate:!0,maxWidth:"100%",fontSize:"sm",mt:1,children:u?`Chapter: ${u}`:" "}),!r&&t.jsxs(s.HStack,{children:[t.jsx(s.Text,{fontSize:"xs",children:c?`${o+1} - ${n+1} of ${l}`:`${o+1} of ${l}`}),!!(e!=null&&e.hasChapters)&&t.jsxs(t.Fragment,{children:[t.jsx(s.Text,{children:"-"}),t.jsxs(s.Text,{fontSize:"xs",children:["(",((e==null?void 0:e.beginAbsolutePageIndex)??0)+1,")"]})]})]})]})},O=a.memo(({children:e,position:r,...o})=>t.jsx(s.Presence,{display:"flex",flexDirection:"row",width:"100%",position:"absolute",...r==="bottom"?{bottom:0}:{top:0},animationName:r==="bottom"?{_open:"slide-from-bottom, fade-in",_closed:"slide-to-bottom, fade-out"}:{_open:"slide-from-top, fade-in",_closed:"slide-to-top, fade-out"},animationDuration:"moderate",bgColor:"bg.panel",alignItems:"center",justifyContent:"center",shadow:"md",px:4,...o,children:e})),j=s.chakra(D),L=a.memo(e=>t.jsx(s.Box,{display:"contents",css:{"--bg":"colors.bg","--bg-emphasized":"colors.bg.emphasized","--color-solid":"colors.colorPalette.solid"},children:t.jsx(j,{keyboard:!1,style:{padding:0},css:{"& > .rc-slider-handle:focus-visible":{boxShadow:"0 0 0 2px var(--color-solid) !important"},"& > .rc-slider-handle:active":{boxShadow:"0 0 5px var(--color-solid) !important"},"& > .rc-slider-handle.rc-slider-handle-dragging":{boxShadow:"0 0 0 3px var(--color-solid) !important"}},styles:{rail:{height:"8px",top:"50%",transform:"translateY(-50%)",backgroundColor:"var(--bg-emphasized)"},track:{height:"8px",top:"50%",transform:"translateY(-50%)",backgroundColor:"var(--color-solid)"},handle:{width:"24px",height:"24px",top:"50%",borderColor:"var(--color-solid)",transform:`translate(${e.reverse?"50%":"-50%"}, -50%)`,backgroundColor:"var(--bg)",marginTop:"0px"}},...e})})),_=()=>{const e=P(),r=e==null?void 0:e.isUsingSpread,{beginPageIndex:o,totalApproximatePages:n=0}=S(),l=r?Math.floor((o||0)/2):o,[c,d]=f.useSignal({default:l||0}),g=0,u=Math.max(0,r?Math.floor((n-1)/2):n-1);return a.useEffect(()=>{d.setValue(l||0)},[l,d]),{value:c,valueSignal:d,min:g,max:u}},N=()=>{const e=m(),r=P(),{manifest:o}=f.useObserve(()=>e==null?void 0:e.context.state$,[])??{},n=(o==null?void 0:o.readingDirection)==="rtl",l=r==null?void 0:r.isUsingSpread,{totalApproximatePages:c=0,isBeginWithinChapter:d}=S(),g=1,u=d,{value:h,valueSignal:x,min:v,max:K}=_(),X=a.useCallback(T=>{const[C=0]=Array.isArray(T)?T:[T];x.setValue(C);const A=l?Math.floor(C)*2:Math.floor(C);u?e==null||e.navigation.goToPageOfSpineItem({pageIndex:A,spineItemId:e.pagination.getState().beginSpineItemIndex??0,animation:!1}):e==null||e.navigation.goToAbsolutePageIndex({absolutePageIndex:A,animation:!1})},[e,l,x,u]);return f.useSubscribe(()=>e==null?void 0:e.navigation.throttleLock({duration:100,trigger:x.subject}),[e,x]),c===1||l&&c===2?null:t.jsx(L,{value:[h],max:K,min:v,reverse:n,step:g,onChange:X})},V=()=>{const[e,r]=a.useState(new Date);return a.useEffect(()=>{const o=setInterval(()=>{r(new Date)},6e4);return()=>clearInterval(o)},[]),e},U=e=>{const r=V();return t.jsx(s.Text,{fontSize:"xs",...e,children:r.toLocaleTimeString(navigator.language,{hour:"2-digit",minute:"2-digit"})})},H=({open:e})=>{const r=m(),o=f.useObserve(()=>r==null?void 0:r.navigation.state$,[r]),n=f.useObserve(()=>r==null?void 0:r.settings.values$,[r]),l=(n==null?void 0:n.computedPageTurnDirection)==="vertical";return t.jsxs(O,{present:e,position:"bottom",height:130,children:[t.jsx(s.IconButton,{"aria-label":"left",size:"lg",variant:"ghost",flexShrink:0,onClick:()=>r==null?void 0:r.navigation.goToLeftOrTopSpineItem(),disabled:!(o!=null&&o.canGoLeftSpineItem)&&!(o!=null&&o.canGoTopSpineItem),children:l?t.jsx(b.RxDoubleArrowUp,{}):t.jsx(b.RxDoubleArrowLeft,{})}),t.jsxs(s.Stack,{flex:1,maxW:400,gap:2,alignItems:"center",overflow:"visible",px:4,children:[t.jsx(W,{}),t.jsx(s.Box,{height:5,maxW:300,width:"100%",overflow:"visible",children:t.jsx(N,{})})]}),t.jsx(s.IconButton,{"aria-label":"right",size:"lg",flexShrink:0,variant:"ghost",disabled:!(o!=null&&o.canGoRightSpineItem)&&!(o!=null&&o.canGoBottomSpineItem),onClick:()=>{r==null||r.navigation.goToRightOrBottomSpineItem()},children:l?t.jsx(b.RxDoubleArrowDown,{}):t.jsx(b.RxDoubleArrowRight,{})}),t.jsx(U,{position:"absolute",bottom:0,left:0,p:2})]})},G=()=>{const[e,r]=a.useState(!1),o=a.useCallback(()=>document.fullscreenElement?document.exitFullscreen().catch(console.error).then(()=>{r(!1)}):document.documentElement.requestFullscreen({navigationUI:"hide"}).catch(console.error).then(()=>{r(!0)}),[]);return a.useEffect(()=>{function n(){r(!!document.fullscreenElement)}return document.addEventListener("fullscreenchange",n),()=>{document.removeEventListener("fullscreenchange",n)}},[]),{isFullscreen:e,onToggleFullscreenClick:o}},Q=({open:e,onBackClick:r,onMoreClick:o})=>{const n=m(),l=f.useObserve(()=>n==null?void 0:n.context.manifest$,[n]),{isFullscreen:c,onToggleFullscreenClick:d}=G();return t.jsxs(O,{present:e,position:"top",height:"80px",justifyContent:"space-between",children:[t.jsx(s.IconButton,{"aria-label":"left",size:"lg",variant:"ghost",flexShrink:0,onClick:r,children:t.jsx(k.IoIosArrowBack,{})}),t.jsx(s.Stack,{flex:1,maxW:600,gap:1,alignItems:"center",overflow:"auto",px:4,children:t.jsx(s.Text,{truncate:!0,maxWidth:"100%",children:l==null?void 0:l.title})}),t.jsxs(s.HStack,{children:[t.jsx(s.IconButton,{"aria-label":"right",size:"lg",flexShrink:0,variant:"ghost",onClick:o,children:t.jsx(k.IoMdMore,{})}),t.jsx(s.IconButton,{"aria-label":"right",size:"lg",flexShrink:0,variant:"ghost",onClick:d,children:c?t.jsx(w.MdFullscreenExit,{}):t.jsx(w.MdFullscreen,{})})]})]})},Y=a.memo(({open:e,onBackClick:r,onMoreClick:o})=>t.jsxs(t.Fragment,{children:[t.jsx(Q,{open:e,onBackClick:r,onMoreClick:o}),t.jsx(H,{open:e})]})),J=a.memo(({children:e,reader:r})=>t.jsx(y.Provider,{value:r,children:e}));i.QuickMenu=Y,i.ReactReaderProvider=J,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(i,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("react/jsx-runtime"),require("react"),require("@chakra-ui/react"),require("reactjrx"),require("rxjs"),require("react-icons/rx"),require("react-icons/hi"),require("rc-slider"),require("rc-slider/assets/index.css"),require("react-icons/io"),require("react-icons/md")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","@chakra-ui/react","reactjrx","rxjs","react-icons/rx","react-icons/hi","rc-slider","rc-slider/assets/index.css","react-icons/io","react-icons/md"],r):(i=typeof globalThis<"u"?globalThis:i||self,r(i["prose-react-reader"]={},i.jsxRuntime,i.React,i.react,i.reactjrx,i.rxjs,i.rx,i.hi,i.RcSlider,null,i.io,i.md))})(this,function(i,r,a,s,f,I,p,A,D,re,k,w){"use strict";function E(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const m=E(a),O=a.createContext(void 0),z=a.memo(({children:e,reader:t})=>r.jsx(O.Provider,{value:t,children:e})),P=()=>a.useContext(O),b=()=>{const e=P();return f.useObserve(()=>e?I.combineLatest([e.pagination.state$,e.context.state$]).pipe(I.map(([t,o])=>{var l;const n=(l=o.manifest)==null?void 0:l.spineItems.every(c=>{var d;return(d=c.mediaType)==null?void 0:d.startsWith("image/")});return{...t,hasChapters:!o.isFullyPrePaginated&&!n}})):I.NEVER,[e])},F=()=>{const e=b(),t=Math.floor(((e==null?void 0:e.percentageEstimateOfBook)??0)*100),o=t>0?t:1;return(e==null?void 0:e.percentageEstimateOfBook)===void 0?null:r.jsx(s.Box,{position:"absolute",right:0,bottom:0,p:2,children:r.jsxs(s.Text,{fontSize:"sm",children:[o," %"]})})},$=()=>{const[e,t]=a.useState(new Date);return a.useEffect(()=>{const o=setInterval(()=>{t(new Date)},6e4);return()=>clearInterval(o)},[]),e},M=e=>{const t=$();return r.jsx(s.Text,{fontSize:"xs",...e,children:t.toLocaleTimeString(navigator.language,{hour:"2-digit",minute:"2-digit"})})},q=()=>r.jsx(s.Box,{position:"absolute",left:0,bottom:0,p:2,children:r.jsx(M,{})}),_=m.forwardRef(function(t,o){const{showArrow:n,children:l,portalled:c=!0,content:d,portalRef:g,...h}=t;return r.jsxs(s.Popover.Root,{...h,positioning:{...h.positioning,gutter:4},children:[r.jsx(s.Popover.Trigger,{asChild:!0,children:l}),r.jsx(s.Portal,{disabled:!c,container:g,children:r.jsx(s.Popover.Positioner,{children:r.jsxs(s.Popover.Content,{width:"auto",px:"2",py:"1",textStyle:"xs",rounded:"sm",ref:o,children:[n&&r.jsx(s.Popover.Arrow,{children:r.jsx(s.Popover.ArrowTip,{})}),d]})})})]})}),W=m.forwardRef(function(t,o){const{children:n,...l}=t;return r.jsx(_,{content:n,...l,ref:o,children:r.jsx(s.IconButton,{variant:"ghost","aria-label":"info",size:"2xs",colorPalette:"gray",children:r.jsx(A.HiOutlineInformationCircle,{})})})}),L=m.forwardRef(function(t,o){return r.jsx(s.Progress.Track,{...t,ref:o,children:r.jsx(s.Progress.Range,{})})});m.forwardRef(function(t,o){const{children:n,info:l,...c}=t;return r.jsxs(s.Progress.Label,{...c,ref:o,children:[n,l&&r.jsx(W,{children:l})]})});const j=s.Progress.Root,N=s.Progress.ValueText,S=()=>{const e=b(),t=(e==null?void 0:e.numberOfTotalPages)===1,o=((e==null?void 0:e.beginNumberOfPagesInSpineItem)??0)>1,n=((e==null?void 0:e.endNumberOfPagesInSpineItem)??0)>1,l=(e!=null&&e.hasChapters?e==null?void 0:e.beginPageIndexInSpineItem:e==null?void 0:e.beginAbsolutePageIndex)??0,c=(e!=null&&e.hasChapters?e==null?void 0:e.endPageIndexInSpineItem:e==null?void 0:e.endAbsolutePageIndex)??0,[d=0,g=0]=[l,c].sort((x,v)=>x-v),h=(e==null?void 0:e.beginPageIndexInSpineItem)!==(e==null?void 0:e.endPageIndexInSpineItem)||(e==null?void 0:e.beginSpineItemIndex)!==(e==null?void 0:e.endSpineItemIndex),u=e!=null&&e.hasChapters?e==null?void 0:e.beginNumberOfPagesInSpineItem:e==null?void 0:e.numberOfTotalPages;return{hasOnlyOnePage:t,beginPageIndex:l,endPageIndex:c,isBeginWithinChapter:o,isEndWithinChapter:n,beginAndEndAreDifferent:h,totalApproximatePages:u,leftPageIndex:d,rightPageIndex:g}},V=()=>{const e=b(),{hasOnlyOnePage:t,leftPageIndex:o,rightPageIndex:n,totalApproximatePages:l,beginAndEndAreDifferent:c}=S(),d=Math.round(((e==null?void 0:e.percentageEstimateOfBook)??0)*100),g=u=>u!=null&&u.subChapter?`${u.title} / ${g(u.subChapter)}`:(u==null?void 0:u.title)||"",h=g(e==null?void 0:e.beginChapterInfo);return r.jsxs(s.Stack,{alignItems:"center",gap:1,maxW:"100%",overflow:"auto",children:[r.jsx(j,{value:d,size:"xs",width:150,children:r.jsxs(s.HStack,{justifyContent:"space-between",children:[r.jsx(L,{width:110}),r.jsx(N,{children:`${d}%`})]})}),r.jsx(s.Text,{truncate:!0,maxWidth:"100%",fontSize:"sm",mt:1,children:h?`Chapter: ${h}`:" "}),!t&&r.jsxs(s.HStack,{children:[r.jsx(s.Text,{fontSize:"xs",children:c?`${o+1} - ${n+1} of ${l}`:`${o+1} of ${l}`}),!!(e!=null&&e.hasChapters)&&r.jsxs(r.Fragment,{children:[r.jsx(s.Text,{children:"-"}),r.jsxs(s.Text,{fontSize:"xs",children:["(",((e==null?void 0:e.beginAbsolutePageIndex)??0)+1,")"]})]})]})]})},y=a.memo(({children:e,position:t,...o})=>r.jsx(s.Presence,{display:"flex",flexDirection:"row",width:"100%",position:"absolute",...t==="bottom"?{bottom:0}:{top:0},animationName:t==="bottom"?{_open:"slide-from-bottom, fade-in",_closed:"slide-to-bottom, fade-out"}:{_open:"slide-from-top, fade-in",_closed:"slide-to-top, fade-out"},animationDuration:"moderate",bgColor:"bg.panel",alignItems:"center",justifyContent:"center",shadow:"md",px:4,...o,children:e})),U=s.chakra(D),H=a.memo(e=>r.jsx(s.Box,{display:"contents",css:{"--bg":"colors.bg","--bg-emphasized":"colors.bg.emphasized","--color-solid":"colors.colorPalette.solid"},children:r.jsx(U,{keyboard:!1,style:{padding:0},css:{"& > .rc-slider-handle:focus-visible":{boxShadow:"0 0 0 2px var(--color-solid) !important"},"& > .rc-slider-handle:active":{boxShadow:"0 0 5px var(--color-solid) !important"},"& > .rc-slider-handle.rc-slider-handle-dragging":{boxShadow:"0 0 0 3px var(--color-solid) !important"}},styles:{rail:{height:"8px",top:"50%",transform:"translateY(-50%)",backgroundColor:"var(--bg-emphasized)"},track:{height:"8px",top:"50%",transform:"translateY(-50%)",backgroundColor:"var(--color-solid)"},handle:{width:"24px",height:"24px",top:"50%",borderColor:"var(--color-solid)",transform:`translate(${e.reverse?"50%":"-50%"}, -50%)`,backgroundColor:"var(--bg)",marginTop:"0px"}},...e})})),G=()=>{const e=b(),t=e==null?void 0:e.isUsingSpread,{beginPageIndex:o,totalApproximatePages:n=0}=S(),l=t?Math.floor((o||0)/2):o,[c,d]=f.useSignal({default:l||0}),g=0,h=Math.max(0,t?Math.floor((n-1)/2):n-1);return a.useEffect(()=>{d.setValue(l||0)},[l,d]),{value:c,valueSignal:d,min:g,max:h}},Q=()=>{const e=P(),t=b(),{manifest:o}=f.useObserve(()=>e==null?void 0:e.context.state$,[])??{},n=(o==null?void 0:o.readingDirection)==="rtl",l=t==null?void 0:t.isUsingSpread,{totalApproximatePages:c=0,isBeginWithinChapter:d}=S(),g=1,h=d,{value:u,valueSignal:x,min:v,max:R}=G(),ee=a.useCallback(T=>{const[C=0]=Array.isArray(T)?T:[T];x.setValue(C);const B=l?Math.floor(C)*2:Math.floor(C);h?e==null||e.navigation.goToPageOfSpineItem({pageIndex:B,spineItemId:e.pagination.getState().beginSpineItemIndex??0,animation:!1}):e==null||e.navigation.goToAbsolutePageIndex({absolutePageIndex:B,animation:!1})},[e,l,x,h]);return f.useSubscribe(()=>e==null?void 0:e.navigation.throttleLock({duration:100,trigger:x.subject}),[e,x]),c===1||l&&c===2?null:r.jsx(H,{value:[u],max:R,min:v,reverse:n,step:g,onChange:ee})},Y=({open:e})=>{const t=P(),o=f.useObserve(()=>t==null?void 0:t.navigation.state$,[t]),n=f.useObserve(()=>t==null?void 0:t.settings.values$,[t]),l=(n==null?void 0:n.computedPageTurnDirection)==="vertical";return r.jsxs(y,{present:e,position:"bottom",height:130,children:[r.jsx(s.IconButton,{"aria-label":"left",size:"lg",variant:"ghost",flexShrink:0,onClick:()=>t==null?void 0:t.navigation.goToLeftOrTopSpineItem(),disabled:!(o!=null&&o.canGoLeftSpineItem)&&!(o!=null&&o.canGoTopSpineItem),children:l?r.jsx(p.RxDoubleArrowUp,{}):r.jsx(p.RxDoubleArrowLeft,{})}),r.jsxs(s.Stack,{flex:1,maxW:400,gap:2,alignItems:"center",overflow:"visible",px:4,children:[r.jsx(V,{}),r.jsx(s.Box,{height:5,maxW:300,width:"100%",overflow:"visible",children:r.jsx(Q,{})})]}),r.jsx(s.IconButton,{"aria-label":"right",size:"lg",flexShrink:0,variant:"ghost",disabled:!(o!=null&&o.canGoRightSpineItem)&&!(o!=null&&o.canGoBottomSpineItem),onClick:()=>{t==null||t.navigation.goToRightOrBottomSpineItem()},children:l?r.jsx(p.RxDoubleArrowDown,{}):r.jsx(p.RxDoubleArrowRight,{})})]})},J=()=>{const[e,t]=a.useState(!1),o=a.useCallback(()=>document.fullscreenElement?document.exitFullscreen().catch(console.error).then(()=>{t(!1)}):document.documentElement.requestFullscreen({navigationUI:"hide"}).catch(console.error).then(()=>{t(!0)}),[]);return a.useEffect(()=>{function n(){t(!!document.fullscreenElement)}return document.addEventListener("fullscreenchange",n),()=>{document.removeEventListener("fullscreenchange",n)}},[]),{isFullscreen:e,onToggleFullscreenClick:o}},K=({open:e,onBackClick:t,onMoreClick:o})=>{const n=P(),l=f.useObserve(()=>n==null?void 0:n.context.manifest$,[n]),{isFullscreen:c,onToggleFullscreenClick:d}=J();return r.jsxs(y,{present:e,position:"top",height:"80px",justifyContent:"space-between",children:[r.jsx(s.IconButton,{"aria-label":"left",size:"lg",variant:"ghost",flexShrink:0,onClick:t,children:r.jsx(k.IoIosArrowBack,{})}),r.jsx(s.Stack,{flex:1,maxW:600,gap:1,alignItems:"center",overflow:"auto",px:4,children:r.jsx(s.Text,{truncate:!0,maxWidth:"100%",children:l==null?void 0:l.title})}),r.jsxs(s.HStack,{children:[r.jsx(s.IconButton,{"aria-label":"right",size:"lg",flexShrink:0,variant:"ghost",onClick:o,children:r.jsx(k.IoMdMore,{})}),r.jsx(s.IconButton,{"aria-label":"right",size:"lg",flexShrink:0,variant:"ghost",onClick:d,children:c?r.jsx(w.MdFullscreenExit,{}):r.jsx(w.MdFullscreen,{})})]})]})},X=a.memo(({open:e,onBackClick:t,onMoreClick:o})=>r.jsxs(r.Fragment,{children:[r.jsx(K,{open:e,onBackClick:t,onMoreClick:o}),r.jsx(Y,{open:e})]})),Z=({enableFloatingTime:e=!0,enableFloatingProgress:t=!0,open:o,...n})=>r.jsxs(r.Fragment,{children:[t&&r.jsx(s.Presence,{present:!o,animationName:{_open:"fade-in",_closed:"fade-out"},animationDuration:"moderate",children:r.jsx(F,{})}),r.jsx(X,{open:o,...n}),r.jsx(s.Presence,{present:e||o,animationName:{_open:"fade-in",_closed:"fade-out"},animationDuration:"slow",overflow:"hidden",children:r.jsx(q,{})})]});i.ReactReader=Z,i.ReactReaderProvider=z,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=index.umd.cjs.map
|
package/dist/index.umd.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.cjs","sources":["../src/context/context.ts","../src/context/useReader.ts","../src/components/ui/toggle-tip.tsx","../src/components/ui/progress.tsx","../src/pagination/usePagination.ts","../src/navigation/useNavigationContext.ts","../src/navigation/QuickMenu/PaginationInfoSection.tsx","../src/navigation/QuickMenu/QuickBar.tsx","../src/navigation/QuickMenu/ThemedSlider.tsx","../src/navigation/QuickMenu/Scrubber.tsx","../src/navigation/QuickMenu/TimeIndicator.tsx","../src/navigation/QuickMenu/BottomBar.tsx","../src/common/useFullscreen.ts","../src/navigation/QuickMenu/TopBar.tsx","../src/navigation/QuickMenu/QuickMenu.tsx","../src/context/ReactReaderProvider.tsx"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport { type Context, createContext } from \"react\"\n\nexport const ReaderContext: Context<Reader | undefined> = createContext<\n Reader | undefined\n>(undefined)\n","import type { Reader } from \"@prose-reader/core\"\nimport { useContext } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const useReader = (): Reader | undefined => {\n const context = useContext(ReaderContext)\n\n return context\n}\n","import { Popover as ChakraPopover, IconButton, Portal } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { HiOutlineInformationCircle } from \"react-icons/hi\"\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n showArrow?: boolean\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n content?: React.ReactNode\n}\n\nexport const ToggleTip = React.forwardRef<HTMLDivElement, ToggleTipProps>(\n function ToggleTip(props, ref) {\n const {\n showArrow,\n children,\n portalled = true,\n content,\n portalRef,\n ...rest\n } = props\n\n return (\n <ChakraPopover.Root\n {...rest}\n positioning={{ ...rest.positioning, gutter: 4 }}\n >\n <ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraPopover.Positioner>\n <ChakraPopover.Content\n width=\"auto\"\n px=\"2\"\n py=\"1\"\n textStyle=\"xs\"\n rounded=\"sm\"\n ref={ref}\n >\n {showArrow && (\n <ChakraPopover.Arrow>\n <ChakraPopover.ArrowTip />\n </ChakraPopover.Arrow>\n )}\n {content}\n </ChakraPopover.Content>\n </ChakraPopover.Positioner>\n </Portal>\n </ChakraPopover.Root>\n )\n },\n)\n\nexport const InfoTip = React.forwardRef<\n HTMLDivElement,\n Partial<ToggleTipProps>\n>(function InfoTip(props, ref) {\n const { children, ...rest } = props\n return (\n <ToggleTip content={children} {...rest} ref={ref}>\n <IconButton\n variant=\"ghost\"\n aria-label=\"info\"\n size=\"2xs\"\n colorPalette=\"gray\"\n >\n <HiOutlineInformationCircle />\n </IconButton>\n </ToggleTip>\n )\n})\n","import { Progress as ChakraProgress } from \"@chakra-ui/react\"\nimport { InfoTip } from \"./toggle-tip\"\nimport * as React from \"react\"\n\nexport const ProgressBar = React.forwardRef<\n HTMLDivElement,\n ChakraProgress.TrackProps\n>(function ProgressBar(props, ref) {\n return (\n <ChakraProgress.Track {...props} ref={ref}>\n <ChakraProgress.Range />\n </ChakraProgress.Track>\n )\n})\n\nexport interface ProgressLabelProps extends ChakraProgress.LabelProps {\n info?: React.ReactNode\n}\n\nexport const ProgressLabel = React.forwardRef<\n HTMLDivElement,\n ProgressLabelProps\n>(function ProgressLabel(props, ref) {\n const { children, info, ...rest } = props\n return (\n <ChakraProgress.Label {...rest} ref={ref}>\n {children}\n {info && <InfoTip>{info}</InfoTip>}\n </ChakraProgress.Label>\n )\n})\n\nexport const ProgressRoot = ChakraProgress.Root\nexport const ProgressValueText = ChakraProgress.ValueText\n","import type { Reader } from \"@prose-reader/core\"\nimport { useObserve } from \"reactjrx\"\nimport { NEVER, combineLatest, map } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\n\nexport const usePagination = ():\n | (Reader[\"pagination\"][\"state\"] & { hasChapters: boolean })\n | undefined => {\n const reader = useReader()\n\n return useObserve(\n () =>\n !reader\n ? NEVER\n : combineLatest([reader.pagination.state$, reader.context.state$]).pipe(\n map(([state, context]) => {\n const isOnlyImages = context.manifest?.spineItems.every((item) =>\n item.mediaType?.startsWith(\"image/\"),\n )\n\n return {\n ...state,\n hasChapters: !context.isFullyPrePaginated && !isOnlyImages,\n }\n }),\n ),\n [reader],\n )\n}\n","import { usePagination } from \"../pagination/usePagination\"\n\nexport const useNavigationContext = () => {\n const pagination = usePagination()\n const hasOnlyOnePage = pagination?.numberOfTotalPages === 1\n\n const isBeginWithinChapter =\n (pagination?.beginNumberOfPagesInSpineItem ?? 0) > 1\n\n const isEndWithinChapter = (pagination?.endNumberOfPagesInSpineItem ?? 0) > 1\n\n const beginPageIndex =\n (pagination?.hasChapters\n ? pagination?.beginPageIndexInSpineItem\n : pagination?.beginAbsolutePageIndex) ?? 0\n const endPageIndex =\n (pagination?.hasChapters\n ? pagination?.endPageIndexInSpineItem\n : pagination?.endAbsolutePageIndex) ?? 0\n\n const [leftPageIndex = 0, rightPageIndex = 0] = [\n beginPageIndex,\n endPageIndex,\n ].sort((a, b) => a - b)\n\n const beginAndEndAreDifferent =\n pagination?.beginPageIndexInSpineItem !==\n pagination?.endPageIndexInSpineItem ||\n pagination?.beginSpineItemIndex !== pagination?.endSpineItemIndex\n\n const totalApproximatePages = pagination?.hasChapters\n ? pagination?.beginNumberOfPagesInSpineItem\n : pagination?.numberOfTotalPages\n\n return {\n hasOnlyOnePage,\n beginPageIndex,\n endPageIndex,\n isBeginWithinChapter,\n isEndWithinChapter,\n beginAndEndAreDifferent,\n totalApproximatePages,\n leftPageIndex,\n rightPageIndex,\n }\n}\n","import { HStack, Stack, Text } from \"@chakra-ui/react\"\nimport {\n ProgressBar,\n ProgressRoot,\n ProgressValueText,\n} from \"../../components/ui/progress\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\n\nexport const PaginationInfoSection = () => {\n const pagination = usePagination()\n const {\n hasOnlyOnePage,\n leftPageIndex,\n rightPageIndex,\n totalApproximatePages,\n beginAndEndAreDifferent,\n } = useNavigationContext()\n const progress = Math.round((pagination?.percentageEstimateOfBook ?? 0) * 100)\n\n const buildTitleChain = (\n chapterInfo: NonNullable<typeof pagination>[\"beginChapterInfo\"],\n ): string => {\n if (chapterInfo?.subChapter) {\n return `${chapterInfo.title} / ${buildTitleChain(chapterInfo.subChapter)}`\n }\n return chapterInfo?.title || \"\"\n }\n\n const chapterTitle = buildTitleChain(pagination?.beginChapterInfo)\n\n return (\n <Stack alignItems=\"center\" gap={1} maxW=\"100%\" overflow=\"auto\">\n <ProgressRoot value={progress} size=\"xs\" width={150}>\n <HStack justifyContent=\"space-between\">\n <ProgressBar width={110} />\n <ProgressValueText>{`${progress}%`}</ProgressValueText>\n </HStack>\n </ProgressRoot>\n <Text truncate maxWidth=\"100%\" fontSize=\"sm\" mt={1}>\n {chapterTitle ? `Chapter: ${chapterTitle}` : `\\u00A0`}\n </Text>\n {!hasOnlyOnePage && (\n <HStack>\n <Text fontSize=\"xs\">\n {beginAndEndAreDifferent\n ? `${leftPageIndex + 1} - ${rightPageIndex + 1} of ${totalApproximatePages}`\n : `${leftPageIndex + 1} of ${totalApproximatePages}`}\n </Text>\n {!!pagination?.hasChapters && (\n <>\n <Text>-</Text>\n <Text fontSize=\"xs\">\n ({(pagination?.beginAbsolutePageIndex ?? 0) + 1})\n </Text>\n </>\n )}\n </HStack>\n )}\n </Stack>\n )\n}\n","import { Presence, type PresenceProps } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const QuickBar = memo(\n ({\n children,\n position,\n ...rest\n }: { position: \"top\" | \"bottom\" } & PresenceProps) => {\n return (\n <Presence\n display=\"flex\"\n flexDirection=\"row\"\n width=\"100%\"\n position=\"absolute\"\n {...(position === \"bottom\" ? { bottom: 0 } : { top: 0 })}\n animationName={\n position === \"bottom\"\n ? {\n _open: \"slide-from-bottom, fade-in\",\n _closed: \"slide-to-bottom, fade-out\",\n }\n : {\n _open: \"slide-from-top, fade-in\",\n _closed: \"slide-to-top, fade-out\",\n }\n }\n animationDuration=\"moderate\"\n bgColor=\"bg.panel\"\n alignItems=\"center\"\n justifyContent=\"center\"\n shadow=\"md\"\n px={4}\n {...rest}\n >\n {children}\n </Presence>\n )\n },\n)\n","import RcSlider from \"rc-slider\"\nimport { type ComponentProps, memo } from \"react\"\nimport \"rc-slider/assets/index.css\"\nimport { Box, chakra } from \"@chakra-ui/react\"\n\nconst ChakraRcSlider = chakra(RcSlider)\n\nexport const ThemedSlider = memo((props: ComponentProps<typeof RcSlider>) => {\n return (\n <Box\n display=\"contents\"\n css={{\n \"--bg\": \"colors.bg\",\n \"--bg-emphasized\": \"colors.bg.emphasized\",\n \"--color-solid\": \"colors.colorPalette.solid\",\n }}\n >\n <ChakraRcSlider\n keyboard={false}\n style={{\n padding: 0,\n }}\n css={{\n \"& > .rc-slider-handle:focus-visible\": {\n boxShadow: \"0 0 0 2px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle:active\": {\n boxShadow: \"0 0 5px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle.rc-slider-handle-dragging\": {\n boxShadow: \"0 0 0 3px var(--color-solid) !important\",\n },\n }}\n styles={{\n rail: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--bg-emphasized)\",\n },\n track: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--color-solid)\",\n },\n handle: {\n width: \"24px\",\n height: \"24px\",\n top: \"50%\",\n borderColor: \"var(--color-solid)\",\n transform: `translate(${props.reverse ? \"50%\" : \"-50%\"}, -50%)`,\n backgroundColor: \"var(--bg)\",\n marginTop: \"0px\",\n },\n }}\n {...props}\n />\n </Box>\n )\n})\n","import { type ComponentProps, useCallback, useEffect } from \"react\"\nimport { useObserve, useSignal, useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\nimport { ThemedSlider } from \"./ThemedSlider\"\n\nconst useSliderValues = () => {\n const pagination = usePagination()\n const isUsingSpread = pagination?.isUsingSpread\n const { beginPageIndex: currentRealPage, totalApproximatePages = 0 } =\n useNavigationContext()\n const currentPage = isUsingSpread\n ? Math.floor((currentRealPage || 0) / 2)\n : currentRealPage\n const [value, valueSignal] = useSignal({\n default: currentPage || 0,\n })\n const min = 0\n const max = Math.max(\n 0,\n isUsingSpread\n ? Math.floor((totalApproximatePages - 1) / 2)\n : totalApproximatePages - 1,\n )\n\n useEffect(() => {\n valueSignal.setValue(currentPage || 0)\n }, [currentPage, valueSignal])\n\n return {\n value,\n valueSignal,\n min,\n max,\n }\n}\n\nexport const Scrubber = () => {\n const reader = useReader()\n const pagination = usePagination()\n const { manifest } = useObserve(() => reader?.context.state$, []) ?? {}\n const reverse = manifest?.readingDirection === \"rtl\"\n const isUsingSpread = pagination?.isUsingSpread\n const { totalApproximatePages = 0, isBeginWithinChapter } =\n useNavigationContext()\n const step = 1\n const isScrubberWithinChapter = isBeginWithinChapter\n const { value, valueSignal, min, max } = useSliderValues()\n\n const onChange: NonNullable<ComponentProps<typeof ThemedSlider>[\"onChange\"]> =\n useCallback(\n (values) => {\n const [value = 0] = Array.isArray(values) ? values : [values]\n\n valueSignal.setValue(value)\n\n const pageIndex = isUsingSpread\n ? Math.floor(value) * 2\n : Math.floor(value)\n\n if (!isScrubberWithinChapter) {\n reader?.navigation.goToAbsolutePageIndex({\n absolutePageIndex: pageIndex,\n animation: false,\n })\n } else {\n reader?.navigation.goToPageOfSpineItem({\n pageIndex,\n spineItemId: reader.pagination.getState().beginSpineItemIndex ?? 0,\n animation: false,\n })\n }\n },\n [reader, isUsingSpread, valueSignal, isScrubberWithinChapter],\n )\n\n /**\n * @note\n * Scrubber can navigate fast and without lock we may end up with\n * slowness due to the reader\n * paginating and loading items in between.\n * This is good practice (but not required) to throttle it.\n */\n useSubscribe(\n () =>\n reader?.navigation.throttleLock({\n duration: 100,\n trigger: valueSignal.subject,\n }),\n [reader, valueSignal],\n )\n\n // const marks =\n // max > 1\n // ? Array.from({ length: max + 1 }, (_, i) => i).reduce(\n // (acc: number[], val) => [...acc, val],\n // [],\n // )\n // : []\n\n if (\n totalApproximatePages === 1 ||\n (isUsingSpread && totalApproximatePages === 2)\n ) {\n return null\n }\n\n // @tmp not available yet in chakra\n // if (reverse) return null\n\n return (\n <ThemedSlider\n value={[value]}\n max={max}\n min={min}\n reverse={reverse}\n step={step}\n onChange={onChange}\n />\n )\n // return (\n // <Slider\n // value={[value]}\n // max={max}\n // min={min}\n // marks={marks}\n // onChange={e => {\n // debugger\n // }}\n // onValueChange={onChange}\n // // reverse={reverse}\n // orientation=\"horizontal\"\n // step={step}\n // />\n // )\n}\n","import { Text, type TextProps } from \"@chakra-ui/react\"\nimport { useEffect, useState } from \"react\"\n\nexport const useTime = () => {\n const [time, setTime] = useState(new Date())\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date())\n }, 1000 * 60)\n\n return () => clearInterval(interval)\n }, [])\n\n return time\n}\n\nexport const TimeIndicator = (props: TextProps) => {\n const time = useTime()\n\n return (\n <Text fontSize=\"xs\" {...props}>\n {time.toLocaleTimeString(navigator.language, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </Text>\n )\n}\n","import { Box, IconButton, Stack } from \"@chakra-ui/react\"\nimport {\n RxDoubleArrowDown,\n RxDoubleArrowLeft,\n RxDoubleArrowRight,\n RxDoubleArrowUp,\n} from \"react-icons/rx\"\nimport { useObserve } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { PaginationInfoSection } from \"./PaginationInfoSection\"\nimport { QuickBar } from \"./QuickBar\"\nimport { Scrubber } from \"./Scrubber\"\nimport { TimeIndicator } from \"./TimeIndicator\"\n\nexport const BottomBar = ({ open }: { open: boolean }) => {\n const reader = useReader()\n const navigation = useObserve(() => reader?.navigation.state$, [reader])\n const settings = useObserve(() => reader?.settings.values$, [reader])\n const isVerticalDirection = settings?.computedPageTurnDirection === \"vertical\"\n\n return (\n <QuickBar present={open} position=\"bottom\" height={130}>\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => reader?.navigation.goToLeftOrTopSpineItem()}\n disabled={\n !navigation?.canGoLeftSpineItem && !navigation?.canGoTopSpineItem\n }\n >\n {isVerticalDirection ? <RxDoubleArrowUp /> : <RxDoubleArrowLeft />}\n </IconButton>\n <Stack\n flex={1}\n maxW={400}\n gap={2}\n alignItems=\"center\"\n overflow=\"visible\"\n px={4}\n >\n <PaginationInfoSection />\n <Box height={5} maxW={300} width=\"100%\" overflow=\"visible\">\n <Scrubber />\n </Box>\n </Stack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n disabled={\n !navigation?.canGoRightSpineItem && !navigation?.canGoBottomSpineItem\n }\n onClick={() => {\n reader?.navigation.goToRightOrBottomSpineItem()\n }}\n >\n {isVerticalDirection ? <RxDoubleArrowDown /> : <RxDoubleArrowRight />}\n </IconButton>\n <TimeIndicator position=\"absolute\" bottom={0} left={0} p={2} />\n </QuickBar>\n )\n}\n","import { useEffect } from \"react\"\n\nimport { useCallback } from \"react\"\n\nimport { useState } from \"react\"\n\nexport const useFullscreen = () => {\n const [isFullscreen, setIsFullscreen] = useState(false)\n\n const onToggleFullscreenClick = useCallback(() => {\n if (document.fullscreenElement) {\n return document\n .exitFullscreen()\n .catch(console.error)\n .then(() => {\n setIsFullscreen(false)\n })\n }\n\n return document.documentElement\n .requestFullscreen({ navigationUI: \"hide\" })\n .catch(console.error)\n .then(() => {\n setIsFullscreen(true)\n })\n }, [])\n\n useEffect(() => {\n function fullscreenchangeHandler() {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n document.addEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n }\n }, [])\n\n return {\n isFullscreen,\n onToggleFullscreenClick,\n }\n}\n","import { HStack, IconButton, Stack, Text } from \"@chakra-ui/react\"\nimport { IoIosArrowBack, IoMdMore } from \"react-icons/io\"\nimport { MdFullscreen, MdFullscreenExit } from \"react-icons/md\"\nimport { useObserve } from \"reactjrx\"\nimport { useFullscreen } from \"../../common/useFullscreen\"\nimport { useReader } from \"../../context/useReader\"\nimport { QuickBar } from \"./QuickBar\"\n\nexport const TopBar = ({\n open,\n onBackClick,\n onMoreClick,\n}: {\n open: boolean\n onBackClick: () => void\n onMoreClick: () => void\n}) => {\n const reader = useReader()\n const manifest = useObserve(() => reader?.context.manifest$, [reader])\n const { isFullscreen, onToggleFullscreenClick } = useFullscreen()\n\n return (\n <QuickBar\n present={open}\n position=\"top\"\n height=\"80px\"\n justifyContent=\"space-between\"\n >\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={onBackClick}\n >\n <IoIosArrowBack />\n </IconButton>\n <Stack\n flex={1}\n maxW={600}\n gap={1}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <Text truncate maxWidth=\"100%\">\n {manifest?.title}\n </Text>\n </Stack>\n <HStack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onMoreClick}\n >\n <IoMdMore />\n </IconButton>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onToggleFullscreenClick}\n >\n {isFullscreen ? <MdFullscreenExit /> : <MdFullscreen />}\n </IconButton>\n </HStack>\n </QuickBar>\n )\n}\n","import { memo } from \"react\"\nimport { BottomBar } from \"./BottomBar\"\nimport { TopBar } from \"./TopBar\"\n\nexport const QuickMenu = memo(\n ({\n open,\n onBackClick,\n onMoreClick,\n }: { open: boolean; onBackClick: () => void; onMoreClick: () => void }) => {\n return (\n <>\n <TopBar\n open={open}\n onBackClick={onBackClick}\n onMoreClick={onMoreClick}\n />\n <BottomBar open={open} />\n </>\n )\n },\n)\n","import type { Reader } from \"@prose-reader/core\"\nimport { memo } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const ReactReaderProvider = memo(\n ({\n children,\n reader,\n }: { children?: React.ReactNode; reader: Reader | undefined }) => {\n return (\n <ReaderContext.Provider value={reader}>{children}</ReaderContext.Provider>\n )\n },\n)\n"],"names":["ReaderContext","createContext","useReader","useContext","ToggleTip","React","props","ref","showArrow","children","portalled","content","portalRef","rest","jsxs","ChakraPopover","jsx","Portal","InfoTip","IconButton","HiOutlineInformationCircle","ProgressBar","ChakraProgress","React__namespace","info","ProgressRoot","ProgressValueText","usePagination","reader","useObserve","combineLatest","map","state","context","isOnlyImages","_a","item","NEVER","useNavigationContext","pagination","hasOnlyOnePage","isBeginWithinChapter","isEndWithinChapter","beginPageIndex","endPageIndex","leftPageIndex","rightPageIndex","a","b","beginAndEndAreDifferent","totalApproximatePages","PaginationInfoSection","progress","buildTitleChain","chapterInfo","chapterTitle","Stack","HStack","Text","Fragment","QuickBar","memo","position","Presence","ChakraRcSlider","chakra","RcSlider","ThemedSlider","Box","useSliderValues","isUsingSpread","currentRealPage","currentPage","value","valueSignal","useSignal","min","max","useEffect","Scrubber","manifest","reverse","step","isScrubberWithinChapter","onChange","useCallback","values","pageIndex","useSubscribe","useTime","time","setTime","useState","interval","TimeIndicator","BottomBar","open","navigation","settings","isVerticalDirection","RxDoubleArrowUp","RxDoubleArrowLeft","RxDoubleArrowDown","RxDoubleArrowRight","useFullscreen","isFullscreen","setIsFullscreen","onToggleFullscreenClick","fullscreenchangeHandler","TopBar","onBackClick","onMoreClick","IoIosArrowBack","IoMdMore","MdFullscreenExit","MdFullscreen","QuickMenu","ReactReaderProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.cjs","sources":["../src/context/context.ts","../src/context/ReactReaderProvider.tsx","../src/context/useReader.ts","../src/pagination/usePagination.ts","../src/navigation/FloatingProgress.tsx","../src/navigation/QuickMenu/TimeIndicator.tsx","../src/navigation/FloatingTime.tsx","../src/components/ui/toggle-tip.tsx","../src/components/ui/progress.tsx","../src/navigation/useNavigationContext.ts","../src/navigation/QuickMenu/PaginationInfoSection.tsx","../src/navigation/QuickMenu/QuickBar.tsx","../src/navigation/QuickMenu/ThemedSlider.tsx","../src/navigation/QuickMenu/Scrubber.tsx","../src/navigation/QuickMenu/BottomBar.tsx","../src/common/useFullscreen.ts","../src/navigation/QuickMenu/TopBar.tsx","../src/navigation/QuickMenu/QuickMenu.tsx","../src/ReactReader.tsx"],"sourcesContent":["import type { Reader } from \"@prose-reader/core\"\nimport { type Context, createContext } from \"react\"\n\nexport const ReaderContext: Context<Reader | undefined> = createContext<\n Reader | undefined\n>(undefined)\n","import type { Reader } from \"@prose-reader/core\"\nimport { memo } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const ReactReaderProvider = memo(\n ({\n children,\n reader,\n }: { children?: React.ReactNode; reader: Reader | undefined }) => {\n return (\n <ReaderContext.Provider value={reader}>{children}</ReaderContext.Provider>\n )\n },\n)\n","import type { Reader } from \"@prose-reader/core\"\nimport { useContext } from \"react\"\nimport { ReaderContext } from \"./context\"\n\nexport const useReader = (): Reader | undefined => {\n const context = useContext(ReaderContext)\n\n return context\n}\n","import type { Reader } from \"@prose-reader/core\"\nimport { useObserve } from \"reactjrx\"\nimport { NEVER, combineLatest, map } from \"rxjs\"\nimport { useReader } from \"../context/useReader\"\n\nexport const usePagination = ():\n | (Reader[\"pagination\"][\"state\"] & { hasChapters: boolean })\n | undefined => {\n const reader = useReader()\n\n return useObserve(\n () =>\n !reader\n ? NEVER\n : combineLatest([reader.pagination.state$, reader.context.state$]).pipe(\n map(([state, context]) => {\n const isOnlyImages = context.manifest?.spineItems.every((item) =>\n item.mediaType?.startsWith(\"image/\"),\n )\n\n return {\n ...state,\n hasChapters: !context.isFullyPrePaginated && !isOnlyImages,\n }\n }),\n ),\n [reader],\n )\n}\n","import { Box, Text } from \"@chakra-ui/react\"\nimport { usePagination } from \"../pagination/usePagination\"\n\nexport const FloatingProgress = () => {\n const pagination = usePagination()\n const roundedProgress = Math.floor(\n (pagination?.percentageEstimateOfBook ?? 0) * 100,\n )\n const displayableProgress = roundedProgress > 0 ? roundedProgress : 1\n\n if (pagination?.percentageEstimateOfBook === undefined) return null\n\n return (\n <Box position=\"absolute\" right={0} bottom={0} p={2}>\n <Text fontSize=\"sm\">{displayableProgress} %</Text>\n </Box>\n )\n}\n","import { Text, type TextProps } from \"@chakra-ui/react\"\nimport { useEffect, useState } from \"react\"\n\nexport const useTime = () => {\n const [time, setTime] = useState(new Date())\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(new Date())\n }, 1000 * 60)\n\n return () => clearInterval(interval)\n }, [])\n\n return time\n}\n\nexport const TimeIndicator = (props: TextProps) => {\n const time = useTime()\n\n return (\n <Text fontSize=\"xs\" {...props}>\n {time.toLocaleTimeString(navigator.language, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </Text>\n )\n}\n","import { Box } from \"@chakra-ui/react\"\nimport { TimeIndicator } from \"./QuickMenu/TimeIndicator\"\n\nexport const FloatingTime = () => {\n return (\n <Box position=\"absolute\" left={0} bottom={0} p={2}>\n <TimeIndicator />\n </Box>\n )\n}\n","import { Popover as ChakraPopover, IconButton, Portal } from \"@chakra-ui/react\"\nimport * as React from \"react\"\nimport { HiOutlineInformationCircle } from \"react-icons/hi\"\n\nexport interface ToggleTipProps extends ChakraPopover.RootProps {\n showArrow?: boolean\n portalled?: boolean\n portalRef?: React.RefObject<HTMLElement>\n content?: React.ReactNode\n}\n\nexport const ToggleTip = React.forwardRef<HTMLDivElement, ToggleTipProps>(\n function ToggleTip(props, ref) {\n const {\n showArrow,\n children,\n portalled = true,\n content,\n portalRef,\n ...rest\n } = props\n\n return (\n <ChakraPopover.Root\n {...rest}\n positioning={{ ...rest.positioning, gutter: 4 }}\n >\n <ChakraPopover.Trigger asChild>{children}</ChakraPopover.Trigger>\n <Portal disabled={!portalled} container={portalRef}>\n <ChakraPopover.Positioner>\n <ChakraPopover.Content\n width=\"auto\"\n px=\"2\"\n py=\"1\"\n textStyle=\"xs\"\n rounded=\"sm\"\n ref={ref}\n >\n {showArrow && (\n <ChakraPopover.Arrow>\n <ChakraPopover.ArrowTip />\n </ChakraPopover.Arrow>\n )}\n {content}\n </ChakraPopover.Content>\n </ChakraPopover.Positioner>\n </Portal>\n </ChakraPopover.Root>\n )\n },\n)\n\nexport const InfoTip = React.forwardRef<\n HTMLDivElement,\n Partial<ToggleTipProps>\n>(function InfoTip(props, ref) {\n const { children, ...rest } = props\n return (\n <ToggleTip content={children} {...rest} ref={ref}>\n <IconButton\n variant=\"ghost\"\n aria-label=\"info\"\n size=\"2xs\"\n colorPalette=\"gray\"\n >\n <HiOutlineInformationCircle />\n </IconButton>\n </ToggleTip>\n )\n})\n","import { Progress as ChakraProgress } from \"@chakra-ui/react\"\nimport { InfoTip } from \"./toggle-tip\"\nimport * as React from \"react\"\n\nexport const ProgressBar = React.forwardRef<\n HTMLDivElement,\n ChakraProgress.TrackProps\n>(function ProgressBar(props, ref) {\n return (\n <ChakraProgress.Track {...props} ref={ref}>\n <ChakraProgress.Range />\n </ChakraProgress.Track>\n )\n})\n\nexport interface ProgressLabelProps extends ChakraProgress.LabelProps {\n info?: React.ReactNode\n}\n\nexport const ProgressLabel = React.forwardRef<\n HTMLDivElement,\n ProgressLabelProps\n>(function ProgressLabel(props, ref) {\n const { children, info, ...rest } = props\n return (\n <ChakraProgress.Label {...rest} ref={ref}>\n {children}\n {info && <InfoTip>{info}</InfoTip>}\n </ChakraProgress.Label>\n )\n})\n\nexport const ProgressRoot = ChakraProgress.Root\nexport const ProgressValueText = ChakraProgress.ValueText\n","import { usePagination } from \"../pagination/usePagination\"\n\nexport const useNavigationContext = () => {\n const pagination = usePagination()\n const hasOnlyOnePage = pagination?.numberOfTotalPages === 1\n\n const isBeginWithinChapter =\n (pagination?.beginNumberOfPagesInSpineItem ?? 0) > 1\n\n const isEndWithinChapter = (pagination?.endNumberOfPagesInSpineItem ?? 0) > 1\n\n const beginPageIndex =\n (pagination?.hasChapters\n ? pagination?.beginPageIndexInSpineItem\n : pagination?.beginAbsolutePageIndex) ?? 0\n const endPageIndex =\n (pagination?.hasChapters\n ? pagination?.endPageIndexInSpineItem\n : pagination?.endAbsolutePageIndex) ?? 0\n\n const [leftPageIndex = 0, rightPageIndex = 0] = [\n beginPageIndex,\n endPageIndex,\n ].sort((a, b) => a - b)\n\n const beginAndEndAreDifferent =\n pagination?.beginPageIndexInSpineItem !==\n pagination?.endPageIndexInSpineItem ||\n pagination?.beginSpineItemIndex !== pagination?.endSpineItemIndex\n\n const totalApproximatePages = pagination?.hasChapters\n ? pagination?.beginNumberOfPagesInSpineItem\n : pagination?.numberOfTotalPages\n\n return {\n hasOnlyOnePage,\n beginPageIndex,\n endPageIndex,\n isBeginWithinChapter,\n isEndWithinChapter,\n beginAndEndAreDifferent,\n totalApproximatePages,\n leftPageIndex,\n rightPageIndex,\n }\n}\n","import { HStack, Stack, Text } from \"@chakra-ui/react\"\nimport {\n ProgressBar,\n ProgressRoot,\n ProgressValueText,\n} from \"../../components/ui/progress\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\n\nexport const PaginationInfoSection = () => {\n const pagination = usePagination()\n const {\n hasOnlyOnePage,\n leftPageIndex,\n rightPageIndex,\n totalApproximatePages,\n beginAndEndAreDifferent,\n } = useNavigationContext()\n const progress = Math.round((pagination?.percentageEstimateOfBook ?? 0) * 100)\n\n const buildTitleChain = (\n chapterInfo: NonNullable<typeof pagination>[\"beginChapterInfo\"],\n ): string => {\n if (chapterInfo?.subChapter) {\n return `${chapterInfo.title} / ${buildTitleChain(chapterInfo.subChapter)}`\n }\n return chapterInfo?.title || \"\"\n }\n\n const chapterTitle = buildTitleChain(pagination?.beginChapterInfo)\n\n return (\n <Stack alignItems=\"center\" gap={1} maxW=\"100%\" overflow=\"auto\">\n <ProgressRoot value={progress} size=\"xs\" width={150}>\n <HStack justifyContent=\"space-between\">\n <ProgressBar width={110} />\n <ProgressValueText>{`${progress}%`}</ProgressValueText>\n </HStack>\n </ProgressRoot>\n <Text truncate maxWidth=\"100%\" fontSize=\"sm\" mt={1}>\n {chapterTitle ? `Chapter: ${chapterTitle}` : `\\u00A0`}\n </Text>\n {!hasOnlyOnePage && (\n <HStack>\n <Text fontSize=\"xs\">\n {beginAndEndAreDifferent\n ? `${leftPageIndex + 1} - ${rightPageIndex + 1} of ${totalApproximatePages}`\n : `${leftPageIndex + 1} of ${totalApproximatePages}`}\n </Text>\n {!!pagination?.hasChapters && (\n <>\n <Text>-</Text>\n <Text fontSize=\"xs\">\n ({(pagination?.beginAbsolutePageIndex ?? 0) + 1})\n </Text>\n </>\n )}\n </HStack>\n )}\n </Stack>\n )\n}\n","import { Presence, type PresenceProps } from \"@chakra-ui/react\"\nimport { memo } from \"react\"\n\nexport const QuickBar = memo(\n ({\n children,\n position,\n ...rest\n }: { position: \"top\" | \"bottom\" } & PresenceProps) => {\n return (\n <Presence\n display=\"flex\"\n flexDirection=\"row\"\n width=\"100%\"\n position=\"absolute\"\n {...(position === \"bottom\" ? { bottom: 0 } : { top: 0 })}\n animationName={\n position === \"bottom\"\n ? {\n _open: \"slide-from-bottom, fade-in\",\n _closed: \"slide-to-bottom, fade-out\",\n }\n : {\n _open: \"slide-from-top, fade-in\",\n _closed: \"slide-to-top, fade-out\",\n }\n }\n animationDuration=\"moderate\"\n bgColor=\"bg.panel\"\n alignItems=\"center\"\n justifyContent=\"center\"\n shadow=\"md\"\n px={4}\n {...rest}\n >\n {children}\n </Presence>\n )\n },\n)\n","import RcSlider from \"rc-slider\"\nimport { type ComponentProps, memo } from \"react\"\nimport \"rc-slider/assets/index.css\"\nimport { Box, chakra } from \"@chakra-ui/react\"\n\nconst ChakraRcSlider = chakra(RcSlider)\n\nexport const ThemedSlider = memo((props: ComponentProps<typeof RcSlider>) => {\n return (\n <Box\n display=\"contents\"\n css={{\n \"--bg\": \"colors.bg\",\n \"--bg-emphasized\": \"colors.bg.emphasized\",\n \"--color-solid\": \"colors.colorPalette.solid\",\n }}\n >\n <ChakraRcSlider\n keyboard={false}\n style={{\n padding: 0,\n }}\n css={{\n \"& > .rc-slider-handle:focus-visible\": {\n boxShadow: \"0 0 0 2px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle:active\": {\n boxShadow: \"0 0 5px var(--color-solid) !important\",\n },\n \"& > .rc-slider-handle.rc-slider-handle-dragging\": {\n boxShadow: \"0 0 0 3px var(--color-solid) !important\",\n },\n }}\n styles={{\n rail: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--bg-emphasized)\",\n },\n track: {\n height: \"8px\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n backgroundColor: \"var(--color-solid)\",\n },\n handle: {\n width: \"24px\",\n height: \"24px\",\n top: \"50%\",\n borderColor: \"var(--color-solid)\",\n transform: `translate(${props.reverse ? \"50%\" : \"-50%\"}, -50%)`,\n backgroundColor: \"var(--bg)\",\n marginTop: \"0px\",\n },\n }}\n {...props}\n />\n </Box>\n )\n})\n","import { type ComponentProps, useCallback, useEffect } from \"react\"\nimport { useObserve, useSignal, useSubscribe } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { usePagination } from \"../../pagination/usePagination\"\nimport { useNavigationContext } from \"../useNavigationContext\"\nimport { ThemedSlider } from \"./ThemedSlider\"\n\nconst useSliderValues = () => {\n const pagination = usePagination()\n const isUsingSpread = pagination?.isUsingSpread\n const { beginPageIndex: currentRealPage, totalApproximatePages = 0 } =\n useNavigationContext()\n const currentPage = isUsingSpread\n ? Math.floor((currentRealPage || 0) / 2)\n : currentRealPage\n const [value, valueSignal] = useSignal({\n default: currentPage || 0,\n })\n const min = 0\n const max = Math.max(\n 0,\n isUsingSpread\n ? Math.floor((totalApproximatePages - 1) / 2)\n : totalApproximatePages - 1,\n )\n\n useEffect(() => {\n valueSignal.setValue(currentPage || 0)\n }, [currentPage, valueSignal])\n\n return {\n value,\n valueSignal,\n min,\n max,\n }\n}\n\nexport const Scrubber = () => {\n const reader = useReader()\n const pagination = usePagination()\n const { manifest } = useObserve(() => reader?.context.state$, []) ?? {}\n const reverse = manifest?.readingDirection === \"rtl\"\n const isUsingSpread = pagination?.isUsingSpread\n const { totalApproximatePages = 0, isBeginWithinChapter } =\n useNavigationContext()\n const step = 1\n const isScrubberWithinChapter = isBeginWithinChapter\n const { value, valueSignal, min, max } = useSliderValues()\n\n const onChange: NonNullable<ComponentProps<typeof ThemedSlider>[\"onChange\"]> =\n useCallback(\n (values) => {\n const [value = 0] = Array.isArray(values) ? values : [values]\n\n valueSignal.setValue(value)\n\n const pageIndex = isUsingSpread\n ? Math.floor(value) * 2\n : Math.floor(value)\n\n if (!isScrubberWithinChapter) {\n reader?.navigation.goToAbsolutePageIndex({\n absolutePageIndex: pageIndex,\n animation: false,\n })\n } else {\n reader?.navigation.goToPageOfSpineItem({\n pageIndex,\n spineItemId: reader.pagination.getState().beginSpineItemIndex ?? 0,\n animation: false,\n })\n }\n },\n [reader, isUsingSpread, valueSignal, isScrubberWithinChapter],\n )\n\n /**\n * @note\n * Scrubber can navigate fast and without lock we may end up with\n * slowness due to the reader\n * paginating and loading items in between.\n * This is good practice (but not required) to throttle it.\n */\n useSubscribe(\n () =>\n reader?.navigation.throttleLock({\n duration: 100,\n trigger: valueSignal.subject,\n }),\n [reader, valueSignal],\n )\n\n // const marks =\n // max > 1\n // ? Array.from({ length: max + 1 }, (_, i) => i).reduce(\n // (acc: number[], val) => [...acc, val],\n // [],\n // )\n // : []\n\n if (\n totalApproximatePages === 1 ||\n (isUsingSpread && totalApproximatePages === 2)\n ) {\n return null\n }\n\n // @tmp not available yet in chakra\n // if (reverse) return null\n\n return (\n <ThemedSlider\n value={[value]}\n max={max}\n min={min}\n reverse={reverse}\n step={step}\n onChange={onChange}\n />\n )\n // return (\n // <Slider\n // value={[value]}\n // max={max}\n // min={min}\n // marks={marks}\n // onChange={e => {\n // debugger\n // }}\n // onValueChange={onChange}\n // // reverse={reverse}\n // orientation=\"horizontal\"\n // step={step}\n // />\n // )\n}\n","import { Box, IconButton, Stack } from \"@chakra-ui/react\"\nimport {\n RxDoubleArrowDown,\n RxDoubleArrowLeft,\n RxDoubleArrowRight,\n RxDoubleArrowUp,\n} from \"react-icons/rx\"\nimport { useObserve } from \"reactjrx\"\nimport { useReader } from \"../../context/useReader\"\nimport { PaginationInfoSection } from \"./PaginationInfoSection\"\nimport { QuickBar } from \"./QuickBar\"\nimport { Scrubber } from \"./Scrubber\"\n\nexport const BottomBar = ({ open }: { open: boolean }) => {\n const reader = useReader()\n const navigation = useObserve(() => reader?.navigation.state$, [reader])\n const settings = useObserve(() => reader?.settings.values$, [reader])\n const isVerticalDirection = settings?.computedPageTurnDirection === \"vertical\"\n\n return (\n <QuickBar present={open} position=\"bottom\" height={130}>\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={() => reader?.navigation.goToLeftOrTopSpineItem()}\n disabled={\n !navigation?.canGoLeftSpineItem && !navigation?.canGoTopSpineItem\n }\n >\n {isVerticalDirection ? <RxDoubleArrowUp /> : <RxDoubleArrowLeft />}\n </IconButton>\n <Stack\n flex={1}\n maxW={400}\n gap={2}\n alignItems=\"center\"\n overflow=\"visible\"\n px={4}\n >\n <PaginationInfoSection />\n <Box height={5} maxW={300} width=\"100%\" overflow=\"visible\">\n <Scrubber />\n </Box>\n </Stack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n disabled={\n !navigation?.canGoRightSpineItem && !navigation?.canGoBottomSpineItem\n }\n onClick={() => {\n reader?.navigation.goToRightOrBottomSpineItem()\n }}\n >\n {isVerticalDirection ? <RxDoubleArrowDown /> : <RxDoubleArrowRight />}\n </IconButton>\n </QuickBar>\n )\n}\n","import { useEffect } from \"react\"\n\nimport { useCallback } from \"react\"\n\nimport { useState } from \"react\"\n\nexport const useFullscreen = () => {\n const [isFullscreen, setIsFullscreen] = useState(false)\n\n const onToggleFullscreenClick = useCallback(() => {\n if (document.fullscreenElement) {\n return document\n .exitFullscreen()\n .catch(console.error)\n .then(() => {\n setIsFullscreen(false)\n })\n }\n\n return document.documentElement\n .requestFullscreen({ navigationUI: \"hide\" })\n .catch(console.error)\n .then(() => {\n setIsFullscreen(true)\n })\n }, [])\n\n useEffect(() => {\n function fullscreenchangeHandler() {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n document.addEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", fullscreenchangeHandler)\n }\n }, [])\n\n return {\n isFullscreen,\n onToggleFullscreenClick,\n }\n}\n","import { HStack, IconButton, Stack, Text } from \"@chakra-ui/react\"\nimport { IoIosArrowBack, IoMdMore } from \"react-icons/io\"\nimport { MdFullscreen, MdFullscreenExit } from \"react-icons/md\"\nimport { useObserve } from \"reactjrx\"\nimport { useFullscreen } from \"../../common/useFullscreen\"\nimport { useReader } from \"../../context/useReader\"\nimport { QuickBar } from \"./QuickBar\"\n\nexport const TopBar = ({\n open,\n onBackClick,\n onMoreClick,\n}: {\n open: boolean\n onBackClick: () => void\n onMoreClick: () => void\n}) => {\n const reader = useReader()\n const manifest = useObserve(() => reader?.context.manifest$, [reader])\n const { isFullscreen, onToggleFullscreenClick } = useFullscreen()\n\n return (\n <QuickBar\n present={open}\n position=\"top\"\n height=\"80px\"\n justifyContent=\"space-between\"\n >\n <IconButton\n aria-label=\"left\"\n size=\"lg\"\n variant=\"ghost\"\n flexShrink={0}\n onClick={onBackClick}\n >\n <IoIosArrowBack />\n </IconButton>\n <Stack\n flex={1}\n maxW={600}\n gap={1}\n alignItems=\"center\"\n overflow=\"auto\"\n px={4}\n >\n <Text truncate maxWidth=\"100%\">\n {manifest?.title}\n </Text>\n </Stack>\n <HStack>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onMoreClick}\n >\n <IoMdMore />\n </IconButton>\n <IconButton\n aria-label=\"right\"\n size=\"lg\"\n flexShrink={0}\n variant=\"ghost\"\n onClick={onToggleFullscreenClick}\n >\n {isFullscreen ? <MdFullscreenExit /> : <MdFullscreen />}\n </IconButton>\n </HStack>\n </QuickBar>\n )\n}\n","import { memo } from \"react\"\nimport { BottomBar } from \"./BottomBar\"\nimport { TopBar } from \"./TopBar\"\n\nexport const QuickMenu = memo(\n ({\n open,\n onBackClick,\n onMoreClick,\n }: { open: boolean; onBackClick: () => void; onMoreClick: () => void }) => {\n return (\n <>\n <TopBar\n open={open}\n onBackClick={onBackClick}\n onMoreClick={onMoreClick}\n />\n <BottomBar open={open} />\n </>\n )\n },\n)\n","import { Presence } from \"@chakra-ui/react\"\nimport type { ComponentProps } from \"react\"\nimport { FloatingProgress } from \"./navigation/FloatingProgress\"\nimport { FloatingTime } from \"./navigation/FloatingTime\"\nimport { QuickMenu } from \"./navigation/QuickMenu/QuickMenu\"\n\nexport const ReactReader = ({\n enableFloatingTime = true,\n enableFloatingProgress = true,\n open,\n ...rest\n}: {\n enableFloatingTime?: boolean\n enableFloatingProgress?: boolean\n} & ComponentProps<typeof QuickMenu>) => {\n return (\n <>\n {enableFloatingProgress && (\n <Presence\n present={!open}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"moderate\"\n >\n <FloatingProgress />\n </Presence>\n )}\n <QuickMenu open={open} {...rest} />\n <Presence\n present={enableFloatingTime || open}\n animationName={{ _open: \"fade-in\", _closed: \"fade-out\" }}\n animationDuration=\"slow\"\n overflow=\"hidden\"\n >\n <FloatingTime />\n </Presence>\n </>\n )\n}\n"],"names":["ReaderContext","createContext","ReactReaderProvider","memo","children","reader","useReader","useContext","usePagination","useObserve","combineLatest","map","state","context","isOnlyImages","_a","item","NEVER","FloatingProgress","pagination","roundedProgress","displayableProgress","jsx","Box","jsxs","Text","useTime","time","setTime","useState","useEffect","interval","TimeIndicator","props","FloatingTime","ToggleTip","React","ref","showArrow","portalled","content","portalRef","rest","ChakraPopover","Portal","InfoTip","IconButton","HiOutlineInformationCircle","ProgressBar","ChakraProgress","React__namespace","info","ProgressRoot","ProgressValueText","useNavigationContext","hasOnlyOnePage","isBeginWithinChapter","isEndWithinChapter","beginPageIndex","endPageIndex","leftPageIndex","rightPageIndex","a","b","beginAndEndAreDifferent","totalApproximatePages","PaginationInfoSection","progress","buildTitleChain","chapterInfo","chapterTitle","Stack","HStack","Fragment","QuickBar","position","Presence","ChakraRcSlider","chakra","RcSlider","ThemedSlider","useSliderValues","isUsingSpread","currentRealPage","currentPage","value","valueSignal","useSignal","min","max","Scrubber","manifest","reverse","step","isScrubberWithinChapter","onChange","useCallback","values","pageIndex","useSubscribe","BottomBar","open","navigation","settings","isVerticalDirection","RxDoubleArrowUp","RxDoubleArrowLeft","RxDoubleArrowDown","RxDoubleArrowRight","useFullscreen","isFullscreen","setIsFullscreen","onToggleFullscreenClick","fullscreenchangeHandler","TopBar","onBackClick","onMoreClick","IoIosArrowBack","IoMdMore","MdFullscreenExit","MdFullscreen","QuickMenu","ReactReader","enableFloatingTime","enableFloatingProgress"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const FloatingProgress: () => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const FloatingTime: () => import("react/jsx-runtime").JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prose-reader/react-reader",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.179.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"react-icons": "^5.4.0",
|
|
37
37
|
"reactjrx": "1.x"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "d14d1c3d7d3439ee58ebc162043365a49c926de1"
|
|
40
40
|
}
|