@edrlab/thorium-web 1.1.6 → 1.2.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/{ThPreferencesAdapter-B8AYujCA.d.mts → ThPreferencesAdapter-DrZ5_6Dv.d.mts} +4 -139
- package/dist/{ThSettingsWrapper-BlmAxcWF.d.mts → ThSettingsWrapper-8Kx0SnH4.d.mts} +1 -1
- package/dist/{actions-BRtHsxpm.d.mts → actions-D2CHvCHu.d.mts} +2 -2
- package/dist/{actionsReducer-bT0pfxLJ.d.mts → actionsReducer-kc-S130w.d.mts} +3 -24
- package/dist/chunk-34MVY33F.mjs +913 -0
- package/dist/chunk-34MVY33F.mjs.map +1 -0
- package/dist/{chunk-KJXHAJYK.mjs → chunk-4VHEHMJN.mjs} +128 -11
- package/dist/chunk-4VHEHMJN.mjs.map +1 -0
- package/dist/{chunk-QNYZCQKO.mjs → chunk-72XCX5TD.mjs} +4 -4
- package/dist/chunk-72XCX5TD.mjs.map +1 -0
- package/dist/{chunk-SMK7A7VF.mjs → chunk-7NEQAW7J.mjs} +3 -3
- package/dist/chunk-7NEQAW7J.mjs.map +1 -0
- package/dist/{chunk-SFHOVH6R.mjs → chunk-H4J2VY7Z.mjs} +201 -35
- package/dist/chunk-H4J2VY7Z.mjs.map +1 -0
- package/dist/{chunk-COQXDRKD.mjs → chunk-K3K7TUWM.mjs} +2 -2
- package/dist/chunk-K3K7TUWM.mjs.map +1 -0
- package/dist/{chunk-KTPIH35Y.mjs → chunk-NYZBHYW2.mjs} +5 -3
- package/dist/chunk-NYZBHYW2.mjs.map +1 -0
- package/dist/chunk-RRDEPGBK.mjs +75 -0
- package/dist/chunk-RRDEPGBK.mjs.map +1 -0
- package/dist/chunk-S4M7ED5Q.mjs +407 -0
- package/dist/chunk-S4M7ED5Q.mjs.map +1 -0
- package/dist/components/Epub/index.d.mts +17 -11
- package/dist/components/Epub/index.mjs +12 -831
- package/dist/components/Epub/index.mjs.map +1 -1
- package/dist/components/Misc/index.css +23 -0
- package/dist/components/Misc/index.css.map +1 -1
- package/dist/components/Misc/index.d.mts +10 -1
- package/dist/components/Misc/index.mjs +30 -2
- package/dist/components/Misc/index.mjs.map +1 -1
- package/dist/components/Reader/index.css +1283 -0
- package/dist/components/Reader/index.css.map +1 -0
- package/dist/components/Reader/index.d.mts +30 -0
- package/dist/components/Reader/index.mjs +79 -0
- package/dist/components/Reader/index.mjs.map +1 -0
- package/dist/components/WebPub/index.d.mts +15 -31
- package/dist/components/WebPub/index.mjs +11 -374
- package/dist/components/WebPub/index.mjs.map +1 -1
- package/dist/core/Components/index.d.mts +11 -8
- package/dist/core/Components/index.mjs +1 -1
- package/dist/core/Helpers/index.d.mts +1 -1
- package/dist/core/Hooks/index.d.mts +54 -5
- package/dist/core/Hooks/index.mjs +1 -1
- package/dist/errorHandler-CL2YIfQY.d.mts +26 -0
- package/dist/i18n/index.mjs +4 -4
- package/dist/immer.d-CoRThNOF.d.mts +23 -0
- package/dist/lib/index.d.mts +12 -162
- package/dist/lib/index.mjs +2 -2
- package/dist/locales/el/thorium-web.json +31 -0
- package/dist/locales/en/thorium-web.json +14 -2
- package/dist/locales/et/thorium-web.json +6 -2
- package/dist/locales/fi/thorium-shared.json +14 -8
- package/dist/locales/fi/thorium-web.json +2 -1
- package/dist/locales/fr/thorium-shared.json +100 -0
- package/dist/locales/it/thorium-shared.json +9 -0
- package/dist/locales/lt/thorium-shared.json +22 -13
- package/dist/locales/lt/thorium-web.json +2 -1
- package/dist/locales/pt-PT/thorium-shared.json +64 -1
- package/dist/locales/pt-PT/thorium-web.json +4 -3
- package/dist/locales/sv/thorium-shared.json +61 -3
- package/dist/locales/sv/thorium-web.json +4 -3
- package/dist/preferences/index.d.mts +8 -7
- package/dist/preferences/index.mjs +3 -3
- package/dist/settingsReducer-C1wwCAMv.d.mts +159 -0
- package/dist/{ui-BVlJcPL_.d.mts → ui-CamWuqOo.d.mts} +1 -1
- package/dist/useContrast-D6sjPjxy.d.mts +152 -0
- package/dist/{useEpubNavigator-CsraD65e.d.mts → useEpubNavigator-CwHJfoiV.d.mts} +1 -1
- package/dist/{usePreferences-rfT368__.d.mts → usePreferences-BXFJbval.d.mts} +1 -1
- package/dist/{StatefulReader-CjgFzHoO.d.mts → useReaderTransitions-guT-eA-Q.d.mts} +50 -50
- package/package.json +5 -3
- package/dist/chunk-COQXDRKD.mjs.map +0 -1
- package/dist/chunk-KJXHAJYK.mjs.map +0 -1
- package/dist/chunk-KTPIH35Y.mjs.map +0 -1
- package/dist/chunk-QNYZCQKO.mjs.map +0 -1
- package/dist/chunk-SFHOVH6R.mjs.map +0 -1
- package/dist/chunk-SMK7A7VF.mjs.map +0 -1
- package/dist/useContrast-Cgsrl7GS.d.mts +0 -15
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { a as ThSheetHeaderVariant } from './actions-D2CHvCHu.mjs';
|
|
2
|
+
|
|
3
|
+
type I18nValue<T> = T | string | {
|
|
4
|
+
key: string;
|
|
5
|
+
fallback?: string;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
interface ThSettingsGroupPref<T> {
|
|
9
|
+
main: T[];
|
|
10
|
+
subPanel: T[] | null;
|
|
11
|
+
header?: ThSheetHeaderVariant;
|
|
12
|
+
}
|
|
13
|
+
interface ThSettingsRangePref {
|
|
14
|
+
variant?: ThSettingsRangeVariant;
|
|
15
|
+
placeholder?: I18nValue<ThSettingsRangePlaceholder>;
|
|
16
|
+
range?: [number, number];
|
|
17
|
+
step?: number;
|
|
18
|
+
}
|
|
19
|
+
interface ThSettingsRadioPref<T extends string> {
|
|
20
|
+
allowUnset?: boolean;
|
|
21
|
+
keys: {
|
|
22
|
+
[key in T]: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
declare enum ThSettingsKeys {
|
|
26
|
+
columns = "columns",
|
|
27
|
+
fontFamily = "fontFamily",
|
|
28
|
+
fontWeight = "fontWeight",
|
|
29
|
+
hyphens = "hyphens",
|
|
30
|
+
layout = "layout",
|
|
31
|
+
letterSpacing = "letterSpacing",
|
|
32
|
+
lineHeight = "lineHeight",
|
|
33
|
+
paragraphIndent = "paragraphIndent",
|
|
34
|
+
paragraphSpacing = "paragraphSpacing",
|
|
35
|
+
publisherStyles = "publisherStyles",
|
|
36
|
+
spacingGroup = "spacingGroup",
|
|
37
|
+
spacingPresets = "spacingPresets",
|
|
38
|
+
textAlign = "textAlign",
|
|
39
|
+
textGroup = "textGroup",
|
|
40
|
+
textNormalize = "textNormalize",
|
|
41
|
+
theme = "theme",
|
|
42
|
+
wordSpacing = "wordSpacing",
|
|
43
|
+
zoom = "zoom"
|
|
44
|
+
}
|
|
45
|
+
declare enum ThTextSettingsKeys {
|
|
46
|
+
fontFamily = "fontFamily",
|
|
47
|
+
fontWeight = "fontWeight",
|
|
48
|
+
hyphens = "hyphens",
|
|
49
|
+
textAlign = "textAlign",
|
|
50
|
+
textNormalize = "textNormalize"
|
|
51
|
+
}
|
|
52
|
+
declare enum ThSpacingSettingsKeys {
|
|
53
|
+
letterSpacing = "letterSpacing",
|
|
54
|
+
lineHeight = "lineHeight",
|
|
55
|
+
paragraphIndent = "paragraphIndent",
|
|
56
|
+
paragraphSpacing = "paragraphSpacing",
|
|
57
|
+
publisherStyles = "publisherStyles",
|
|
58
|
+
spacingPresets = "spacingPresets",
|
|
59
|
+
wordSpacing = "wordSpacing"
|
|
60
|
+
}
|
|
61
|
+
declare enum ThSettingsContainerKeys {
|
|
62
|
+
initial = "initial",
|
|
63
|
+
text = "text",
|
|
64
|
+
spacing = "spacing"
|
|
65
|
+
}
|
|
66
|
+
declare enum ThSettingsRangeVariant {
|
|
67
|
+
slider = "slider",
|
|
68
|
+
incrementedSlider = "incrementedSlider",
|
|
69
|
+
numberField = "numberField"
|
|
70
|
+
}
|
|
71
|
+
declare enum ThSettingsRangePlaceholder {
|
|
72
|
+
range = "range",
|
|
73
|
+
none = "none"
|
|
74
|
+
}
|
|
75
|
+
declare enum ThSpacingPresetKeys {
|
|
76
|
+
publisher = "publisher",
|
|
77
|
+
tight = "tight",
|
|
78
|
+
balanced = "balanced",
|
|
79
|
+
loose = "loose",
|
|
80
|
+
accessible = "accessible",
|
|
81
|
+
custom = "custom"
|
|
82
|
+
}
|
|
83
|
+
declare enum ThLayoutOptions {
|
|
84
|
+
scroll = "scroll_option",
|
|
85
|
+
paginated = "page_option"
|
|
86
|
+
}
|
|
87
|
+
declare enum ThTextAlignOptions {
|
|
88
|
+
publisher = "publisher",
|
|
89
|
+
start = "start",
|
|
90
|
+
justify = "justify"
|
|
91
|
+
}
|
|
92
|
+
declare enum ThLineHeightOptions {
|
|
93
|
+
publisher = "publisher",
|
|
94
|
+
small = "small",
|
|
95
|
+
medium = "medium",
|
|
96
|
+
large = "large"
|
|
97
|
+
}
|
|
98
|
+
declare const defaultTextSettingsMain: ThTextSettingsKeys[];
|
|
99
|
+
declare const defaultTextSettingsSubpanel: ThTextSettingsKeys[];
|
|
100
|
+
declare const defaultSpacingSettingsMain: ThSpacingSettingsKeys[];
|
|
101
|
+
declare const defaultSpacingSettingsSubpanel: ThSpacingSettingsKeys[];
|
|
102
|
+
declare const defaultSpacingPresetsOrder: ThSpacingPresetKeys[];
|
|
103
|
+
declare const defaultParagraphSpacing: Required<ThSettingsRangePref>;
|
|
104
|
+
declare const defaultParagraphIndent: Required<ThSettingsRangePref>;
|
|
105
|
+
declare const defaultWordSpacing: Required<ThSettingsRangePref>;
|
|
106
|
+
declare const defaultLetterSpacing: Required<ThSettingsRangePref>;
|
|
107
|
+
declare const defaultLineHeights: {
|
|
108
|
+
small: number;
|
|
109
|
+
medium: number;
|
|
110
|
+
large: number;
|
|
111
|
+
};
|
|
112
|
+
declare const defaultZoom: Required<ThSettingsRangePref>;
|
|
113
|
+
declare const defaultSpacingPresets: {
|
|
114
|
+
tight: {
|
|
115
|
+
lineHeight: ThLineHeightOptions;
|
|
116
|
+
paragraphSpacing: number;
|
|
117
|
+
paragraphIndent: number;
|
|
118
|
+
};
|
|
119
|
+
balanced: {
|
|
120
|
+
lineHeight: ThLineHeightOptions;
|
|
121
|
+
paragraphSpacing: number;
|
|
122
|
+
paragraphIndent: number;
|
|
123
|
+
};
|
|
124
|
+
loose: {
|
|
125
|
+
lineHeight: ThLineHeightOptions;
|
|
126
|
+
paragraphSpacing: number;
|
|
127
|
+
paragraphIndent: number;
|
|
128
|
+
};
|
|
129
|
+
accessible: {
|
|
130
|
+
lineHeight: ThLineHeightOptions;
|
|
131
|
+
paragraphSpacing: number;
|
|
132
|
+
paragraphIndent: number;
|
|
133
|
+
letterSpacing: number;
|
|
134
|
+
wordSpacing: number;
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
declare enum ThColorScheme {
|
|
139
|
+
light = "light",
|
|
140
|
+
dark = "dark"
|
|
141
|
+
}
|
|
142
|
+
declare const useColorScheme: (onChange?: (colorScheme: ThColorScheme) => void) => ThColorScheme;
|
|
143
|
+
|
|
144
|
+
declare enum ThContrast {
|
|
145
|
+
none = "no-preference",
|
|
146
|
+
more = "more",
|
|
147
|
+
less = "less",
|
|
148
|
+
custom = "custom"
|
|
149
|
+
}
|
|
150
|
+
declare const useContrast: (onChange?: (contrast: ThContrast) => void) => ThContrast;
|
|
151
|
+
|
|
152
|
+
export { useColorScheme as A, useContrast as B, type I18nValue as I, ThLineHeightOptions as T, ThSpacingPresetKeys as a, ThSpacingSettingsKeys as b, ThTextAlignOptions as c, ThColorScheme as d, ThContrast as e, ThSettingsKeys as f, ThTextSettingsKeys as g, type ThSettingsRangePref as h, type ThSettingsRadioPref as i, type ThSettingsGroupPref as j, ThSettingsContainerKeys as k, ThSettingsRangeVariant as l, ThSettingsRangePlaceholder as m, ThLayoutOptions as n, defaultTextSettingsMain as o, defaultTextSettingsSubpanel as p, defaultSpacingSettingsMain as q, defaultSpacingSettingsSubpanel as r, defaultSpacingPresetsOrder as s, defaultParagraphSpacing as t, defaultParagraphIndent as u, defaultWordSpacing as v, defaultLetterSpacing as w, defaultLineHeights as x, defaultZoom as y, defaultSpacingPresets as z };
|
|
@@ -15,7 +15,7 @@ interface EpubNavigatorLoadProps {
|
|
|
15
15
|
contentProtection?: IContentProtectionConfig;
|
|
16
16
|
}
|
|
17
17
|
declare const useEpubNavigator: () => {
|
|
18
|
-
EpubNavigatorLoad: (config: EpubNavigatorLoadProps, cb: Function) => void;
|
|
18
|
+
EpubNavigatorLoad: (config: EpubNavigatorLoadProps, cb: Function, fxlCallback?: (locator: Locator) => void) => void;
|
|
19
19
|
EpubNavigatorDestroy: (cb: Function) => void;
|
|
20
20
|
goRight: (animated: boolean, callback: cbb) => void;
|
|
21
21
|
goLeft: (animated: boolean, callback: cbb) => void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { C as CustomizableKeys, D as DefaultKeys,
|
|
2
|
+
import { C as CustomizableKeys, D as DefaultKeys, T as ThPreferencesAdapter, a as ThPreferences, W as WeightConfig, V as VariableFontRangeConfig, F as FontCollection } from './ThPreferencesAdapter-DrZ5_6Dv.mjs';
|
|
3
3
|
import { ILinkInjectable, IUrlInjectable, IBlobInjectable } from '@readium/navigator';
|
|
4
4
|
|
|
5
5
|
type Props<K extends CustomizableKeys = DefaultKeys> = {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { TooltipProps, Heading, HeadingProps, PopoverProps } from 'react-aria-components';
|
|
3
|
-
import { s as ThActionsTriggerVariant, r as ThCollapsibilityVisibility, p as ThActionEntry,
|
|
4
|
-
import { T as ThActionButtonProps, f as ThMenuItemProps, a as ThCollapsibleActionsBarProps, t as ThSettingsEntry, W as WithRef, r as ThDropdownProps, h as ThNumberFieldProps, k as ThRadioGroupProps, m as ThSliderProps, o as ThSwitchProps } from './ThSettingsWrapper-
|
|
3
|
+
import { s as ThActionsTriggerVariant, r as ThCollapsibilityVisibility, p as ThActionEntry, c as ThActionsKeys, T as ThDockingKeys, b as ThSheetTypes, a as ThSheetHeaderVariant } from './actions-D2CHvCHu.mjs';
|
|
4
|
+
import { T as ThActionButtonProps, f as ThMenuItemProps, a as ThCollapsibleActionsBarProps, t as ThSettingsEntry, W as WithRef, r as ThDropdownProps, h as ThNumberFieldProps, k as ThRadioGroupProps, m as ThSliderProps, o as ThSwitchProps } from './ThSettingsWrapper-8Kx0SnH4.mjs';
|
|
5
5
|
import React__default, { RefObject, ReactNode } from 'react';
|
|
6
|
-
import {
|
|
6
|
+
import { g as ThTextSettingsKeys, b as ThSpacingSettingsKeys, j as ThSettingsGroupPref, a as ThSpacingPresetKeys, T as ThLineHeightOptions } from './useContrast-D6sjPjxy.mjs';
|
|
7
7
|
import { PressEvent } from 'react-aria';
|
|
8
|
-
import { A as ActionsStateKeys } from './actionsReducer-
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
8
|
+
import { A as ActionsStateKeys } from './actionsReducer-kc-S130w.mjs';
|
|
9
|
+
import { a as ThPreferences, D as DefaultKeys } from './ThPreferencesAdapter-DrZ5_6Dv.mjs';
|
|
10
|
+
import { Publication, Locator, Fetcher } from '@readium/shared';
|
|
11
|
+
import { ReaderProfile } from './lib/index.mjs';
|
|
12
|
+
import { P as ProcessedError } from './errorHandler-CL2YIfQY.mjs';
|
|
13
13
|
|
|
14
14
|
interface StatefulActionsMapObject {
|
|
15
15
|
Trigger: React.ComponentType<StatefulActionTriggerProps>;
|
|
@@ -297,15 +297,50 @@ declare const StatefulPreferencesProvider: ({ children, initialPreferences }: {
|
|
|
297
297
|
|
|
298
298
|
declare const useNavigator: () => any;
|
|
299
299
|
|
|
300
|
+
interface PositionStorage {
|
|
301
|
+
get: () => Locator | undefined;
|
|
302
|
+
set: (locator: Locator) => void | Promise<void>;
|
|
303
|
+
}
|
|
304
|
+
interface StatefulReaderProps {
|
|
305
|
+
publication: Publication;
|
|
306
|
+
localDataKey: string | null;
|
|
307
|
+
plugins?: ThPlugin[];
|
|
308
|
+
positionStorage?: PositionStorage;
|
|
309
|
+
}
|
|
310
|
+
type ThPluginFactory = () => ThPlugin[] | Promise<ThPlugin[]>;
|
|
311
|
+
interface ReaderPlugins {
|
|
312
|
+
epub?: ThPluginFactory;
|
|
313
|
+
webPub?: ThPluginFactory;
|
|
314
|
+
audio?: ThPluginFactory;
|
|
315
|
+
}
|
|
316
|
+
interface ReaderComponentProps {
|
|
317
|
+
profile: "epub" | "webPub" | "audio" | undefined | null;
|
|
318
|
+
publication: Publication;
|
|
319
|
+
localDataKey: string | null;
|
|
320
|
+
positionStorage?: PositionStorage;
|
|
321
|
+
plugins?: ReaderPlugins;
|
|
322
|
+
}
|
|
323
|
+
declare const StatefulReaderWrapper: ({ profile, plugins, ...props }: ReaderComponentProps) => react_jsx_runtime.JSX.Element | null;
|
|
324
|
+
|
|
300
325
|
interface UsePublicationOptions {
|
|
301
326
|
url: string;
|
|
302
|
-
onError?: (error:
|
|
327
|
+
onError?: (error: ProcessedError) => void;
|
|
328
|
+
fetcher?: Fetcher;
|
|
303
329
|
}
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
330
|
+
interface UsePublicationReturn {
|
|
331
|
+
isLoading: boolean;
|
|
332
|
+
error: ProcessedError | null;
|
|
333
|
+
publication: Publication | null;
|
|
334
|
+
manifest: object | null;
|
|
335
|
+
selfLink: string | null;
|
|
336
|
+
localDataKey: string | null;
|
|
337
|
+
profile: ReaderProfile | null;
|
|
338
|
+
isRTL: boolean;
|
|
339
|
+
isFXL: boolean;
|
|
340
|
+
fontLanguage: string;
|
|
341
|
+
hasDisplayTransformability: boolean;
|
|
342
|
+
}
|
|
343
|
+
declare const usePublication: ({ url, onError, fetcher: customFetcher }: UsePublicationOptions) => UsePublicationReturn;
|
|
309
344
|
|
|
310
345
|
interface ReaderTransitions {
|
|
311
346
|
isImmersive: boolean;
|
|
@@ -327,39 +362,4 @@ interface ReaderTransitions {
|
|
|
327
362
|
}
|
|
328
363
|
declare const useReaderTransitions: () => ReaderTransitions;
|
|
329
364
|
|
|
330
|
-
|
|
331
|
-
columnCount: string;
|
|
332
|
-
fontFamily: FontFamilyStateObject;
|
|
333
|
-
fontSize: number;
|
|
334
|
-
fontWeight: number;
|
|
335
|
-
hyphens: boolean | null;
|
|
336
|
-
letterSpacing: number | null;
|
|
337
|
-
lineLength: LineLengthStateObject | null;
|
|
338
|
-
lineHeight: ThLineHeightOptions | null;
|
|
339
|
-
paragraphIndent: number | null;
|
|
340
|
-
paragraphSpacing: number | null;
|
|
341
|
-
publisherStyles: boolean;
|
|
342
|
-
scroll: boolean;
|
|
343
|
-
textAlign: ThTextAlignOptions | null;
|
|
344
|
-
textNormalization: boolean;
|
|
345
|
-
theme?: string;
|
|
346
|
-
wordSpacing: number | null;
|
|
347
|
-
}
|
|
348
|
-
interface StatelessCache {
|
|
349
|
-
layoutUI: ThLayoutUI;
|
|
350
|
-
isImmersive: boolean;
|
|
351
|
-
isHovering: boolean;
|
|
352
|
-
arrowsOccupySpace: boolean;
|
|
353
|
-
settings: ReadiumCSSSettings;
|
|
354
|
-
positionsList: Locator[];
|
|
355
|
-
colorScheme?: ThColorScheme;
|
|
356
|
-
reducedMotion?: boolean;
|
|
357
|
-
}
|
|
358
|
-
interface StatefulReaderProps {
|
|
359
|
-
rawManifest: object;
|
|
360
|
-
selfHref: string;
|
|
361
|
-
plugins?: ThPlugin[];
|
|
362
|
-
}
|
|
363
|
-
declare const StatefulReader: ({ rawManifest, selfHref, plugins }: StatefulReaderProps) => react_jsx_runtime.JSX.Element | null;
|
|
364
|
-
|
|
365
|
-
export { StatefulHyphens as $, StatefulDropdown as A, type StatefulNumberFieldProps as B, StatefulNumberField as C, type StatefulRadioGroupProps as D, StatefulRadioGroup as E, type StatefulSliderProps as F, StatefulSlider as G, type StatefulSwitchProps as H, StatefulSwitch as I, type useGridNavigationProps as J, useGridNavigation as K, useGridTemplate as L, type StatefulSettingsItemProps as M, StatefulLetterSpacing as N, StatefulLineHeight as O, StatefulParagraphIndent as P, StatefulParagraphSpacing as Q, StatefulSpacingGroup as R, type StatefulReaderProps as S, type ThPlugin as T, StatefulSpacingGroupContainer as U, StatefulSpacingPresets as V, StatefulWordSpacing as W, useLineHeight as X, useSpacingPresets as Y, StatefulFontFamily as Z, UnstableStatefulFontWeight as _, usePublication as a, StatefulTextAlign as a0, StatefulTextGroup as a1, StatefulTextGroupContainer as a2, StatefulTextNormalize as a3, StatefulPublisherStyles as a4, StatefulZoom as a5, type StatefulBottomSheetProps as a6, type ScrimPref as a7, StatefulBottomSheet as a8, type StatefulDockedSheetProps as a9, StatefulDockedSheet as aa, type StatefulFullScreenSheetProps as ab, StatefulFullScreenSheet as ac, type StatefulPopoverSheetProps as ad, StatefulPopoverSheet as ae, StatefulSheetWrapper as af, type StatefulSheet as ag, StatefulPreferencesProvider as ah, type ReadiumCSSSettings as ai, type StatelessCache as aj, StatefulReader as ak, useReaderTransitions as b, type StatefulActionsMapObject as c, type StatefulActionTriggerProps as d, type StatefulActionContainerProps as e, StatefulFullscreenTrigger as f, StatefulJumpToPositionContainer as g, StatefulJumpToPositionTrigger as h, StatefulSettingsContainer as i, StatefulSettingsTrigger as j, StatefulTocContainer as k, StatefulTocTrigger as l, type StatefulActionIconProps as m, StatefulActionIcon as n, type StatefulOverflowMenuItemProps as o, StatefulOverflowMenuItem as p, type StatefulCollapsibleActionsBarProps as q, StatefulCollapsibleActionsBar as r, type StatefulOverflowMenuProps as s, StatefulOverflowMenu as t, useNavigator as u, useDocking as v, createDefaultPlugin as w, type StatefulGroupWrapperProps as x, StatefulGroupWrapper as y, type StatefulDropdownProps as z };
|
|
365
|
+
export { StatefulTextAlign as $, type StatefulNumberFieldProps as A, StatefulNumberField as B, type StatefulRadioGroupProps as C, StatefulRadioGroup as D, type StatefulSliderProps as E, StatefulSlider as F, type StatefulSwitchProps as G, StatefulSwitch as H, type useGridNavigationProps as I, useGridNavigation as J, useGridTemplate as K, type StatefulSettingsItemProps as L, StatefulLetterSpacing as M, StatefulLineHeight as N, StatefulParagraphIndent as O, StatefulParagraphSpacing as P, StatefulSpacingGroup as Q, StatefulSpacingGroupContainer as R, type StatefulActionsMapObject as S, type ThPlugin as T, StatefulSpacingPresets as U, StatefulWordSpacing as V, useLineHeight as W, useSpacingPresets as X, StatefulFontFamily as Y, UnstableStatefulFontWeight as Z, StatefulHyphens as _, usePublication as a, StatefulTextGroup as a0, StatefulTextGroupContainer as a1, StatefulTextNormalize as a2, StatefulPublisherStyles as a3, StatefulZoom as a4, type StatefulBottomSheetProps as a5, type ScrimPref as a6, StatefulBottomSheet as a7, type StatefulDockedSheetProps as a8, StatefulDockedSheet as a9, type StatefulFullScreenSheetProps as aa, StatefulFullScreenSheet as ab, type StatefulPopoverSheetProps as ac, StatefulPopoverSheet as ad, StatefulSheetWrapper as ae, type StatefulSheet as af, StatefulPreferencesProvider as ag, type PositionStorage as ah, type StatefulReaderProps as ai, type ThPluginFactory as aj, type ReaderPlugins as ak, type ReaderComponentProps as al, StatefulReaderWrapper as am, useReaderTransitions as b, type StatefulActionTriggerProps as c, type StatefulActionContainerProps as d, StatefulFullscreenTrigger as e, StatefulJumpToPositionContainer as f, StatefulJumpToPositionTrigger as g, StatefulSettingsContainer as h, StatefulSettingsTrigger as i, StatefulTocContainer as j, StatefulTocTrigger as k, type StatefulActionIconProps as l, StatefulActionIcon as m, type StatefulOverflowMenuItemProps as n, StatefulOverflowMenuItem as o, type StatefulCollapsibleActionsBarProps as p, StatefulCollapsibleActionsBar as q, type StatefulOverflowMenuProps as r, StatefulOverflowMenu as s, useDocking as t, useNavigator as u, createDefaultPlugin as v, type StatefulGroupWrapperProps as w, StatefulGroupWrapper as x, type StatefulDropdownProps as y, StatefulDropdown as z };
|
package/package.json
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"bugs": {
|
|
21
21
|
"url": "https://github.com/edrlab/thorium-web/issues"
|
|
22
22
|
},
|
|
23
|
-
"version": "1.
|
|
23
|
+
"version": "1.2.0",
|
|
24
24
|
"private": false,
|
|
25
25
|
"files": [
|
|
26
26
|
"./dist"
|
|
@@ -40,6 +40,8 @@
|
|
|
40
40
|
"./misc": "./dist/components/Misc/index.mjs",
|
|
41
41
|
"./misc/styles": "./dist/components/Misc/index.css",
|
|
42
42
|
"./next": "./dist/next-lib/index.mjs",
|
|
43
|
+
"./reader": "./dist/components/Reader/index.mjs",
|
|
44
|
+
"./reader/styles": "./dist/components/Reader/index.css",
|
|
43
45
|
"./webpub": "./dist/components/WebPub/index.mjs",
|
|
44
46
|
"./webpub/styles": "./dist/components/WebPub/index.css"
|
|
45
47
|
},
|
|
@@ -60,7 +62,7 @@
|
|
|
60
62
|
},
|
|
61
63
|
"peerDependencies": {
|
|
62
64
|
"@readium/css": "^2.0.0",
|
|
63
|
-
"@readium/navigator": "2.3.
|
|
65
|
+
"@readium/navigator": "2.3.1",
|
|
64
66
|
"@readium/navigator-html-injectables": "2.3.0",
|
|
65
67
|
"@readium/shared": "2.1.5",
|
|
66
68
|
"@reduxjs/toolkit": "^2.11.2",
|
|
@@ -81,7 +83,7 @@
|
|
|
81
83
|
"dependencies": {
|
|
82
84
|
"@edrlab/thorium-locales": "github:edrlab/thorium-locales",
|
|
83
85
|
"@readium/css": "^2.0.0",
|
|
84
|
-
"@readium/navigator": "2.3.
|
|
86
|
+
"@readium/navigator": "2.3.1",
|
|
85
87
|
"@readium/navigator-html-injectables": "2.3.0",
|
|
86
88
|
"@readium/shared": "2.1.5",
|
|
87
89
|
"@reduxjs/toolkit": "^2.11.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/readerReducer.ts","../src/lib/settingsReducer.ts","../src/lib/themeReducer.ts","../src/lib/actionsReducer.ts","../src/lib/publicationReducer.ts","../src/lib/helpers/mapPreferences.ts","../src/lib/preferencesReducer.ts","../src/lib/webPubSettingsReducer.ts","../node_modules/.pnpm/debounce@3.0.0/node_modules/debounce/index.js","../src/lib/store.ts","../src/lib/ThStoreProvider.tsx","../src/lib/ThReduxPreferencesAdapter.ts","../src/lib/hooks.ts"],"names":["initialState","createSlice"],"mappings":"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","file":"chunk-COQXDRKD.mjs","sourcesContent":["import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { defaultPlatformModifier, UnstablePlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { ThSettingsContainerKeys, ThLayoutDirection } from \"@/preferences/models\";\n\nexport interface ReaderReducerState {\n profile: \"epub\" | \"webPub\" | undefined;\n direction: ThLayoutDirection;\n isLoading: boolean;\n isImmersive: boolean;\n isHovering: boolean;\n hasScrollAffordance: boolean;\n hasArrows: boolean;\n hasUserNavigated: boolean;\n isFullscreen: boolean;\n settingsContainer: ThSettingsContainerKeys;\n platformModifier: UnstablePlatformModifier;\n}\n\nconst initialState: ReaderReducerState = {\n profile: undefined,\n direction: ThLayoutDirection.ltr,\n isLoading: true,\n isImmersive: false,\n isHovering: false,\n hasScrollAffordance: false,\n hasArrows: true,\n hasUserNavigated: false,\n isFullscreen: false,\n settingsContainer: ThSettingsContainerKeys.initial,\n platformModifier: defaultPlatformModifier\n}\n\nexport const readerSlice = createSlice({\n name: \"reader\",\n initialState,\n reducers: {\n setReaderProfile: (state, action) => {\n state.profile = action.payload\n },\n setDirection: (state, action) => {\n state.direction = action.payload\n },\n setLoading: (state, action) => {\n state.isLoading = action.payload\n },\n setPlatformModifier: (state, action) => {\n state.platformModifier = action.payload\n },\n setImmersive: (state, action) => {\n state.isImmersive = action.payload\n if (action.payload === true) {\n state.isHovering = false;\n state.hasScrollAffordance = false;\n }\n },\n toggleImmersive: (state) => {\n state.isImmersive = !state.isImmersive;\n if (state.isImmersive === true) {\n state.isHovering = false;\n state.hasScrollAffordance = false;\n }\n },\n setHovering: (state, action) => {\n state.isHovering = action.payload\n },\n setScrollAffordance: (state, action) => {\n state.hasScrollAffordance = action.payload\n if (action.payload === true) {\n state.isHovering = false;\n state.isImmersive = false;\n }\n },\n setHasArrows: (state, action) => {\n state.hasArrows = action.payload\n },\n setUserNavigated: (state, action) => {\n state.hasUserNavigated = action.payload;\n },\n setFullscreen: (state, action) => {\n state.isFullscreen = action.payload\n },\n setSettingsContainer: (state, action) => {\n state.settingsContainer = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setReaderProfile, \n setDirection, \n setLoading,\n setPlatformModifier, \n setImmersive, \n toggleImmersive, \n setHovering,\n setScrollAffordance,\n setHasArrows, \n setUserNavigated,\n setFullscreen,\n setSettingsContainer\n} = readerSlice.actions;\n\nexport default readerSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { \n ThLineHeightOptions, \n ThSpacingPresetKeys, \n ThSpacingSettingsKeys, \n ThTextAlignOptions \n} from \"@/preferences/models\";\n\nexport interface FontFamilyStateObject {\n default: string;\n [language: string]: string;\n}\n\nexport interface SetFontFamilyPayload {\n type: string;\n payload: {\n key: \"default\" | string;\n value: string;\n }\n}\n\nexport interface LineLengthStateObject {\n optimal?: number | null;\n min?: {\n chars?: number | null;\n isDisabled?: boolean;\n },\n max?: {\n chars?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SetLineLengthPayload {\n type: string;\n payload: {\n key: \"optimal\" | \"min\" | \"max\";\n value?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SetSpacingSettingPayload<T = number | ThLineHeightOptions | null> {\n type: string;\n payload: {\n value: T;\n preset?: ThSpacingPresetKeys;\n }\n}\n\nexport interface SetSpacingPresetPayload {\n type: string;\n payload: {\n preset: ThSpacingPresetKeys;\n values: Partial<Record<SpacingStateKey, number | ThLineHeightOptions | null>>;\n }\n}\n\nexport type SpacingStateKey = Exclude<ThSpacingSettingsKeys, ThSpacingSettingsKeys.spacingPresets | ThSpacingSettingsKeys.publisherStyles>;\n\nexport interface SpacingStateObject {\n preset: ThSpacingPresetKeys;\n custom: Partial<Record<SpacingStateKey, number | ThLineHeightOptions | null>>;\n baseline: Partial<Record<SpacingStateKey, number | ThLineHeightOptions | null>>;\n}\n\nexport interface SettingsReducerState {\n columnCount: string;\n fontFamily: FontFamilyStateObject;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineHeight: ThLineHeightOptions | null;\n lineLength: LineLengthStateObject | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n spacing: SpacingStateObject;\n textAlign: ThTextAlignOptions;\n textNormalization: boolean;\n wordSpacing: number | null;\n}\n\nconst initialState: SettingsReducerState = {\n columnCount: \"auto\",\n fontFamily: { default: \"publisher\" },\n fontSize: 1,\n fontWeight: 400,\n hyphens: null,\n letterSpacing: null,\n lineHeight: ThLineHeightOptions.publisher,\n lineLength: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n publisherStyles: true,\n scroll: false,\n spacing: {\n preset: ThSpacingPresetKeys.publisher,\n custom: {},\n baseline: {}\n },\n textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\n}\n\nconst checkRootSpacingSettingsAtInit = (state: SettingsReducerState) => {\n return (\n state.letterSpacing === null &&\n state.lineHeight === ThLineHeightOptions.publisher &&\n state.paragraphIndent === null &&\n state.paragraphSpacing === null &&\n state.wordSpacing === null\n );\n}\n\nexport const handleSpacingSetting = (state: any, action: SetSpacingSettingPayload, settingKey: ThSpacingSettingsKeys) => {\n const { value, preset } = action.payload;\n\n state.publisherStyles = false;\n\n if (!preset) {\n state[settingKey] = value;\n\n if (checkRootSpacingSettingsAtInit(state)) {\n state.publisherStyles = true;\n }\n\n return;\n }\n\n // Initialize spacing state if needed\n if (!state.spacing) {\n state.spacing = {\n preset: ThSpacingPresetKeys.custom,\n custom: {\n [settingKey]: value\n }\n };\n }\n\n // Ensure custom exist for backward compatibility\n if (!state.spacing.custom) {\n state.spacing.custom = {};\n }\n\n if (state.spacing.preset !== ThSpacingPresetKeys.custom) {\n state.spacing.preset = ThSpacingPresetKeys.custom;\n state.spacing.custom = state.spacing.baseline;\n } \n\n if (value === null) {\n delete state.spacing.custom[settingKey];\n } else {\n state.spacing.custom[settingKey] = value;\n }\n};\n\nexport const settingsSlice = createSlice({\n name: \"settings\",\n initialState,\n reducers: {\n setColumnCount: (state, action) => {\n state.columnCount = action.payload\n },\n setFontFamily: (state, action: SetFontFamilyPayload) => {\n const { key, value } = action.payload;\n state.fontFamily[key] = value;\n },\n setFontSize: (state, action) => {\n state.fontSize = action.payload\n },\n setFontWeight: (state, action) => {\n state.fontWeight = action.payload\n },\n setHyphens: (state, action) => {\n state.hyphens = action.payload\n },\n setLetterSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.letterSpacing);\n },\n setLineHeight: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.lineHeight);\n },\n setLineLength: (state, action: SetLineLengthPayload) => {\n // For min and max, we need to spread and handle isDisabled\n // when it is directly set, or depending on the payload value\n const deriveIsDisabled = (value: number | null | undefined, isDisabled?: boolean): boolean => {\n if (value === null) return true;\n if (isDisabled !== undefined) return isDisabled;\n return false;\n };\n\n switch (action.payload.key) {\n case \"optimal\":\n if (action.payload.value) {\n state.lineLength = {\n ...state.lineLength,\n optimal: action.payload.value\n };\n }\n break;\n \n case \"min\":\n state.lineLength = {\n ...state.lineLength,\n min: {\n ...state.lineLength?.min,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength?.min?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n \n case \"max\":\n state.lineLength = {\n ...state.lineLength,\n max: {\n ...state.lineLength?.max,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength?.max?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n default:\n break;\n }\n },\n setParagraphIndent: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphIndent);\n },\n setParagraphSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphSpacing);\n },\n setPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setScroll: (state, action) => {\n state.scroll = action.payload\n },\n setSpacingPreset: (state, action: SetSpacingPresetPayload) => {\n const { preset, values } = action.payload;\n\n // Initialize spacing state if needed\n if (!state.spacing) {\n state.spacing = {\n preset: preset,\n custom: {},\n baseline: {}\n };\n }\n\n state.spacing.preset = preset;\n\n if (preset !== ThSpacingPresetKeys.custom) {\n state.spacing.baseline = values;\n }\n\n if (preset === ThSpacingPresetKeys.publisher) {\n state.publisherStyles = true;\n } else {\n state.publisherStyles = false;\n }\n },\n setTextAlign: (state, action) => {\n state.textAlign = action.payload\n },\n setTextNormalization: (state, action) => {\n state.textNormalization = action.payload\n },\n setWordSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.wordSpacing);\n }\n }\n});\n\nexport const initialSettingsState = initialState;\n\n// Action creators are generated for each case reducer function\nexport const { \n setColumnCount,\n setFontSize,\n setFontWeight, \n setFontFamily,\n setHyphens, \n setLetterSpacing,\n setLineHeight,\n setLineLength,\n setParagraphIndent,\n setParagraphSpacing,\n setPublisherStyles,\n setScroll,\n setSpacingPreset,\n setTextAlign,\n setTextNormalization, \n setWordSpacing\n} = settingsSlice.actions;\n\nexport default settingsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\nimport { ThContrast } from \"@/core/Hooks/useContrast\";\nimport { ThBreakpoints } from \"@/preferences/models\";\n\nexport interface ThemeStateObject {\n reflow?: string;\n fxl?: string;\n}\n\nexport interface ThemeStateChangePayload {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\";\n value?: string;\n }\n}\n\nexport interface ThemeReducerState {\n monochrome: boolean;\n colorScheme: ThColorScheme;\n theme: ThemeStateObject;\n prefersReducedMotion: boolean;\n prefersReducedTransparency: boolean;\n prefersContrast: ThContrast;\n forcedColors: boolean;\n breakpoint?: ThBreakpoints;\n}\n\nconst initialState: ThemeReducerState = {\n monochrome: false,\n colorScheme: ThColorScheme.light,\n theme: {\n reflow: \"auto\",\n fxl: \"auto\"\n },\n prefersReducedMotion: false,\n prefersReducedTransparency: false, \n prefersContrast: ThContrast.none,\n forcedColors: false, \n breakpoint: undefined\n}\n\nexport const themeSlice = createSlice({\n name: \"theming\",\n initialState,\n reducers: {\n setMonochrome: (state, action) => {\n state.monochrome = action.payload\n },\n setColorScheme: (state, action) => {\n state.colorScheme = action.payload\n },\n setTheme: (state, action: ThemeStateChangePayload) => {\n state.theme[action.payload.key] = action.payload.value || \"auto\"\n },\n setReducedMotion: (state, action) => {\n state.prefersReducedMotion = action.payload\n },\n setReducedTransparency: (state, action) => {\n state.prefersReducedTransparency = action.payload\n },\n setContrast: (state, action) => {\n state.prefersContrast = action.payload\n },\n setForcedColors: (state, action) => {\n state.forcedColors = action.payload\n },\n setBreakpoint: (state, action) => {\n state.breakpoint = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setMonochrome, \n setColorScheme, \n setTheme, \n setReducedMotion, \n setReducedTransparency, \n setContrast, \n setForcedColors, \n setBreakpoint,\n} = themeSlice.actions;\n\nexport default themeSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThDockingKeys } from \"../preferences/models\";\n\nexport type ActionsStateKeys = string;\nexport type OverflowStateKeys = string; \n\nexport interface ActionStateObject {\n isOpen?: boolean | null;\n docking?: ThDockingKeys | null;\n dockedWidth?: number;\n}\n\nexport interface OverflowStateObject {\n isOpen: boolean;\n}\n\nexport interface DockStateObject {\n actionKey: ActionsStateKeys | null;\n active: boolean;\n collapsed: boolean;\n width?: number;\n}\n\nexport interface ActionStateDockPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n dockingKey: ThDockingKeys;\n }\n}\n\nexport interface ActionStateOpenPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n isOpen: boolean;\n }\n}\n\nexport interface ActionStateTogglePayload {\n type: string;\n payload: {\n key: ActionsStateKeys\n }\n}\n\nexport interface ActionOverflowOpenPayload {\n type: string;\n payload: {\n key: OverflowStateKeys;\n isOpen: boolean;\n }\n}\n\nexport interface ActionStateDockedPayload {\n type: string;\n payload: { \n slot: ThDockingKeys.start | ThDockingKeys.end;\n docked: DockStateObject;\n }\n}\n\nexport interface ActionStateSlotPayload {\n type: string;\n payload: ThDockingKeys.start | ThDockingKeys.end;\n}\n\nexport interface ActionStateSlotWidthPayload {\n type: string;\n payload: { \n key: ThDockingKeys.start | ThDockingKeys.end;\n width: number;\n }\n}\n\nexport interface DockState {\n [ThDockingKeys.start]: DockStateObject;\n [ThDockingKeys.end]: DockStateObject;\n}\n\nexport type ActionsReducerState = {\n keys: {\n [key in ActionsStateKeys]?: ActionStateObject;\n };\n dock: DockState,\n overflow: {\n [key in OverflowStateKeys]?: OverflowStateObject;\n }\n}\n\nconst initialState: ActionsReducerState = {\n dock: {\n [ThDockingKeys.start]: {\n actionKey: null,\n active: false,\n collapsed: false\n },\n [ThDockingKeys.end]: {\n actionKey: null,\n active: false,\n collapsed: false\n }\n },\n keys: {},\n overflow: {}\n}\n\nexport const actionsSlice = createSlice({\n name: \"actions\",\n initialState,\n reducers: {\n dockAction: (state, action: ActionStateDockPayload) => {\n // The user should be able to override the dock slot\n // so we override the previous value, and sync \n // any other action with the same docking key\n switch(action.payload.dockingKey) {\n case ThDockingKeys.start:\n // We need to find if any other action has the same docking key. \n // If it does, we also have to close it so that its transient sheet \n // doesn’t pop over on the screen when it’s replaced\n for (const key in state.keys) {\n if (state.keys[key as ActionsStateKeys]?.docking === action.payload.dockingKey) {\n state.keys[key as ActionsStateKeys] = { \n ...state.keys[key as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: action.payload.key\n }\n // And remove it from the other one\n if (state.dock[ThDockingKeys.end].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: null\n }\n }\n break;\n\n case ThDockingKeys.end:\n // We need to find if any other action has the same docking key. \n // If it does, we also have to close it so that its transient sheet \n // doesn’t pop over on the screen when it’s replaced\n for (const key in state.keys) {\n if (state.keys[key as ActionsStateKeys]?.docking === action.payload.dockingKey) {\n state.keys[key as ActionsStateKeys] = { \n ...state.keys[key as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: action.payload.key\n }\n // And remove it from the other one\n if (state.dock[ThDockingKeys.start].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: null\n }\n }\n break;\n\n // We don’t need to sync another action\n case ThDockingKeys.transient:\n default: \n // We need to empty the docking slot\n if (state.dock[ThDockingKeys.start].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: null\n }\n }\n if (state.dock[ThDockingKeys.end].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: null\n }\n } \n break;\n }\n\n state.keys[action.payload.key] = { \n ...state.keys[action.payload.key],\n docking: action.payload.dockingKey \n };\n },\n setActionOpen: (state, action: ActionStateOpenPayload) => { \n // If the action is docked and set Open, we must take care of \n // the dock panel’s collapsibility. Otherwise we end up with bugs \n // i.e. user has to click/tap action icon twice to open, \n const dockingKey = state.keys[action.payload.key]?.docking;\n if (\n !action.payload.isOpen && \n dockingKey && \n dockingKey !== ThDockingKeys.transient &&\n state.dock[dockingKey].actionKey === action.payload.key &&\n state.dock[dockingKey].active &&\n state.dock[dockingKey].collapsed\n ) {\n state.dock[dockingKey] = {\n ...state.dock[dockingKey],\n collapsed: false\n }\n } else {\n state.keys[action.payload.key] = {\n ...state.keys[action.payload.key],\n isOpen: action.payload.isOpen \n };\n }\n },\n toggleActionOpen: (state, action: ActionStateTogglePayload) => {\n const payload = {\n key: action.payload.key,\n isOpen: state.keys[action.payload.key]?.isOpen ? !state.keys[action.payload.key]?.isOpen : true\n };\n actionsSlice.caseReducers.setActionOpen(state, {\n type: \"toggleActionOpen\",\n payload: payload\n });\n },\n setOverflow: (state, action: ActionOverflowOpenPayload) => {\n state.overflow[action.payload.key] = {\n ...state.overflow[action.payload.key],\n isOpen: action.payload.isOpen \n }\n },\n activateDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n active: true\n }\n },\n deactivateDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n active: false\n }\n },\n collapseDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n collapsed: true\n }\n },\n expandDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n collapsed: false\n }\n },\n setDockPanelWidth: (state, action: ActionStateSlotWidthPayload) => {\n // Copy the value in the action state \n // in case we do something with it later.\n\n const key: ActionsStateKeys | null = state.dock[action.payload.key].actionKey;\n if (key) {\n state.keys[key] = {\n ...state.keys[key],\n dockedWidth: action.payload.width\n }\n }\n\n // We only care if it’s populated.\n if (state.dock[action.payload.key] !== null) {\n state.dock[action.payload.key] = {\n ...state.dock[action.payload.key],\n width: action.payload.width\n }\n }\n }\n }\n})\n\nexport const { \n dockAction, \n setActionOpen, \n toggleActionOpen, \n setOverflow, \n activateDockPanel, \n deactivateDockPanel, \n collapseDockPanel,\n expandDockPanel, \n setDockPanelWidth\n} = actionsSlice.actions;\n\nexport default actionsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { Locator } from \"@readium/shared\";\nimport { UnstableTimeline } from \"@/core/Hooks/useTimeline\";\n\nexport interface PublicationReducerState {\n fontLanguage: string;\n isFXL: boolean;\n isRTL: boolean;\n hasDisplayTransformability: boolean;\n positionsList: Locator[],\n atPublicationStart: boolean;\n atPublicationEnd: boolean;\n unstableTimeline?: UnstableTimeline;\n}\n\nconst initialState: PublicationReducerState = {\n fontLanguage: \"default\",\n isFXL: false,\n isRTL: false,\n hasDisplayTransformability: false,\n positionsList: [],\n atPublicationStart: false,\n atPublicationEnd: false,\n unstableTimeline: undefined\n}\n\nexport const publicationSlice = createSlice({\n name: \"publication\",\n initialState,\n reducers: {\n setFontLanguage: (state, action) => {\n state.fontLanguage = action.payload\n },\n setFXL: (state, action) => {\n state.isFXL = action.payload\n },\n setRTL: (state, action) => {\n state.isRTL = action.payload\n },\n setHasDisplayTransformability: (state, action) => {\n state.hasDisplayTransformability = action.payload\n },\n setPositionsList: (state, action) => {\n state.positionsList = action.payload\n },\n setPublicationStart: (state, action) => {\n state.atPublicationStart = action.payload\n },\n setPublicationEnd: (state, action) => {\n state.atPublicationEnd = action.payload\n },\n setTimeline: (state, action) => {\n state.unstableTimeline = {\n ...action.payload,\n toc: action.payload.toc || { tree: undefined, currentEntry: undefined }\n };\n },\n setTocTree: (state, action) => {\n if (!state.unstableTimeline) {\n state.unstableTimeline = {\n toc: { tree: action.payload, currentEntry: undefined }\n };\n } else if (state.unstableTimeline.toc) {\n state.unstableTimeline.toc.tree = action.payload;\n } else {\n state.unstableTimeline.toc = { tree: action.payload, currentEntry: undefined };\n }\n },\n setTocEntry: (state, action) => {\n if (!state.unstableTimeline) {\n state.unstableTimeline = {\n toc: { tree: undefined, currentEntry: action.payload }\n };\n } else if (state.unstableTimeline.toc) {\n state.unstableTimeline.toc.currentEntry = action.payload;\n } else {\n state.unstableTimeline.toc = { tree: undefined, currentEntry: action.payload };\n }\n }\n }\n});\n\n// Action creators are generated for each case reducer function\nexport const { \n setFontLanguage,\n setFXL,\n setRTL,\n setHasDisplayTransformability,\n setPositionsList,\n setPublicationStart,\n setPublicationEnd,\n setTimeline,\n setTocTree, \n setTocEntry,\n} = publicationSlice.actions;\n\nexport default publicationSlice.reducer;","import { PreferencesReducerState } from \"../preferencesReducer\";\nimport { ThPreferences, CustomizableKeys } from \"@/preferences/preferences\";\nimport { ThProgressionFormat, ThRunningHeadFormat, ThBreakpoints, ThPaginatedAffordancePrefValue } from \"@/preferences/models\";\n\nconst mapRenditionFormat = <T>(\n format: { default?: { variants: T }, breakpoints?: { [key in ThBreakpoints]?: { variants: T } } } | undefined\n) => {\n const result: {\n default?: T;\n breakpoints?: { [key in ThBreakpoints]?: T };\n } = {};\n\n if (format?.default?.variants !== undefined) {\n result.default = format.default.variants;\n }\n\n if (format?.breakpoints) {\n result.breakpoints = Object.entries(format.breakpoints).reduce((acc, [bp, value]) => {\n if (value?.variants !== undefined) {\n acc[bp as ThBreakpoints] = value.variants;\n }\n return acc;\n }, {} as { [key in ThBreakpoints]?: T });\n }\n\n return result;\n};\n\nconst mapPaginatedAffordance = (\n format: { default?: ThPaginatedAffordancePrefValue, breakpoints?: { [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue } } | undefined\n) => {\n const result: {\n default?: ThPaginatedAffordancePrefValue;\n breakpoints?: { [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue };\n } = {};\n\n if (format?.default) {\n result.default = format.default;\n }\n\n if (format?.breakpoints) {\n result.breakpoints = Object.entries(format.breakpoints).reduce((acc, [bp, value]) => {\n if (value) {\n acc[bp as ThBreakpoints] = value;\n }\n return acc;\n }, {} as { [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue });\n }\n\n return result;\n};\n\nexport const mapPreferencesToState = <T extends CustomizableKeys>(prefs: ThPreferences<T>): PreferencesReducerState => { \n return {\n l10n: {\n locale: prefs.locale,\n direction: prefs.direction\n },\n progressionFormat: {\n reflow: mapRenditionFormat<ThProgressionFormat | ThProgressionFormat[]>(\n prefs.theming?.progression?.format?.reflow\n ),\n fxl: mapRenditionFormat<ThProgressionFormat | ThProgressionFormat[]>(\n prefs.theming?.progression?.format?.fxl\n ),\n webPub: mapRenditionFormat<ThProgressionFormat | ThProgressionFormat[]>(\n prefs.theming?.progression?.format?.webPub\n )\n },\n runningHeadFormat: {\n reflow: mapRenditionFormat<ThRunningHeadFormat>(\n prefs.theming?.header?.runningHead?.format?.reflow\n ),\n fxl: mapRenditionFormat<ThRunningHeadFormat>(\n prefs.theming?.header?.runningHead?.format?.fxl\n ),\n webPub: mapRenditionFormat<ThRunningHeadFormat>(\n prefs.theming?.header?.runningHead?.format?.webPub\n )\n },\n ui: prefs.theming?.layout?.ui,\n scrollAffordances: {\n hintInImmersive: prefs.affordances?.scroll?.hintInImmersive ?? false,\n toggleOnMiddlePointer: prefs.affordances?.scroll?.toggleOnMiddlePointer ?? [],\n hideOnForwardScroll: prefs.affordances?.scroll?.hideOnForwardScroll ?? false,\n showOnBackwardScroll: prefs.affordances?.scroll?.showOnBackwardScroll ?? false\n },\n paginatedAffordances: {\n reflow: mapPaginatedAffordance(prefs.affordances?.paginated?.reflow),\n fxl: mapPaginatedAffordance(prefs.affordances?.paginated?.fxl)\n }\n };\n}\n\nexport const mapStateToPreferences = <T extends CustomizableKeys = CustomizableKeys>(\n state: PreferencesReducerState, \n currentPrefs: ThPreferences<T>\n): ThPreferences<T> => {\n const updateVariants = (stateValue: any, prefValue: any) => {\n if (!stateValue) return prefValue;\n \n return {\n ...prefValue,\n default: {\n ...prefValue?.default,\n variants: stateValue.default || prefValue?.default?.variants\n },\n ...(stateValue.breakpoints && {\n breakpoints: {\n ...prefValue?.breakpoints,\n ...Object.entries(stateValue.breakpoints).reduce((acc, [bp, value]) => {\n const existing = prefValue?.breakpoints?.[bp as ThBreakpoints] || {};\n return {\n ...acc,\n [bp]: {\n ...existing,\n variants: value\n }\n };\n }, {})\n }\n })\n };\n };\n\n const updatePaginatedAffordance = (stateValue: any, prefValue: any) => {\n if (!stateValue) return prefValue;\n \n return {\n ...prefValue,\n default: stateValue.default || prefValue?.default,\n ...(stateValue.breakpoints && {\n breakpoints: {\n ...prefValue?.breakpoints,\n ...Object.entries(stateValue.breakpoints).reduce((acc, [bp, value]) => ({\n ...acc,\n [bp]: value\n }), {})\n }\n })\n };\n };\n\n return {\n ...currentPrefs,\n locale: state.l10n?.locale ?? currentPrefs.locale,\n direction: state.l10n?.direction ?? currentPrefs.direction,\n theming: {\n ...currentPrefs.theming,\n ...(state.progressionFormat && {\n progression: {\n ...currentPrefs.theming.progression,\n format: {\n ...currentPrefs.theming.progression?.format,\n ...(state.progressionFormat.reflow !== undefined && {\n reflow: updateVariants(\n state.progressionFormat.reflow,\n currentPrefs.theming.progression?.format?.reflow\n )\n }),\n ...(state.progressionFormat.fxl !== undefined && {\n fxl: updateVariants(\n state.progressionFormat.fxl,\n currentPrefs.theming.progression?.format?.fxl\n )\n }),\n ...(state.progressionFormat.webPub !== undefined && {\n webPub: updateVariants(\n state.progressionFormat.webPub,\n currentPrefs.theming.progression?.format?.webPub\n )\n })\n }\n }\n }),\n ...(state.runningHeadFormat && {\n header: {\n ...currentPrefs.theming.header,\n runningHead: {\n ...currentPrefs.theming.header?.runningHead,\n format: {\n ...currentPrefs.theming.header?.runningHead?.format,\n ...(state.runningHeadFormat.reflow !== undefined && {\n reflow: updateVariants(\n state.runningHeadFormat.reflow,\n currentPrefs.theming.header?.runningHead?.format?.reflow\n )\n }),\n ...(state.runningHeadFormat.fxl !== undefined && {\n fxl: updateVariants(\n state.runningHeadFormat.fxl,\n currentPrefs.theming.header?.runningHead?.format?.fxl\n )\n }),\n ...(state.runningHeadFormat.webPub !== undefined && {\n webPub: updateVariants(\n state.runningHeadFormat.webPub,\n currentPrefs.theming.header?.runningHead?.format?.webPub\n )\n })\n }\n }\n }\n }),\n layout: {\n ...currentPrefs.theming.layout,\n ui: state.ui \n ? { \n ...currentPrefs.theming.layout?.ui,\n ...state.ui \n } \n : currentPrefs.theming.layout?.ui\n }\n },\n affordances: {\n ...currentPrefs.affordances,\n ...(state.scrollAffordances && {\n scroll: {\n ...currentPrefs.affordances.scroll,\n ...state.scrollAffordances\n }\n }),\n ...(state.paginatedAffordances && {\n paginated: {\n reflow: updatePaginatedAffordance(state.paginatedAffordances.reflow, currentPrefs.affordances?.paginated?.reflow),\n fxl: updatePaginatedAffordance(state.paginatedAffordances.fxl, currentPrefs.affordances?.paginated?.fxl)\n }\n })\n }\n };\n};","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nimport { \n ThLayoutDirection, \n ThLayoutUI, \n ThProgressionFormat, \n ThRunningHeadFormat, \n ThPreferences,\n CustomizableKeys,\n ThBreakpoints,\n ThPaginatedAffordancePrefValue\n} from \"@/preferences\";\n\nimport { mapPreferencesToState } from \"./helpers/mapPreferences\";\n\nexport interface L10nObject {\n locale?: string;\n direction?: ThLayoutDirection;\n}\n\nexport interface RenditionProperties<T extends string | Array<string>> {\n default?: T;\n breakpoints?: {\n [key in ThBreakpoints]?: T;\n };\n}\n\nexport interface RenditionObject<T extends string | Array<string>> {\n reflow?: RenditionProperties<T>;\n fxl?: RenditionProperties<T>;\n webPub?: RenditionProperties<T>;\n}\n\nexport interface RenditionChangePayload<T extends string | Array<string>> {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\" | \"webPub\";\n value?: T;\n breakpoint?: ThBreakpoints;\n }\n}\n\nexport interface UIChangePayload {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\" | \"webPub\";\n value?: ThLayoutUI;\n }\n}\n\nexport interface PaginatedAffordanceProperties {\n default?: ThPaginatedAffordancePrefValue;\n breakpoints?: {\n [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue;\n };\n}\n\nexport interface PaginatedAffordanceObject {\n reflow?: PaginatedAffordanceProperties;\n fxl?: PaginatedAffordanceProperties;\n}\n\nexport interface PaginatedAffordancePayload {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\";\n value: ThPaginatedAffordancePrefValue;\n breakpoint?: ThBreakpoints;\n };\n}\n\nexport interface PreferencesReducerState {\n l10n?: {\n locale?: string;\n direction?: ThLayoutDirection;\n },\n progressionFormat?: RenditionObject<ThProgressionFormat | Array<ThProgressionFormat>>;\n runningHeadFormat?: RenditionObject<ThRunningHeadFormat>;\n paginatedAffordances?: PaginatedAffordanceObject;\n ui?: {\n reflow?: ThLayoutUI;\n fxl?: ThLayoutUI;\n webPub?: ThLayoutUI;\n };\n scrollAffordances?: {\n hintInImmersive?: boolean;\n toggleOnMiddlePointer?: Array<\"tap\" | \"click\">;\n hideOnForwardScroll?: boolean;\n showOnBackwardScroll?: boolean;\n }\n}\n\nconst initialState: PreferencesReducerState = {}\n\nexport const preferencesSlice = createSlice({\n name: \"preferences\",\n initialState,\n reducers: {\n setL10n: (state, action: PayloadAction<L10nObject>) => {\n state.l10n = action.payload\n },\n setProgressionFormat: (state, action: RenditionChangePayload<ThProgressionFormat | Array<ThProgressionFormat>>) => {\n const { key, value, breakpoint } = action.payload;\n state.progressionFormat = {\n ...state.progressionFormat,\n [key]: {\n ...state.progressionFormat?.[key],\n ...(breakpoint ? {\n breakpoints: {\n ...state.progressionFormat?.[key]?.breakpoints,\n [breakpoint]: value\n }\n } : { default: value })\n }\n };\n },\n setRunningHeadFormat: (state, action: RenditionChangePayload<ThRunningHeadFormat>) => {\n const { key, value, breakpoint } = action.payload;\n state.runningHeadFormat = {\n ...state.runningHeadFormat,\n [key]: {\n ...state.runningHeadFormat?.[key],\n ...(breakpoint ? {\n breakpoints: {\n ...state.runningHeadFormat?.[key]?.breakpoints,\n [breakpoint]: value\n }\n } : { default: value })\n }\n };\n },\n setUI: (state, action: UIChangePayload) => {\n const { key, value } = action.payload;\n state.ui = {\n ...state.ui,\n [key]: value\n };\n },\n setScrollAffordances: (state, action) => {\n state.scrollAffordances = action.payload;\n },\n setPaginatedAffordance: (state, action: PaginatedAffordancePayload) => {\n const { key, value, breakpoint } = action.payload;\n state.paginatedAffordances = {\n ...state.paginatedAffordances,\n [key]: {\n ...state.paginatedAffordances?.[key],\n ...(breakpoint ? {\n breakpoints: {\n ...state.paginatedAffordances?.[key]?.breakpoints,\n [breakpoint]: value\n }\n } : { default: value })\n }\n };\n },\n updateFromPreferences(state, action: PayloadAction<ThPreferences<CustomizableKeys>>) {\n const prefs = action.payload;\n return mapPreferencesToState(prefs);\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setL10n,\n setProgressionFormat,\n setRunningHeadFormat,\n setUI,\n setScrollAffordances,\n setPaginatedAffordance,\n updateFromPreferences\n} = preferencesSlice.actions;\n\nexport default preferencesSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { \n ThLineHeightOptions, \n ThSpacingPresetKeys, \n ThSpacingSettingsKeys, \n ThTextAlignOptions \n} from \"@/preferences/models\";\nimport { FontFamilyStateObject, SetFontFamilyPayload, handleSpacingSetting, SetSpacingPresetPayload, SpacingStateObject } from \"./settingsReducer\";\n\nexport interface WebPubSettingsReducerState {\n fontFamily: FontFamilyStateObject;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineHeight: ThLineHeightOptions | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n spacing: SpacingStateObject;\n textAlign: ThTextAlignOptions;\n textNormalization: boolean;\n wordSpacing: number | null;\n zoom: number;\n}\n\nconst initialState: WebPubSettingsReducerState = {\n fontFamily: { default: \"publisher\" },\n fontWeight: 400,\n hyphens: null,\n letterSpacing: null,\n lineHeight: ThLineHeightOptions.publisher,\n paragraphIndent: null,\n paragraphSpacing: null,\n publisherStyles: true,\n spacing: {\n preset: ThSpacingPresetKeys.publisher,\n custom: {},\n baseline: {}\n },\n textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\n zoom: 1\n}\n\nexport const webPubSettingsSlice = createSlice({\n name: \"webPubSettings\",\n initialState,\n reducers: {\n setWebPubFontFamily: (state, action: SetFontFamilyPayload) => {\n const { key, value } = action.payload;\n state.fontFamily[key] = value;\n },\n setWebPubFontWeight: (state, action) => {\n state.fontWeight = action.payload\n },\n setWebPubHyphens: (state, action) => {\n state.hyphens = action.payload\n },\n setWebPubLetterSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.letterSpacing);\n },\n setWebPubLineHeight: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.lineHeight);\n },\n setWebPubParagraphIndent: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphIndent);\n },\n setWebPubParagraphSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphSpacing);\n },\n setWebPubPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setWebPubSpacingPreset: (state, action: SetSpacingPresetPayload) => {\n const { preset, values } = action.payload;\n\n // Initialize spacing state if needed\n if (!state.spacing) {\n state.spacing = {\n preset: preset,\n custom: {},\n baseline: {}\n };\n }\n\n state.spacing.preset = preset;\n\n if (preset !== ThSpacingPresetKeys.custom) {\n state.spacing.baseline = values;\n }\n\n if (preset === ThSpacingPresetKeys.publisher) {\n state.publisherStyles = true;\n } else {\n state.publisherStyles = false;\n }\n },\n setWebPubTextAlign: (state, action) => {\n state.textAlign = action.payload\n },\n setWebPubTextNormalization: (state, action) => {\n state.textNormalization = action.payload\n },\n setWebPubWordSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.wordSpacing);\n },\n setWebPubZoom: (state, action) => {\n state.zoom = action.payload\n }\n }\n});\n\nexport const initialWebPubSettingsState = initialState;\n\n// Action creators are generated for each case reducer function\nexport const {\n setWebPubFontFamily,\n setWebPubFontWeight,\n setWebPubHyphens,\n setWebPubLetterSpacing,\n setWebPubLineHeight,\n setWebPubParagraphIndent,\n setWebPubParagraphSpacing,\n setWebPubPublisherStyles,\n setWebPubSpacingPreset,\n setWebPubTextAlign,\n setWebPubTextNormalization,\n setWebPubWordSpacing,\n setWebPubZoom\n} = webPubSettingsSlice.actions;\n\nexport default webPubSettingsSlice.reducer;","export default function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\tif (typeof options === 'boolean') {\n\t\tthrow new TypeError('The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.');\n\t}\n\n\tconst {immediate} = options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t\treturn result;\n\t\t}\n\n\t\treturn undefined;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n","import { ThDockingKeys } from \"@/preferences/models\";\n\nimport { configureStore, Reducer } from \"@reduxjs/toolkit\";\n\nimport readerReducer, { ReaderReducerState } from \"@/lib/readerReducer\";\nimport settingsReducer, { SettingsReducerState } from \"@/lib/settingsReducer\";\nimport themeReducer, { ThemeReducerState } from \"@/lib/themeReducer\";\nimport actionsReducer, { ActionsReducerState } from \"@/lib/actionsReducer\";\nimport publicationReducer, { PublicationReducerState } from \"./publicationReducer\";\nimport preferencesReducer, { PreferencesReducerState } from \"./preferencesReducer\";\nimport webPubSettingsReducer, { WebPubSettingsReducerState } from \"./webPubSettingsReducer\";\n\nimport debounce from \"debounce\";\n\ninterface ExternalReducerConfig {\n reducer: any;\n persist?: boolean;\n}\n\n// Define the shape of the root state\nexport type RootState = {\n reader: ReaderReducerState;\n settings: SettingsReducerState;\n theming: ThemeReducerState;\n actions: ActionsReducerState;\n publication: PublicationReducerState;\n preferences: PreferencesReducerState;\n webPubSettings: WebPubSettingsReducerState;\n [key: string]: any; // For external reducers\n};\n\nconst DEFAULT_STORAGE_KEY = \"thorium-web-state\";\n\n// Migrate font family state\nconst migrateFontFamily = (stateSlice: SettingsReducerState | WebPubSettingsReducerState) => {\n if (stateSlice?.fontFamily && typeof stateSlice.fontFamily === \"string\") {\n return {\n ...stateSlice,\n fontFamily: {\n default: stateSlice.fontFamily\n }\n };\n }\n return stateSlice;\n};\n\n\nconst updateActionsState = (state: ActionsReducerState) => {\n const updatedKeys = Object.fromEntries(\n Object.entries(state.keys).map(([key, value]) => [\n key,\n {\n ...value,\n isOpen: value?.docking === ThDockingKeys.transient || value?.docking == null && value?.isOpen === true ? false : value?.isOpen,\n },\n ])\n );\n\n return {\n ...state,\n keys: updatedKeys,\n overflow: {}\n };\n};\n\nconst loadState = (storageKey: string = DEFAULT_STORAGE_KEY) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n const serializedState = localStorage.getItem(resolvedKey);\n if (serializedState === null) {\n return { \n actions: undefined, \n settings: undefined, \n theming: undefined,\n preferences: undefined,\n webPubSettings: undefined\n };\n }\n \n // Parse the state\n let state = JSON.parse(serializedState);\n \n // Apply migrations\n if (state) {\n // Migrate font family state\n if (state.settings) {\n state.settings = migrateFontFamily(state.settings);\n }\n if (state.webPubSettings) {\n state.webPubSettings = migrateFontFamily(state.webPubSettings);\n }\n \n if (state.actions) {\n state.actions = updateActionsState(state.actions);\n }\n }\n \n return state;\n } catch (err) {\n return { \n actions: undefined, \n settings: undefined, \n theming: undefined,\n preferences: undefined,\n webPubSettings: undefined\n };\n }\n};\n\nconst saveState = (state: any, storageKey?: string, externalReducers: Record<string, ExternalReducerConfig> = {}) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n \n // Only persist the state of reducers that are marked for persistence\n const stateToPersist: any = {};\n \n // Internal reducers to persist\n if (state.actions) stateToPersist.actions = state.actions;\n if (state.settings) stateToPersist.settings = state.settings;\n if (state.theming) stateToPersist.theming = state.theming;\n if (state.preferences) stateToPersist.preferences = state.preferences;\n if (state.webPubSettings) stateToPersist.webPubSettings = state.webPubSettings;\n \n // External reducers to persist\n Object.entries(externalReducers).forEach(([key, config]) => {\n if (config.persist && state[key] !== undefined) {\n stateToPersist[key] = state[key];\n }\n });\n \n const serializedState = JSON.stringify(stateToPersist);\n localStorage.setItem(resolvedKey, serializedState);\n } catch (err) {\n console.error(err);\n }\n};\n\nexport const makeStore = (storageKey?: string, externalReducers: Record<string, ExternalReducerConfig> = {}) => {\n // Combine internal and external reducers\n const combinedReducers = {\n reader: readerReducer,\n settings: settingsReducer,\n theming: themeReducer,\n actions: actionsReducer,\n publication: publicationReducer,\n preferences: preferencesReducer,\n webPubSettings: webPubSettingsReducer,\n ...Object.entries(externalReducers).reduce((acc, [key, config]) => ({\n ...acc,\n [key]: config.reducer\n }), {})\n };\n\n // Get persisted state for internal reducers\n const persistedState = loadState(storageKey);\n \n // Create preloaded state with persisted values\n const preloadedState: any = {\n actions: persistedState.actions,\n settings: persistedState.settings,\n theming: persistedState.theming,\n preferences: persistedState.preferences,\n webPubSettings: persistedState.webPubSettings,\n // Include persisted state for external reducers that have it\n ...Object.entries(externalReducers).reduce((acc, [key, config]) => {\n if (config.persist && persistedState[key] !== undefined) {\n return { ...acc, [key]: persistedState[key] };\n }\n return acc;\n }, {})\n };\n\n const store = configureStore({\n reducer: combinedReducers as unknown as Reducer<RootState>,\n preloadedState,\n });\n\n const saveStateDebounced = debounce(() => {\n saveState(store.getState(), storageKey, externalReducers);\n }, 250);\n\n store.subscribe(saveStateDebounced);\n\n return store;\n}\n\n// Infer the type of makeStore\nexport type AppStore = ReturnType<typeof makeStore>;\n// Infer the `RootState` and `AppDispatch` types from the store itself\n// Export the RootState type for external use\nexport type AppState = RootState;\nexport type AppDispatch = AppStore[\"dispatch\"];","\"use client\";\n\nimport { useRef } from \"react\";\nimport { Provider } from \"react-redux\";\nimport { makeStore, AppStore } from \"./store\";\n\nexport const ThStoreProvider = ({\n storageKey,\n store,\n children\n}: {\n storageKey?: string,\n store?: AppStore,\n children: React.ReactNode\n}) => {\n const storeRef = useRef<AppStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = store || makeStore(storageKey);\n }\n\n return <Provider store={ storeRef.current }>{ children }</Provider>\n}\n\nexport default ThStoreProvider;","import { Store } from \"@reduxjs/toolkit\";\n\nimport { ThPreferences, CustomizableKeys } from \"../preferences/preferences\";\n\nimport { ThPreferencesAdapter } from \"../preferences/adapters/ThPreferencesAdapter\";\n\nimport { AppState } from \"@/lib/store\";\nimport { preferencesSlice } from \"@/lib/preferencesReducer\";\nimport { mapStateToPreferences } from \"@/lib/helpers/mapPreferences\";\n\nexport class ThReduxPreferencesAdapter<T extends CustomizableKeys = CustomizableKeys> implements ThPreferencesAdapter<T> {\n private store: Store<AppState>;\n private listeners: Set<(prefs: ThPreferences<T>) => void> = new Set();\n private currentPreferences: ThPreferences<T>;\n\n constructor(store: Store<AppState>, initialPreferences: ThPreferences<T>) {\n this.store = store;\n this.currentPreferences = initialPreferences;\n \n this.store.subscribe(() => {\n const state = this.store.getState();\n const prefs = this.mapStateToPreferences(state);\n this.notifyListeners(prefs);\n });\n }\n\n public getPreferences(): ThPreferences<T> {\n return { ...this.currentPreferences };\n }\n\n public setPreferences(prefs: ThPreferences<T>): void {\n this.currentPreferences = prefs;\n this.store.dispatch(preferencesSlice.actions.updateFromPreferences(prefs as any));\n this.notifyListeners(prefs);\n }\n\n public subscribe(listener: (prefs: ThPreferences<T>) => void): void {\n this.listeners.add(listener);\n listener(this.getPreferences());\n }\n\n public unsubscribe(listener: (prefs: ThPreferences<T>) => void): void {\n this.listeners.delete(listener);\n }\n\n private mapStateToPreferences(state: AppState): ThPreferences<T> {\n if (!state.preferences) return this.currentPreferences;\n \n const updatedPrefs = mapStateToPreferences<T>(state.preferences, { ...this.currentPreferences });\n return updatedPrefs;\n }\n\n private notifyListeners(prefs: ThPreferences<T>): void {\n const prefsCopy = JSON.parse(JSON.stringify(prefs));\n this.listeners.forEach(callback => callback(prefsCopy));\n }\n}\n","import { TypedUseSelectorHook, useDispatch, useSelector, useStore } from \"react-redux\";\nimport type { AppDispatch, AppStore, RootState } from \"./store\";\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch: () => AppDispatch = useDispatch;\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\nexport const useAppStore: () => AppStore = useStore;"]}
|