@edrlab/thorium-web 1.3.0 → 1.4.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 (111) hide show
  1. package/dist/{ThPreferencesAdapter-D0rzsGRl.d.mts → ThPreferencesAdapter-L1H6gzmu.d.mts} +23 -6
  2. package/dist/{ThSettingsWrapper-BXuRgdqp.d.mts → ThSettingsWrapper-DWEA4hYF.d.mts} +1 -1
  3. package/dist/{actions-BLAr0oaM.d.mts → actions-BjeRjaJU.d.mts} +1 -1
  4. package/dist/{actionsReducer-BhG1wicI.d.mts → actionsReducer-B32cq2mB.d.mts} +11 -4
  5. package/dist/{chunk-L4XGZAZ5.mjs → chunk-2YRT7RNW.mjs} +20 -3
  6. package/dist/chunk-2YRT7RNW.mjs.map +1 -0
  7. package/dist/{chunk-UCTMVCW7.mjs → chunk-6MONB2DN.mjs} +91 -63
  8. package/dist/chunk-6MONB2DN.mjs.map +1 -0
  9. package/dist/chunk-A575ZW4A.mjs +10 -0
  10. package/dist/chunk-A575ZW4A.mjs.map +1 -0
  11. package/dist/chunk-AE6P4KJB.mjs +13 -0
  12. package/dist/chunk-AE6P4KJB.mjs.map +1 -0
  13. package/dist/{chunk-OWHP7ONM.mjs → chunk-IVXRCKWR.mjs} +4 -4
  14. package/dist/{chunk-OWHP7ONM.mjs.map → chunk-IVXRCKWR.mjs.map} +1 -1
  15. package/dist/{chunk-RRVLWDT3.mjs → chunk-KVUG6BNI.mjs} +92 -27
  16. package/dist/chunk-KVUG6BNI.mjs.map +1 -0
  17. package/dist/{chunk-IYAFKTPL.mjs → chunk-NUXGQWED.mjs} +7 -5
  18. package/dist/chunk-NUXGQWED.mjs.map +1 -0
  19. package/dist/{chunk-4ODYHZKD.mjs → chunk-P6ILEQ5P.mjs} +49 -51
  20. package/dist/chunk-P6ILEQ5P.mjs.map +1 -0
  21. package/dist/{chunk-D7MFLHXV.mjs → chunk-PXXWEMNL.mjs} +951 -592
  22. package/dist/chunk-PXXWEMNL.mjs.map +1 -0
  23. package/dist/{chunk-T2E6MRVP.mjs → chunk-QUSGPT5M.mjs} +11 -12
  24. package/dist/chunk-QUSGPT5M.mjs.map +1 -0
  25. package/dist/{chunk-XBZWGRDM.mjs → chunk-SZAVAQ6S.mjs} +30 -6
  26. package/dist/chunk-SZAVAQ6S.mjs.map +1 -0
  27. package/dist/{chunk-3LDWKC5N.mjs → chunk-T5ENYSDJ.mjs} +5 -5
  28. package/dist/chunk-T5ENYSDJ.mjs.map +1 -0
  29. package/dist/{chunk-4TVEDX7L.mjs → chunk-TSLTLQ6O.mjs} +127 -41
  30. package/dist/chunk-TSLTLQ6O.mjs.map +1 -0
  31. package/dist/{chunk-ITDBOMY5.mjs → chunk-VENFFPK2.mjs} +3 -3
  32. package/dist/{chunk-ITDBOMY5.mjs.map → chunk-VENFFPK2.mjs.map} +1 -1
  33. package/dist/{chunk-YZ3KCMKY.mjs → chunk-WLVE3WNW.mjs} +238 -58
  34. package/dist/chunk-WLVE3WNW.mjs.map +1 -0
  35. package/dist/chunk-XRFLDNAY.mjs +3913 -0
  36. package/dist/chunk-XRFLDNAY.mjs.map +1 -0
  37. package/dist/components/Audio/index.d.mts +12 -12
  38. package/dist/components/Audio/index.mjs +14 -14
  39. package/dist/components/Epub/index.css +3 -3
  40. package/dist/components/Epub/index.css.map +1 -1
  41. package/dist/components/Epub/index.d.mts +12 -12
  42. package/dist/components/Epub/index.mjs +15 -15
  43. package/dist/components/Misc/index.css +2 -2
  44. package/dist/components/Misc/index.css.map +1 -1
  45. package/dist/components/Misc/index.mjs +4 -4
  46. package/dist/components/Reader/index.css +5 -5
  47. package/dist/components/Reader/index.css.map +1 -1
  48. package/dist/components/Reader/index.d.mts +11 -11
  49. package/dist/components/Reader/index.mjs +26 -24
  50. package/dist/components/Reader/index.mjs.map +1 -1
  51. package/dist/components/WebPub/index.css +3 -3
  52. package/dist/components/WebPub/index.css.map +1 -1
  53. package/dist/components/WebPub/index.d.mts +12 -12
  54. package/dist/components/WebPub/index.mjs +15 -15
  55. package/dist/core/Components/index.d.mts +11 -21
  56. package/dist/core/Components/index.mjs +1 -1
  57. package/dist/core/Helpers/index.d.mts +1 -1
  58. package/dist/core/Helpers/index.mjs +2 -3
  59. package/dist/core/Hooks/index.d.mts +12 -8
  60. package/dist/core/Hooks/index.mjs +1 -1
  61. package/dist/i18n/index.mjs +3 -6
  62. package/dist/lib/index.d.mts +49 -20
  63. package/dist/lib/index.mjs +3 -2
  64. package/dist/locales/da/thorium-shared.json +3 -0
  65. package/dist/locales/en/thorium-shared.json +24 -2
  66. package/dist/locales/en/thorium-web.json +2 -2
  67. package/dist/locales/es/thorium-shared.json +364 -0
  68. package/dist/locales/es/thorium-web.json +130 -0
  69. package/dist/locales/et/thorium-shared.json +121 -9
  70. package/dist/locales/et/thorium-web.json +32 -1
  71. package/dist/locales/fi/thorium-shared.json +42 -4
  72. package/dist/locales/fi/thorium-web.json +36 -2
  73. package/dist/locales/fr/thorium-shared.json +108 -1
  74. package/dist/locales/fr/thorium-web.json +121 -86
  75. package/dist/locales/it/thorium-shared.json +108 -1
  76. package/dist/locales/it/thorium-web.json +15 -2
  77. package/dist/locales/lt/thorium-web.json +10 -1
  78. package/dist/locales/pl/thorium-web.json +1 -1
  79. package/dist/locales/pt-BR/thorium-shared.json +6 -0
  80. package/dist/locales/pt-BR/thorium-web.json +88 -88
  81. package/dist/locales/pt-PT/thorium-shared.json +91 -0
  82. package/dist/locales/pt-PT/thorium-web.json +15 -3
  83. package/dist/locales/sv/thorium-shared.json +108 -2
  84. package/dist/locales/sv/thorium-web.json +15 -3
  85. package/dist/locales/tr/thorium-shared.json +42 -0
  86. package/dist/preferences/index.d.mts +59 -13
  87. package/dist/preferences/index.mjs +6 -6
  88. package/dist/{settingsReducer-Bu1zeveu.d.mts → settingsReducer-DLaT2wUB.d.mts} +14 -2
  89. package/dist/{ui-nBv8gfr0.d.mts → ui-DnZZhozX.d.mts} +1 -1
  90. package/dist/{useAudioNavigator-C5aW4-eT.d.mts → useAudioNavigator-CWXyNWq1.d.mts} +3 -1
  91. package/dist/{useContrast-2t429O9O.d.mts → useContrast-Bo7cDw_X.d.mts} +5 -1
  92. package/dist/{usePreferences-VaBf46eP.d.mts → usePreferences-D8NU1yhP.d.mts} +6 -8
  93. package/dist/{useReaderTransitions-JDzlBFsu.d.mts → useReaderTransitions-BQGzKeY2.d.mts} +61 -10
  94. package/package.json +12 -11
  95. package/dist/chunk-3LDWKC5N.mjs.map +0 -1
  96. package/dist/chunk-4ODYHZKD.mjs.map +0 -1
  97. package/dist/chunk-4TVEDX7L.mjs.map +0 -1
  98. package/dist/chunk-7CGMWOZN.mjs +0 -20
  99. package/dist/chunk-7CGMWOZN.mjs.map +0 -1
  100. package/dist/chunk-C236BQQB.mjs +0 -1725
  101. package/dist/chunk-C236BQQB.mjs.map +0 -1
  102. package/dist/chunk-D7MFLHXV.mjs.map +0 -1
  103. package/dist/chunk-IYAFKTPL.mjs.map +0 -1
  104. package/dist/chunk-L4XGZAZ5.mjs.map +0 -1
  105. package/dist/chunk-RRVLWDT3.mjs.map +0 -1
  106. package/dist/chunk-T2E6MRVP.mjs.map +0 -1
  107. package/dist/chunk-UCTMVCW7.mjs.map +0 -1
  108. package/dist/chunk-WECWPYZB.mjs +0 -1950
  109. package/dist/chunk-WECWPYZB.mjs.map +0 -1
  110. package/dist/chunk-XBZWGRDM.mjs.map +0 -1
  111. package/dist/chunk-YZ3KCMKY.mjs.map +0 -1
