@edrlab/thorium-web 1.0.8 → 1.1.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/README.md +2 -0
- package/dist/{StatefulReader-BuuUEuKC.d.mts → StatefulReader-BjH7bkU1.d.mts} +2 -26
- package/dist/{ThPreferencesAdapter-CbAb0Vth.d.mts → ThPreferencesAdapter-x_D4c7wI.d.mts} +5 -0
- package/dist/chunk-7CGMWOZN.mjs +20 -0
- package/dist/chunk-7CGMWOZN.mjs.map +1 -0
- package/dist/{chunk-TA2ZMJMK.mjs → chunk-D24O64OP.mjs} +375 -278
- package/dist/chunk-D24O64OP.mjs.map +1 -0
- package/dist/{chunk-4M7DDKAT.mjs → chunk-FG6BJGVE.mjs} +5 -25
- package/dist/chunk-FG6BJGVE.mjs.map +1 -0
- package/dist/{chunk-SQHOOSST.mjs → chunk-HE3WFPGE.mjs} +84 -85
- package/dist/chunk-HE3WFPGE.mjs.map +1 -0
- package/dist/chunk-KKJA56IZ.mjs +27 -0
- package/dist/chunk-KKJA56IZ.mjs.map +1 -0
- package/dist/{chunk-7PJ2GDZA.mjs → chunk-SPAC7T57.mjs} +36 -21
- package/dist/chunk-SPAC7T57.mjs.map +1 -0
- package/dist/components/Epub/index.css +1282 -0
- package/dist/components/Epub/index.css.map +1 -0
- package/dist/components/Epub/index.d.mts +3 -3
- package/dist/components/Epub/index.mjs +49 -45
- package/dist/components/Epub/index.mjs.map +1 -1
- package/dist/components/Misc/index.css +102 -0
- package/dist/components/Misc/index.css.map +1 -0
- package/dist/components/Misc/index.d.mts +28 -0
- package/dist/components/Misc/index.mjs +110 -0
- package/dist/components/Misc/index.mjs.map +1 -0
- package/dist/components/WebPub/index.css +1214 -0
- package/dist/components/WebPub/index.css.map +1 -0
- package/dist/components/WebPub/index.d.mts +5 -5
- package/dist/components/WebPub/index.mjs +33 -27
- package/dist/components/WebPub/index.mjs.map +1 -1
- package/dist/core/Components/index.mjs +0 -1
- package/dist/core/Helpers/index.d.mts +12 -2
- package/dist/core/Helpers/index.mjs +1 -2
- package/dist/core/Hooks/index.mjs +0 -1
- package/dist/i18n/index.mjs +5 -5
- package/dist/lib/index.d.mts +2 -1
- package/dist/lib/index.mjs +2 -3
- package/dist/locales/et/thorium-web.json +1 -0
- package/dist/locales/it/thorium-web.json +1 -0
- package/dist/locales/pl/thorium-web.json +26 -13
- package/dist/locales/sv/thorium-web.json +37 -37
- package/dist/next-lib/index.mjs +0 -2
- package/dist/next-lib/index.mjs.map +1 -1
- package/dist/preferences/index.d.mts +4 -3
- package/dist/preferences/index.mjs +3 -4
- package/dist/{usePreferences-iJ5426UA.d.mts → usePreferences-CRjFlZvF.d.mts} +1 -1
- package/package.json +44 -40
- package/dist/backLink.module-QFOMD4RA.module.css +0 -36
- package/dist/chunk-3QS3WKRC.mjs +0 -29
- package/dist/chunk-3QS3WKRC.mjs.map +0 -1
- package/dist/chunk-4M7DDKAT.mjs.map +0 -1
- package/dist/chunk-7PJ2GDZA.mjs.map +0 -1
- package/dist/chunk-SQHOOSST.mjs.map +0 -1
- package/dist/chunk-TA2ZMJMK.mjs.map +0 -1
- package/dist/chunk-TTGURRX3.mjs +0 -19
- package/dist/chunk-TTGURRX3.mjs.map +0 -1
- package/dist/docking.module-TDNYZX4H.module.css +0 -40
- package/dist/jumpToPosition.module-4C47UYPE.module.css +0 -41
- package/dist/overflowMenu.module-QL32ISXF.module.css +0 -68
- package/dist/publicationGrid.module-T6ISNRGM.module.css +0 -70
- package/dist/reader-NGCQJKLX.css +0 -261
- package/dist/readerArrowButton.module-EFLOIADG.module.css +0 -77
- package/dist/readerHeader.module-RNGQFLVS.module.css +0 -35
- package/dist/readerLoader.module-KDBPCQZJ.module.css +0 -40
- package/dist/readerPagination.module-DYBZAQ7H.module.css +0 -76
- package/dist/readerProgression.module-7PU7L74S.module.css +0 -5
- package/dist/readerSharedUI.module-Y2VDWFS5.module.css +0 -98
- package/dist/settings.module-H5MUDFJO.module.css +0 -437
- package/dist/sheets.module-LJOLY4MK.module.css +0 -195
- package/dist/toc.module-F47C5CDS.module.css +0 -153
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { usePreferences } from './chunk-
|
|
2
|
-
import { initReactI18next, I18nextProvider
|
|
1
|
+
import { usePreferences } from './chunk-SPAC7T57.mjs';
|
|
2
|
+
import { initReactI18next, I18nextProvider } from 'react-i18next';
|
|
3
3
|
export { Trans } from 'react-i18next';
|
|
4
4
|
import { useState, useEffect } from 'react';
|
|
5
5
|
import i18n from 'i18next';
|
|
@@ -58,27 +58,7 @@ var ThI18nProvider = ({
|
|
|
58
58
|
}
|
|
59
59
|
return /* @__PURE__ */ jsx(I18nextProvider, { i18n, children });
|
|
60
60
|
};
|
|
61
|
-
var useI18n = (ns = "thorium-web") => {
|
|
62
|
-
const { t, i18n: i18n2, ready } = useTranslation(ns);
|
|
63
|
-
const changeLanguage = (lng) => {
|
|
64
|
-
return i18n2.changeLanguage(lng);
|
|
65
|
-
};
|
|
66
|
-
return {
|
|
67
|
-
// Translation function
|
|
68
|
-
t,
|
|
69
|
-
// i18n instance
|
|
70
|
-
i18n: i18n2,
|
|
71
|
-
// Whether translations are loaded
|
|
72
|
-
ready,
|
|
73
|
-
// Current language
|
|
74
|
-
currentLanguage: i18n2.language,
|
|
75
|
-
// List of available languages
|
|
76
|
-
languages: i18n2.languages,
|
|
77
|
-
// Function to change language
|
|
78
|
-
changeLanguage
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
61
|
|
|
82
|
-
export { DEFAULT_CONFIG, ThI18nProvider, initI18n
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
84
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
export { DEFAULT_CONFIG, ThI18nProvider, initI18n };
|
|
63
|
+
//# sourceMappingURL=chunk-FG6BJGVE.mjs.map
|
|
64
|
+
//# sourceMappingURL=chunk-FG6BJGVE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/config.ts","../src/i18n/ThI18nProvider.tsx"],"names":[],"mappings":";;;;;;;;;;AAMO,IAAM,cAAA,GAA8B;AAAA,EACzC,WAAA,EAAa,IAAA;AAAA,EACb,IAAA,EAAM,KAAA;AAAA,EACN,wBAAA,EAA0B,IAAA;AAAA,EAC1B,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,CAAC,WAAW,CAAA;AAAA,IACnB,QAAQ;AAAC,GACX;AAAA,EACA,aAAA,EAAe;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,EAAA,EAAI,CAAC,aAAa,CAAA;AAAA,EAClB,SAAA,EAAW;AACb;AAEO,IAAM,QAAA,GAAW,OAAO,OAAA,GAAgC,EAAC,KAAM;AACpE,EAAA,IAAI,KAAK,aAAA,EAAe;AACtB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA,CACJ,GAAA,CAAI,OAAO,CAAA,CACX,GAAA,CAAI,gBAAgB,CAAA,CACpB,GAAA,CAAI,gBAAgB,CAAA,CACpB,IAAA,CAAK;AAAA,IACJ,GAAG,cAAA;AAAA,IACH,GAAG;AAAA,GACJ,CAAA;AACL;ACzBO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA2B;AACzB,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,cAAA,EAAe;AACvC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAExD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAK,aAAA,EAAe;AACvB,MAAA,QAAA,CAAS;AAAA,QACP,GAAG,OAAA;AAAA,QACH,GAAA,EAAK,WAAA,EAAa,MAAA,IAAU,OAAA,CAAQ;AAAA,OACrC,CAAA,CAAE,IAAA,CAAK,MAAM,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,IACtC;AAAA,EACF,CAAC,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,IAAiB,aAAa,MAAA,EAAQ;AACxC,MAAA,IAAA,CAAK,cAAA,CAAe,YAAY,MAAM,CAAA;AAAA,IACxC;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,MAAA,EAAQ,aAAa,CAAC,CAAA;AAEvC,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBAAO,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAgB,QAAA,EAAU,CAAA;AACpD","file":"chunk-FG6BJGVE.mjs","sourcesContent":["import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport Backend from \"i18next-http-backend\";\nimport { InitOptions } from \"i18next\";\n\nexport const DEFAULT_CONFIG: InitOptions = {\n fallbackLng: \"en\",\n load: \"all\",\n nonExplicitSupportedLngs: true,\n detection: {\n order: [\"navigator\"],\n caches: []\n },\n interpolation: {\n escapeValue: false\n },\n backend: {\n loadPath: \"/locales/{{lng}}/{{ns}}.json\"\n },\n ns: [\"thorium-web\"],\n defaultNS: \"thorium-web\"\n};\n\nexport const initI18n = async (options: Partial<InitOptions> = {}) => {\n if (i18n.isInitialized) {\n return i18n;\n }\n\n return i18n\n .use(Backend)\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n ...DEFAULT_CONFIG,\n ...options\n });\n};\n\nexport { i18n };","\"use client\";\n\nimport React, { ReactNode, useEffect, useState } from \"react\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { i18n, initI18n } from \"./config\";\nimport { InitOptions } from \"i18next\";\nimport { usePreferences } from \"@/preferences\";\n\nexport type ThI18nProviderProps = {\n children: ReactNode;\n} & Partial<InitOptions>;\n\nexport const ThI18nProvider = ({\n children,\n ...options\n}: ThI18nProviderProps) => {\n const { preferences } = usePreferences();\n const [isInitialized, setIsInitialized] = useState(false);\n \n useEffect(() => {\n if (!i18n.isInitialized) { \n initI18n({\n ...options,\n lng: preferences?.locale || options.lng,\n }).then(() => setIsInitialized(true));\n }\n });\n\n useEffect(() => {\n if (isInitialized && preferences?.locale) {\n i18n.changeLanguage(preferences.locale);\n }\n }, [preferences?.locale, isInitialized]);\n\n if (!isInitialized) {\n return null;\n }\n\n return <I18nextProvider i18n={ i18n }>{ children }</I18nextProvider>;\n};\n\nexport default ThI18nProvider;\n"]}
|
|
@@ -1,89 +1,9 @@
|
|
|
1
1
|
import { defaultPlatformModifier } from './chunk-5LUMM7FW.mjs';
|
|
2
|
-
import { __commonJS, __toESM } from './chunk-3QS3WKRC.mjs';
|
|
3
2
|
import { useRef } from 'react';
|
|
4
3
|
import { useDispatch, useSelector, useStore, Provider } from 'react-redux';
|
|
5
4
|
import { createSlice, configureStore } from '@reduxjs/toolkit';
|
|
6
5
|
import { jsx } from 'react/jsx-runtime';
|
|
7
6
|
|
|
8
|
-
// node_modules/.pnpm/debounce@2.2.0/node_modules/debounce/index.js
|
|
9
|
-
var require_debounce = __commonJS({
|
|
10
|
-
"node_modules/.pnpm/debounce@2.2.0/node_modules/debounce/index.js"(exports, module) {
|
|
11
|
-
function debounce2(function_, wait = 100, options = {}) {
|
|
12
|
-
if (typeof function_ !== "function") {
|
|
13
|
-
throw new TypeError(`Expected the first parameter to be a function, got \`${typeof function_}\`.`);
|
|
14
|
-
}
|
|
15
|
-
if (wait < 0) {
|
|
16
|
-
throw new RangeError("`wait` must not be negative.");
|
|
17
|
-
}
|
|
18
|
-
const { immediate } = typeof options === "boolean" ? { immediate: options } : options;
|
|
19
|
-
let storedContext;
|
|
20
|
-
let storedArguments;
|
|
21
|
-
let timeoutId;
|
|
22
|
-
let timestamp;
|
|
23
|
-
let result;
|
|
24
|
-
function run() {
|
|
25
|
-
const callContext = storedContext;
|
|
26
|
-
const callArguments = storedArguments;
|
|
27
|
-
storedContext = void 0;
|
|
28
|
-
storedArguments = void 0;
|
|
29
|
-
result = function_.apply(callContext, callArguments);
|
|
30
|
-
return result;
|
|
31
|
-
}
|
|
32
|
-
function later() {
|
|
33
|
-
const last = Date.now() - timestamp;
|
|
34
|
-
if (last < wait && last >= 0) {
|
|
35
|
-
timeoutId = setTimeout(later, wait - last);
|
|
36
|
-
} else {
|
|
37
|
-
timeoutId = void 0;
|
|
38
|
-
if (!immediate) {
|
|
39
|
-
result = run();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const debounced = function(...arguments_) {
|
|
44
|
-
if (storedContext && this !== storedContext && Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)) {
|
|
45
|
-
throw new Error("Debounced method called with different contexts of the same prototype.");
|
|
46
|
-
}
|
|
47
|
-
storedContext = this;
|
|
48
|
-
storedArguments = arguments_;
|
|
49
|
-
timestamp = Date.now();
|
|
50
|
-
const callNow = immediate && !timeoutId;
|
|
51
|
-
if (!timeoutId) {
|
|
52
|
-
timeoutId = setTimeout(later, wait);
|
|
53
|
-
}
|
|
54
|
-
if (callNow) {
|
|
55
|
-
result = run();
|
|
56
|
-
}
|
|
57
|
-
return result;
|
|
58
|
-
};
|
|
59
|
-
Object.defineProperty(debounced, "isPending", {
|
|
60
|
-
get() {
|
|
61
|
-
return timeoutId !== void 0;
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
debounced.clear = () => {
|
|
65
|
-
if (!timeoutId) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
clearTimeout(timeoutId);
|
|
69
|
-
timeoutId = void 0;
|
|
70
|
-
};
|
|
71
|
-
debounced.flush = () => {
|
|
72
|
-
if (!timeoutId) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
debounced.trigger();
|
|
76
|
-
};
|
|
77
|
-
debounced.trigger = () => {
|
|
78
|
-
result = run();
|
|
79
|
-
debounced.clear();
|
|
80
|
-
};
|
|
81
|
-
return debounced;
|
|
82
|
-
}
|
|
83
|
-
module.exports.debounce = debounce2;
|
|
84
|
-
module.exports = debounce2;
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
7
|
var initialState = {
|
|
88
8
|
profile: void 0,
|
|
89
9
|
direction: "ltr" /* ltr */,
|
|
@@ -1022,8 +942,87 @@ var {
|
|
|
1022
942
|
} = webPubSettingsSlice.actions;
|
|
1023
943
|
var webPubSettingsReducer_default = webPubSettingsSlice.reducer;
|
|
1024
944
|
|
|
945
|
+
// node_modules/.pnpm/debounce@3.0.0/node_modules/debounce/index.js
|
|
946
|
+
function debounce(function_, wait = 100, options = {}) {
|
|
947
|
+
if (typeof function_ !== "function") {
|
|
948
|
+
throw new TypeError(`Expected the first parameter to be a function, got \`${typeof function_}\`.`);
|
|
949
|
+
}
|
|
950
|
+
if (wait < 0) {
|
|
951
|
+
throw new RangeError("`wait` must not be negative.");
|
|
952
|
+
}
|
|
953
|
+
if (typeof options === "boolean") {
|
|
954
|
+
throw new TypeError("The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.");
|
|
955
|
+
}
|
|
956
|
+
const { immediate } = options;
|
|
957
|
+
let storedContext;
|
|
958
|
+
let storedArguments;
|
|
959
|
+
let timeoutId;
|
|
960
|
+
let timestamp;
|
|
961
|
+
let result;
|
|
962
|
+
function run() {
|
|
963
|
+
const callContext = storedContext;
|
|
964
|
+
const callArguments = storedArguments;
|
|
965
|
+
storedContext = void 0;
|
|
966
|
+
storedArguments = void 0;
|
|
967
|
+
result = function_.apply(callContext, callArguments);
|
|
968
|
+
return result;
|
|
969
|
+
}
|
|
970
|
+
function later() {
|
|
971
|
+
const last = Date.now() - timestamp;
|
|
972
|
+
if (last < wait && last >= 0) {
|
|
973
|
+
timeoutId = setTimeout(later, wait - last);
|
|
974
|
+
} else {
|
|
975
|
+
timeoutId = void 0;
|
|
976
|
+
if (!immediate) {
|
|
977
|
+
result = run();
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
const debounced = function(...arguments_) {
|
|
982
|
+
if (storedContext && this !== storedContext && Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)) {
|
|
983
|
+
throw new Error("Debounced method called with different contexts of the same prototype.");
|
|
984
|
+
}
|
|
985
|
+
storedContext = this;
|
|
986
|
+
storedArguments = arguments_;
|
|
987
|
+
timestamp = Date.now();
|
|
988
|
+
const callNow = immediate && !timeoutId;
|
|
989
|
+
if (!timeoutId) {
|
|
990
|
+
timeoutId = setTimeout(later, wait);
|
|
991
|
+
}
|
|
992
|
+
if (callNow) {
|
|
993
|
+
result = run();
|
|
994
|
+
return result;
|
|
995
|
+
}
|
|
996
|
+
return void 0;
|
|
997
|
+
};
|
|
998
|
+
Object.defineProperty(debounced, "isPending", {
|
|
999
|
+
get() {
|
|
1000
|
+
return timeoutId !== void 0;
|
|
1001
|
+
}
|
|
1002
|
+
});
|
|
1003
|
+
debounced.clear = () => {
|
|
1004
|
+
if (!timeoutId) {
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
1007
|
+
clearTimeout(timeoutId);
|
|
1008
|
+
timeoutId = void 0;
|
|
1009
|
+
storedContext = void 0;
|
|
1010
|
+
storedArguments = void 0;
|
|
1011
|
+
};
|
|
1012
|
+
debounced.flush = () => {
|
|
1013
|
+
if (!timeoutId) {
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
debounced.trigger();
|
|
1017
|
+
};
|
|
1018
|
+
debounced.trigger = () => {
|
|
1019
|
+
result = run();
|
|
1020
|
+
debounced.clear();
|
|
1021
|
+
};
|
|
1022
|
+
return debounced;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
1025
|
// src/lib/store.ts
|
|
1026
|
-
var import_debounce = __toESM(require_debounce());
|
|
1027
1026
|
var DEFAULT_STORAGE_KEY = "thorium-web-state";
|
|
1028
1027
|
var migrateThemeState = (state) => {
|
|
1029
1028
|
if (typeof state.theme === "string") {
|
|
@@ -1133,7 +1132,7 @@ var makeStore = (storageKey, externalReducers = {}) => {
|
|
|
1133
1132
|
reducer: combinedReducers,
|
|
1134
1133
|
preloadedState
|
|
1135
1134
|
});
|
|
1136
|
-
const saveStateDebounced = (
|
|
1135
|
+
const saveStateDebounced = debounce(() => {
|
|
1137
1136
|
saveState(store.getState(), storageKey, externalReducers);
|
|
1138
1137
|
}, 250);
|
|
1139
1138
|
store.subscribe(saveStateDebounced);
|
|
@@ -1194,6 +1193,6 @@ var useAppDispatch = useDispatch;
|
|
|
1194
1193
|
var useAppSelector = useSelector;
|
|
1195
1194
|
var useAppStore = useStore;
|
|
1196
1195
|
|
|
1197
|
-
export { ThReduxPreferencesAdapter, ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, handleSpacingSetting, initialSettingsState, initialWebPubSettingsState, makeStore, preferencesSlice, publicationSlice, readerSlice,
|
|
1198
|
-
//# sourceMappingURL=chunk-
|
|
1199
|
-
//# sourceMappingURL=chunk-
|
|
1196
|
+
export { ThReduxPreferencesAdapter, ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, debounce, dockAction, expandDockPanel, handleSpacingSetting, initialSettingsState, initialWebPubSettingsState, makeStore, preferencesSlice, publicationSlice, readerSlice, setActionOpen, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setHyphens, setImmersive, setL10n, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setPaginatedAffordance, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgressionFormat, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRunningHeadFormat, setScroll, setScrollAffordance, setScrollAffordances, setSettingsContainer, setSpacingPreset, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setUI, setUserNavigated, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLineHeight, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, updateFromPreferences, useAppDispatch, useAppSelector, useAppStore, webPubSettingsSlice };
|
|
1197
|
+
//# sourceMappingURL=chunk-HE3WFPGE.mjs.map
|
|
1198
|
+
//# sourceMappingURL=chunk-HE3WFPGE.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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-HE3WFPGE.mjs","sourcesContent":["import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { defaultPlatformModifier, UnstablePlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { ThSettingsContainerKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\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/enums\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\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: keyof typeof defaultFontFamilyOptions;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineHeight: ThLineHeightOptions;\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: \"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) => {\n state.fontFamily = action.payload\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/enums\";\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/enums\";\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 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 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 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 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 } from \"@/preferences/models/enums\";\nimport { ThPaginatedAffordancePrefValue } from \"@/preferences/preferences\";\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/enums\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\nimport { handleSpacingSetting, SetSpacingPresetPayload, SpacingStateObject } from \"./settingsReducer\";\n\nexport interface WebPubSettingsReducerState {\n fontFamily: keyof typeof defaultFontFamilyOptions;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineHeight: ThLineHeightOptions;\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: \"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) => {\n state.fontFamily = action.payload\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/enums\";\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// TMP Migration\n// TODO: Remove this in the next minor version\nconst migrateThemeState = (state: ThemeReducerState) => {\n if (typeof state.theme === \"string\") {\n return {\n ...state,\n theme: {\n reflow: state.theme,\n fxl: state.theme\n }\n };\n }\n return state;\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) => {\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 const deserializedState = JSON.parse(serializedState);\n deserializedState.actions = updateActionsState(deserializedState.actions);\n \n // TMP Migration\n // TODO: Remove this in the next minor version\n deserializedState.theming = migrateThemeState(deserializedState.theming);\n\n return deserializedState;\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;"]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useTranslation } from 'react-i18next';
|
|
2
|
+
|
|
3
|
+
// src/i18n/useI18n.ts
|
|
4
|
+
var useI18n = (ns = "thorium-web") => {
|
|
5
|
+
const { t, i18n, ready } = useTranslation(ns);
|
|
6
|
+
const changeLanguage = (lng) => {
|
|
7
|
+
return i18n.changeLanguage(lng);
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
// Translation function
|
|
11
|
+
t,
|
|
12
|
+
// i18n instance
|
|
13
|
+
i18n,
|
|
14
|
+
// Whether translations are loaded
|
|
15
|
+
ready,
|
|
16
|
+
// Current language
|
|
17
|
+
currentLanguage: i18n.language,
|
|
18
|
+
// List of available languages
|
|
19
|
+
languages: i18n.languages,
|
|
20
|
+
// Function to change language
|
|
21
|
+
changeLanguage
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { useI18n };
|
|
26
|
+
//# sourceMappingURL=chunk-KKJA56IZ.mjs.map
|
|
27
|
+
//# sourceMappingURL=chunk-KKJA56IZ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/useI18n.ts"],"names":[],"mappings":";;;AAOO,IAAM,OAAA,GAAU,CAAC,EAAA,GAAa,aAAA,KAAkB;AACrD,EAAA,MAAM,EAAE,CAAA,EAAG,IAAA,EAAM,KAAA,EAAM,GAAI,eAAe,EAAE,CAAA;AAG5C,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAgB;AACtC,IAAA,OAAO,IAAA,CAAK,eAAe,GAAG,CAAA;AAAA,EAChC,CAAA;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,CAAA;AAAA;AAAA,IAEA,IAAA;AAAA;AAAA,IAEA,KAAA;AAAA;AAAA,IAEA,iBAAiB,IAAA,CAAK,QAAA;AAAA;AAAA,IAEtB,WAAW,IAAA,CAAK,SAAA;AAAA;AAAA,IAEhB;AAAA,GACF;AACF","file":"chunk-KKJA56IZ.mjs","sourcesContent":["import { useTranslation } from \"react-i18next\";\n\n/**\n * Hook to access the i18n instance and translation functions\n * @param ns The namespace to use for translations (defaults to DEFAULT_NAMESPACE)\n * @returns Translation functions and i18n instance\n */\nexport const useI18n = (ns: string = \"thorium-web\") => {\n const { t, i18n, ready } = useTranslation(ns);\n \n // Helper function to change language\n const changeLanguage = (lng: string) => {\n return i18n.changeLanguage(lng);\n };\n\n return {\n // Translation function\n t,\n // i18n instance\n i18n,\n // Whether translations are loaded\n ready,\n // Current language\n currentLanguage: i18n.language,\n // List of available languages\n languages: i18n.languages,\n // Function to change language\n changeLanguage\n };\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { propsToCSSVars } from './chunk-7CGMWOZN.mjs';
|
|
1
2
|
import { useBreakpoints, useForcedColors, useMonochrome, useReducedMotion, useReducedTransparency } from './chunk-BNPR6V7V.mjs';
|
|
2
3
|
import { useColorScheme, useContrast } from './chunk-NQ2ZSGCX.mjs';
|
|
3
|
-
import { propsToCSSVars } from './chunk-TTGURRX3.mjs';
|
|
4
4
|
import { ThSettingsKeys } from './chunk-CVM2ZAPL.mjs';
|
|
5
5
|
import { createContext, useMemo, useState, useCallback, useEffect, useContext, useRef } from 'react';
|
|
6
6
|
import ReadiumCSSColors from '@readium/css/css/vars/colors.json';
|
|
@@ -223,6 +223,10 @@ var defaultSpacingPresets = {
|
|
|
223
223
|
var defaultPreferences = createPreferences({
|
|
224
224
|
// direction: ThLayoutDirection.ltr,
|
|
225
225
|
// locale: "en",
|
|
226
|
+
experiments: {
|
|
227
|
+
reflow: ["experimentalHeaderFiltering", "experimentalZoom"],
|
|
228
|
+
webPub: ["experimentalHeaderFiltering", "experimentalZoom"]
|
|
229
|
+
},
|
|
226
230
|
metadata: {
|
|
227
231
|
documentTitle: {
|
|
228
232
|
format: "title" /* title */
|
|
@@ -394,8 +398,8 @@ var defaultPreferences = createPreferences({
|
|
|
394
398
|
reflowOrder: [
|
|
395
399
|
"auto",
|
|
396
400
|
"light" /* light */,
|
|
397
|
-
"sepia" /* sepia */,
|
|
398
401
|
"paper" /* paper */,
|
|
402
|
+
"sepia" /* sepia */,
|
|
399
403
|
"dark" /* dark */,
|
|
400
404
|
"contrast1" /* contrast1 */,
|
|
401
405
|
"contrast2" /* contrast2 */,
|
|
@@ -439,21 +443,6 @@ var defaultPreferences = createPreferences({
|
|
|
439
443
|
immerse: "0.6"
|
|
440
444
|
// opacity of immersive mode
|
|
441
445
|
},
|
|
442
|
-
["sepia" /* sepia */]: {
|
|
443
|
-
background: "#faf4e8",
|
|
444
|
-
text: "#121212",
|
|
445
|
-
link: "#0000EE",
|
|
446
|
-
visited: "#551A8B",
|
|
447
|
-
subdue: "#8c8c8c",
|
|
448
|
-
disable: "#8c8c8c",
|
|
449
|
-
hover: "#edd7ab",
|
|
450
|
-
onHover: "#121212",
|
|
451
|
-
select: "#b4d8fe",
|
|
452
|
-
onSelect: "inherit",
|
|
453
|
-
focus: "#0067f4",
|
|
454
|
-
elevate: "0px 0px 2px #8c8c8c",
|
|
455
|
-
immerse: "0.5"
|
|
456
|
-
},
|
|
457
446
|
["dark" /* dark */]: {
|
|
458
447
|
background: "#000000",
|
|
459
448
|
text: "#FEFEFE",
|
|
@@ -470,6 +459,21 @@ var defaultPreferences = createPreferences({
|
|
|
470
459
|
immerse: "0.4"
|
|
471
460
|
},
|
|
472
461
|
["paper" /* paper */]: {
|
|
462
|
+
background: "#faf4e8",
|
|
463
|
+
text: "#121212",
|
|
464
|
+
link: "#0000EE",
|
|
465
|
+
visited: "#551A8B",
|
|
466
|
+
subdue: "#8c8c8c",
|
|
467
|
+
disable: "#8c8c8c",
|
|
468
|
+
hover: "#edd7ab",
|
|
469
|
+
onHover: "#121212",
|
|
470
|
+
select: "#b4d8fe",
|
|
471
|
+
onSelect: "inherit",
|
|
472
|
+
focus: "#0067f4",
|
|
473
|
+
elevate: "0px 0px 2px #8c8c8c",
|
|
474
|
+
immerse: "0.5"
|
|
475
|
+
},
|
|
476
|
+
["sepia" /* sepia */]: {
|
|
473
477
|
background: "#e9ddc8",
|
|
474
478
|
text: "#000000",
|
|
475
479
|
link: "#0000EE",
|
|
@@ -892,6 +896,17 @@ var usePreferenceKeys = () => {
|
|
|
892
896
|
webPubSpacingPresetKeys
|
|
893
897
|
};
|
|
894
898
|
};
|
|
899
|
+
|
|
900
|
+
// src/core/Helpers/prefixString.ts
|
|
901
|
+
var PREFIXES = {
|
|
902
|
+
short: "th",
|
|
903
|
+
full: "thorium_web"
|
|
904
|
+
};
|
|
905
|
+
var prefixString = (str, variant = "short") => {
|
|
906
|
+
return `${PREFIXES[variant]}-${str}`;
|
|
907
|
+
};
|
|
908
|
+
|
|
909
|
+
// src/preferences/hooks/useTheming.ts
|
|
895
910
|
var useTheming = ({
|
|
896
911
|
theme,
|
|
897
912
|
systemKeys,
|
|
@@ -947,7 +962,7 @@ var useTheming = ({
|
|
|
947
962
|
if (!themeTokens) {
|
|
948
963
|
return;
|
|
949
964
|
}
|
|
950
|
-
const props = propsToCSSVars(themeTokens, "theme");
|
|
965
|
+
const props = propsToCSSVars(themeTokens, { prefix: prefixString("theme") });
|
|
951
966
|
for (let p in props) {
|
|
952
967
|
document.documentElement.style.setProperty(p, props[p]);
|
|
953
968
|
}
|
|
@@ -973,6 +988,6 @@ var useTheming = ({
|
|
|
973
988
|
};
|
|
974
989
|
};
|
|
975
990
|
|
|
976
|
-
export { ThMemoryPreferencesAdapter, ThPreferencesContext, ThPreferencesProvider, buildThemeObject, createPreferences, defaultActionKeysObject, defaultFontFamilyOptions, defaultLetterSpacing, defaultLineHeights, defaultParagraphIndent, defaultParagraphSpacing, defaultPreferences, defaultPreferencesContextValue, defaultSpacingPresets, defaultSpacingPresetsOrder, defaultSpacingSettingsMain, defaultSpacingSettingsSubpanel, defaultTextSettingsMain, defaultTextSettingsSubpanel, defaultWordSpacing, defaultZoom, usePreferenceKeys, usePreferences, useTheming };
|
|
977
|
-
//# sourceMappingURL=chunk-
|
|
978
|
-
//# sourceMappingURL=chunk-
|
|
991
|
+
export { ThMemoryPreferencesAdapter, ThPreferencesContext, ThPreferencesProvider, buildThemeObject, createPreferences, defaultActionKeysObject, defaultFontFamilyOptions, defaultLetterSpacing, defaultLineHeights, defaultParagraphIndent, defaultParagraphSpacing, defaultPreferences, defaultPreferencesContextValue, defaultSpacingPresets, defaultSpacingPresetsOrder, defaultSpacingSettingsMain, defaultSpacingSettingsSubpanel, defaultTextSettingsMain, defaultTextSettingsSubpanel, defaultWordSpacing, defaultZoom, prefixString, usePreferenceKeys, usePreferences, useTheming };
|
|
992
|
+
//# sourceMappingURL=chunk-SPAC7T57.mjs.map
|
|
993
|
+
//# sourceMappingURL=chunk-SPAC7T57.mjs.map
|