@edrlab/thorium-web 0.11.0 → 0.13.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 +1 -1
- package/dist/{chunk-IUF5GAPA.mjs → chunk-AFXHD6TS.mjs} +43 -22
- package/dist/chunk-AFXHD6TS.mjs.map +1 -0
- package/dist/{chunk-JS5WI5D4.mjs → chunk-CW72NB4V.mjs} +2 -2
- package/dist/{chunk-JS5WI5D4.mjs.map → chunk-CW72NB4V.mjs.map} +1 -1
- package/dist/{chunk-2U455VSY.mjs → chunk-GSWRWFPI.mjs} +4 -3
- package/dist/chunk-GSWRWFPI.mjs.map +1 -0
- package/dist/{chunk-4BUYRCGX.mjs → chunk-VMGV6SUR.mjs} +3 -3
- package/dist/{chunk-4BUYRCGX.mjs.map → chunk-VMGV6SUR.mjs.map} +1 -1
- package/dist/components/Epub/index.d.mts +6 -5
- package/dist/components/Epub/index.mjs +135 -114
- package/dist/components/Epub/index.mjs.map +1 -1
- package/dist/core/Components/index.mjs +1 -1
- package/dist/core/Hooks/index.mjs +1 -1
- package/dist/{index-DycjI7PE.d.mts → index-CMOrqzJQ.d.mts} +27 -25
- package/dist/lib/index.d.mts +1 -1
- package/dist/lib/index.mjs +1 -1
- package/dist/preferences/index.mjs +1 -1
- package/dist/{reader-GYRNT4IZ.css → reader-JFQBOUCS.css} +91 -40
- package/dist/{readerHeader.module-LTPJ6FLV.module.css → readerHeader.module-PDCMID5Y.module.css} +7 -1
- package/dist/readerProgression.module-QP76XMVO.module.css +11 -0
- package/dist/{readerStates.module-WG46M7GK.module.css → readerStates.module-XBXHDJTJ.module.css} +3 -7
- package/package.json +7 -7
- package/dist/chunk-2U455VSY.mjs.map +0 -1
- package/dist/chunk-IUF5GAPA.mjs.map +0 -1
- package/dist/readerProgression.module-PL3TD3GE.module.css +0 -4
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ The development server will automatically reload the page when you make changes
|
|
|
34
34
|
To use Thorium Web in your own project, install the package and its peer dependencies:
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
npm install @edrlab/thorium-web react-redux @reduxjs/toolkit motion react-aria react-aria-components react-stately react-modal-sheet react-resizable-panels
|
|
37
|
+
npm install @edrlab/thorium-web @readium/css @readium/navigator @readium/navigator-html-injectables @readium/shared react-redux @reduxjs/toolkit motion react-aria react-aria-components react-stately react-modal-sheet react-resizable-panels
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Then you can import and use the components in your own code:
|
|
@@ -148,17 +148,16 @@ var initialState2 = {
|
|
|
148
148
|
layoutStrategy: "lineLength" /* lineLength */,
|
|
149
149
|
letterSpacing: null,
|
|
150
150
|
lineHeight: "publisher" /* publisher */,
|
|
151
|
-
lineLength:
|
|
151
|
+
lineLength: {
|
|
152
|
+
optimal: 65
|
|
153
|
+
},
|
|
152
154
|
paragraphIndent: null,
|
|
153
155
|
paragraphSpacing: null,
|
|
154
156
|
publisherStyles: true,
|
|
155
157
|
scroll: false,
|
|
156
158
|
textAlign: "publisher" /* publisher */,
|
|
157
159
|
textNormalization: false,
|
|
158
|
-
wordSpacing: null
|
|
159
|
-
tmpLineLengths: [],
|
|
160
|
-
tmpMaxChars: false,
|
|
161
|
-
tmpMinChars: false
|
|
160
|
+
wordSpacing: null
|
|
162
161
|
};
|
|
163
162
|
var settingsSlice = createSlice({
|
|
164
163
|
name: "settings",
|
|
@@ -189,7 +188,41 @@ var settingsSlice = createSlice({
|
|
|
189
188
|
state.lineHeight = action.payload;
|
|
190
189
|
},
|
|
191
190
|
setLineLength: (state, action) => {
|
|
192
|
-
|
|
191
|
+
const deriveIsDisabled = (value, isDisabled) => {
|
|
192
|
+
if (value === null) return true;
|
|
193
|
+
if (isDisabled !== void 0) return isDisabled;
|
|
194
|
+
return false;
|
|
195
|
+
};
|
|
196
|
+
switch (action.payload.key) {
|
|
197
|
+
case "optimal":
|
|
198
|
+
if (action.payload.value) {
|
|
199
|
+
state.lineLength = {
|
|
200
|
+
...state.lineLength,
|
|
201
|
+
optimal: action.payload.value
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
break;
|
|
205
|
+
case "min":
|
|
206
|
+
state.lineLength = {
|
|
207
|
+
...state.lineLength,
|
|
208
|
+
min: {
|
|
209
|
+
...state.lineLength.min,
|
|
210
|
+
chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength.min?.chars,
|
|
211
|
+
isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
break;
|
|
215
|
+
case "max":
|
|
216
|
+
state.lineLength = {
|
|
217
|
+
...state.lineLength,
|
|
218
|
+
max: {
|
|
219
|
+
...state.lineLength.max,
|
|
220
|
+
chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength.max?.chars,
|
|
221
|
+
isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
193
226
|
},
|
|
194
227
|
setParagraphIndent: (state, action) => {
|
|
195
228
|
state.paragraphIndent = action.payload;
|
|
@@ -211,15 +244,6 @@ var settingsSlice = createSlice({
|
|
|
211
244
|
},
|
|
212
245
|
setWordSpacing: (state, action) => {
|
|
213
246
|
state.wordSpacing = action.payload;
|
|
214
|
-
},
|
|
215
|
-
setTmpLineLengths: (state, action) => {
|
|
216
|
-
state.tmpLineLengths = action.payload;
|
|
217
|
-
},
|
|
218
|
-
setTmpMaxChars: (state, action) => {
|
|
219
|
-
state.tmpMaxChars = action.payload;
|
|
220
|
-
},
|
|
221
|
-
setTmpMinChars: (state, action) => {
|
|
222
|
-
state.tmpMinChars = action.payload;
|
|
223
247
|
}
|
|
224
248
|
}
|
|
225
249
|
});
|
|
@@ -239,10 +263,7 @@ var {
|
|
|
239
263
|
setScroll,
|
|
240
264
|
setTextAlign,
|
|
241
265
|
setTextNormalization,
|
|
242
|
-
setWordSpacing
|
|
243
|
-
setTmpLineLengths,
|
|
244
|
-
setTmpMaxChars,
|
|
245
|
-
setTmpMinChars
|
|
266
|
+
setWordSpacing
|
|
246
267
|
} = settingsSlice.actions;
|
|
247
268
|
var settingsReducer_default = settingsSlice.reducer;
|
|
248
269
|
var initialState3 = {
|
|
@@ -600,6 +621,6 @@ var useAppDispatch = useDispatch;
|
|
|
600
621
|
var useAppSelector = useSelector;
|
|
601
622
|
var useAppStore = useStore;
|
|
602
623
|
|
|
603
|
-
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, setLayoutStrategy, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setSettingsContainer, setTextAlign, setTextNormalization, setTheme,
|
|
604
|
-
//# sourceMappingURL=chunk-
|
|
605
|
-
//# sourceMappingURL=chunk-
|
|
624
|
+
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, setLayoutStrategy, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
|
|
625
|
+
//# sourceMappingURL=chunk-AFXHD6TS.mjs.map
|
|
626
|
+
//# sourceMappingURL=chunk-AFXHD6TS.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-AFXHD6TS.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 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 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 },\n toggleImmersive: (state) => {\n state.isImmersive = !state.isImmersive;\n },\n setHovering: (state, action) => {\n state.isHovering = action.payload\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 setArrows, \n setFullscreen, \n setSettingsContainer\n} = readerSlice.actions;\n\nexport default readerSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThLineHeightOptions, ThTextAlignOptions, ThLayoutStrategy } from \"@/preferences/models/enums\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\n\nexport interface LineLengthStateObject {\n optimal: number;\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 layoutStrategy: ThLayoutStrategy;\n letterSpacing: number | null;\n lineHeight: ThLineHeightOptions;\n lineLength: LineLengthStateObject;\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 layoutStrategy: ThLayoutStrategy.lineLength,\n letterSpacing: null,\n lineHeight: ThLineHeightOptions.publisher,\n lineLength: {\n optimal: 65,\n },\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 setLayoutStrategy: (state, action) => {\n state.layoutStrategy = 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 setLayoutStrategy,\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 ThemeReducerState {\n monochrome: boolean;\n colorScheme: ThColorScheme;\n theme: string;\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: \"auto\",\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) => {\n state.theme = action.payload\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 { TocItem } from \"@/helpers/createTocTree\";\nimport { Locator } from \"@readium/shared\";\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 tocTree?: TocItem[];\n tocEntry?: string;\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 tocTree: undefined, \n tocEntry: 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 setTocTree: (state, action) => {\n state.tocTree = action.payload;\n },\n setTocEntry: (state, action) => {\n state.tocEntry = action.payload;\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 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 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\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 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 }, 500);\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;"]}
|
|
@@ -596,5 +596,5 @@ var useEpubNavigator = () => {
|
|
|
596
596
|
};
|
|
597
597
|
|
|
598
598
|
export { TH_CUSTOM_SCHEME, ThScrollActions, en_default, useEpubNavigator, useFullscreen, useIsClient, usePrevious };
|
|
599
|
-
//# sourceMappingURL=chunk-
|
|
600
|
-
//# sourceMappingURL=chunk-
|
|
599
|
+
//# sourceMappingURL=chunk-CW72NB4V.mjs.map
|
|
600
|
+
//# sourceMappingURL=chunk-CW72NB4V.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/Hooks/useIsClient.ts","../src/core/Hooks/useFullscreen.ts","../src/core/Hooks/usePrevious.ts","../src/resources/locales/en.json","../src/core/Hooks/Epub/scrollAffordance.ts","../src/core/Hooks/Epub/useEpubNavigator.ts"],"names":["useState","useEffect","ThScrollActions","useRef","useCallback"],"mappings":"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","file":"chunk-JS5WI5D4.mjs","sourcesContent":["\"use client\";\n\nimport { useLayoutEffect, useState } from \"react\";\n\nexport const useIsClient = () => {\n const [isClient, setIsClient] = useState(false);\n\n useLayoutEffect(() => {\n if (typeof window !== \"undefined\") setIsClient(true);\n }, []);\n\n return isClient;\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useIsClient } from \"./useIsClient\";\n\nexport const useFullscreen = (onChange?: (isFullscreen: boolean) => void) => {\n const [isFullscreen, setIsFullscreen] = useState(false);\n const isClient = useIsClient();\n\n const handleFullscreen = useCallback(() => {\n if (!isClient) return;\n\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n } else if (document.exitFullscreen) {\n document.exitFullscreen();\n }\n }, [isClient]);\n\n useEffect(() => {\n const onFSchange = () => {\n const isFs = Boolean(document.fullscreenElement);\n setIsFullscreen(isFs);\n onChange && onChange(isFs);\n }\n document.addEventListener(\"fullscreenchange\", onFSchange);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFSchange);\n }\n }, [onChange]);\n\n return {\n isFullscreen,\n handleFullscreen\n }\n}","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\nexport const usePrevious = <T>(value: T): T | null => {\n const ref = useRef<T | null>(null);\n \n useEffect(() => {\n ref.current = value;\n }, [value]); \n\n return ref.current;\n}\n","{\n \"bookUrlConverter\": {\n \"label\": \"Load an EPUB publication from a remote server (it must support byte-range requests):\",\n \"placeholder\": \"https://www.example.org/ebook.epub\",\n \"button\": \"Load\",\n \"error\": \"The URL is invalid. Please check the URL is correct and try again.\"\n },\n \"reader\": {\n \"app\": {\n \"loading\": \"Loading\",\n \"publicationWrapper\": \"You’re now in the publication.\",\n \"docking\": {\n \"dockingLeft\": \"Docked panel left\",\n \"dockingRight\": \"Docked panel right\",\n \"dockingEmpty\": \"Currently empty\",\n \"dockingClosed\": \"Is closed, contains {{ action }}\",\n \"dockingCollapsed\": \"Is Collapsed, contains {{ action }}\"\n },\n \"header\": {\n \"label\": \"Top bar\",\n \"runningHead\": \"Running head\",\n \"runningHeadFallback\": \"...\",\n \"actions\": \"Actions\"\n },\n \"footer\": {\n \"label\": \"Bottom bar\"\n },\n \"progression\": {\n \"wrapper\": \"Current progression\",\n \"of\": \"{{ current }} of {{ reference }}\",\n \"referenceFallback\": \"current chapter\",\n \"pubFallback\": \"the publication\"\n },\n \"docker\": {\n \"wrapper\": \"Docking options\",\n \"dockToLeft\": {\n \"trigger\": \"Dock to the left\",\n \"tooltip\": \"Dock left\"\n },\n \"dockToRight\": {\n \"trigger\": \"Dock to the right\",\n \"tooltip\": \"Dock Right\"\n },\n \"popover\": {\n \"trigger\": \"Display in a window\",\n \"tooltip\": \"Pop over\"\n },\n \"fullscreen\": {\n \"trigger\": \"Display over contents\",\n \"tooltip\": \"Overlay\"\n },\n \"close\": {\n \"trigger\": \"Close\",\n \"tooltip\": \"Close\"\n }\n },\n \"back\": {\n \"trigger\": \"Back\"\n }\n },\n \"navigation\": {\n \"goForward\": \"Go forward\",\n \"goBackward\": \"Go backward\",\n \"scroll\": {\n \"wrapper\": \"Navigate through the publication\",\n \"prevLabel\": \"Previous\",\n \"nextLabel\": \"Next\",\n \"prevA11yLabel\": \"Go to the previous resource\",\n \"nextA11yLabel\": \"Go to the next resource\"\n }\n },\n \"fullscreen\": {\n \"tooltip\": \"Fullscreen\",\n \"trigger\": \"Toggle fullscreen mode\",\n \"close\": \"Exit fullscreen mode\" \n },\n \"toc\": {\n \"tooltip\": \"Table of contents\",\n \"trigger\": \"Table of contents\",\n \"close\": \"Close table of contents\",\n \"heading\": \"Table of contents\",\n \"entries\": \"Entries in the table\",\n \"empty\": \"The table of contents was not provided for this publication.\",\n \"search\": {\n \"label\": \"Search\",\n \"placeholder\": \"Search\",\n \"clear\": \"Clear\"\n }\n },\n \"jumpToPosition\": {\n \"tooltip\": \"Jump to…\",\n \"trigger\": \"Jump to position\",\n \"heading\": \"Jump to position\",\n \"go\": \"Go\",\n \"close\": \"Close jump to position\",\n \"label\": \"Select a position from {{ positionStart }} to {{ positionEnd }}:\"\n },\n \"overflowMenu\": {\n \"active\": {\n \"tooltip\": \"More actions\",\n \"trigger\": \"Toggle menu\"\n },\n \"hint\": {\n \"tooltip\": \"Toggle actions\",\n \"trigger\": \"Display actions\"\n }\n },\n \"layoutStrategy\": {\n \"tooltip\": \"Layout\",\n \"trigger\": \"Layout strategy\",\n \"close\": \"Close layout strategy menu\",\n \"heading\": \"Layout strategy\",\n \"title\": \"Strategy\",\n \"margin\": \"Margin\",\n \"lineLength\": \"Line length\",\n \"columns\": \"Columns\",\n \"minChars\": \"Disable minimal line length\",\n \"maxChars\": \"Disable maximal line length\",\n \"minimalLineLength\": {\n \"title\": \"Minimal line length\",\n \"increase\": \"Increase minimal line length\",\n \"decrease\": \"Decrease maximal line length\"\n },\n \"optimalLineLength\": {\n \"title\": \"Optimal line length\",\n \"increase\": \"Increase optimal line length\",\n \"decrease\": \"Decrease optimal line length\"\n },\n \"maximalLineLength\": {\n \"title\": \"Maximal line length\",\n \"increase\": \"Increase maximal line length\",\n \"decrease\": \"Decrease maximal line length\"\n }\n },\n \"settings\": {\n \"tooltip\": \"Settings\",\n \"trigger\": \"Settings menu\",\n \"close\": \"Close settings menu\",\n \"heading\": \"Display settings\",\n \"themes\": {\n \"title\": \"Themes\",\n \"auto\": \"Auto\",\n \"light\": \"Light\",\n \"sepia\": \"Sepia\",\n \"paper\": \"Paper\",\n \"dark\": \"Dark\",\n \"contrast1\": \"Contrast 1\",\n \"contrast2\": \"Contrast 2\",\n \"contrast3\": \"Contrast 3\"\n },\n \"zoom\": {\n \"title\": \"Zoom\",\n \"increase\": \"Increase zoom\",\n \"decrease\": \"Decrease zoom\"\n },\n \"fontSize\": {\n \"title\": \"Font size\",\n \"increase\": \"Increase font size\",\n \"decrease\": \"Decrease font size\"\n },\n \"fontFamily\": {\n \"title\": \"Font family\",\n \"labels\": {\n \"publisher\": \"Publisher’s font\",\n \"oldStyle\": \"Old style serif\",\n \"modern\": \"Modern serif\",\n \"sans\": \"Sans-serif\",\n \"humanist\": \"Humanist sans-serif\",\n \"monospace\": \"Monospace\" \n }\n },\n \"fontWeight\": {\n \"title\": \"Font weight\",\n \"increase\": \"Increase font weight\",\n \"decrease\": \"Decrease font weight\"\n },\n \"normalizeText\": {\n \"title\": \"Text normalization\",\n \"label\": \"Remove all text formatting\"\n },\n \"align\": {\n \"title\": \"Text alignment\",\n \"publisher\": \"Default\",\n \"left\": \"Left\",\n \"justify\": \"Justify\",\n \"right\": \"Right\"\n },\n \"hyphens\": {\n \"title\": \"Hyphenation\",\n \"label\": \"Enable hyphens\"\n },\n \"text\": {\n \"title\": \"Text\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More formatting options\"\n }\n },\n \"lineHeight\": {\n \"title\": \"Line height\",\n \"publisher\": \"Default\",\n \"small\": \"Tight\",\n \"medium\": \"Balanced\",\n \"large\": \"Loose\"\n },\n \"paraSpacing\": {\n \"title\": \"Paragraph spacing\",\n \"increase\": \"Increase paragraph spacing\",\n \"decrease\": \"Decrease paragraph spacing\"\n },\n \"paraIndent\": {\n \"title\": \"Paragraph indent\",\n \"increase\": \"Increase paragraph indent\",\n \"decrease\": \"Decrease paragraph indent\"\n },\n \"wordSpacing\": {\n \"title\": \"Word spacing\",\n \"increase\": \"Increase word spacing\",\n \"decrease\": \"Decrease word spacing\"\n },\n \"letterSpacing\": {\n \"title\": \"Letter spacing\",\n \"increase\": \"Increase letter spacing\",\n \"decrease\": \"Decrease letter spacing\"\n },\n \"publisherStyles\": {\n \"label\": \"Use original formatting\"\n },\n \"spacing\": {\n \"title\": \"Spacing\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More spacing options\"\n }\n },\n \"layout\": {\n \"title\": \"Layout\",\n \"scrolled\": \"Scrollable\",\n \"paginated\": \"Paginated\"\n },\n \"column\": {\n \"title\": \"Columns\",\n \"auto\": \"Auto\",\n \"one\": \"1 col\",\n \"two\": \"2 cols\"\n }\n }\n }\n}","\"use client\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ScrollAffordanceConfig, ThScrollAffordancePref } from \"@/preferences/models/enums\";\n\n// Button posting message from iFrame won’t work since Navigator handles click\n// so the message is never received.\n// Link href is relative to selfhref but https and http links are\n// handled as external links in Reader, opening a new window.\n// Trying a custom scheme to avoid conflicts and progress on scroll for MVP\n// but not particularly happy about that.\n// React Portal has a lots of caveats too but it may at least protect\n// the component from Navigator’s handling, although I’m not 100% sure yet.\nexport const TH_CUSTOM_SCHEME = \"thorium-web:\";\nexport enum ThScrollActions {\n prev = TH_CUSTOM_SCHEME + \"go_prev\",\n next = TH_CUSTOM_SCHEME + \"go_next\"\n}\nconst STYLESHEET_ID = \"scroll-affordance-stylesheet\"\n\nexport class ScrollAffordance {\n private pref: ThScrollAffordancePref;\n private placement: \"top\" | \"bottom\";\n public id: string;\n public className: string;\n private styleSheetContent?: string;\n\n constructor(config: ScrollAffordanceConfig) {\n this.pref = config.pref;\n this.placement = config.placement;\n this.id = `thorium-web-scroll-affordance-wrapper-${config.placement}`;\n this.className = config.className || \"thorium-web-scroll-affordance-wrapper\";\n this.styleSheetContent = config.styleSheetContent;\n }\n\n private createStyleSheet = (cssContent?: string) => {\n const styleSheet = document.createElement(\"style\");\n styleSheet.id = STYLESHEET_ID;\n styleSheet.dataset.readium = \"true\";\n styleSheet.textContent = cssContent || `.thorium-web-scroll-affordance-wrapper {\n --color-text: currentColor;\n\n box-sizing: border-box;\n display: flex;\n width: 100%;\n gap: 20px;\n margin: 0;\n padding: 0;\n }\n .thorium-web-scroll-affordance-wrapper:focus-within {\n /* to get around hidden overflow cutting off focus ring w/o being too noticeable */\n padding: 0 2px;\n }\n #thorium-web-scroll-affordance-wrapper-top {\n /* to get around hidden overflow cutting off focus ring */\n padding-top: 0.25rem;\n margin-bottom: 1.25rem;\n }\n #thorium-web-scroll-affordance-wrapper-bottom {\n margin-top: 1.5rem;\n /* to get around hidden overflow cutting off focus ring */\n padding-bottom: 1.5rem;\n }\n .thorium-web-scroll-affordance-wrapper > a {\n box-sizing: border-box;\n border: 1px solid color-mix(in srgb, var(--color-text) 50%, transparent);\n border-radius: 3px;\n padding: 0.75rem;\n text-decoration: none;\n font-weight: bold;\n flex: 1 1 0;\n text-align: left;\n color: var(--color-text);\n font-size: 1rem;\n font-style: normal;\n font-family: inherit;\n }\n .thorium-web-scroll-affordance-wrapper > a:hover {\n background-color: \"color-mix(in srgb, var(--color-text) 15%, transparent)\";\n border: 1px solid var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a:first-child:not(:last-child) {\n text-align: right;\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev > span:before {\n content: \"←\";\n float: left;\n margin-right: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev:hover > span:before,\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next:hover > span:after {\n color: var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next > span:after {\n content: \"→\";\n float: right;\n margin-left: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }`;\n return styleSheet;\n };\n\n public render = (doc: Document) => {\n if (doc) {\n // Prevent duplicates\n this.destroy(doc);\n\n let wrapper: HTMLElement | null = null;\n\n if (this.pref !== ThScrollAffordancePref.none) {\n let prevAnchor: HTMLAnchorElement | undefined;\n let nextAnchor: HTMLAnchorElement | undefined;\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.prev)) {\n prevAnchor = doc.createElement(\"a\");\n prevAnchor.className = `thorium-web-scroll-affordance-button-prev`;\n prevAnchor.id = `thorium-web-scroll-affordance-button-prev-${this.placement}`;\n prevAnchor.href = ThScrollActions.prev;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n prevAnchor.rel = \"prev\";\n prevAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.prevA11yLabel);\n\n prevAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.prevLabel}</span>`;\n }\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.next)) {\n nextAnchor = doc.createElement(\"a\");\n nextAnchor.className = `thorium-web-scroll-affordance-button-next`;\n nextAnchor.id = `<a id=\"thorium-web-scroll-affordance-button-next-${this.placement}`;\n nextAnchor.href = ThScrollActions.next;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n nextAnchor.rel = \"next\";\n nextAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.nextA11yLabel);\n\n nextAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.nextLabel}</span>`\n }\n\n if (prevAnchor || nextAnchor) {\n wrapper = doc.createElement(\"nav\");\n wrapper.id = `thorium-web-scroll-affordance-wrapper-${this.placement}`;\n wrapper.className = this.className || \"thorium-web-scroll-affordance-wrapper\";\n wrapper.dataset.readium = \"true\";\n wrapper.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.wrapper);\n\n if (prevAnchor) wrapper.append(prevAnchor);\n if (nextAnchor) wrapper.append(nextAnchor);\n }\n }\n\n if (wrapper) {\n const styleSheet = this.createStyleSheet(this.styleSheetContent);\n doc.head.append(styleSheet);\n this.placement === \"top\" ? doc.body.prepend(wrapper) : doc.body.append(wrapper);\n }\n }\n }\n\n public destroy = (doc: Document) => {\n if (doc) {\n const stylesheet = doc.getElementById(`#${ STYLESHEET_ID }`);\n if (stylesheet) stylesheet.remove();\n\n const wrapper = doc.getElementById(this.id);\n if (wrapper) {\n wrapper.remove();\n }\n }\n }\n}","\"use client\";\n\nimport { useCallback, useMemo, useRef } from \"react\";\n\nimport { ThScrollAffordancePref, ThScrollBackTo } from \"@/preferences/models/enums\";\nimport { ScrollAffordance } from \"./scrollAffordance\";\n\nimport { \n EPUBLayout, \n Link, \n Locator, \n Publication \n} from \"@readium/shared\";\nimport { \n EpubNavigator, \n EpubNavigatorListeners, \n EpubPreferences, \n EpubSettings, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences\n} from \"@readium/navigator\";\n\ntype cbb = (ok: boolean) => void;\n\n// Module scoped, singleton instance of navigator\nlet navigatorInstance: EpubNavigator | null = null;\n\n// Scroll Affordances as mutable, otherwise the callbacks\n// will not work for components mounting before load\n// They should not be part of the hook anyway\n// And their existence is due to the lack of Injection API\nlet scrollAffordanceTop: ScrollAffordance | null = null;\nlet scrollAffordanceBottom: ScrollAffordance | null = null;\n\nexport interface EpubNavigatorLoadProps {\n container: HTMLDivElement | null;\n publication: Publication;\n listeners: EpubNavigatorListeners;\n positionsList?: Locator[];\n initialPosition?: Locator;\n preferences?: IEpubPreferences;\n defaults?: IEpubDefaults;\n scrollAffordances?: {\n top?: ThScrollAffordancePref;\n bottom?: ThScrollAffordancePref;\n }\n}\n\nexport const useEpubNavigator = () => {\n const container = useRef<HTMLDivElement | null>(null);\n const containerParent = useRef<HTMLElement | null>(null);\n const publication = useRef<Publication | null>(null);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const mountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) { \n scrollAffordanceTop?.render(frameManager.window.document);\n scrollAffordanceBottom?.render(frameManager.window.document)\n }\n });\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const unmountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n scrollAffordanceTop?.destroy(frameManager.window.document);\n scrollAffordanceBottom?.destroy(frameManager.window.document)\n }\n });\n }, []);\n\n const handleScrollAffordances = useCallback((scroll: boolean) => {\n if (navigatorInstance === null || navigatorInstance.layout === EPUBLayout.fixed) return;\n scroll ? mountScroll() : unmountScroll();\n }, [mountScroll, unmountScroll]);\n\n const submitPreferences = useCallback(async (preferences: IEpubPreferences) => {\n await navigatorInstance?.submitPreferences(new EpubPreferences(preferences));\n }, []);\n\n const getSetting = useCallback(<K extends keyof EpubSettings>(settingKey: K) => {\n return navigatorInstance?.settings[settingKey] as EpubSettings[K];\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const scrollBackTo = useCallback((position: ThScrollBackTo) => {\n if (position !== ThScrollBackTo.untouched) {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n const scrollingEl = frameManager.window.document.scrollingElement;\n if (position === ThScrollBackTo.top) {\n scrollingEl?.scrollTo(0, 0);\n } else {\n scrollingEl?.scrollTo(0, scrollingEl.scrollHeight);\n }\n }\n });\n }\n }, []);\n\n // [TMP] Working around positionChanged not firing consistently for FXL\n // We’re observing the FXLFramePoolManager spine div element’s style\n // and checking whether its translate3d has changed.\n // Sure IntersectionObserver should be the obvious one to use here,\n // observing iframes instead of the style attribute on the spine element\n // but there’s additional complexity to handle as a spread = 2 iframes\n // And keeping in sync while the FramePool is re-aligning on resize can be suboptimal\n let FXLPositionChangedCallback: ((locator: Locator) => void) | undefined;\n const FXLPositionChanged = useMemo(() => { \n return new MutationObserver((mutationsList: MutationRecord[]) => {\n for (const mutation of mutationsList) {\n const re = /translate3d\\(([^)]+)\\)/;\n const newVal = (mutation.target as HTMLElement).getAttribute(mutation.attributeName as string);\n const oldVal = mutation.oldValue;\n if (newVal?.split(re)[1] !== oldVal?.split(re)[1]) {\n const locator = navigatorInstance?.currentLocator;\n if (locator) {\n FXLPositionChangedCallback?.(locator);\n }\n }\n }\n });\n }, [FXLPositionChangedCallback]);\n\n const EpubNavigatorLoad = useCallback((config: EpubNavigatorLoadProps, cb: Function) => {\n if (config.container) {\n container.current = config.container;\n containerParent.current = container.current? container.current.parentElement : null;\n \n publication.current = config.publication;\n\n if (config.scrollAffordances) {\n if (config.scrollAffordances.top) {\n scrollAffordanceTop = new ScrollAffordance({ pref: config.scrollAffordances.top, placement: \"top\" })\n }\n if (config.scrollAffordances.bottom) {\n scrollAffordanceBottom = new ScrollAffordance({ pref: config.scrollAffordances.bottom, placement: \"bottom\" })\n }\n }\n\n navigatorInstance = new EpubNavigator(\n config.container, \n config.publication, \n config.listeners, \n config.positionsList, \n config.initialPosition, \n { preferences: config.preferences || {}, defaults: config.defaults || {} }\n );\n\n navigatorInstance.load().then(() => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n // @ts-ignore\n FXLPositionChanged.observe((navigatorInstance?.pool.spineElement as HTMLElement), {\n attributeFilter: [\"style\"], \n attributeOldValue: true\n });\n }\n });\n }\n }, [FXLPositionChanged]);\n\n const EpubNavigatorDestroy = useCallback((cb: Function) => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n FXLPositionChanged.disconnect();\n }\n navigatorInstance?.destroy;\n }, [FXLPositionChanged]);\n\n const goRight = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goRight(animated, callback);\n }, []);\n\n const goLeft = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goLeft(animated, callback)\n }, []);\n\n const goBackward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goBackward(animated, callback);\n }, []);\n\n const goForward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goForward(animated, callback);\n }, []);\n\n const goLink = useCallback((link: Link, animated: boolean, callback: cbb) => {\n navigatorInstance?.goLink(link, animated, callback);\n }, []);\n\n const go = useCallback((locator: Locator, animated: boolean, callback: cbb) => {\n navigatorInstance?.go(locator, animated, callback);\n }, []);\n\n const navLayout = useCallback(() => {\n return navigatorInstance?.layout;\n }, []);\n\n const currentLocator = useCallback(() => {\n return navigatorInstance?.currentLocator;\n }, []);\n\n const currentPositions = useCallback(() => {\n return navigatorInstance?.currentPositionNumbers;\n }, []);\n\n // Warning: this is an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const getCframes = useCallback(() => {\n return navigatorInstance?._cframes;\n }, []);\n\n return { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \n goRight, \n goLeft, \n goBackward, \n goForward,\n goLink, \n go, \n handleScrollAffordances,\n scrollBackTo, \n navLayout, \n currentLocator,\n currentPositions,\n preferencesEditor: navigatorInstance?.preferencesEditor,\n getSetting,\n submitPreferences,\n getCframes,\n onFXLPositionChange: (cb: (locator: Locator) => void) => {\n FXLPositionChangedCallback = cb;\n }\n }\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/Hooks/useIsClient.ts","../src/core/Hooks/useFullscreen.ts","../src/core/Hooks/usePrevious.ts","../src/resources/locales/en.json","../src/core/Hooks/Epub/scrollAffordance.ts","../src/core/Hooks/Epub/useEpubNavigator.ts"],"names":["useState","useEffect","ThScrollActions","useRef","useCallback"],"mappings":"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","file":"chunk-CW72NB4V.mjs","sourcesContent":["\"use client\";\n\nimport { useLayoutEffect, useState } from \"react\";\n\nexport const useIsClient = () => {\n const [isClient, setIsClient] = useState(false);\n\n useLayoutEffect(() => {\n if (typeof window !== \"undefined\") setIsClient(true);\n }, []);\n\n return isClient;\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useIsClient } from \"./useIsClient\";\n\nexport const useFullscreen = (onChange?: (isFullscreen: boolean) => void) => {\n const [isFullscreen, setIsFullscreen] = useState(false);\n const isClient = useIsClient();\n\n const handleFullscreen = useCallback(() => {\n if (!isClient) return;\n\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n } else if (document.exitFullscreen) {\n document.exitFullscreen();\n }\n }, [isClient]);\n\n useEffect(() => {\n const onFSchange = () => {\n const isFs = Boolean(document.fullscreenElement);\n setIsFullscreen(isFs);\n onChange && onChange(isFs);\n }\n document.addEventListener(\"fullscreenchange\", onFSchange);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFSchange);\n }\n }, [onChange]);\n\n return {\n isFullscreen,\n handleFullscreen\n }\n}","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\nexport const usePrevious = <T>(value: T): T | null => {\n const ref = useRef<T | null>(null);\n \n useEffect(() => {\n ref.current = value;\n }, [value]); \n\n return ref.current;\n}\n","{\n \"bookUrlConverter\": {\n \"label\": \"Load an EPUB publication from a remote server (it must support byte-range requests):\",\n \"placeholder\": \"https://www.example.org/ebook.epub\",\n \"button\": \"Load\",\n \"error\": \"The URL is invalid. Please check the URL is correct and try again.\"\n },\n \"reader\": {\n \"app\": {\n \"loading\": \"Loading\",\n \"publicationWrapper\": \"You’re now in the publication.\",\n \"docking\": {\n \"dockingLeft\": \"Docked panel left\",\n \"dockingRight\": \"Docked panel right\",\n \"dockingEmpty\": \"Currently empty\",\n \"dockingClosed\": \"Is closed, contains {{ action }}\",\n \"dockingCollapsed\": \"Is Collapsed, contains {{ action }}\"\n },\n \"header\": {\n \"label\": \"Top bar\",\n \"runningHead\": \"Running head\",\n \"runningHeadFallback\": \"...\",\n \"actions\": \"Actions\"\n },\n \"footer\": {\n \"label\": \"Bottom bar\"\n },\n \"progression\": {\n \"wrapper\": \"Current progression\",\n \"of\": \"{{ current }} of {{ reference }}\",\n \"referenceFallback\": \"current chapter\",\n \"pubFallback\": \"the publication\"\n },\n \"docker\": {\n \"wrapper\": \"Docking options\",\n \"dockToLeft\": {\n \"trigger\": \"Dock to the left\",\n \"tooltip\": \"Dock left\"\n },\n \"dockToRight\": {\n \"trigger\": \"Dock to the right\",\n \"tooltip\": \"Dock Right\"\n },\n \"popover\": {\n \"trigger\": \"Display in a window\",\n \"tooltip\": \"Pop over\"\n },\n \"fullscreen\": {\n \"trigger\": \"Display over contents\",\n \"tooltip\": \"Overlay\"\n },\n \"close\": {\n \"trigger\": \"Close\",\n \"tooltip\": \"Close\"\n }\n },\n \"back\": {\n \"trigger\": \"Back\"\n }\n },\n \"navigation\": {\n \"goForward\": \"Go forward\",\n \"goBackward\": \"Go backward\",\n \"scroll\": {\n \"wrapper\": \"Navigate through the publication\",\n \"prevLabel\": \"Previous\",\n \"nextLabel\": \"Next\",\n \"prevA11yLabel\": \"Go to the previous resource\",\n \"nextA11yLabel\": \"Go to the next resource\"\n }\n },\n \"fullscreen\": {\n \"tooltip\": \"Fullscreen\",\n \"trigger\": \"Toggle fullscreen mode\",\n \"close\": \"Exit fullscreen mode\" \n },\n \"toc\": {\n \"tooltip\": \"Table of contents\",\n \"trigger\": \"Table of contents\",\n \"close\": \"Close table of contents\",\n \"heading\": \"Table of contents\",\n \"entries\": \"Entries in the table\",\n \"empty\": \"The table of contents was not provided for this publication.\",\n \"search\": {\n \"label\": \"Search\",\n \"placeholder\": \"Search\",\n \"clear\": \"Clear\"\n }\n },\n \"jumpToPosition\": {\n \"tooltip\": \"Jump to…\",\n \"trigger\": \"Jump to position\",\n \"heading\": \"Jump to position\",\n \"go\": \"Go\",\n \"close\": \"Close jump to position\",\n \"label\": \"Select a position from {{ positionStart }} to {{ positionEnd }}:\"\n },\n \"overflowMenu\": {\n \"active\": {\n \"tooltip\": \"More actions\",\n \"trigger\": \"Toggle menu\"\n },\n \"hint\": {\n \"tooltip\": \"Toggle actions\",\n \"trigger\": \"Display actions\"\n }\n },\n \"layoutStrategy\": {\n \"tooltip\": \"Layout\",\n \"trigger\": \"Layout strategy\",\n \"close\": \"Close layout strategy menu\",\n \"heading\": \"Layout strategy\",\n \"title\": \"Strategy\",\n \"margin\": \"Margin\",\n \"lineLength\": \"Line length\",\n \"columns\": \"Columns\",\n \"minChars\": \"Disable minimal line length\",\n \"maxChars\": \"Disable maximal line length\",\n \"minimalLineLength\": {\n \"title\": \"Minimal line length\",\n \"increase\": \"Increase minimal line length\",\n \"decrease\": \"Decrease maximal line length\"\n },\n \"optimalLineLength\": {\n \"title\": \"Optimal line length\",\n \"increase\": \"Increase optimal line length\",\n \"decrease\": \"Decrease optimal line length\"\n },\n \"maximalLineLength\": {\n \"title\": \"Maximal line length\",\n \"increase\": \"Increase maximal line length\",\n \"decrease\": \"Decrease maximal line length\"\n }\n },\n \"settings\": {\n \"tooltip\": \"Settings\",\n \"trigger\": \"Settings menu\",\n \"close\": \"Close settings menu\",\n \"heading\": \"Display settings\",\n \"themes\": {\n \"title\": \"Themes\",\n \"auto\": \"Auto\",\n \"light\": \"Light\",\n \"sepia\": \"Sepia\",\n \"paper\": \"Paper\",\n \"dark\": \"Dark\",\n \"contrast1\": \"Contrast 1\",\n \"contrast2\": \"Contrast 2\",\n \"contrast3\": \"Contrast 3\"\n },\n \"zoom\": {\n \"title\": \"Zoom\",\n \"increase\": \"Increase zoom\",\n \"decrease\": \"Decrease zoom\"\n },\n \"fontSize\": {\n \"title\": \"Font size\",\n \"increase\": \"Increase font size\",\n \"decrease\": \"Decrease font size\"\n },\n \"fontFamily\": {\n \"title\": \"Font family\",\n \"labels\": {\n \"publisher\": \"Publisher’s font\",\n \"oldStyle\": \"Old style serif\",\n \"modern\": \"Modern serif\",\n \"sans\": \"Sans-serif\",\n \"humanist\": \"Humanist sans-serif\",\n \"monospace\": \"Monospace\" \n }\n },\n \"fontWeight\": {\n \"title\": \"Font weight\",\n \"increase\": \"Increase font weight\",\n \"decrease\": \"Decrease font weight\"\n },\n \"normalizeText\": {\n \"title\": \"Text normalization\",\n \"label\": \"Remove all text formatting\"\n },\n \"align\": {\n \"title\": \"Text alignment\",\n \"publisher\": \"Default\",\n \"left\": \"Left\",\n \"justify\": \"Justify\",\n \"right\": \"Right\"\n },\n \"hyphens\": {\n \"title\": \"Hyphenation\",\n \"label\": \"Enable hyphens\"\n },\n \"text\": {\n \"title\": \"Text\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More formatting options\"\n }\n },\n \"lineHeight\": {\n \"title\": \"Line height\",\n \"publisher\": \"Default\",\n \"small\": \"Tight\",\n \"medium\": \"Balanced\",\n \"large\": \"Loose\"\n },\n \"paraSpacing\": {\n \"title\": \"Paragraph spacing\",\n \"increase\": \"Increase paragraph spacing\",\n \"decrease\": \"Decrease paragraph spacing\"\n },\n \"paraIndent\": {\n \"title\": \"Paragraph indent\",\n \"increase\": \"Increase paragraph indent\",\n \"decrease\": \"Decrease paragraph indent\"\n },\n \"wordSpacing\": {\n \"title\": \"Word spacing\",\n \"increase\": \"Increase word spacing\",\n \"decrease\": \"Decrease word spacing\"\n },\n \"letterSpacing\": {\n \"title\": \"Letter spacing\",\n \"increase\": \"Increase letter spacing\",\n \"decrease\": \"Decrease letter spacing\"\n },\n \"publisherStyles\": {\n \"label\": \"Use original formatting\"\n },\n \"spacing\": {\n \"title\": \"Spacing\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More spacing options\"\n }\n },\n \"layout\": {\n \"title\": \"Layout\",\n \"scrolled\": \"Scrollable\",\n \"paginated\": \"Paginated\"\n },\n \"column\": {\n \"title\": \"Columns\",\n \"auto\": \"Auto\",\n \"one\": \"1 col\",\n \"two\": \"2 cols\"\n }\n }\n }\n}","\"use client\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ScrollAffordanceConfig, ThScrollAffordancePref } from \"@/preferences/models/enums\";\n\n// Button posting message from iFrame won’t work since Navigator handles click\n// so the message is never received.\n// Link href is relative to selfhref but https and http links are\n// handled as external links in Reader, opening a new window.\n// Trying a custom scheme to avoid conflicts and progress on scroll for MVP\n// but not particularly happy about that.\n// React Portal has a lots of caveats too but it may at least protect\n// the component from Navigator’s handling, although I’m not 100% sure yet.\nexport const TH_CUSTOM_SCHEME = \"thorium-web:\";\nexport enum ThScrollActions {\n prev = TH_CUSTOM_SCHEME + \"go_prev\",\n next = TH_CUSTOM_SCHEME + \"go_next\"\n}\nconst STYLESHEET_ID = \"scroll-affordance-stylesheet\"\n\nexport class ScrollAffordance {\n private pref: ThScrollAffordancePref;\n private placement: \"top\" | \"bottom\";\n public id: string;\n public className: string;\n private styleSheetContent?: string;\n\n constructor(config: ScrollAffordanceConfig) {\n this.pref = config.pref;\n this.placement = config.placement;\n this.id = `thorium-web-scroll-affordance-wrapper-${config.placement}`;\n this.className = config.className || \"thorium-web-scroll-affordance-wrapper\";\n this.styleSheetContent = config.styleSheetContent;\n }\n\n private createStyleSheet = (cssContent?: string) => {\n const styleSheet = document.createElement(\"style\");\n styleSheet.id = STYLESHEET_ID;\n styleSheet.dataset.readium = \"true\";\n styleSheet.textContent = cssContent || `.thorium-web-scroll-affordance-wrapper {\n --color-text: currentColor;\n\n box-sizing: border-box;\n display: flex;\n width: 100%;\n gap: 20px;\n margin: 0;\n padding: 0;\n }\n .thorium-web-scroll-affordance-wrapper:focus-within {\n /* to get around hidden overflow cutting off focus ring w/o being too noticeable */\n padding: 0 2px;\n }\n #thorium-web-scroll-affordance-wrapper-top {\n /* to get around hidden overflow cutting off focus ring */\n padding-top: 0.25rem;\n margin-bottom: 1.25rem;\n }\n #thorium-web-scroll-affordance-wrapper-bottom {\n margin-top: 1.5rem;\n /* to get around hidden overflow cutting off focus ring */\n padding-bottom: 1.5rem;\n }\n .thorium-web-scroll-affordance-wrapper > a {\n box-sizing: border-box;\n border: 1px solid color-mix(in srgb, var(--color-text) 50%, transparent);\n border-radius: 3px;\n padding: 0.75rem;\n text-decoration: none;\n font-weight: bold;\n flex: 1 1 0;\n text-align: left;\n color: var(--color-text);\n font-size: 1rem;\n font-style: normal;\n font-family: inherit;\n }\n .thorium-web-scroll-affordance-wrapper > a:hover {\n background-color: \"color-mix(in srgb, var(--color-text) 15%, transparent)\";\n border: 1px solid var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a:first-child:not(:last-child) {\n text-align: right;\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev > span:before {\n content: \"←\";\n float: left;\n margin-right: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev:hover > span:before,\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next:hover > span:after {\n color: var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next > span:after {\n content: \"→\";\n float: right;\n margin-left: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }`;\n return styleSheet;\n };\n\n public render = (doc: Document) => {\n if (doc) {\n // Prevent duplicates\n this.destroy(doc);\n\n let wrapper: HTMLElement | null = null;\n\n if (this.pref !== ThScrollAffordancePref.none) {\n let prevAnchor: HTMLAnchorElement | undefined;\n let nextAnchor: HTMLAnchorElement | undefined;\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.prev)) {\n prevAnchor = doc.createElement(\"a\");\n prevAnchor.className = `thorium-web-scroll-affordance-button-prev`;\n prevAnchor.id = `thorium-web-scroll-affordance-button-prev-${this.placement}`;\n prevAnchor.href = ThScrollActions.prev;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n prevAnchor.rel = \"prev\";\n prevAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.prevA11yLabel);\n\n prevAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.prevLabel}</span>`;\n }\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.next)) {\n nextAnchor = doc.createElement(\"a\");\n nextAnchor.className = `thorium-web-scroll-affordance-button-next`;\n nextAnchor.id = `<a id=\"thorium-web-scroll-affordance-button-next-${this.placement}`;\n nextAnchor.href = ThScrollActions.next;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n nextAnchor.rel = \"next\";\n nextAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.nextA11yLabel);\n\n nextAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.nextLabel}</span>`\n }\n\n if (prevAnchor || nextAnchor) {\n wrapper = doc.createElement(\"nav\");\n wrapper.id = `thorium-web-scroll-affordance-wrapper-${this.placement}`;\n wrapper.className = this.className || \"thorium-web-scroll-affordance-wrapper\";\n wrapper.dataset.readium = \"true\";\n wrapper.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.wrapper);\n\n if (prevAnchor) wrapper.append(prevAnchor);\n if (nextAnchor) wrapper.append(nextAnchor);\n }\n }\n\n if (wrapper) {\n const styleSheet = this.createStyleSheet(this.styleSheetContent);\n doc.head.append(styleSheet);\n this.placement === \"top\" ? doc.body.prepend(wrapper) : doc.body.append(wrapper);\n }\n }\n }\n\n public destroy = (doc: Document) => {\n if (doc) {\n const stylesheet = doc.getElementById(`#${ STYLESHEET_ID }`);\n if (stylesheet) stylesheet.remove();\n\n const wrapper = doc.getElementById(this.id);\n if (wrapper) {\n wrapper.remove();\n }\n }\n }\n}","\"use client\";\n\nimport { useCallback, useMemo, useRef } from \"react\";\n\nimport { ThScrollAffordancePref, ThScrollBackTo } from \"@/preferences/models/enums\";\nimport { ScrollAffordance } from \"./scrollAffordance\";\n\nimport { \n EPUBLayout, \n Link, \n Locator, \n Publication \n} from \"@readium/shared\";\nimport { \n EpubNavigator, \n EpubNavigatorListeners, \n EpubPreferences, \n EpubSettings, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences\n} from \"@readium/navigator\";\n\ntype cbb = (ok: boolean) => void;\n\n// Module scoped, singleton instance of navigator\nlet navigatorInstance: EpubNavigator | null = null;\n\n// Scroll Affordances as mutable, otherwise the callbacks\n// will not work for components mounting before load\n// They should not be part of the hook anyway\n// And their existence is due to the lack of Injection API\nlet scrollAffordanceTop: ScrollAffordance | null = null;\nlet scrollAffordanceBottom: ScrollAffordance | null = null;\n\nexport interface EpubNavigatorLoadProps {\n container: HTMLDivElement | null;\n publication: Publication;\n listeners: EpubNavigatorListeners;\n positionsList?: Locator[];\n initialPosition?: Locator;\n preferences?: IEpubPreferences;\n defaults?: IEpubDefaults;\n scrollAffordances?: {\n top?: ThScrollAffordancePref;\n bottom?: ThScrollAffordancePref;\n }\n}\n\nexport const useEpubNavigator = () => {\n const container = useRef<HTMLDivElement | null>(null);\n const containerParent = useRef<HTMLElement | null>(null);\n const publication = useRef<Publication | null>(null);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const mountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) { \n scrollAffordanceTop?.render(frameManager.window.document);\n scrollAffordanceBottom?.render(frameManager.window.document)\n }\n });\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const unmountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n scrollAffordanceTop?.destroy(frameManager.window.document);\n scrollAffordanceBottom?.destroy(frameManager.window.document)\n }\n });\n }, []);\n\n const handleScrollAffordances = useCallback((scroll: boolean) => {\n if (navigatorInstance === null || navigatorInstance.layout === EPUBLayout.fixed) return;\n scroll ? mountScroll() : unmountScroll();\n }, [mountScroll, unmountScroll]);\n\n const submitPreferences = useCallback(async (preferences: IEpubPreferences) => {\n await navigatorInstance?.submitPreferences(new EpubPreferences(preferences));\n }, []);\n\n const getSetting = useCallback(<K extends keyof EpubSettings>(settingKey: K) => {\n return navigatorInstance?.settings[settingKey] as EpubSettings[K];\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const scrollBackTo = useCallback((position: ThScrollBackTo) => {\n if (position !== ThScrollBackTo.untouched) {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n const scrollingEl = frameManager.window.document.scrollingElement;\n if (position === ThScrollBackTo.top) {\n scrollingEl?.scrollTo(0, 0);\n } else {\n scrollingEl?.scrollTo(0, scrollingEl.scrollHeight);\n }\n }\n });\n }\n }, []);\n\n // [TMP] Working around positionChanged not firing consistently for FXL\n // We’re observing the FXLFramePoolManager spine div element’s style\n // and checking whether its translate3d has changed.\n // Sure IntersectionObserver should be the obvious one to use here,\n // observing iframes instead of the style attribute on the spine element\n // but there’s additional complexity to handle as a spread = 2 iframes\n // And keeping in sync while the FramePool is re-aligning on resize can be suboptimal\n let FXLPositionChangedCallback: ((locator: Locator) => void) | undefined;\n const FXLPositionChanged = useMemo(() => { \n return new MutationObserver((mutationsList: MutationRecord[]) => {\n for (const mutation of mutationsList) {\n const re = /translate3d\\(([^)]+)\\)/;\n const newVal = (mutation.target as HTMLElement).getAttribute(mutation.attributeName as string);\n const oldVal = mutation.oldValue;\n if (newVal?.split(re)[1] !== oldVal?.split(re)[1]) {\n const locator = navigatorInstance?.currentLocator;\n if (locator) {\n FXLPositionChangedCallback?.(locator);\n }\n }\n }\n });\n }, [FXLPositionChangedCallback]);\n\n const EpubNavigatorLoad = useCallback((config: EpubNavigatorLoadProps, cb: Function) => {\n if (config.container) {\n container.current = config.container;\n containerParent.current = container.current? container.current.parentElement : null;\n \n publication.current = config.publication;\n\n if (config.scrollAffordances) {\n if (config.scrollAffordances.top) {\n scrollAffordanceTop = new ScrollAffordance({ pref: config.scrollAffordances.top, placement: \"top\" })\n }\n if (config.scrollAffordances.bottom) {\n scrollAffordanceBottom = new ScrollAffordance({ pref: config.scrollAffordances.bottom, placement: \"bottom\" })\n }\n }\n\n navigatorInstance = new EpubNavigator(\n config.container, \n config.publication, \n config.listeners, \n config.positionsList, \n config.initialPosition, \n { preferences: config.preferences || {}, defaults: config.defaults || {} }\n );\n\n navigatorInstance.load().then(() => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n // @ts-ignore\n FXLPositionChanged.observe((navigatorInstance?.pool.spineElement as HTMLElement), {\n attributeFilter: [\"style\"], \n attributeOldValue: true\n });\n }\n });\n }\n }, [FXLPositionChanged]);\n\n const EpubNavigatorDestroy = useCallback((cb: Function) => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n FXLPositionChanged.disconnect();\n }\n navigatorInstance?.destroy;\n }, [FXLPositionChanged]);\n\n const goRight = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goRight(animated, callback);\n }, []);\n\n const goLeft = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goLeft(animated, callback)\n }, []);\n\n const goBackward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goBackward(animated, callback);\n }, []);\n\n const goForward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goForward(animated, callback);\n }, []);\n\n const goLink = useCallback((link: Link, animated: boolean, callback: cbb) => {\n navigatorInstance?.goLink(link, animated, callback);\n }, []);\n\n const go = useCallback((locator: Locator, animated: boolean, callback: cbb) => {\n navigatorInstance?.go(locator, animated, callback);\n }, []);\n\n const navLayout = useCallback(() => {\n return navigatorInstance?.layout;\n }, []);\n\n const currentLocator = useCallback(() => {\n return navigatorInstance?.currentLocator;\n }, []);\n\n const currentPositions = useCallback(() => {\n return navigatorInstance?.currentPositionNumbers;\n }, []);\n\n // Warning: this is an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const getCframes = useCallback(() => {\n return navigatorInstance?._cframes;\n }, []);\n\n return { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \n goRight, \n goLeft, \n goBackward, \n goForward,\n goLink, \n go, \n handleScrollAffordances,\n scrollBackTo, \n navLayout, \n currentLocator,\n currentPositions,\n preferencesEditor: navigatorInstance?.preferencesEditor,\n getSetting,\n submitPreferences,\n getCframes,\n onFXLPositionChange: (cb: (locator: Locator) => void) => {\n FXLPositionChangedCallback = cb;\n }\n }\n}"]}
|
|
@@ -997,7 +997,8 @@ var ThRadioGroup = ({
|
|
|
997
997
|
{
|
|
998
998
|
...compounds?.radio,
|
|
999
999
|
key: index,
|
|
1000
|
-
value: item.value
|
|
1000
|
+
value: item.value,
|
|
1001
|
+
isDisabled: item.isDisabled
|
|
1001
1002
|
},
|
|
1002
1003
|
/* @__PURE__ */ jsxs(React19.Fragment, { children: [
|
|
1003
1004
|
item.icon && /* @__PURE__ */ jsx(item.icon, { "aria-hidden": "true", focusable: "false" }),
|
|
@@ -1174,5 +1175,5 @@ var ThSettingsWrapper = ({
|
|
|
1174
1175
|
};
|
|
1175
1176
|
|
|
1176
1177
|
export { ThActionButton, ThActionsBar, ThActionsTriggerVariant, ThBottomSheet, ThCloseButton, ThCollapsibleActionsBar, ThContainerBody, ThContainerHeader, ThContainerHeaderWithClose, ThContainerHeaderWithPrevious, ThDockedPanel, ThDragIndicatorButton, ThDropdown, ThDropdownButton, ThFooter, ThForm, ThFormNumberField, ThFormSearchField, ThFormTextField, ThHeader, ThLoader, ThMenu, ThMenuButton, ThMenuItem, ThModal, ThNavigationButton, ThNumberField, ThPopover, ThProgression, ThRadioGroup, ThRunningHead, ThSettingsWrapper, ThSettingsWrapperButton, ThSlider, ThSwitch, ThTypedComponentRenderer, useActions, useFirstFocusable };
|
|
1177
|
-
//# sourceMappingURL=chunk-
|
|
1178
|
-
//# sourceMappingURL=chunk-
|
|
1178
|
+
//# sourceMappingURL=chunk-GSWRWFPI.mjs.map
|
|
1179
|
+
//# sourceMappingURL=chunk-GSWRWFPI.mjs.map
|