@@ -1,12 +1,12 @@
1
- export { au as PositionStorage, ay as ReaderComponentProps, ax as ReaderPlugins, ad as ScrimPref, d as StatefulActionContainerProps, o as StatefulActionIcon, n as StatefulActionIconProps, c as StatefulActionTriggerProps, S as StatefulActionsMapObject, i as StatefulAudioSettingsContainer, ae as StatefulBottomSheet, ac as StatefulBottomSheetProps, s as StatefulCollapsibleActionsBar, r as StatefulCollapsibleActionsBarProps, ag as StatefulCompactPopoverSheet, af as StatefulCompactPopoverSheetProps, ai as StatefulDockedSheet, ah as StatefulDockedSheetProps, C as StatefulDropdown, B as StatefulDropdownProps, a2 as StatefulFontFamily, ak as StatefulFullScreenSheet, aj as StatefulFullScreenSheetProps, e as StatefulFullscreenTrigger, A as StatefulGroupWrapper, z as StatefulGroupWrapperProps, a4 as StatefulHyphens, f as StatefulJumpToPositionContainer, g as StatefulJumpToPositionTrigger, U as StatefulLetterSpacing, V as StatefulLineHeight, aq as StatefulModalBase, ap as StatefulModalBaseProps, am as StatefulModalSheet, al as StatefulModalSheetProps, E as StatefulNumberField, D as StatefulNumberFieldProps, v as StatefulOverflowMenu, q as StatefulOverflowMenuItem, p as StatefulOverflowMenuItemProps, t as StatefulOverflowMenuProps, W as StatefulParagraphIndent, X as StatefulParagraphSpacing, ao as StatefulPopoverSheet, an as StatefulPopoverSheetProps, at as StatefulPreferencesProvider, a9 as StatefulPublisherStyles, G as StatefulRadioGroup, F as StatefulRadioGroupProps, av as StatefulReaderProps, az as StatefulReaderWrapper, R as StatefulSettingsItemProps, k as StatefulSettingsTrigger, h as StatefulSettingsWrapper, as as StatefulSheet, ar as StatefulSheetWrapper, I as StatefulSlider, H as StatefulSliderProps, K as StatefulSliderWithPresets, J as StatefulSliderWithPresetsProps, Y as StatefulSpacingGroup, Z as StatefulSpacingGroupContainer, _ as StatefulSpacingPresets, M as StatefulSwitch, L as StatefulSwitchProps, a5 as StatefulTextAlign, a6 as StatefulTextGroup, a7 as StatefulTextGroupContainer, a8 as StatefulTextNormalize, aa as StatefulTheme, l as StatefulTocContainer, m as StatefulTocTrigger, j as StatefulVisualSettingsContainer, $ as StatefulWordSpacing, ab as StatefulZoom, T as ThPlugin, aw as ThPluginFactory, a3 as UnstableStatefulFontWeight, y as createAudioDefaultPlugin, x as createDefaultPlugin, w as useDocking, N as useEffectiveRange, P as useGridNavigation, O as useGridNavigationProps, Q as useGridTemplate, a0 as useLineHeight, u as useNavigator, a as usePublication, b as useReaderTransitions, a1 as useSpacingPresets } from '../../useReaderTransitions-JDzlBFsu.mjs';
2
- export { u as useAudioNavigator, a as useEpubNavigator, b as useWebPubNavigator } from '../../useAudioNavigator-C5aW4-eT.mjs';
1
+ export { aA as PositionStorage, aE as ReaderComponentProps, aD as ReaderPlugins, ai as ScrimPref, d as StatefulActionContainerProps, o as StatefulActionIcon, n as StatefulActionIconProps, c as StatefulActionTriggerProps, S as StatefulActionsMapObject, i as StatefulAudioSettingsContainer, aj as StatefulBottomSheet, ah as StatefulBottomSheetProps, s as StatefulCollapsibleActionsBar, r as StatefulCollapsibleActionsBarProps, al as StatefulCompactPopoverSheet, ak as StatefulCompactPopoverSheetProps, an as StatefulDockedSheet, am as StatefulDockedSheetProps, C as StatefulDropdown, B as StatefulDropdownProps, a5 as StatefulFontFamily, ap as StatefulFullScreenSheet, ao as StatefulFullScreenSheetProps, e as StatefulFullscreenTrigger, az as StatefulGlobalPreferencesProvider, A as StatefulGroupWrapper, z as StatefulGroupWrapperProps, a7 as StatefulHyphens, f as StatefulJumpToPositionContainer, g as StatefulJumpToPositionTrigger, X as StatefulLetterSpacing, ac as StatefulLigatures, Y as StatefulLineHeight, av as StatefulModalBase, au as StatefulModalBaseProps, ar as StatefulModalSheet, aq as StatefulModalSheetProps, ad as StatefulNoRuby, E as StatefulNumberField, D as StatefulNumberFieldProps, v as StatefulOverflowMenu, q as StatefulOverflowMenuItem, p as StatefulOverflowMenuItemProps, t as StatefulOverflowMenuProps, Z as StatefulParagraphIndent, _ as StatefulParagraphSpacing, at as StatefulPopoverSheet, as as StatefulPopoverSheetProps, ay as StatefulPreferencesProvider, ae as StatefulPublisherStyles, G as StatefulRadioGroup, F as StatefulRadioGroupProps, aB as StatefulReaderProps, aF as StatefulReaderWrapper, W as StatefulSettingsItemProps, k as StatefulSettingsTrigger, h as StatefulSettingsWrapper, ax as StatefulSheet, aw as StatefulSheetWrapper, I as StatefulSlider, H as StatefulSliderProps, K as StatefulSliderWithPresets, J as StatefulSliderWithPresetsProps, $ as StatefulSpacingGroup, a0 as StatefulSpacingGroupContainer, a1 as StatefulSpacingPresets, M as StatefulSwitch, L as StatefulSwitchProps, a8 as StatefulTextAlign, a9 as StatefulTextGroup, aa as StatefulTextGroupContainer, ab as StatefulTextNormalize, af as StatefulTheme, l as StatefulTocContainer, m as StatefulTocTrigger, j as StatefulVisualSettingsContainer, a2 as StatefulWordSpacing, ag as StatefulZoom, T as ThPlugin, aC as ThPluginFactory, a6 as UnstableStatefulFontWeight, y as createAudioDefaultPlugin, x as createDefaultPlugin, w as useDocking, N as useEffectiveRange, P as useGridNavigation, O as useGridNavigationProps, Q as useGridTemplate, a3 as useLineHeight, u as useNavigator, R as usePlaceholder, a as usePublication, U as useReaderSetting, b as useReaderTransitions, V as useSettingsComponentStatus, a4 as useSpacingPresets } from '../../useReaderTransitions-BQGzKeY2.mjs';
2
+ export { u as useAudioNavigator, a as useEpubNavigator, b as useWebPubNavigator } from '../../useAudioNavigator-CWXyNWq1.mjs';
3
3
  export { canRenderProgressionFormat, getBestMatchingProgressionFormat, getPlatform, getSupportedProgressionFormats, isActiveElement, isIOSish, isInteractiveElement, isIpadOS, isKeyboardTriggered, isMacish, makeBreakpointsMap, propsToCSSVars } from '../../core/Helpers/index.mjs';
4
4
  export { U as UnstableKey, a as UnstableMetaKey, c as UnstableMetaKeys, g as UnstablePShortcut, b as UnstablePlatformModifier, f as UnstableShortcut, d as UnstableShortcutMetaKeywords, e as UnstableShortcutRepresentation, j as buildShortcut, h as defaultPlatformModifier, i as getPlatformModifier, m as metaKeys } from '../../keyboardUtilities-BWAyLS_D.mjs';
5
- export { AdjacentTimelineItem, AppDispatch, AppState, AppStore, AudioSettingsState, L10nObject, PaginatedAffordanceObject, PaginatedAffordancePayload, PaginatedAffordanceProperties, PlayerReducerState, PlayerStatus, PreferencesReducerState, PublicationReducerState, ReaderProfile, ReaderReducerState, RemotePlaybackState, RenditionChangePayload, RenditionObject, RenditionProperties, RootState, SeekableRange, SleepTimerState, ThReduxPreferencesAdapter, ThStoreProvider, ThemeReducerState, ThemeStateChangePayload, ThemeStateObject, UIChangePayload, WebPubSettingsReducerState, audioSettingsSlice, initialWebPubSettingsState, makeStore, playerSlice, preferencesSlice, publicationSlice, readerSlice, setAdjacentTimelineItems, setAutoPlay, setBreakpoint, setColorScheme, setContrast, setCoverTheme, setDirection, setEnableMediaSession, setFXL, setFontLanguage, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setImmersive, setL10n, setLoading, setMonochrome, setPaginatedAffordance, setPlatformModifier, setPlaybackRate, setPollInterval, setPositionsList, setPreservePitch, setProgressionFormat, setPublicationEnd, setPublicationStart, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRemotePlaybackState, setRunningHeadFormat, setScrollAffordance, setScrollAffordances, setSeekableRanges, setSeeking, setSettingsContainer, setSkipBackwardInterval, setSkipForwardInterval, setSkipInterval, setSleepTimerOnFragmentEnd, setSleepTimerOnTrackEnd, setSleepTimerRemainingSeconds, setStalled, setStatus, setTheme, setTimeline, setTocEntry, setTocTree, setTrackReady, setUI, setUserNavigated, setVolume, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLineHeight, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, themeSlice, toggleImmersive, updateFromPreferences, useAppDispatch, useAppSelector, useAppStore, webPubSettingsSlice } from '../../lib/index.mjs';
6
- export { f as ActionOverflowOpenPayload, c as ActionStateDockPayload, g as ActionStateDockedPayload, a as ActionStateObject, d as ActionStateOpenPayload, h as ActionStateSlotPayload, i as ActionStateSlotPayloadWithProfile, j as ActionStateSlotWidthPayload, e as ActionStateTogglePayload, l as ActionsReducerState, A as ActionsStateKeys, k as DockState, D as DockStateObject, O as OverflowStateKeys, b as OverflowStateObject, m as actionsSlice, p as activateDockPanel, r as collapseDockPanel, q as deactivateDockPanel, n as dockAction, u as expandDockPanel, s as setActionOpen, v as setDockPanelWidth, o as setOverflow, t as toggleActionOpen } from '../../actionsReducer-BhG1wicI.mjs';
7
- export { F as FontFamilyStateObject, L as LineLengthStateObject, S as SetFontFamilyPayload, a as SetLineLengthPayload, c as SetSpacingPresetPayload, b as SetSpacingSettingPayload, f as SettingsReducerState, d as SpacingStateKey, e as SpacingStateObject, h as handleSpacingSetting, i as initialSettingsState, g as setColumnCount, l as setFontFamily, j as setFontSize, k as setFontWeight, m as setHyphens, n as setLetterSpacing, o as setLineHeight, p as setLineLength, q as setParagraphIndent, r as setParagraphSpacing, t as setPublisherStyles, u as setScroll, v as setSpacingPreset, w as setTextAlign, x as setTextNormalization, y as setWordSpacing, s as settingsSlice } from '../../settingsReducer-Bu1zeveu.mjs';
8
- export { u as useTheming } from '../../ThPreferencesAdapter-D0rzsGRl.mjs';
9
- export { T as ThPreferencesProvider, u as usePreferences } from '../../usePreferences-VaBf46eP.mjs';
5
+ export { AdjacentTimelineItem, AppDispatch, AppState, AppStore, AudioSettingsState, GlobalPreferencesReducerState, PaginatedAffordanceObject, PaginatedAffordancePayload, PaginatedAffordanceProperties, PlayerReducerState, PlayerStatus, PreferencesReducerState, PublicationReducerState, ReaderProfile, ReaderReducerState, RemotePlaybackState, RenditionChangePayload, RenditionObject, RenditionProperties, RootState, SeekableRange, SleepTimerState, ThReduxGlobalPreferencesAdapter, ThReduxPreferencesAdapter, ThStoreProvider, ThemeReducerState, ThemeStateChangePayload, ThemeStateObject, UIChangePayload, WebPubSettingsReducerState, audioSettingsSlice, globalPreferencesSlice, initialWebPubSettingsState, makeStore, playerSlice, preferencesSlice, publicationSlice, readerSlice, setAdjacentTimelineItems, setAutoPlay, setBreakpoint, setColorScheme, setContrast, setCoverTheme, setDirection, setEnableMediaSession, setFXL, setFontLanguage, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setImmersive, setLoading, setLocale, setMonochrome, setPaginatedAffordance, setPlatformModifier, setPlaybackRate, setPollInterval, setPositionsList, setPreservePitch, setProgressionFormat, setPublicationEnd, setPublicationStart, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRemotePlaybackState, setRunningHeadFormat, setScriptMode, setScrollAffordance, setScrollAffordances, setSeekableRanges, setSeeking, setSettingsContainer, setSkipBackwardInterval, setSkipForwardInterval, setSkipInterval, setSleepTimerOnFragmentEnd, setSleepTimerOnTrackEnd, setSleepTimerRemainingSeconds, setStalled, setStatus, setTheme, setTimeline, setTocEntry, setTocTree, setTrackReady, setUI, setUserNavigated, setVolume, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLigatures, setWebPubLineHeight, setWebPubNoRuby, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, themeSlice, toggleImmersive, updateFromPreferences, useAppDispatch, useAppSelector, useAppStore, webPubSettingsSlice } from '../../lib/index.mjs';
6
+ export { l as ActionKeysState, f as ActionOverflowOpenPayload, c as ActionStateDockPayload, g as ActionStateDockedPayload, a as ActionStateObject, d as ActionStateOpenPayload, h as ActionStateSlotPayload, i as ActionStateSlotPayloadWithProfile, j as ActionStateSlotWidthPayload, e as ActionStateTogglePayload, m as ActionsReducerState, A as ActionsStateKeys, k as DockState, D as DockStateObject, O as OverflowStateKeys, b as OverflowStateObject, n as actionsSlice, q as activateDockPanel, u as collapseDockPanel, r as deactivateDockPanel, o as dockAction, v as expandDockPanel, s as setActionOpen, w as setDockPanelWidth, p as setOverflow, t as toggleActionOpen } from '../../actionsReducer-B32cq2mB.mjs';
7
+ export { F as FontFamilyStateObject, L as LineLengthStateObject, S as SetFontFamilyPayload, a as SetLineLengthPayload, c as SetSpacingPresetPayload, b as SetSpacingSettingPayload, f as SettingsReducerState, d as SpacingStateKey, e as SpacingStateObject, h as handleSpacingSetting, i as initialSettingsState, g as setColumnCount, l as setFontFamily, j as setFontSize, k as setFontWeight, m as setHyphens, o as setLetterSpacing, n as setLigatures, p as setLineHeight, q as setLineLength, z as setNoRuby, r as setParagraphIndent, t as setParagraphSpacing, u as setPublisherStyles, v as setScroll, w as setSpacingPreset, x as setTextAlign, y as setTextNormalization, A as setWordSpacing, s as settingsSlice } from '../../settingsReducer-DLaT2wUB.mjs';
8
+ export { u as useTheming } from '../../ThPreferencesAdapter-L1H6gzmu.mjs';
9
+ export { T as ThPreferencesProvider, u as usePreferences } from '../../usePreferences-D8NU1yhP.mjs';
10
10
  export { Trans } from 'react-i18next';
