@edrlab/thorium-web 1.4.0 → 1.5.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.
Files changed (94) hide show
  1. package/dist/{ThPreferencesAdapter-L1H6gzmu.d.mts → ThPreferencesAdapter-B3a-f5v-.d.mts} +25 -18
  2. package/dist/{ThSettingsWrapper-DWEA4hYF.d.mts → ThSettingsWrapper-DtzcwzYX.d.mts} +4 -4
  3. package/dist/{actions-BjeRjaJU.d.mts → actions-C33UN3Ji.d.mts} +18 -4
  4. package/dist/{actionsReducer-B32cq2mB.d.mts → actionsReducer-Bzcj3wk3.d.mts} +1 -1
  5. package/dist/{chunk-NUXGQWED.mjs → chunk-2NCN2AG2.mjs} +3 -3
  6. package/dist/{chunk-NUXGQWED.mjs.map → chunk-2NCN2AG2.mjs.map} +1 -1
  7. package/dist/{chunk-IVXRCKWR.mjs → chunk-2T65MDBR.mjs} +4 -4
  8. package/dist/{chunk-IVXRCKWR.mjs.map → chunk-2T65MDBR.mjs.map} +1 -1
  9. package/dist/{chunk-KVUG6BNI.mjs → chunk-63LKYJFG.mjs} +62 -56
  10. package/dist/chunk-63LKYJFG.mjs.map +1 -0
  11. package/dist/chunk-AQSJDL63.mjs +193 -0
  12. package/dist/chunk-AQSJDL63.mjs.map +1 -0
  13. package/dist/{chunk-TSLTLQ6O.mjs → chunk-BBCSLDQT.mjs} +144 -86
  14. package/dist/chunk-BBCSLDQT.mjs.map +1 -0
  15. package/dist/{chunk-QUSGPT5M.mjs → chunk-BCXKBHU3.mjs} +34 -15
  16. package/dist/chunk-BCXKBHU3.mjs.map +1 -0
  17. package/dist/{chunk-T5ENYSDJ.mjs → chunk-DQDOOTCE.mjs} +3 -3
  18. package/dist/{chunk-T5ENYSDJ.mjs.map → chunk-DQDOOTCE.mjs.map} +1 -1
  19. package/dist/chunk-GNROODJB.mjs +9 -0
  20. package/dist/chunk-GNROODJB.mjs.map +1 -0
  21. package/dist/{chunk-SZAVAQ6S.mjs → chunk-GRYEOCGD.mjs} +8 -5
  22. package/dist/chunk-GRYEOCGD.mjs.map +1 -0
  23. package/dist/{chunk-PXXWEMNL.mjs → chunk-KJ55Q63A.mjs} +220 -106
  24. package/dist/chunk-KJ55Q63A.mjs.map +1 -0
  25. package/dist/{chunk-5LUMM7FW.mjs → chunk-KOR74F6M.mjs} +9 -41
  26. package/dist/chunk-KOR74F6M.mjs.map +1 -0
  27. package/dist/{chunk-WLVE3WNW.mjs → chunk-PAFJZH7O.mjs} +12 -7
  28. package/dist/chunk-PAFJZH7O.mjs.map +1 -0
  29. package/dist/{chunk-XRFLDNAY.mjs → chunk-PRQBFBJ7.mjs} +123 -56
  30. package/dist/chunk-PRQBFBJ7.mjs.map +1 -0
  31. package/dist/{chunk-6MONB2DN.mjs → chunk-Y5X74VW7.mjs} +52 -146
  32. package/dist/chunk-Y5X74VW7.mjs.map +1 -0
  33. package/dist/{chunk-P6ILEQ5P.mjs → chunk-ZD4LTF6G.mjs} +17 -9
  34. package/dist/chunk-ZD4LTF6G.mjs.map +1 -0
  35. package/dist/components/Audio/index.css +12 -1
  36. package/dist/components/Audio/index.css.map +1 -1
  37. package/dist/components/Audio/index.d.mts +17 -15
  38. package/dist/components/Audio/index.mjs +11 -11
  39. package/dist/components/Epub/index.css +12 -1
  40. package/dist/components/Epub/index.css.map +1 -1
  41. package/dist/components/Epub/index.d.mts +14 -13
  42. package/dist/components/Epub/index.mjs +12 -12
  43. package/dist/components/Misc/index.mjs +5 -5
  44. package/dist/components/Reader/index.css +12 -1
  45. package/dist/components/Reader/index.css.map +1 -1
  46. package/dist/components/Reader/index.d.mts +12 -11
  47. package/dist/components/Reader/index.mjs +26 -24
  48. package/dist/components/Reader/index.mjs.map +1 -1
  49. package/dist/components/WebPub/index.css +12 -1
  50. package/dist/components/WebPub/index.css.map +1 -1
  51. package/dist/components/WebPub/index.d.mts +14 -13
  52. package/dist/components/WebPub/index.mjs +12 -12
  53. package/dist/core/Components/index.d.mts +7 -6
  54. package/dist/core/Components/index.mjs +2 -2
  55. package/dist/core/Helpers/index.d.mts +1 -1
  56. package/dist/core/Helpers/index.mjs +1 -1
  57. package/dist/core/Hooks/index.d.mts +6 -5
  58. package/dist/core/Hooks/index.mjs +1 -1
  59. package/dist/i18n/index.mjs +3 -3
  60. package/dist/keyboardUtilities-BCP3UcLb.d.mts +30 -0
  61. package/dist/lib/index.d.mts +17 -9
  62. package/dist/lib/index.mjs +2 -2
  63. package/dist/locales/da/thorium-web.json +37 -2
  64. package/dist/locales/fi/thorium-web.json +1 -1
  65. package/dist/locales/fr/thorium-web.json +1 -1
  66. package/dist/locales/he/thorium-web.json +9 -0
  67. package/dist/locales/it/thorium-web.json +22 -0
  68. package/dist/locales/lt/thorium-web.json +26 -1
  69. package/dist/locales/sv/thorium-web.json +22 -0
  70. package/dist/next-lib/index.mjs +1 -1
  71. package/dist/next-lib/index.mjs.map +1 -1
  72. package/dist/preferences/index.d.mts +14 -23
  73. package/dist/preferences/index.mjs +4 -4
  74. package/dist/{settingsReducer-DLaT2wUB.d.mts → settingsReducer-Pp9aoiiC.d.mts} +1 -1
  75. package/dist/{useAudioNavigator-CWXyNWq1.d.mts → useAudioNavigator-pGwxhXLj.d.mts} +4 -1
  76. package/dist/{useContrast-Bo7cDw_X.d.mts → useContrast-Bl08zDTU.d.mts} +2 -7
  77. package/dist/{usePreferences-D8NU1yhP.d.mts → usePreferences-Cy7-JN2x.d.mts} +4 -8
  78. package/dist/{useReaderTransitions-BQGzKeY2.d.mts → useReaderTransitions-Zvomj9RQ.d.mts} +30 -21
  79. package/package.json +7 -7
  80. package/dist/chunk-5LUMM7FW.mjs.map +0 -1
  81. package/dist/chunk-6MONB2DN.mjs.map +0 -1
  82. package/dist/chunk-B3WDMWCT.mjs +0 -9
  83. package/dist/chunk-B3WDMWCT.mjs.map +0 -1
  84. package/dist/chunk-KVUG6BNI.mjs.map +0 -1
  85. package/dist/chunk-MLEYTQGK.mjs +0 -60
  86. package/dist/chunk-MLEYTQGK.mjs.map +0 -1
  87. package/dist/chunk-P6ILEQ5P.mjs.map +0 -1
  88. package/dist/chunk-PXXWEMNL.mjs.map +0 -1
  89. package/dist/chunk-QUSGPT5M.mjs.map +0 -1
  90. package/dist/chunk-SZAVAQ6S.mjs.map +0 -1
  91. package/dist/chunk-TSLTLQ6O.mjs.map +0 -1
  92. package/dist/chunk-WLVE3WNW.mjs.map +0 -1
  93. package/dist/chunk-XRFLDNAY.mjs.map +0 -1
  94. package/dist/keyboardUtilities-BWAyLS_D.d.mts +0 -56
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/assets/styles/thorium-web.reader.paginatedArrow.module.css","../src/hooks/usePaginatedArrows.ts","../src/components/StatefulReaderArrowButton.tsx","../src/components/Epub/Hooks/useEpubStatelessCache.ts","../src/components/Epub/Hooks/usePreferencesConfig.ts","../src/components/Epub/Hooks/useInjectablesConfig.ts","../src/components/Epub/Hooks/useReaderInit.ts","../src/components/Epub/StatefulReader.tsx"],"names":["container","leftContainer","rightContainer","occupiesSpace","visuallyHidden","className","useEffect","isHovering","classNames","useRef","useMemo","useState","jsx","Fragment","useCallback","timeline","theme"],"mappings":"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","file":"chunk-TSLTLQ6O.mjs","sourcesContent":[".container {\n position: absolute;\n z-index: 2;\n}\n\n.leftContainer {\n top: 50vh;\n top: 50dvh;\n transform: translateY(-50%);\n left: 0;\n}\n\n.leftContainer button {\n margin-left: var(--th-arrow-offset, 0);\n}\n\n.rightContainer {\n top: 50vh;\n top: 50dvh;\n transform: translateY(-50%);\n right: 0;\n}\n\n.rightContainer button {\n margin-right: var(--th-arrow-offset, 0);\n}\n\n.container button {\n width: var(--th-arrow-size, 40px);\n /* height: var(--th-arrow-size, 40px); */\n height: 40vh;\n height: 40dvh;\n border-radius: var(--th-layout-radius);\n pointer-events: auto;\n box-sizing: border-box;\n padding: 5px;\n\n background-color: var(--th-theme-background);\n border: 1px solid var(--th-theme-text);\n}\n\n.container .occupiesSpace {\n background-color: transparent;\n border: none;\n}\n\n.container button[data-disabled] {\n pointer-events: none;\n}\n\n.container button[data-hovered] {\n opacity: 1;\n transition: all 200ms;\n}\n\n.container .visuallyHidden {\n opacity: 0;\n}\n\n.container button[data-focused] {\n outline: 2px solid var(--th-theme-focus);\n opacity: 1;\n}\n\n.container button[data-disabled] {\n opacity: 0;\n}\n\n/* Exclude taps as they will eventually apply hover state */\n@media (hover: hover) and (pointer: fine) {\n .container button:not([data-disabled])[data-hovered] {\n opacity: 1;\n transition: all 200ms;\n }\n}\n\n.container button svg {\n fill: var(--th-theme-text);\n stroke: var(--th-theme-text);\n width: 100%;\n height: 100%;\n}","import { useEffect, useMemo } from \"react\";\n\nimport { ThArrowVariant, ThPaginatedAffordancePrefValue } from \"@/preferences/models\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useReaderTransitions } from \"./useReaderTransitions\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setHasArrows, setUserNavigated } from \"@/lib/readerReducer\";\n\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\n\nexport interface UsePaginatedArrowsReturn {\n isVisible: boolean;\n occupySpace: boolean;\n shouldTrackNavigation: boolean;\n supportsVariant: boolean;\n}\n\nexport const usePaginatedArrows = (): UsePaginatedArrowsReturn => {\n const { preferences } = usePreferences();\n const hasArrows = useAppSelector(state => state.reader.hasArrows);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n \n // Get reader state transitions\n const {\n isScroll,\n fromImmersive,\n toImmersive,\n fromFullscreen,\n toFullscreen,\n fromScroll,\n toUserNavigation\n } = useReaderTransitions();\n\n const dispatch = useAppDispatch();\n\n // Memoize the prefs object to avoid recreating it on every render\n const prefs = useMemo(() => \n isFXL \n ? preferences.affordances.paginated.fxl \n : preferences.affordances.paginated.reflow,\n [isFXL, preferences.affordances.paginated.fxl, preferences.affordances.paginated.reflow]\n );\n\n // Memoize the breakpoints map to avoid recreating it on every breakpoint change\n const prefsMap = useMemo(() => \n makeBreakpointsMap<ThPaginatedAffordancePrefValue>({\n defaultValue: prefs.default,\n fromEnum: ThArrowVariant,\n pref: prefs.breakpoints,\n validateKey: \"variant\"\n }),\n [prefs.default, prefs.breakpoints]\n );\n\n // Get the current preferences based on breakpoint\n const { variant, discard, hint } = useMemo(() => {\n // Get the current prefs for the breakpoint or fallback to default\n const result = prefsMap[breakpoint as keyof typeof prefsMap] || prefs.default;\n \n // Force layered variant for FXL to prevent layout issues\n // FXL navigator is using the window width to calculate the layout\n // so we need to force the layered variant to prevent layout issues\n if (isFXL) {\n return {\n ...result,\n variant: ThArrowVariant.layered\n };\n }\n \n return result;\n }, [breakpoint, prefsMap, isFXL, prefs.default]);\n\n // Track previous prefs\n const prevVariant = usePrevious(variant);\n const prevDiscard = usePrevious(discard);\n\n // Handle state transitions\n useEffect(() => {\n // If navigation was just added to discard, reset navigation state\n if (!prevDiscard?.includes(\"navigation\") && discard?.includes(\"navigation\")) {\n dispatch(setUserNavigated(false));\n return;\n }\n \n // If discard changed to \"none\", show the arrows and reset navigation state\n if (discard === \"none\" && prevDiscard !== \"none\") {\n dispatch(setHasArrows(true));\n dispatch(setUserNavigated(false));\n return;\n }\n // Reset when changing from \"none\" to \"stacked\" or \"layered\"\n if (prevVariant === ThArrowVariant.none && variant !== ThArrowVariant.none) {\n dispatch(setHasArrows(true));\n dispatch(setUserNavigated(false));\n return;\n }\n\n // Check for discard transitions (false -> true)\n const shouldHide = \n (discard?.includes(\"immersive\") && toImmersive) ||\n (discard?.includes(\"fullscreen\") && toFullscreen) ||\n (discard?.includes(\"navigation\") && toUserNavigation);\n\n // Check for hint transitions (true -> false)\n const shouldShow = \n (hint?.includes(\"immersiveChange\") && fromImmersive) ||\n (hint?.includes(\"fullscreenChange\") && fromFullscreen) ||\n (hint?.includes(\"layoutChange\") && fromScroll);\n\n if (shouldHide) {\n dispatch(setHasArrows(false));\n // Reset the navigation flag after handling the transition\n if (discard?.includes(\"navigation\") && toUserNavigation) {\n dispatch(setUserNavigated(false));\n }\n } else if (shouldShow) {\n dispatch(setHasArrows(true));\n }\n }, [toImmersive, toFullscreen, toUserNavigation, fromImmersive, fromFullscreen, fromScroll, discard, hint, prevVariant, variant, prevDiscard, dispatch]);\n\n // Early return for special cases\n if (variant === ThArrowVariant.none || isScroll) {\n return {\n isVisible: false,\n occupySpace: false,\n shouldTrackNavigation: false,\n supportsVariant: !isFXL\n };\n }\n\n return {\n isVisible: hasArrows,\n occupySpace: variant === ThArrowVariant.stacked,\n shouldTrackNavigation: Array.isArray(discard) && discard.includes(\"navigation\"),\n supportsVariant: !isFXL\n };\n};","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport arrowStyles from \"./assets/styles/thorium-web.reader.paginatedArrow.module.css\";\nimport readerSharedUI from \"./assets/styles/thorium-web.button.module.css\";\n\nimport { ThNavigationButton, ThNavigationButtonProps } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\nimport { usePaginatedArrows } from \"@/hooks/usePaginatedArrows\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\n\nimport classNames from \"classnames\";\n\nexport interface StatefulReaderArrowButtonProps extends ThNavigationButtonProps {\n direction: \"left\" | \"right\";\n}\n\nexport const StatefulReaderArrowButton = ({\n direction,\n className,\n isDisabled,\n onPress,\n ...props\n}: StatefulReaderArrowButtonProps) => {\n const { preferences } = usePreferences();\n const { t } = useI18n();\n \n const buttonRef = useRef<HTMLButtonElement>(null);\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const hasArrows = useAppSelector(state => state.reader.hasArrows);\n\n const { \n isVisible, \n occupySpace \n } = usePaginatedArrows();\n \n const [isHovering, setIsHovering] = useState(false);\n\n const label = (\n direction === \"right\" && !isRTL || \n direction === \"left\" && isRTL\n ) \n ? t(\"reader.actions.goForward\") \n : t(\"reader.actions.goBackward\");\n\n const handleClassNameFromState = () => {\n let className = \"\";\n if (!isVisible) {\n className = arrowStyles.visuallyHidden;\n }\n return className;\n };\n\n const handleClassNameFromSpaceProp = () => {\n let className = \"\";\n if (occupySpace) {\n className = arrowStyles.occupiesSpace;\n }\n return className;\n };\n\n useEffect(() => {\n if ((isDisabled || (!hasArrows && !isHovering)) && isActiveElement(buttonRef.current)) {\n buttonRef.current!.blur();\n }\n });\n\n const blurOnEsc = (event: React.KeyboardEvent) => { \n if (isActiveElement(buttonRef.current) && event.code === \"Escape\") {\n buttonRef.current!.blur();\n }\n };\n\n return (\n <>\n <ThNavigationButton \n direction={ direction }\n ref= { buttonRef }\n aria-label={ label }\n onPress={ onPress }\n onHoverChange={ (isHovering: boolean) => setIsHovering(isHovering) } \n onKeyDown={ blurOnEsc }\n className={ classNames(className, handleClassNameFromSpaceProp(), handleClassNameFromState()) }\n isDisabled={ isDisabled }\n preventFocusOnPress={ true }\n { ...props }\n compounds={ {\n tooltipTrigger: {\n delay: preferences.theming.arrow.tooltipDelay,\n closeDelay: preferences.theming.arrow.tooltipDelay\n },\n tooltip: {\n placement: direction === \"left\" ? \"right\" : \"left\",\n className: readerSharedUI.tooltip\n },\n label: label\n } }\n />\n </>\n )\n}","\"use client\";\n\nimport { useRef } from \"react\";\nimport { ThLayoutUI, ThTextAlignOptions, ThLineHeightOptions } from \"@/preferences/models\";\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\nimport { LineLengthStateObject, FontFamilyStateObject } from \"@/lib/settingsReducer\";\nimport { Locator } from \"@readium/shared\";\nimport { useEpubSettingsCache, ReadiumCSSSettings } from \"@/core/Hooks/Epub/useEpubSettingsCache\";\n\nexport interface EPubStatelessCache {\n layoutUI: ThLayoutUI;\n isImmersive: boolean;\n isHovering: boolean;\n arrowsOccupySpace: boolean;\n settings: ReadiumCSSSettings;\n positionsList: Locator[];\n colorScheme?: ThColorScheme;\n reducedMotion?: boolean;\n}\n\nexport const useEpubStatelessCache = (\n textAlign: ThTextAlignOptions | null,\n columnCount: string,\n fontFamily: FontFamilyStateObject,\n fontSize: number,\n fontWeight: number,\n hyphens: boolean | null,\n letterSpacing: number | null,\n ligatures: boolean | null,\n lineLength: LineLengthStateObject | null,\n lineHeight: ThLineHeightOptions | null,\n noRuby: boolean | null,\n paragraphIndent: number | null,\n paragraphSpacing: number | null,\n publisherStyles: boolean,\n scroll: boolean,\n textNormalization: boolean,\n wordSpacing: number | null,\n theme: string | undefined,\n positionsList: Locator[],\n colorScheme: ThColorScheme,\n reducedMotion: boolean,\n layoutUI: ThLayoutUI,\n isImmersive: boolean,\n isHovering: boolean,\n arrowsOccupySpace: boolean\n) => {\n const settingsCache = useEpubSettingsCache(\n textAlign,\n columnCount,\n fontFamily,\n fontSize,\n fontWeight,\n hyphens,\n letterSpacing,\n ligatures,\n lineLength,\n lineHeight,\n noRuby,\n paragraphIndent,\n paragraphSpacing,\n publisherStyles,\n scroll,\n textNormalization,\n wordSpacing,\n theme\n );\n\n const cache = useRef<EPubStatelessCache>({\n layoutUI,\n isImmersive,\n isHovering,\n arrowsOccupySpace: arrowsOccupySpace || false,\n settings: settingsCache.current.settings,\n positionsList: positionsList,\n colorScheme,\n reducedMotion,\n });\n\n // Update cache synchronously on every render to ensure fresh values\n cache.current.layoutUI = layoutUI;\n cache.current.isImmersive = isImmersive;\n cache.current.isHovering = isHovering;\n cache.current.arrowsOccupySpace = arrowsOccupySpace || false;\n cache.current.settings = settingsCache.current.settings;\n cache.current.positionsList = positionsList;\n cache.current.colorScheme = colorScheme;\n cache.current.reducedMotion = reducedMotion;\n\n return cache;\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\n\nimport { IEpubPreferences, TextAlignment } from \"@readium/navigator\";\nimport { ThPreferences } from \"@/preferences\";\nimport { ThLineHeightOptions, ThLayoutUI, ThSettingsKeys } from \"@/preferences/models\";\nimport { FontMetadata } from \"@/preferences/services/fonts\";\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\nimport { ReadiumCSSSettings } from \"@/core/Hooks/Epub/useEpubSettingsCache\";\nimport { useSettingsComponentStatus } from \"@/components/Settings/hooks/useSettingsComponentStatus\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\n\ninterface UseEpubPreferencesConfigProps {\n isFXL: boolean;\n settings: ReadiumCSSSettings;\n colorScheme: ThColorScheme;\n fontLanguage: string;\n arrowsOccupySpace: boolean;\n arrowsWidth: React.RefObject<number>;\n preferences: ThPreferences;\n getFontMetadata: (fontFamily: string) => FontMetadata;\n lineHeightOptions: Record<ThLineHeightOptions, number | null>;\n fxlThemeKeys: string[];\n reflowThemeKeys: string[];\n}\n\nexport const useEpubPreferencesConfig = ({\n isFXL,\n settings,\n colorScheme,\n fontLanguage,\n arrowsOccupySpace,\n arrowsWidth,\n preferences,\n getFontMetadata,\n lineHeightOptions,\n fxlThemeKeys,\n reflowThemeKeys,\n}: UseEpubPreferencesConfigProps) => {\n const scriptMode = useAppSelector(state => state.publication.scriptMode);\n const isVerticalScript = scriptMode === \"cjk-vertical\" || scriptMode === \"mongolian-vertical\";\n\n const { isComponentUsed: isFontFamilyUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.fontFamily,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isFontSizeUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.zoom,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isFontWeightUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.fontWeight,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isColumnsUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.columns,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isLayoutUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.layout,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isHyphensUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.hyphens,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isLigaturesUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.ligatures,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isNoRubyUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.noRuby,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isLetterSpacingUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.letterSpacing,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isLineHeightUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.lineHeight,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isParagraphIndentUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.paragraphIndent,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isParagraphSpacingUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.paragraphSpacing,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isTextAlignUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.textAlign,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isTextNormalizeUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.textNormalize,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const { isComponentUsed: isWordSpacingUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.wordSpacing,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const epubPreferences = useMemo(() => {\n if (isFXL) return {};\n\n const initialConstraint = arrowsOccupySpace ? arrowsWidth.current : 0;\n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const theme = settings.theme && themeKeys.includes(settings.theme) ? settings.theme : \"auto\";\n const themeProps = buildThemeObject<string>({\n theme: theme,\n themeKeys: preferences.theming.themes.keys,\n systemThemes: preferences.theming.themes.systemThemes,\n colorScheme: colorScheme\n });\n\n return {\n columnCount: !isColumnsUsed ? undefined : (settings.columnCount === \"auto\" ? null : Number(settings.columnCount)),\n constraint: initialConstraint,\n fontFamily: isFontFamilyUsed ? getFontMetadata(settings.fontFamily[fontLanguage] ?? \"\")?.fontStack || null : undefined,\n fontSize: isFontSizeUsed ? settings.fontSize : undefined,\n fontWeight: isFontWeightUsed ? settings.fontWeight : undefined,\n hyphens: isHyphensUsed ? settings.hyphens : undefined,\n ligatures: isLigaturesUsed ? settings.ligatures : undefined,\n noRuby: isNoRubyUsed ? settings.noRuby : undefined,\n letterSpacing: (!isLetterSpacingUsed || settings.publisherStyles) ? undefined : settings.letterSpacing,\n lineHeight: (!isLineHeightUsed || settings.publisherStyles)\n ? undefined\n : settings.lineHeight === null\n ? null\n : lineHeightOptions[settings.lineHeight],\n optimalLineLength: settings.lineLength?.optimal != null\n ? settings.lineLength.optimal\n : undefined,\n maximalLineLength: settings.lineLength?.max?.isDisabled\n ? null\n : (settings.lineLength?.max?.chars != null)\n ? settings.lineLength.max.chars\n : undefined,\n minimalLineLength: settings.lineLength?.min?.isDisabled\n ? null\n : (settings.lineLength?.min?.chars != null)\n ? settings.lineLength.min.chars\n : undefined,\n paragraphIndent: (!isParagraphIndentUsed || settings.publisherStyles) ? undefined : settings.paragraphIndent,\n paragraphSpacing: (!isParagraphSpacingUsed || settings.publisherStyles) ? undefined : settings.paragraphSpacing,\n scroll: isVerticalScript ? true : (!isLayoutUsed ? undefined : settings.scroll),\n textAlign: isTextAlignUsed ? settings.textAlign as unknown as TextAlignment | null | undefined : undefined,\n textNormalization: isTextNormalizeUsed ? settings.textNormalization : undefined,\n wordSpacing: (!isWordSpacingUsed || settings.publisherStyles) ? undefined : settings.wordSpacing,\n ...themeProps\n } as IEpubPreferences;\n }, [\n isFXL,\n arrowsOccupySpace,\n arrowsWidth,\n settings,\n colorScheme,\n fontLanguage,\n preferences.theming.themes.keys,\n preferences.theming.themes.systemThemes,\n getFontMetadata,\n lineHeightOptions,\n fxlThemeKeys,\n reflowThemeKeys,\n isVerticalScript,\n isFontFamilyUsed,\n isFontSizeUsed,\n isFontWeightUsed,\n isColumnsUsed,\n isLayoutUsed,\n isHyphensUsed,\n isLigaturesUsed,\n isNoRubyUsed,\n isLetterSpacingUsed,\n isLineHeightUsed,\n isParagraphIndentUsed,\n isParagraphSpacingUsed,\n isTextAlignUsed,\n isTextNormalizeUsed,\n isWordSpacingUsed,\n ]);\n\n const epubDefaults = useMemo(() => {\n if (isFXL) return {};\n\n return {\n maximalLineLength: preferences.typography.maximalLineLength,\n minimalLineLength: preferences.typography.minimalLineLength,\n optimalLineLength: preferences.typography.optimalLineLength,\n pageGutter: preferences.typography.pageGutter,\n scrollPaddingTop: preferences.theming.layout.ui?.reflow === ThLayoutUI.layered \n ? (preferences.theming.icon.size || 24) * 3 \n : (preferences.theming.icon.size || 24),\n scrollPaddingBottom: preferences.theming.layout.ui?.reflow === ThLayoutUI.layered\n ? (preferences.theming.icon.size || 24) * (isVerticalScript ? 3 : 5)\n : (preferences.theming.icon.size || 24),\n scrollPaddingLeft: preferences.typography.pageGutter,\n scrollPaddingRight: preferences.typography.pageGutter,\n experiments: preferences.experiments?.reflow || null\n };\n }, [isFXL, preferences, isVerticalScript]);\n\n return { epubPreferences, epubDefaults };\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\n\nimport { IInjectablesConfig, ILinkInjectable, IBlobInjectable } from \"@readium/navigator\";\nimport { InjectableFontResources } from \"@/preferences/services/fonts\";\n\ninterface UseEpubInjectablesConfigProps {\n isFXL: boolean;\n isFontFamilyUsed: boolean;\n fontLanguage: string;\n getFontInjectables: (options?: { language?: string } | { key?: string }, optimize?: boolean) => InjectableFontResources | null;\n getAndroidFXLPatch: () => (ILinkInjectable & IBlobInjectable) | null;\n}\n\nexport const useEpubInjectablesConfig = ({\n isFXL,\n isFontFamilyUsed,\n fontLanguage,\n getFontInjectables,\n getAndroidFXLPatch,\n}: UseEpubInjectablesConfigProps) => {\n const injectables = useMemo(() => {\n let injectablesConfig: IInjectablesConfig | undefined;\n\n if (isFXL) {\n const androidPatch = getAndroidFXLPatch();\n if (androidPatch) {\n injectablesConfig = {\n allowedDomains: [window.location.origin],\n rules: [{\n resources: [/\\.xhtml$/, /\\.html$/],\n prepend: [androidPatch]\n }]\n };\n }\n }\n\n if (!isFXL && isFontFamilyUsed) {\n const fontResources = getFontInjectables({ language: fontLanguage });\n if (fontResources) {\n injectablesConfig = {\n allowedDomains: fontResources.allowedDomains,\n rules: [{\n resources: [/\\.xhtml$/, /\\.html$/],\n prepend: fontResources.prepend,\n append: fontResources.append\n }]\n };\n }\n }\n\n return injectablesConfig;\n }, [isFXL, isFontFamilyUsed, fontLanguage, getFontInjectables, getAndroidFXLPatch]);\n\n return { injectables };\n};\n","\"use client\";\n\nimport { useCallback, useEffect, useState, useRef } from \"react\";\n\nimport { Locator, Publication } from \"@readium/shared\";\nimport { ThLineHeightOptions } from \"@/preferences/models\";\nimport { EpubNavigatorListeners, IContentProtectionConfig, ILinkInjectable, IBlobInjectable } from \"@readium/navigator\";\nimport { ThPreferences } from \"@/preferences\";\nimport { FontMetadata, InjectableFontResources } from \"@/preferences/services/fonts\";\n\nimport { EPubStatelessCache } from \"./useEpubStatelessCache\";\nimport { useEpubPreferencesConfig } from \"./usePreferencesConfig\";\nimport { useEpubInjectablesConfig } from \"./useInjectablesConfig\";\nimport { useEpubNavigator, EpubNavigatorLoadProps } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\ninterface UseEpubReaderInitProps {\n container: React.RefObject<HTMLDivElement | null>;\n publication: Publication | null;\n positionsList?: Locator[];\n initialPosition: Locator | null;\n listeners: EpubNavigatorListeners;\n preferences: ThPreferences;\n cache: React.RefObject<EPubStatelessCache>;\n isFontFamilyUsed: boolean;\n fontLanguage: string;\n getFontMetadata: (fontId: string) => FontMetadata;\n injectFontResources: (resources: InjectableFontResources | null) => void;\n removeFontResources: () => void;\n getAndroidFXLPatch: () => (ILinkInjectable & IBlobInjectable) | null;\n getFontInjectables: (options?: { language?: string } | { key?: string }, optimize?: boolean) => InjectableFontResources | null;\n fxlThemeKeys: string[];\n reflowThemeKeys: string[];\n lineHeightOptions: Record<ThLineHeightOptions, number | null>;\n arrowsOccupySpace: boolean;\n arrowsWidth: React.RefObject<number>;\n colorScheme: any;\n isFXL: boolean;\n contentProtectionConfig?: IContentProtectionConfig;\n onNavigatorReady?: () => void;\n onNavigatorLoaded?: () => void;\n onCleanup?: () => void;\n fxlProgressionCallback?: (locator: Locator) => void;\n}\n\nexport const useEpubReaderInit = ({\n container,\n publication,\n positionsList,\n initialPosition,\n listeners,\n preferences,\n cache,\n isFontFamilyUsed,\n fontLanguage,\n getFontMetadata,\n injectFontResources,\n removeFontResources,\n getAndroidFXLPatch,\n getFontInjectables,\n fxlThemeKeys,\n reflowThemeKeys,\n lineHeightOptions,\n arrowsOccupySpace,\n arrowsWidth,\n colorScheme,\n isFXL,\n contentProtectionConfig,\n onNavigatorReady,\n onNavigatorLoaded,\n onCleanup,\n fxlProgressionCallback,\n}: UseEpubReaderInitProps) => {\n const [navigatorReady, setNavigatorReady] = useState(false);\n\n const { epubPreferences, epubDefaults } = useEpubPreferencesConfig({\n isFXL,\n settings: cache.current.settings,\n colorScheme,\n fontLanguage,\n arrowsOccupySpace,\n arrowsWidth,\n preferences,\n getFontMetadata,\n lineHeightOptions,\n fxlThemeKeys,\n reflowThemeKeys,\n });\n\n const { injectables } = useEpubInjectablesConfig({\n isFXL,\n isFontFamilyUsed,\n fontLanguage,\n getFontInjectables,\n getAndroidFXLPatch,\n });\n\n const handleCleanup = useCallback(() => {\n if (!isFXL) removeFontResources();\n onCleanup?.();\n }, [isFXL, removeFontResources, onCleanup]);\n\n const { EpubNavigatorLoad, EpubNavigatorDestroy } = useEpubNavigator();\n const isNavigatorLoadedEpub = useRef(false);\n \n useEffect(() => {\n // Only initialize once, never re-render\n if (!publication || isNavigatorLoadedEpub.current) return;\n\n // Add container protection\n if (!container.current) {\n console.error(\"Container ref is not available for navigator initialization\");\n return;\n }\n\n // Initialize navigator for EPUB like WebPub\n const config: EpubNavigatorLoadProps = {\n container: container.current,\n publication,\n listeners,\n positionsList: positionsList?.map(loc => new Locator(loc)) || [],\n initialPosition: initialPosition ? new Locator(initialPosition) : undefined,\n preferences: epubPreferences,\n defaults: epubDefaults,\n injectables: injectables || undefined,\n contentProtection: contentProtectionConfig,\n };\n\n isNavigatorLoadedEpub.current = true;\n \n // Call onNavigatorReady outside of navigator load\n onNavigatorReady?.();\n \n // Pass onNavigatorLoaded as the callback to EpubNavigatorLoad\n EpubNavigatorLoad(config, () => {\n // Set navigatorReady to true only after navigator actually loads\n setNavigatorReady(true);\n onNavigatorLoaded?.();\n }, fxlProgressionCallback);\n\n return () => {\n if (isNavigatorLoadedEpub.current) {\n setNavigatorReady(false);\n EpubNavigatorDestroy(() => {\n isNavigatorLoadedEpub.current = false;\n handleCleanup();\n });\n }\n };\n }, []);\n\n // Handle font resource injection\n useEffect(() => {\n if (!isFXL && isFontFamilyUsed) {\n const fontResources = getFontInjectables({ language: fontLanguage });\n if (fontResources) {\n injectFontResources(fontResources);\n }\n }\n }, [isFXL, isFontFamilyUsed, fontLanguage, injectFontResources, getFontInjectables]);\n\n return {\n navigatorReady,\n isFXL,\n };\n};\n","\"use client\";\n\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\n\nimport {\n ThemeKeyType,\n useFilteredPreferenceKeys\n} from \"../../preferences\";\n\nimport readerStyles from \"../assets/styles/thorium-web.reader.app.module.css\";\nimport arrowStyles from \"../assets/styles/thorium-web.reader.paginatedArrow.module.css\";\n\nimport {\n ThActionsKeys,\n ThLayoutDirection,\n ThLayoutUI,\n ThDocumentTitleFormat,\n ThSpacingSettingsKeys,\n ThProgressionFormat,\n ThSettingsKeys\n} from \"../../preferences/models\";\n\nimport { ThPluginRegistry } from \"../Plugins/PluginRegistry\";\n\nimport { useLocale } from \"react-aria\";\nimport { ThPluginProvider } from \"../Plugins/PluginProvider\";\nimport { NavigatorProvider } from \"@/core/Navigator\";\n\nimport {\n BasicTextSelection,\n ContextMenuEvent,\n FrameClickEvent,\n KeyboardEventData,\n SuspiciousActivityEvent\n} from \"@readium/navigator-html-injectables\";\nimport { \n EpubNavigatorListeners, \n FrameManager, \n FXLFrameManager\n} from \"@readium/navigator\";\nimport { \n Locator, \n Publication, \n Layout\n} from \"@readium/shared\";\n\nimport { StatefulDockingWrapper } from \"../Docking/StatefulDockingWrapper\";\nimport { StatefulReaderHeader } from \"../StatefulReaderHeader\";\nimport { StatefulReaderArrowButton } from \"../StatefulReaderArrowButton\";\nimport { StatefulReaderFooter } from \"../StatefulReaderFooter\";\nimport { PositionStorage, StatefulReaderProps } from \"../Reader/StatefulReaderWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useSettingsComponentStatus } from \"@/components/Settings/hooks/useSettingsComponentStatus\";\nimport { useEpubStatelessCache } from \"./Hooks/useEpubStatelessCache\";\nimport { useEpubReaderInit } from \"./Hooks/useReaderInit\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useFullscreen } from \"@/core/Hooks/useFullscreen\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useI18n } from \"@/i18n/useI18n\";\nimport { useTimeline } from \"@/core/Hooks/useTimeline\";\nimport { useIsScroll, usePositionStorage } from \"@/hooks\";\nimport { useDocumentTitle } from \"@/core/Hooks/useDocumentTitle\";\nimport { useSpacingPresets } from \"../Settings/Spacing/hooks/useSpacingPresets\";\nimport { useLineHeight } from \"../Settings/Spacing/hooks/useLineHeight\";\nimport { usePaginatedArrows } from \"@/hooks/usePaginatedArrows\";\nimport { useFonts } from \"@/core/Hooks/fonts/useFonts\";\n\nimport { toggleActionOpen } from \"@/lib/actionsReducer\";\nimport { useAppSelector, useAppDispatch, useAppStore } from \"@/lib/hooks\";\n\nimport { \n setTheme \n} from \"@/lib/themeReducer\";\nimport { \n setImmersive, \n setLoading,\n setHovering, \n toggleImmersive, \n setPlatformModifier, \n setDirection, \n setFullscreen,\n setScrollAffordance,\n setUserNavigated\n} from \"@/lib/readerReducer\";\nimport { \n setTimeline,\n setPublicationStart,\n setPublicationEnd\n} from \"@/lib/publicationReducer\";\n\nimport classNames from \"classnames\";\nimport debounce from \"debounce\";\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\nimport { createDefaultPlugin } from \"../Plugins/helpers/createDefaultPlugin\";\nimport Peripherals from \"../../helpers/peripherals\";\nimport { getPlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { getReaderClassNames } from \"../Helpers/getReaderClassNames\";\nimport { resolveContentProtectionConfig } from \"@/preferences/models/protection\";\n\n// We need to register plugins before hooks run\n// otherwise we can’t access the values of spacing presets\n// when the component is effectively mounted as we check\n// if the component is registered and displayed from prefs\nexport const StatefulReader = ({\n publication,\n localDataKey,\n plugins,\n positionStorage\n}: StatefulReaderProps) => {\n const [pluginsRegistered, setPluginsRegistered] = useState(false);\n\n useLayoutEffect(() => {\n if (plugins && plugins.length > 0) {\n plugins.forEach(plugin => {\n ThPluginRegistry.register(plugin);\n });\n } else {\n ThPluginRegistry.register(createDefaultPlugin());\n }\n setPluginsRegistered(true);\n }, [plugins]);\n\n if (!pluginsRegistered) {\n return null;\n }\n\n return (\n <>\n <ThPluginProvider>\n <StatefulReaderInner publication={ publication } localDataKey={ localDataKey } positionStorage={ positionStorage } />\n </ThPluginProvider>\n </>\n );\n};\n\nconst StatefulReaderInner = ({ publication, localDataKey, positionStorage }: { publication: Publication; localDataKey: string | null; positionStorage?: PositionStorage }) => {\n const { fxlActionKeys, fxlThemeKeys, reflowActionKeys, reflowThemeKeys } = useFilteredPreferenceKeys();\n const { preferences, getFontMetadata, getFontInjectables } = usePreferences();\n const { direction: uiDirection } = useLocale();\n const { t } = useI18n();\n const { getEffectiveSpacingValue } = useSpacingPresets();\n const { occupySpace: arrowsOccupySpace } = usePaginatedArrows();\n const { injectFontResources, removeFontResources, getAndroidFXLPatch } = useFonts();\n \n const container = useRef<HTMLDivElement>(null);\n const arrowsWidth = useRef(2 * ((preferences.theming.arrow.size || 40) + (preferences.theming.arrow.offset || 0)));\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const fontLanguage = useAppSelector(state => state.publication.fontLanguage);\n\n // Check if font family component is being used\n const { isComponentUsed: isFontFamilyUsed } = useSettingsComponentStatus({\n settingsKey: ThSettingsKeys.fontFamily,\n publicationType: isFXL ? \"fxl\" : \"reflow\",\n });\n\n const textAlign = useAppSelector(state => state.settings.textAlign);\n const columnCount = useAppSelector(state => state.settings.columnCount);\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontSize = useAppSelector(state => state.settings.fontSize);\n const fontWeight = useAppSelector(state => state.settings.fontWeight);\n const hyphens = useAppSelector(state => state.settings.hyphens);\n const ligatures = useAppSelector(state => state.settings.ligatures);\n const noRuby = useAppSelector(state => state.settings.noRuby);\n const letterSpacing = getEffectiveSpacingValue(ThSpacingSettingsKeys.letterSpacing);\n const lineLength = useAppSelector(state => state.settings.lineLength);\n const lineHeight = getEffectiveSpacingValue(ThSpacingSettingsKeys.lineHeight);\n const paragraphIndent = getEffectiveSpacingValue(ThSpacingSettingsKeys.paragraphIndent);\n const paragraphSpacing = getEffectiveSpacingValue(ThSpacingSettingsKeys.paragraphSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const isScroll = useIsScroll();\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const wordSpacing = getEffectiveSpacingValue(ThSpacingSettingsKeys.wordSpacing);\n const themeObject = useAppSelector(state => state.theming.theme);\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n const previousTheme = usePrevious(theme);\n const colorScheme = useAppSelector(state => state.theming.colorScheme);\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n \n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n\n const layoutUI = isFXL \n ? preferences.theming.layout.ui?.fxl || ThLayoutUI.layered \n : isScroll \n ? preferences.theming.layout.ui?.reflow || ThLayoutUI.layered\n : ThLayoutUI.stacked;\n\n const cache = useEpubStatelessCache(\n textAlign,\n columnCount,\n fontFamily,\n fontSize,\n fontWeight,\n hyphens,\n letterSpacing,\n ligatures,\n lineLength,\n lineHeight,\n noRuby,\n paragraphIndent,\n paragraphSpacing,\n publisherStyles,\n isScroll,\n textNormalization,\n wordSpacing,\n theme,\n positionsList,\n colorScheme,\n reducedMotion,\n layoutUI,\n isImmersive,\n isHovering,\n arrowsOccupySpace\n );\n\n const atPublicationStart = useAppSelector(state => state.publication.atPublicationStart);\n const atPublicationEnd = useAppSelector(state => state.publication.atPublicationEnd);\n\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n // Reset top bar visibility and last position\n dispatch(setImmersive(false));\n }, [isScroll, dispatch]);\n\n const onFsChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n const fs = useFullscreen(onFsChange);\n\n const epubNavigator = useEpubNavigator();\n const { \n goLeft, \n goRight, \n goBackward, \n goForward, \n navLayout,\n currentLocator,\n currentPositions,\n canGoBackward,\n canGoForward,\n isScrollStart,\n isScrollEnd,\n getCframes,\n submitPreferences\n } = epubNavigator;\n\n const { setLocalData, getLocalData, localData } = usePositionStorage(localDataKey, positionStorage);\n\n const timeline = useTimeline({\n publication: publication,\n currentLocation: localData,\n currentPositions: currentPositions() || [],\n positionsList: positionsList,\n onChange: (timeline) => {\n dispatch(setTimeline(timeline));\n }\n });\n\n const lineHeightOptions = useLineHeight();\n\n const documentTitleFormat = preferences.metadata?.documentTitle?.format;\n \n let documentTitle: string | undefined;\n \n if (documentTitleFormat) {\n if (typeof documentTitleFormat === \"object\" && \"key\" in documentTitleFormat) {\n const translatedTitle = t(documentTitleFormat.key);\n documentTitle = translatedTitle !== documentTitleFormat.key \n ? translatedTitle \n : documentTitleFormat.fallback;\n } else {\n switch (documentTitleFormat) {\n case ThDocumentTitleFormat.title:\n documentTitle = timeline?.title;\n break;\n case ThDocumentTitleFormat.chapter:\n documentTitle = timeline?.progression?.currentChapter;\n break;\n case ThDocumentTitleFormat.titleAndChapter:\n if (timeline?.title && timeline?.progression?.currentChapter) {\n documentTitle = `${ timeline.title } – ${ timeline.progression.currentChapter }`;\n }\n break;\n case ThDocumentTitleFormat.none:\n documentTitle = undefined;\n break;\n default: \n documentTitle = documentTitleFormat;\n break;\n }\n }\n }\n\n useDocumentTitle(documentTitle);\n\n const activateImmersiveOnAction = useCallback(() => {\n if (!cache.current.isImmersive) dispatch(setImmersive(true));\n }, [cache, dispatch]);\n\n const toggleIsImmersive = useCallback(() => {\n // If tap/click in iframe, then header/footer no longer hovering \n dispatch(setHovering(false));\n dispatch(toggleImmersive());\n }, [dispatch]);\n\n // Warning: this is using navigator’s internal methods that will become private, do not rely on them\n // See https://github.com/edrlab/thorium-web/issues/25\n const handleTap = useCallback((event: FrameClickEvent) => {\n const _cframes = getCframes();\n if (_cframes) {\n if (!cache.current.settings.scroll) {\n const oneQuarter = ((_cframes.length === 2 ? _cframes[0]!.window.innerWidth + _cframes[1]!.window.innerWidth : _cframes![0]!.window.innerWidth) * window.devicePixelRatio) / 4;\n \n const navigationCallback = () => {\n dispatch(setUserNavigated(true));\n activateImmersiveOnAction();\n };\n \n if (event.x < oneQuarter) {\n goLeft(!cache.current.reducedMotion, navigationCallback);\n } \n else if (event.x > oneQuarter * 3) {\n goRight(!cache.current.reducedMotion, navigationCallback);\n } else if (oneQuarter <= event.x && event.x <= oneQuarter * 3) {\n toggleIsImmersive();\n }\n } else {\n if (preferences.affordances.scroll.toggleOnMiddlePointer.includes(\"tap\")) {\n toggleIsImmersive();\n }\n }\n }\n }, [getCframes, cache, preferences.affordances.scroll, goLeft, goRight, dispatch, activateImmersiveOnAction, toggleIsImmersive]);\n\n const handleClick = useCallback((event: FrameClickEvent) => {\n if (\n cache.current.layoutUI === ThLayoutUI.layered &&\n ( !cache.current.settings.scroll ||\n preferences.affordances.scroll.toggleOnMiddlePointer.includes(\"click\") )\n ) {\n toggleIsImmersive();\n }\n }, [cache, preferences.affordances.scroll, toggleIsImmersive]);\n\n // We could use canGoBackward() and canGoForward() directly on arrows\n // but maybe we will need to sync the state for other features in the future\n const updatePublicationNavigationState = useCallback(() => {\n if (canGoBackward()) {\n dispatch(setPublicationStart(false));\n } else {\n dispatch(setPublicationStart(true));\n }\n \n if (canGoForward()) {\n dispatch(setPublicationEnd(false));\n } else {\n dispatch(setPublicationEnd(true));\n }\n }, [canGoBackward, canGoForward, dispatch]);\n\n // We need this as a workaround due to positionChanged being unreliable\n // in FXL – if the frame is in the pool hidden and is shown again,\n // positionChanged won’t fire.\n const handleFXLProgression = useCallback((locator: Locator) => {\n setLocalData(locator);\n updatePublicationNavigationState();\n }, [setLocalData, updatePublicationNavigationState]);\n\n const initReadingEnv = useCallback(async () => {\n if (navLayout() === Layout.fixed) {\n // [TMP] Working around positionChanged not firing consistently for FXL\n // Init'ing so that progression can be populated on first spread loaded\n const cLoc = currentLocator();\n if (cLoc) {\n handleFXLProgression(cLoc);\n };\n }\n }, [navLayout, currentLocator, handleFXLProgression]);\n\n const appStore = useAppStore();\n\n const p = useMemo(() => new Peripherals(appStore, preferences.actions, {\n moveTo: (direction) => {\n const navigationCallback = () => {\n dispatch(setUserNavigated(true));\n activateImmersiveOnAction();\n };\n\n switch(direction) {\n case \"right\":\n if (!cache.current.settings.scroll) {\n goRight(!cache.current.reducedMotion, navigationCallback);\n }\n break;\n case \"left\":\n if (!cache.current.settings.scroll) {\n goLeft(!cache.current.reducedMotion, navigationCallback);\n }\n break;\n case \"up\":\n case \"home\":\n // Home should probably go to first column/page of chapter in reflow?\n break;\n case \"down\":\n case \"end\":\n // End should probably go to last column/page of chapter in reflow?\n break;\n default:\n break;\n }\n },\n goProgression: (shiftKey) => {\n if (!cache.current.settings?.scroll) {\n const callback = () => {\n dispatch(setUserNavigated(true));\n activateImmersiveOnAction();\n };\n shiftKey \n ? goBackward(!cache.current.reducedMotion, callback)\n : goForward(!cache.current.reducedMotion, callback);\n }\n },\n toggleAction: (actionKey) => {\n switch (actionKey) {\n case ThActionsKeys.fullscreen:\n fs.handleFullscreen();\n break;\n case ThActionsKeys.settings:\n case ThActionsKeys.toc:\n dispatch(toggleActionOpen({\n key: actionKey,\n profile: \"epub\"\n }))\n break;\n // case ThActionsKeys.jumpToPosition:\n default:\n break\n }\n }\n }), [appStore, preferences.actions, dispatch, activateImmersiveOnAction, cache, goRight, goLeft, goBackward, goForward, fs]);\n\n const listeners: EpubNavigatorListeners = useMemo(() => ({\n frameLoaded: async function (_wnd: Window): Promise<void> {\n await initReadingEnv();\n // Warning: this is using navigator's internal methods that will become private, do not rely on them\n // See https://github.com/edrlab/thorium-web/issues/25\n const _cframes = getCframes();\n _cframes?.forEach(\n (frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) p.observe(frameManager.window);\n }\n );\n p.observe(window);\n },\n positionChanged: async function (locator: Locator): Promise<void> {\n if (navLayout() !== Layout.fixed) {\n const debouncedHandleProgression = debounce(\n async () => {\n setLocalData(locator);\n updatePublicationNavigationState();\n }, 250);\n debouncedHandleProgression();\n }\n },\n tap: function (_e: FrameClickEvent): boolean {\n handleTap(_e);\n return true;\n },\n click: function (_e: FrameClickEvent): boolean {\n handleClick(_e);\n return true;\n },\n zoom: function (_scale: number): void {},\n miscPointer: function (_amount: number): void {},\n scroll: function (_delta: number): void {\n if (\n cache.current.settings.scroll && \n navLayout() !== Layout.fixed\n ) { \n if (isScrollStart() || isScrollEnd()) {\n if (\n // Keep consistent with pagination behavior\n cache.current.layoutUI === ThLayoutUI.layered\n ) {\n dispatch(setScrollAffordance(true));\n }\n } else if (!cache.current.isImmersive && _delta > 20) {\n if (preferences.affordances.scroll.hideOnForwardScroll) {\n dispatch(setImmersive(true));\n }\n } else if (cache.current.isImmersive && _delta < -20) {\n if (\n // Keep consistent with pagination behavior\n cache.current.layoutUI === ThLayoutUI.layered && \n preferences.affordances.scroll.showOnBackwardScroll\n ) {\n dispatch(setImmersive(false));\n }\n }\n }\n },\n customEvent: function (_key: string, _data: unknown): void {},\n handleLocator: function (locator: Locator): boolean {\n const href = locator.href;\n\n if (\n href.startsWith(\"http://\") ||\n href.startsWith(\"https://\") ||\n href.startsWith(\"mailto:\") ||\n href.startsWith(\"tel:\")\n ) {\n if (confirm(`Open \"${href}\" ?`)) window.open(href, \"_blank\");\n } else {\n console.warn(\"Unhandled locator\", locator);\n }\n return false;\n },\n textSelected: function (_selection: BasicTextSelection): void {},\n contentProtection: function (_type: string, _data: SuspiciousActivityEvent): void {},\n contextMenu: function (_data: ContextMenuEvent): void {},\n peripheral: function (_data: KeyboardEventData): void {},\n }), [p, initReadingEnv, getCframes, navLayout, setLocalData, dispatch, handleTap, handleClick, cache, preferences.affordances.scroll, isScrollStart, isScrollEnd, updatePublicationNavigationState]);\n \n const initialPosition = useMemo(() => getLocalData(), [getLocalData]);\n\n // Initialize reader using the new composite hook\n const { navigatorReady } = useEpubReaderInit({\n container,\n publication,\n positionsList,\n initialPosition,\n listeners,\n preferences,\n cache,\n isFontFamilyUsed,\n fontLanguage,\n getFontMetadata,\n injectFontResources,\n removeFontResources,\n getAndroidFXLPatch,\n getFontInjectables,\n fxlThemeKeys,\n reflowThemeKeys,\n lineHeightOptions,\n arrowsOccupySpace,\n arrowsWidth,\n colorScheme,\n isFXL,\n contentProtectionConfig: resolveContentProtectionConfig(preferences.contentProtection, t),\n onNavigatorReady: () => {\n dispatch(setLoading(false));\n },\n onNavigatorLoaded: () => {\n p.observe(window);\n },\n onCleanup: () => {\n p.destroy();\n },\n fxlProgressionCallback: handleFXLProgression\n });\n\n const applyConstraint = useCallback(async (value: number) => {\n await submitPreferences({\n constraint: value\n })\n }, [submitPreferences]);\n\n useLayoutEffect(() => {\n if (!navigatorReady) return;\n\n applyConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n .catch(console.error);\n }, [arrowsOccupySpace, applyConstraint, navigatorReady]);\n\n // Theme can also change on colorScheme change so\n // we have to handle this side-effect but we can’t\n // from the ReadingDisplayTheme component since it\n // would have to be mounted for this to work\n useLayoutEffect(() => {\n if (!navigatorReady) return;\n\n if (cache.current.colorScheme !== colorScheme) {\n cache.current.colorScheme = colorScheme;\n }\n\n const theme = isFXL ? (themeObject.fxl ?? \"auto\") : (themeObject.reflow ?? \"auto\");\n\n // Protecting against re-applying on theme change\n if (theme !== \"auto\" && previousTheme !== theme) return;\n\n const applyCurrentTheme = async () => {\n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const themeKey = themeKeys.includes(theme as any) ? theme : \"auto\";\n const themeProps = buildThemeObject<ThemeKeyType>({\n theme: themeKey,\n themeKeys: preferences.theming.themes.keys,\n systemThemes: preferences.theming.themes.systemThemes,\n colorScheme\n });\n await submitPreferences(themeProps);\n dispatch(setTheme({ \n key: isFXL ? \"fxl\" : \"reflow\", \n value: themeKey \n }));\n };\n\n applyCurrentTheme()\n .catch(console.error);\n }, [cache, themeObject, previousTheme, preferences.theming.themes, fxlThemeKeys, reflowThemeKeys, colorScheme, isFXL, submitPreferences, dispatch, navigatorReady]);\n\n useLayoutEffect(() => {\n dispatch(setDirection(uiDirection as ThLayoutDirection));\n dispatch(setPlatformModifier(getPlatformModifier()));\n }, [uiDirection, dispatch]);\n\n return (\n <>\n <NavigatorProvider visualNavigator={ epubNavigator }>\n <main className={ readerStyles.main }>\n <StatefulDockingWrapper>\n <div \n className={ \n getReaderClassNames({\n isScroll,\n isImmersive,\n isHovering,\n isFXL,\n layoutUI,\n breakpoint\n })\n }\n >\n <StatefulReaderHeader \n actionKeys={ isFXL ? fxlActionKeys : reflowActionKeys }\n actionsOrder={ isFXL ? preferences.actions.fxlOrder : preferences.actions.reflowOrder }\n layout={ layoutUI }\n runningHeadFormatPref={\n isFXL \n ? preferences.theming.header?.runningHead?.format?.fxl \n : preferences.theming.header?.runningHead?.format?.reflow\n } \n />\n\n { !isScroll \n ? <nav className={ classNames(arrowStyles.container, arrowStyles.leftContainer) }>\n <StatefulReaderArrowButton \n direction=\"left\" \n isDisabled={ isRTL ? atPublicationEnd : atPublicationStart } \n onPress={ () => {\n const navigationCallback = () => {\n dispatch(setUserNavigated(true));\n activateImmersiveOnAction();\n };\n goLeft(!reducedMotion, navigationCallback);\n }}\n />\n </nav> \n : <></> }\n\n <article className={ readerStyles.wrapper } aria-label={ t(\"reader.app.publicationWrapper\") }>\n <div id=\"thorium-web-container\" className={ readerStyles.iframeContainer } ref={ container }></div>\n </article>\n\n { !isScroll \n ? <nav className={ classNames(arrowStyles.container, arrowStyles.rightContainer) }>\n <StatefulReaderArrowButton \n direction=\"right\" \n isDisabled={ isRTL ? atPublicationStart : atPublicationEnd } \n onPress={ () => {\n const navigationCallback = () => {\n dispatch(setUserNavigated(true));\n activateImmersiveOnAction();\n };\n goRight(!reducedMotion, navigationCallback);\n }}\n />\n </nav> \n : <></> }\n\n <StatefulReaderFooter \n layout={ layoutUI } \n progressionFormatPref={\n isFXL \n ? preferences.theming.progression?.format?.fxl \n : preferences.theming.progression?.format?.reflow\n }\n progressionFormatFallback={\n isFXL \n ? ThProgressionFormat.readingOrderIndex\n : ThProgressionFormat.resourceProgression\n }\n />\n </div>\n </StatefulDockingWrapper>\n </main>\n </NavigatorProvider>\n </>\n)};"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/readerReducer.ts","../src/lib/settingsReducer.ts","../src/lib/themeReducer.ts","../src/lib/actionsReducer.ts","../src/lib/publicationReducer.ts","../src/lib/helpers/mapPreferences.ts","../src/lib/preferencesReducer.ts","../src/lib/globalPreferencesReducer.ts","../src/lib/webPubSettingsReducer.ts","../src/lib/audioSettingsReducer.ts","../src/lib/playerReducer.ts","../node_modules/.pnpm/debounce@3.0.0/node_modules/debounce/index.js","../src/lib/store.ts","../src/lib/ThStoreProvider.tsx","../src/lib/ThReduxPreferencesAdapter.ts","../src/lib/ThReduxGlobalPreferencesAdapter.ts"],"names":["initialState","createSlice"],"mappings":"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","file":"chunk-WLVE3WNW.mjs","sourcesContent":["import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { defaultPlatformModifier, UnstablePlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { ThSettingsContainerKeys, ThLayoutDirection } from \"@/preferences/models\";\n\n// Export the profile type for use in other components\nexport type ReaderProfile = \"epub\" | \"webPub\" | \"audio\" | undefined;\n\nexport interface ReaderReducerState {\n profile: ReaderProfile;\n direction: ThLayoutDirection;\n isLoading: boolean;\n isImmersive: boolean;\n isHovering: boolean;\n hasScrollAffordance: boolean;\n hasArrows: boolean;\n hasUserNavigated: boolean;\n isFullscreen: boolean;\n settingsContainer: ThSettingsContainerKeys;\n platformModifier: UnstablePlatformModifier;\n}\n\nconst initialState: ReaderReducerState = {\n profile: undefined,\n direction: ThLayoutDirection.ltr,\n isLoading: true,\n isImmersive: false,\n isHovering: false,\n hasScrollAffordance: false,\n hasArrows: true,\n hasUserNavigated: false,\n isFullscreen: false,\n settingsContainer: ThSettingsContainerKeys.initial,\n platformModifier: defaultPlatformModifier\n}\n\nexport const readerSlice = createSlice({\n name: \"reader\",\n initialState,\n reducers: {\n setReaderProfile: (state, action) => {\n state.profile = action.payload\n },\n setDirection: (state, action) => {\n state.direction = action.payload\n },\n setLoading: (state, action) => {\n state.isLoading = action.payload\n },\n setPlatformModifier: (state, action) => {\n state.platformModifier = action.payload\n },\n setImmersive: (state, action) => {\n state.isImmersive = action.payload\n if (action.payload === true) {\n state.isHovering = false;\n state.hasScrollAffordance = false;\n }\n },\n toggleImmersive: (state) => {\n state.isImmersive = !state.isImmersive;\n if (state.isImmersive === true) {\n state.isHovering = false;\n state.hasScrollAffordance = false;\n }\n },\n setHovering: (state, action) => {\n state.isHovering = action.payload\n },\n setScrollAffordance: (state, action) => {\n state.hasScrollAffordance = action.payload\n if (action.payload === true) {\n state.isHovering = false;\n state.isImmersive = false;\n }\n },\n setHasArrows: (state, action) => {\n state.hasArrows = action.payload\n },\n setUserNavigated: (state, action) => {\n state.hasUserNavigated = action.payload;\n },\n setFullscreen: (state, action) => {\n state.isFullscreen = action.payload\n },\n setSettingsContainer: (state, action) => {\n state.settingsContainer = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setReaderProfile, \n setDirection, \n setLoading,\n setPlatformModifier, \n setImmersive, \n toggleImmersive, \n setHovering,\n setScrollAffordance,\n setHasArrows, \n setUserNavigated,\n setFullscreen,\n setSettingsContainer\n} = readerSlice.actions;\n\nexport default readerSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { \n ThLineHeightOptions, \n ThSpacingPresetKeys, \n ThSpacingSettingsKeys, \n ThTextAlignOptions \n} from \"@/preferences/models\";\n\nexport interface FontFamilyStateObject {\n default: string;\n [language: string]: string;\n}\n\nexport interface SetFontFamilyPayload {\n type: string;\n payload: {\n key: \"default\" | string;\n value: string;\n }\n}\n\nexport interface LineLengthStateObject {\n optimal?: number | null;\n min?: {\n chars?: number | null;\n isDisabled?: boolean;\n },\n max?: {\n chars?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SetLineLengthPayload {\n type: string;\n payload: {\n key: \"optimal\" | \"min\" | \"max\";\n value?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SetSpacingSettingPayload<T = number | ThLineHeightOptions | null> {\n type: string;\n payload: {\n value: T;\n preset?: ThSpacingPresetKeys;\n }\n}\n\nexport interface SetSpacingPresetPayload {\n type: string;\n payload: {\n preset: ThSpacingPresetKeys;\n values: Partial<Record<SpacingStateKey, number | ThLineHeightOptions | null>>;\n }\n}\n\nexport type SpacingStateKey = Exclude<ThSpacingSettingsKeys, ThSpacingSettingsKeys.spacingPresets | ThSpacingSettingsKeys.publisherStyles>;\n\nexport interface SpacingStateObject {\n preset: ThSpacingPresetKeys;\n custom: Partial<Record<SpacingStateKey, number | ThLineHeightOptions | null>>;\n baseline: Partial<Record<SpacingStateKey, number | ThLineHeightOptions | null>>;\n}\n\nexport interface SettingsReducerState {\n columnCount: string;\n fontFamily: FontFamilyStateObject;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n ligatures: boolean | null;\n lineHeight: ThLineHeightOptions | null;\n lineLength: LineLengthStateObject | null;\n noRuby: boolean | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n spacing: SpacingStateObject;\n textAlign: ThTextAlignOptions;\n textNormalization: boolean;\n wordSpacing: number | null;\n}\n\nconst initialState: SettingsReducerState = {\n columnCount: \"auto\",\n fontFamily: { default: \"publisher\" },\n fontSize: 1,\n fontWeight: 400,\n hyphens: null,\n letterSpacing: null,\n ligatures: null,\n lineHeight: ThLineHeightOptions.publisher,\n lineLength: null,\n noRuby: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n publisherStyles: true,\n scroll: false,\n spacing: {\n preset: ThSpacingPresetKeys.publisher,\n custom: {},\n baseline: {}\n },\n textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\n}\n\nconst checkRootSpacingSettingsAtInit = (state: SettingsReducerState) => {\n return (\n state.letterSpacing === null &&\n state.lineHeight === ThLineHeightOptions.publisher &&\n state.paragraphIndent === null &&\n state.paragraphSpacing === null &&\n state.wordSpacing === null\n );\n}\n\nexport const handleSpacingSetting = (state: any, action: SetSpacingSettingPayload, settingKey: ThSpacingSettingsKeys) => {\n const { value, preset } = action.payload;\n\n state.publisherStyles = false;\n\n if (!preset) {\n state[settingKey] = value;\n\n if (checkRootSpacingSettingsAtInit(state)) {\n state.publisherStyles = true;\n }\n\n return;\n }\n\n // Initialize spacing state if needed\n if (!state.spacing) {\n state.spacing = {\n preset: ThSpacingPresetKeys.custom,\n custom: {\n [settingKey]: value\n }\n };\n }\n\n // Ensure custom exist for backward compatibility\n if (!state.spacing.custom) {\n state.spacing.custom = {};\n }\n\n if (state.spacing.preset !== ThSpacingPresetKeys.custom) {\n state.spacing.preset = ThSpacingPresetKeys.custom;\n state.spacing.custom = state.spacing.baseline;\n } \n\n if (value === null) {\n delete state.spacing.custom[settingKey];\n } else {\n state.spacing.custom[settingKey] = value;\n }\n};\n\nexport const settingsSlice = createSlice({\n name: \"settings\",\n initialState,\n reducers: {\n setColumnCount: (state, action) => {\n state.columnCount = action.payload\n },\n setFontFamily: (state, action: SetFontFamilyPayload) => {\n const { key, value } = action.payload;\n state.fontFamily[key] = value;\n },\n setFontSize: (state, action) => {\n state.fontSize = action.payload\n },\n setFontWeight: (state, action) => {\n state.fontWeight = action.payload\n },\n setHyphens: (state, action) => {\n state.hyphens = action.payload\n },\n setLigatures: (state, action) => {\n state.ligatures = action.payload\n },\n setLetterSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.letterSpacing);\n },\n setLineHeight: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.lineHeight);\n },\n setLineLength: (state, action: SetLineLengthPayload) => {\n // For min and max, we need to spread and handle isDisabled\n // when it is directly set, or depending on the payload value\n const deriveIsDisabled = (value: number | null | undefined, isDisabled?: boolean): boolean => {\n if (value === null) return true;\n if (isDisabled !== undefined) return isDisabled;\n return false;\n };\n\n switch (action.payload.key) {\n case \"optimal\":\n if (action.payload.value) {\n state.lineLength = {\n ...state.lineLength,\n optimal: action.payload.value\n };\n }\n break;\n \n case \"min\":\n state.lineLength = {\n ...state.lineLength,\n min: {\n ...state.lineLength?.min,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength?.min?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n \n case \"max\":\n state.lineLength = {\n ...state.lineLength,\n max: {\n ...state.lineLength?.max,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength?.max?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n default:\n break;\n }\n },\n setParagraphIndent: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphIndent);\n },\n setParagraphSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphSpacing);\n },\n setPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setScroll: (state, action) => {\n state.scroll = action.payload\n },\n setSpacingPreset: (state, action: SetSpacingPresetPayload) => {\n const { preset, values } = action.payload;\n\n // Initialize spacing state if needed\n if (!state.spacing) {\n state.spacing = {\n preset: preset,\n custom: {},\n baseline: {}\n };\n }\n\n state.spacing.preset = preset;\n\n if (preset !== ThSpacingPresetKeys.custom) {\n state.spacing.baseline = values;\n }\n\n if (preset === ThSpacingPresetKeys.publisher) {\n state.publisherStyles = true;\n } else {\n state.publisherStyles = false;\n }\n },\n setTextAlign: (state, action) => {\n state.textAlign = action.payload\n },\n setTextNormalization: (state, action) => {\n state.textNormalization = action.payload\n },\n setNoRuby: (state, action) => {\n state.noRuby = action.payload\n },\n setWordSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.wordSpacing);\n }\n }\n});\n\nexport const initialSettingsState = initialState;\n\n// Action creators are generated for each case reducer function\nexport const { \n setColumnCount,\n setFontSize,\n setFontWeight, \n setFontFamily,\n setHyphens,\n setLigatures,\n setLetterSpacing,\n setLineHeight,\n setLineLength,\n setParagraphIndent,\n setParagraphSpacing,\n setPublisherStyles,\n setScroll,\n setSpacingPreset,\n setTextAlign,\n setTextNormalization,\n setNoRuby,\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\";\nimport { ThemeTokens } from \"@/preferences/hooks/useTheming\";\n\nexport interface ThemeStateObject {\n reflow?: string;\n fxl?: string;\n audio?: string;\n}\n\nexport interface ThemeStateChangePayload {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\" | \"audio\";\n value?: string;\n }\n}\n\nexport interface ThemeReducerState {\n monochrome: boolean;\n colorScheme: ThColorScheme;\n theme: ThemeStateObject;\n coverTheme?: ThemeTokens;\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 audio: \"auto\"\n },\n coverTheme: undefined,\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 setCoverTheme: (state, action) => {\n state.coverTheme = 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 setCoverTheme,\n setReducedMotion, \n setReducedTransparency, \n setContrast, \n setForcedColors, \n setBreakpoint,\n} = themeSlice.actions;\n\nexport default themeSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThDockingKeys } from \"../preferences/models\";\n\nexport type ActionsStateKeys = string;\nexport type OverflowStateKeys = string; \n\nexport interface ActionStateObject {\n isOpen?: boolean | null;\n docking?: ThDockingKeys | null;\n dockedWidth?: number;\n}\n\nexport interface OverflowStateObject {\n isOpen: boolean;\n}\n\nexport interface DockStateObject {\n actionKey: ActionsStateKeys | null;\n active: boolean;\n collapsed: boolean;\n width?: number;\n}\n\nexport interface ActionStateDockPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n dockingKey: ThDockingKeys;\n profile: string;\n }\n}\n\nexport interface ActionStateOpenPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n isOpen: boolean;\n profile: string;\n }\n}\n\nexport interface ActionStateTogglePayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n profile: string;\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 ActionStateSlotPayloadWithProfile {\n type: string;\n payload: {\n slot: ThDockingKeys.start | ThDockingKeys.end;\n profile: string;\n };\n}\n\nexport interface ActionStateSlotWidthPayload {\n type: string;\n payload: { \n key: ThDockingKeys.start | ThDockingKeys.end;\n width: number;\n profile: string;\n }\n}\n\nexport interface DockState {\n [profile: string]: {\n [ThDockingKeys.start]: DockStateObject;\n [ThDockingKeys.end]: DockStateObject;\n }\n}\n\nexport interface ActionKeysState {\n [profile: string]: {\n [key in ActionsStateKeys]?: ActionStateObject;\n };\n}\n\nexport type ActionsReducerState = {\n keys: ActionKeysState;\n dock: DockState,\n overflow: {\n [key in OverflowStateKeys]?: OverflowStateObject;\n }\n}\n\nconst initialState: ActionsReducerState = {\n dock: {\n epub: {\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 webPub: {\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 audio: {\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 },\n keys: {\n epub: {},\n webPub: {},\n audio: {}\n },\n overflow: {}\n}\n\nconst initializeProfileDock = (state: ActionsReducerState, profile: string) => {\n if (!state.dock[profile]) {\n state.dock[profile] = {\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 }\n};\n\nconst initializeProfileKeys = (state: ActionsReducerState, profile: string) => {\n if (!state.keys[profile]) {\n state.keys[profile] = {};\n }\n};\n\nexport const actionsSlice = createSlice({\n name: \"actions\",\n initialState,\n reducers: {\n dockAction: (state, action: ActionStateDockPayload) => {\n const { key, dockingKey, profile } = action.payload;\n \n // Initialize dock and keys state for profile if they don't exist\n initializeProfileDock(state, profile);\n initializeProfileKeys(state, profile);\n \n const profileDock = state.dock[profile];\n const profileKeys = state.keys[profile];\n \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(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 k in profileKeys) {\n if (profileKeys[k as ActionsStateKeys]?.docking === dockingKey) {\n profileKeys[k as ActionsStateKeys] = { \n ...profileKeys[k as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n profileDock[ThDockingKeys.start] = {\n ...profileDock[ThDockingKeys.start],\n actionKey: key\n }\n // And remove it from the other one\n if (profileDock[ThDockingKeys.end].actionKey === key) {\n profileDock[ThDockingKeys.end] = {\n ...profileDock[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 k in profileKeys) {\n if (profileKeys[k as ActionsStateKeys]?.docking === dockingKey) {\n profileKeys[k as ActionsStateKeys] = { \n ...profileKeys[k as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n profileDock[ThDockingKeys.end] = {\n ...profileDock[ThDockingKeys.end],\n actionKey: key\n }\n // And remove it from the other one\n if (profileDock[ThDockingKeys.start].actionKey === key) {\n profileDock[ThDockingKeys.start] = {\n ...profileDock[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 (profileDock[ThDockingKeys.start].actionKey === key) {\n profileDock[ThDockingKeys.start] = {\n ...profileDock[ThDockingKeys.start],\n actionKey: null\n }\n }\n if (profileDock[ThDockingKeys.end].actionKey === key) {\n profileDock[ThDockingKeys.end] = {\n ...profileDock[ThDockingKeys.end],\n actionKey: null\n }\n } \n break;\n }\n\n profileKeys[key] = { \n ...profileKeys[key],\n docking: dockingKey \n };\n },\n setActionOpen: (state, action: ActionStateOpenPayload) => { \n const { key, isOpen, profile } = action.payload;\n \n initializeProfileKeys(state, profile);\n \n state.keys[profile][key] = {\n ...state.keys[profile][key],\n isOpen \n };\n },\n toggleActionOpen: (state, action: ActionStateTogglePayload) => {\n const { key, profile } = action.payload;\n \n initializeProfileKeys(state, profile);\n \n const payload = {\n key,\n isOpen: state.keys[profile][key]?.isOpen ? !state.keys[profile][key]?.isOpen : true,\n profile\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: ActionStateSlotPayloadWithProfile) => {\n const { slot, profile } = action.payload;\n initializeProfileDock(state, profile);\n state.dock[profile][slot] = {\n ...state.dock[profile][slot],\n active: true\n }\n },\n deactivateDockPanel: (state, action: ActionStateSlotPayloadWithProfile) => {\n const { slot, profile } = action.payload;\n initializeProfileDock(state, profile);\n state.dock[profile][slot] = {\n ...state.dock[profile][slot],\n active: false\n }\n },\n collapseDockPanel: (state, action: ActionStateSlotPayloadWithProfile) => {\n const { slot, profile } = action.payload;\n initializeProfileDock(state, profile);\n state.dock[profile][slot] = {\n ...state.dock[profile][slot],\n collapsed: true\n }\n },\n expandDockPanel: (state, action: ActionStateSlotPayloadWithProfile) => {\n const { slot, profile } = action.payload;\n initializeProfileDock(state, profile);\n state.dock[profile][slot] = {\n ...state.dock[profile][slot],\n collapsed: false\n }\n },\n setDockPanelWidth: (state, action: ActionStateSlotWidthPayload) => {\n const { key, width, profile } = action.payload;\n \n initializeProfileDock(state, profile);\n initializeProfileKeys(state, profile);\n \n // Copy the value in the action state \n // in case we do something with it later.\n\n const dockKey: ActionsStateKeys | null = state.dock[profile][key].actionKey;\n if (dockKey) {\n state.keys[profile][dockKey] = {\n ...state.keys[profile][dockKey],\n dockedWidth: width\n }\n }\n\n // We only care if it's populated.\n state.dock[profile][key] = {\n ...state.dock[profile][key],\n width: width\n }\n }\n }\n})\n\nexport const { \n dockAction, \n setActionOpen, \n toggleActionOpen, \n setOverflow, \n activateDockPanel, \n deactivateDockPanel, \n collapseDockPanel,\n expandDockPanel, \n setDockPanelWidth\n} = actionsSlice.actions;\n\nexport default actionsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { Locator } from \"@readium/shared\";\nimport { ScriptMode } from \"@readium/navigator\";\nimport { UnstableTimeline } from \"@/core/Hooks/useTimeline\";\nimport { TocItem, toEntryRef } from \"@/helpers/buildTocTree\";\n\nexport interface AdjacentTimelineItem {\n title: string;\n href: string;\n}\n\nexport interface PublicationReducerState {\n fontLanguage: string;\n isFXL: boolean;\n isRTL: boolean;\n scriptMode: ScriptMode;\n hasDisplayTransformability: boolean;\n positionsList: Locator[],\n atPublicationStart: boolean;\n atPublicationEnd: boolean;\n unstableTimeline?: UnstableTimeline;\n adjacentTimelineItems: {\n previous: AdjacentTimelineItem | null;\n next: AdjacentTimelineItem | null;\n };\n}\n\nconst initialState: PublicationReducerState = {\n fontLanguage: \"default\",\n isFXL: false,\n isRTL: false,\n scriptMode: \"ltr\",\n hasDisplayTransformability: false,\n positionsList: [],\n atPublicationStart: false,\n atPublicationEnd: false,\n unstableTimeline: undefined,\n adjacentTimelineItems: { previous: null, next: null }\n}\n\nexport const publicationSlice = createSlice({\n name: \"publication\",\n initialState,\n reducers: {\n setFontLanguage: (state, action) => {\n state.fontLanguage = action.payload\n },\n setFXL: (state, action) => {\n state.isFXL = action.payload\n },\n setRTL: (state, action) => {\n state.isRTL = action.payload\n },\n setScriptMode: (state, action) => {\n state.scriptMode = action.payload\n },\n setHasDisplayTransformability: (state, action) => {\n state.hasDisplayTransformability = action.payload\n },\n setPositionsList: (state, action) => {\n state.positionsList = action.payload\n },\n setPublicationStart: (state, action) => {\n state.atPublicationStart = action.payload\n },\n setPublicationEnd: (state, action) => {\n state.atPublicationEnd = action.payload\n },\n setTimeline: (state, action) => {\n state.unstableTimeline = {\n ...action.payload,\n toc: action.payload.toc || { tree: undefined, currentEntry: undefined }\n };\n },\n setTocTree: (state, action) => {\n if (!state.unstableTimeline) {\n state.unstableTimeline = {\n toc: { tree: action.payload, currentEntry: undefined }\n };\n } else if (state.unstableTimeline.toc) {\n state.unstableTimeline.toc.tree = action.payload;\n } else {\n state.unstableTimeline.toc = { tree: action.payload, currentEntry: undefined };\n }\n },\n setAdjacentTimelineItems: (state, action: { payload: { previous: AdjacentTimelineItem | null; next: AdjacentTimelineItem | null } }) => {\n state.adjacentTimelineItems = action.payload;\n },\n setTocEntry: (state, action: { payload: TocItem | null }) => {\n const entry = action.payload ? toEntryRef(action.payload) : null;\n if (!state.unstableTimeline) {\n state.unstableTimeline = {\n toc: { tree: undefined, currentEntry: entry }\n };\n } else if (state.unstableTimeline.toc) {\n state.unstableTimeline.toc.currentEntry = entry;\n } else {\n state.unstableTimeline.toc = { tree: undefined, currentEntry: entry };\n }\n }\n }\n});\n\n// Action creators are generated for each case reducer function\nexport const {\n setFontLanguage,\n setFXL,\n setRTL,\n setScriptMode,\n setHasDisplayTransformability,\n setPositionsList,\n setPublicationStart,\n setPublicationEnd,\n setTimeline,\n setTocTree,\n setTocEntry,\n setAdjacentTimelineItems,\n} = publicationSlice.actions;\n\nexport default publicationSlice.reducer;","import { PreferencesReducerState } from \"../preferencesReducer\";\nimport { ThPreferences, CustomizableKeys } from \"@/preferences/preferences\";\nimport { ThProgressionFormat, ThRunningHeadFormat, ThBreakpoints, ThPaginatedAffordancePrefValue } from \"@/preferences/models\";\n\nconst mapRenditionFormat = <T>(\n format: { default?: { variants: T }, breakpoints?: { [key in ThBreakpoints]?: { variants: T } } } | undefined\n) => {\n const result: {\n default?: T;\n breakpoints?: { [key in ThBreakpoints]?: T };\n } = {};\n\n if (format?.default?.variants !== undefined) {\n result.default = format.default.variants;\n }\n\n if (format?.breakpoints) {\n result.breakpoints = Object.entries(format.breakpoints).reduce((acc, [bp, value]) => {\n if (value?.variants !== undefined) {\n acc[bp as ThBreakpoints] = value.variants;\n }\n return acc;\n }, {} as { [key in ThBreakpoints]?: T });\n }\n\n return result;\n};\n\nconst mapPaginatedAffordance = (\n format: { default?: ThPaginatedAffordancePrefValue, breakpoints?: { [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue } } | undefined\n) => {\n const result: {\n default?: ThPaginatedAffordancePrefValue;\n breakpoints?: { [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue };\n } = {};\n\n if (format?.default) {\n result.default = format.default;\n }\n\n if (format?.breakpoints) {\n result.breakpoints = Object.entries(format.breakpoints).reduce((acc, [bp, value]) => {\n if (value) {\n acc[bp as ThBreakpoints] = value;\n }\n return acc;\n }, {} as { [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue });\n }\n\n return result;\n};\n\nexport const mapPreferencesToState = <T extends CustomizableKeys>(prefs: ThPreferences<T>): PreferencesReducerState => {\n return {\n progressionFormat: {\n reflow: mapRenditionFormat<ThProgressionFormat | ThProgressionFormat[]>(\n prefs.theming?.progression?.format?.reflow\n ),\n fxl: mapRenditionFormat<ThProgressionFormat | ThProgressionFormat[]>(\n prefs.theming?.progression?.format?.fxl\n ),\n webPub: mapRenditionFormat<ThProgressionFormat | ThProgressionFormat[]>(\n prefs.theming?.progression?.format?.webPub\n )\n },\n runningHeadFormat: {\n reflow: mapRenditionFormat<ThRunningHeadFormat>(\n prefs.theming?.header?.runningHead?.format?.reflow\n ),\n fxl: mapRenditionFormat<ThRunningHeadFormat>(\n prefs.theming?.header?.runningHead?.format?.fxl\n ),\n webPub: mapRenditionFormat<ThRunningHeadFormat>(\n prefs.theming?.header?.runningHead?.format?.webPub\n )\n },\n ui: prefs.theming?.layout?.ui,\n scrollAffordances: {\n hintInImmersive: prefs.affordances?.scroll?.hintInImmersive ?? false,\n toggleOnMiddlePointer: prefs.affordances?.scroll?.toggleOnMiddlePointer ?? [],\n hideOnForwardScroll: prefs.affordances?.scroll?.hideOnForwardScroll ?? false,\n showOnBackwardScroll: prefs.affordances?.scroll?.showOnBackwardScroll ?? false\n },\n paginatedAffordances: {\n reflow: mapPaginatedAffordance(prefs.affordances?.paginated?.reflow),\n fxl: mapPaginatedAffordance(prefs.affordances?.paginated?.fxl)\n }\n };\n}\n\nexport const mapStateToPreferences = <T extends CustomizableKeys = CustomizableKeys>(\n state: PreferencesReducerState, \n currentPrefs: ThPreferences<T>\n): ThPreferences<T> => {\n const updateVariants = (stateValue: any, prefValue: any) => {\n if (!stateValue) return prefValue;\n \n return {\n ...prefValue,\n default: {\n ...prefValue?.default,\n variants: stateValue.default || prefValue?.default?.variants\n },\n ...(stateValue.breakpoints && {\n breakpoints: {\n ...prefValue?.breakpoints,\n ...Object.entries(stateValue.breakpoints).reduce((acc, [bp, value]) => {\n const existing = prefValue?.breakpoints?.[bp as ThBreakpoints] || {};\n return {\n ...acc,\n [bp]: {\n ...existing,\n variants: value\n }\n };\n }, {})\n }\n })\n };\n };\n\n const updatePaginatedAffordance = (stateValue: any, prefValue: any) => {\n if (!stateValue) return prefValue;\n \n return {\n ...prefValue,\n default: stateValue.default || prefValue?.default,\n ...(stateValue.breakpoints && {\n breakpoints: {\n ...prefValue?.breakpoints,\n ...Object.entries(stateValue.breakpoints).reduce((acc, [bp, value]) => ({\n ...acc,\n [bp]: value\n }), {})\n }\n })\n };\n };\n\n return {\n ...currentPrefs,\n theming: {\n ...currentPrefs.theming,\n ...(state.progressionFormat && {\n progression: {\n ...currentPrefs.theming.progression,\n format: {\n ...currentPrefs.theming.progression?.format,\n ...(state.progressionFormat.reflow !== undefined && {\n reflow: updateVariants(\n state.progressionFormat.reflow,\n currentPrefs.theming.progression?.format?.reflow\n )\n }),\n ...(state.progressionFormat.fxl !== undefined && {\n fxl: updateVariants(\n state.progressionFormat.fxl,\n currentPrefs.theming.progression?.format?.fxl\n )\n }),\n ...(state.progressionFormat.webPub !== undefined && {\n webPub: updateVariants(\n state.progressionFormat.webPub,\n currentPrefs.theming.progression?.format?.webPub\n )\n })\n }\n }\n }),\n ...(state.runningHeadFormat && {\n header: {\n ...currentPrefs.theming.header,\n runningHead: {\n ...currentPrefs.theming.header?.runningHead,\n format: {\n ...currentPrefs.theming.header?.runningHead?.format,\n ...(state.runningHeadFormat.reflow !== undefined && {\n reflow: updateVariants(\n state.runningHeadFormat.reflow,\n currentPrefs.theming.header?.runningHead?.format?.reflow\n )\n }),\n ...(state.runningHeadFormat.fxl !== undefined && {\n fxl: updateVariants(\n state.runningHeadFormat.fxl,\n currentPrefs.theming.header?.runningHead?.format?.fxl\n )\n }),\n ...(state.runningHeadFormat.webPub !== undefined && {\n webPub: updateVariants(\n state.runningHeadFormat.webPub,\n currentPrefs.theming.header?.runningHead?.format?.webPub\n )\n })\n }\n }\n }\n }),\n layout: {\n ...currentPrefs.theming.layout,\n ui: state.ui \n ? { \n ...currentPrefs.theming.layout?.ui,\n ...state.ui \n } \n : currentPrefs.theming.layout?.ui\n }\n },\n affordances: {\n ...currentPrefs.affordances,\n ...(state.scrollAffordances && {\n scroll: {\n ...currentPrefs.affordances.scroll,\n ...state.scrollAffordances\n }\n }),\n ...(state.paginatedAffordances && {\n paginated: {\n reflow: updatePaginatedAffordance(state.paginatedAffordances.reflow, currentPrefs.affordances?.paginated?.reflow),\n fxl: updatePaginatedAffordance(state.paginatedAffordances.fxl, currentPrefs.affordances?.paginated?.fxl)\n }\n })\n }\n };\n};","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nimport {\n ThLayoutUI,\n ThProgressionFormat,\n ThRunningHeadFormat,\n ThPreferences,\n CustomizableKeys,\n ThBreakpoints,\n ThPaginatedAffordancePrefValue\n} from \"@/preferences\";\n\nimport { mapPreferencesToState } from \"./helpers/mapPreferences\";\n\nexport interface RenditionProperties<T extends string | Array<string>> {\n default?: T;\n breakpoints?: {\n [key in ThBreakpoints]?: T;\n };\n}\n\nexport interface RenditionObject<T extends string | Array<string>> {\n reflow?: RenditionProperties<T>;\n fxl?: RenditionProperties<T>;\n webPub?: RenditionProperties<T>;\n}\n\nexport interface RenditionChangePayload<T extends string | Array<string>> {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\" | \"webPub\";\n value?: T;\n breakpoint?: ThBreakpoints;\n }\n}\n\nexport interface UIChangePayload {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\" | \"webPub\";\n value?: ThLayoutUI;\n }\n}\n\nexport interface PaginatedAffordanceProperties {\n default?: ThPaginatedAffordancePrefValue;\n breakpoints?: {\n [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue;\n };\n}\n\nexport interface PaginatedAffordanceObject {\n reflow?: PaginatedAffordanceProperties;\n fxl?: PaginatedAffordanceProperties;\n}\n\nexport interface PaginatedAffordancePayload {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\";\n value: ThPaginatedAffordancePrefValue;\n breakpoint?: ThBreakpoints;\n };\n}\n\nexport interface PreferencesReducerState {\n progressionFormat?: RenditionObject<ThProgressionFormat | Array<ThProgressionFormat>>;\n runningHeadFormat?: RenditionObject<ThRunningHeadFormat>;\n paginatedAffordances?: PaginatedAffordanceObject;\n ui?: {\n reflow?: ThLayoutUI;\n fxl?: ThLayoutUI;\n webPub?: ThLayoutUI;\n };\n scrollAffordances?: {\n hintInImmersive?: boolean;\n toggleOnMiddlePointer?: Array<\"tap\" | \"click\">;\n hideOnForwardScroll?: boolean;\n showOnBackwardScroll?: boolean;\n }\n}\n\nconst initialState: PreferencesReducerState = {}\n\nexport const preferencesSlice = createSlice({\n name: \"preferences\",\n initialState,\n reducers: {\n setProgressionFormat: (state, action: RenditionChangePayload<ThProgressionFormat | Array<ThProgressionFormat>>) => {\n const { key, value, breakpoint } = action.payload;\n state.progressionFormat = {\n ...state.progressionFormat,\n [key]: {\n ...state.progressionFormat?.[key],\n ...(breakpoint ? {\n breakpoints: {\n ...state.progressionFormat?.[key]?.breakpoints,\n [breakpoint]: value\n }\n } : { default: value })\n }\n };\n },\n setRunningHeadFormat: (state, action: RenditionChangePayload<ThRunningHeadFormat>) => {\n const { key, value, breakpoint } = action.payload;\n state.runningHeadFormat = {\n ...state.runningHeadFormat,\n [key]: {\n ...state.runningHeadFormat?.[key],\n ...(breakpoint ? {\n breakpoints: {\n ...state.runningHeadFormat?.[key]?.breakpoints,\n [breakpoint]: value\n }\n } : { default: value })\n }\n };\n },\n setUI: (state, action: UIChangePayload) => {\n const { key, value } = action.payload;\n state.ui = {\n ...state.ui,\n [key]: value\n };\n },\n setScrollAffordances: (state, action) => {\n state.scrollAffordances = action.payload;\n },\n setPaginatedAffordance: (state, action: PaginatedAffordancePayload) => {\n const { key, value, breakpoint } = action.payload;\n state.paginatedAffordances = {\n ...state.paginatedAffordances,\n [key]: {\n ...state.paginatedAffordances?.[key],\n ...(breakpoint ? {\n breakpoints: {\n ...state.paginatedAffordances?.[key]?.breakpoints,\n [breakpoint]: value\n }\n } : { default: value })\n }\n };\n },\n updateFromPreferences(state, action: PayloadAction<ThPreferences<CustomizableKeys>>) {\n const prefs = action.payload;\n return mapPreferencesToState(prefs);\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const {\n setProgressionFormat,\n setRunningHeadFormat,\n setUI,\n setScrollAffordances,\n setPaginatedAffordance,\n updateFromPreferences\n} = preferencesSlice.actions;\n\nexport default preferencesSlice.reducer;","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nexport interface GlobalPreferencesReducerState {\n locale?: string;\n}\n\nconst initialState: GlobalPreferencesReducerState = {};\n\nexport const globalPreferencesSlice = createSlice({\n name: \"globalPreferences\",\n initialState,\n reducers: {\n setLocale: (state, action: PayloadAction<string | undefined>) => {\n state.locale = action.payload;\n },\n },\n});\n\nexport const { setLocale } = globalPreferencesSlice.actions;\n\nexport default globalPreferencesSlice.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { \n ThLineHeightOptions, \n ThSpacingPresetKeys, \n ThSpacingSettingsKeys, \n ThTextAlignOptions \n} from \"@/preferences/models\";\n\nimport { \n FontFamilyStateObject, \n SetFontFamilyPayload, \n handleSpacingSetting, \n SetSpacingPresetPayload, \n SpacingStateObject \n} from \"./settingsReducer\";\n\nexport interface WebPubSettingsReducerState {\n fontFamily: FontFamilyStateObject;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n ligatures: boolean | null;\n lineHeight: ThLineHeightOptions | null;\n noRuby: boolean | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n spacing: SpacingStateObject;\n textAlign: ThTextAlignOptions;\n textNormalization: boolean;\n wordSpacing: number | null;\n zoom: number;\n}\n\nconst initialState: WebPubSettingsReducerState = {\n fontFamily: { default: \"publisher\" },\n fontWeight: 400,\n hyphens: null,\n letterSpacing: null,\n ligatures: null,\n lineHeight: ThLineHeightOptions.publisher,\n noRuby: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n publisherStyles: true,\n spacing: {\n preset: ThSpacingPresetKeys.publisher,\n custom: {},\n baseline: {}\n },\n textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\n zoom: 1\n}\n\nexport const webPubSettingsSlice = createSlice({\n name: \"webPubSettings\",\n initialState,\n reducers: {\n setWebPubFontFamily: (state, action: SetFontFamilyPayload) => {\n const { key, value } = action.payload;\n state.fontFamily[key] = value;\n },\n setWebPubFontWeight: (state, action) => {\n state.fontWeight = action.payload\n },\n setWebPubHyphens: (state, action) => {\n state.hyphens = action.payload\n },\n setWebPubLigatures: (state, action) => {\n state.ligatures = action.payload\n },\n setWebPubLetterSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.letterSpacing);\n },\n setWebPubLineHeight: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.lineHeight);\n },\n setWebPubParagraphIndent: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphIndent);\n },\n setWebPubParagraphSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.paragraphSpacing);\n },\n setWebPubPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setWebPubSpacingPreset: (state, action: SetSpacingPresetPayload) => {\n const { preset, values } = action.payload;\n\n // Initialize spacing state if needed\n if (!state.spacing) {\n state.spacing = {\n preset: preset,\n custom: {},\n baseline: {}\n };\n }\n\n state.spacing.preset = preset;\n\n if (preset !== ThSpacingPresetKeys.custom) {\n state.spacing.baseline = values;\n }\n\n if (preset === ThSpacingPresetKeys.publisher) {\n state.publisherStyles = true;\n } else {\n state.publisherStyles = false;\n }\n },\n setWebPubTextAlign: (state, action) => {\n state.textAlign = action.payload\n },\n setWebPubTextNormalization: (state, action) => {\n state.textNormalization = action.payload\n },\n setWebPubNoRuby: (state, action) => {\n state.noRuby = action.payload\n },\n setWebPubWordSpacing: (state, action) => {\n handleSpacingSetting(state, action, ThSpacingSettingsKeys.wordSpacing);\n },\n setWebPubZoom: (state, action) => {\n state.zoom = action.payload\n }\n }\n});\n\nexport const initialWebPubSettingsState = initialState;\n\n// Action creators are generated for each case reducer function\nexport const {\n setWebPubFontFamily,\n setWebPubFontWeight,\n setWebPubHyphens,\n setWebPubLigatures,\n setWebPubLetterSpacing,\n setWebPubLineHeight,\n setWebPubParagraphIndent,\n setWebPubParagraphSpacing,\n setWebPubPublisherStyles,\n setWebPubSpacingPreset,\n setWebPubTextAlign,\n setWebPubTextNormalization,\n setWebPubNoRuby,\n setWebPubWordSpacing,\n setWebPubZoom\n} = webPubSettingsSlice.actions;\n\nexport default webPubSettingsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport interface AudioSettingsState {\n volume: number;\n playbackRate: number;\n preservePitch: boolean;\n skipBackwardInterval: number;\n skipForwardInterval: number;\n skipInterval: number;\n pollInterval: number;\n autoPlay: boolean;\n enableMediaSession: boolean;\n}\n\nconst initialState: AudioSettingsState = {\n volume: 1,\n playbackRate: 1,\n preservePitch: true,\n skipBackwardInterval: 10,\n skipForwardInterval: 10,\n skipInterval: 10,\n pollInterval: 1000,\n autoPlay: true,\n enableMediaSession: true,\n};\n\nexport const audioSettingsSlice = createSlice({\n name: \"audioSettings\",\n initialState,\n reducers: {\n setVolume: (state, action) => {\n state.volume = action.payload;\n },\n setPlaybackRate: (state, action) => {\n state.playbackRate = action.payload;\n },\n setPreservePitch: (state, action) => {\n state.preservePitch = action.payload;\n },\n setSkipBackwardInterval: (state, action) => {\n state.skipBackwardInterval = action.payload;\n },\n setSkipForwardInterval: (state, action) => {\n state.skipForwardInterval = action.payload;\n },\n setSkipInterval: (state, action) => {\n state.skipInterval = action.payload;\n },\n setPollInterval: (state, action) => {\n state.pollInterval = action.payload;\n },\n setAutoPlay: (state, action) => {\n state.autoPlay = action.payload;\n },\n setEnableMediaSession: (state, action) => {\n state.enableMediaSession = action.payload;\n },\n },\n});\n\nexport const {\n setVolume,\n setPlaybackRate,\n setPreservePitch,\n setSkipBackwardInterval,\n setSkipForwardInterval,\n setSkipInterval,\n setPollInterval,\n setAutoPlay,\n setEnableMediaSession,\n} = audioSettingsSlice.actions;\n\nexport default audioSettingsSlice.reducer;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nexport type PlayerStatus = \"idle\" | \"playing\" | \"paused\";\n\nexport interface SeekableRange {\n start: number;\n end: number;\n}\n\nexport interface SleepTimerState {\n remainingSeconds: number | null;\n onTrackEnd: boolean;\n onFragmentEnd: boolean;\n}\n\nexport type RemotePlaybackState = \"connecting\" | \"connected\" | \"disconnected\" | \"error\";\n\nexport interface PlayerReducerState {\n status: PlayerStatus;\n isSeeking: boolean;\n isStalled: boolean;\n isTrackReady: boolean;\n sleepTimer: SleepTimerState;\n remotePlaybackState: RemotePlaybackState | null;\n seekableRanges: SeekableRange[];\n}\n\nconst initialState: PlayerReducerState = {\n status: \"idle\",\n isSeeking: false,\n isStalled: false,\n isTrackReady: false,\n sleepTimer: { remainingSeconds: null, onTrackEnd: false, onFragmentEnd: false },\n remotePlaybackState: null,\n seekableRanges: [],\n};\n\nexport const playerSlice = createSlice({\n name: \"player\",\n initialState,\n reducers: {\n setStatus: (state, action: { payload: PlayerStatus }) => {\n state.status = action.payload;\n },\n setSeeking: (state, action: { payload: boolean }) => {\n state.isSeeking = action.payload;\n },\n setStalled: (state, action: { payload: boolean }) => {\n state.isStalled = action.payload;\n },\n setTrackReady: (state, action: { payload: boolean }) => {\n state.isTrackReady = action.payload;\n },\n setSleepTimerRemainingSeconds: (state, action: { payload: number | null }) => {\n state.sleepTimer.remainingSeconds = action.payload;\n },\n setSleepTimerOnTrackEnd: (state, action: { payload: boolean }) => {\n state.sleepTimer.onTrackEnd = action.payload;\n },\n setSleepTimerOnFragmentEnd: (state, action: { payload: boolean }) => {\n state.sleepTimer.onFragmentEnd = action.payload;\n },\n setRemotePlaybackState: (state, action: { payload: RemotePlaybackState | null }) => {\n state.remotePlaybackState = action.payload;\n },\n setSeekableRanges: (state, action: { payload: SeekableRange[] }) => {\n state.seekableRanges = action.payload;\n },\n },\n});\n\nexport const {\n setStatus,\n setSeeking,\n setStalled,\n setTrackReady,\n setSleepTimerRemainingSeconds,\n setSleepTimerOnTrackEnd,\n setSleepTimerOnFragmentEnd,\n setRemotePlaybackState,\n setSeekableRanges\n} = playerSlice.actions;\n\nexport default playerSlice.reducer;\n","export default function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\tif (typeof options === 'boolean') {\n\t\tthrow new TypeError('The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.');\n\t}\n\n\tconst {immediate} = options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t\treturn result;\n\t\t}\n\n\t\treturn undefined;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n","import { ThDockingKeys } from \"@/preferences/models\";\n\nimport { configureStore, Reducer } from \"@reduxjs/toolkit\";\n\nimport readerReducer, { ReaderReducerState } from \"@/lib/readerReducer\";\nimport settingsReducer, { SettingsReducerState } from \"@/lib/settingsReducer\";\nimport themeReducer, { ThemeReducerState } from \"@/lib/themeReducer\";\nimport actionsReducer, { ActionsReducerState, ActionStateObject } from \"@/lib/actionsReducer\";\nimport publicationReducer, { PublicationReducerState } from \"./publicationReducer\";\nimport preferencesReducer, { PreferencesReducerState } from \"./preferencesReducer\";\nimport globalPreferencesReducer, { GlobalPreferencesReducerState } from \"./globalPreferencesReducer\";\nimport webPubSettingsReducer, { WebPubSettingsReducerState } from \"./webPubSettingsReducer\";\nimport audioSettingsReducer, { AudioSettingsState } from \"./audioSettingsReducer\";\nimport playerReducer, { PlayerReducerState } from \"./playerReducer\";\n\nimport debounce from \"debounce\";\n\ninterface ExternalReducerConfig {\n reducer: any;\n persist?: boolean;\n}\n\n// Define the shape of the root state\nexport type RootState = {\n reader: ReaderReducerState;\n settings: SettingsReducerState;\n theming: ThemeReducerState;\n actions: ActionsReducerState;\n publication: PublicationReducerState;\n preferences: PreferencesReducerState;\n globalPreferences: GlobalPreferencesReducerState;\n webPubSettings: WebPubSettingsReducerState;\n audioSettings: AudioSettingsState;\n player: PlayerReducerState;\n [key: string]: any; // For external reducers\n};\n\nconst DEFAULT_STORAGE_KEY = \"thorium-web-state\";\n\n// Migrate font family state\nconst migrateFontFamily = (stateSlice: SettingsReducerState | WebPubSettingsReducerState) => {\n if (stateSlice?.fontFamily && typeof stateSlice.fontFamily === \"string\") {\n return {\n ...stateSlice,\n fontFamily: {\n default: stateSlice.fontFamily\n }\n };\n }\n return stateSlice;\n};\n\n\nconst updateActionsState = (state: ActionsReducerState) => {\n // Check if keys are already profile-keyed\n if (state.keys && typeof state.keys === \"object\" && (\"epub\" in state.keys || \"webPub\" in state.keys || \"audio\" in state.keys)) {\n // Keys are already profile-keyed, update each profile\n const updatedKeys: any = {};\n for (const profile in state.keys) {\n updatedKeys[profile] = Object.fromEntries(\n Object.entries(state.keys[profile]).map(([key, value]: [string, ActionStateObject | undefined]) => [\n key,\n {\n ...value,\n // Transient/undocked actions should never re-open on load\n // Docked actions reset to null so useDocking re-establishes open state\n // based on the actual breakpoint at load time (avoids opening docked\n // sheets in fullscreen/compact where docking is unavailable)\n isOpen: (value?.docking === ThDockingKeys.transient || value?.docking == null)\n ? false\n : (value?.docking === ThDockingKeys.start || value?.docking === ThDockingKeys.end)\n ? null\n : value?.isOpen,\n },\n ])\n );\n }\n return {\n ...state,\n keys: updatedKeys,\n overflow: {}\n };\n } else {\n // Keys are still flat, update them\n const updatedKeys = Object.fromEntries(\n Object.entries(state.keys).map(([key, value]: [string, ActionStateObject | undefined]) => [\n key,\n {\n ...value,\n isOpen: (value?.docking === ThDockingKeys.transient || value?.docking == null)\n ? false\n : (value?.docking === ThDockingKeys.start || value?.docking === ThDockingKeys.end)\n ? null\n : value?.isOpen,\n },\n ])\n );\n return {\n ...state,\n keys: updatedKeys,\n overflow: {}\n };\n }\n};\n\nconst migrateDockStateToProfileKeyed = (state: ActionsReducerState): ActionsReducerState => {\n // Check if dock state is in old format (not profile-keyed)\n if (state.dock && typeof state.dock === \"object\" && !(\"epub\" in state.dock || \"webPub\" in state.dock || \"audio\" in state.dock)) {\n // Old format: dock has direct start/end keys\n const oldDock = state.dock as any;\n if (oldDock[ThDockingKeys.start] || oldDock[ThDockingKeys.end]) {\n // Migrate to new profile-keyed format, only for epub profile\n const newDock: any = {};\n newDock[\"epub\"] = {\n [ThDockingKeys.start]: oldDock[ThDockingKeys.start] || { actionKey: null, active: false, collapsed: false },\n [ThDockingKeys.end]: oldDock[ThDockingKeys.end] || { actionKey: null, active: false, collapsed: false }\n };\n return {\n ...state,\n dock: newDock\n };\n }\n }\n return state;\n};\n\nconst migrateKeysStateToProfileKeyed = (state: ActionsReducerState): ActionsReducerState => {\n // If keys is not profile-keyed, migrate to profile-keyed format\n // Old format: keys is a flat object like { [key]: ActionStateObject }\n // New format: keys is profile-keyed like { epub: { [key]: ActionStateObject }, webPub: { ... }, audio: { ... } }\n if (!state.keys) {\n return state;\n }\n \n // Check if keys is already profile-keyed by looking for known profile keys\n const isProfileKeyed = \"epub\" in state.keys || \"webPub\" in state.keys || \"audio\" in state.keys;\n \n if (!isProfileKeyed) {\n // Old flat format - migrate to epub profile\n const oldKeys = state.keys as any;\n const newKeys: any = {\n epub: { ...oldKeys },\n webPub: {},\n audio: {}\n };\n return {\n ...state,\n keys: newKeys\n };\n }\n \n // Ensure all profile keys exist even if some are missing\n const migratedKeys: any = {\n epub: state.keys.epub || {},\n webPub: state.keys.webPub || {},\n audio: state.keys.audio || {}\n };\n \n return {\n ...state,\n keys: migratedKeys\n };\n};\n\nconst loadState = (storageKey: string = DEFAULT_STORAGE_KEY) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n const serializedState = localStorage.getItem(resolvedKey);\n if (serializedState === null) {\n return {\n actions: undefined,\n settings: undefined,\n theming: undefined,\n preferences: undefined,\n globalPreferences: undefined,\n webPubSettings: undefined,\n audioSettings: undefined\n };\n }\n \n // Parse the state\n let state = JSON.parse(serializedState);\n \n // Apply migrations\n if (state && state.actions) {\n state.actions = migrateDockStateToProfileKeyed(state.actions);\n state.actions = migrateKeysStateToProfileKeyed(state.actions);\n state.actions = updateActionsState(state.actions);\n }\n if (state) {\n if (state.settings) {\n state.settings = migrateFontFamily(state.settings);\n }\n if (state.webPubSettings) {\n state.webPubSettings = migrateFontFamily(state.webPubSettings);\n }\n if (state.actions) {\n state.actions = updateActionsState(state.actions);\n // Migrate dock state to profile-keyed format if needed\n // Old dock state only applied to epub profile\n state.actions = migrateDockStateToProfileKeyed(state.actions);\n }\n }\n \n return state;\n } catch (err) {\n return {\n actions: undefined,\n settings: undefined,\n theming: undefined,\n preferences: undefined,\n globalPreferences: undefined,\n webPubSettings: undefined\n };\n }\n};\n\nconst saveState = (state: any, storageKey?: string, externalReducers: Record<string, ExternalReducerConfig> = {}) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n \n // Only persist the state of reducers that are marked for persistence\n const stateToPersist: any = {};\n \n // Internal reducers to persist\n if (state.actions) stateToPersist.actions = state.actions;\n if (state.settings) stateToPersist.settings = state.settings;\n if (state.theming) stateToPersist.theming = state.theming;\n if (state.preferences) stateToPersist.preferences = state.preferences;\n if (state.globalPreferences) stateToPersist.globalPreferences = state.globalPreferences;\n if (state.webPubSettings) stateToPersist.webPubSettings = state.webPubSettings;\n if (state.audioSettings) stateToPersist.audioSettings = state.audioSettings;\n \n // External reducers to persist\n Object.entries(externalReducers).forEach(([key, config]) => {\n if (config.persist && state[key] !== undefined) {\n stateToPersist[key] = state[key];\n }\n });\n \n const serializedState = JSON.stringify(stateToPersist);\n localStorage.setItem(resolvedKey, serializedState);\n } catch (err) {\n console.error(err);\n }\n};\n\nexport const makeStore = (storageKey?: string, externalReducers: Record<string, ExternalReducerConfig> = {}) => {\n // Combine internal and external reducers\n const combinedReducers = {\n reader: readerReducer,\n settings: settingsReducer,\n theming: themeReducer,\n actions: actionsReducer,\n publication: publicationReducer,\n preferences: preferencesReducer,\n globalPreferences: globalPreferencesReducer,\n webPubSettings: webPubSettingsReducer,\n audioSettings: audioSettingsReducer,\n player: playerReducer,\n ...Object.entries(externalReducers).reduce((acc, [key, config]) => ({\n ...acc,\n [key]: config.reducer\n }), {})\n };\n\n // Get persisted state for internal reducers\n const persistedState = loadState(storageKey);\n \n // Create preloaded state with persisted values\n const preloadedState: any = {\n actions: persistedState.actions,\n settings: persistedState.settings,\n theming: persistedState.theming,\n preferences: persistedState.preferences,\n globalPreferences: persistedState.globalPreferences,\n webPubSettings: persistedState.webPubSettings,\n audioSettings: persistedState.audioSettings,\n // Include persisted state for external reducers that have it\n ...Object.entries(externalReducers).reduce((acc, [key, config]) => {\n if (config.persist && persistedState[key] !== undefined) {\n return { ...acc, [key]: persistedState[key] };\n }\n return acc;\n }, {})\n };\n\n const store = configureStore({\n reducer: combinedReducers as unknown as Reducer<RootState>,\n preloadedState,\n });\n\n const saveStateDebounced = debounce(() => {\n saveState(store.getState(), storageKey, externalReducers);\n }, 250);\n\n store.subscribe(saveStateDebounced);\n\n return store;\n}\n\n// Infer the type of makeStore\nexport type AppStore = ReturnType<typeof makeStore>;\n// Infer the `RootState` and `AppDispatch` types from the store itself\n// Export the RootState type for external use\nexport type AppState = RootState;\nexport type AppDispatch = AppStore[\"dispatch\"];","\"use client\";\n\nimport { useRef } from \"react\";\nimport { Provider } from \"react-redux\";\nimport { makeStore, AppStore } from \"./store\";\n\nexport const ThStoreProvider = ({\n storageKey,\n store,\n children\n}: {\n storageKey?: string,\n store?: AppStore,\n children: React.ReactNode\n}) => {\n const storeRef = useRef<AppStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = store || makeStore(storageKey);\n }\n\n return <Provider store={ storeRef.current }>{ children }</Provider>\n}\n\nexport default ThStoreProvider;","import { Store } from \"@reduxjs/toolkit\";\n\nimport { ThPreferences, CustomizableKeys } from \"../preferences/preferences\";\n\nimport { ThPreferencesAdapter } from \"../preferences/adapters/ThPreferencesAdapter\";\n\nimport { AppState } from \"@/lib/store\";\nimport { preferencesSlice } from \"@/lib/preferencesReducer\";\nimport { mapStateToPreferences } from \"@/lib/helpers/mapPreferences\";\n\nexport class ThReduxPreferencesAdapter<T extends CustomizableKeys = CustomizableKeys> implements ThPreferencesAdapter<T> {\n private store: Store<AppState>;\n private listeners: Set<(prefs: ThPreferences<T>) => void> = new Set();\n private currentPreferences: ThPreferences<T>;\n\n constructor(store: Store<AppState>, initialPreferences: ThPreferences<T>) {\n this.store = store;\n this.currentPreferences = initialPreferences;\n \n this.store.subscribe(() => {\n const state = this.store.getState();\n const prefs = this.mapStateToPreferences(state);\n if (JSON.stringify(prefs) !== JSON.stringify(this.currentPreferences)) {\n this.currentPreferences = prefs;\n this.notifyListeners(prefs);\n }\n });\n }\n\n public getPreferences(): ThPreferences<T> {\n return { ...this.currentPreferences };\n }\n\n public setPreferences(prefs: ThPreferences<T>): void {\n this.currentPreferences = prefs;\n this.store.dispatch(preferencesSlice.actions.updateFromPreferences(prefs as any));\n this.notifyListeners(prefs);\n }\n\n public subscribe(listener: (prefs: ThPreferences<T>) => void): void {\n this.listeners.add(listener);\n listener(this.getPreferences());\n }\n\n public unsubscribe(listener: (prefs: ThPreferences<T>) => void): void {\n this.listeners.delete(listener);\n }\n\n private mapStateToPreferences(state: AppState): ThPreferences<T> {\n if (!state.preferences) return this.currentPreferences;\n \n const updatedPrefs = mapStateToPreferences<T>(state.preferences, { ...this.currentPreferences });\n return updatedPrefs;\n }\n\n private notifyListeners(prefs: ThPreferences<T>): void {\n const prefsCopy = JSON.parse(JSON.stringify(prefs));\n this.listeners.forEach(callback => callback(prefsCopy));\n }\n}\n","import { Store } from \"@reduxjs/toolkit\";\n\nimport { ThGlobalPreferences } from \"@/preferences/globalPreferences\";\nimport { ThGlobalPreferencesAdapter } from \"@/preferences/adapters/ThGlobalPreferencesAdapter\";\nimport { AppState } from \"@/lib/store\";\nimport { setLocale } from \"@/lib/globalPreferencesReducer\";\n\nexport class ThReduxGlobalPreferencesAdapter implements ThGlobalPreferencesAdapter {\n private store: Store<AppState>;\n private listeners: Set<(prefs: ThGlobalPreferences) => void> = new Set();\n private currentPreferences: ThGlobalPreferences;\n\n constructor(store: Store<AppState>, initialPreferences: ThGlobalPreferences = {}) {\n this.store = store;\n this.currentPreferences = initialPreferences;\n\n this.store.subscribe(() => {\n const locale = this.store.getState().globalPreferences?.locale;\n const next: ThGlobalPreferences = { locale };\n if (JSON.stringify(next) !== JSON.stringify(this.currentPreferences)) {\n this.currentPreferences = next;\n this.notifyListeners(next);\n }\n });\n }\n\n getPreferences(): ThGlobalPreferences {\n return { ...this.currentPreferences };\n }\n\n setPreferences(prefs: ThGlobalPreferences): void {\n this.currentPreferences = { ...prefs };\n this.store.dispatch(setLocale(prefs.locale));\n this.notifyListeners(this.currentPreferences);\n }\n\n subscribe(callback: (prefs: ThGlobalPreferences) => void): void {\n this.listeners.add(callback);\n callback(this.getPreferences());\n }\n\n unsubscribe(callback: (prefs: ThGlobalPreferences) => void): void {\n this.listeners.delete(callback);\n }\n\n private notifyListeners(prefs: ThGlobalPreferences): void {\n const copy = { ...prefs };\n this.listeners.forEach(cb => cb(copy));\n }\n}\n"]}