@edrlab/thorium-web 1.0.0-beta.3 → 1.0.0-beta.5
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/{chunk-KQLSID7M.mjs → chunk-OCASVHBV.mjs} +41 -18
- package/dist/chunk-OCASVHBV.mjs.map +1 -0
- package/dist/components/Epub/index.d.mts +1 -1
- package/dist/components/Epub/index.mjs +4 -4
- package/dist/lib/index.d.mts +119 -119
- package/dist/lib/index.mjs +1 -1
- package/dist/{settings.module-5WB3OOEF.module.css → settings.module-O2SOKTIN.module.css} +4 -0
- package/dist/{sheets.module-NA32WOSZ.module.css → sheets.module-WEBQWGKW.module.css} +1 -0
- package/package.json +1 -1
- package/dist/chunk-KQLSID7M.mjs.map +0 -1
|
@@ -624,32 +624,55 @@ var loadState = (storageKey) => {
|
|
|
624
624
|
return { actions: void 0, settings: void 0, theming: void 0 };
|
|
625
625
|
}
|
|
626
626
|
};
|
|
627
|
-
var saveState = (state, storageKey) => {
|
|
627
|
+
var saveState = (state, storageKey, externalReducers = {}) => {
|
|
628
628
|
try {
|
|
629
629
|
const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;
|
|
630
|
-
const
|
|
630
|
+
const stateToPersist = {};
|
|
631
|
+
if (state.actions) stateToPersist.actions = state.actions;
|
|
632
|
+
if (state.settings) stateToPersist.settings = state.settings;
|
|
633
|
+
if (state.theming) stateToPersist.theming = state.theming;
|
|
634
|
+
Object.entries(externalReducers).forEach(([key, config]) => {
|
|
635
|
+
if (config.persist && state[key] !== void 0) {
|
|
636
|
+
stateToPersist[key] = state[key];
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
const serializedState = JSON.stringify(stateToPersist);
|
|
631
640
|
localStorage.setItem(resolvedKey, serializedState);
|
|
632
641
|
} catch (err) {
|
|
633
642
|
console.error(err);
|
|
634
643
|
}
|
|
635
644
|
};
|
|
636
|
-
var makeStore = (storageKey) => {
|
|
645
|
+
var makeStore = (storageKey, externalReducers = {}) => {
|
|
646
|
+
const combinedReducers = {
|
|
647
|
+
reader: readerReducer_default,
|
|
648
|
+
settings: settingsReducer_default,
|
|
649
|
+
theming: themeReducer_default,
|
|
650
|
+
actions: actionsReducer_default,
|
|
651
|
+
publication: publicationReducer_default,
|
|
652
|
+
...Object.entries(externalReducers).reduce((acc, [key, config]) => ({
|
|
653
|
+
...acc,
|
|
654
|
+
[key]: config.reducer
|
|
655
|
+
}), {})
|
|
656
|
+
};
|
|
657
|
+
const persistedState = loadState(storageKey);
|
|
658
|
+
const preloadedState = {
|
|
659
|
+
actions: persistedState.actions,
|
|
660
|
+
settings: persistedState.settings,
|
|
661
|
+
theming: persistedState.theming,
|
|
662
|
+
// Include persisted state for external reducers that have it
|
|
663
|
+
...Object.entries(externalReducers).reduce((acc, [key, config]) => {
|
|
664
|
+
if (config.persist && persistedState[key] !== void 0) {
|
|
665
|
+
return { ...acc, [key]: persistedState[key] };
|
|
666
|
+
}
|
|
667
|
+
return acc;
|
|
668
|
+
}, {})
|
|
669
|
+
};
|
|
637
670
|
const store = configureStore({
|
|
638
|
-
reducer:
|
|
639
|
-
|
|
640
|
-
settings: settingsReducer_default,
|
|
641
|
-
theming: themeReducer_default,
|
|
642
|
-
actions: actionsReducer_default,
|
|
643
|
-
publication: publicationReducer_default
|
|
644
|
-
},
|
|
645
|
-
preloadedState: {
|
|
646
|
-
actions: loadState(storageKey).actions,
|
|
647
|
-
settings: loadState(storageKey).settings,
|
|
648
|
-
theming: loadState(storageKey).theming
|
|
649
|
-
}
|
|
671
|
+
reducer: combinedReducers,
|
|
672
|
+
preloadedState
|
|
650
673
|
});
|
|
651
674
|
const saveStateDebounced = (0, import_debounce.default)(() => {
|
|
652
|
-
saveState(store.getState(), storageKey);
|
|
675
|
+
saveState(store.getState(), storageKey, externalReducers);
|
|
653
676
|
}, 250);
|
|
654
677
|
store.subscribe(saveStateDebounced);
|
|
655
678
|
return store;
|
|
@@ -670,5 +693,5 @@ var useAppSelector = useSelector;
|
|
|
670
693
|
var useAppStore = useStore;
|
|
671
694
|
|
|
672
695
|
export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, require_debounce, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
|
|
673
|
-
//# sourceMappingURL=chunk-
|
|
674
|
-
//# sourceMappingURL=chunk-
|
|
696
|
+
//# sourceMappingURL=chunk-OCASVHBV.mjs.map
|
|
697
|
+
//# sourceMappingURL=chunk-OCASVHBV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/.pnpm/debounce@2.2.0/node_modules/debounce/index.js","../src/lib/readerReducer.ts","../src/lib/settingsReducer.ts","../src/lib/themeReducer.ts","../src/lib/actionsReducer.ts","../src/lib/publicationReducer.ts","../src/lib/store.ts","../src/lib/ThStoreProvider.tsx","../src/lib/hooks.ts"],"names":["debounce","initialState","createSlice"],"mappings":"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","file":"chunk-OCASVHBV.mjs","sourcesContent":["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\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : 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}\n\n\t\treturn result;\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};\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\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n","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 direction: ThLayoutDirection;\n isLoading: boolean;\n isImmersive: boolean;\n isHovering: boolean;\n hasScrollAffordance: boolean;\n hasArrows: boolean;\n isFullscreen: boolean;\n settingsContainer: ThSettingsContainerKeys;\n platformModifier: UnstablePlatformModifier;\n}\n\nconst initialState: ReaderReducerState = {\n direction: ThLayoutDirection.ltr,\n isLoading: true,\n isImmersive: false,\n isHovering: false,\n hasScrollAffordance: false,\n hasArrows: true,\n isFullscreen: false,\n settingsContainer: ThSettingsContainerKeys.initial,\n platformModifier: defaultPlatformModifier\n}\n\nexport const readerSlice = createSlice({\n name: \"reader\",\n initialState,\n reducers: {\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 setArrows: (state, action) => {\n state.hasArrows = 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 setDirection, \n setLoading,\n setPlatformModifier, \n setImmersive, \n toggleImmersive, \n setHovering, \n setScrollAffordance, \n setArrows, \n setFullscreen, \n setSettingsContainer\n} = readerSlice.actions;\n\nexport default readerSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThLineHeightOptions, ThTextAlignOptions } 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 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 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 textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\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 state.letterSpacing = action.payload\n },\n setLineHeight: (state, action) => {\n state.lineHeight = action.payload\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 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 state.paragraphIndent = action.payload\n },\n setParagraphSpacing: (state, action) => {\n state.paragraphSpacing = action.payload\n },\n setPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setScroll: (state, action) => {\n state.scroll = action.payload\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 state.wordSpacing = action.payload\n }\n }\n})\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 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 { UnstableProgressionObject } from \"@/components/StatefulReaderProgression\";\nimport { Locator } from \"@readium/shared\";\nimport { UnstableTimeline } from \"@/core/Hooks/useTimeline\";\n\nexport interface PublicationReducerState {\n runningHead?: string;\n isFXL: boolean;\n isRTL: boolean;\n progression: UnstableProgressionObject;\n positionsList: Locator[],\n atPublicationStart: boolean;\n atPublicationEnd: boolean;\n unstableTimeline?: UnstableTimeline;\n}\n\nconst initialState: PublicationReducerState = {\n runningHead: undefined,\n isFXL: false,\n isRTL: false,\n progression: {},\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 setRunningHead: (state, action) => {\n state.runningHead = action.payload\n },\n setFXL: (state, action) => {\n state.isFXL = action.payload\n },\n setRTL: (state, action) => {\n state.isRTL = action.payload\n },\n setProgression: (state, action) => {\n state.progression = {...state.progression, ...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 setRunningHead,\n setFXL,\n setRTL,\n setProgression,\n setPositionsList,\n setPublicationStart,\n setPublicationEnd,\n setTimeline,\n setTocTree, \n setTocEntry,\n} = publicationSlice.actions;\n\nexport default publicationSlice.reducer;","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\";\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 [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 major 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 { actions: undefined, settings: undefined, theming: undefined };\n }\n const deserializedState = JSON.parse(serializedState);\n deserializedState.actions = updateActionsState(deserializedState.actions);\n \n // TMP Migration\n // TODO: Remove this in the next major version\n deserializedState.theming = migrateThemeState(deserializedState.theming);\n\n return deserializedState;\n } catch (err) {\n return { actions: undefined, settings: undefined, theming: undefined };\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 \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 ...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 // 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 function 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 { 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;"]}
|
|
@@ -10,7 +10,7 @@ import { a as ActionsStateKeys } from '../../actionsReducer-D4Mphfuv.mjs';
|
|
|
10
10
|
export { f as ActionOverflowOpenPayload, c as ActionStateDockPayload, g as ActionStateDockedPayload, A as ActionStateObject, d as ActionStateOpenPayload, h as ActionStateSlotPayload, i as ActionStateSlotWidthPayload, e as ActionStateTogglePayload, k as ActionsReducerState, j as DockState, D as DockStateObject, O as OverflowStateKeys, b as OverflowStateObject, l as actionsSlice, o as activateDockPanel, q as collapseDockPanel, p as deactivateDockPanel, m as dockAction, r as expandDockPanel, s as setActionOpen, u as setDockPanelWidth, n as setOverflow, t as toggleActionOpen } from '../../actionsReducer-D4Mphfuv.mjs';
|
|
11
11
|
import { Locator } from '@readium/shared';
|
|
12
12
|
import { LineLengthStateObject } from '../../lib/index.mjs';
|
|
13
|
-
export { AppDispatch, AppStore, PublicationReducerState, ReaderReducerState, RootState, SetLineLengthPayload, SettingsReducerState, ThStoreProvider, ThemeReducerState, ThemeStateChangePayload, ThemeStateObject, makeStore, publicationSlice, readerSlice, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleImmersive, useAppDispatch, useAppSelector, useAppStore } from '../../lib/index.mjs';
|
|
13
|
+
export { AppDispatch, AppState, AppStore, PublicationReducerState, ReaderReducerState, RootState, SetLineLengthPayload, SettingsReducerState, ThStoreProvider, ThemeReducerState, ThemeStateChangePayload, ThemeStateObject, makeStore, publicationSlice, readerSlice, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleImmersive, useAppDispatch, useAppSelector, useAppStore } from '../../lib/index.mjs';
|
|
14
14
|
import { TooltipProps, PopoverProps } from 'react-aria-components';
|
|
15
15
|
import { PressEvent } from 'react-aria';
|
|
16
16
|
export { u as useEpubNavigator } from '../../useEpubNavigator-DFRJ_tHa.mjs';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { require_debounce, useAppSelector, useAppDispatch, setColumnCount, setFontFamily, setFontWeight, setHyphens, setScroll, setLetterSpacing, setPublisherStyles, setLineHeight, setParagraphIndent, setParagraphSpacing, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setWordSpacing, setFontSize, setFullscreen, setActionOpen, dockAction, setReducedTransparency, setReducedMotion, setMonochrome, setForcedColors, setContrast, setColorScheme, setBreakpoint, setTimeline, setImmersive, setHovering, setArrows, toggleImmersive, setProgression, useAppStore, toggleActionOpen, setDirection, setPlatformModifier, setRTL, setFXL, setRunningHead, setOverflow, setScrollAffordance, setPublicationStart, setPublicationEnd, setPositionsList, setLoading, setTocEntry, collapseDockPanel, expandDockPanel, activateDockPanel, deactivateDockPanel, setDockPanelWidth } from '../../chunk-
|
|
2
|
-
export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore } from '../../chunk-
|
|
1
|
+
import { require_debounce, useAppSelector, useAppDispatch, setColumnCount, setFontFamily, setFontWeight, setHyphens, setScroll, setLetterSpacing, setPublisherStyles, setLineHeight, setParagraphIndent, setParagraphSpacing, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setWordSpacing, setFontSize, setFullscreen, setActionOpen, dockAction, setReducedTransparency, setReducedMotion, setMonochrome, setForcedColors, setContrast, setColorScheme, setBreakpoint, setTimeline, setImmersive, setHovering, setArrows, toggleImmersive, setProgression, useAppStore, toggleActionOpen, setDirection, setPlatformModifier, setRTL, setFXL, setRunningHead, setOverflow, setScrollAffordance, setPublicationStart, setPublicationEnd, setPositionsList, setLoading, setTocEntry, collapseDockPanel, expandDockPanel, activateDockPanel, deactivateDockPanel, setDockPanelWidth } from '../../chunk-OCASVHBV.mjs';
|
|
2
|
+
export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore } from '../../chunk-OCASVHBV.mjs';
|
|
3
3
|
import { defaultFontFamilyOptions, usePreferences, defaultLetterSpacing, defaultLineHeights, defaultParagraphIndent, defaultParagraphSpacing, defaultSpacingSettingsSubpanel, defaultSpacingSettingsMain, defaultTextSettingsSubpanel, defaultTextSettingsMain, usePreferenceKeys, buildThemeObject, defaultWordSpacing, defaultFontSize, useTheming } from '../../chunk-TXILKP4F.mjs';
|
|
4
4
|
export { ThPreferencesProvider, usePreferences, useTheming } from '../../chunk-TXILKP4F.mjs';
|
|
5
5
|
import { ThRadioGroup, ThDropdown, ThSlider, ThSwitch, ThNumberField, ThSettingsWrapper, ThActionButton, ThMenu, ThCollapsibleActionsBar, ThMenuItem, ThPopover, ThContainerHeader, ThNavigationButton, ThContainerBody, ThBottomSheet, ThCloseButton, ThModal, ThDockedPanel, ThTypedComponentRenderer, useActions, ThForm, ThFormNumberField, ThFormSearchField, ThLoader, ThGrid, ThInteractiveOverlay, ThHeader, ThRunningHead, ThFooter, ThPagination, ThProgression } from '../../chunk-SDVDRPT5.mjs';
|
|
@@ -17,7 +17,7 @@ import '../../chunk-NQ2ZSGCX.mjs';
|
|
|
17
17
|
import { __commonJS, __toESM, ThDockingTypes, ThSheetTypes } from '../../chunk-RQFPGXWN.mjs';
|
|
18
18
|
import React49, { createContext, useState, useMemo, useCallback, useEffect, useRef, useContext, isValidElement, cloneElement } from 'react';
|
|
19
19
|
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
20
|
-
import settingsStyles3 from '../../settings.module-
|
|
20
|
+
import settingsStyles3 from '../../settings.module-O2SOKTIN.module.css';
|
|
21
21
|
import { ListBox, ListBoxItem, Radio, Text, useFilter, Tree, TreeItem, TreeItemContent, Button, Collection, Link, Keyboard, Toolbar } from 'react-aria-components';
|
|
22
22
|
import { fontWeightRangeConfig, TextAlignment } from '@readium/navigator';
|
|
23
23
|
import classNames10 from 'classnames';
|
|
@@ -33,7 +33,7 @@ import overflowMenuStyles from '../../overflowMenu.module-FO27A2A3.module.css';
|
|
|
33
33
|
import readerPaginationStyles2 from '../../readerPagination.module-W4IAEOSH.module.css';
|
|
34
34
|
import progressionStyles from '../../readerProgression.module-7PU7L74S.module.css';
|
|
35
35
|
import jumpToPositionStyles from '../../jumpToPosition.module-4C47UYPE.module.css';
|
|
36
|
-
import sheetStyles2 from '../../sheets.module-
|
|
36
|
+
import sheetStyles2 from '../../sheets.module-WEBQWGKW.module.css';
|
|
37
37
|
import tocStyles from '../../toc.module-KNW5CKIY.module.css';
|
|
38
38
|
import readerLoaderStyles from '../../readerLoader.module-KDBPCQZJ.module.css';
|
|
39
39
|
import publicationGridStyles from '../../publicationGrid.module-T6ISNRGM.module.css';
|
package/dist/lib/index.d.mts
CHANGED
|
@@ -2,88 +2,77 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import * as _reduxjs_toolkit from '@reduxjs/toolkit';
|
|
3
3
|
import { W as WritableDraft, k as ActionsReducerState } from '../actionsReducer-D4Mphfuv.mjs';
|
|
4
4
|
export { f as ActionOverflowOpenPayload, c as ActionStateDockPayload, g as ActionStateDockedPayload, A as ActionStateObject, d as ActionStateOpenPayload, h as ActionStateSlotPayload, i as ActionStateSlotWidthPayload, e as ActionStateTogglePayload, a as ActionsStateKeys, j as DockState, D as DockStateObject, O as OverflowStateKeys, b as OverflowStateObject, l as actionsSlice, o as activateDockPanel, q as collapseDockPanel, p as deactivateDockPanel, m as dockAction, r as expandDockPanel, s as setActionOpen, u as setDockPanelWidth, n as setOverflow, t as toggleActionOpen } from '../actionsReducer-D4Mphfuv.mjs';
|
|
5
|
-
import { Locator } from '@readium/shared';
|
|
6
|
-
import { U as UnstableTimeline } from '../useTimeline-Bid5B7AQ.mjs';
|
|
7
|
-
import { p as ThLineHeightOptions, o as ThTextAlignOptions, m as ThLayoutDirection, i as ThSettingsContainerKeys, T as ThBreakpoints } from '../enums-DqGQ66r1.mjs';
|
|
8
|
-
import { x as defaultFontFamilyOptions } from '../const-IAfi9t_g.mjs';
|
|
9
5
|
import { c as UnstablePlatformModifier } from '../keyboardUtilities-CoTR9LKx.mjs';
|
|
6
|
+
import { m as ThLayoutDirection, i as ThSettingsContainerKeys, p as ThLineHeightOptions, o as ThTextAlignOptions, T as ThBreakpoints } from '../enums-DqGQ66r1.mjs';
|
|
7
|
+
import { x as defaultFontFamilyOptions } from '../const-IAfi9t_g.mjs';
|
|
10
8
|
import { T as ThColorScheme, a as ThContrast } from '../useContrast-Cgsrl7GS.mjs';
|
|
9
|
+
import { Locator } from '@readium/shared';
|
|
10
|
+
import { U as UnstableTimeline } from '../useTimeline-Bid5B7AQ.mjs';
|
|
11
11
|
import { TypedUseSelectorHook } from 'react-redux';
|
|
12
12
|
import '../useBreakpoints-BQaiwecQ.mjs';
|
|
13
13
|
import '../useCollapsibility-BmWuCzU4.mjs';
|
|
14
14
|
import 'react-aria-components';
|
|
15
15
|
|
|
16
|
-
interface
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
runningHead?: string;
|
|
27
|
-
isFXL: boolean;
|
|
28
|
-
isRTL: boolean;
|
|
29
|
-
progression: UnstableProgressionObject;
|
|
30
|
-
positionsList: Locator[];
|
|
31
|
-
atPublicationStart: boolean;
|
|
32
|
-
atPublicationEnd: boolean;
|
|
33
|
-
unstableTimeline?: UnstableTimeline;
|
|
16
|
+
interface ReaderReducerState {
|
|
17
|
+
direction: ThLayoutDirection;
|
|
18
|
+
isLoading: boolean;
|
|
19
|
+
isImmersive: boolean;
|
|
20
|
+
isHovering: boolean;
|
|
21
|
+
hasScrollAffordance: boolean;
|
|
22
|
+
hasArrows: boolean;
|
|
23
|
+
isFullscreen: boolean;
|
|
24
|
+
settingsContainer: ThSettingsContainerKeys;
|
|
25
|
+
platformModifier: UnstablePlatformModifier;
|
|
34
26
|
}
|
|
35
|
-
declare const
|
|
36
|
-
|
|
37
|
-
payload: any;
|
|
38
|
-
type: string;
|
|
39
|
-
}) => void;
|
|
40
|
-
setFXL: (state: WritableDraft<PublicationReducerState>, action: {
|
|
27
|
+
declare const readerSlice: _reduxjs_toolkit.Slice<ReaderReducerState, {
|
|
28
|
+
setDirection: (state: WritableDraft<ReaderReducerState>, action: {
|
|
41
29
|
payload: any;
|
|
42
30
|
type: string;
|
|
43
31
|
}) => void;
|
|
44
|
-
|
|
32
|
+
setLoading: (state: WritableDraft<ReaderReducerState>, action: {
|
|
45
33
|
payload: any;
|
|
46
34
|
type: string;
|
|
47
35
|
}) => void;
|
|
48
|
-
|
|
36
|
+
setPlatformModifier: (state: WritableDraft<ReaderReducerState>, action: {
|
|
49
37
|
payload: any;
|
|
50
38
|
type: string;
|
|
51
39
|
}) => void;
|
|
52
|
-
|
|
40
|
+
setImmersive: (state: WritableDraft<ReaderReducerState>, action: {
|
|
53
41
|
payload: any;
|
|
54
42
|
type: string;
|
|
55
43
|
}) => void;
|
|
56
|
-
|
|
44
|
+
toggleImmersive: (state: WritableDraft<ReaderReducerState>) => void;
|
|
45
|
+
setHovering: (state: WritableDraft<ReaderReducerState>, action: {
|
|
57
46
|
payload: any;
|
|
58
47
|
type: string;
|
|
59
48
|
}) => void;
|
|
60
|
-
|
|
49
|
+
setScrollAffordance: (state: WritableDraft<ReaderReducerState>, action: {
|
|
61
50
|
payload: any;
|
|
62
51
|
type: string;
|
|
63
52
|
}) => void;
|
|
64
|
-
|
|
53
|
+
setArrows: (state: WritableDraft<ReaderReducerState>, action: {
|
|
65
54
|
payload: any;
|
|
66
55
|
type: string;
|
|
67
56
|
}) => void;
|
|
68
|
-
|
|
57
|
+
setFullscreen: (state: WritableDraft<ReaderReducerState>, action: {
|
|
69
58
|
payload: any;
|
|
70
59
|
type: string;
|
|
71
60
|
}) => void;
|
|
72
|
-
|
|
61
|
+
setSettingsContainer: (state: WritableDraft<ReaderReducerState>, action: {
|
|
73
62
|
payload: any;
|
|
74
63
|
type: string;
|
|
75
64
|
}) => void;
|
|
76
|
-
}, "
|
|
77
|
-
declare const
|
|
78
|
-
declare const
|
|
79
|
-
declare const
|
|
80
|
-
declare const
|
|
81
|
-
declare const
|
|
82
|
-
declare const
|
|
83
|
-
declare const
|
|
84
|
-
declare const
|
|
85
|
-
declare const
|
|
86
|
-
declare const
|
|
65
|
+
}, "reader", "reader", _reduxjs_toolkit.SliceSelectors<ReaderReducerState>>;
|
|
66
|
+
declare const setDirection: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setDirection">;
|
|
67
|
+
declare const setLoading: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setLoading">;
|
|
68
|
+
declare const setPlatformModifier: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setPlatformModifier">;
|
|
69
|
+
declare const setImmersive: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setImmersive">;
|
|
70
|
+
declare const toggleImmersive: _reduxjs_toolkit.ActionCreatorWithoutPayload<"reader/toggleImmersive">;
|
|
71
|
+
declare const setHovering: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setHovering">;
|
|
72
|
+
declare const setScrollAffordance: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setScrollAffordance">;
|
|
73
|
+
declare const setArrows: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setArrows">;
|
|
74
|
+
declare const setFullscreen: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setFullscreen">;
|
|
75
|
+
declare const setSettingsContainer: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setSettingsContainer">;
|
|
87
76
|
|
|
88
77
|
interface LineLengthStateObject {
|
|
89
78
|
optimal?: number | null;
|
|
@@ -200,67 +189,6 @@ declare const setTextAlign: _reduxjs_toolkit.ActionCreatorWithPayload<any, "sett
|
|
|
200
189
|
declare const setTextNormalization: _reduxjs_toolkit.ActionCreatorWithPayload<any, "settings/setTextNormalization">;
|
|
201
190
|
declare const setWordSpacing: _reduxjs_toolkit.ActionCreatorWithPayload<any, "settings/setWordSpacing">;
|
|
202
191
|
|
|
203
|
-
interface ReaderReducerState {
|
|
204
|
-
direction: ThLayoutDirection;
|
|
205
|
-
isLoading: boolean;
|
|
206
|
-
isImmersive: boolean;
|
|
207
|
-
isHovering: boolean;
|
|
208
|
-
hasScrollAffordance: boolean;
|
|
209
|
-
hasArrows: boolean;
|
|
210
|
-
isFullscreen: boolean;
|
|
211
|
-
settingsContainer: ThSettingsContainerKeys;
|
|
212
|
-
platformModifier: UnstablePlatformModifier;
|
|
213
|
-
}
|
|
214
|
-
declare const readerSlice: _reduxjs_toolkit.Slice<ReaderReducerState, {
|
|
215
|
-
setDirection: (state: WritableDraft<ReaderReducerState>, action: {
|
|
216
|
-
payload: any;
|
|
217
|
-
type: string;
|
|
218
|
-
}) => void;
|
|
219
|
-
setLoading: (state: WritableDraft<ReaderReducerState>, action: {
|
|
220
|
-
payload: any;
|
|
221
|
-
type: string;
|
|
222
|
-
}) => void;
|
|
223
|
-
setPlatformModifier: (state: WritableDraft<ReaderReducerState>, action: {
|
|
224
|
-
payload: any;
|
|
225
|
-
type: string;
|
|
226
|
-
}) => void;
|
|
227
|
-
setImmersive: (state: WritableDraft<ReaderReducerState>, action: {
|
|
228
|
-
payload: any;
|
|
229
|
-
type: string;
|
|
230
|
-
}) => void;
|
|
231
|
-
toggleImmersive: (state: WritableDraft<ReaderReducerState>) => void;
|
|
232
|
-
setHovering: (state: WritableDraft<ReaderReducerState>, action: {
|
|
233
|
-
payload: any;
|
|
234
|
-
type: string;
|
|
235
|
-
}) => void;
|
|
236
|
-
setScrollAffordance: (state: WritableDraft<ReaderReducerState>, action: {
|
|
237
|
-
payload: any;
|
|
238
|
-
type: string;
|
|
239
|
-
}) => void;
|
|
240
|
-
setArrows: (state: WritableDraft<ReaderReducerState>, action: {
|
|
241
|
-
payload: any;
|
|
242
|
-
type: string;
|
|
243
|
-
}) => void;
|
|
244
|
-
setFullscreen: (state: WritableDraft<ReaderReducerState>, action: {
|
|
245
|
-
payload: any;
|
|
246
|
-
type: string;
|
|
247
|
-
}) => void;
|
|
248
|
-
setSettingsContainer: (state: WritableDraft<ReaderReducerState>, action: {
|
|
249
|
-
payload: any;
|
|
250
|
-
type: string;
|
|
251
|
-
}) => void;
|
|
252
|
-
}, "reader", "reader", _reduxjs_toolkit.SliceSelectors<ReaderReducerState>>;
|
|
253
|
-
declare const setDirection: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setDirection">;
|
|
254
|
-
declare const setLoading: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setLoading">;
|
|
255
|
-
declare const setPlatformModifier: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setPlatformModifier">;
|
|
256
|
-
declare const setImmersive: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setImmersive">;
|
|
257
|
-
declare const toggleImmersive: _reduxjs_toolkit.ActionCreatorWithoutPayload<"reader/toggleImmersive">;
|
|
258
|
-
declare const setHovering: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setHovering">;
|
|
259
|
-
declare const setScrollAffordance: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setScrollAffordance">;
|
|
260
|
-
declare const setArrows: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setArrows">;
|
|
261
|
-
declare const setFullscreen: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setFullscreen">;
|
|
262
|
-
declare const setSettingsContainer: _reduxjs_toolkit.ActionCreatorWithPayload<any, "reader/setSettingsContainer">;
|
|
263
|
-
|
|
264
192
|
interface ThemeStateObject {
|
|
265
193
|
reflow?: string;
|
|
266
194
|
fxl?: string;
|
|
@@ -325,23 +253,95 @@ declare const setContrast: _reduxjs_toolkit.ActionCreatorWithPayload<any, "themi
|
|
|
325
253
|
declare const setForcedColors: _reduxjs_toolkit.ActionCreatorWithPayload<any, "theming/setForcedColors">;
|
|
326
254
|
declare const setBreakpoint: _reduxjs_toolkit.ActionCreatorWithPayload<any, "theming/setBreakpoint">;
|
|
327
255
|
|
|
328
|
-
|
|
256
|
+
interface UnstableProgressionObject {
|
|
257
|
+
totalPositions?: number;
|
|
258
|
+
currentPositions?: number[];
|
|
259
|
+
relativeProgression?: number;
|
|
260
|
+
currentChapter?: string;
|
|
261
|
+
totalProgression?: number;
|
|
262
|
+
currentPublication?: string;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
interface PublicationReducerState {
|
|
266
|
+
runningHead?: string;
|
|
267
|
+
isFXL: boolean;
|
|
268
|
+
isRTL: boolean;
|
|
269
|
+
progression: UnstableProgressionObject;
|
|
270
|
+
positionsList: Locator[];
|
|
271
|
+
atPublicationStart: boolean;
|
|
272
|
+
atPublicationEnd: boolean;
|
|
273
|
+
unstableTimeline?: UnstableTimeline;
|
|
274
|
+
}
|
|
275
|
+
declare const publicationSlice: _reduxjs_toolkit.Slice<PublicationReducerState, {
|
|
276
|
+
setRunningHead: (state: WritableDraft<PublicationReducerState>, action: {
|
|
277
|
+
payload: any;
|
|
278
|
+
type: string;
|
|
279
|
+
}) => void;
|
|
280
|
+
setFXL: (state: WritableDraft<PublicationReducerState>, action: {
|
|
281
|
+
payload: any;
|
|
282
|
+
type: string;
|
|
283
|
+
}) => void;
|
|
284
|
+
setRTL: (state: WritableDraft<PublicationReducerState>, action: {
|
|
285
|
+
payload: any;
|
|
286
|
+
type: string;
|
|
287
|
+
}) => void;
|
|
288
|
+
setProgression: (state: WritableDraft<PublicationReducerState>, action: {
|
|
289
|
+
payload: any;
|
|
290
|
+
type: string;
|
|
291
|
+
}) => void;
|
|
292
|
+
setPositionsList: (state: WritableDraft<PublicationReducerState>, action: {
|
|
293
|
+
payload: any;
|
|
294
|
+
type: string;
|
|
295
|
+
}) => void;
|
|
296
|
+
setPublicationStart: (state: WritableDraft<PublicationReducerState>, action: {
|
|
297
|
+
payload: any;
|
|
298
|
+
type: string;
|
|
299
|
+
}) => void;
|
|
300
|
+
setPublicationEnd: (state: WritableDraft<PublicationReducerState>, action: {
|
|
301
|
+
payload: any;
|
|
302
|
+
type: string;
|
|
303
|
+
}) => void;
|
|
304
|
+
setTimeline: (state: WritableDraft<PublicationReducerState>, action: {
|
|
305
|
+
payload: any;
|
|
306
|
+
type: string;
|
|
307
|
+
}) => void;
|
|
308
|
+
setTocTree: (state: WritableDraft<PublicationReducerState>, action: {
|
|
309
|
+
payload: any;
|
|
310
|
+
type: string;
|
|
311
|
+
}) => void;
|
|
312
|
+
setTocEntry: (state: WritableDraft<PublicationReducerState>, action: {
|
|
313
|
+
payload: any;
|
|
314
|
+
type: string;
|
|
315
|
+
}) => void;
|
|
316
|
+
}, "publication", "publication", _reduxjs_toolkit.SliceSelectors<PublicationReducerState>>;
|
|
317
|
+
declare const setRunningHead: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setRunningHead">;
|
|
318
|
+
declare const setFXL: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setFXL">;
|
|
319
|
+
declare const setRTL: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setRTL">;
|
|
320
|
+
declare const setProgression: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setProgression">;
|
|
321
|
+
declare const setPositionsList: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setPositionsList">;
|
|
322
|
+
declare const setPublicationStart: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setPublicationStart">;
|
|
323
|
+
declare const setPublicationEnd: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setPublicationEnd">;
|
|
324
|
+
declare const setTimeline: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setTimeline">;
|
|
325
|
+
declare const setTocTree: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setTocTree">;
|
|
326
|
+
declare const setTocEntry: _reduxjs_toolkit.ActionCreatorWithPayload<any, "publication/setTocEntry">;
|
|
327
|
+
|
|
328
|
+
interface ExternalReducerConfig {
|
|
329
|
+
reducer: any;
|
|
330
|
+
persist?: boolean;
|
|
331
|
+
}
|
|
332
|
+
type RootState = {
|
|
329
333
|
reader: ReaderReducerState;
|
|
330
334
|
settings: SettingsReducerState;
|
|
331
335
|
theming: ThemeReducerState;
|
|
332
336
|
actions: ActionsReducerState;
|
|
333
337
|
publication: PublicationReducerState;
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
theming: ThemeReducerState;
|
|
339
|
-
actions: ActionsReducerState;
|
|
340
|
-
publication: PublicationReducerState;
|
|
341
|
-
}, undefined, _reduxjs_toolkit.UnknownAction>;
|
|
338
|
+
[key: string]: any;
|
|
339
|
+
};
|
|
340
|
+
declare const makeStore: (storageKey?: string, externalReducers?: Record<string, ExternalReducerConfig>) => _reduxjs_toolkit.EnhancedStore<RootState, _reduxjs_toolkit.UnknownAction, _reduxjs_toolkit.Tuple<[_reduxjs_toolkit.StoreEnhancer<{
|
|
341
|
+
dispatch: _reduxjs_toolkit.ThunkDispatch<RootState, undefined, _reduxjs_toolkit.UnknownAction>;
|
|
342
342
|
}>, _reduxjs_toolkit.StoreEnhancer]>>;
|
|
343
343
|
type AppStore = ReturnType<typeof makeStore>;
|
|
344
|
-
type
|
|
344
|
+
type AppState = RootState;
|
|
345
345
|
type AppDispatch = AppStore["dispatch"];
|
|
346
346
|
|
|
347
347
|
declare function ThStoreProvider({ storageKey, store, children }: {
|
|
@@ -354,4 +354,4 @@ declare const useAppDispatch: () => AppDispatch;
|
|
|
354
354
|
declare const useAppSelector: TypedUseSelectorHook<RootState>;
|
|
355
355
|
declare const useAppStore: () => AppStore;
|
|
356
356
|
|
|
357
|
-
export { ActionsReducerState, type AppDispatch, type AppStore, type LineLengthStateObject, type PublicationReducerState, type ReaderReducerState, type RootState, type SetLineLengthPayload, type SettingsReducerState, ThStoreProvider, type ThemeReducerState, type ThemeStateChangePayload, type ThemeStateObject, makeStore, publicationSlice, readerSlice, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
|
|
357
|
+
export { ActionsReducerState, type AppDispatch, type AppState, type AppStore, type LineLengthStateObject, type PublicationReducerState, type ReaderReducerState, type RootState, type SetLineLengthPayload, type SettingsReducerState, ThStoreProvider, type ThemeReducerState, type ThemeStateChangePayload, type ThemeStateObject, makeStore, publicationSlice, readerSlice, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
|
package/dist/lib/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore } from '../chunk-
|
|
1
|
+
export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore } from '../chunk-OCASVHBV.mjs';
|
|
2
2
|
import '../chunk-IEYR7QV7.mjs';
|
|
3
3
|
import '../chunk-NQ2ZSGCX.mjs';
|
|
4
4
|
import '../chunk-RQFPGXWN.mjs';
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
max-width: var(--constraints-bottomSheet, 600px);
|
|
44
44
|
left: max(calc((100% - var(--constraints-bottomSheet, 600px)) / 2), 0px) !important;
|
|
45
45
|
background-color: var(--theme-background) !important;
|
|
46
|
+
color: var(--theme-text) !important;
|
|
46
47
|
border: none;
|
|
47
48
|
/* Animating drop-shadow pretty much kills performance, hence why we use a pseudo-element */
|
|
48
49
|
filter: none !important;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/.pnpm/debounce@2.2.0/node_modules/debounce/index.js","../src/lib/readerReducer.ts","../src/lib/settingsReducer.ts","../src/lib/themeReducer.ts","../src/lib/actionsReducer.ts","../src/lib/publicationReducer.ts","../src/lib/store.ts","../src/lib/ThStoreProvider.tsx","../src/lib/hooks.ts"],"names":["debounce","initialState","createSlice"],"mappings":"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","file":"chunk-KQLSID7M.mjs","sourcesContent":["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\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : 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}\n\n\t\treturn result;\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};\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\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n","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 direction: ThLayoutDirection;\n isLoading: boolean;\n isImmersive: boolean;\n isHovering: boolean;\n hasScrollAffordance: boolean;\n hasArrows: boolean;\n isFullscreen: boolean;\n settingsContainer: ThSettingsContainerKeys;\n platformModifier: UnstablePlatformModifier;\n}\n\nconst initialState: ReaderReducerState = {\n direction: ThLayoutDirection.ltr,\n isLoading: true,\n isImmersive: false,\n isHovering: false,\n hasScrollAffordance: false,\n hasArrows: true,\n isFullscreen: false,\n settingsContainer: ThSettingsContainerKeys.initial,\n platformModifier: defaultPlatformModifier\n}\n\nexport const readerSlice = createSlice({\n name: \"reader\",\n initialState,\n reducers: {\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 setArrows: (state, action) => {\n state.hasArrows = 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 setDirection, \n setLoading,\n setPlatformModifier, \n setImmersive, \n toggleImmersive, \n setHovering, \n setScrollAffordance, \n setArrows, \n setFullscreen, \n setSettingsContainer\n} = readerSlice.actions;\n\nexport default readerSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThLineHeightOptions, ThTextAlignOptions } 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 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 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 textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\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 state.letterSpacing = action.payload\n },\n setLineHeight: (state, action) => {\n state.lineHeight = action.payload\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 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 state.paragraphIndent = action.payload\n },\n setParagraphSpacing: (state, action) => {\n state.paragraphSpacing = action.payload\n },\n setPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setScroll: (state, action) => {\n state.scroll = action.payload\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 state.wordSpacing = action.payload\n }\n }\n})\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 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 { UnstableProgressionObject } from \"@/components/StatefulReaderProgression\";\nimport { Locator } from \"@readium/shared\";\nimport { UnstableTimeline } from \"@/core/Hooks/useTimeline\";\n\nexport interface PublicationReducerState {\n runningHead?: string;\n isFXL: boolean;\n isRTL: boolean;\n progression: UnstableProgressionObject;\n positionsList: Locator[],\n atPublicationStart: boolean;\n atPublicationEnd: boolean;\n unstableTimeline?: UnstableTimeline;\n}\n\nconst initialState: PublicationReducerState = {\n runningHead: undefined,\n isFXL: false,\n isRTL: false,\n progression: {},\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 setRunningHead: (state, action) => {\n state.runningHead = action.payload\n },\n setFXL: (state, action) => {\n state.isFXL = action.payload\n },\n setRTL: (state, action) => {\n state.isRTL = action.payload\n },\n setProgression: (state, action) => {\n state.progression = {...state.progression, ...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 setRunningHead,\n setFXL,\n setRTL,\n setProgression,\n setPositionsList,\n setPublicationStart,\n setPublicationEnd,\n setTimeline,\n setTocTree, \n setTocEntry,\n} = publicationSlice.actions;\n\nexport default publicationSlice.reducer;","import { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport { configureStore } from \"@reduxjs/toolkit\";\n\nimport readerReducer from \"@/lib/readerReducer\";\nimport settingsReducer from \"@/lib/settingsReducer\";\nimport themeReducer, { ThemeReducerState } from \"@/lib/themeReducer\";\nimport actionsReducer, { ActionsReducerState } from \"@/lib/actionsReducer\";\nimport publicationReducer from \"./publicationReducer\";\n\nimport debounce from \"debounce\";\n\nconst DEFAULT_STORAGE_KEY = \"thorium-web-state\";\n\n// TMP Migration\n// TODO: Remove this in the next major 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 { actions: undefined, settings: undefined, theming: undefined };\n }\n const deserializedState = JSON.parse(serializedState);\n deserializedState.actions = updateActionsState(deserializedState.actions);\n \n // TMP Migration\n // TODO: Remove this in the next major version\n deserializedState.theming = migrateThemeState(deserializedState.theming);\n\n return deserializedState;\n } catch (err) {\n return { actions: undefined, settings: undefined, theming: undefined };\n }\n};\n\nconst saveState = (state: object, storageKey?: string) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n const serializedState = JSON.stringify(state);\n localStorage.setItem(resolvedKey, serializedState);\n } catch (err) {\n console.error(err);\n }\n};\n\nexport const makeStore = (storageKey?: string) => {\n const store = configureStore({\n reducer: {\n reader: readerReducer,\n settings: settingsReducer,\n theming: themeReducer,\n actions: actionsReducer,\n publication: publicationReducer\n },\n preloadedState: {\n actions: loadState(storageKey).actions,\n settings: loadState(storageKey).settings,\n theming: loadState(storageKey).theming\n },\n });\n\n const saveStateDebounced = debounce(() => {\n saveState(store.getState(), storageKey);\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\nexport type RootState = ReturnType<AppStore[\"getState\"]>;\nexport type AppDispatch = AppStore[\"dispatch\"];","\"use client\";\n\nimport { useRef } from \"react\";\nimport { Provider } from \"react-redux\";\nimport { makeStore, AppStore } from \"./store\";\n\nexport function 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 { 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;"]}
|