11
11
  export { DEFAULT_CONFIG, ThI18nProvider, initI18n, useI18n } from '../../i18n/index.mjs';
12
12
  export { StatefulAudioAutoPlay, StatefulAudioAutoPlayProps, StatefulAudioMediaActions, StatefulAudioPlaybackControls, StatefulAudioPlaybackRateContainer, StatefulAudioPlaybackRateTrigger, StatefulAudioProgressBar, StatefulAudioRemotePlaybackTrigger, StatefulAudioSkipBackwardInterval, StatefulAudioSkipBackwardIntervalProps, StatefulAudioSkipForwardInterval, StatefulAudioSkipForwardIntervalProps, StatefulAudioSkipInterval, StatefulAudioSkipIntervalProps, StatefulAudioSleepTimerContainer, StatefulAudioSleepTimerTrigger, StatefulAudioTocContainer, StatefulAudioTocTrigger, StatefulAudioVolumeContainer, StatefulAudioVolumeTrigger, StatefulNextButton, StatefulPlayPauseButton, StatefulPlayer, StatefulPreviousButton, StatefulSkipBackwardButton, StatefulSkipForwardButton } from '../Audio/index.mjs';
@@ -15,12 +15,12 @@ export { ExperimentalWebPubStatefulReader } from '../WebPub/index.mjs';
15
15
  export { default as i18n } from 'i18next';
16
16
  import 'react/jsx-runtime';
17
17
  import 'react';
18
- import '../../actions-BLAr0oaM.mjs';
18
+ import '../../actions-BjeRjaJU.mjs';
19
19
  import 'react-aria-components';
20
- import '../../ui-nBv8gfr0.mjs';
21
- import '../../ThSettingsWrapper-BXuRgdqp.mjs';
20
+ import '../../ui-DnZZhozX.mjs';
21
+ import '../../ThSettingsWrapper-DWEA4hYF.mjs';
22
22
  import 'react-aria';
23
- import '../../useContrast-2t429O9O.mjs';
23
+ import '../../useContrast-Bo7cDw_X.mjs';
24
24
  import '@readium/navigator';
25
25
  import '@readium/shared';
26
26
  import '../../errorHandler-CL2YIfQY.mjs';
@@ -1,33 +1,35 @@
1
- export { ExperimentalWebPubStatefulReader } from '../../chunk-RRVLWDT3.mjs';
2
- export { StatefulAudioMediaActions, StatefulAudioPlaybackControls, StatefulAudioProgressBar, StatefulNextButton, StatefulPlayPauseButton, StatefulPlayer, StatefulPreviousButton, StatefulSkipBackwardButton, StatefulSkipForwardButton } from '../../chunk-T2E6MRVP.mjs';
3
- export { StatefulReader } from '../../chunk-4TVEDX7L.mjs';
4
- import '../../chunk-UCTMVCW7.mjs';
5
- export { StatefulActionIcon, StatefulAudioAutoPlay, StatefulAudioPlaybackRateContainer, StatefulAudioPlaybackRateTrigger, StatefulAudioRemotePlaybackTrigger, StatefulAudioSettingsContainer, StatefulAudioSkipBackwardInterval, StatefulAudioSkipForwardInterval, StatefulAudioSkipInterval, StatefulAudioSleepTimerContainer, StatefulAudioSleepTimerTrigger, StatefulAudioTocContainer, StatefulAudioTocTrigger, StatefulAudioVolumeContainer, StatefulAudioVolumeTrigger, StatefulBottomSheet, StatefulCollapsibleActionsBar, StatefulColumns, StatefulCompactPopoverSheet, StatefulDockedSheet, StatefulDropdown, StatefulFontFamily, StatefulFullScreenSheet, StatefulFullscreenTrigger, StatefulGroupWrapper, StatefulHyphens, StatefulJumpToPositionContainer, StatefulJumpToPositionTrigger, StatefulLayout, StatefulLetterSpacing, StatefulLineHeight, StatefulModalBase, StatefulModalSheet, StatefulNumberField, StatefulOverflowMenu, StatefulOverflowMenuItem, StatefulParagraphIndent, StatefulParagraphSpacing, StatefulPopoverSheet, StatefulPreferencesProvider, StatefulPublisherStyles, StatefulRadioGroup, StatefulSettingsTrigger, StatefulSettingsWrapper, StatefulSheetWrapper, StatefulSlider, StatefulSliderWithPresets, StatefulSpacingGroup, StatefulSpacingGroupContainer, StatefulSpacingPresets, StatefulSwitch, StatefulTextAlign, StatefulTextGroup, StatefulTextGroupContainer, StatefulTextNormalize, StatefulTheme, StatefulTocContainer, StatefulTocTrigger, StatefulVisualSettingsContainer, StatefulWordSpacing, StatefulZoom, UnstableStatefulFontWeight, createAudioDefaultPlugin, createDefaultPlugin, useDocking, useEffectiveRange, useGridNavigation, useGridTemplate, useLineHeight, useNavigator, usePublication, useReaderTransitions, useSpacingPresets } from '../../chunk-D7MFLHXV.mjs';
6
- export { canRenderProgressionFormat, getBestMatchingProgressionFormat, getSupportedProgressionFormats, isActiveElement, isInteractiveElement, isKeyboardTriggered, makeBreakpointsMap } from '../../chunk-ITDBOMY5.mjs';
7
- export { useAudioNavigator, useEpubNavigator, useWebPubNavigator } from '../../chunk-XBZWGRDM.mjs';
8
- import { ThI18nProvider } from '../../chunk-3LDWKC5N.mjs';
9
- export { ThI18nProvider, Trans } from '../../chunk-3LDWKC5N.mjs';
10
- import { useAppSelector, useAppDispatch, setReducedTransparency, setReducedMotion, setMonochrome, setForcedColors, setContrast, setColorScheme, setBreakpoint, setCoverTheme, setFontLanguage } from '../../chunk-YZ3KCMKY.mjs';
11
- export { ThReduxPreferencesAdapter, ThStoreProvider, actionsSlice, activateDockPanel, audioSettingsSlice, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, handleSpacingSetting, initialSettingsState, initialWebPubSettingsState, makeStore, playerSlice, preferencesSlice, publicationSlice, readerSlice, setActionOpen, setAdjacentTimelineItems, setAutoPlay, setBreakpoint, setColorScheme, setColumnCount, setContrast, setCoverTheme, setDirection, setDockPanelWidth, setEnableMediaSession, setFXL, setFontFamily, setFontLanguage, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setHyphens, setImmersive, setL10n, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setPaginatedAffordance, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPlaybackRate, setPollInterval, setPositionsList, setPreservePitch, setProgressionFormat, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRemotePlaybackState, setRunningHeadFormat, setScroll, setScrollAffordance, setScrollAffordances, setSeekableRanges, setSeeking, setSettingsContainer, setSkipBackwardInterval, setSkipForwardInterval, setSkipInterval, setSleepTimerOnFragmentEnd, setSleepTimerOnTrackEnd, setSleepTimerRemainingSeconds, setSpacingPreset, setStalled, setStatus, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setTrackReady, setUI, setUserNavigated, setVolume, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLineHeight, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, updateFromPreferences, useAppDispatch, useAppSelector, useAppStore, webPubSettingsSlice } from '../../chunk-YZ3KCMKY.mjs';
1
+ export { ExperimentalWebPubStatefulReader } from '../../chunk-KVUG6BNI.mjs';
2
+ export { StatefulAudioMediaActions, StatefulAudioPlaybackControls, StatefulAudioProgressBar, StatefulNextButton, StatefulPlayPauseButton, StatefulPlayer, StatefulPreviousButton, StatefulSkipBackwardButton, StatefulSkipForwardButton } from '../../chunk-QUSGPT5M.mjs';
3
+ export { StatefulReader } from '../../chunk-TSLTLQ6O.mjs';
4
+ import '../../chunk-6MONB2DN.mjs';
5
+ export { StatefulActionIcon, StatefulAudioAutoPlay, StatefulAudioPlaybackRateContainer, StatefulAudioPlaybackRateTrigger, StatefulAudioRemotePlaybackTrigger, StatefulAudioSettingsContainer, StatefulAudioSkipBackwardInterval, StatefulAudioSkipForwardInterval, StatefulAudioSkipInterval, StatefulAudioSleepTimerContainer, StatefulAudioSleepTimerTrigger, StatefulAudioTocContainer, StatefulAudioTocTrigger, StatefulAudioVolumeContainer, StatefulAudioVolumeTrigger, StatefulBottomSheet, StatefulCollapsibleActionsBar, StatefulColumns, StatefulCompactPopoverSheet, StatefulDockedSheet, StatefulDropdown, StatefulFontFamily, StatefulFullScreenSheet, StatefulFullscreenTrigger, StatefulGlobalPreferencesProvider, StatefulGroupWrapper, StatefulHyphens, StatefulJumpToPositionContainer, StatefulJumpToPositionTrigger, StatefulLayout, StatefulLetterSpacing, StatefulLigatures, StatefulLineHeight, StatefulModalBase, StatefulModalSheet, StatefulNoRuby, StatefulNumberField, StatefulOverflowMenu, StatefulOverflowMenuItem, StatefulParagraphIndent, StatefulParagraphSpacing, StatefulPopoverSheet, StatefulPreferencesProvider, StatefulPublisherStyles, StatefulRadioGroup, StatefulSettingsTrigger, StatefulSettingsWrapper, StatefulSheetWrapper, StatefulSlider, StatefulSliderWithPresets, StatefulSpacingGroup, StatefulSpacingGroupContainer, StatefulSpacingPresets, StatefulSwitch, StatefulTextAlign, StatefulTextGroup, StatefulTextGroupContainer, StatefulTextNormalize, StatefulTheme, StatefulTocContainer, StatefulTocTrigger, StatefulVisualSettingsContainer, StatefulWordSpacing, StatefulZoom, UnstableStatefulFontWeight, createAudioDefaultPlugin, createDefaultPlugin, useDocking, useEffectiveRange, useGridNavigation, useGridTemplate, useLineHeight, useNavigator, usePlaceholder, usePublication, useReaderSetting, useReaderTransitions, useSettingsComponentStatus, useSpacingPresets } from '../../chunk-PXXWEMNL.mjs';
6
+ export { canRenderProgressionFormat, getBestMatchingProgressionFormat, getSupportedProgressionFormats, isActiveElement, isInteractiveElement, isKeyboardTriggered, makeBreakpointsMap } from '../../chunk-VENFFPK2.mjs';
7
+ export { useAudioNavigator, useEpubNavigator, useWebPubNavigator } from '../../chunk-SZAVAQ6S.mjs';
8
+ import { ThI18nProvider } from '../../chunk-T5ENYSDJ.mjs';
9
+ export { ThI18nProvider, Trans } from '../../chunk-T5ENYSDJ.mjs';
10
+ import { setReducedTransparency, setReducedMotion, setMonochrome, setForcedColors, setContrast, setColorScheme, setBreakpoint, setCoverTheme, setFontLanguage } from '../../chunk-WLVE3WNW.mjs';
11
+ export { ThReduxGlobalPreferencesAdapter, ThReduxPreferencesAdapter, ThStoreProvider, actionsSlice, activateDockPanel, audioSettingsSlice, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, globalPreferencesSlice, handleSpacingSetting, initialSettingsState, initialWebPubSettingsState, makeStore, playerSlice, preferencesSlice, publicationSlice, readerSlice, setActionOpen, setAdjacentTimelineItems, setAutoPlay, setBreakpoint, setColorScheme, setColumnCount, setContrast, setCoverTheme, setDirection, setDockPanelWidth, setEnableMediaSession, setFXL, setFontFamily, setFontLanguage, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setHyphens, setImmersive, setLetterSpacing, setLigatures, setLineHeight, setLineLength, setLoading, setLocale, setMonochrome, setNoRuby, setOverflow, setPaginatedAffordance, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPlaybackRate, setPollInterval, setPositionsList, setPreservePitch, setProgressionFormat, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRemotePlaybackState, setRunningHeadFormat, setScriptMode, setScroll, setScrollAffordance, setScrollAffordances, setSeekableRanges, setSeeking, setSettingsContainer, setSkipBackwardInterval, setSkipForwardInterval, setSkipInterval, setSleepTimerOnFragmentEnd, setSleepTimerOnTrackEnd, setSleepTimerRemainingSeconds, setSpacingPreset, setStalled, setStatus, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setTrackReady, setUI, setUserNavigated, setVolume, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLigatures, setWebPubLineHeight, setWebPubNoRuby, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, updateFromPreferences, webPubSettingsSlice } from '../../chunk-WLVE3WNW.mjs';
12
12
  import '../../chunk-TEZB4ULX.mjs';
13
- import { ThAudioPreferencesProvider, ThPreferencesProvider, useAudioPreferences, useTheming, prefixString, usePreferences, proxyUrl } from '../../chunk-WECWPYZB.mjs';
14
- export { ThPreferencesProvider, usePreferences, useTheming } from '../../chunk-WECWPYZB.mjs';
15
- import { propsToCSSVars } from '../../chunk-7CGMWOZN.mjs';
16
- export { propsToCSSVars } from '../../chunk-7CGMWOZN.mjs';
13
+ import { ThAudioPreferencesProvider, ThPreferencesProvider, useAudioPreferences, useTheming, prefixString, usePreferences, proxyUrl } from '../../chunk-XRFLDNAY.mjs';
14
+ export { ThPreferencesProvider, usePreferences, useTheming } from '../../chunk-XRFLDNAY.mjs';
15
+ import { propsToCSSVars } from '../../chunk-2YRT7RNW.mjs';
16
+ export { propsToCSSVars } from '../../chunk-2YRT7RNW.mjs';
17
17
  import '../../chunk-GFSLVQIG.mjs';
18
- import '../../chunk-C236BQQB.mjs';
19
- import '../../chunk-L4XGZAZ5.mjs';
20
- import '../../chunk-NQ2ZSGCX.mjs';
18
+ import '../../chunk-AE6P4KJB.mjs';
19
+ import { useAppSelector, useAppDispatch } from '../../chunk-A575ZW4A.mjs';
20
+ export { useAppDispatch, useAppSelector, useAppStore } from '../../chunk-A575ZW4A.mjs';
21
21
  export { UnstableShortcutMetaKeywords, UnstableShortcutRepresentation, buildShortcut, defaultPlatformModifier, getPlatform, getPlatformModifier, isIOSish, isIpadOS, isMacish, metaKeys } from '../../chunk-5LUMM7FW.mjs';
22
- import { StatefulLoader } from '../../chunk-OWHP7ONM.mjs';
22
+ import '../../chunk-NQ2ZSGCX.mjs';
23
+ import { StatefulLoader } from '../../chunk-IVXRCKWR.mjs';
23
24
  import '../../chunk-RRDEPGBK.mjs';
24
- import '../../chunk-4ODYHZKD.mjs';
25
+ import '../../chunk-P6ILEQ5P.mjs';
25
26
  import '../../chunk-YZ73DHRU.mjs';
26
- export { DEFAULT_CONFIG, i18n, initI18n, useI18n } from '../../chunk-IYAFKTPL.mjs';
27
- import '../../chunk-B3WDMWCT.mjs';
27
+ export { DEFAULT_CONFIG, i18n, initI18n, useI18n } from '../../chunk-NUXGQWED.mjs';
28
28
  import '../../chunk-MLEYTQGK.mjs';
29
+ import '../../chunk-B3WDMWCT.mjs';
29
30
  import '../../chunk-3GDQP6AS.mjs';
30
31
  import { lazy, useState, useEffect, Suspense, useRef } from 'react';
32
+ import { getScriptMode } from '@readium/navigator';
31
33
  import { jsx } from 'react/jsx-runtime';
32
34
 
33
35
  var useCoverBlobUrl = (coverUrl) => {
@@ -102,7 +104,7 @@ var StatefulAudioContent = ({ publication, localDataKey, positionStorage, coverU
102
104
  const dispatch = useAppDispatch();
103
105
  const { coverBlobUrl, coverReady } = useCoverBlobUrl(coverUrl);
104
106
  const { themeResolved } = useTheming({
105
- theme: themeObject.audio,
107
+ theme: themeObject.audio ?? "auto",
106
108
  themeKeys: preferences.theming.themes.keys,
107
109
  systemKeys: preferences.theming.themes.systemThemes,
108
110
  breakpointsMap: preferences.theming.breakpoints,
@@ -136,7 +138,7 @@ var StatefulReaderContent = ({ profile, publication, plugins, coverUrl, ...props
136
138
  if (!publication) return;
137
139
  const resolvedLang = resolveFontLanguage(
138
140
  publication.metadata.languages?.[0],
139
- publication.metadata.effectiveReadingProgression
141
+ getScriptMode(publication.metadata)
140
142
  );
141
143
  dispatch(setFontLanguage(resolvedLang));
142
144
  }, [publication, resolveFontLanguage, dispatch]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/useCoverBlobUrl.ts","../../../src/components/Reader/StatefulReaderWrapper.tsx"],"names":["StatefulPlayer","useState","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAAM,eAAA,GAAkB,CAAC,QAAA,KAA4F;AAC1H,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAA6B,MAAS,CAAA;AAC9E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,OAAiC,MAAS,CAAA;AAE5D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA;AACtC,IAAA,IAAI,SAAA;AACJ,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,MAAA,EAAQ,UAAA,CAAW,QAAQ,CAAA,CACzC,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CAClB,KAAK,CAAA,IAAA,KAAQ;AACZ,MAAA,SAAA,GAAY,GAAA,CAAI,gBAAgB,IAAI,CAAA;AACpC,MAAA,SAAA,CAAU,OAAA,GAAU,MAAM,GAAA,CAAI,eAAA,CAAgB,SAAU,CAAA;AACxD,MAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,IAC3B,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,MAAA,IAAI,GAAA,CAAI,SAAS,YAAA,EAAc;AAC/B,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACrB,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,CAAW,KAAA,EAAM;AACjB,MAAA,SAAA,CAAU,OAAA,IAAU;AACpB,MAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,UAAA,EAAY,CAAC,QAAA,IAAY,CAAC,CAAC,YAAA,IAAgB;AAAA,GAC7C;AACF,CAAA;ACDA,IAAM,kBAAA,GAAqB,IAAA,CAAK,MAAM,OAAO,mBAAmB,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,MAAQ,EAAE,OAAA,EAAS,GAAA,CAAI,cAAA,GAAiB,CAAC,CAAA;AAChH,IAAM,oBAAA,GAAuB,IAAA,CAAK,MAAM,OAAO,qBAAqB,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,MAAQ,EAAE,OAAA,EAAS,GAAA,CAAI,gCAAA,GAAmC,CAAC,CAAA;AACtI,IAAMA,eAAAA,GAAiB,IAAA,CAAK,MAAM,OAAO,oBAAoB,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,MAAQ,EAAE,OAAA,EAAS,GAAA,CAAI,cAAA,GAAiB,CAAC,CAAA;AA0CtG,IAAM,qBAAA,GAAwB,CAAC,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,WAAA,EAAa,GAAG,KAAA,EAAM,KAAsC;AAClJ,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,SAAiC,MAAS,CAAA;AAExF,EAAA,MAAM,cAAA,GAAiB,OAAA,KAAY,MAAA,GAAS,OAAA,EAAS,IAAA,GACjD,OAAA,KAAY,QAAA,GAAW,OAAA,EAAS,MAAA,GAChC,OAAA,KAAY,OAAA,GAAU,OAAA,EAAS,KAAA,GAC/B,MAAA;AAEJ,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,MAAA,CAAO,KAAK,kBAAkB,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,kBAAA,CAAmB,MAAM,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,IAAI,cAAA,IAAkB,eAAA,KAAoB,MAAA,EAAW,OAAO,IAAA;AAE5D,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,WAAA,EAAa,QAAA,EAAS,EAAG,IAAA;AAEhD,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,uBACE,GAAA;AAAA,MAAC,0BAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAAA,QACnC,oBAAqB,WAAA,EAAa,kBAAA;AAAA,QAClC,SAAU,WAAA,EAAa,OAAA;AAAA,QAEvB,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAiB,GAAG,WAAA,EACnB,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAuB,GAAG,KAAA,EAAQ,QAAA,EAAsB,eAAA,EAAkB,SAAA,IAAa,KAAA,EAAQ,CAAA,EAClG;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAAA,MACnC,oBAAqB,WAAA,EAAa,kBAAA;AAAA,MAClC,SAAU,WAAA,EAAa,OAAA;AAAA,MAEvB,8BAAC,cAAA,EAAA,EAAiB,GAAG,aACnB,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,WAAY,SAAA,IAAa,KAAA,EACvC,QAAA,kBAAA,GAAA,CAAC,qBAAA,EAAA,EAAsB,SAAsB,GAAG,KAAA,EAAQ,UAAsB,OAAA,EAAU,eAAA,EAAkB,GAC5G,CAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAYA,IAAM,oBAAA,GAAuB,CAAC,EAAE,WAAA,EAAa,cAAc,eAAA,EAAiB,QAAA,EAAU,iBAAgB,KAAyB;AAC7H,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,mBAAA,EAAoB;AAC5C,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,CAAA,KAAA,KAAS,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/D,EAAA,MAAM,WAAW,cAAA,EAAe;AAEhC,EAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAW,GAAI,gBAAgB,QAAQ,CAAA;AAE7D,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,UAAA,CAAyB;AAAA,IACjD,OAAO,WAAA,CAAY,KAAA;AAAA,IACnB,SAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,IACtC,UAAA,EAAY,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,YAAA;AAAA,IACvC,cAAA,EAAgB,YAAY,OAAA,CAAQ,WAAA;AAAA,IACpC,QAAA,EAAU,YAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAA,EAAW;AAAA,MACT,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,EAAE,MAAA,EAAQ,YAAA,CAAa,MAAM,CAAA,EAAG,CAAA;AAAA,MAC5E,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,MAAA,EAAQ;AAAA,QAC5C,MAAA,EAAQ,aAAa,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,CAAC,IAAA,EAAM,SAAA,EAAW,YAAY,aAAa;AAAA,OACrD;AAAA,KACH;AAAA,IACA,uBAAuB,CAAC,WAAA,KAAgB,QAAA,CAAS,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,IAC3E,oBAAoB,CAAC,UAAA,KAAe,QAAA,CAAS,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,IACtE,qBAAqB,CAAC,WAAA,KAAgB,QAAA,CAAS,cAAA,CAAe,WAAW,CAAC,CAAA;AAAA,IAC1E,kBAAkB,CAAC,QAAA,KAAa,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAC,CAAA;AAAA,IAC9D,sBAAsB,CAAC,YAAA,KAAiB,QAAA,CAAS,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,IAC9E,oBAAoB,CAAC,YAAA,KAAiB,QAAA,CAAS,aAAA,CAAc,YAAY,CAAC,CAAA;AAAA,IAC1E,uBAAuB,CAAC,aAAA,KAAkB,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AAAA,IAClF,6BAA6B,CAAC,mBAAA,KAAwB,QAAA,CAAS,sBAAA,CAAuB,mBAAmB,CAAC;AAAA,GAC3G,CAAA;AAED,EAAA,2BACG,cAAA,EAAA,EAAe,SAAA,EAAY,mBAAmB,CAAC,aAAA,IAAiB,CAAC,UAAA,EAChE,QAAA,kBAAA,GAAA,CAAC,YACC,QAAA,kBAAA,GAAA,CAACF,eAAAA,EAAA,EAAe,WAAA,EAA4B,YAAA,EAA8B,iBAAoC,QAAA,EAAW,YAAA,EAAe,GAC1I,CAAA,EACF,CAAA;AAEJ,CAAA;AAaA,IAAM,qBAAA,GAAwB,CAAC,EAAE,OAAA,EAAS,aAAa,OAAA,EAAS,QAAA,EAAU,GAAG,KAAA,EAAM,KAA0B;AAC3G,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAI,cAAA,EAAe;AAC5D,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,CAAA,KAAA,KAAS,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,CAAA,KAAA,KAAS,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,QAAQ,OAAA,KAAY,MAAA,GAAU,KAAA,GAAQ,WAAA,CAAY,MAAM,WAAA,CAAY,MAAA,GAAA,OAAA;AAC1E,EAAA,MAAM,WAAW,cAAA,EAAe;AAEhC,EAAAE,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,YAAA,GAAe,mBAAA;AAAA,MACnB,WAAA,CAAY,QAAA,CAAS,SAAA,GAAY,CAAC,CAAA;AAAA,MAClC,YAAY,QAAA,CAAS;AAAA,KACvB;AACA,IAAA,QAAA,CAAS,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,WAAA,EAAa,mBAAA,EAAqB,QAAQ,CAAC,CAAA;AAE/C,EAAA,UAAA,CAAyB;AAAA,IACvB,KAAA;AAAA,IACA,SAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,IACtC,UAAA,EAAY,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,YAAA;AAAA,IACvC,cAAA,EAAgB,YAAY,OAAA,CAAQ,WAAA;AAAA,IACpC,QAAA;AAAA,IACA,eAAA,EAAiB,QAAA;AAAA,IACjB,SAAA,EAAW;AAAA,MACT,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,EAAE,MAAA,EAAQ,YAAA,CAAa,OAAO,CAAA,EAAG,CAAA;AAAA,MAC9E,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,EAAE,MAAA,EAAQ,YAAA,CAAa,MAAM,CAAA,EAAG,CAAA;AAAA,MAC5E,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,MAAA,EAAQ;AAAA,QAC5C,MAAA,EAAQ,aAAa,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,CAAC,IAAI;AAAA,OACf;AAAA,KACH;AAAA,IACA,uBAAuB,CAAC,WAAA,KAAgB,QAAA,CAAS,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,IAC3E,oBAAoB,CAAC,UAAA,KAAe,QAAA,CAAS,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,IACtE,qBAAqB,CAAC,WAAA,KAAgB,QAAA,CAAS,cAAA,CAAe,WAAW,CAAC,CAAA;AAAA,IAC1E,kBAAkB,CAAC,QAAA,KAAa,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAC,CAAA;AAAA,IAC9D,sBAAsB,CAAC,YAAA,KAAiB,QAAA,CAAS,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,IAC9E,oBAAoB,CAAC,YAAA,KAAiB,QAAA,CAAS,aAAA,CAAc,YAAY,CAAC,CAAA;AAAA,IAC1E,uBAAuB,CAAC,aAAA,KAAkB,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AAAA,IAClF,6BAA6B,CAAC,mBAAA,KAAwB,QAAA,CAAS,sBAAA,CAAuB,mBAAmB,CAAC;AAAA,GAC3G,CAAA;AAED,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,YAAS,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,aAA8B,GAAG,KAAA,EAAQ,SAAoB,CAAA,EAAE,CAAA;AAAA,IACtG,KAAK,QAAA;AAAA,IACL;AACE,MAAA,uBAAO,GAAA,CAAC,YAAS,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,aAA8B,GAAG,KAAA,EAAQ,SAAoB,CAAA,EAAE,CAAA;AAAA;AAE5G,CAAA","file":"index.mjs","sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport { proxyUrl } from \"@/helpers/proxyUrl\";\n\nexport const useCoverBlobUrl = (coverUrl: string | undefined): { coverBlobUrl: string | undefined; coverReady: boolean } => {\n const [coverBlobUrl, setCoverBlobUrl] = useState<string | undefined>(undefined);\n const [coverFailed, setCoverFailed] = useState(false);\n const revokeRef = useRef<(() => void) | undefined>(undefined);\n\n useEffect(() => {\n if (!coverUrl) return;\n const controller = new AbortController();\n const fetched = proxyUrl(coverUrl) ?? coverUrl;\n let objectUrl: string | undefined;\n fetch(fetched, { signal: controller.signal })\n .then(r => r.blob())\n .then(blob => {\n objectUrl = URL.createObjectURL(blob);\n revokeRef.current = () => URL.revokeObjectURL(objectUrl!);\n setCoverBlobUrl(objectUrl);\n })\n .catch((err) => {\n if (err.name === \"AbortError\") return;\n setCoverFailed(true);\n });\n return () => {\n controller.abort();\n revokeRef.current?.();\n revokeRef.current = undefined;\n };\n }, [coverUrl]);\n\n return {\n coverBlobUrl,\n coverReady: !coverUrl || !!coverBlobUrl || coverFailed,\n };\n};\n","import { lazy, Suspense, useState, useEffect } from \"react\";\n\nimport { Publication, Locator } from \"@readium/shared\";\nimport { ThThemeKeys, ThemeKeyType, useTheming } from \"@/preferences\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useAudioPreferences } from \"@/preferences/hooks/useAudioPreferences\";\nimport { ThAudioPreferencesProvider } from \"@/preferences/ThAudioPreferencesProvider\";\nimport { ThPreferencesProvider } from \"@/preferences/ThPreferencesProvider\";\nimport { ThI18nProvider } from \"@/i18n/ThI18nProvider\";\n\nimport { useAppSelector, useAppDispatch } from \"@/lib/hooks\";\nimport {\n setBreakpoint,\n setColorScheme,\n setContrast,\n setForcedColors,\n setMonochrome,\n setReducedMotion,\n setReducedTransparency,\n setCoverTheme\n} from \"@/lib/themeReducer\";\nimport { setFontLanguage } from \"@/lib/publicationReducer\";\nimport { propsToCSSVars } from \"@/core/Helpers/propsToCSSVars\";\nimport { prefixString } from \"@/core/Helpers/prefixString\";\nimport { useCoverBlobUrl } from \"@/hooks/useCoverBlobUrl\";\nimport { ThPlugin } from \"../Plugins\";\nimport { StatefulLoader } from \"@/components/Misc\";\nimport { ThPreferences, CustomizableKeys } from \"@/preferences/preferences\";\nimport { ThAudioPreferences } from \"@/preferences/audioPreferences\";\nimport { ThPreferencesAdapter } from \"@/preferences/adapters/ThPreferencesAdapter\";\nimport { ThAudioPreferencesAdapter } from \"@/preferences/adapters/ThAudioPreferencesAdapter\";\nimport { InitOptions } from \"i18next\";\n\nconst StatefulEpubReader = lazy(() => import(\"@/components/Epub\").then(mod => ({ default: mod.StatefulReader })));\nconst StatefulWebPubReader = lazy(() => import(\"@/components/WebPub\").then(mod => ({ default: mod.ExperimentalWebPubStatefulReader })));\nconst StatefulPlayer = lazy(() => import(\"@/components/Audio\").then(mod => ({ default: mod.StatefulPlayer })));\n\nexport interface PositionStorage {\n get: () => Locator | undefined;\n set: (locator: Locator) => void | Promise<void>;\n}\n\nexport interface StatefulReaderProps {\n publication: Publication;\n localDataKey: string | null;\n plugins?: ThPlugin[];\n positionStorage?: PositionStorage;\n}\n\nexport type ThPluginFactory = () => ThPlugin[] | Promise<ThPlugin[]>;\n\nexport interface ReaderPlugins {\n epub?: ThPluginFactory;\n webPub?: ThPluginFactory;\n audio?: ThPluginFactory;\n}\n\nexport interface ReaderComponentProps<\n P extends \"epub\" | \"webPub\" | \"audio\" | undefined | null = undefined,\n K extends CustomizableKeys = {}\n> {\n profile: P;\n publication: Publication;\n localDataKey: string | null;\n isLoading?: boolean;\n positionStorage?: PositionStorage;\n plugins?: ReaderPlugins;\n i18n?: Partial<InitOptions>;\n preferences?: P extends \"audio\"\n ? { initialPreferences?: ThAudioPreferences<K>; adapter?: ThAudioPreferencesAdapter<K> }\n : P extends \"epub\" | \"webPub\"\n ? { initialPreferences?: ThPreferences<K>; adapter?: ThPreferencesAdapter<K> }\n : never;\n}\n\n// ─── Outer wrapper — selects provider based on profile ────────────────────────\n\nexport const StatefulReaderWrapper = ({ profile, plugins, isLoading, preferences, i18n: i18nOptions, ...props }: ReaderComponentProps<any, any>) => {\n const [resolvedPlugins, setResolvedPlugins] = useState<ThPlugin[] | undefined>(undefined);\n\n const pendingFactory = profile === \"epub\" ? plugins?.epub\n : profile === \"webPub\" ? plugins?.webPub\n : profile === \"audio\" ? plugins?.audio\n : undefined;\n\n useEffect(() => {\n if (!pendingFactory) return;\n const result = pendingFactory();\n if (result instanceof Promise) {\n result.then(setResolvedPlugins);\n } else {\n setResolvedPlugins(result);\n }\n }, [pendingFactory]);\n\n if (pendingFactory && resolvedPlugins === undefined) return null;\n\n const coverUrl = props.publication?.getCover()?.href;\n\n if (profile === \"audio\") {\n return (\n <ThAudioPreferencesProvider\n devMode={ process.env.NODE_ENV !== \"production\" }\n initialPreferences={ preferences?.initialPreferences as ThAudioPreferences<any> | undefined }\n adapter={ preferences?.adapter as ThAudioPreferencesAdapter<any> | undefined }\n >\n <ThI18nProvider { ...i18nOptions }>\n <StatefulAudioContent { ...props } coverUrl={ coverUrl } externalLoading={ isLoading ?? false } />\n </ThI18nProvider>\n </ThAudioPreferencesProvider>\n );\n }\n\n return (\n <ThPreferencesProvider\n devMode={ process.env.NODE_ENV !== \"production\" }\n initialPreferences={ preferences?.initialPreferences as ThPreferences<any> | undefined }\n adapter={ preferences?.adapter as ThPreferencesAdapter<any> | undefined }\n >\n <ThI18nProvider { ...i18nOptions }>\n <StatefulLoader isLoading={ isLoading ?? false }>\n <StatefulReaderContent profile={ profile } { ...props } coverUrl={ coverUrl } plugins={ resolvedPlugins } />\n </StatefulLoader>\n </ThI18nProvider>\n </ThPreferencesProvider>\n );\n};\n\n// ─── Audio inner content ──────────────────────────────────────────────────────\n\ninterface AudioContentProps {\n publication: Publication;\n localDataKey: string | null;\n positionStorage?: PositionStorage;\n coverUrl?: string;\n externalLoading: boolean;\n}\n\nconst StatefulAudioContent = ({ publication, localDataKey, positionStorage, coverUrl, externalLoading }: AudioContentProps) => {\n const { preferences } = useAudioPreferences();\n const themeObject = useAppSelector(state => state.theming.theme);\n const dispatch = useAppDispatch();\n\n const { coverBlobUrl, coverReady } = useCoverBlobUrl(coverUrl);\n\n const { themeResolved } = useTheming<ThemeKeyType>({\n theme: themeObject.audio,\n themeKeys: preferences.theming.themes.keys,\n systemKeys: preferences.theming.themes.systemThemes,\n breakpointsMap: preferences.theming.breakpoints,\n coverUrl: coverBlobUrl,\n autoThemeSource: \"cover\",\n initProps: {\n ...propsToCSSVars(preferences.theming.icon, { prefix: prefixString(\"icon\") }),\n ...propsToCSSVars(preferences.theming.layout, {\n prefix: prefixString(\"layout\"),\n exclude: [\"ui\", \"compact\", \"expanded\", \"progressBar\"]\n })\n },\n onCoverThemeGenerated: (themeTokens) => dispatch(setCoverTheme(themeTokens)),\n onBreakpointChange: (breakpoint) => dispatch(setBreakpoint(breakpoint)),\n onColorSchemeChange: (colorScheme) => dispatch(setColorScheme(colorScheme)),\n onContrastChange: (contrast) => dispatch(setContrast(contrast)),\n onForcedColorsChange: (forcedColors) => dispatch(setForcedColors(forcedColors)),\n onMonochromeChange: (isMonochrome) => dispatch(setMonochrome(isMonochrome)),\n onReducedMotionChange: (reducedMotion) => dispatch(setReducedMotion(reducedMotion)),\n onReducedTransparencyChange: (reducedTransparency) => dispatch(setReducedTransparency(reducedTransparency))\n });\n\n return (\n <StatefulLoader isLoading={ externalLoading || !themeResolved || !coverReady }>\n <Suspense>\n <StatefulPlayer publication={ publication } localDataKey={ localDataKey } positionStorage={ positionStorage } coverUrl={ coverBlobUrl } />\n </Suspense>\n </StatefulLoader>\n );\n};\n\n// ─── Reader inner content ─────────────────────────────────────────────────────\n\ninterface ReaderContentProps {\n profile: \"epub\" | \"webPub\" | undefined | null;\n publication: Publication;\n localDataKey: string | null;\n positionStorage?: PositionStorage;\n plugins?: ThPlugin[];\n coverUrl?: string;\n}\n\nconst StatefulReaderContent = ({ profile, publication, plugins, coverUrl, ...props }: ReaderContentProps) => {\n const { preferences, resolveFontLanguage } = usePreferences();\n const themeObject = useAppSelector(state => state.theming.theme);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const theme = profile === \"epub\" ? (isFXL ? themeObject.fxl : themeObject.reflow) : ThThemeKeys.light;\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (!publication) return;\n const resolvedLang = resolveFontLanguage(\n publication.metadata.languages?.[0],\n publication.metadata.effectiveReadingProgression\n );\n dispatch(setFontLanguage(resolvedLang));\n }, [publication, resolveFontLanguage, dispatch]);\n\n useTheming<ThemeKeyType>({\n theme,\n themeKeys: preferences.theming.themes.keys,\n systemKeys: preferences.theming.themes.systemThemes,\n breakpointsMap: preferences.theming.breakpoints,\n coverUrl,\n autoThemeSource: \"system\",\n initProps: {\n ...propsToCSSVars(preferences.theming.arrow, { prefix: prefixString(\"arrow\") }),\n ...propsToCSSVars(preferences.theming.icon, { prefix: prefixString(\"icon\") }),\n ...propsToCSSVars(preferences.theming.layout, {\n prefix: prefixString(\"layout\"),\n exclude: [\"ui\"]\n })\n },\n onCoverThemeGenerated: (themeTokens) => dispatch(setCoverTheme(themeTokens)),\n onBreakpointChange: (breakpoint) => dispatch(setBreakpoint(breakpoint)),\n onColorSchemeChange: (colorScheme) => dispatch(setColorScheme(colorScheme)),\n onContrastChange: (contrast) => dispatch(setContrast(contrast)),\n onForcedColorsChange: (forcedColors) => dispatch(setForcedColors(forcedColors)),\n onMonochromeChange: (isMonochrome) => dispatch(setMonochrome(isMonochrome)),\n onReducedMotionChange: (reducedMotion) => dispatch(setReducedMotion(reducedMotion)),\n onReducedTransparencyChange: (reducedTransparency) => dispatch(setReducedTransparency(reducedTransparency))\n });\n\n switch (profile) {\n case \"epub\":\n return <Suspense><StatefulEpubReader publication={ publication } { ...props } plugins={ plugins } /></Suspense>;\n case \"webPub\":\n default:\n return <Suspense><StatefulWebPubReader publication={ publication } { ...props } plugins={ plugins } /></Suspense>;\n }\n};\n"]}
1
+ {"version":3,"sources":["../../../src/hooks/useCoverBlobUrl.ts","../../../src/components/Reader/StatefulReaderWrapper.tsx"],"names":["StatefulPlayer","useState","useEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAAM,eAAA,GAAkB,CAAC,QAAA,KAA4F;AAC1H,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAA6B,MAAS,CAAA;AAC9E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,OAAiC,MAAS,CAAA;AAE5D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA;AACtC,IAAA,IAAI,SAAA;AACJ,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,MAAA,EAAQ,UAAA,CAAW,QAAQ,CAAA,CACzC,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CAClB,KAAK,CAAA,IAAA,KAAQ;AACZ,MAAA,SAAA,GAAY,GAAA,CAAI,gBAAgB,IAAI,CAAA;AACpC,MAAA,SAAA,CAAU,OAAA,GAAU,MAAM,GAAA,CAAI,eAAA,CAAgB,SAAU,CAAA;AACxD,MAAA,eAAA,CAAgB,SAAS,CAAA;AAAA,IAC3B,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,MAAA,IAAI,GAAA,CAAI,SAAS,YAAA,EAAc;AAC/B,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACrB,CAAC,CAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,CAAW,KAAA,EAAM;AACjB,MAAA,SAAA,CAAU,OAAA,IAAU;AACpB,MAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,UAAA,EAAY,CAAC,QAAA,IAAY,CAAC,CAAC,YAAA,IAAgB;AAAA,GAC7C;AACF,CAAA;ACAA,IAAM,kBAAA,GAAqB,IAAA,CAAK,MAAM,OAAO,mBAAmB,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,MAAQ,EAAE,OAAA,EAAS,GAAA,CAAI,cAAA,GAAiB,CAAC,CAAA;AAChH,IAAM,oBAAA,GAAuB,IAAA,CAAK,MAAM,OAAO,qBAAqB,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,MAAQ,EAAE,OAAA,EAAS,GAAA,CAAI,gCAAA,GAAmC,CAAC,CAAA;AACtI,IAAMA,eAAAA,GAAiB,IAAA,CAAK,MAAM,OAAO,oBAAoB,CAAA,CAAE,IAAA,CAAK,CAAA,GAAA,MAAQ,EAAE,OAAA,EAAS,GAAA,CAAI,cAAA,GAAiB,CAAC,CAAA;AA0CtG,IAAM,qBAAA,GAAwB,CAAC,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,WAAA,EAAa,GAAG,KAAA,EAAM,KAAsC;AAClJ,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,SAAiC,MAAS,CAAA;AAExF,EAAA,MAAM,cAAA,GAAiB,OAAA,KAAY,MAAA,GAAS,OAAA,EAAS,IAAA,GACjD,OAAA,KAAY,QAAA,GAAW,OAAA,EAAS,MAAA,GAChC,OAAA,KAAY,OAAA,GAAU,OAAA,EAAS,KAAA,GAC/B,MAAA;AAEJ,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,cAAA,EAAgB;AACrB,IAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,MAAA,CAAO,KAAK,kBAAkB,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,kBAAA,CAAmB,MAAM,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,IAAI,cAAA,IAAkB,eAAA,KAAoB,MAAA,EAAW,OAAO,IAAA;AAE5D,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,WAAA,EAAa,QAAA,EAAS,EAAG,IAAA;AAEhD,EAAA,IAAI,YAAY,OAAA,EAAS;AACvB,IAAA,uBACE,GAAA;AAAA,MAAC,0BAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAAA,QACnC,oBAAqB,WAAA,EAAa,kBAAA;AAAA,QAClC,SAAU,WAAA,EAAa,OAAA;AAAA,QAEvB,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAiB,GAAG,WAAA,EACnB,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAuB,GAAG,KAAA,EAAQ,QAAA,EAAsB,eAAA,EAAkB,SAAA,IAAa,KAAA,EAAQ,CAAA,EAClG;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA;AAAA,MACnC,oBAAqB,WAAA,EAAa,kBAAA;AAAA,MAClC,SAAU,WAAA,EAAa,OAAA;AAAA,MAEvB,8BAAC,cAAA,EAAA,EAAiB,GAAG,aACnB,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,WAAY,SAAA,IAAa,KAAA,EACvC,QAAA,kBAAA,GAAA,CAAC,qBAAA,EAAA,EAAsB,SAAsB,GAAG,KAAA,EAAQ,UAAsB,OAAA,EAAU,eAAA,EAAkB,GAC5G,CAAA,EACF;AAAA;AAAA,GACF;AAEJ;AAYA,IAAM,oBAAA,GAAuB,CAAC,EAAE,WAAA,EAAa,cAAc,eAAA,EAAiB,QAAA,EAAU,iBAAgB,KAAyB;AAC7H,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,mBAAA,EAAoB;AAC5C,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,CAAA,KAAA,KAAS,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/D,EAAA,MAAM,WAAW,cAAA,EAAe;AAEhC,EAAA,MAAM,EAAE,YAAA,EAAc,UAAA,EAAW,GAAI,gBAAgB,QAAQ,CAAA;AAE7D,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,UAAA,CAAyB;AAAA,IACjD,KAAA,EAAO,YAAY,KAAA,IAAS,MAAA;AAAA,IAC5B,SAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,IACtC,UAAA,EAAY,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,YAAA;AAAA,IACvC,cAAA,EAAgB,YAAY,OAAA,CAAQ,WAAA;AAAA,IACpC,QAAA,EAAU,YAAA;AAAA,IACV,eAAA,EAAiB,OAAA;AAAA,IACjB,SAAA,EAAW;AAAA,MACT,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,EAAE,MAAA,EAAQ,YAAA,CAAa,MAAM,CAAA,EAAG,CAAA;AAAA,MAC5E,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,MAAA,EAAQ;AAAA,QAC5C,MAAA,EAAQ,aAAa,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,CAAC,IAAA,EAAM,SAAA,EAAW,YAAY,aAAa;AAAA,OACrD;AAAA,KACH;AAAA,IACA,uBAAuB,CAAC,WAAA,KAAgB,QAAA,CAAS,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,IAC3E,oBAAoB,CAAC,UAAA,KAAe,QAAA,CAAS,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,IACtE,qBAAqB,CAAC,WAAA,KAAgB,QAAA,CAAS,cAAA,CAAe,WAAW,CAAC,CAAA;AAAA,IAC1E,kBAAkB,CAAC,QAAA,KAAa,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAC,CAAA;AAAA,IAC9D,sBAAsB,CAAC,YAAA,KAAiB,QAAA,CAAS,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,IAC9E,oBAAoB,CAAC,YAAA,KAAiB,QAAA,CAAS,aAAA,CAAc,YAAY,CAAC,CAAA;AAAA,IAC1E,uBAAuB,CAAC,aAAA,KAAkB,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AAAA,IAClF,6BAA6B,CAAC,mBAAA,KAAwB,QAAA,CAAS,sBAAA,CAAuB,mBAAmB,CAAC;AAAA,GAC3G,CAAA;AAED,EAAA,2BACG,cAAA,EAAA,EAAe,SAAA,EAAY,mBAAmB,CAAC,aAAA,IAAiB,CAAC,UAAA,EAChE,QAAA,kBAAA,GAAA,CAAC,YACC,QAAA,kBAAA,GAAA,CAACF,eAAAA,EAAA,EAAe,WAAA,EAA4B,YAAA,EAA8B,iBAAoC,QAAA,EAAW,YAAA,EAAe,GAC1I,CAAA,EACF,CAAA;AAEJ,CAAA;AAaA,IAAM,qBAAA,GAAwB,CAAC,EAAE,OAAA,EAAS,aAAa,OAAA,EAAS,QAAA,EAAU,GAAG,KAAA,EAAM,KAA0B;AAC3G,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAI,cAAA,EAAe;AAC5D,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,CAAA,KAAA,KAAS,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,CAAA,KAAA,KAAS,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,QAAQ,OAAA,KAAY,MAAA,GAAU,KAAA,GAAQ,WAAA,CAAY,MAAM,WAAA,CAAY,MAAA,GAAA,OAAA;AAC1E,EAAA,MAAM,WAAW,cAAA,EAAe;AAEhC,EAAAE,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,YAAA,GAAe,mBAAA;AAAA,MACnB,WAAA,CAAY,QAAA,CAAS,SAAA,GAAY,CAAC,CAAA;AAAA,MAClC,aAAA,CAAc,YAAY,QAAQ;AAAA,KACpC;AACA,IAAA,QAAA,CAAS,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,WAAA,EAAa,mBAAA,EAAqB,QAAQ,CAAC,CAAA;AAE/C,EAAA,UAAA,CAAyB;AAAA,IACvB,KAAA;AAAA,IACA,SAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,IACtC,UAAA,EAAY,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,YAAA;AAAA,IACvC,cAAA,EAAgB,YAAY,OAAA,CAAQ,WAAA;AAAA,IACpC,QAAA;AAAA,IACA,eAAA,EAAiB,QAAA;AAAA,IACjB,SAAA,EAAW;AAAA,MACT,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,KAAA,EAAO,EAAE,MAAA,EAAQ,YAAA,CAAa,OAAO,CAAA,EAAG,CAAA;AAAA,MAC9E,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,IAAA,EAAM,EAAE,MAAA,EAAQ,YAAA,CAAa,MAAM,CAAA,EAAG,CAAA;AAAA,MAC5E,GAAG,cAAA,CAAe,WAAA,CAAY,OAAA,CAAQ,MAAA,EAAQ;AAAA,QAC5C,MAAA,EAAQ,aAAa,QAAQ,CAAA;AAAA,QAC7B,OAAA,EAAS,CAAC,IAAI;AAAA,OACf;AAAA,KACH;AAAA,IACA,uBAAuB,CAAC,WAAA,KAAgB,QAAA,CAAS,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,IAC3E,oBAAoB,CAAC,UAAA,KAAe,QAAA,CAAS,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,IACtE,qBAAqB,CAAC,WAAA,KAAgB,QAAA,CAAS,cAAA,CAAe,WAAW,CAAC,CAAA;AAAA,IAC1E,kBAAkB,CAAC,QAAA,KAAa,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAC,CAAA;AAAA,IAC9D,sBAAsB,CAAC,YAAA,KAAiB,QAAA,CAAS,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,IAC9E,oBAAoB,CAAC,YAAA,KAAiB,QAAA,CAAS,aAAA,CAAc,YAAY,CAAC,CAAA;AAAA,IAC1E,uBAAuB,CAAC,aAAA,KAAkB,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AAAA,IAClF,6BAA6B,CAAC,mBAAA,KAAwB,QAAA,CAAS,sBAAA,CAAuB,mBAAmB,CAAC;AAAA,GAC3G,CAAA;AAED,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,MAAA;AACH,MAAA,uBAAO,GAAA,CAAC,YAAS,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,aAA8B,GAAG,KAAA,EAAQ,SAAoB,CAAA,EAAE,CAAA;AAAA,IACtG,KAAK,QAAA;AAAA,IACL;AACE,MAAA,uBAAO,GAAA,CAAC,YAAS,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,aAA8B,GAAG,KAAA,EAAQ,SAAoB,CAAA,EAAE,CAAA;AAAA;AAE5G,CAAA","file":"index.mjs","sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport { proxyUrl } from \"@/helpers/proxyUrl\";\n\nexport const useCoverBlobUrl = (coverUrl: string | undefined): { coverBlobUrl: string | undefined; coverReady: boolean } => {\n const [coverBlobUrl, setCoverBlobUrl] = useState<string | undefined>(undefined);\n const [coverFailed, setCoverFailed] = useState(false);\n const revokeRef = useRef<(() => void) | undefined>(undefined);\n\n useEffect(() => {\n if (!coverUrl) return;\n const controller = new AbortController();\n const fetched = proxyUrl(coverUrl) ?? coverUrl;\n let objectUrl: string | undefined;\n fetch(fetched, { signal: controller.signal })\n .then(r => r.blob())\n .then(blob => {\n objectUrl = URL.createObjectURL(blob);\n revokeRef.current = () => URL.revokeObjectURL(objectUrl!);\n setCoverBlobUrl(objectUrl);\n })\n .catch((err) => {\n if (err.name === \"AbortError\") return;\n setCoverFailed(true);\n });\n return () => {\n controller.abort();\n revokeRef.current?.();\n revokeRef.current = undefined;\n };\n }, [coverUrl]);\n\n return {\n coverBlobUrl,\n coverReady: !coverUrl || !!coverBlobUrl || coverFailed,\n };\n};\n","import { lazy, Suspense, useState, useEffect } from \"react\";\n\nimport { Publication, Locator } from \"@readium/shared\";\nimport { getScriptMode } from \"@readium/navigator\";\nimport { ThThemeKeys, ThemeKeyType, useTheming } from \"@/preferences\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useAudioPreferences } from \"@/preferences/hooks/useAudioPreferences\";\nimport { ThAudioPreferencesProvider } from \"@/preferences/ThAudioPreferencesProvider\";\nimport { ThPreferencesProvider } from \"@/preferences/ThPreferencesProvider\";\nimport { ThI18nProvider } from \"@/i18n/ThI18nProvider\";\n\nimport { useAppSelector, useAppDispatch } from \"@/lib/hooks\";\nimport {\n setBreakpoint,\n setColorScheme,\n setContrast,\n setForcedColors,\n setMonochrome,\n setReducedMotion,\n setReducedTransparency,\n setCoverTheme\n} from \"@/lib/themeReducer\";\nimport { setFontLanguage } from \"@/lib/publicationReducer\";\nimport { propsToCSSVars } from \"@/core/Helpers/propsToCSSVars\";\nimport { prefixString } from \"@/core/Helpers/prefixString\";\nimport { useCoverBlobUrl } from \"@/hooks/useCoverBlobUrl\";\nimport { ThPlugin } from \"../Plugins\";\nimport { StatefulLoader } from \"@/components/Misc\";\nimport { ThPreferences, CustomizableKeys } from \"@/preferences/preferences\";\nimport { ThAudioPreferences } from \"@/preferences/audioPreferences\";\nimport { ThPreferencesAdapter } from \"@/preferences/adapters/ThPreferencesAdapter\";\nimport { ThAudioPreferencesAdapter } from \"@/preferences/adapters/ThAudioPreferencesAdapter\";\nimport { InitOptions } from \"i18next\";\n\nconst StatefulEpubReader = lazy(() => import(\"@/components/Epub\").then(mod => ({ default: mod.StatefulReader })));\nconst StatefulWebPubReader = lazy(() => import(\"@/components/WebPub\").then(mod => ({ default: mod.ExperimentalWebPubStatefulReader })));\nconst StatefulPlayer = lazy(() => import(\"@/components/Audio\").then(mod => ({ default: mod.StatefulPlayer })));\n\nexport interface PositionStorage {\n get: () => Locator | undefined;\n set: (locator: Locator) => void | Promise<void>;\n}\n\nexport interface StatefulReaderProps {\n publication: Publication;\n localDataKey: string | null;\n plugins?: ThPlugin[];\n positionStorage?: PositionStorage;\n}\n\nexport type ThPluginFactory = () => ThPlugin[] | Promise<ThPlugin[]>;\n\nexport interface ReaderPlugins {\n epub?: ThPluginFactory;\n webPub?: ThPluginFactory;\n audio?: ThPluginFactory;\n}\n\nexport interface ReaderComponentProps<\n P extends \"epub\" | \"webPub\" | \"audio\" | undefined | null = undefined,\n K extends CustomizableKeys = {}\n> {\n profile: P;\n publication: Publication;\n localDataKey: string | null;\n isLoading?: boolean;\n positionStorage?: PositionStorage;\n plugins?: ReaderPlugins;\n i18n?: Partial<InitOptions>;\n preferences?: P extends \"audio\"\n ? { initialPreferences?: ThAudioPreferences<K>; adapter?: ThAudioPreferencesAdapter<K> }\n : P extends \"epub\" | \"webPub\"\n ? { initialPreferences?: ThPreferences<K>; adapter?: ThPreferencesAdapter<K> }\n : never;\n}\n\n// ─── Outer wrapper — selects provider based on profile ────────────────────────\n\nexport const StatefulReaderWrapper = ({ profile, plugins, isLoading, preferences, i18n: i18nOptions, ...props }: ReaderComponentProps<any, any>) => {\n const [resolvedPlugins, setResolvedPlugins] = useState<ThPlugin[] | undefined>(undefined);\n\n const pendingFactory = profile === \"epub\" ? plugins?.epub\n : profile === \"webPub\" ? plugins?.webPub\n : profile === \"audio\" ? plugins?.audio\n : undefined;\n\n useEffect(() => {\n if (!pendingFactory) return;\n const result = pendingFactory();\n if (result instanceof Promise) {\n result.then(setResolvedPlugins);\n } else {\n setResolvedPlugins(result);\n }\n }, [pendingFactory]);\n\n if (pendingFactory && resolvedPlugins === undefined) return null;\n\n const coverUrl = props.publication?.getCover()?.href;\n\n if (profile === \"audio\") {\n return (\n <ThAudioPreferencesProvider\n devMode={ process.env.NODE_ENV !== \"production\" }\n initialPreferences={ preferences?.initialPreferences as ThAudioPreferences<any> | undefined }\n adapter={ preferences?.adapter as ThAudioPreferencesAdapter<any> | undefined }\n >\n <ThI18nProvider { ...i18nOptions }>\n <StatefulAudioContent { ...props } coverUrl={ coverUrl } externalLoading={ isLoading ?? false } />\n </ThI18nProvider>\n </ThAudioPreferencesProvider>\n );\n }\n\n return (\n <ThPreferencesProvider\n devMode={ process.env.NODE_ENV !== \"production\" }\n initialPreferences={ preferences?.initialPreferences as ThPreferences<any> | undefined }\n adapter={ preferences?.adapter as ThPreferencesAdapter<any> | undefined }\n >\n <ThI18nProvider { ...i18nOptions }>\n <StatefulLoader isLoading={ isLoading ?? false }>\n <StatefulReaderContent profile={ profile } { ...props } coverUrl={ coverUrl } plugins={ resolvedPlugins } />\n </StatefulLoader>\n </ThI18nProvider>\n </ThPreferencesProvider>\n );\n};\n\n// ─── Audio inner content ──────────────────────────────────────────────────────\n\ninterface AudioContentProps {\n publication: Publication;\n localDataKey: string | null;\n positionStorage?: PositionStorage;\n coverUrl?: string;\n externalLoading: boolean;\n}\n\nconst StatefulAudioContent = ({ publication, localDataKey, positionStorage, coverUrl, externalLoading }: AudioContentProps) => {\n const { preferences } = useAudioPreferences();\n const themeObject = useAppSelector(state => state.theming.theme);\n const dispatch = useAppDispatch();\n\n const { coverBlobUrl, coverReady } = useCoverBlobUrl(coverUrl);\n\n const { themeResolved } = useTheming<ThemeKeyType>({\n theme: themeObject.audio ?? \"auto\",\n themeKeys: preferences.theming.themes.keys,\n systemKeys: preferences.theming.themes.systemThemes,\n breakpointsMap: preferences.theming.breakpoints,\n coverUrl: coverBlobUrl,\n autoThemeSource: \"cover\",\n initProps: {\n ...propsToCSSVars(preferences.theming.icon, { prefix: prefixString(\"icon\") }),\n ...propsToCSSVars(preferences.theming.layout, {\n prefix: prefixString(\"layout\"),\n exclude: [\"ui\", \"compact\", \"expanded\", \"progressBar\"]\n })\n },\n onCoverThemeGenerated: (themeTokens) => dispatch(setCoverTheme(themeTokens)),\n onBreakpointChange: (breakpoint) => dispatch(setBreakpoint(breakpoint)),\n onColorSchemeChange: (colorScheme) => dispatch(setColorScheme(colorScheme)),\n onContrastChange: (contrast) => dispatch(setContrast(contrast)),\n onForcedColorsChange: (forcedColors) => dispatch(setForcedColors(forcedColors)),\n onMonochromeChange: (isMonochrome) => dispatch(setMonochrome(isMonochrome)),\n onReducedMotionChange: (reducedMotion) => dispatch(setReducedMotion(reducedMotion)),\n onReducedTransparencyChange: (reducedTransparency) => dispatch(setReducedTransparency(reducedTransparency))\n });\n\n return (\n <StatefulLoader isLoading={ externalLoading || !themeResolved || !coverReady }>\n <Suspense>\n <StatefulPlayer publication={ publication } localDataKey={ localDataKey } positionStorage={ positionStorage } coverUrl={ coverBlobUrl } />\n </Suspense>\n </StatefulLoader>\n );\n};\n\n// ─── Reader inner content ─────────────────────────────────────────────────────\n\ninterface ReaderContentProps {\n profile: \"epub\" | \"webPub\" | undefined | null;\n publication: Publication;\n localDataKey: string | null;\n positionStorage?: PositionStorage;\n plugins?: ThPlugin[];\n coverUrl?: string;\n}\n\nconst StatefulReaderContent = ({ profile, publication, plugins, coverUrl, ...props }: ReaderContentProps) => {\n const { preferences, resolveFontLanguage } = usePreferences();\n const themeObject = useAppSelector(state => state.theming.theme);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const theme = profile === \"epub\" ? (isFXL ? themeObject.fxl : themeObject.reflow) : ThThemeKeys.light;\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n if (!publication) return;\n const resolvedLang = resolveFontLanguage(\n publication.metadata.languages?.[0],\n getScriptMode(publication.metadata)\n );\n dispatch(setFontLanguage(resolvedLang));\n }, [publication, resolveFontLanguage, dispatch]);\n\n useTheming<ThemeKeyType>({\n theme,\n themeKeys: preferences.theming.themes.keys,\n systemKeys: preferences.theming.themes.systemThemes,\n breakpointsMap: preferences.theming.breakpoints,\n coverUrl,\n autoThemeSource: \"system\",\n initProps: {\n ...propsToCSSVars(preferences.theming.arrow, { prefix: prefixString(\"arrow\") }),\n ...propsToCSSVars(preferences.theming.icon, { prefix: prefixString(\"icon\") }),\n ...propsToCSSVars(preferences.theming.layout, {\n prefix: prefixString(\"layout\"),\n exclude: [\"ui\"]\n })\n },\n onCoverThemeGenerated: (themeTokens) => dispatch(setCoverTheme(themeTokens)),\n onBreakpointChange: (breakpoint) => dispatch(setBreakpoint(breakpoint)),\n onColorSchemeChange: (colorScheme) => dispatch(setColorScheme(colorScheme)),\n onContrastChange: (contrast) => dispatch(setContrast(contrast)),\n onForcedColorsChange: (forcedColors) => dispatch(setForcedColors(forcedColors)),\n onMonochromeChange: (isMonochrome) => dispatch(setMonochrome(isMonochrome)),\n onReducedMotionChange: (reducedMotion) => dispatch(setReducedMotion(reducedMotion)),\n onReducedTransparencyChange: (reducedTransparency) => dispatch(setReducedTransparency(reducedTransparency))\n });\n\n switch (profile) {\n case \"epub\":\n return <Suspense><StatefulEpubReader publication={ publication } { ...props } plugins={ plugins } /></Suspense>;\n case \"webPub\":\n default:\n return <Suspense><StatefulWebPubReader publication={ publication } { ...props } plugins={ plugins } /></Suspense>;\n }\n};\n"]}
@@ -1518,7 +1518,7 @@ input {
1518
1518
  box-sizing: border-box;
1519
1519
  list-style: none;
1520
1520
  }
1521
- .thorium_web_reader_pagination_listItem:has(.thorium_web_reader_pagination_previousButton) {
1521
+ .thorium_web_reader_pagination_listItem:has(.thorium_web_reader_pagination_leftButton) {
1522
1522
  grid-area: pagination-start;
1523
1523
  justify-self: start;
1524
1524
  }
@@ -1526,7 +1526,7 @@ input {
1526
1526
  grid-area: pagination-center;
1527
1527
  justify-self: center;
1528
1528
  }
1529
- .thorium_web_reader_pagination_listItem:has(.thorium_web_reader_pagination_nextButton) {
1529
+ .thorium_web_reader_pagination_listItem:has(.thorium_web_reader_pagination_rightButton) {
1530
1530
  grid-area: pagination-end;
1531
1531
  justify-self: end;
1532
1532
  }
@@ -1540,7 +1540,7 @@ input {
1540
1540
  display: flex;
1541
1541
  align-items: center;
1542
1542
  }
1543
- .thorium_web_reader_pagination_nextButton {
1543
+ .thorium_web_reader_pagination_rightButton {
1544
1544
  margin-inline-start: auto;
1545
1545
  text-align: end;
1546
1546
  }