@edrlab/thorium-web 1.0.0 → 1.0.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Epub/Settings/assets/icons/document_scanner.svg","../../../src/components/Epub/Settings/assets/icons/article.svg","../../../src/components/Epub/Settings/assets/icons/menu_book.svg","../../../src/components/Settings/StatefulRadioGroup.tsx","../../../src/components/Epub/Settings/StatefulColumns.tsx","../../../src/components/Epub/Settings/StatefulFontFamily.tsx","../../../src/components/Settings/StatefulSlider.tsx","../../../src/components/Epub/Settings/StatefulFontWeight.tsx","../../../src/components/Settings/StatefulSwitch.tsx","../../../src/components/Epub/Settings/StatefulHyphens.tsx","../../../src/components/Epub/Settings/assets/icons/contract.svg","../../../src/components/Epub/Settings/assets/icons/docs.svg","../../../src/components/Epub/Settings/StatefulLayout.tsx","../../../src/components/Settings/StatefulNumberField.tsx","../../../src/components/Epub/Settings/StatefulLetterSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/book.svg","../../../src/components/Epub/Settings/assets/icons/density_small.svg","../../../src/components/Epub/Settings/assets/icons/density_medium.svg","../../../src/components/Epub/Settings/assets/icons/density_large.svg","../../../src/components/Epub/Settings/StatefulLineHeight.tsx","../../../src/components/Epub/Settings/StatefulParagraphIndent.tsx","../../../src/components/Epub/Settings/StatefulParagraphSpacing.tsx","../../../src/components/Epub/Settings/StatefulPublisherStyles.tsx","../../../src/components/Settings/StatefulGroupWrapper.tsx","../../../src/components/Plugins/PluginRegistry.ts","../../../src/components/Plugins/PluginProvider.tsx","../../../src/components/Epub/Settings/StatefulSpacingGroup.tsx","../../../src/components/Epub/Settings/assets/icons/format_align_left.svg","../../../src/components/Epub/Settings/assets/icons/format_align_right.svg","../../../src/components/Epub/Settings/assets/icons/format_align_justify.svg","../../../src/components/Epub/Settings/StatefulTextAlign.tsx","../../../src/components/Epub/Settings/StatefulTextGroup.tsx","../../../src/components/Epub/Settings/StatefulTextNormalize.tsx","../../../src/components/Epub/Settings/assets/icons/check.svg","../../../src/components/Epub/Settings/StatefulTheme.tsx","../../../src/components/Epub/Settings/StatefulWordSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/text_decrease.svg","../../../src/components/Epub/Settings/assets/icons/text_increase.svg","../../../src/components/Epub/Settings/assets/icons/zoom_out.svg","../../../src/components/Epub/Settings/assets/icons/zoom_in.svg","../../../src/components/Epub/Settings/StatefulZoom.tsx","../../../src/components/Docking/hooks/useResizablePanel.ts","../../../src/components/Docking/StatefulDockingWrapper.tsx","../../../src/components/StatefulBackLink.tsx","../../../src/components/Actions/assets/icons/more_vert.svg","../../../src/components/Actions/Triggers/StatefulActionIcon.tsx","../../../src/components/Actions/StatefulOverflowMenu.tsx","../../../src/components/Actions/StatefulCollapsibleActionsBar.tsx","../../../src/components/StatefulReaderHeader.tsx","../../../src/components/StatefulReaderArrowButton.tsx","../../../src/components/StatefulReaderProgression.tsx","../../../src/components/StatefulPagination.tsx","../../../src/components/StatefulReaderFooter.tsx","../../../src/components/Epub/StatefulReader.tsx","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen.svg","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen_exit.svg","../../../src/components/Actions/Triggers/UnstableStatefulShortcut.tsx","../../../src/components/Actions/Triggers/StatefulOverflowMenuItem.tsx","../../../src/components/Actions/Fullscreen/StatefulFullscreenTrigger.tsx","../../../src/components/Actions/JumpToPosition/assets/icons/pin_drop.svg","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionTrigger.tsx","../../../src/components/Docking/assets/icons/dock_to_right.svg","../../../src/components/Docking/assets/icons/dock_to_left.svg","../../../src/components/Docking/StatefulDockStart.tsx","../../../src/components/Docking/StatefulDockEnd.tsx","../../../src/components/Docking/assets/icons/stack.svg","../../../src/components/Docking/StatefulDockTransientPopover.tsx","../../../src/components/Docking/StatefulDocker.tsx","../../../src/components/Sheets/hooks/useWebkitPatch.ts","../../../src/components/Sheets/StatefulPopoverSheet.tsx","../../../src/components/Sheets/StatefulBottomSheet.tsx","../../../src/components/Sheets/StatefulFullScreenSheet.tsx","../../../src/components/Sheets/StatefulDockedSheet.tsx","../../../src/components/Sheets/StatefulSheetWrapper.tsx","../../../src/components/Docking/hooks/useDocking.ts","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionContainer.tsx","../../../src/components/Actions/Settings/assets/icons/match_case.svg","../../../src/components/Actions/Settings/StatefulSettingsTrigger.tsx","../../../src/components/Actions/Settings/StatefulSettingsContainer.tsx","../../../src/components/Actions/Toc/assets/icons/toc.svg","../../../src/components/Actions/Toc/StatefulTocTrigger.tsx","../../../src/components/Actions/Toc/assets/icons/chevron_right.svg","../../../src/components/Actions/Toc/StatefulTocContainer.tsx","../../../src/components/Plugins/helpers/createDefaultPlugin.ts","../../../src/helpers/peripherals.ts","../../../src/helpers/deserializePositions.ts","../../../src/components/StatefulLoader.tsx","../../../src/components/PublicationGrid.tsx","../../../src/hooks/usePublication.ts"],"names":["jsx","settingsStyles","debounce","Fragment","useCallback","key","classNames","readerSharedUI","useRef","value","useState","useEffect","textAlign","theme","t","jsxs","dockingMap","React","overflowMenuStyles","className","arrowStyles","isHovering","readerPaginationStyles","useFocusWithin","import_debounce","dockingStyles","sheetStyles","useMemo","snapArray","scrimPref","item","filterValue","items","Link","tocEntry","breakpoint","colorScheme","reducedMotion","timeline","positionsList","isFXL","dispatch","HttpFetcher","error"],"mappings":"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","file":"index.mjs","sourcesContent":["import * as React from \"react\";\nconst SvgDocumentScanner = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M80-720v-200h200v80H160v120H80Zm720 0v-120H680v-80h200v200h-80ZM80-40v-200h80v120h120v80H80Zm600 0v-80h120v-120h80v200H680ZM280-240h400v-480H280v480Zm0 80q-33 0-56.5-23.5T200-240v-480q0-33 23.5-56.5T280-800h400q33 0 56.5 23.5T760-720v480q0 33-23.5 56.5T680-160H280Zm80-400h240v-80H360v80Zm0 120h240v-80H360v80Zm0 120h240v-80H360v80Zm-80 80v-480 480Z\" /></svg>;\nexport default SvgDocumentScanner;","import * as React from \"react\";\nconst SvgArticle = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\" /></svg>;\nexport default SvgArticle;","import * as React from \"react\";\nconst SvgMenuBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M560-564v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-600q-38 0-73 9.5T560-564Zm0 220v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-380q-38 0-73 9t-67 27Zm0-110v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-490q-38 0-73 9.5T560-454ZM260-320q47 0 91.5 10.5T440-278v-394q-41-24-87-36t-93-12q-36 0-71.5 7T120-692v396q35-12 69.5-18t70.5-6Zm260 42q44-21 88.5-31.5T700-320q36 0 70.5 6t69.5 18v-396q-33-14-68.5-21t-71.5-7q-47 0-93 12t-87 36v394Zm-40 118q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740q51-30 106.5-45T700-800q52 0 102 12t96 36q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59ZM280-494Z\" /></svg>;\nexport default SvgMenuBook;","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThRadioGroup, ThRadioGroupProps } from \"@/core/Components/Settings/ThRadioGroup\"\n\nexport interface StatefulRadioGroupProps extends Omit<ThRadioGroupProps, \"classNames\"> {\n standalone?: boolean\n}\n\nexport const StatefulRadioGroup = ({\n standalone,\n label,\n children,\n ...props\n}: StatefulRadioGroupProps) => {\n return (\n <>\n <ThRadioGroup \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ standalone ? settingsStyles.readerSettingsGroup : \"\" }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsRadioWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n radio: {\n className: settingsStyles.readerSettingsRadio\n }\n }}\n >\n { children }\n </ThRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport AutoLayoutIcon from \"./assets/icons/document_scanner.svg\";\nimport OneColIcon from \"./assets/icons/article.svg\";\nimport TwoColsIcon from \"./assets/icons/menu_book.svg\";\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useAppSelector, useAppDispatch } from \"@/lib/hooks\";\nimport { setColumnCount } from \"@/lib/settingsReducer\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport debounce from \"debounce\";\n\nexport const StatefulColumns = () => {\n const { t } = useI18n();\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const columnCount = useAppSelector(state => state.settings.columnCount) || \"auto\";\n const [effectiveValue, setEffectiveValue] = useState(columnCount);\n\n const fontSize = useAppSelector(state => state.settings.fontSize);\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n\n const layoutSettings = useMemo(() => {\n return {\n fontSize,\n fontFamily,\n wordSpacing,\n letterSpacing,\n publisherStyles\n };\n }, [fontSize, fontFamily, wordSpacing, letterSpacing, publisherStyles]);\n\n const dispatch = useAppDispatch();\n\n const { submitPreferences, getSetting } = useEpubNavigator();\n\n const updateEffectiveValue = useCallback((preference: string, setting: number | null) => {\n const derivedValue = preference === \"auto\" || setting === null ? \"auto\" : setting.toString();\n setEffectiveValue(derivedValue);\n }, []);\n\n const updatePreference = useCallback(async (value: string) => {\n const colCount = value === \"auto\" ? null : Number(value);\n await submitPreferences({ columnCount: colCount });\n updateEffectiveValue(value, getSetting(\"columnCount\"));\n dispatch(setColumnCount(value));\n }, [submitPreferences, getSetting, updateEffectiveValue, dispatch]);\n\n const debouncedUpdate = useCallback(() => {\n const update = () => updateEffectiveValue(columnCount, getSetting(\"columnCount\"));\n debounce(update, 50)();\n\n // layoutSettings is required as a dependency because it contains all the settings\n // that affect column layout (fontSize, fontFamily, wordSpacing, letterSpacing, publisherStyles)\n // and we need to recalculate the layout when any of these change.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columnCount, layoutSettings, getSetting, updateEffectiveValue]);\n\n useEffect(() => {\n debouncedUpdate();\n\n window.addEventListener(\"resize\", debouncedUpdate);\n\n return () => {\n window.removeEventListener(\"resize\", debouncedUpdate);\n };\n }, [debouncedUpdate]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ true }\n label={ t(\"reader.settings.column.title\") }\n orientation=\"horizontal\"\n value={ effectiveValue }\n onChange={ async (val: string) => await updatePreference(val) }\n isDisabled={ isScroll }\n items={[\n {\n icon: AutoLayoutIcon,\n label: t(\"reader.settings.column.auto\"), \n value: \"auto\" \n },\n {\n icon: OneColIcon,\n label: t(\"reader.settings.column.one\"), \n value: \"1\" \n },\n {\n icon: TwoColsIcon,\n label: t(\"reader.settings.column.two\"), \n value: \"2\",\n // This is subpar when the columnCount is 1 though because\n // it won’t be disabled, but it’s the best we can do with\n // the preferences API at the moment\n isDisabled: effectiveValue === \"1\" && columnCount === \"2\"\n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { CSSProperties, Key, useCallback, useRef } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { ThDropdown } from \"@/core/Components/Settings/ThDropdown\";\n\nimport { ListBox, ListBoxItem } from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontFamily } from \"@/lib/settingsReducer\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\n\nexport const StatefulFontFamily = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontFamilyOptions = useRef(Object.entries(defaultFontFamilyOptions).map(([property, stack]) => ({\n id: property,\n label: t(`reader.settings.fontFamily.labels.${ property }`),\n value: stack\n }))\n );\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (key: Key | null) => {\n if (!key || key === fontFamily) return;\n\n const selectedOption = fontFamilyOptions.current.find((option) => option.id === key) as {\n id: keyof typeof defaultFontFamilyOptions;\n label: string;\n value: string | null;\n };\n \n if (selectedOption) {\n await submitPreferences({ fontFamily: selectedOption.value });\n \n const currentSetting = getSetting(\"fontFamily\");\n const selectedOptionId = Object.keys(defaultFontFamilyOptions).find(key => defaultFontFamilyOptions[key as keyof typeof defaultFontFamilyOptions] === currentSetting) as keyof typeof defaultFontFamilyOptions;\n dispatch(setFontFamily(selectedOptionId || defaultFontFamilyOptions.publisher));\n }\n }, [fontFamily, submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <ThDropdown \n { ...(standalone \n ? { \n className: settingsStyles.readerSettingsGroup,\n label: t(\"reader.settings.fontFamily.title\")\n } \n : {\n \"aria-label\": t(\"reader.settings.fontFamily.title\")\n }) }\n selectedKey={ fontFamily }\n onSelectionChange={ async (key) => await updatePreference(key) }\n compounds={ {\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n button: {\n className: settingsStyles.readerSettingsDropdownButton\n },\n popover: {\n className: settingsStyles.readerSettingsDropdownPopover,\n placement: \"bottom\"\n },\n listbox: (\n <ListBox\n className={ settingsStyles.readerSettingsDropdownListbox }\n items={ fontFamilyOptions.current }\n >\n { (item) => (\n <ListBoxItem\n className={ settingsStyles.readerSettingsDropdownListboxItem }\n id={ item.id }\n key={ item.id }\n textValue={ item.value || undefined }\n style={{ fontFamily: item.value || undefined } as CSSProperties}\n >\n { item.label }\n </ListBoxItem>\n )}\n </ListBox>\n )\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSlider, ThSliderProps } from \"@/core/Components/Settings/ThSlider\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulSliderProps extends Omit<ThSliderProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSlider = ({\n standalone,\n label,\n ...props\n}: StatefulSliderProps) => {\n return(\n <>\n <ThSlider\n { ...props }\n { ...(standalone ? { label: label } : {\"aria-label\": label}) }\n className={ classNames(settingsStyles.readerSettingsSlider, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n label: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsSliderLabel)\n },\n output: {\n className: settingsStyles.readerSettingsSliderOutput\n },\n track: {\n className: settingsStyles.readerSettingsSliderTrack\n },\n thumb: {\n className: settingsStyles.readerSettingsSliderThumb\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { fontWeightRangeConfig } from \"@readium/navigator\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontWeight } from \"@/lib/settingsReducer\";\n\nexport const StatefulFontWeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontWeight = useAppSelector(state => state.settings.fontWeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontWeight: value });\n\n dispatch(setFontWeight(getSetting(\"fontWeight\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.fontWeight.title\") }\n defaultValue={ 400 } \n value={ fontWeight } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ fontWeightRangeConfig.range }\n step={ fontWeightRangeConfig.step }\n isDisabled={ fontFamily === \"publisher\" }\n /> \n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSwitch, ThSwitchProps } from \"@/core/Components/Settings/ThSwitch\";\n\nexport interface StatefulSwitchProps extends Omit<ThSwitchProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSwitch = ({\n standalone,\n label,\n heading, \n ...props\n}: StatefulSwitchProps) => {\n return(\n <>\n <ThSwitch \n { ...props }\n { ...(standalone ? { heading: heading } : {}) }\n label={ label }\n className={ settingsStyles.readerSettingsSwitch }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsGroup\n },\n heading: {\n className: settingsStyles.readerSettingsLabel\n },\n indicator: {\n className: settingsStyles.readerSettingsSwitchIndicator\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setHyphens } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulHyphens = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const hyphens = useAppSelector(state => state.settings.hyphens);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n\n const dispatch = useAppDispatch();\n \n const { getSetting, submitPreferences } = useEpubNavigator();\n \n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ \n hyphens: value \n });\n \n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ t(\"reader.settings.hyphens.title\") }\n label={ t(\"reader.settings.hyphens.label\") }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ hyphens ?? false }\n isDisabled={ textAlign === ThTextAlignOptions.publisher }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgContract = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-50 0-85-35t-35-85v-120h120v-560h600v680q0 50-35 85t-85 35H240Zm480-80q17 0 28.5-11.5T760-200v-600H320v480h360v120q0 17 11.5 28.5T720-160ZM360-600v-80h360v80H360Zm0 120v-80h360v80H360ZM240-160h360v-80H200v40q0 17 11.5 28.5T240-160Zm0 0h-40 400-360Z\" /></svg>;\nexport default SvgContract;","import * as React from \"react\";\nconst SvgDocs = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M320-440h320v-80H320v80Zm0 120h320v-80H320v80Zm0 120h200v-80H320v80ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\" /></svg>;\nexport default SvgDocs;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { ThLayoutOptions } from \"@/preferences/models/enums\";\n\nimport ScrollableIcon from \"./assets/icons/contract.svg\";\nimport PaginatedIcon from \"./assets/icons/docs.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setScroll } from \"@/lib/settingsReducer\";\n\nexport const StatefulLayout = () => {\n const { t } = useI18n();\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => { \n const derivedValue = value === ThLayoutOptions.scroll;\n await submitPreferences({ scroll: derivedValue });\n dispatch(setScroll(getSetting(\"scroll\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup\n standalone={ true }\n label={ t(\"reader.settings.layout.title\") }\n orientation=\"horizontal\"\n value={ isScroll ? ThLayoutOptions.scroll : ThLayoutOptions.paginated }\n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: PaginatedIcon,\n label: t(\"reader.settings.layout.paginated\"),\n value: ThLayoutOptions.paginated\n },\n {\n icon: ScrollableIcon,\n label: t(\"reader.settings.layout.scrolled\"),\n value: ThLayoutOptions.scroll\n }\n ]} \n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThNumberField, ThNumberFieldProps } from \"@/core/Components/Settings/ThNumberField\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulNumberFieldProps extends Omit<ThNumberFieldProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulNumberField = ({\n standalone,\n label,\n ...props\n}: StatefulNumberFieldProps) => {\n\n return (\n <ThNumberField \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ classNames(settingsStyles.readerSettingsNumbfield, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n group: {\n className: settingsStyles.readerSettingsGroupWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n stepper: {\n className: readerSharedUI.icon\n },\n input: {\n className: settingsStyles.readerSettingsInput\n }\n }}\n />\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultLetterSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLetterSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLetterSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const letterSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.variant ?? defaultLetterSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.range ?? defaultLetterSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.step ?? defaultLetterSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n letterSpacing: value\n });\n\n dispatch(setLetterSpacing(getSetting(\"letterSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { letterSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.letterSpacing.title\") }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.letterSpacing.decrease\"),\n incrementLabel: t(\"reader.settings.letterSpacing.increase\")\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.letterSpacing.title\") }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n formatOptions={ { style: \"percent\" } }\n />\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h480q33 0 56.5 23.5T800-800v640q0 33-23.5 56.5T720-80H240Zm0-80h480v-640h-80v280l-100-60-100 60v-280H240v640Zm0 0v-640 640Zm200-360 100-60 100 60-100-60-100 60Z\" /></svg>;\nexport default SvgBook;","import * as React from \"react\";\nconst SvgDensitySmall = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-80v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Z\" /></svg>;\nexport default SvgDensitySmall;","import * as React from \"react\";\nconst SvgDensityMedium = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-320v-80h720v80H120Zm0-320v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityMedium;","import * as React from \"react\";\nconst SvgDensityLarge = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-640v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityLarge;","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport SmallIcon from \"./assets/icons/density_small.svg\";\nimport MediumIcon from \"./assets/icons/density_medium.svg\";\nimport LargeIcon from \"./assets/icons/density_large.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLineHeight, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLineHeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const updatePreference = useCallback(async (value: string) => {\n const computedValue = value === ThLineHeightOptions.publisher\n ? null \n : lineHeightOptions.current[value as keyof typeof ThLineHeightOptions];\n \n await submitPreferences({\n lineHeight: computedValue\n });\n\n const currentLineHeight = getSetting(\"lineHeight\");\n const currentDisplayLineHeightOption = Object.entries(lineHeightOptions.current).find(([key, value]) => value === currentLineHeight)?.[0] as ThLineHeightOptions;\n\n dispatch(setLineHeight(currentDisplayLineHeightOption));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone }\n label={ t(\"reader.settings.lineHeight.title\") }\n orientation=\"horizontal\"\n value={ publisherStyles ? ThLineHeightOptions.publisher : lineHeight } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: t(\"reader.settings.lineHeight.publisher\"), \n value: ThLineHeightOptions.publisher \n },\n {\n icon: SmallIcon,\n label: t(\"reader.settings.lineHeight.small\"), \n value: ThLineHeightOptions.small \n },\n {\n icon: MediumIcon,\n label: t(\"reader.settings.lineHeight.medium\"), \n value: ThLineHeightOptions.medium \n },\n {\n icon: LargeIcon,\n label: t(\"reader.settings.lineHeight.large\"), \n value: ThLineHeightOptions.large \n },\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphIndent, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphIndent, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphIndent = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphIndentRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.variant ?? defaultParagraphIndent.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.range ?? defaultParagraphIndent.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.step ?? defaultParagraphIndent.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphIndent: value\n });\n\n dispatch(setParagraphIndent(getSetting(\"paragraphIndent\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphIndentRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.paraIndent.title\") }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.paraIndent.decrease\"),\n incrementLabel: t(\"reader.settings.paraIndent.increase\")\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.paraIndent.title\") }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n />\n } \n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const paragraphSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.variant ?? defaultParagraphSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.range ?? defaultParagraphSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.step ?? defaultParagraphSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphSpacing: value\n });\n\n dispatch(setParagraphSpacing(getSetting(\"paragraphSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.paraSpacing.title\") }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.paraSpacing.decrease\"),\n incrementLabel: t(\"reader.settings.paraSpacing.increase\")\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.paraSpacing.title\") }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n /> \n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulPublisherStyles = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n\n const dispatch = useAppDispatch();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (isSelected: boolean) => {\n const values = isSelected ? \n {\n lineHeight: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n letterSpacing: null,\n wordSpacing: null\n } : \n {\n lineHeight: lineHeight === ThLineHeightOptions.publisher \n ? null \n : lineHeightOptions.current[lineHeight as keyof typeof ThLineHeightOptions],\n paragraphIndent: paragraphIndent || 0,\n paragraphSpacing: paragraphSpacing || 0,\n letterSpacing: letterSpacing || 0,\n wordSpacing: wordSpacing || 0\n };\n await submitPreferences(values);\n\n dispatch(setPublisherStyles(isSelected ? true : false));\n }, [submitPreferences, dispatch, lineHeight, paragraphIndent, paragraphSpacing, letterSpacing, wordSpacing]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n label={ t(\"reader.settings.publisherStyles.label\") }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ publisherStyles }\n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSettingsGroupPref, ThSpacingSettingsKeys, ThTextSettingsKeys } from \"@/preferences\";\nimport { PressEvent } from \"react-aria\";\nimport { SettingComponent } from \"@/components/Plugins/PluginRegistry\";\n\nimport { ThSettingsWrapper } from \"@/core/Components/Settings/ThSettingsWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulGroupWrapperProps {\n heading: string;\n moreLabel: string;\n moreTooltip: string;\n onPressMore: (e: PressEvent) => void;\n componentsMap: Record<string, SettingComponent>;\n prefs?: ThSettingsGroupPref<ThTextSettingsKeys | ThSpacingSettingsKeys>;\n defaultPrefs: {\n main: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n subPanel: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n };\n}\n\nexport const StatefulGroupWrapper = ({\n heading,\n moreLabel,\n moreTooltip,\n onPressMore,\n componentsMap,\n prefs,\n defaultPrefs\n}: StatefulGroupWrapperProps) => {\n const RSPrefs = usePreferences();\n \n const main = prefs?.main || defaultPrefs.main;\n const displayOrder = prefs?.subPanel !== undefined \n ? prefs.subPanel \n : defaultPrefs.subPanel;\n\n const resolvedPrefs = {\n main: main,\n subPanel: displayOrder\n };\n \n return(\n <>\n <ThSettingsWrapper\n className={ classNames(settingsStyles.readerSettingsGroup, settingsStyles.readerSettingsAdvancedGroup) }\n items={ componentsMap }\n prefs={ resolvedPrefs }\n compounds={{\n label: heading,\n heading: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsGroupLabel)\n },\n button: {\n className: classNames(readerSharedUI.icon, settingsStyles.readerSettingsAdvancedIcon),\n \"aria-label\": moreLabel,\n compounds: {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: \"top\",\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: moreTooltip\n },\n onPress: onPressMore\n }\n }}\n />\n </>\n )\n}","import { ThSettingsEntry } from \"@/core/Components\";\nimport { StatefulActionsMapObject } from \"../Actions\";\n\nexport enum ThPluginType {\n ACTION = \"action\",\n SETTING = \"setting\",\n}\n\nexport type ActionComponent = StatefulActionsMapObject;\n\nexport interface SettingComponent extends ThSettingsEntry {\n type?: \"text\" | \"spacing\";\n props?: any;\n}\n\nexport interface ThPlugin {\n id: string;\n name: string;\n description?: string;\n version?: string;\n components: {\n actions?: Record<string, ActionComponent>;\n settings?: Record<string, SettingComponent>;\n };\n}\n\n// Store plugins in a module-level variable to ensure persistence\nconst pluginsStore: ThPlugin[] = [];\n\nclass PluginRegistryClass {\n register(plugin: ThPlugin): void {\n const existingPluginIndex = pluginsStore.findIndex(p => p.id === plugin.id);\n \n if (existingPluginIndex >= 0) {\n pluginsStore[existingPluginIndex] = plugin;\n } else {\n pluginsStore.push(plugin);\n }\n }\n \n unregister(pluginId: string): void {\n const filteredPlugins = pluginsStore.filter(plugin => plugin.id !== pluginId);\n \n // Clear the array and repopulate it\n pluginsStore.length = 0;\n pluginsStore.push(...filteredPlugins);\n }\n \n getPlugins(): ThPlugin[] {\n return [...pluginsStore];\n }\n \n getComponentMaps() { \n const actionsComponentsMap: Record<string, ActionComponent> = {} as Record<string, ActionComponent>;\n const settingsComponentsMap: Record<string, SettingComponent> = {} as Record<string, SettingComponent>;\n \n // Process plugins in reverse order so later plugins override earlier ones\n [...pluginsStore].reverse().forEach(plugin => { \n // Merge actions components\n if (plugin.components.actions) {\n Object.entries(plugin.components.actions).forEach(([key, component]) => {\n actionsComponentsMap[key as string] = component;\n });\n }\n \n // Merge settings components\n if (plugin.components.settings) {\n Object.entries(plugin.components.settings).forEach(([key, component]) => {\n settingsComponentsMap[key as string] = component;\n });\n }\n });\n \n return {\n actionsComponentsMap,\n settingsComponentsMap\n };\n }\n}\n\n// Export singleton instance\nexport const ThPluginRegistry = new PluginRegistryClass();","\"use client\";\n\nimport React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { ThPluginRegistry, ActionComponent, SettingComponent } from \"./PluginRegistry\";\n\ninterface ThPluginContextType {\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n registerPlugin: typeof ThPluginRegistry.register;\n unregisterPlugin: typeof ThPluginRegistry.unregister;\n}\n\nconst ThPluginContext = createContext<ThPluginContextType>({\n actionsComponentsMap: {} as Record<string, ActionComponent>,\n settingsComponentsMap: {} as Record<string, SettingComponent>,\n textSettingsComponentsMap: {} as Record<string, SettingComponent>,\n spacingSettingsComponentsMap: {} as Record<string, SettingComponent>,\n registerPlugin: ThPluginRegistry.register.bind(ThPluginRegistry),\n unregisterPlugin: ThPluginRegistry.unregister.bind(ThPluginRegistry)\n});\n\nexport const usePlugins = () => useContext(ThPluginContext);\n\nexport const ThPluginProvider = ({ children }: { children: React.ReactNode }) => {\n const [componentMaps, setComponentMaps] = useState<{\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n }>(() => {\n // Force a fresh retrieval of component maps\n const maps = ThPluginRegistry.getComponentMaps();\n return {\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n };\n });\n \n // Helper function to filter settings components by type\n function getTypedSettingsComponents(\n componentsMap: Record<string, SettingComponent>,\n type: \"text\" | \"spacing\"\n ): Record<string, SettingComponent> {\n return Object.entries(componentsMap)\n .filter(([_, component]) => component.type === type)\n .reduce((acc, [key, component]) => {\n acc[key] = component;\n return acc;\n }, {} as Record<string, SettingComponent>);\n }\n \n // Update component maps when plugins change\n useEffect(() => {\n const updateComponentMaps = () => {\n const maps = ThPluginRegistry.getComponentMaps();\n setComponentMaps({\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n });\n };\n \n // Initial update to ensure we have the latest maps\n updateComponentMaps();\n }, []);\n \n // Wrapper for register that triggers an update\n const registerPlugin = (plugin: Parameters<typeof ThPluginRegistry.register>[0]) => {\n ThPluginRegistry.register(plugin);\n };\n \n // Wrapper for unregister that triggers an update\n const unregisterPlugin = (pluginId: string) => {\n ThPluginRegistry.unregister(pluginId);\n };\n \n // Provide the component maps and plugin management functions\n const value = {\n ...componentMaps,\n registerPlugin,\n unregisterPlugin\n };\n \n return (\n <ThPluginContext.Provider value={ value }>\n { children }\n </ThPluginContext.Provider>\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n ThSettingsContainerKeys, \n ThSpacingSettingsKeys \n} from \"@/preferences\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulSpacingGroup = () => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { spacingSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n \n const setSpacingContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.spacing));\n }, [dispatch]);\n\n return (\n <>\n <StatefulGroupWrapper \n heading={ t(\"reader.settings.spacing.title\") }\n moreLabel={ t(\"reader.settings.spacing.advanced.trigger\") }\n moreTooltip={ t(\"reader.settings.spacing.advanced.tooltip\") }\n onPressMore={ setSpacingContainer }\n componentsMap={ spacingSettingsComponentsMap }\n prefs={ RSPrefs.settings.spacing }\n defaultPrefs={ {\n main: defaultSpacingSettingsMain, \n subPanel: defaultSpacingSettingsSubpanel\n }}\n />\n </>\n );\n}\n\nexport const StatefulSpacingGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.spacing?.subPanel as ThSpacingSettingsKeys[] | null | undefined || defaultSpacingSettingsSubpanel;\n const { spacingSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThSpacingSettingsKeys) => {\n const match = spacingSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Setting key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","import * as React from \"react\";\nconst SvgFormatAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignLeft;","import * as React from \"react\";\nconst SvgFormatAlignRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignRight;","import * as React from \"react\";\nconst SvgFormatAlignJustify = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignJustify;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { TextAlignment } from \"@readium/navigator\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport LeftAlignIcon from \"./assets/icons/format_align_left.svg\";\nimport RightAlignIcon from \"./assets/icons/format_align_right.svg\";\nimport JustifyIcon from \"./assets/icons/format_align_justify.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextAlign, setHyphens } from \"@/lib/settingsReducer\";\n\nexport const StatefulTextAlign = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => {\n const textAlign: TextAlignment | null = value === ThTextAlignOptions.publisher \n ? null \n : value === ThTextAlignOptions.start \n ? TextAlignment.start \n : TextAlignment.justify;\n \n const currentHyphens = getSetting(\"hyphens\") as boolean | undefined | null;\n \n const hyphens = textAlign === null \n ? null \n : (currentHyphens ?? textAlign === TextAlignment.justify);\n \n await submitPreferences({\n textAlign: textAlign,\n hyphens: hyphens\n });\n \n const textAlignSetting = getSetting(\"textAlign\") as TextAlignment | null;\n const textAlignValue = textAlignSetting === null ? ThTextAlignOptions.publisher : textAlignSetting as unknown as ThTextAlignOptions;\n \n dispatch(setTextAlign(textAlignValue));\n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [getSetting, submitPreferences, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone } \n label={ t(\"reader.settings.align.title\") }\n orientation=\"horizontal\" \n value={ textAlign } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: t(\"reader.settings.align.publisher\"), \n value: ThTextAlignOptions.publisher \n },\n {\n icon: isRTL ? RightAlignIcon : LeftAlignIcon,\n label: isRTL ? t(\"reader.settings.align.right\") : t(\"reader.settings.align.left\"), \n value: ThTextAlignOptions.start \n },\n {\n icon: JustifyIcon,\n label: t(\"reader.settings.align.justify\"), \n value: ThTextAlignOptions.justify \n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n ThSettingsContainerKeys, \n ThTextSettingsKeys \n} from \"@/preferences\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulTextGroup = () => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { textSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n\n const setTextContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.text));\n }, [dispatch]);\n\n return(\n <>\n <StatefulGroupWrapper \n heading={ t(\"reader.settings.text.title\") }\n moreLabel={ t(\"reader.settings.text.advanced.trigger\") }\n moreTooltip={ t(\"reader.settings.text.advanced.tooltip\") }\n onPressMore={ setTextContainer }\n componentsMap={ textSettingsComponentsMap }\n prefs={ RSPrefs.settings.text }\n defaultPrefs={ {\n main: defaultTextSettingsMain, \n subPanel: defaultTextSettingsSubpanel\n }}\n />\n </>\n )\n}\n\nexport const StatefulTextGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.text?.subPanel as ThTextSettingsKeys[] | null | undefined || defaultTextSettingsSubpanel;\n const { textSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThTextSettingsKeys) => {\n const match = textSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextNormalization } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulTextNormalize = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ textNormalization: value });\n\n dispatch(setTextNormalization(getSetting(\"textNormalization\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ t(\"reader.settings.normalizeText.title\") }\n label={ t(\"reader.settings.normalizeText.label\") }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ textNormalization ?? false }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgCheck = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\" /></svg>;\nexport default SvgCheck;","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { ThemeKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport CheckIcon from \"./assets/icons/check.svg\";\n\nimport { ThActionsKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\nimport { Radio } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTheme } from \"@/lib/themeReducer\";\n\nimport classNames from \"classnames\";\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\n\nexport const StatefulTheme = ({ mapArrowNav }: { mapArrowNav?: number }) => {\n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n\n const radioGroupRef = useRef<HTMLDivElement | null>(null);\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n const themeArray = isFXL ? fxlThemeKeys : reflowThemeKeys;\n\n const themeObject = useAppSelector(state => state.theming.theme);\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n const colorScheme = useAppSelector(state => state.theming.colorScheme);\n\n const themeItems = useRef<(ThemeKeyType | \"auto\")[]>(\n themeArray.filter((theme: ThemeKeyType | \"auto\") => {\n if (theme === \"auto\") {\n return RSPrefs.theming.themes.systemThemes !== undefined && \n Object.values(RSPrefs.theming.themes.systemThemes).every(t => \n themeArray.includes(t)\n );\n }\n return true;\n })\n );\n\n const dispatch = useAppDispatch();\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: ThemeKeyType | \"auto\") => {\n const themeProps = buildThemeObject<typeof value>({\n theme: value,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme\n })\n await submitPreferences(themeProps);\n\n dispatch(setTheme({ \n key: isFXL ? \"fxl\" : \"reflow\", \n value: value\n }));\n }, [isFXL, RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, submitPreferences, dispatch, colorScheme]);\n\n // It’s easier to inline styles from preferences for these\n // than spamming the entire app with all custom properties right now\n const doStyles = useCallback((t: ThemeKeyType | \"auto\") => {\n // For some reason Typescript will just refuse to create dts files\n // for the packages if we set it to CSSProperties…\n let cssProps: any = {\n boxSizing: \"border-box\",\n color: \"#999999\"\n };\n\n if (t === \"auto\") {\n if (RSPrefs.theming.themes.systemThemes !== undefined) {\n cssProps.background = isRTL \n ? `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 100%)` \n : `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 0%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%)`;\n cssProps.color = \"#ffffff\";\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].subdue }`;\n } else {\n cssProps.display = \"none\";\n }\n } else {\n cssProps.background = RSPrefs.theming.themes.keys[t].background;\n cssProps.color = RSPrefs.theming.themes.keys[t].text;\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[t].subdue }`;\n };\n \n return cssProps;\n }, [RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, isRTL]);\n\n // mapArrowNav is the number of columns. This assumption \n // should be safe since even in vertical-writing, \n // the layout should be horizontal (?)\n const handleKeyboardNav = async (e: React.KeyboardEvent) => {\n \n if (mapArrowNav && !isNaN(mapArrowNav)) {\n const findNextVisualTheme = async (perRow: number) => {\n const currentIdx = themeItems.current.findIndex((val) => val === theme);\n const nextIdx = currentIdx + perRow;\n if (nextIdx >= 0 && nextIdx < themeItems.current.length) {\n await updatePreference(themeItems.current[nextIdx]);\n\n // Focusing here instead of useEffect on theme change so that \n // it doesn’t steal focus when themes is not the first radio group in the sheet\n if (radioGroupRef.current) {\n const themeToFocus = radioGroupRef.current.querySelector(`#${themeItems.current[nextIdx]}`) as HTMLElement;\n if (themeToFocus) themeToFocus.focus();\n }\n }\n };\n\n switch(e.code) {\n case \"Escape\":\n dispatch(setActionOpen({ \n key: ThActionsKeys.settings,\n isOpen: false \n })); \n break;\n case \"ArrowUp\":\n e.preventDefault();\n await findNextVisualTheme(-mapArrowNav);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n await findNextVisualTheme(mapArrowNav);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(1) : await findNextVisualTheme(-1);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(-1) : await findNextVisualTheme(1);\n break;\n default:\n break;\n }\n }\n };\n\n // Edge case where the value stored is auto, but the array doesn’t have it\n useEffect(() => {\n if (theme === \"auto\" && !themeItems.current.includes(theme)) {\n updatePreference(themeItems.current[0]);\n }\n }, [theme, updatePreference]);\n\n return (\n <>\n <StatefulRadioGroup\n ref={ radioGroupRef }\n standalone={ true }\n label={ t(\"reader.settings.themes.title\") }\n value={ theme }\n onChange={ async (val) => await updatePreference(val as ThemeKeyType) }\n >\n <div className={ classNames(settingsStyles.readerSettingsRadioWrapper, settingsStyles.readerSettingsThemesWrapper) }>\n { themeItems.current.map(( themeItem ) => \n <Radio\n className={ classNames(\n settingsStyles.readerSettingsRadio, \n settingsStyles.readerSettingsThemeRadio\n ) }\n value={ themeItem }\n id={ themeItem }\n key={ themeItem }\n style={ doStyles(themeItem) }\n { ...(mapArrowNav && !isNaN(mapArrowNav) ? {\n onKeyDown: (async (e: React.KeyboardEvent) => await handleKeyboardNav(e))\n } : {}) }\n >\n <span>\n { t(`reader.settings.themes.${ themeItem }`, { defaultValue: themeItem }) }\n { themeItem === theme && <CheckIcon aria-hidden=\"true\" focusable=\"false\" /> }\n </span>\n </Radio>\n ) }\n </div>\n </StatefulRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultWordSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles, setWordSpacing } from \"@/lib/settingsReducer\";\n\nexport const StatefulWordSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const wordSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.variant ?? defaultWordSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.range ?? defaultWordSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.step ?? defaultWordSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n wordSpacing: value\n });\n\n dispatch(setWordSpacing(getSetting(\"wordSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { wordSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.wordSpacing.title\") }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.wordSpacing.decrease\"),\n incrementLabel: t(\"reader.settings.wordSpacing.increase\")\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.wordSpacing.title\") }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n formatOptions={{ style: \"percent\" }}\n /> \n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgTextDecrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z\" /></svg>;\nexport default SvgTextDecrease;","import * as React from \"react\";\nconst SvgTextIncrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z\" /></svg>;\nexport default SvgTextIncrease;","import * as React from \"react\";\nconst SvgZoomOut = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400ZM280-540v-80h200v80H280Z\" /></svg>;\nexport default SvgZoomOut;","import * as React from \"react\";\nconst SvgZoomIn = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Zm-40-60v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z\" /></svg>;\nexport default SvgZoomIn;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { defaultFontSize, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Decrease from \"./assets/icons/text_decrease.svg\";\nimport Increase from \"./assets/icons/text_increase.svg\";\nimport ZoomOut from \"./assets/icons/zoom_out.svg\";\nimport ZoomIn from \"./assets/icons/zoom_in.svg\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontSize } from \"@/lib/settingsReducer\";\n\nexport const StatefulZoom = () => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const fontSize = useAppSelector((state) => state.settings.fontSize);\n const isFXL = useAppSelector((state) => state.publication.isFXL);\n const dispatch = useAppDispatch();\n \n const { \n getSetting, \n submitPreferences,\n preferencesEditor \n } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontSize: value });\n dispatch(setFontSize(getSetting(\"fontSize\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n const getEffectiveRange = (preferred: [number, number] | undefined, fallback: [number, number], supportedRange: [number, number] | undefined): [number, number] => {\n if (!supportedRange) {\n return preferred || fallback\n }\n if (preferred && isRangeWithinSupportedRange(preferred, supportedRange)) {\n return preferred;\n }\n if (fallback && isRangeWithinSupportedRange(fallback, supportedRange)) {\n return fallback;\n }\n return supportedRange;\n }\n \n const isRangeWithinSupportedRange = (range: [number, number], supportedRange: [number, number]): boolean => {\n return Math.min(range[0], range[1]) >= Math.min(supportedRange[0], supportedRange[1]) &&\n Math.max(range[0], range[1]) <= Math.max(supportedRange[0], supportedRange[1]);\n }\n\n const zoomRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.variant || defaultFontSize.variant,\n range: preferencesEditor?.fontSize.supportedRange\n ? getEffectiveRange(RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range, defaultFontSize.range, preferencesEditor?.fontSize.supportedRange)\n : RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range || defaultFontSize.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.step || preferencesEditor?.fontSize.step || defaultFontSize.step\n }\n\n return (\n <>\n { zoomRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField\n standalone={ true}\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value) } \n label={ isFXL ? t(\"reader.settings.zoom.title\") : t(\"reader.settings.fontSize.title\") }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n steppers={{\n decrementIcon: isFXL ? ZoomOut : Decrease,\n decrementLabel: isFXL ? t(\"reader.settings.zoom.decrease\") : t(\"reader.settings.fontSize.decrease\"),\n incrementIcon: isFXL ? ZoomIn : Increase,\n incrementLabel: isFXL ? t(\"reader.settings.zoom.increase\") : t(\"reader.settings.fontSize.increase\")\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ true }\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value as number) } \n label={ isFXL ? t(\"reader.settings.zoom.title\") : t(\"reader.settings.fontSize.title\") }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n formatOptions={{ style: \"percent\" }} \n />\n } \n </>\n );\n};","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { ThActionsDockedPref } from \"@/preferences\";\n\nimport { DockStateObject } from \"@/lib/actionsReducer\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\n// TODO: Responsive.\n// When resizing the window, all widths should be recalculated.\n// There is no guarantee that the panel group is the same size as the window,\n// so we have to rewrite this hook to observe the panel group, and push the new\n// widths to the StatefulDockingWrapper so that it can update panels.\n// Note that the StatefulDockingWrapper cannot pass PanelGroup as a ref, \n// it requires using a utility method: getPanelGroupElement(id)\n// See https://github.com/bvaughn/react-resizable-panels/tree/main/packages/react-resizable-panels#can-a-attach-a-ref-to-the-dom-elements\nexport const useResizablePanel = (panel: DockStateObject) => {\n const RSPrefs = usePreferences();\n const defaultWidth = RSPrefs.theming.layout.defaults.dockingWidth;\n const [pref, setPref] = useState<ThActionsDockedPref | null>(\n panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null\n );\n\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const previouslyCollapsed = usePrevious(panel.collapsed);\n\n const previousWidth = actions.getDockedWidth(panel.actionKey) || null;\n const width = pref?.width || defaultWidth;\n const minWidth = pref?.minWidth && pref.minWidth < width \n ? pref.minWidth \n : defaultWidth < width \n ? defaultWidth\n : width;\n const maxWidth = pref?.maxWidth && pref.maxWidth > width \n ? pref.maxWidth \n : defaultWidth > width\n ? defaultWidth\n : width;\n\n const isPopulated = () => {\n return panel.active && actions.isOpen(panel.actionKey);\n };\n\n const isCollapsed = () => {\n return panel.collapsed;\n }\n\n const forceExpand = () => {\n return !!(isPopulated() && previouslyCollapsed && !panel.collapsed);\n }\n\n const currentKey = () => {\n return panel.actionKey;\n };\n\n const isResizable = () => {\n return isPopulated() ? Math.round(width) > Math.round(minWidth) && Math.round(width) < Math.round(maxWidth) : false;\n };\n\n const hasDragIndicator = () => {\n return pref?.dragIndicator || false;\n };\n\n const getWidth = useCallback(() => {\n return previousWidth \n ? Math.round((previousWidth / window.innerWidth) * 100) \n : Math.round((width / window.innerWidth) * 100);\n }, [previousWidth, width]);\n\n const getMinWidth = useCallback(() => {\n return Math.round((minWidth / window.innerWidth) * 100);\n }, [minWidth]);\n\n const getMaxWidth = useCallback(() => {\n return Math.round((maxWidth / window.innerWidth) * 100);\n }, [maxWidth]);\n\n const getCurrentPxWidth = useCallback((percentage: number) => {\n let current = Math.round((percentage * window.innerWidth) / 100);\n \n if (current < minWidth) {\n current = minWidth;\n }\n \n if (current > maxWidth) {\n current = maxWidth;\n }\n \n return current;\n }, [minWidth, maxWidth]);\n\n // When the docked action changes, we need to update its preferences \n useEffect(() => {\n setPref(panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null);\n }, [panel.actionKey, RSPrefs]);\n\n return {\n currentKey, \n isPopulated, \n isCollapsed, \n forceExpand, \n isResizable,\n hasDragIndicator, \n getWidth,\n getMinWidth,\n getMaxWidth,\n getCurrentPxWidth\n }\n}","\"use client\";\n\nimport { ReactNode, useCallback, useEffect, useRef } from \"react\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\n\nimport { ImperativePanelHandle, Panel, PanelGroup, PanelResizeHandle } from \"react-resizable-panels\";\n\nimport { ThDockingTypes, ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useResizablePanel } from \"./hooks/useResizablePanel\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { activateDockPanel, collapseDockPanel, deactivateDockPanel, expandDockPanel, setDockPanelWidth } from \"@/lib/actionsReducer\";\n\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport classNames from \"classnames\";\n\nexport interface DockPanelSizes {\n width: number;\n minWidth: number;\n maxWidth: number;\n getCurrentPxWidth: (percentage: number) => number;\n}\n\nconst DockHandle = ({\n flow,\n isResizable,\n isPopulated, \n hasDragIndicator\n}: { \n flow: ThDockingKeys.start | ThDockingKeys.end;\n isResizable: boolean;\n isPopulated: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const handleID = `${ flow }-resize-handle`;\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabLeft : dockingStyles.dockResizeHandleGrabRight;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabRight : dockingStyles.dockResizeHandleGrabLeft;\n }\n }, [flow, direction]);\n\n return(\n <>\n <PanelResizeHandle \n id={ handleID } \n className={ dockingStyles.dockResizeHandle }\n disabled={ !isResizable }\n tabIndex={ isPopulated ? 0 : -1 }\n >\n { isResizable && hasDragIndicator && \n <div className={ classNames(dockingStyles.dockResizeHandleGrab, classFromFlow()) }></div> \n }\n </PanelResizeHandle>\n </>\n )\n};\n\nconst DockPanel = ({\n actionKey,\n flow,\n sizes,\n isResizable,\n isPopulated,\n isCollapsed,\n forceExpand,\n hasDragIndicator \n}: {\n actionKey: ActionsStateKeys | null;\n flow: ThDockingKeys.start | ThDockingKeys.end;\n sizes: DockPanelSizes;\n isResizable: boolean;\n isPopulated: boolean;\n isCollapsed: boolean;\n forceExpand: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const { t } = useI18n();\n\n const panelRef = useRef<ImperativePanelHandle>(null);\n const direction = useAppSelector(state => state.reader.direction);\n const dispatch = useAppDispatch();\n\n const dockClassName = flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr ? \"right-dock\" : \"left-dock\";\n\n const makeDockLabel = useCallback(() => { \n let label = \"\";\n if (flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr) {\n label += t(\"reader.app.docking.dockingRight\");\n } else {\n label += t(\"reader.app.docking.dockingLeft\")\n }\n\n if (actionKey) {\n if (!isPopulated) {\n label += ` – ${ t(\"reader.app.docking.dockingClosed\", { action: t(`reader.${ actionKey }.heading`) }) }`;\n } else if (isCollapsed) {\n label += ` – ${ t(\"reader.app.docking.dockingCollapsed\", { action: t(`reader.${ actionKey }.heading`) }) }`;\n }\n } else {\n label += ` – ${ t(\"reader.app.docking.dockingEmpty\") }`;\n }\n\n return label;\n }, [flow, direction, isPopulated, isCollapsed, actionKey, t]);\n\n const collapsePanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.collapse();\n dispatch(collapseDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n const expandPanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.expand();\n dispatch(expandDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n dispatch(activateDockPanel(flow));\n\n return () => {\n dispatch(deactivateDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n isPopulated || forceExpand ? expandPanel() : collapsePanel();\n }, [isPopulated, forceExpand, collapsePanel, expandPanel]);\n\n return(\n <>\n { flow === ThDockingKeys.end &&\n <DockHandle \n flow={ ThDockingKeys.end } \n isResizable={ isResizable } \n isPopulated={ isPopulated }\n hasDragIndicator={ hasDragIndicator } \n /> \n } \n <Panel \n id={ `${ flow }-panel` } \n order={ flow === ThDockingKeys.end ? 3 : 1 } \n collapsible={ true }\n collapsedSize={ 0 }\n ref={ panelRef }\n defaultSize={ isPopulated ? sizes.width : 0 } \n minSize={ sizes.minWidth } \n maxSize={ sizes.maxWidth }\n onCollapse={ collapsePanel }\n onExpand={ expandPanel }\n onResize={ (size: number) => size !== 0 && dispatch(setDockPanelWidth({\n key: flow,\n width: sizes.getCurrentPxWidth(size)\n }))}\n inert={ isCollapsed } \n >\n <div \n id={ flow } \n aria-label={ makeDockLabel() }\n className={ classNames(dockingStyles.dockPanelContainer, dockClassName) }\n ></div>\n </Panel>\n { flow === ThDockingKeys.start && \n <DockHandle \n flow={ ThDockingKeys.start } \n isResizable={ isResizable } \n isPopulated={ isPopulated } \n hasDragIndicator={ hasDragIndicator } \n /> \n } \n </>\n );\n};\n\nexport const StatefulDockingWrapper = ({ \n children\n}: { \n children: ReactNode; \n}) => {\n const RSPrefs = usePreferences();\n const dockingStart = useAppSelector(state => state.actions.dock[ThDockingKeys.start]);\n const dockingEnd = useAppSelector(state => state.actions.dock[ThDockingKeys.end])\n const startPanel = useResizablePanel(dockingStart);\n const endPanel = useResizablePanel(dockingEnd);\n\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n if (!RSPrefs.docking.dock) {\n return(\n <>\n { children }\n </>\n )\n } else {\n const dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none\n });\n\n const dockConfig = breakpoint && dockingMap[breakpoint] || ThDockingTypes.both;\n\n return (\n <>\n <PanelGroup direction=\"horizontal\">\n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.start) \n && <DockPanel \n actionKey={ startPanel.currentKey() }\n flow={ ThDockingKeys.start } \n sizes={{\n width: startPanel.getWidth(),\n minWidth: startPanel.getMinWidth(),\n maxWidth: startPanel.getMaxWidth(),\n getCurrentPxWidth: startPanel.getCurrentPxWidth\n }} \n isResizable={ startPanel.isResizable() }\n isPopulated={ startPanel.isPopulated() }\n isCollapsed={ startPanel.isCollapsed() } \n forceExpand={ startPanel.forceExpand() }\n hasDragIndicator={ startPanel.hasDragIndicator() }\n />\n }\n \n <Panel id=\"main-panel\" order={ 2 }>\n { children }\n </Panel>\n \n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.end)\n && <DockPanel \n actionKey={ endPanel.currentKey() }\n flow={ ThDockingKeys.end } \n sizes={{\n width: endPanel.getWidth(),\n minWidth: endPanel.getMinWidth(),\n maxWidth: endPanel.getMaxWidth(),\n getCurrentPxWidth: endPanel.getCurrentPxWidth\n }} \n isResizable={ endPanel.isResizable() }\n isPopulated={ endPanel.isPopulated() }\n isCollapsed={ endPanel.isCollapsed() } \n forceExpand={ endPanel.forceExpand() }\n hasDragIndicator={ endPanel.hasDragIndicator() }\n />\n }\n </PanelGroup>\n </>\n )\n }\n}","\"use client\";\n\nimport React from \"react\";\n\nimport backLinkStyles from \"./assets/styles/backLink.module.css\";\nimport readerSharedUI from \"./assets/styles/readerSharedUI.module.css\";\n\nimport { ThBackLinkVariant, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport { ThBackArrow } from \"@/core/Components/Links\";\nimport { ThHome } from \"@/core/Components/Links\";\nimport { ThLibrary } from \"@/core/Components/Links\";\nimport { ThLink } from \"@/core/Components/Links\";\n\nimport { useI18n } from \"@/i18n\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport const StatefulBackLink = ({ \n className \n}: { \n className?: string \n}) => {\n const { t } = useI18n();\n const RSPrefs = usePreferences();\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n \n const variant = RSPrefs.header.backLink?.variant || ThBackLinkVariant.arrow;\n const href = RSPrefs.header.backLink?.href;\n const content = RSPrefs.header.backLink?.content;\n const visibility = RSPrefs.header.backLink?.visibility || \"partially\";\n const backLinkClassName = classNames(backLinkStyles.backLink, visibility === \"always\" ? readerSharedUI.alwaysVisible : readerSharedUI.partiallyVisible);\n\n const compounds = {\n tooltipTrigger: {\n delay: RSPrefs.theming.arrow.tooltipDelay,\n closeDelay: RSPrefs.theming.arrow.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip\n },\n label: t(\"reader.app.header.backLink.tooltip\")\n };\n\n if (!href) return null;\n\n switch (variant) {\n case ThBackLinkVariant.arrow:\n return (\n <div className={ className }>\n <ThBackArrow \n className={ backLinkClassName } \n href={ href } \n direction={ isRTL ? \"right\" : \"left\" }\n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n />\n </div>\n );\n\n case ThBackLinkVariant.home:\n return (\n <div className={ className }>\n <ThHome \n className={ backLinkClassName } \n href={ href } \n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n />\n </div>\n );\n\n case ThBackLinkVariant.library:\n return (\n <div className={ className }>\n <ThLibrary \n className={ backLinkClassName } \n href={ href } \n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n />\n </div>\n );\n\n default:\n if (!content) return null;\n \n let contentNode: React.ReactNode = null;\n \n switch (content.type) {\n case \"img\":\n contentNode = <img alt={ content.alt ?? \"\" } src={ content.src } />;\n break;\n \n case \"svg\":\n // Parse the SVG string\n const parser = new DOMParser();\n const doc = parser.parseFromString(content.content, \"image/svg+xml\");\n const svgElement = doc.documentElement;\n \n // Extract all attributes\n const attributes: Record<string, string> = {};\n for (const { name, value } of Array.from(svgElement.attributes)) {\n attributes[name] = value;\n }\n \n // Create the SVG element with all its original attributes\n contentNode = React.createElement(\"svg\", {\n ...attributes,\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n xmlns: \"http://www.w3.org/2000/svg\",\n dangerouslySetInnerHTML: { \n __html: svgElement.innerHTML \n }\n });\n break;\n }\n \n return (\n <div className={ className }>\n <ThLink \n className={ backLinkClassName } \n href={ href } \n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n >\n { contentNode }\n </ThLink>\n </div>\n );\n }\n}","import * as React from \"react\";\nconst SvgMoreVert = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z\" /></svg>;\nexport default SvgMoreVert;","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { TooltipProps } from \"react-aria-components\";\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport { ThActionButton, ThActionButtonProps } from \"@/core/Components/Buttons/ThActionButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement, isKeyboardTriggered } from \"@/core/Helpers/focusUtilities\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulActionIconProps extends ThActionButtonProps {\n visibility?: ThCollapsibilityVisibility;\n placement?: TooltipProps[\"placement\"];\n tooltipLabel?: string;\n}\n\nexport const StatefulActionIcon = ({\n visibility,\n placement,\n tooltipLabel,\n children,\n ...props\n}: StatefulActionIconProps) => {\n const RSPrefs = usePreferences();\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const dispatch = useAppDispatch();\n\n const handleClassNameFromState = () => {\n let className = \"\";\n \n switch(visibility) {\n case ThCollapsibilityVisibility.always:\n className = readerSharedUI.alwaysVisible;\n break;\n case ThCollapsibilityVisibility.partially:\n className = readerSharedUI.partiallyVisible;\n break;\n case ThCollapsibilityVisibility.overflow:\n default:\n break;\n }\n\n return className\n };\n\n const defaultOnPressFunc = () => {\n dispatch(setImmersive(false));\n };\n\n const handleImmersive = (event: React.FocusEvent) => {\n // Check whether the focus was triggered by keyboard…\n // We don’t have access to type/modality, unlike onPress\n if (isKeyboardTriggered(event.target)) {\n dispatch(setImmersive(false));\n }\n };\n\n const blurOnEsc = (event: React.KeyboardEvent) => {\n // TODO: handle Tooltip cos first time you press esc, it’s the tooltip that is closed.\n if (triggerRef.current && isActiveElement(triggerRef.current) && event.code === \"Escape\") {\n triggerRef.current.blur();\n }\n };\n\n return (\n <ThActionButton\n ref={ triggerRef }\n className={ classNames(readerSharedUI.icon, handleClassNameFromState(), props.className) } \n onPress={ props.onPress || defaultOnPressFunc }\n onKeyDown={ blurOnEsc } \n onFocus={ handleImmersive }\n compounds={ tooltipLabel ? {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: placement,\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: tooltipLabel\n } : undefined }\n { ...Object.fromEntries(Object.entries(props).filter(([key]) => key !== \"className\")) }\n >\n { children }\n </ThActionButton>\n )\n};","\"use client\";\n\nimport React, { ReactNode, RefObject } from \"react\";\n\nimport overflowMenuStyles from \"./assets/styles/overflowMenu.module.css\";\n\nimport MenuIcon from \"./assets/icons/more_vert.svg\";\n\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\nimport { ThMenu } from \"@/core/Components/Menu/ThMenu\";\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionIcon } from \"./Triggers/StatefulActionIcon\";\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setOverflow } from \"@/lib/actionsReducer\";\n\nexport interface StatefulOverflowMenuProps {\n id: string;\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n triggerRef: RefObject<HTMLElement | null>;\n className?: string;\n children?: ReactNode;\n}\n\nexport const StatefulOverflowMenu = ({ \n id,\n className, \n items,\n triggerRef\n}: StatefulOverflowMenuProps) => {\n const { t } = useI18n();\n const dispatch = useAppDispatch();\n\n const toggleMenuState = (value: boolean) => {\n dispatch(setOverflow({\n key: id,\n isOpen: value\n }));\n }\n\n if (items.length > 0) {\n return (\n <>\n <ThMenu \n id={ id }\n triggerRef={ triggerRef }\n selectionMode=\"none\" \n className={ overflowMenuStyles.overflowMenu }\n dependencies={ [\"Trigger\"] }\n items={ items }\n compounds={{\n menuTrigger: {\n onOpenChange: (val: boolean) => toggleMenuState(val)\n },\n popover: {\n placement: \"bottom\",\n className: overflowMenuStyles.overflowPopover\n },\n button: (\n <StatefulActionIcon\n className={ className ? className : overflowMenuStyles.activeButton }\n aria-label={ t(\"reader.overflowMenu.active.trigger\") }\n placement=\"bottom\"\n tooltipLabel={ t(\"reader.overflowMenu.active.tooltip\") }\n visibility={ ThCollapsibilityVisibility.always }\n >\n <MenuIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n ),\n }}\n />\n </>\n )\n }\n}","\"use client\";\n\nimport { useRef } from \"react\";\n\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThCollapsibleActionsBar, ThCollapsibleActionsBarProps } from \"@/core/Components/Actions/ThCollapsibleActionsBar\";\nimport { StatefulOverflowMenu } from \"./StatefulOverflowMenu\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport interface StatefulCollapsibleActionsBarProps extends ThCollapsibleActionsBarProps {\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n overflowMenuClassName?: string;\n}\n\nexport const StatefulCollapsibleActionsBar = ({\n id, \n items,\n overflowMenuClassName,\n ...props\n}: StatefulCollapsibleActionsBarProps) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n return (\n <>\n <ThCollapsibleActionsBar \n ref={ ref }\n id={ id }\n items={ items }\n breakpoint={ breakpoint }\n compounds={{\n menu: (<StatefulOverflowMenu \n id={ id }\n triggerRef={ ref }\n className={ overflowMenuClassName } \n items={ [] }\n />) }}\n { ...props }\n />\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { ActionKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport { ThLayoutUI } from \"@/preferences/models/enums\";\n\nimport readerHeaderStyles from \"./assets/styles/readerHeader.module.css\";\nimport overflowMenuStyles from \"./Actions/assets/styles/overflowMenu.module.css\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThHeader } from \"@/core/Components/Reader/ThHeader\";\nimport { StatefulBackLink } from \"./StatefulBackLink\";\nimport { ThRunningHead } from \"@/core/Components/Reader/ThRunningHead\";\nimport { ThInteractiveOverlay } from \"../core/Components/Reader/ThInteractiveOverlay\";\nimport { StatefulCollapsibleActionsBar } from \"./Actions/StatefulCollapsibleActionsBar\";\n\nimport { usePlugins } from \"./Plugins/PluginProvider\";\nimport { usePreferences } from \"@/preferences/hooks\";\nimport { useActions } from \"@/core/Components\";\nimport { useFocusWithin } from \"react-aria\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nexport const StatefulReaderHeader = ({\n layout\n}: {\n layout: ThLayoutUI;\n}) => {\n const headerRef = useRef<HTMLDivElement>(null);\n const { reflowActionKeys, fxlActionKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { actionsComponentsMap } = usePlugins();\n \n const actionsMap = useAppSelector(state => state.actions.keys);\n const overflowMap = useAppSelector(state => state.actions.overflow);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = useAppSelector(state => state.settings.scroll);\n const runningHead = useAppSelector(state => state.publication.runningHead);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n const hasScrollAffordance = useAppSelector(state => state.reader.hasScrollAffordance);\n\n const actions = useActions({ ...actionsMap, ...overflowMap });\n const dispatch = useAppDispatch();\n\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin() {\n dispatch(setHovering(true));\n },\n onBlurWithin() { \n if (actions.everyOpenDocked()) {\n dispatch(setHovering(false));\n }\n }\n });\n\n const setHover = () => {\n if (!hasScrollAffordance && actions.everyOpenDocked()) {\n dispatch(setHovering(true));\n }\n };\n\n const removeHover = () => {\n if (!hasScrollAffordance && actions.everyOpenDocked()) {\n dispatch(setHovering(false));\n }\n };\n\n const listActionItems = useCallback(() => {\n const actionKeys = isFXL? fxlActionKeys : reflowActionKeys;\n const actionsItems: ThActionEntry<ActionKeyType>[] = [];\n\n if (actionsComponentsMap && Object.keys(actionsComponentsMap).length > 0) {\n actionKeys.forEach((key) => { \n if (actionsComponentsMap[key]) {\n actionsItems.push({\n Trigger: actionsComponentsMap[key].Trigger,\n Target: actionsComponentsMap[key].Target,\n key: key\n });\n } else {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n }\n });\n }\n \n return actionsItems;\n }, [isFXL, fxlActionKeys, reflowActionKeys, actionsComponentsMap]);\n\n useEffect(() => {\n // Blur any focused element when entering immersive mode\n if (isImmersive) {\n const focusElement = document.activeElement;\n if (focusElement && headerRef.current?.contains(focusElement)) {\n (focusElement as HTMLElement).blur();\n }\n }\n }, [isImmersive]);\n\n return (\n <>\n <ThInteractiveOverlay \n id=\"reader-header-overlay\"\n className=\"bar-overlay\"\n isActive={ layout === ThLayoutUI.layered && isImmersive && !isHovering }\n onMouseEnter={ setHover }\n onMouseLeave={ removeHover }\n />\n\n <ThHeader \n ref={ headerRef }\n className={ readerHeaderStyles.header } \n id=\"top-bar\" \n aria-label={ t(\"reader.app.header.label\") } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n { ...focusWithinProps }\n >\n { RSPrefs.header.backLink && <StatefulBackLink className={ readerHeaderStyles.backLinkWrapper } /> }\n \n <ThRunningHead \n label={ runningHead || t(\"reader.app.header.runningHeadFallback\") } \n syncDocTitle={ true }\n aria-label={ t(\"reader.app.header.runningHead\") }\n />\n \n <StatefulCollapsibleActionsBar \n id=\"reader-header-overflowMenu\" \n items={ listActionItems() }\n prefs={{ \n ...RSPrefs.actions, \n displayOrder: isFXL \n ? RSPrefs.actions.fxlOrder \n : RSPrefs.actions.reflowOrder \n }}\n className={ readerHeaderStyles.actionsWrapper } \n aria-label={ t(\"reader.app.header.actions\") } \n overflowMenuClassName={ \n (!isScroll || RSPrefs.affordances.scroll.hintInImmersive) \n ? overflowMenuStyles.hintButton \n : undefined \n }\n />\n </ThHeader>\n </>\n );\n}","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport arrowStyles from \"./assets/styles/readerArrowButton.module.css\";\nimport readerSharedUI from \"./assets/styles/readerSharedUI.module.css\";\n\nimport { PressEvent } from \"react-aria\";\n\nimport { ThNavigationButton, ThNavigationButtonProps } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setArrows } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\n\nimport classNames from \"classnames\";\n\nexport interface StatefulReaderArrowButtonProps extends ThNavigationButtonProps {\n direction: \"left\" | \"right\";\n occupySpace: boolean;\n}\n\nexport const StatefulReaderArrowButton = ({\n direction,\n occupySpace,\n className,\n isDisabled,\n onPress,\n ...props\n}: StatefulReaderArrowButtonProps) => {\n const RSPrefs = 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 scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n \n const wasScroll = usePrevious(isScroll);\n\n const dispatch = useAppDispatch();\n\n const [isHovering, setIsHovering] = useState(false);\n\n const switchedFromScrollable = () => {\n return wasScroll && !isScroll;\n }\n\n const label = (\n direction === \"right\" && !isRTL || \n direction === \"left\" && isRTL\n ) \n ? t(\"reader.navigation.goForward\") \n : t(\"reader.navigation.goBackward\");\n\n const handleClassNameFromState = () => {\n let className = \"\";\n if (!hasArrows && !switchedFromScrollable()) {\n className = arrowStyles.visuallyHidden;\n }\n return className;\n };\n\n const handleClassNameFromSpaceProp = () => {\n let className = \"\";\n if (occupySpace) {\n className = arrowStyles.viewportLarge;\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 const handleOnPress = (e: PressEvent, cb: (e: PressEvent) => void) => {\n dispatch(setArrows(false));\n cb(e);\n }\n\n return (\n <>\n <ThNavigationButton \n direction={ direction }\n ref= { buttonRef }\n aria-label={ label }\n onPress={ (e: PressEvent) => onPress && handleOnPress(e, 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: RSPrefs.theming.arrow.tooltipDelay,\n closeDelay: RSPrefs.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 React, { useEffect, useState } from \"react\";\n\nimport progressionStyles from \"./assets/styles/readerProgression.module.css\";\n\nimport { ThProgression } from \"@/core/Components/Reader/ThProgression\";\n\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport interface UnstableProgressionObject {\n totalPositions?: number;\n currentPositions?: number[];\n relativeProgression?: number;\n currentChapter?: string;\n totalProgression?: number;\n currentPublication?: string;\n}\n\nexport const StatefulReaderProgression = ({ \n className \n}: { \n className?: string \n}) => {\n const { t } = useI18n();\n const progression: UnstableProgressionObject = useAppSelector(state => state.publication.progression);\n\n const [current, setCurrent] = useState(\"\");\n const [reference, setReference] = useState(\"\");\n\n useEffect(() => {\n if (progression.totalPositions && progression.currentPositions) {\n setCurrent(progression.currentPositions.length === 2 ? `${progression.currentPositions[0]}–${progression.currentPositions[1]}` : `${progression.currentPositions}`);\n setReference(`${progression.totalPositions}`);\n } else if (progression.totalProgression !== undefined && progression.currentPublication) {\n setCurrent(`${Math.round(progression.totalProgression * 100)}%`);\n setReference(progression.currentPublication);\n } else if (progression.relativeProgression !== undefined && progression.currentChapter) {\n setCurrent(`${Math.round(progression.relativeProgression * 100)}%`);\n setReference(progression.currentChapter);\n } else {\n setCurrent(\"\");\n setReference(\"\");\n }\n }, [progression])\n\n return (\n <>\n {(current && reference) \n && <ThProgression \n id={ progressionStyles.current } \n aria-label={ t(\"reader.app.progression.wrapper\") }\n >\n { t(\"reader.app.progression.of\", { current, reference }) }\n </ThProgression>}\n </>\n )\n}","\"use client\";\n\nimport { useRef, KeyboardEvent } from \"react\";\n\nimport { ThPagination, ThPaginationProps } from \"@/core/Components/Reader/ThPagination\";\n\nimport readerPaginationStyles from \"./assets/styles/readerPagination.module.css\";\n \nexport const StatefulPagination = ({\n ref,\n links,\n compounds,\n children,\n ...props\n}: ThPaginationProps) => {\n const previousButtonRef = useRef<HTMLButtonElement>(null);\n const nextButtonRef = useRef<HTMLButtonElement>(null);\n\n const updatedCompounds = {\n ...compounds,\n previousButton: {\n ...compounds?.previousButton,\n ref: previousButtonRef,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n previousButtonRef.current?.blur();\n }\n }\n },\n nextButton: {\n ...compounds?.nextButton,\n ref: nextButtonRef,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n nextButtonRef.current?.blur();\n }\n }\n }\n };\n\n return (\n <ThPagination \n ref={ ref } \n className={ readerPaginationStyles.pagination }\n links={ links } \n compounds={ updatedCompounds } \n { ...props }\n >\n { children }\n </ThPagination>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport readerPaginationStyles from \"./assets/styles/readerPagination.module.css\";\n\nimport { ThBreakpoints, ThLayoutUI } from \"@/preferences/models/enums\";\n\nimport { ThFooter } from \"@/core/Components/Reader/ThFooter\";\nimport { StatefulReaderProgression } from \"./StatefulReaderProgression\";\nimport { ThInteractiveOverlay } from \"../core/Components/Reader/ThInteractiveOverlay\";\nimport { StatefulPagination } from \"./StatefulPagination\";\nimport { ThPaginationLinkProps } from \"@/core/Components/Reader/ThPagination\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useFocusWithin } from \"react-aria\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\n\nexport const StatefulReaderFooter = ({\n layout\n}: {\n layout: ThLayoutUI;\n}) => {\n const { t } = useI18n();\n const footerRef = useRef<HTMLDivElement>(null);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n const hasScrollAffordance = useAppSelector(state => state.reader.hasScrollAffordance);\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n const timeline = useAppSelector(state => state.publication.unstableTimeline);\n\n const dispatch = useAppDispatch();\n\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin() {\n dispatch(setHovering(true));\n },\n onBlurWithin() {\n dispatch(setHovering(false));\n }\n });\n\n const setHover = () => {\n if (!hasScrollAffordance) {\n dispatch(setHovering(true));\n }\n };\n\n const removeHover = () => {\n if (!hasScrollAffordance) {\n dispatch(setHovering(false));\n }\n };\n\n const { previousLocator, nextLocator, go } = useEpubNavigator();\n\n const updateLinks = useCallback(() => {\n const links: { previous?: ThPaginationLinkProps; next?: ThPaginationLinkProps } = {\n previous: undefined,\n next: undefined\n };\n\n const previous = previousLocator();\n const next = nextLocator();\n\n if (previous) {\n links.previous = {\n node: breakpoint !== ThBreakpoints.compact && breakpoint !== ThBreakpoints.medium ? (\n <>\n <span className=\"sr-only\">{ t(\"reader.navigation.scroll.prevA11yLabel\") }</span>\n <span className={ readerPaginationStyles.paginationLabel }>{ timeline?.previousItem?.title || previous.title || t(\"reader.navigation.scroll.prevLabel\") }</span>\n </>\n ) : (\n <>\n <span className={ readerPaginationStyles.paginationLabel }>{ t(\"reader.navigation.scroll.prevLabel\") }</span>\n </>\n ),\n onPress: () => go(previous, !reducedMotion, () => {})\n }\n }\n\n if (next) {\n links.next = {\n node: breakpoint !== ThBreakpoints.compact && breakpoint !== ThBreakpoints.medium ? (\n <>\n <span className=\"sr-only\">{ t(\"reader.navigation.scroll.nextA11yLabel\") }</span>\n <span className={ readerPaginationStyles.paginationLabel }>{ timeline?.nextItem?.title || next.title || t(\"reader.navigation.scroll.nextLabel\") }</span>\n </>\n ) : ( \n <>\n <span className={ readerPaginationStyles.paginationLabel }>{ t(\"reader.navigation.scroll.nextLabel\") }</span>\n </>\n ),\n onPress: () => go(next, !reducedMotion, () => {})\n }\n }\n\n return links;\n }, [go, previousLocator, nextLocator, t, timeline, breakpoint, reducedMotion]);\n\n useEffect(() => {\n updateLinks();\n }, [timeline, updateLinks]);\n\n useEffect(() => {\n // Blur any focused element when entering immersive mode\n if (isImmersive) {\n const focusElement = document.activeElement;\n if (focusElement && footerRef.current?.contains(focusElement)) {\n (focusElement as HTMLElement).blur();\n }\n }\n }, [isImmersive]);\n\n return(\n <>\n <ThInteractiveOverlay \n id=\"reader-footer-overlay\"\n className=\"bar-overlay\"\n isActive={ layout === ThLayoutUI.layered && isImmersive && !isHovering }\n onMouseEnter={ setHover }\n onMouseLeave={ removeHover }\n />\n \n <ThFooter \n ref={ footerRef }\n id=\"bottom-bar\" \n aria-label={ t(\"reader.app.footer.label\") } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n { ...focusWithinProps }\n >\n { isScroll && !isFXL\n ? <StatefulPagination \n aria-label={ t(\"reader.navigation.scroll.wrapper\") }\n links={ updateLinks() } \n compounds={ {\n listItem: {\n className: readerPaginationStyles.paginationListItem\n },\n previousButton: {\n className: readerPaginationStyles.previousButton,\n preventFocusOnPress: true\n },\n nextButton: {\n className: readerPaginationStyles.nextButton,\n preventFocusOnPress: true\n }\n } } \n >\n <StatefulReaderProgression className={ readerPaginationStyles.progression } />\n </StatefulPagination> \n : <StatefulReaderProgression /> }\n </ThFooter>\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { \n defaultFontFamilyOptions, \n defaultLineHeights, \n ThemeKeyType, \n usePreferenceKeys, \n useTheming\n} from \"../../preferences\";\n\nimport \"../assets/styles/reader.css\";\nimport arrowStyles from \"../assets/styles/readerArrowButton.module.css\";\n\nimport { \n ThActionsKeys, \n ThBreakpoints, \n ThLineHeightOptions, \n ThSettingsKeys, \n ThTextAlignOptions, \n ThLayoutUI\n} from \"../../preferences/models/enums\";\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\n\nimport { ThPlugin, ThPluginRegistry } from \"../Plugins/PluginRegistry\";\n\nimport { I18nProvider } from \"react-aria\";\nimport { ThPluginProvider } from \"../Plugins/PluginProvider\";\n\nimport {\n BasicTextSelection,\n FrameClickEvent,\n} from \"@readium/navigator-html-injectables\";\nimport { \n EpubNavigatorListeners, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences, \n TextAlignment\n} from \"@readium/navigator\";\nimport { \n Locator, \n Manifest, \n Publication, \n Fetcher, \n HttpFetcher, \n Layout, \n ReadingProgression\n} from \"@readium/shared\";\n\nimport { StatefulDockingWrapper } from \"../Docking/StatefulDockingWrapper\";\nimport { StatefulReaderHeader } from \"../StatefulReaderHeader\";\nimport { StatefulReaderArrowButton } from \"../StatefulReaderArrowButton\";\nimport { StatefulReaderFooter } from \"../StatefulReaderFooter\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\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 { useLocalStorage } from \"@/core/Hooks/useLocalStorage\";\n\nimport { toggleActionOpen } from \"@/lib/actionsReducer\";\nimport { useAppSelector, useAppDispatch, useAppStore } from \"@/lib/hooks\";\nimport { AppDispatch } from \"@/lib/store\";\nimport { \n setBreakpoint, \n setColorScheme, \n setContrast, \n setForcedColors, \n setMonochrome, \n setReducedMotion, \n setReducedTransparency, \n setTheme \n} from \"@/lib/themeReducer\";\nimport { \n setImmersive, \n setLoading,\n setHovering, \n toggleImmersive, \n setPlatformModifier, \n setDirection, \n setArrows, \n setFullscreen,\n setScrollAffordance\n} from \"@/lib/readerReducer\";\nimport { \n setFXL, \n setRTL, \n setProgression, \n setRunningHead, \n setPositionsList,\n setTimeline,\n setPublicationStart,\n setPublicationEnd\n} from \"@/lib/publicationReducer\";\nimport { LineLengthStateObject } from \"@/lib/settingsReducer\";\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 { deserializePositions } from \"@/helpers/deserializePositions\";\nimport { propsToCSSVars } from \"@/core/Helpers/propsToCSSVars\";\n\nexport interface ReadiumCSSSettings {\n columnCount: string;\n fontFamily: keyof typeof defaultFontFamilyOptions | null;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineLength: LineLengthStateObject | null;\n lineHeight: ThLineHeightOptions | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n textAlign: ThTextAlignOptions | null;\n textNormalization: boolean;\n theme?: string;\n wordSpacing: number | null;\n}\n\nexport interface StatelessCache {\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 interface StatefulReaderProps {\n rawManifest: object;\n selfHref: string;\n plugins?: ThPlugin[];\n}\n\nexport const StatefulReader = ({ \n rawManifest, \n selfHref, \n plugins \n}: StatefulReaderProps) => {\n if (plugins && plugins.length > 0) {\n plugins.forEach(plugin => {\n ThPluginRegistry.register(plugin);\n });\n } else {\n ThPluginRegistry.register(createDefaultPlugin());\n }\n \n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n \n const [publication, setPublication] = useState<Publication | null>(null);\n\n const container = useRef<HTMLDivElement>(null);\n const localDataKey = useRef(`${selfHref}-current-location`);\n const arrowsWidth = useRef(2 * ((RSPrefs.theming.arrow.size || 40) + (RSPrefs.theming.arrow.offset || 0)));\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const progression = useAppSelector(state => state.publication.progression);\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 letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const lineLength = useAppSelector(state => state.settings.lineLength);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const scroll = useAppSelector(state => state.settings.scroll);\n const isScroll = scroll && !isFXL;\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const wordSpacing = useAppSelector(state => state.settings.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 const arrowsOccupySpace = !isScroll && breakpoint &&\n (breakpoint === ThBreakpoints.large || breakpoint === ThBreakpoints.xLarge);\n \n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n\n const layoutUI = isFXL \n ? RSPrefs.theming.layout.ui?.fxl || ThLayoutUI.layered \n : isScroll \n ? RSPrefs.theming.layout.ui?.reflow || ThLayoutUI.layered\n : ThLayoutUI.stacked;\n\n // Init theming (breakpoints, theme, media queries…)\n useTheming<ThemeKeyType>({ \n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemKeys: RSPrefs.theming.themes.systemThemes,\n breakpointsMap: RSPrefs.theming.breakpoints,\n initProps: {\n ...propsToCSSVars(RSPrefs.theming.arrow, \"arrow\"), \n ...propsToCSSVars(RSPrefs.theming.icon, \"icon\"),\n ...propsToCSSVars(RSPrefs.theming.layout, \"layout\")\n },\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 const atPublicationStart = useAppSelector(state => state.publication.atPublicationStart);\n const atPublicationEnd = useAppSelector(state => state.publication.atPublicationEnd);\n\n const dispatch = useAppDispatch();\n\n const onFsChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n const fs = useFullscreen(onFsChange);\n\n const { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \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 onFXLPositionChange,\n submitPreferences\n } = useEpubNavigator();\n\n const { setLocalData, getLocalData, localData } = useLocalStorage(localDataKey.current);\n\n const timeline = useTimeline({\n publication: publication,\n currentLocation: localData,\n currentPositions: progression.currentPositions || [],\n positionsList: positionsList,\n onChange: (timeline) => {\n dispatch(setTimeline(timeline));\n }\n });\n\n // We need to use a cache so that we can use updated values\n // without re-rendering the component, and reloading EpubNavigator\n const cache = useRef<StatelessCache>({\n layoutUI: layoutUI,\n isImmersive: isImmersive,\n isHovering: isHovering,\n arrowsOccupySpace: arrowsOccupySpace || false,\n settings: {\n columnCount: columnCount,\n fontFamily: fontFamily,\n fontSize: fontSize,\n fontWeight: fontWeight,\n hyphens: hyphens,\n letterSpacing: letterSpacing,\n lineHeight: lineHeight,\n lineLength: lineLength,\n paragraphIndent: paragraphIndent,\n paragraphSpacing: paragraphSpacing,\n publisherStyles: publisherStyles,\n scroll: isScroll,\n textAlign: textAlign,\n textNormalization: textNormalization,\n theme: theme,\n wordSpacing: wordSpacing\n },\n positionsList: positionsList || [],\n colorScheme: colorScheme,\n reducedMotion: reducedMotion\n });\n\n const activateImmersiveOnAction = useCallback(() => {\n if (!cache.current.isImmersive) dispatch(setImmersive(true));\n }, [dispatch]);\n\n const toggleIsImmersive = useCallback(() => {\n // If tap/click in iframe, then header/footer no longer hoovering \n dispatch(setHovering(false));\n dispatch(setArrows(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 = (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 if (event.x < oneQuarter) {\n goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\n } \n else if (event.x > oneQuarter * 3) {\n goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n } else if (oneQuarter <= event.x && event.x <= oneQuarter * 3) {\n toggleIsImmersive();\n }\n } else {\n if (RSPrefs.affordances.scroll.toggleOnMiddlePointer.includes(\"tap\")) {\n toggleIsImmersive();\n }\n }\n }\n };\n\n const handleProgression = useCallback((locator: Locator) => {\n const relativeRef = locator.title || t(\"reader.app.progression.referenceFallback\");\n \n dispatch(setProgression( { \n currentPositions: currentPositions(), \n relativeProgression: locator.locations.progression, \n currentChapter: relativeRef, \n totalProgression: locator.locations.totalProgression \n }));\n }, [dispatch, currentPositions, t]);\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 handleProgression(locator);\n setLocalData(locator);\n }, [handleProgression, setLocalData]);\n\n onFXLPositionChange(handleFXLProgression);\n\n const initReadingEnv = 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 };\n\n const p = new Peripherals(useAppStore(), RSPrefs.actions, {\n moveTo: (direction) => {\n switch(direction) {\n case \"right\":\n if (!cache.current.settings.scroll) goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n break;\n case \"left\":\n if (!cache.current.settings.scroll) goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\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 shiftKey \n ? goBackward(!cache.current.reducedMotion, activateImmersiveOnAction) \n : goForward(!cache.current.reducedMotion, activateImmersiveOnAction);\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 }))\n break;\n // case ThActionsKeys.jumpToPosition:\n default:\n break\n }\n }\n });\n\n const listeners: EpubNavigatorListeners = {\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 handleProgression(locator);\n setLocalData(locator);\n }, 250);\n debouncedHandleProgression();\n }\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 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 },\n tap: function (_e: FrameClickEvent): boolean {\n handleTap(_e);\n return true;\n },\n click: function (_e: FrameClickEvent): boolean {\n if (cache.current.layoutUI === ThLayoutUI.layered) {\n if (\n !cache.current.settings.scroll ||\n RSPrefs.affordances.scroll.toggleOnMiddlePointer.includes(\"click\")\n ) {\n handleTap(_e);\n }\n }\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 (RSPrefs.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 RSPrefs.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 };\n\n const applyConstraint = useCallback(async (value: number) => {\n await submitPreferences({\n constraint: value\n })\n }, [submitPreferences]);\n\n // Handling side effects on Navigator\n\n useEffect(() => {\n cache.current.isImmersive = isImmersive;\n }, [isImmersive]);\n\n useEffect(() => {\n cache.current.isHovering = isHovering;\n }, [isHovering]);\n\n useEffect(() => {\n cache.current.layoutUI = layoutUI;\n }, [layoutUI]);\n\n useEffect(() => {\n cache.current.settings.scroll = isScroll;\n\n // Reset top bar visibility and last position\n dispatch(setImmersive(false));\n\n const handleConstraint = async (value: number) => {\n await applyConstraint(value)\n }\n\n if (!isScroll) {\n handleConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n .catch(console.error);\n } else {\n handleConstraint(0)\n .catch(console.error);\n }\n }, [isScroll, arrowsOccupySpace, applyConstraint, dispatch]);\n\n useEffect(() => {\n cache.current.settings.columnCount = columnCount;\n }, [columnCount]);\n\n useEffect(() => {\n cache.current.settings.fontFamily = fontFamily;\n }, [fontFamily]);\n\n useEffect(() => {\n cache.current.settings.fontSize = fontSize;\n }, [fontSize]);\n\n useEffect(() => {\n cache.current.settings.fontWeight = fontWeight;\n }, [fontWeight]);\n\n useEffect(() => {\n cache.current.settings.hyphens = hyphens;\n }, [hyphens]);\n\n useEffect(() => {\n cache.current.settings.letterSpacing = letterSpacing;\n }, [letterSpacing]);\n\n useEffect(() => {\n cache.current.settings.lineHeight = lineHeight;\n }, [lineHeight]);\n\n useEffect(() => {\n cache.current.settings.lineLength = lineLength;\n }, [lineLength]);\n\n useEffect(() => {\n cache.current.settings.paragraphIndent = paragraphIndent;\n }, [paragraphIndent]);\n\n useEffect(() => {\n cache.current.settings.paragraphSpacing = paragraphSpacing;\n }, [paragraphSpacing]);\n\n useEffect(() => {\n cache.current.settings.textAlign = textAlign;\n }, [textAlign]);\n\n useEffect(() => {\n cache.current.settings.textNormalization = textNormalization;\n }, [textNormalization]);\n\n useEffect(() => {\n cache.current.settings.theme = theme;\n }, [theme]);\n\n useEffect(() => {\n cache.current.settings.wordSpacing = wordSpacing;\n }, [wordSpacing]);\n\n useEffect(() => {\n cache.current.positionsList = positionsList || [];\n }, [positionsList]);\n\n useEffect(() => {\n cache.current.arrowsOccupySpace = arrowsOccupySpace || false;\n }, [arrowsOccupySpace]);\n\n useEffect(() => {\n cache.current.reducedMotion = reducedMotion;\n }, [reducedMotion]);\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 useEffect(() => {\n if (cache.current.colorScheme !== colorScheme) {\n cache.current.colorScheme = colorScheme;\n }\n\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\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: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.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 }, [themeObject, previousTheme, RSPrefs.theming.themes, fxlThemeKeys, reflowThemeKeys, colorScheme, isFXL, submitPreferences, dispatch]);\n\n useEffect(() => {\n RSPrefs.direction && dispatch(setDirection(RSPrefs.direction));\n dispatch(setPlatformModifier(getPlatformModifier()));\n }, [RSPrefs.direction, dispatch]);\n\n useEffect(() => {\n const handleConstraint = async () => {\n await applyConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n }\n handleConstraint()\n .catch(console.error);\n }, [arrowsOccupySpace, applyConstraint]);\n\n useEffect(() => {\n const fetcher: Fetcher = new HttpFetcher(undefined, selfHref);\n const manifest = Manifest.deserialize(rawManifest)!;\n manifest.setSelfLink(selfHref);\n\n setPublication(new Publication({\n manifest: manifest,\n fetcher: fetcher\n }));\n }, [rawManifest, selfHref]);\n\n useEffect(() => {\n if (!publication) return;\n\n dispatch(setRTL(publication.metadata.effectiveReadingProgression === ReadingProgression.rtl));\n dispatch(setFXL(publication.metadata.effectiveLayout === Layout.fixed));\n\n const pubTitle = publication.metadata.title.getTranslation(\"en\");\n\n dispatch(setRunningHead(pubTitle));\n dispatch(setProgression({ currentPublication: pubTitle }));\n\n let positionsList: Locator[] | undefined;\n\n const fetchPositions = async () => {\n positionsList = await publication.positionsFromManifest();\n if (positionsList && positionsList.length > 0) {\n dispatch(setProgression( { totalPositions: positionsList.length }))\n };\n const deserializedPositionsList = deserializePositions(positionsList);\n dispatch(setPositionsList(deserializedPositionsList));\n };\n\n fetchPositions()\n .catch(console.error)\n .then(() => {\n const isFXL = publication.metadata.effectiveLayout === Layout.fixed;\n\n const initialPosition: Locator | null = getLocalData();\n\n const initialConstraint = cache.current.arrowsOccupySpace ? arrowsWidth.current : 0;\n \n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const theme = themeKeys.includes(cache.current.settings.theme as any) ? cache.current.settings.theme : \"auto\";\n const themeProps = buildThemeObject<ThemeKeyType>({\n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme: cache.current.colorScheme\n });\n\n const lineHeightOptions = {\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n };\n\n const preferences: IEpubPreferences = isFXL ? {} : {\n columnCount: cache.current.settings.columnCount === \"auto\" ? null : Number(cache.current.settings.columnCount),\n constraint: initialConstraint,\n fontFamily: cache.current.settings.fontFamily && defaultFontFamilyOptions[cache.current.settings.fontFamily],\n fontSize: cache.current.settings.fontSize,\n fontWeight: cache.current.settings.fontWeight,\n hyphens: cache.current.settings.hyphens,\n letterSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.letterSpacing,\n lineHeight: cache.current.settings.publisherStyles \n ? undefined \n : cache.current.settings.lineHeight === null \n ? null \n : lineHeightOptions[cache.current.settings.lineHeight],\n optimalLineLength: cache.current.settings.lineLength?.optimal,\n maximalLineLength: cache.current.settings.lineLength?.max?.isDisabled \n ? null \n : cache.current.settings.lineLength?.max?.chars,\n minimalLineLength: cache.current.settings.lineLength?.min?.isDisabled \n ? null \n : cache.current.settings.lineLength?.min?.chars,\n paragraphIndent: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphIndent,\n paragraphSpacing: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphSpacing,\n scroll: cache.current.settings.scroll,\n textAlign: cache.current.settings.textAlign as unknown as TextAlignment | null | undefined,\n textNormalization: cache.current.settings.textNormalization,\n wordSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.wordSpacing,\n ...themeProps\n };\n\n const defaults: IEpubDefaults = isFXL ? {} : {\n maximalLineLength: RSPrefs.typography.maximalLineLength, \n minimalLineLength: RSPrefs.typography.minimalLineLength, \n optimalLineLength: RSPrefs.typography.optimalLineLength,\n pageGutter: RSPrefs.typography.pageGutter,\n scrollPaddingTop: RSPrefs.theming.layout.ui?.reflow === ThLayoutUI.layered \n ? (RSPrefs.theming.icon.size || 24) * 3 \n : (RSPrefs.theming.icon.size || 24),\n scrollPaddingBottom: RSPrefs.theming.layout.ui?.reflow === ThLayoutUI.layered \n ? (RSPrefs.theming.icon.size || 24) * 5 \n : (RSPrefs.theming.icon.size || 24)\n }\n \n EpubNavigatorLoad({\n container: container.current, \n publication: publication,\n listeners: listeners, \n positionsList: positionsList,\n initialPosition: initialPosition ?? undefined,\n preferences: preferences,\n defaults: defaults\n }, () => p.observe(window));\n })\n .finally(() => {\n const setLoadingThunk = (dispatch: AppDispatch) => {\n dispatch(setLoading(false));\n };\n dispatch(setLoadingThunk);\n });\n\n return () => {\n EpubNavigatorDestroy(() => p.destroy());\n };\n }, [publication, RSPrefs, fxlThemeKeys, reflowThemeKeys]);\n\n // If breakpoint is not defined, we are not ready to render\n // since useDocking needs it to derive the sheet type\n // Same for arrows and collapsible actions.\n if (!breakpoint) return null;\n\n return (\n <>\n <I18nProvider locale={ RSPrefs.locale }>\n <ThPluginProvider>\n <main id=\"reader-main\">\n <StatefulDockingWrapper>\n <div \n id=\"reader-shell\" \n className={ \n classNames(\n isFXL ? \"isFXL\" : \"isReflow\",\n isImmersive ? \"isImmersive\" : \"\",\n isHovering ? \"isHovering\" : \"\",\n isScroll ? \"isScroll\" : \"isPaged\",\n layoutUI,\n breakpoint\n )\n }\n >\n <StatefulReaderHeader layout={ layoutUI } />\n\n { !isScroll \n ? <nav className={ arrowStyles.container } id={ arrowStyles.left }>\n <StatefulReaderArrowButton \n direction=\"left\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationStart } \n onPress={ () => goLeft(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n <article id=\"wrapper\" aria-label={ t(\"reader.app.publicationWrapper\") }>\n <div id=\"container\" ref={ container }></div>\n </article>\n\n { !isScroll \n ? <nav className={ arrowStyles.container } id={ arrowStyles.right }>\n <StatefulReaderArrowButton \n direction=\"right\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationEnd } \n onPress={ () => goRight(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n <StatefulReaderFooter layout={ layoutUI } />\n </div>\n </StatefulDockingWrapper>\n </main>\n </ThPluginProvider>\n </I18nProvider>\n </>\n)};","import * as React from \"react\";\nconst SvgFullscreen = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z\" /></svg>;\nexport default SvgFullscreen;","import * as React from \"react\";\nconst SvgFullscreenExit = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-120v-120H120v-80h200v200h-80Zm400 0v-200h200v80H720v120h-80ZM120-640v-80h120v-120h80v200H120Zm520 0v-200h80v120h120v80H640Z\" /></svg>;\nexport default SvgFullscreenExit;","\"use client\";\n\nimport React from \"react\";\n\nimport { UnstableShortcut, UnstableShortcutRepresentation, buildShortcut, metaKeys } from \"@/core/Helpers/keyboardUtilities\";\n\nimport { Keyboard } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport const UnstableStatefulShortcut = ({\n className,\n rawForm,\n representation,\n joiner\n}: UnstableShortcut) => {\n const RSPrefs = usePreferences();\n const platformModifier = useAppSelector(state => state.reader.platformModifier);\n\n representation = representation ? representation : RSPrefs.shortcuts.representation || UnstableShortcutRepresentation.symbol;\n joiner = joiner ? joiner : RSPrefs.shortcuts.joiner || \" + \";\n\n const shortcutObj = buildShortcut(rawForm);\n\n if (shortcutObj) {\n let shortcutRepresentation = [];\n\n for (const prop in shortcutObj.modifiers) {\n if (shortcutObj.modifiers[prop]) {\n if (prop === \"platformKey\") {\n shortcutRepresentation.push(platformModifier[representation]);\n } else {\n const metaKey = metaKeys[prop];\n shortcutRepresentation.push(metaKey[representation as UnstableShortcutRepresentation]);\n }\n }\n }\n\n if (shortcutObj.char) {\n shortcutRepresentation.push(shortcutObj.char);\n }\n\n if (shortcutRepresentation.length > 0) {\n const displayShortcut = shortcutRepresentation.join(joiner);\n \n return (\n <Keyboard className={ className }>{ displayShortcut }</Keyboard>\n ) \n } else {\n return (\n <></>\n )\n }\n }\n\n return (\n <></>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nimport overflowMenuStyles from \"../assets/styles/overflowMenu.module.css\";\n\nimport { Text } from \"react-aria-components\";\nimport { UnstableStatefulShortcut as StatefulShortcut } from \"./UnstableStatefulShortcut\";\n\nimport { ThMenuItem, ThMenuItemProps } from \"@/core/Components/Menu/ThMenuItem\";\n\nexport interface StatefulOverflowMenuItemProps extends Omit<ThMenuItemProps, \"shortcut\"> {\n shortcut?: string | null\n}\n\nexport const StatefulOverflowMenuItem = ({\n id,\n label,\n SVGIcon,\n shortcut = undefined,\n ...props\n}: StatefulOverflowMenuItemProps) => {\n const menuItemLabelId = `${id}-label`;\n \n return(\n <>\n <ThMenuItem \n id={ id } \n label={ label }\n className={ overflowMenuStyles.menuItem } \n aria-labelledby={ menuItemLabelId } \n { ...props }\n >\n { SVGIcon && <SVGIcon aria-hidden=\"true\" focusable=\"false\" /> }\n <Text \n className={ overflowMenuStyles.menuItemLabel } \n slot=\"label\"\n id={ menuItemLabelId }\n >\n { label }\n </Text>\n { shortcut && <StatefulShortcut\n className={ overflowMenuStyles.menuItemKbdShortcut } \n rawForm={ shortcut } \n /> }\n </ThMenuItem>\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport FullscreenCorners from \"./assets/icons/fullscreen.svg\";\nimport FullscreenExit from \"./assets/icons/fullscreen_exit.svg\";\n\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useFullscreen } from \"@/core/Hooks/useFullscreen\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setFullscreen, setHovering } from \"@/lib/readerReducer\";\nimport { isIOSish } from \"@/core/Helpers/getPlatform\";\n\nexport const StatefulFullscreenTrigger = ({ variant }: StatefulActionTriggerProps) => {\n // Note: Not using React Aria ToggleButton here as fullscreen is quite\n // difficult to control in isolation due to collapsibility + shortcuts\n\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n\n const dispatch = useAppDispatch();\n const onChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n \n const fs = useFullscreen(onChange);\n\n const label = fs.isFullscreen ? t(\"reader.fullscreen.close\") : t(\"reader.fullscreen.trigger\");\n const Icon = fs.isFullscreen ? FullscreenExit : FullscreenCorners;\n\n const handlePress = () => {\n fs.handleFullscreen();\n // Has to be dispatched manually, otherwise stays true… \n dispatch(setHovering(false));\n // TODO: fix hover state on exit, if even possible w/o a lot of getting around…\n };\n\n // Per React doc/principles this isn’t common but FullScreen is quite an edge case cos’ of iPadOS…\n // And Actions is still a work in progress, with opportunities to rewrite/refactor\n // Note we don’t check window.matchMedia(\"(display-mode: standalone)\").matches as this is not a PWA yet\n // And more values here: https://web.dev/learn/pwa/detection\n if (!document.fullscreenEnabled || isIOSish()) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ label }\n SVGIcon={ Icon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].shortcut }\n onAction={ fs.handleFullscreen } \n id={ ThActionsKeys.fullscreen }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.iconCompSm }\n visibility={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].visibility } \n aria-label={ label }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.fullscreen.tooltip\") } \n onPress={ handlePress } \n >\n <Icon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgPinDrop = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M480-301q99-80 149.5-154T680-594q0-90-56-148t-144-58q-88 0-144 58t-56 148q0 65 50.5 139T480-301Zm0 101Q339-304 269.5-402T200-594q0-125 78-205.5T480-880q124 0 202 80.5T760-594q0 94-69.5 192T480-200Zm0-320q33 0 56.5-23.5T560-600q0-33-23.5-56.5T480-680q-33 0-56.5 23.5T400-600q0 33 23.5 56.5T480-520ZM200-80v-80h560v80H200Zm280-520Z\" /></svg>;\nexport default SvgPinDrop;","\"use client\";\n\nimport React from \"react\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport TargetIcon from \"./assets/icons/pin_drop.svg\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setActionOpen, useAppDispatch, useAppSelector } from \"@/lib\";\n\nexport const StatefulJumpToPositionTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.jumpToPosition,\n isOpen: value \n }));\n }\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.jumpToPosition.trigger\") }\n SVGIcon={ TargetIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].shortcut }\n id={ ThActionsKeys.jumpToPosition }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon\n visibility={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].visibility } \n aria-label={ t(\"reader.jumpToPosition.trigger\") }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.jumpToPosition.tooltip\") }\n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TargetIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgDockToRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-80v-560H200v560h120Zm80 0h360v-560H400v560Zm-80 0H200h120Z\" /></svg>;\nexport default SvgDockToRight;","import * as React from \"react\";\nconst SvgDockToLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm440-80h120v-560H640v560Zm-80 0v-560H200v560h360Zm80 0h120-120Z\" /></svg>;\nexport default SvgDockToLeft;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockStart = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const translationKey = isRTL \n ? \"reader.app.docker.dockToRight\" \n : \"reader.app.docker.dockToLeft\";\n const localeKey = {\n trigger: t(`${ translationKey }.trigger`),\n tooltip: t(`${ translationKey }.tooltip`)\n };\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.start;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.start\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DocktoRight : DockToLeft } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.start].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.start }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockEnd = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const translationKey = isRTL \n ? \"reader.app.docker.dockToLeft\" \n : \"reader.app.docker.dockToRight\";\n const localeKey = {\n trigger: t(`${ translationKey }.trigger`),\n tooltip: t(`${ translationKey }.tooltip`)\n };\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.end;\n\n const dispatch = useAppDispatch();\n \n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.end\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DockToLeft : DocktoRight } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.end].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.end }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgStack = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-400v80h-80q-33 0-56.5-23.5T80-400v-400q0-33 23.5-56.5T160-880h400q33 0 56.5 23.5T640-800v80h-80v-80H160v400h80ZM400-80q-33 0-56.5-23.5T320-160v-400q0-33 23.5-56.5T400-640h400q33 0 56.5 23.5T880-560v400q0 33-23.5 56.5T800-80H400Zm0-80h400v-400H400v400Zm200-200Z\" /></svg>;\nexport default SvgStack;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport Stack from \"./assets/icons/stack.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockTransientPopover = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const isDisabled = !actions.isDocked(associatedKey) || actions.whichDocked(associatedKey) === ThDockingKeys.transient;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.transient\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.app.docker.popover.trigger\") }\n SVGIcon={ Stack } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.transient].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.transient }-${ associatedKey }` } \n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ t(\"reader.app.docker.popover.trigger\") }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.app.docker.popover.tooltip\") } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n <Stack aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport { Toolbar } from \"react-aria-components\";\n\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\nimport { StatefulCollapsibleActionsBar } from \"../Actions/StatefulCollapsibleActionsBar\";\n\nimport { StatefulDockStart } from \"./StatefulDockStart\";\nimport { StatefulDockEnd } from \"./StatefulDockEnd\";\nimport { StatefulDockTransientPopover } from \"./StatefulDockTransientPopover\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nconst dockingComponentsMap = {\n [ThDockingKeys.start]: {\n trigger: StatefulDockStart\n },\n [ThDockingKeys.end]: {\n trigger: StatefulDockEnd\n },\n [ThDockingKeys.transient]: {\n trigger: StatefulDockTransientPopover\n }\n}\n\nexport interface StatefulDockerProps {\n id: ActionsStateKeys;\n keys: ThDockingKeys[];\n ref: React.ForwardedRef<HTMLButtonElement>;\n onClose: () => void;\n}\n\nexport const StatefulDocker = ({\n id,\n keys,\n ref,\n onClose\n}: StatefulDockerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n \n const listActionItems = useCallback(() => {\n const actionsItems: ThActionEntry<ThDockingKeys>[] = [];\n\n keys.map((key) => {\n actionsItems.push({\n Trigger: dockingComponentsMap[key].trigger,\n key: key,\n associatedKey: id\n })\n });\n\n return actionsItems;\n }, [keys, id]);\n\n return(\n <>\n <Toolbar className={ dockingStyles.dockerWrapper }>\n <StatefulCollapsibleActionsBar \n id={ `${ id }-docker-overflowMenu` }\n items={ listActionItems() }\n className={ dockingStyles.docker } \n overflowMenuClassName={ readerSharedUI.dockerButton }\n prefs={ RSPrefs.docking }\n aria-label={ t(\"reader.app.docker.wrapper\") }\n />\n\n <ThCloseButton \n ref={ ref }\n className={ readerSharedUI.dockerButton } \n aria-label={ t(\"reader.app.docker.close.trigger\") } \n onPress={ onClose }\n compounds={ {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip\n },\n label: t(\"reader.app.docker.close.tooltip\")\n }}\n />\n </Toolbar>\n </>\n )\n}\n\n","import { useEffect } from \"react\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppSelector } from \"@/lib\";\n\n/** For some unknown reason, React Aria Components’ Popover and Modal Components\n * are breaking scroll on webkit based browsers in version 1.11.0. \n * It is all the more mind-boggling that the hook we are using for \n * the Bottom Sheet don’t seem to be affected by this issue – but it could be forcing\n * a reflow thanks to its animation. \n * \n * NOTE: This is treating the symptoms and is unsustainable in the long run. \n * We have to find the root cause of this issue and fix it, \n * especially as TS-Toolkit already resolves this bug\n * when the resources are loaded into the iframe directly as scroll. \n*/\nexport const useWebkitPatch = (isOpen: boolean) => {\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const {\n getCframes\n } = useEpubNavigator();\n\n useEffect(() => {\n if (isScroll && !isOpen) {\n // We have to force a reflow on the iframe container to fix the issue.\n // Using the infamous Recalc technique (adding a style element with *{}) \n // in the iframe contentDocument does not work.\n const container = document.getElementById(\"container\");\n if (!container) return;\n\n const currentHeight = container.offsetHeight;\n container.style.height = `${ currentHeight - 1 }px`;\n\n // Otherwise Safari will ignore the reflow.\n setTimeout(() => {\n container.style.height = \"\";\n\n // This is where it becomes unsustainable, because we have to \n // force a scroll on the iframe scrolling element so that Safari\n // even renders the content that is below the viewport…\n // We only have access to the iframe scrolling element\n // because we are on the same origin…\n const frame = getCframes()?.[0];\n if (!frame?.window?.document?.scrollingElement) return;\n\n const currentScrollTop = frame.window.document.scrollingElement.scrollTop;\n\n if (currentScrollTop > 1) {\n frame.window.document.scrollingElement.scrollTop = currentScrollTop - 1;\n } else {\n frame.window.document.scrollingElement.scrollTop = currentScrollTop + 1;\n }\n\n frame.window.document.scrollingElement.scrollTop = currentScrollTop;\n }, 0);\n }\n }, [isScroll, isOpen, getCframes]);\n};\n","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { PopoverProps } from \"react-aria-components\";\n\nimport { ThPopover } from \"@/core/Components/Containers/ThPopover\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\n\nimport { useI18n } from \"@/i18n\";\nimport { useWebkitPatch } from \"./hooks/useWebkitPatch\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulPopoverSheetProps extends StatefulSheet {\n placement?: PopoverProps[\"placement\"];\n}\n\nexport const StatefulPopoverSheet = ({ \n id,\n triggerRef,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n placement,\n docker,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n }: StatefulPopoverSheetProps) => {\n const { t } = useI18n()\n const direction = useAppSelector(state => state.reader.direction);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const popoverHeaderRef = useRef<HTMLDivElement | null>(null);\n const popoverBodyRef = useRef<HTMLDivElement | null>(null);\n const popoverCloseRef = useRef<HTMLButtonElement | null>(null);\n\n // Warning: This is a temporary fix for a bug in React Aria Components.\n useWebkitPatch(!!isOpen);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThPopover \n ref={ popoverRef }\n triggerRef={ triggerRef }\n focusOptions={{\n withinRef: focusWithinRef ?? popoverBodyRef,\n trackedState: isOpen,\n fallbackRef: popoverCloseRef,\n updateState: resetFocus\n }}\n placement={ placement || \"bottom\" }\n className={ classNames(sheetStyles.popOverSheet , className) }\n isOpen={ isOpen }\n onOpenChange={ onOpenChange } \n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": popoverHeaderRef.current ? `${ popoverHeaderRef.current.clientHeight }px` : undefined\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n >\n <ThContainerHeader \n ref={ popoverHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ t(\"reader.app.back.trigger\") }\n ref={ popoverCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n />\n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ popoverCloseRef }\n onClose={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody\n ref={ popoverBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThPopover>\n </>\n ) \n }\n}","\"use client\";\n\nimport React, { CSSProperties, KeyboardEvent, useCallback, useMemo, useRef } from \"react\";\n\nimport { ThBottomSheetDetent, ThSheetHeaderVariant } from \"@/preferences\";\n\nimport { StatefulSheet } from \"./models/sheets\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { SheetRef } from \"react-modal-sheet\";\n\nimport { ThBottomSheet } from \"@/core/Components/Containers/ThBottomSheet\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulBottomSheetProps extends StatefulSheet {};\n\nexport interface ScrimPref {\n active: boolean;\n override?: string;\n}\n\nconst DEFAULT_SNAPPOINTS = {\n min: 0.3,\n peek: 0.5,\n max: 1\n}\n\nexport const StatefulBottomSheet = ({\n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n}: StatefulBottomSheetProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n()\n const direction = useAppSelector((state) => state.reader.direction);\n const prefersReducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n\n const sheetRef = useRef<SheetRef | null>(null);\n const sheetContainerRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const detent = useRef<ThBottomSheetDetent>(\"full-height\");\n const isDraggable = useRef<boolean>(true);\n\n const snapArray = useMemo(() => {\n // Val is always checked in 0...1 range\n const getSecureVal = (val: number, ref: number) => {\n if (val > ref) {\n return val;\n } else {\n return ((1 - ref) / 2) + ref;\n }\n };\n\n // Array needs max @ index 0 and min @ index 2 when complete\n // If it doesn’t have a max, then peek is @ index 0. This means\n // the initialProp should always be one item from last\n let snapArray: number[] = [];\n\n const snapPref = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped;\n if (snapPref) {\n // We must start with minHeight to see if it’s \n // constrained by a detent as it means\n // the bottom sheet is not draggable.\n // Hence why unshifting into the array instead of pushing\n if (snapPref.minHeight) {\n switch(snapPref.minHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.minHeight === 100 ? \"full-height\" : snapPref.minHeight;\n isDraggable.current = false;\n return [];\n default:\n const minVal = snapPref.minHeight / 100;\n // Protecting against pref > 100\n minVal > 0 && minVal < 1 \n ? snapArray.unshift(minVal) \n : snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n }\n\n // From now on, check if value is greater than the previous one in array\n // If not, use DEFAULT_SNAPPOINTS fallback and check it as well\n // This is to protect from cases that don’t validate min < peek < max\n\n // If peekHeight is constrained by a detent\n // then there is no maxHeight\n if (snapPref.peekHeight) {\n switch(snapPref.peekHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.peekHeight === 100 ? \"full-height\" : snapPref.peekHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const peekVal = snapPref.peekHeight / 100;\n const prevVal = snapArray[0];\n\n peekVal > 0 && peekVal < 1\n ? snapArray.unshift(getSecureVal(peekVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, prevVal))\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, snapArray[0]));\n }\n\n // If max-height is constrained by a content-height detent\n // then it means the bottom sheet can’t be fullscreen\n // Otherwise we can remove the top corners radii\n if (snapPref.maxHeight) {\n switch(snapPref.maxHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.maxHeight === 100 ? \"full-height\" : snapPref.maxHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const maxVal = snapPref.maxHeight / 100;\n const prevVal = snapArray[0];\n\n maxVal > 0 && maxVal < 1 \n ? snapArray.unshift(getSecureVal(maxVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, prevVal));\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, snapArray[0]));\n }\n } else {\n // There is no pref set\n // Reminder: order of React Modal Sheet is descending so max, peek, min\n snapArray.push(DEFAULT_SNAPPOINTS.max, DEFAULT_SNAPPOINTS.peek, DEFAULT_SNAPPOINTS.min);\n }\n\n return snapArray;\n }, [id, RSPrefs]);\n\n const snapIdx = useRef<number | null>(null);\n\n const onDragPressCallback = useCallback(() => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n const nextIdx = snapIdx.current === 0 ? snapArray.length - 1 : (snapIdx.current - 1);\n sheetRef.current?.snapTo(nextIdx);\n }\n }, [snapArray]);\n\n const onDragKeyCallback = useCallback((e: KeyboardEvent) => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n // Implementation is being kept consistent with React Resizable Panels, which\n // implements this logic by default for PanelResizeHandle when focused\n switch(e.code) {\n case \"PageUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(0);\n break;\n case \"ArrowUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(snapIdx.current - 1);\n break;\n case \"PageDown\":\n onClosePress();\n break;\n case \"ArrowDown\":\n if (snapIdx.current === snapArray.length - 1) {\n onClosePress();\n break;\n }\n sheetRef.current?.snapTo(snapIdx.current + 1)\n break;\n default:\n break;\n }\n }\n }, [snapArray, onClosePress]);\n\n const maxWidthPref = useMemo(() => {\n const maxWidth = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.maxWidth;\n if (typeof maxWidth === \"undefined\") {\n return undefined;\n } else if (maxWidth === null) {\n return \"100%\";\n } else {\n return `${ maxWidth }px`;\n }\n }, [id, RSPrefs]);\n\n const scrimPref = useMemo(() => {\n let scrimPref: ScrimPref = {\n active: false,\n override: undefined\n }\n const scrim = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.scrim;\n if (scrim) {\n scrimPref.active = true;\n\n if (typeof scrim === \"string\") {\n scrimPref.override = scrim;\n }\n }\n\n return scrimPref;\n }, [id, RSPrefs]);\n\n const detentClassName = useMemo(() => {\n let className = \"\";\n if (detent.current === \"content-height\") {\n className = sheetStyles.bottomSheetModalContentHeightDetent;\n } else {\n className = sheetStyles.bottomSheetModalFullHeightDetent;\n }\n return className;\n }, [detent]);\n\n const scrimClassName = useMemo(() => {\n return scrimPref.active ? sheetStyles.bottomSheetScrim : \"\";\n }, [scrimPref]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThBottomSheet\n id={ id }\n ref={ sheetRef }\n isOpen={ isOpen }\n focusOptions={{\n withinRef: focusWithinRef ?? bottomSheetBodyRef,\n trackedState: isOpen,\n fallbackRef: bottomSheetCloseRef,\n updateState: resetFocus\n }}\n onOpenChange={ onOpenChange }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n { ...(snapArray.length > 1 \n ? { \n snapPoints: snapArray, \n initialSnap: snapArray.length - 2,\n detent: detent.current\n } \n : {\n detent: detent.current\n }) \n }\n onSnap={ (index) => { snapIdx.current = index }}\n prefersReducedMotion={ prefersReducedMotion }\n compounds={ {\n container: {\n className: classNames(sheetStyles.bottomSheetModal, detentClassName),\n ref: sheetContainerRef,\n style: {\n maxWidth: maxWidthPref \n } as CSSProperties\n },\n dragIndicator: {\n className: sheetStyles.dragIndicator,\n onPress: onDragPressCallback,\n onKeyDown: onDragKeyCallback\n },\n content: {\n className: classNames(sheetStyles.bottomSheet, className),\n disableDrag: true\n },\n scroller: {\n className: classNames(sheetStyles.bottomSheetScroller, sheetStyles.sheetBody),\n draggable: false\n },\n backdrop: {\n className: classNames(sheetStyles.bottomSheetBackdrop, scrimClassName),\n style: { \"--defaults-scrim\": scrimPref.override }\n }\n } }\n >\n <ThContainerHeader\n label={ heading }\n className={ sheetStyles.bottomSheetHeader }\n compounds={ {\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ t(\"reader.app.back.trigger\") }\n ref={ bottomSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n /> \n : <ThCloseButton\n ref={ bottomSheetCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ t(\"reader.app.docker.close.trigger\") } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ bottomSheetBodyRef }\n >\n { children }\n </ThContainerBody>\n </ThBottomSheet>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThModal } from \"@/core/Components/Containers/ThModal\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { useI18n } from \"@/i18n\";\nimport { useWebkitPatch } from \"./hooks/useWebkitPatch\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulFullScreenSheetProps extends StatefulSheet {};\n\nexport const StatefulFullScreenSheet = ({\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n }: StatefulFullScreenSheetProps) => {\n const { t } = useI18n()\n const direction = useAppSelector(state => state.reader.direction);\n const fullScreenHeaderRef = useRef<HTMLDivElement | null>(null);\n const fullScreenBodyRef = useRef<HTMLDivElement | null>(null);\n const fullScreenCloseRef = useRef<HTMLButtonElement | null>(null);\n\n // Warning: This is a temporary fix for a bug in React Aria Components.\n useWebkitPatch(!!isOpen);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThModal \n ref={ fullScreenBodyRef }\n focusOptions={{\n withinRef: focusWithinRef ?? fullScreenBodyRef,\n trackedState: isOpen,\n fallbackRef: fullScreenCloseRef,\n updateState: resetFocus\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n isOpen={ isOpen }\n onOpenChange={ onOpenChange }\n isDismissable={ true }\n className={ classNames(sheetStyles.fullScreenSheet, className) }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": fullScreenHeaderRef.current ? `${ fullScreenHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ fullScreenHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous\n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ t(\"reader.app.back.trigger\") }\n ref={ fullScreenCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n />\n : <ThCloseButton\n ref={ fullScreenCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ t(\"reader.app.docker.close.trigger\") } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ fullScreenBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThModal>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThDockingKeys, ThSheetHeaderVariant, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockedPanel } from \"@/core/Components/Containers/ThDockedPanel\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { useI18n } from \"@/i18n\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulDockedSheetProps extends StatefulSheet {\n flow: ThDockingKeys.start | ThDockingKeys.end | null;\n}\n\nexport const StatefulDockedSheet = ({ \n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onClosePress,\n docker, \n flow,\n children,\n resetFocus,\n focusWithinRef\n }: StatefulDockedSheetProps) => {\n const { t } = useI18n()\n const dockPortal = flow && document.getElementById(flow);\n const dockedSheetHeaderRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetLeftBorder : sheetStyles.dockedSheetRightBorder;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetRightBorder : sheetStyles.dockedSheetLeftBorder;\n }\n }, [flow, direction]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThDockedPanel\n isOpen={ isOpen }\n portal={ dockPortal }\n focusOptions={ {\n withinRef: focusWithinRef ?? dockedSheetBodyRef, \n trackedState: isOpen, \n fallbackRef: dockedSheetCloseRef,\n autoFocus: false,\n updateState: resetFocus\n }}\n className={ classNames(sheetStyles.dockedSheet, className, classFromFlow()) }\n style={{\n \"--sheet-sticky-header\": dockedSheetHeaderRef.current ? `${ dockedSheetHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ dockedSheetHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" } \n label={ t(\"reader.app.back.trigger\") }\n ref={ dockedSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n /> \n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ dockedSheetCloseRef }\n onClose={ onClosePress }\n />\n } \n </ThContainerHeader>\n <ThContainerBody \n ref={ dockedSheetBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThDockedPanel>\n </>\n )\n }\n}","\"use client\";\n\nimport { ReactNode } from \"react\";\n\nimport { ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { ThTypedComponentRenderer } from \"@/core/Components/Containers/ThTypedComponentRenderer\";\nimport { StatefulPopoverSheet, StatefulPopoverSheetProps } from \"./StatefulPopoverSheet\";\nimport { StatefulBottomSheet, StatefulBottomSheetProps } from \"./StatefulBottomSheet\";\nimport { StatefulFullScreenSheet, StatefulFullScreenSheetProps } from \"./StatefulFullScreenSheet\";\nimport { StatefulDockedSheet, StatefulDockedSheetProps } from \"./StatefulDockedSheet\";\n\nconst componentMap = {\n [ThSheetTypes.popover]: StatefulPopoverSheet,\n [ThSheetTypes.bottomSheet]: StatefulBottomSheet,\n [ThSheetTypes.fullscreen]: StatefulFullScreenSheet,\n [ThSheetTypes.dockedStart]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.start } />,\n [ThSheetTypes.dockedEnd]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.end } />\n};\n\nexport const StatefulSheetWrapper = ({\n sheetType,\n sheetProps,\n children\n}: {\n sheetType: ThSheetTypes,\n sheetProps: StatefulPopoverSheetProps | StatefulFullScreenSheetProps | StatefulDockedSheetProps | StatefulBottomSheetProps,\n children: ReactNode\n}) => {\n\n return (\n <ThTypedComponentRenderer\n type={ sheetType }\n componentMap={ componentMap }\n props={ sheetProps }\n >\n { children }\n </ThTypedComponentRenderer>\n );\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { BreakpointsMap } from \"@/core/Hooks/useBreakpoints\";\nimport { ThDockingTypes, ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport { dockAction, setActionOpen } from \"@/lib/actionsReducer\";\n\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nlet dockingMap: Required<BreakpointsMap<ThDockingTypes>> | null = null;\n\nexport const useDocking = <T extends string>(key: T) => {\n const RSPrefs = usePreferences();\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actionState = actionsMap[key];\n const dispatch = useAppDispatch();\n\n const actions = useActions(actionsMap);\n\n if (!dockingMap) {\n dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none \n });\n }\n const currentDockConfig = breakpoint && dockingMap[breakpoint];\n \n // Use type assertion to tell TypeScript that the key is valid\n const dockablePref = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.docked?.dockable || ThDockingTypes.none;\n \n const defaultSheet = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover;\n \n const sheetMap = makeBreakpointsMap<ThSheetTypes>({\n defaultValue: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover,\n fromEnum: ThSheetTypes,\n pref: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.breakpoints\n });\n const sheetPref = breakpoint && sheetMap[breakpoint] || defaultSheet;\n\n const [sheetType, setSheetType] = useState<ThSheetTypes>(defaultSheet);\n const previousSheetType = usePrevious(sheetType);\n\n // Checks whether the action can be docked: its pref should match the docking pref\n const canBeDocked = useCallback((slot: ThDockingTypes.start | ThDockingTypes.end) => {\n return (currentDockConfig === slot || currentDockConfig === ThDockingTypes.both) \n && (dockablePref === slot || dockablePref === ThDockingTypes.both);\n }, [currentDockConfig, dockablePref]);\n\n // Checks whether the sheet pref is of Dock type \n const isDockedSheetPref = useCallback((type?: ThSheetTypes.dockedStart | ThSheetTypes.dockedEnd) => {\n if (type) {\n return sheetPref === type;\n } else {\n return sheetPref === ThSheetTypes.dockedStart || sheetPref === ThSheetTypes.dockedEnd\n }\n }, [sheetPref]);\n \n // Builds the docker for the action based on all preferences\n const getDocker = useCallback((): ThDockingKeys[] => {\n // First let’s handle the cases where docker shouldn’t be used\n // The sheet is not dockable, per key.docked.dockable pref\n if (dockablePref === ThDockingTypes.none) return [];\n // There’s no docking slot available, per docking.dock pref\n if (currentDockConfig === ThDockingTypes.none) return [];\n // The sheet type is not compatible with docking\n if (sheetPref === ThSheetTypes.fullscreen || sheetPref === ThSheetTypes.bottomSheet) return [];\n\n // We can now build the docker from the display order\n let dockerKeys: ThDockingKeys[] = [];\n // In order for an action to be dockable, the dock slot has to exist\n // and the dockable preference of key.docked should match the values\n RSPrefs.docking.displayOrder.forEach((dockingKey: ThDockingKeys) => {\n switch(dockingKey) {\n case ThDockingKeys.transient:\n // We already handled both cases for none \n dockerKeys.push(dockingKey);\n break;\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n dockerKeys.push(dockingKey);\n }\n break;\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n dockerKeys.push(dockingKey);\n }\n break;\n default:\n break;\n }\n });\n\n // If the action can only be transient, then it can’t be docked\n if (dockerKeys.length === 1 && dockerKeys[0] === ThDockingKeys.transient) return [];\n\n return dockerKeys;\n }, [RSPrefs.docking.displayOrder, currentDockConfig, sheetPref, dockablePref, canBeDocked]);\n\n const getSheetType = useCallback(() => {\n // First check the dockable pref is none to return early\n if (dockablePref === ThDockingTypes.none) {\n // Sheet is of docked type, we return the default\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n // Sheet pref is not of docked type, we can return it\n return sheetPref;\n }\n };\n\n // We now need to check whether the user has docked the action themselves\n // ActionsReducer should has made sure there is no conflict to handle here \n // by updating states of actions on docking\n switch (actionState?.docking) {\n \n // if action.docking is transient we need to check the pref, \n // it can be docked and in that case we need to pick the default\n case ThDockingKeys.transient:\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n return sheetPref;\n }\n \n // If action.docking is set to start/end then we check the docking slot is available\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n // if the pref is not docked start, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedStart)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n // if the pref is not docked end, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n \n // If action.docking is null or undefined then we rely on pref \n // as it means the user did not pick another option\n case null:\n case undefined:\n // We have to check sheetPref is compatible with docking prefs\n if (isDockedSheetPref(ThSheetTypes.dockedStart)) {\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n return defaultSheet;\n }\n } else if (isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n return defaultSheet;\n }\n } else {\n return sheetPref;\n }\n default:\n return defaultSheet;\n }\n }, [dockablePref, sheetPref, defaultSheet, actionState?.docking, canBeDocked, isDockedSheetPref]);\n\n // When docking or breakpoints-related prefs change, get the correct sheet type\n useEffect(() => {\n setSheetType(getSheetType());\n }, [sheetPref, currentDockConfig, actionState?.docking, getSheetType]);\n\n // Dismiss/Close when sheetType has changed from docked to transient\n useEffect(() => {\n // This was not dismissed on breakpoint change, but by the user\n if (actionState?.docking === ThDockingKeys.transient) return;\n\n if (sheetType !== ThSheetTypes.dockedStart && sheetType !== ThSheetTypes.dockedEnd) {\n if (previousSheetType === ThSheetTypes.dockedStart || previousSheetType === ThSheetTypes.dockedEnd) {\n dispatch(setActionOpen({\n key: key,\n isOpen: false\n }));\n }\n }\n }, [dispatch, key, sheetType, previousSheetType, actionState?.docking]);\n\n // on mount, check whether we should update states for docked sheets from pref\n useEffect(() => {\n if (actionState?.isOpen == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n }\n }\n });\n\n // Edge case where the sheet has been opened/closed and\n // is of dockable type, but the dock panel is not populated\n // e.g. action was mounted as a different type of sheet (breakpoint),\n // and opened/closed. If the user resizes the window (another breakpoint) \n // but we don’t dispatch docking, then it can’t be displayed \n // since the docking slot has never been populated.\n useEffect(() => {\n // Action has been opened/closed by user\n // but it’s not been manually docked, \n // which means the pref is used but \n // has not be instantiated yet, and \n // couldn’t be on first mount because\n // a different type was used in prefs\n if (actionState?.isOpen != null && actionState?.docking == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.start) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n }\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.end) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n }\n }\n }\n }, [dispatch, key, sheetType, actionState?.isOpen, actionState?.docking, actions]);\n\n return {\n getDocker,\n sheetType\n }\n}","\"use client\";\n\nimport React, { FormEvent, useCallback, useEffect, useState } from \"react\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport jumpToPositionStyles from \"./assets/styles/jumpToPosition.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThForm } from \"@/core/Components/Form/ThForm\";\nimport { ThFormNumberField } from \"@/core/Components/Form/Fields/ThFormNumberField\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulJumpToPositionContainer = ({ \n triggerRef \n}: StatefulActionContainerProps) => {\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n\n // TODO: Update. We don’t have a timeline yet, so we use the progression we already have\n const positionNumbers = useAppSelector(state => state.publication.progression.currentPositions);\n\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n const dispatch = useAppDispatch();\n\n const docking = useDocking(ThActionsKeys.jumpToPosition);\n const sheetType = docking.sheetType;\n\n const { go } = useEpubNavigator();\n\n // Component has to handle updates locally since EpubNavigator updates positions, \n // so we use these as an intermediary\n const [position, setPosition] = useState(0);\n\n // Position Numbers can be a range so we must check position is in range\n // And not only that the array simply includes the position\n const positionInRange = useCallback(() => {\n if (!positionNumbers) return false;\n return positionNumbers.length === 2\n ? position >= positionNumbers[0] && position <= positionNumbers[1]\n : position === positionNumbers[0];\n }, [position, positionNumbers]);\n\n // Update the label to use react-i18next interpolation\n const label = t(\"reader.jumpToPosition.label\", { positionStart: 1, positionEnd: positionsList.length });\n\n const setOpen = useCallback((value: boolean) => {\n dispatch(setActionOpen({\n key: ThActionsKeys.jumpToPosition,\n isOpen: value\n }));\n }, [dispatch]);\n\n // NumberField onChange won’t fire if the value has been typed\n // so we need to handle the input manually\n const handleInput = useCallback((e: FormEvent<HTMLInputElement>) => {\n const target = e.target as HTMLInputElement;\n setPosition(parseInt(target.value));\n }, []);\n\n // This is a form submit handler so we have to preventDefault\n // We have to use this otherwise any change will trigger a navigation\n const handleAction = useCallback((e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (!positionsList) return;\n\n const item = positionsList.find(item => item.locations.position === position);\n\n if (!item || positionInRange()) return setOpen(false);\n\n go(item, !reducedMotion, () => setOpen(false));\n }, [position, positionsList, reducedMotion, positionInRange, go, setOpen]);\n\n // Since we are using an intermediary local state, we must keep track when positionNumbers changes\n useEffect(() => {\n positionNumbers && setPosition(positionNumbers[0]);\n }, [positionNumbers]);\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return (\n <>\n <StatefulSheetWrapper\n sheetType={sheetType}\n sheetProps={{\n id: ThActionsKeys.jumpToPosition,\n triggerRef: triggerRef,\n heading: t(\"reader.jumpToPosition.heading\"),\n className: jumpToPositionStyles.jumpToPosition,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker()\n }}\n >\n <ThForm\n label={ t(\"reader.jumpToPosition.go\") }\n className={ jumpToPositionStyles.jumpToPositionForm }\n onSubmit={ handleAction }\n compounds={{\n button: {\n className: jumpToPositionStyles.jumpToPositionButton,\n isDisabled: !position || positionInRange()\n }\n }}\n >\n <ThFormNumberField\n label={ label }\n name=\"jumpToPosition\"\n className={ jumpToPositionStyles.jumpToPositionNumberField }\n onChange={ setPosition }\n onInput={ handleInput }\n value={ position }\n minValue={ 1 }\n maxValue={ positionsList.length }\n step={ 1 }\n formatOptions={{ style: \"decimal\" }}\n isWheelDisabled={ true }\n compounds={{\n label: {\n className: jumpToPositionStyles.jumpToPositionLabel\n },\n input: {\n className: jumpToPositionStyles.jumpToPositionInput,\n inputMode: \"numeric\"\n }\n }}\n />\n </ThForm>\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgMatchCase = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"m131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z\" /></svg>;\nexport default SvgMatchCase;","\"use client\";\n\nimport TuneIcon from \"./assets/icons/match_case.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.settings.trigger\") }\n SVGIcon={ TuneIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.settings].shortcut } \n id={ ThActionsKeys.settings }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.settings].visibility }\n aria-label={ t(\"reader.settings.trigger\") }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.settings.tooltip\") } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TuneIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n usePreferenceKeys\n} from \"@/preferences\";\n\nimport { \n ThActionsKeys, \n ThSettingsContainerKeys, \n ThSheetHeaderVariant\n} from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\n\nimport { StatefulSpacingGroupContainer } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextGroupContainer } from \"../../Epub/Settings/StatefulTextGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"@/components/Plugins/PluginProvider\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setHovering, setSettingsContainer } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsContainer = ({ \n triggerRef\n}: StatefulActionContainerProps) => {\n const { \n fxlSettingsKeys, \n mainSpacingSettingsKeys,\n mainTextSettingsKeys,\n reflowSettingsKeys,\n subPanelSpacingSettingsKeys,\n subPanelTextSettingsKeys,\n } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { settingsComponentsMap } = usePlugins();\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const contains = useAppSelector(state => state.reader.settingsContainer);\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const settingItems = useMemo(() => {\n return isFXL ? fxlSettingsKeys : reflowSettingsKeys\n }, [isFXL, fxlSettingsKeys, reflowSettingsKeys]);\n \n const docking = useDocking(ThActionsKeys.settings);\n const sheetType = docking.sheetType;\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n const setInitial = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }, [dispatch]);\n\n const isTextNested = useCallback((key: string) => {\n const textSettings = [\n mainTextSettingsKeys || defaultTextSettingsMain,\n subPanelTextSettingsKeys || defaultTextSettingsSubpanel,\n ].flat() as string[];\n \n return textSettings.includes(key);\n }, [mainTextSettingsKeys, subPanelTextSettingsKeys]);\n \n const isSpacingNested = useCallback((key: string) => {\n const spacingSettings = [\n mainSpacingSettingsKeys || defaultSpacingSettingsMain,\n subPanelSpacingSettingsKeys || defaultSpacingSettingsSubpanel,\n ].flat() as string[];\n \n return spacingSettings.includes(key);\n }, [mainSpacingSettingsKeys, subPanelSpacingSettingsKeys]);\n\n const renderSettings = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return <StatefulTextGroupContainer />;\n \n case ThSettingsContainerKeys.spacing:\n return <StatefulSpacingGroupContainer />;\n\n case ThSettingsContainerKeys.initial:\n default:\n return (\n <>\n { settingItems.length > 0 && settingsComponentsMap \n ? settingItems\n .filter((key) => !(isTextNested(key) || isSpacingNested(key)))\n .map((key) => {\n const match = settingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } { ...match.props } />;\n })\n : <></>\n }\n </>\n );\n }\n }, [settingsComponentsMap, contains, settingItems, isTextNested, isSpacingNested]);\n\n const getHeading = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return t(\"reader.settings.text.title\");\n\n case ThSettingsContainerKeys.spacing:\n return t(\"reader.settings.spacing.title\");\n\n case ThSettingsContainerKeys.initial:\n default:\n return t(\"reader.settings.heading\");\n }\n }, [contains, t]);\n\n const getHeaderVariant = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return RSPrefs.settings.text?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.spacing:\n return RSPrefs.settings.spacing?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.initial:\n default:\n return ThSheetHeaderVariant.close;\n }\n }, [contains, RSPrefs.settings.spacing, RSPrefs.settings.text]);\n\nuseEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && contains !== ThSettingsContainerKeys.initial) {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n}, [contains, dispatch]);\n\n\n // Reset when closed\n useEffect(() => {\n if (!actionState?.isOpen) setInitial();\n }, [actionState?.isOpen, setInitial]);\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.settings,\n triggerRef: triggerRef,\n heading: getHeading(),\n headerVariant: getHeaderVariant(),\n className: settingsStyles.readerSettings,\n placement: \"bottom\", \n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen, \n onClosePress: () => { contains === ThSettingsContainerKeys.initial ? setOpen(false) : setInitial() },\n docker: docking.getDocker(),\n resetFocus: contains,\n dismissEscapeKeyClose: contains !== ThSettingsContainerKeys.initial\n } }\n >\n { renderSettings() }\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgToc = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-280v-80h560v80H120Zm0-160v-80h560v80H120Zm0-160v-80h560v80H120Zm680 320q-17 0-28.5-11.5T760-320q0-17 11.5-28.5T800-360q17 0 28.5 11.5T840-320q0 17-11.5 28.5T800-280Zm0-160q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520q17 0 28.5 11.5T840-480q0 17-11.5 28.5T800-440Zm0-160q-17 0-28.5-11.5T760-640q0-17 11.5-28.5T800-680q17 0 28.5 11.5T840-640q0 17-11.5 28.5T800-600Z\" /></svg>;\nexport default SvgToc;","\"use client\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport TocIcon from \"./assets/icons/toc.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulTocTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.toc.trigger\") }\n SVGIcon={ TocIcon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.toc].shortcut }\n id={ ThActionsKeys.toc }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.toc].visibility }\n aria-label={ t(\"reader.toc.trigger\") } \n placement=\"bottom\"\n tooltipLabel={ t(\"reader.toc.tooltip\") } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TocIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" /></svg>;\nexport default SvgChevronRight;","\"use client\";\n\nimport React, { CSSProperties, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { Link } from \"@readium/shared\";\nimport { ThActionsKeys, ThDockingKeys, ThSheetTypes, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\nimport { TocItem } from \"@/core/Hooks/useTimeline\";\n\nimport tocStyles from \"./assets/styles/toc.module.css\";\n\nimport Chevron from \"./assets/icons/chevron_right.svg\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThFormSearchField } from \"@/core/Components\";\nimport { Button, Collection, Selection, useFilter } from \"react-aria-components\";\nimport {\n Tree,\n TreeItem,\n TreeItemContent\n} from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTocEntry } from \"@/lib/publicationReducer\";\nimport { setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\nexport const StatefulTocContainer = ({ triggerRef }: StatefulActionContainerProps) => {\n const { t } = useI18n();\n\n const treeRef = useRef<HTMLDivElement | null>(null);\n\n const unstableTimeline = useAppSelector(state => state.publication.unstableTimeline);\n const tocEntry = unstableTimeline?.toc?.currentEntry;\n const tocTree = unstableTimeline?.toc?.tree;\n\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const dispatch = useAppDispatch();\n\n const previousTocEntry = usePrevious(tocEntry);\n const [forceRerender, setForceRerender] = useState(0);\n\n const { goLink } = useEpubNavigator();\n\n const docking = useDocking(ThActionsKeys.toc);\n const sheetType = docking.sheetType;\n\n const { contains } = useFilter({ sensitivity: \"base\" });\n const [filterValue, setFilterValue] = React.useState(\"\");\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n const filterTocTree = (items: TocItem[], filterValue: string): TocItem[] => {\n if (!filterValue) {\n return items;\n }\n\n const recursiveFilter = (items: TocItem[]): TocItem[] => {\n return items.reduce((acc: TocItem[], item: TocItem) => {\n if (item.title && contains(item.title, filterValue)) {\n acc.push({ ...item, children: undefined });\n }\n if (item.children) {\n acc.push(...recursiveFilter(item.children));\n }\n return acc;\n }, []);\n };\n\n const result = recursiveFilter(items);\n return result.map((item: TocItem, index: number) => ({ ...item, key: `${item.id}-${index}` }));\n };\n\n const displayedTocTree = filterTocTree(tocTree || [], filterValue);\n\n const setOpen = useCallback((value: boolean) => {\n if (!value) setFilterValue(\"\");\n\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }, [dispatch, setFilterValue]);\n\n const handleAction = (keys: Selection) => {\n if (keys === \"all\" || !keys || keys.size === 0) return;\n\n const key = [...keys][0];\n \n const el = document.querySelector(`[data-key=${key}]`);\n const href = el?.getAttribute(\"data-href\");\n\n if (!href) return;\n\n const link: Link = new Link({ href: href });\n\n const cb = actionState?.isOpen && \n (sheetType === ThSheetTypes.dockedStart || sheetType === ThSheetTypes.dockedEnd)\n ? () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n } \n : () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n setOpen(false);\n }\n\n goLink(link, true, cb);\n };\n\n // Since React Aria components intercept keys and do not continue propagation\n // we have to handle the escape key in capture phase\n useEffect(() => {\n if (actionState?.isOpen && (!actionState?.docking || actionState?.docking === ThDockingKeys.transient)) { \n const handleEscape = (event: KeyboardEvent) => {\n if ((!isActiveElement(searchInputRef.current) && !filterValue) && event.key === \"Escape\" ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n }\n }, [actionState, setOpen, filterValue]);\n\n // For docked sheets they are mounted before we could even retrieve tocEntry…\n // So we need to force a rerender as we cannot rely on dependencies prop\n // TODO: Once we handle fragments, etc. this can be removed, and we can add a condition\n // tocEntry has to be defined to render Tree\n useEffect(() => {\n if (\n (sheetType === ThSheetTypes.dockedStart || sheetType === ThSheetTypes.dockedEnd) && \n tocEntry !== undefined && \n (!previousTocEntry || previousTocEntry !== tocEntry)\n ) {\n setForceRerender(Math.random());\n }\n }, [sheetType, tocEntry, previousTocEntry]);\n\n const isItemInChildren = (item: TocItem, tocEntry?: string | null): boolean => {\n if (item.children && tocEntry) {\n return item.children.some(child => child.id === tocEntry || isItemInChildren(child, tocEntry));\n }\n return false;\n };\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.toc,\n triggerRef: triggerRef, \n heading: t(\"reader.toc.heading\"),\n className: tocStyles.toc,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker(),\n focusWithinRef: treeRef\n } }\n >\n { tocTree && tocTree.length > 0 \n ? (<>\n <ThFormSearchField\n aria-label={ t(\"reader.toc.search.label\") }\n value={ filterValue }\n onChange={ setFilterValue }\n onClear={ () => setFilterValue(\"\") }\n className={ tocStyles.tocSearch }\n compounds={{\n label: {\n className: tocStyles.tocSearchLabel\n },\n input: {\n ref: searchInputRef,\n className: tocStyles.tocSearchInput,\n placeholder: t(\"reader.toc.search.placeholder\")\n },\n searchIcon: {\n className: tocStyles.tocSearchIcon,\n hidden: !!filterValue\n },\n clearButton: {\n className: tocStyles.tocClearButton,\n isDisabled: !filterValue\n }\n }}\n />\n <Tree\n // TODO: Remove this when we handle fragments\n key={ forceRerender }\n ref={ treeRef }\n aria-label={ t(\"reader.toc.entries\") }\n selectionMode=\"single\"\n items={ displayedTocTree }\n className={ tocStyles.tocTree }\n onSelectionChange={ handleAction }\n defaultSelectedKeys={ tocEntry ? [tocEntry] : [] }\n selectedKeys={ tocEntry ? [tocEntry] : [] }\n defaultExpandedKeys={ tocTree\n .filter(item => isItemInChildren(item, tocEntry))\n .map(item => item.id) \n }\n >\n { function renderItem(item) {\n return (\n <TreeItem\n data-href={ item.href }\n className={ tocStyles.tocTreeItem }\n textValue={ item.title || \"\" }\n >\n <TreeItemContent>\n {item.children && (\n <Button\n slot=\"chevron\"\n className={tocStyles.tocTreeItemButton}\n style={{ transform: isRTL ? \"scaleX(-1)\" : \"none\" } as CSSProperties}\n >\n <Chevron aria-hidden=\"true\" focusable=\"false\" />\n </Button>\n )}\n <div className={ tocStyles.tocTreeItemText }>\n <div className={ tocStyles.tocTreeItemTextTitle }>{ item.title }</div>\n { item.position && <div className={ tocStyles.tocTreeItemTextPosition }>{ item.position }</div> }\n </div>\n </TreeItemContent>\n <Collection items={ item.children }>\n { renderItem }\n </Collection>\n </TreeItem>\n );\n } }\n </Tree>\n </>) \n : <div className={ tocStyles.empty }>{ t(\"reader.toc.empty\") }</div>\n }\n </StatefulSheetWrapper>\n </>\n )\n}","import { ThPlugin } from \"../PluginRegistry\";\nimport { ThActionsKeys, ThSettingsKeys } from \"@/preferences/models/enums\";\n\nimport { StatefulFullscreenTrigger } from \"../../Actions/Fullscreen/StatefulFullscreenTrigger\";\nimport { StatefulJumpToPositionTrigger } from \"../../Actions/JumpToPosition/StatefulJumpToPositionTrigger\";\nimport { StatefulJumpToPositionContainer } from \"../../Actions/JumpToPosition/StatefulJumpToPositionContainer\";\nimport { StatefulSettingsTrigger } from \"../../Actions/Settings/StatefulSettingsTrigger\";\nimport { StatefulSettingsContainer } from \"../../Actions/Settings/StatefulSettingsContainer\";\nimport { StatefulTocTrigger } from \"../../Actions/Toc/StatefulTocTrigger\";\nimport { StatefulTocContainer } from \"../../Actions/Toc/StatefulTocContainer\";\n\nimport { StatefulColumns } from \"../../Epub/Settings/StatefulColumns\";\nimport { StatefulFontFamily } from \"../../Epub/Settings/StatefulFontFamily\";\nimport { StatefulFontWeight } from \"../../Epub/Settings/StatefulFontWeight\";\nimport { StatefulHyphens } from \"../../Epub/Settings/StatefulHyphens\";\nimport { StatefulLayout } from \"../../Epub/Settings/StatefulLayout\";\nimport { StatefulLetterSpacing } from \"../../Epub/Settings/StatefulLetterSpacing\";\nimport { StatefulLineHeight } from \"../../Epub/Settings/StatefulLineHeight\";\nimport { StatefulParagraphIndent } from \"../../Epub/Settings/StatefulParagraphIndent\";\nimport { StatefulParagraphSpacing } from \"../../Epub/Settings/StatefulParagraphSpacing\";\nimport { StatefulPublisherStyles } from \"../../Epub/Settings/StatefulPublisherStyles\";\nimport { StatefulSpacingGroup } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextAlign } from \"../../Epub/Settings/StatefulTextAlign\";\nimport { StatefulTextGroup } from \"../../Epub/Settings/StatefulTextGroup\";\nimport { StatefulTextNormalize } from \"../../Epub/Settings/StatefulTextNormalize\";\nimport { StatefulTheme } from \"../../Epub/Settings/StatefulTheme\";\nimport { StatefulWordSpacing } from \"../../Epub/Settings/StatefulWordSpacing\";\nimport { StatefulZoom } from \"../../Epub/Settings/StatefulZoom\";\n\nexport const createDefaultPlugin = (): ThPlugin => {\n return {\n id: \"core\",\n name: \"Core Components\",\n description: \"Default components for Thorium Web StatefulReader\",\n version: \"1.0.0\",\n components: {\n actions: {\n [ThActionsKeys.fullscreen]: {\n Trigger: StatefulFullscreenTrigger\n },\n [ThActionsKeys.jumpToPosition]: {\n Trigger: StatefulJumpToPositionTrigger,\n Target: StatefulJumpToPositionContainer\n },\n [ThActionsKeys.settings]: {\n Trigger: StatefulSettingsTrigger,\n Target: StatefulSettingsContainer\n },\n [ThActionsKeys.toc]: {\n Trigger: StatefulTocTrigger,\n Target: StatefulTocContainer\n }\n },\n settings: {\n [ThSettingsKeys.columns]: {\n Comp: StatefulColumns\n },\n [ThSettingsKeys.fontFamily]: {\n Comp: StatefulFontFamily,\n type: \"text\"\n },\n [ThSettingsKeys.fontWeight]: {\n Comp: StatefulFontWeight,\n type: \"text\"\n },\n [ThSettingsKeys.hyphens]: {\n Comp: StatefulHyphens,\n type: \"text\"\n },\n [ThSettingsKeys.layout]: {\n Comp: StatefulLayout\n },\n [ThSettingsKeys.letterSpacing]: {\n Comp: StatefulLetterSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.lineHeight]: {\n Comp: StatefulLineHeight,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphIndent]: {\n Comp: StatefulParagraphIndent,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphSpacing]: {\n Comp: StatefulParagraphSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.publisherStyles]: {\n Comp: StatefulPublisherStyles,\n type: \"spacing\"\n },\n [ThSettingsKeys.spacingGroup]: {\n Comp: StatefulSpacingGroup,\n },\n [ThSettingsKeys.textAlign]: {\n Comp: StatefulTextAlign,\n type: \"text\"\n },\n [ThSettingsKeys.textGroup]: {\n Comp: StatefulTextGroup\n },\n [ThSettingsKeys.textNormalize]: {\n Comp: StatefulTextNormalize,\n type: \"text\"\n },\n [ThSettingsKeys.theme]: {\n Comp: StatefulTheme,\n props: {\n mapArrowNav: 2\n }\n },\n [ThSettingsKeys.wordSpacing]: {\n Comp: StatefulWordSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.zoom]: {\n Comp: StatefulZoom\n }\n }\n }\n };\n};","// Peripherals based on XBReader\nimport { ThActionsPref } from \"@/preferences\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport { buildShortcut, UnstablePShortcut } from \"@/core/Helpers/keyboardUtilities\";\nimport { isInteractiveElement } from \"@/core/Helpers/focusUtilities\";\n\nimport { useAppStore } from \"@/lib/hooks\";\n\nexport interface PCallbacks {\n moveTo: (direction: \"left\" | \"right\" | \"up\" | \"down\" | \"home\" | \"end\") => void;\n goProgression: (shiftKey?: boolean) => void;\n toggleAction: (action: ThActionsKeys) => void;\n}\n\nexport interface PShortcuts {\n [key: string]: {\n actionKey: ThActionsKeys;\n modifiers: UnstablePShortcut[\"modifiers\"];\n }\n}\n\nexport default class Peripherals {\n private readonly observers = [\"keydown\"];\n private targets: EventTarget[] = [];\n private readonly callbacks: PCallbacks;\n private readonly store: ReturnType<typeof useAppStore>;\n private readonly actionsPref: ThActionsPref<ThActionsKeys> | undefined;\n private readonly shortcuts: PShortcuts;\n\n constructor(store: ReturnType<typeof useAppStore>, actionsPref: ThActionsPref<ThActionsKeys> | undefined, callbacks: PCallbacks) {\n this.observers.forEach((method) => {\n (this as any)[\"on\" + method] = (this as any)[\"on\" + method].bind(this);\n });\n this.store = store;\n this.actionsPref = actionsPref;\n this.callbacks = callbacks;\n this.shortcuts = this.retrieveShortcuts();\n }\n\n private getPlatformModifier(): \"ctrlKey\" | \"metaKey\" {\n return this.store.getState().reader.platformModifier.modifier;\n }\n\n private retrieveShortcuts() {\n if (!this.actionsPref) return {};\n\n const shortcutsObj: PShortcuts = {};\n\n const displayOrder = this.store.getState().publication.isFXL\n ? this.actionsPref.fxlOrder\n : this.actionsPref.reflowOrder;\n\n for (const actionKey of displayOrder) {\n const shortcutString = this.actionsPref.keys[actionKey as keyof typeof ThActionsKeys].shortcut;\n \n if (shortcutString) {\n const shortcutObj = buildShortcut(shortcutString);\n\n if (shortcutObj?.key) {\n Object.defineProperty(shortcutsObj, shortcutObj.key, {\n value: {\n actionKey: actionKey,\n modifiers: shortcutObj.modifiers\n },\n writable: false,\n enumerable: true\n });\n }\n }\n };\n \n return shortcutsObj;\n }\n\n destroy() {\n this.targets.forEach((t) => this.unobserve(t));\n }\n\n unobserve(item: EventTarget) {\n if (!item) return;\n this.observers.forEach((EventName) => {\n item.removeEventListener(\n EventName,\n (this as any)[\"on\" + EventName],\n false\n );\n });\n this.targets = this.targets.filter((t) => t !== item);\n }\n\n observe(item: EventTarget) {\n if (!item) return;\n if (this.targets.includes(item)) return;\n this.observers.forEach((EventName) => {\n item.addEventListener(EventName, (this as any)[\"on\" + EventName], false);\n });\n this.targets.push(item);\n }\n\n onkeydown(e: KeyboardEvent) {\n const focusIsSafe = !isInteractiveElement(document.activeElement);\n \n switch(e.code) {\n case \"Space\":\n focusIsSafe && this.callbacks.goProgression(e.shiftKey);\n break;\n case \"ArrowRight\":\n focusIsSafe && this.callbacks.moveTo(\"right\");\n break;\n case \"ArrowLeft\":\n focusIsSafe && this.callbacks.moveTo(\"left\");\n break;\n case \"ArrowUp\":\n case \"PageUp\":\n focusIsSafe && this.callbacks.moveTo(\"up\");\n break;\n case \"ArrowDown\":\n case \"PageDown\":\n focusIsSafe && this.callbacks.moveTo(\"down\");\n break;\n case \"Home\":\n focusIsSafe && this.callbacks.moveTo(\"home\");\n break;\n case \"End\":\n focusIsSafe && this.callbacks.moveTo(\"end\");\n break;\n default:\n if (this.shortcuts.hasOwnProperty(e.code)) {\n const customShortcutObj = this.shortcuts[e.code];\n const sendCallback = Object.entries(customShortcutObj.modifiers).every(( [modifier, value] ) => {\n if (modifier === \"platformKey\") {\n return e[this.getPlatformModifier()] === value;\n } else {\n return e[modifier as \"altKey\" | \"ctrlKey\" | \"metaKey\" | \"shiftKey\"] === value;\n }\n })\n \n if (sendCallback) {\n e.preventDefault();\n this.callbacks.toggleAction(customShortcutObj.actionKey)\n };\n }\n break;\n }\n }\n}","import { Locator } from \"@readium/shared\";\n\n export const deserializePositions = (positionsList?: Locator[]) => {\n return positionsList?.map((locator) => ({\n href: locator.href,\n type: locator.type,\n locations: {\n position: locator.locations.position,\n progression: locator.locations.progression,\n totalProgression: locator.locations.totalProgression\n },\n }));\n };","import { ReactNode } from \"react\";\n\nimport readerLoaderStyles from \"./assets/styles/readerLoader.module.css\";\n\nimport { ThLoader } from \"@/core/Components/Reader/ThLoader\";\n\nimport { useI18n } from \"@/i18n/useI18n\";\n\nexport const StatefulLoader = ({ isLoading, children }: { isLoading: boolean, children: ReactNode }) => {\n const { t } = useI18n();\n\n return (\n <>\n <ThLoader \n isLoading={ isLoading } \n loader={ <div className={ readerLoaderStyles.readerLoader }>{ t(\"reader.app.loading\") }</div> } \n className={ readerLoaderStyles.readerLoaderWrapper } \n >\n { children }\n </ThLoader>\n </>\n )\n}","\"use client\";\n\nimport React, { cloneElement, isValidElement } from \"react\";\n\nimport publicationGridStyles from \"./assets/styles/publicationGrid.module.css\";\n\nimport { ThGrid } from \"@/core/Components\";\nimport { Link } from \"react-aria-components\";\n\nimport classNames from \"classnames\";\n\nexport const DefaultImage = ({\n src,\n alt = \"\"\n}: {\n src: string;\n alt?: string;\n}) => (\n <img\n src={ src }\n alt={ alt }\n className={ publicationGridStyles.publicationImage }\n loading=\"lazy\"\n />\n);\n\nexport interface Publication {\n title: string;\n author: string;\n cover: string;\n url: string;\n rendition?: string;\n}\n\nexport interface PublicationGridProps {\n publications: Publication[];\n columnWidth?: number;\n gap?: string;\n renderCover?: (publication: Publication) => React.ReactElement<React.ImgHTMLAttributes<HTMLImageElement>>;\n}\n\nexport const PublicationGrid = ({ \n publications,\n columnWidth = 400,\n gap = \"1.5rem\",\n renderCover = (publication) => (\n <DefaultImage\n src={ publication.cover }\n alt=\"\"\n />\n ),\n}: PublicationGridProps) => {\n const renderCoverWithClass = (publication: Publication) => {\n const cover = renderCover(publication);\n \n if (!isValidElement<React.ImgHTMLAttributes<HTMLImageElement>>(cover)) {\n return (\n <DefaultImage\n src={ publication.cover }\n alt=\"\"\n />\n );\n }\n\n return cloneElement(cover, {\n className: classNames(\n publicationGridStyles.publicationImage,\n cover.props.className\n )\n });\n };\n\n return (\n <ThGrid\n className={ publicationGridStyles.publicationGrid }\n items={ publications }\n columnWidth={ columnWidth }\n gap={ gap }\n renderItem={ (publication, index) => (\n <Link\n href={ publication.url }\n key={ index }\n className={ publicationGridStyles.publicationCard }\n >\n <figure className={ publicationGridStyles.publicationCover }>\n { renderCoverWithClass(publication) }\n </figure>\n <div className={ publicationGridStyles.publicationInfo }>\n <h2 className={ publicationGridStyles.publicationTitle }>\n { publication.title }\n </h2>\n <p className={ publicationGridStyles.publicationAuthor }>\n { publication.author }\n </p>\n { publication.rendition && (\n <p className={ publicationGridStyles.publicationRendition }>\n { publication.rendition }\n </p>\n ) }\n </div>\n </Link>\n ) }\n />\n );\n};","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Link } from \"@readium/shared\";\nimport { HttpFetcher } from \"@readium/shared\";\n\nexport interface UsePublicationOptions {\n url: string;\n onError?: (error: string) => void;\n}\n\nexport function usePublication({ url, onError = () => {} }: UsePublicationOptions) {\n const [error, setError] = useState(\"\");\n const [manifest, setManifest] = useState<object | undefined>(undefined);\n const [selfLink, setSelfLink] = useState<string | undefined>(undefined);\n\n // Basic URL validation and loading\n useEffect(() => {\n if (!url) {\n setError(\"Manifest URL is required\");\n return;\n }\n\n // Decode URL if needed\n const decodedUrl = decodeURIComponent(url);\n const manifestLink = new Link({ href: decodedUrl });\n const fetcher = new HttpFetcher(undefined);\n\n try {\n const fetched = fetcher.get(manifestLink);\n \n // Get self-link first\n fetched.link().then((link) => {\n setSelfLink(link.toURL(decodedUrl));\n });\n\n // Then get manifest data\n fetched.readAsJSON().then((manifestData) => {\n setManifest(manifestData as object);\n }).catch((error) => {\n console.error(\"Error loading manifest:\", error);\n setError(`Failed loading manifest ${ decodedUrl }: ${ error instanceof Error ? error.message : \"Unknown error\" }`);\n });\n } catch (error: unknown) {\n console.error(\"Error loading manifest:\", error);\n setError(`Failed loading manifest ${ decodedUrl }: ${ error instanceof Error ? error.message : \"Unknown error\" }`);\n }\n }, [url]);\n\n // Call onError callback when error changes\n useEffect(() => {\n if (error) {\n onError(error);\n }\n }, [error, onError]);\n\n return {\n error,\n manifest,\n selfLink\n };\n}\n"]}
1
+ {"version":3,"sources":["../../../src/components/Epub/Settings/assets/icons/document_scanner.svg","../../../src/components/Epub/Settings/assets/icons/article.svg","../../../src/components/Epub/Settings/assets/icons/menu_book.svg","../../../src/components/Settings/StatefulRadioGroup.tsx","../../../src/components/Epub/Settings/StatefulColumns.tsx","../../../src/components/Epub/Settings/StatefulFontFamily.tsx","../../../src/components/Settings/StatefulSlider.tsx","../../../src/components/Epub/Settings/StatefulFontWeight.tsx","../../../src/components/Settings/StatefulSwitch.tsx","../../../src/components/Epub/Settings/StatefulHyphens.tsx","../../../src/components/Epub/Settings/assets/icons/contract.svg","../../../src/components/Epub/Settings/assets/icons/docs.svg","../../../src/components/Epub/Settings/StatefulLayout.tsx","../../../src/components/Settings/StatefulNumberField.tsx","../../../src/components/Epub/Settings/StatefulLetterSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/book.svg","../../../src/components/Epub/Settings/assets/icons/density_small.svg","../../../src/components/Epub/Settings/assets/icons/density_medium.svg","../../../src/components/Epub/Settings/assets/icons/density_large.svg","../../../src/components/Epub/Settings/StatefulLineHeight.tsx","../../../src/components/Epub/Settings/StatefulParagraphIndent.tsx","../../../src/components/Epub/Settings/StatefulParagraphSpacing.tsx","../../../src/components/Epub/Settings/StatefulPublisherStyles.tsx","../../../src/components/Settings/StatefulGroupWrapper.tsx","../../../src/components/Plugins/PluginRegistry.ts","../../../src/components/Plugins/PluginProvider.tsx","../../../src/components/Epub/Settings/StatefulSpacingGroup.tsx","../../../src/components/Epub/Settings/assets/icons/format_align_left.svg","../../../src/components/Epub/Settings/assets/icons/format_align_right.svg","../../../src/components/Epub/Settings/assets/icons/format_align_justify.svg","../../../src/components/Epub/Settings/StatefulTextAlign.tsx","../../../src/components/Epub/Settings/StatefulTextGroup.tsx","../../../src/components/Epub/Settings/StatefulTextNormalize.tsx","../../../src/components/Epub/Settings/assets/icons/check.svg","../../../src/components/Epub/Settings/StatefulTheme.tsx","../../../src/components/Epub/Settings/StatefulWordSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/text_decrease.svg","../../../src/components/Epub/Settings/assets/icons/text_increase.svg","../../../src/components/Epub/Settings/assets/icons/zoom_out.svg","../../../src/components/Epub/Settings/assets/icons/zoom_in.svg","../../../src/components/Epub/Settings/StatefulZoom.tsx","../../../src/components/Docking/hooks/useResizablePanel.ts","../../../src/components/Docking/StatefulDockingWrapper.tsx","../../../src/components/StatefulBackLink.tsx","../../../src/components/Actions/assets/icons/more_vert.svg","../../../src/components/Actions/Triggers/StatefulActionIcon.tsx","../../../src/components/Actions/StatefulOverflowMenu.tsx","../../../src/components/Actions/StatefulCollapsibleActionsBar.tsx","../../../src/components/StatefulReaderHeader.tsx","../../../src/components/StatefulReaderArrowButton.tsx","../../../src/components/StatefulReaderProgression.tsx","../../../src/components/StatefulPagination.tsx","../../../src/components/StatefulReaderFooter.tsx","../../../src/components/Epub/StatefulReader.tsx","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen.svg","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen_exit.svg","../../../src/components/Actions/Triggers/UnstableStatefulShortcut.tsx","../../../src/components/Actions/Triggers/StatefulOverflowMenuItem.tsx","../../../src/components/Actions/Fullscreen/StatefulFullscreenTrigger.tsx","../../../src/components/Actions/JumpToPosition/assets/icons/pin_drop.svg","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionTrigger.tsx","../../../src/components/Docking/assets/icons/dock_to_right.svg","../../../src/components/Docking/assets/icons/dock_to_left.svg","../../../src/components/Docking/StatefulDockStart.tsx","../../../src/components/Docking/StatefulDockEnd.tsx","../../../src/components/Docking/assets/icons/stack.svg","../../../src/components/Docking/StatefulDockTransientPopover.tsx","../../../src/components/Docking/StatefulDocker.tsx","../../../src/components/Sheets/hooks/useWebkitPatch.ts","../../../src/components/Sheets/StatefulPopoverSheet.tsx","../../../src/components/Sheets/StatefulBottomSheet.tsx","../../../src/components/Sheets/StatefulFullScreenSheet.tsx","../../../src/components/Sheets/StatefulDockedSheet.tsx","../../../src/components/Sheets/StatefulSheetWrapper.tsx","../../../src/components/Docking/hooks/useDocking.ts","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionContainer.tsx","../../../src/components/Actions/Settings/assets/icons/match_case.svg","../../../src/components/Actions/Settings/StatefulSettingsTrigger.tsx","../../../src/components/Actions/Settings/StatefulSettingsContainer.tsx","../../../src/components/Actions/Toc/assets/icons/toc.svg","../../../src/components/Actions/Toc/StatefulTocTrigger.tsx","../../../src/components/Actions/Toc/assets/icons/chevron_right.svg","../../../src/components/Actions/Toc/StatefulTocContainer.tsx","../../../src/components/Plugins/helpers/createDefaultPlugin.ts","../../../src/helpers/peripherals.ts","../../../src/helpers/deserializePositions.ts","../../../src/components/StatefulLoader.tsx","../../../src/components/PublicationGrid.tsx","../../../src/hooks/usePublication.ts"],"names":["jsx","settingsStyles","debounce","Fragment","useCallback","key","classNames","readerSharedUI","useRef","value","useState","useEffect","textAlign","theme","t","jsxs","dockingMap","React","overflowMenuStyles","className","arrowStyles","isHovering","readerPaginationStyles","useFocusWithin","import_debounce","dockingStyles","sheetStyles","useMemo","snapArray","scrimPref","item","filterValue","items","Link","breakpoint","colorScheme","reducedMotion","timeline","positionsList","isFXL","dispatch","HttpFetcher","error"],"mappings":"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","file":"index.mjs","sourcesContent":["import * as React from \"react\";\nconst SvgDocumentScanner = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M80-720v-200h200v80H160v120H80Zm720 0v-120H680v-80h200v200h-80ZM80-40v-200h80v120h120v80H80Zm600 0v-80h120v-120h80v200H680ZM280-240h400v-480H280v480Zm0 80q-33 0-56.5-23.5T200-240v-480q0-33 23.5-56.5T280-800h400q33 0 56.5 23.5T760-720v480q0 33-23.5 56.5T680-160H280Zm80-400h240v-80H360v80Zm0 120h240v-80H360v80Zm0 120h240v-80H360v80Zm-80 80v-480 480Z\" /></svg>;\nexport default SvgDocumentScanner;","import * as React from \"react\";\nconst SvgArticle = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\" /></svg>;\nexport default SvgArticle;","import * as React from \"react\";\nconst SvgMenuBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M560-564v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-600q-38 0-73 9.5T560-564Zm0 220v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-380q-38 0-73 9t-67 27Zm0-110v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-490q-38 0-73 9.5T560-454ZM260-320q47 0 91.5 10.5T440-278v-394q-41-24-87-36t-93-12q-36 0-71.5 7T120-692v396q35-12 69.5-18t70.5-6Zm260 42q44-21 88.5-31.5T700-320q36 0 70.5 6t69.5 18v-396q-33-14-68.5-21t-71.5-7q-47 0-93 12t-87 36v394Zm-40 118q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740q51-30 106.5-45T700-800q52 0 102 12t96 36q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59ZM280-494Z\" /></svg>;\nexport default SvgMenuBook;","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThRadioGroup, ThRadioGroupProps } from \"@/core/Components/Settings/ThRadioGroup\"\n\nexport interface StatefulRadioGroupProps extends Omit<ThRadioGroupProps, \"classNames\"> {\n standalone?: boolean\n}\n\nexport const StatefulRadioGroup = ({\n standalone,\n label,\n children,\n ...props\n}: StatefulRadioGroupProps) => {\n return (\n <>\n <ThRadioGroup \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ standalone ? settingsStyles.readerSettingsGroup : \"\" }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsRadioWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n radio: {\n className: settingsStyles.readerSettingsRadio\n }\n }}\n >\n { children }\n </ThRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport AutoLayoutIcon from \"./assets/icons/document_scanner.svg\";\nimport OneColIcon from \"./assets/icons/article.svg\";\nimport TwoColsIcon from \"./assets/icons/menu_book.svg\";\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useAppSelector, useAppDispatch } from \"@/lib/hooks\";\nimport { setColumnCount } from \"@/lib/settingsReducer\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport debounce from \"debounce\";\n\nexport const StatefulColumns = () => {\n const { t } = useI18n();\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const columnCount = useAppSelector(state => state.settings.columnCount) || \"auto\";\n const [effectiveValue, setEffectiveValue] = useState(columnCount);\n\n const fontSize = useAppSelector(state => state.settings.fontSize);\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n\n const layoutSettings = useMemo(() => {\n return {\n fontSize,\n fontFamily,\n wordSpacing,\n letterSpacing,\n publisherStyles\n };\n }, [fontSize, fontFamily, wordSpacing, letterSpacing, publisherStyles]);\n\n const dispatch = useAppDispatch();\n\n const { submitPreferences, getSetting } = useEpubNavigator();\n\n const updateEffectiveValue = useCallback((preference: string, setting: number | null) => {\n const derivedValue = preference === \"auto\" || setting === null ? \"auto\" : setting.toString();\n setEffectiveValue(derivedValue);\n }, []);\n\n const updatePreference = useCallback(async (value: string) => {\n const colCount = value === \"auto\" ? null : Number(value);\n await submitPreferences({ columnCount: colCount });\n updateEffectiveValue(value, getSetting(\"columnCount\"));\n dispatch(setColumnCount(value));\n }, [submitPreferences, getSetting, updateEffectiveValue, dispatch]);\n\n const debouncedUpdate = useCallback(() => {\n const update = () => updateEffectiveValue(columnCount, getSetting(\"columnCount\"));\n debounce(update, 50)();\n\n // layoutSettings is required as a dependency because it contains all the settings\n // that affect column layout (fontSize, fontFamily, wordSpacing, letterSpacing, publisherStyles)\n // and we need to recalculate the layout when any of these change.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columnCount, layoutSettings, getSetting, updateEffectiveValue]);\n\n useEffect(() => {\n debouncedUpdate();\n\n window.addEventListener(\"resize\", debouncedUpdate);\n\n return () => {\n window.removeEventListener(\"resize\", debouncedUpdate);\n };\n }, [debouncedUpdate]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ true }\n label={ t(\"reader.settings.column.title\") }\n orientation=\"horizontal\"\n value={ effectiveValue }\n onChange={ async (val: string) => await updatePreference(val) }\n isDisabled={ isScroll }\n items={[\n {\n icon: AutoLayoutIcon,\n label: t(\"reader.settings.column.auto\"), \n value: \"auto\" \n },\n {\n icon: OneColIcon,\n label: t(\"reader.settings.column.one\"), \n value: \"1\" \n },\n {\n icon: TwoColsIcon,\n label: t(\"reader.settings.column.two\"), \n value: \"2\",\n // This is subpar when the columnCount is 1 though because\n // it won’t be disabled, but it’s the best we can do with\n // the preferences API at the moment\n isDisabled: effectiveValue === \"1\" && columnCount === \"2\"\n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { CSSProperties, Key, useCallback, useRef } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { ThDropdown } from \"@/core/Components/Settings/ThDropdown\";\n\nimport { ListBox, ListBoxItem } from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontFamily } from \"@/lib/settingsReducer\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\n\nexport const StatefulFontFamily = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontFamilyOptions = useRef(Object.entries(defaultFontFamilyOptions).map(([property, stack]) => ({\n id: property,\n label: t(`reader.settings.fontFamily.labels.${ property }`),\n value: stack\n }))\n );\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (key: Key | null) => {\n if (!key || key === fontFamily) return;\n\n const selectedOption = fontFamilyOptions.current.find((option) => option.id === key) as {\n id: keyof typeof defaultFontFamilyOptions;\n label: string;\n value: string | null;\n };\n \n if (selectedOption) {\n await submitPreferences({ fontFamily: selectedOption.value });\n \n const currentSetting = getSetting(\"fontFamily\");\n const selectedOptionId = Object.keys(defaultFontFamilyOptions).find(key => defaultFontFamilyOptions[key as keyof typeof defaultFontFamilyOptions] === currentSetting) as keyof typeof defaultFontFamilyOptions;\n dispatch(setFontFamily(selectedOptionId || defaultFontFamilyOptions.publisher));\n }\n }, [fontFamily, submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <ThDropdown \n { ...(standalone \n ? { \n className: settingsStyles.readerSettingsGroup,\n label: t(\"reader.settings.fontFamily.title\")\n } \n : {\n \"aria-label\": t(\"reader.settings.fontFamily.title\")\n }) }\n selectedKey={ fontFamily }\n onSelectionChange={ async (key) => await updatePreference(key) }\n compounds={ {\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n button: {\n className: settingsStyles.readerSettingsDropdownButton\n },\n popover: {\n className: settingsStyles.readerSettingsDropdownPopover,\n placement: \"bottom\"\n },\n listbox: (\n <ListBox\n className={ settingsStyles.readerSettingsDropdownListbox }\n items={ fontFamilyOptions.current }\n >\n { (item) => (\n <ListBoxItem\n className={ settingsStyles.readerSettingsDropdownListboxItem }\n id={ item.id }\n key={ item.id }\n textValue={ item.value || undefined }\n style={{ fontFamily: item.value || undefined } as CSSProperties}\n >\n { item.label }\n </ListBoxItem>\n )}\n </ListBox>\n )\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSlider, ThSliderProps } from \"@/core/Components/Settings/ThSlider\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulSliderProps extends Omit<ThSliderProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSlider = ({\n standalone,\n label,\n ...props\n}: StatefulSliderProps) => {\n return(\n <>\n <ThSlider\n { ...props }\n { ...(standalone ? { label: label } : {\"aria-label\": label}) }\n className={ classNames(settingsStyles.readerSettingsSlider, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n label: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsSliderLabel)\n },\n output: {\n className: settingsStyles.readerSettingsSliderOutput\n },\n track: {\n className: settingsStyles.readerSettingsSliderTrack\n },\n thumb: {\n className: settingsStyles.readerSettingsSliderThumb\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { fontWeightRangeConfig } from \"@readium/navigator\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontWeight } from \"@/lib/settingsReducer\";\n\nexport const StatefulFontWeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontWeight = useAppSelector(state => state.settings.fontWeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontWeight: value });\n\n dispatch(setFontWeight(getSetting(\"fontWeight\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.fontWeight.title\") }\n defaultValue={ 400 } \n value={ fontWeight } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ fontWeightRangeConfig.range }\n step={ fontWeightRangeConfig.step }\n isDisabled={ fontFamily === \"publisher\" }\n /> \n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSwitch, ThSwitchProps } from \"@/core/Components/Settings/ThSwitch\";\n\nexport interface StatefulSwitchProps extends Omit<ThSwitchProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSwitch = ({\n standalone,\n label,\n heading, \n ...props\n}: StatefulSwitchProps) => {\n return(\n <>\n <ThSwitch \n { ...props }\n { ...(standalone ? { heading: heading } : {}) }\n label={ label }\n className={ settingsStyles.readerSettingsSwitch }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsGroup\n },\n heading: {\n className: settingsStyles.readerSettingsLabel\n },\n indicator: {\n className: settingsStyles.readerSettingsSwitchIndicator\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setHyphens } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulHyphens = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const hyphens = useAppSelector(state => state.settings.hyphens);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n\n const dispatch = useAppDispatch();\n \n const { getSetting, submitPreferences } = useEpubNavigator();\n \n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ \n hyphens: value \n });\n \n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ t(\"reader.settings.hyphens.title\") }\n label={ t(\"reader.settings.hyphens.label\") }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ hyphens ?? false }\n isDisabled={ textAlign === ThTextAlignOptions.publisher }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgContract = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-50 0-85-35t-35-85v-120h120v-560h600v680q0 50-35 85t-85 35H240Zm480-80q17 0 28.5-11.5T760-200v-600H320v480h360v120q0 17 11.5 28.5T720-160ZM360-600v-80h360v80H360Zm0 120v-80h360v80H360ZM240-160h360v-80H200v40q0 17 11.5 28.5T240-160Zm0 0h-40 400-360Z\" /></svg>;\nexport default SvgContract;","import * as React from \"react\";\nconst SvgDocs = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M320-440h320v-80H320v80Zm0 120h320v-80H320v80Zm0 120h200v-80H320v80ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\" /></svg>;\nexport default SvgDocs;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { ThLayoutOptions } from \"@/preferences/models/enums\";\n\nimport ScrollableIcon from \"./assets/icons/contract.svg\";\nimport PaginatedIcon from \"./assets/icons/docs.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setScroll } from \"@/lib/settingsReducer\";\n\nexport const StatefulLayout = () => {\n const { t } = useI18n();\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => { \n const derivedValue = value === ThLayoutOptions.scroll;\n await submitPreferences({ scroll: derivedValue });\n dispatch(setScroll(getSetting(\"scroll\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup\n standalone={ true }\n label={ t(\"reader.settings.layout.title\") }\n orientation=\"horizontal\"\n value={ isScroll ? ThLayoutOptions.scroll : ThLayoutOptions.paginated }\n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: PaginatedIcon,\n label: t(\"reader.settings.layout.paginated\"),\n value: ThLayoutOptions.paginated\n },\n {\n icon: ScrollableIcon,\n label: t(\"reader.settings.layout.scrolled\"),\n value: ThLayoutOptions.scroll\n }\n ]} \n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThNumberField, ThNumberFieldProps } from \"@/core/Components/Settings/ThNumberField\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulNumberFieldProps extends Omit<ThNumberFieldProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulNumberField = ({\n standalone,\n label,\n ...props\n}: StatefulNumberFieldProps) => {\n\n return (\n <ThNumberField \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ classNames(settingsStyles.readerSettingsNumbfield, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n group: {\n className: settingsStyles.readerSettingsGroupWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n stepper: {\n className: readerSharedUI.icon\n },\n input: {\n className: settingsStyles.readerSettingsInput\n }\n }}\n />\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultLetterSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLetterSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLetterSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const letterSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.variant ?? defaultLetterSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.range ?? defaultLetterSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.step ?? defaultLetterSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n letterSpacing: value\n });\n\n dispatch(setLetterSpacing(getSetting(\"letterSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { letterSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.letterSpacing.title\") }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.letterSpacing.decrease\"),\n incrementLabel: t(\"reader.settings.letterSpacing.increase\")\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.letterSpacing.title\") }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n formatOptions={ { style: \"percent\" } }\n />\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h480q33 0 56.5 23.5T800-800v640q0 33-23.5 56.5T720-80H240Zm0-80h480v-640h-80v280l-100-60-100 60v-280H240v640Zm0 0v-640 640Zm200-360 100-60 100 60-100-60-100 60Z\" /></svg>;\nexport default SvgBook;","import * as React from \"react\";\nconst SvgDensitySmall = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-80v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Z\" /></svg>;\nexport default SvgDensitySmall;","import * as React from \"react\";\nconst SvgDensityMedium = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-320v-80h720v80H120Zm0-320v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityMedium;","import * as React from \"react\";\nconst SvgDensityLarge = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-640v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityLarge;","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport SmallIcon from \"./assets/icons/density_small.svg\";\nimport MediumIcon from \"./assets/icons/density_medium.svg\";\nimport LargeIcon from \"./assets/icons/density_large.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLineHeight, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLineHeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const updatePreference = useCallback(async (value: string) => {\n const computedValue = value === ThLineHeightOptions.publisher\n ? null \n : lineHeightOptions.current[value as keyof typeof ThLineHeightOptions];\n \n await submitPreferences({\n lineHeight: computedValue\n });\n\n const currentLineHeight = getSetting(\"lineHeight\");\n const currentDisplayLineHeightOption = Object.entries(lineHeightOptions.current).find(([key, value]) => value === currentLineHeight)?.[0] as ThLineHeightOptions;\n\n dispatch(setLineHeight(currentDisplayLineHeightOption));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone }\n label={ t(\"reader.settings.lineHeight.title\") }\n orientation=\"horizontal\"\n value={ publisherStyles ? ThLineHeightOptions.publisher : lineHeight } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: t(\"reader.settings.lineHeight.publisher\"), \n value: ThLineHeightOptions.publisher \n },\n {\n icon: SmallIcon,\n label: t(\"reader.settings.lineHeight.small\"), \n value: ThLineHeightOptions.small \n },\n {\n icon: MediumIcon,\n label: t(\"reader.settings.lineHeight.medium\"), \n value: ThLineHeightOptions.medium \n },\n {\n icon: LargeIcon,\n label: t(\"reader.settings.lineHeight.large\"), \n value: ThLineHeightOptions.large \n },\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphIndent, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphIndent, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphIndent = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphIndentRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.variant ?? defaultParagraphIndent.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.range ?? defaultParagraphIndent.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.step ?? defaultParagraphIndent.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphIndent: value\n });\n\n dispatch(setParagraphIndent(getSetting(\"paragraphIndent\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphIndentRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.paraIndent.title\") }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.paraIndent.decrease\"),\n incrementLabel: t(\"reader.settings.paraIndent.increase\")\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.paraIndent.title\") }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n />\n } \n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const paragraphSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.variant ?? defaultParagraphSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.range ?? defaultParagraphSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.step ?? defaultParagraphSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphSpacing: value\n });\n\n dispatch(setParagraphSpacing(getSetting(\"paragraphSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.paraSpacing.title\") }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.paraSpacing.decrease\"),\n incrementLabel: t(\"reader.settings.paraSpacing.increase\")\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.paraSpacing.title\") }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n /> \n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulPublisherStyles = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n\n const dispatch = useAppDispatch();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (isSelected: boolean) => {\n const values = isSelected ? \n {\n lineHeight: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n letterSpacing: null,\n wordSpacing: null\n } : \n {\n lineHeight: lineHeight === ThLineHeightOptions.publisher \n ? null \n : lineHeightOptions.current[lineHeight as keyof typeof ThLineHeightOptions],\n paragraphIndent: paragraphIndent || 0,\n paragraphSpacing: paragraphSpacing || 0,\n letterSpacing: letterSpacing || 0,\n wordSpacing: wordSpacing || 0\n };\n await submitPreferences(values);\n\n dispatch(setPublisherStyles(isSelected ? true : false));\n }, [submitPreferences, dispatch, lineHeight, paragraphIndent, paragraphSpacing, letterSpacing, wordSpacing]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n label={ t(\"reader.settings.publisherStyles.label\") }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ publisherStyles }\n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSettingsGroupPref, ThSpacingSettingsKeys, ThTextSettingsKeys } from \"@/preferences\";\nimport { PressEvent } from \"react-aria\";\nimport { SettingComponent } from \"@/components/Plugins/PluginRegistry\";\n\nimport { ThSettingsWrapper } from \"@/core/Components/Settings/ThSettingsWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulGroupWrapperProps {\n heading: string;\n moreLabel: string;\n moreTooltip: string;\n onPressMore: (e: PressEvent) => void;\n componentsMap: Record<string, SettingComponent>;\n prefs?: ThSettingsGroupPref<ThTextSettingsKeys | ThSpacingSettingsKeys>;\n defaultPrefs: {\n main: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n subPanel: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n };\n}\n\nexport const StatefulGroupWrapper = ({\n heading,\n moreLabel,\n moreTooltip,\n onPressMore,\n componentsMap,\n prefs,\n defaultPrefs\n}: StatefulGroupWrapperProps) => {\n const RSPrefs = usePreferences();\n \n const main = prefs?.main || defaultPrefs.main;\n const displayOrder = prefs?.subPanel !== undefined \n ? prefs.subPanel \n : defaultPrefs.subPanel;\n\n const resolvedPrefs = {\n main: main,\n subPanel: displayOrder\n };\n \n return(\n <>\n <ThSettingsWrapper\n className={ classNames(settingsStyles.readerSettingsGroup, settingsStyles.readerSettingsAdvancedGroup) }\n items={ componentsMap }\n prefs={ resolvedPrefs }\n compounds={{\n label: heading,\n heading: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsGroupLabel)\n },\n button: {\n className: classNames(readerSharedUI.icon, settingsStyles.readerSettingsAdvancedIcon),\n \"aria-label\": moreLabel,\n compounds: {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: \"top\",\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: moreTooltip\n },\n onPress: onPressMore\n }\n }}\n />\n </>\n )\n}","import { ThSettingsEntry } from \"@/core/Components\";\nimport { StatefulActionsMapObject } from \"../Actions\";\n\nexport enum ThPluginType {\n ACTION = \"action\",\n SETTING = \"setting\",\n}\n\nexport type ActionComponent = StatefulActionsMapObject;\n\nexport interface SettingComponent extends ThSettingsEntry {\n type?: \"text\" | \"spacing\";\n props?: any;\n}\n\nexport interface ThPlugin {\n id: string;\n name: string;\n description?: string;\n version?: string;\n components: {\n actions?: Record<string, ActionComponent>;\n settings?: Record<string, SettingComponent>;\n };\n}\n\n// Store plugins in a module-level variable to ensure persistence\nconst pluginsStore: ThPlugin[] = [];\n\nclass PluginRegistryClass {\n register(plugin: ThPlugin): void {\n const existingPluginIndex = pluginsStore.findIndex(p => p.id === plugin.id);\n \n if (existingPluginIndex >= 0) {\n pluginsStore[existingPluginIndex] = plugin;\n } else {\n pluginsStore.push(plugin);\n }\n }\n \n unregister(pluginId: string): void {\n const filteredPlugins = pluginsStore.filter(plugin => plugin.id !== pluginId);\n \n // Clear the array and repopulate it\n pluginsStore.length = 0;\n pluginsStore.push(...filteredPlugins);\n }\n \n getPlugins(): ThPlugin[] {\n return [...pluginsStore];\n }\n \n getComponentMaps() { \n const actionsComponentsMap: Record<string, ActionComponent> = {} as Record<string, ActionComponent>;\n const settingsComponentsMap: Record<string, SettingComponent> = {} as Record<string, SettingComponent>;\n \n // Process plugins in reverse order so later plugins override earlier ones\n [...pluginsStore].reverse().forEach(plugin => { \n // Merge actions components\n if (plugin.components.actions) {\n Object.entries(plugin.components.actions).forEach(([key, component]) => {\n actionsComponentsMap[key as string] = component;\n });\n }\n \n // Merge settings components\n if (plugin.components.settings) {\n Object.entries(plugin.components.settings).forEach(([key, component]) => {\n settingsComponentsMap[key as string] = component;\n });\n }\n });\n \n return {\n actionsComponentsMap,\n settingsComponentsMap\n };\n }\n}\n\n// Export singleton instance\nexport const ThPluginRegistry = new PluginRegistryClass();","\"use client\";\n\nimport React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { ThPluginRegistry, ActionComponent, SettingComponent } from \"./PluginRegistry\";\n\ninterface ThPluginContextType {\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n registerPlugin: typeof ThPluginRegistry.register;\n unregisterPlugin: typeof ThPluginRegistry.unregister;\n}\n\nconst ThPluginContext = createContext<ThPluginContextType>({\n actionsComponentsMap: {} as Record<string, ActionComponent>,\n settingsComponentsMap: {} as Record<string, SettingComponent>,\n textSettingsComponentsMap: {} as Record<string, SettingComponent>,\n spacingSettingsComponentsMap: {} as Record<string, SettingComponent>,\n registerPlugin: ThPluginRegistry.register.bind(ThPluginRegistry),\n unregisterPlugin: ThPluginRegistry.unregister.bind(ThPluginRegistry)\n});\n\nexport const usePlugins = () => useContext(ThPluginContext);\n\nexport const ThPluginProvider = ({ children }: { children: React.ReactNode }) => {\n const [componentMaps, setComponentMaps] = useState<{\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n }>(() => {\n // Force a fresh retrieval of component maps\n const maps = ThPluginRegistry.getComponentMaps();\n return {\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n };\n });\n \n // Helper function to filter settings components by type\n function getTypedSettingsComponents(\n componentsMap: Record<string, SettingComponent>,\n type: \"text\" | \"spacing\"\n ): Record<string, SettingComponent> {\n return Object.entries(componentsMap)\n .filter(([_, component]) => component.type === type)\n .reduce((acc, [key, component]) => {\n acc[key] = component;\n return acc;\n }, {} as Record<string, SettingComponent>);\n }\n \n // Update component maps when plugins change\n useEffect(() => {\n const updateComponentMaps = () => {\n const maps = ThPluginRegistry.getComponentMaps();\n setComponentMaps({\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n });\n };\n \n // Initial update to ensure we have the latest maps\n updateComponentMaps();\n }, []);\n \n // Wrapper for register that triggers an update\n const registerPlugin = (plugin: Parameters<typeof ThPluginRegistry.register>[0]) => {\n ThPluginRegistry.register(plugin);\n };\n \n // Wrapper for unregister that triggers an update\n const unregisterPlugin = (pluginId: string) => {\n ThPluginRegistry.unregister(pluginId);\n };\n \n // Provide the component maps and plugin management functions\n const value = {\n ...componentMaps,\n registerPlugin,\n unregisterPlugin\n };\n \n return (\n <ThPluginContext.Provider value={ value }>\n { children }\n </ThPluginContext.Provider>\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n ThSettingsContainerKeys, \n ThSpacingSettingsKeys \n} from \"@/preferences\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulSpacingGroup = () => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { spacingSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n \n const setSpacingContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.spacing));\n }, [dispatch]);\n\n return (\n <>\n <StatefulGroupWrapper \n heading={ t(\"reader.settings.spacing.title\") }\n moreLabel={ t(\"reader.settings.spacing.advanced.trigger\") }\n moreTooltip={ t(\"reader.settings.spacing.advanced.tooltip\") }\n onPressMore={ setSpacingContainer }\n componentsMap={ spacingSettingsComponentsMap }\n prefs={ RSPrefs.settings.spacing }\n defaultPrefs={ {\n main: defaultSpacingSettingsMain, \n subPanel: defaultSpacingSettingsSubpanel\n }}\n />\n </>\n );\n}\n\nexport const StatefulSpacingGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.spacing?.subPanel as ThSpacingSettingsKeys[] | null | undefined || defaultSpacingSettingsSubpanel;\n const { spacingSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThSpacingSettingsKeys) => {\n const match = spacingSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Setting key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","import * as React from \"react\";\nconst SvgFormatAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignLeft;","import * as React from \"react\";\nconst SvgFormatAlignRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignRight;","import * as React from \"react\";\nconst SvgFormatAlignJustify = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignJustify;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { TextAlignment } from \"@readium/navigator\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport LeftAlignIcon from \"./assets/icons/format_align_left.svg\";\nimport RightAlignIcon from \"./assets/icons/format_align_right.svg\";\nimport JustifyIcon from \"./assets/icons/format_align_justify.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextAlign, setHyphens } from \"@/lib/settingsReducer\";\n\nexport const StatefulTextAlign = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => {\n const textAlign: TextAlignment | null = value === ThTextAlignOptions.publisher \n ? null \n : value === ThTextAlignOptions.start \n ? TextAlignment.start \n : TextAlignment.justify;\n \n const currentHyphens = getSetting(\"hyphens\") as boolean | undefined | null;\n \n const hyphens = textAlign === null \n ? null \n : (currentHyphens ?? textAlign === TextAlignment.justify);\n \n await submitPreferences({\n textAlign: textAlign,\n hyphens: hyphens\n });\n \n const textAlignSetting = getSetting(\"textAlign\") as TextAlignment | null;\n const textAlignValue = textAlignSetting === null ? ThTextAlignOptions.publisher : textAlignSetting as unknown as ThTextAlignOptions;\n \n dispatch(setTextAlign(textAlignValue));\n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [getSetting, submitPreferences, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone } \n label={ t(\"reader.settings.align.title\") }\n orientation=\"horizontal\" \n value={ textAlign } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: t(\"reader.settings.align.publisher\"), \n value: ThTextAlignOptions.publisher \n },\n {\n icon: isRTL ? RightAlignIcon : LeftAlignIcon,\n label: isRTL ? t(\"reader.settings.align.right\") : t(\"reader.settings.align.left\"), \n value: ThTextAlignOptions.start \n },\n {\n icon: JustifyIcon,\n label: t(\"reader.settings.align.justify\"), \n value: ThTextAlignOptions.justify \n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n ThSettingsContainerKeys, \n ThTextSettingsKeys \n} from \"@/preferences\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulTextGroup = () => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { textSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n\n const setTextContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.text));\n }, [dispatch]);\n\n return(\n <>\n <StatefulGroupWrapper \n heading={ t(\"reader.settings.text.title\") }\n moreLabel={ t(\"reader.settings.text.advanced.trigger\") }\n moreTooltip={ t(\"reader.settings.text.advanced.tooltip\") }\n onPressMore={ setTextContainer }\n componentsMap={ textSettingsComponentsMap }\n prefs={ RSPrefs.settings.text }\n defaultPrefs={ {\n main: defaultTextSettingsMain, \n subPanel: defaultTextSettingsSubpanel\n }}\n />\n </>\n )\n}\n\nexport const StatefulTextGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.text?.subPanel as ThTextSettingsKeys[] | null | undefined || defaultTextSettingsSubpanel;\n const { textSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThTextSettingsKeys) => {\n const match = textSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextNormalization } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulTextNormalize = ({ standalone = true }: StatefulSettingsItemProps) => {\n const { t } = useI18n();\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ textNormalization: value });\n\n dispatch(setTextNormalization(getSetting(\"textNormalization\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ t(\"reader.settings.normalizeText.title\") }\n label={ t(\"reader.settings.normalizeText.label\") }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ textNormalization ?? false }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgCheck = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\" /></svg>;\nexport default SvgCheck;","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { ThemeKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport CheckIcon from \"./assets/icons/check.svg\";\n\nimport { ThActionsKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\nimport { Radio } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTheme } from \"@/lib/themeReducer\";\n\nimport classNames from \"classnames\";\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\n\nexport const StatefulTheme = ({ mapArrowNav }: { mapArrowNav?: number }) => {\n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n\n const radioGroupRef = useRef<HTMLDivElement | null>(null);\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n const themeArray = isFXL ? fxlThemeKeys : reflowThemeKeys;\n\n const themeObject = useAppSelector(state => state.theming.theme);\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n const colorScheme = useAppSelector(state => state.theming.colorScheme);\n\n const themeItems = useRef<(ThemeKeyType | \"auto\")[]>(\n themeArray.filter((theme: ThemeKeyType | \"auto\") => {\n if (theme === \"auto\") {\n return RSPrefs.theming.themes.systemThemes !== undefined && \n Object.values(RSPrefs.theming.themes.systemThemes).every(t => \n themeArray.includes(t)\n );\n }\n return true;\n })\n );\n\n const dispatch = useAppDispatch();\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: ThemeKeyType | \"auto\") => {\n const themeProps = buildThemeObject<typeof value>({\n theme: value,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme\n })\n await submitPreferences(themeProps);\n\n dispatch(setTheme({ \n key: isFXL ? \"fxl\" : \"reflow\", \n value: value\n }));\n }, [isFXL, RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, submitPreferences, dispatch, colorScheme]);\n\n // It’s easier to inline styles from preferences for these\n // than spamming the entire app with all custom properties right now\n const doStyles = useCallback((t: ThemeKeyType | \"auto\") => {\n // For some reason Typescript will just refuse to create dts files\n // for the packages if we set it to CSSProperties…\n let cssProps: any = {\n boxSizing: \"border-box\",\n color: \"#999999\"\n };\n\n if (t === \"auto\") {\n if (RSPrefs.theming.themes.systemThemes !== undefined) {\n cssProps.background = isRTL \n ? `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 100%)` \n : `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 0%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%)`;\n cssProps.color = \"#ffffff\";\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].subdue }`;\n } else {\n cssProps.display = \"none\";\n }\n } else {\n cssProps.background = RSPrefs.theming.themes.keys[t].background;\n cssProps.color = RSPrefs.theming.themes.keys[t].text;\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[t].subdue }`;\n };\n \n return cssProps;\n }, [RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, isRTL]);\n\n // mapArrowNav is the number of columns. This assumption \n // should be safe since even in vertical-writing, \n // the layout should be horizontal (?)\n const handleKeyboardNav = async (e: React.KeyboardEvent) => {\n \n if (mapArrowNav && !isNaN(mapArrowNav)) {\n const findNextVisualTheme = async (perRow: number) => {\n const currentIdx = themeItems.current.findIndex((val) => val === theme);\n const nextIdx = currentIdx + perRow;\n if (nextIdx >= 0 && nextIdx < themeItems.current.length) {\n await updatePreference(themeItems.current[nextIdx]);\n\n // Focusing here instead of useEffect on theme change so that \n // it doesn’t steal focus when themes is not the first radio group in the sheet\n if (radioGroupRef.current) {\n const themeToFocus = radioGroupRef.current.querySelector(`#${themeItems.current[nextIdx]}`) as HTMLElement;\n if (themeToFocus) themeToFocus.focus();\n }\n }\n };\n\n switch(e.code) {\n case \"Escape\":\n dispatch(setActionOpen({ \n key: ThActionsKeys.settings,\n isOpen: false \n })); \n break;\n case \"ArrowUp\":\n e.preventDefault();\n await findNextVisualTheme(-mapArrowNav);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n await findNextVisualTheme(mapArrowNav);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(1) : await findNextVisualTheme(-1);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(-1) : await findNextVisualTheme(1);\n break;\n default:\n break;\n }\n }\n };\n\n // Edge case where the value stored is auto, but the array doesn’t have it\n useEffect(() => {\n if (theme === \"auto\" && !themeItems.current.includes(theme)) {\n updatePreference(themeItems.current[0]);\n }\n }, [theme, updatePreference]);\n\n return (\n <>\n <StatefulRadioGroup\n ref={ radioGroupRef }\n standalone={ true }\n label={ t(\"reader.settings.themes.title\") }\n value={ theme }\n onChange={ async (val) => await updatePreference(val as ThemeKeyType) }\n >\n <div className={ classNames(settingsStyles.readerSettingsRadioWrapper, settingsStyles.readerSettingsThemesWrapper) }>\n { themeItems.current.map(( themeItem ) => \n <Radio\n className={ classNames(\n settingsStyles.readerSettingsRadio, \n settingsStyles.readerSettingsThemeRadio\n ) }\n value={ themeItem }\n id={ themeItem }\n key={ themeItem }\n style={ doStyles(themeItem) }\n { ...(mapArrowNav && !isNaN(mapArrowNav) ? {\n onKeyDown: (async (e: React.KeyboardEvent) => await handleKeyboardNav(e))\n } : {}) }\n >\n <span>\n { t(`reader.settings.themes.${ themeItem }`, { defaultValue: themeItem }) }\n { themeItem === theme && <CheckIcon aria-hidden=\"true\" focusable=\"false\" /> }\n </span>\n </Radio>\n ) }\n </div>\n </StatefulRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultWordSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles, setWordSpacing } from \"@/lib/settingsReducer\";\n\nexport const StatefulWordSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const wordSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.variant ?? defaultWordSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.range ?? defaultWordSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.step ?? defaultWordSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n wordSpacing: value\n });\n\n dispatch(setWordSpacing(getSetting(\"wordSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { wordSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ t(\"reader.settings.wordSpacing.title\") }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n steppers={{\n decrementLabel: t(\"reader.settings.wordSpacing.decrease\"),\n incrementLabel: t(\"reader.settings.wordSpacing.increase\")\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ t(\"reader.settings.wordSpacing.title\") }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n formatOptions={{ style: \"percent\" }}\n /> \n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgTextDecrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z\" /></svg>;\nexport default SvgTextDecrease;","import * as React from \"react\";\nconst SvgTextIncrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z\" /></svg>;\nexport default SvgTextIncrease;","import * as React from \"react\";\nconst SvgZoomOut = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400ZM280-540v-80h200v80H280Z\" /></svg>;\nexport default SvgZoomOut;","import * as React from \"react\";\nconst SvgZoomIn = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Zm-40-60v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z\" /></svg>;\nexport default SvgZoomIn;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { defaultFontSize, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Decrease from \"./assets/icons/text_decrease.svg\";\nimport Increase from \"./assets/icons/text_increase.svg\";\nimport ZoomOut from \"./assets/icons/zoom_out.svg\";\nimport ZoomIn from \"./assets/icons/zoom_in.svg\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontSize } from \"@/lib/settingsReducer\";\n\nexport const StatefulZoom = () => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const fontSize = useAppSelector((state) => state.settings.fontSize);\n const isFXL = useAppSelector((state) => state.publication.isFXL);\n const dispatch = useAppDispatch();\n \n const { \n getSetting, \n submitPreferences,\n preferencesEditor \n } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontSize: value });\n dispatch(setFontSize(getSetting(\"fontSize\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n const getEffectiveRange = (preferred: [number, number] | undefined, fallback: [number, number], supportedRange: [number, number] | undefined): [number, number] => {\n if (!supportedRange) {\n return preferred || fallback\n }\n if (preferred && isRangeWithinSupportedRange(preferred, supportedRange)) {\n return preferred;\n }\n if (fallback && isRangeWithinSupportedRange(fallback, supportedRange)) {\n return fallback;\n }\n return supportedRange;\n }\n \n const isRangeWithinSupportedRange = (range: [number, number], supportedRange: [number, number]): boolean => {\n return Math.min(range[0], range[1]) >= Math.min(supportedRange[0], supportedRange[1]) &&\n Math.max(range[0], range[1]) <= Math.max(supportedRange[0], supportedRange[1]);\n }\n\n const zoomRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.variant || defaultFontSize.variant,\n range: preferencesEditor?.fontSize.supportedRange\n ? getEffectiveRange(RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range, defaultFontSize.range, preferencesEditor?.fontSize.supportedRange)\n : RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range || defaultFontSize.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.step || preferencesEditor?.fontSize.step || defaultFontSize.step\n }\n\n return (\n <>\n { zoomRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField\n standalone={ true}\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value) } \n label={ isFXL ? t(\"reader.settings.zoom.title\") : t(\"reader.settings.fontSize.title\") }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n steppers={{\n decrementIcon: isFXL ? ZoomOut : Decrease,\n decrementLabel: isFXL ? t(\"reader.settings.zoom.decrease\") : t(\"reader.settings.fontSize.decrease\"),\n incrementIcon: isFXL ? ZoomIn : Increase,\n incrementLabel: isFXL ? t(\"reader.settings.zoom.increase\") : t(\"reader.settings.fontSize.increase\")\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ true }\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value as number) } \n label={ isFXL ? t(\"reader.settings.zoom.title\") : t(\"reader.settings.fontSize.title\") }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n formatOptions={{ style: \"percent\" }} \n />\n } \n </>\n );\n};","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { ThActionsDockedPref } from \"@/preferences\";\n\nimport { DockStateObject } from \"@/lib/actionsReducer\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\n// TODO: Responsive.\n// When resizing the window, all widths should be recalculated.\n// There is no guarantee that the panel group is the same size as the window,\n// so we have to rewrite this hook to observe the panel group, and push the new\n// widths to the StatefulDockingWrapper so that it can update panels.\n// Note that the StatefulDockingWrapper cannot pass PanelGroup as a ref, \n// it requires using a utility method: getPanelGroupElement(id)\n// See https://github.com/bvaughn/react-resizable-panels/tree/main/packages/react-resizable-panels#can-a-attach-a-ref-to-the-dom-elements\nexport const useResizablePanel = (panel: DockStateObject) => {\n const RSPrefs = usePreferences();\n const defaultWidth = RSPrefs.theming.layout.defaults.dockingWidth;\n const [pref, setPref] = useState<ThActionsDockedPref | null>(\n panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null\n );\n\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const previouslyCollapsed = usePrevious(panel.collapsed);\n\n const previousWidth = actions.getDockedWidth(panel.actionKey) || null;\n const width = pref?.width || defaultWidth;\n const minWidth = pref?.minWidth && pref.minWidth < width \n ? pref.minWidth \n : defaultWidth < width \n ? defaultWidth\n : width;\n const maxWidth = pref?.maxWidth && pref.maxWidth > width \n ? pref.maxWidth \n : defaultWidth > width\n ? defaultWidth\n : width;\n\n const isPopulated = () => {\n return panel.active && actions.isOpen(panel.actionKey);\n };\n\n const isCollapsed = () => {\n return panel.collapsed;\n }\n\n const forceExpand = () => {\n return !!(isPopulated() && previouslyCollapsed && !panel.collapsed);\n }\n\n const currentKey = () => {\n return panel.actionKey;\n };\n\n const isResizable = () => {\n return isPopulated() ? Math.round(width) > Math.round(minWidth) && Math.round(width) < Math.round(maxWidth) : false;\n };\n\n const hasDragIndicator = () => {\n return pref?.dragIndicator || false;\n };\n\n const getWidth = useCallback(() => {\n return previousWidth \n ? Math.round((previousWidth / window.innerWidth) * 100) \n : Math.round((width / window.innerWidth) * 100);\n }, [previousWidth, width]);\n\n const getMinWidth = useCallback(() => {\n return Math.round((minWidth / window.innerWidth) * 100);\n }, [minWidth]);\n\n const getMaxWidth = useCallback(() => {\n return Math.round((maxWidth / window.innerWidth) * 100);\n }, [maxWidth]);\n\n const getCurrentPxWidth = useCallback((percentage: number) => {\n let current = Math.round((percentage * window.innerWidth) / 100);\n \n if (current < minWidth) {\n current = minWidth;\n }\n \n if (current > maxWidth) {\n current = maxWidth;\n }\n \n return current;\n }, [minWidth, maxWidth]);\n\n // When the docked action changes, we need to update its preferences \n useEffect(() => {\n setPref(panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null);\n }, [panel.actionKey, RSPrefs]);\n\n return {\n currentKey, \n isPopulated, \n isCollapsed, \n forceExpand, \n isResizable,\n hasDragIndicator, \n getWidth,\n getMinWidth,\n getMaxWidth,\n getCurrentPxWidth\n }\n}","\"use client\";\n\nimport { ReactNode, useCallback, useEffect, useRef } from \"react\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\n\nimport { ImperativePanelHandle, Panel, PanelGroup, PanelResizeHandle } from \"react-resizable-panels\";\n\nimport { ThDockingTypes, ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useResizablePanel } from \"./hooks/useResizablePanel\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { activateDockPanel, collapseDockPanel, deactivateDockPanel, expandDockPanel, setDockPanelWidth } from \"@/lib/actionsReducer\";\n\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport classNames from \"classnames\";\n\nexport interface DockPanelSizes {\n width: number;\n minWidth: number;\n maxWidth: number;\n getCurrentPxWidth: (percentage: number) => number;\n}\n\nconst DockHandle = ({\n flow,\n isResizable,\n isPopulated, \n hasDragIndicator\n}: { \n flow: ThDockingKeys.start | ThDockingKeys.end;\n isResizable: boolean;\n isPopulated: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const handleID = `${ flow }-resize-handle`;\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabLeft : dockingStyles.dockResizeHandleGrabRight;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabRight : dockingStyles.dockResizeHandleGrabLeft;\n }\n }, [flow, direction]);\n\n return(\n <>\n <PanelResizeHandle \n id={ handleID } \n className={ dockingStyles.dockResizeHandle }\n disabled={ !isResizable }\n tabIndex={ isPopulated ? 0 : -1 }\n >\n { isResizable && hasDragIndicator && \n <div className={ classNames(dockingStyles.dockResizeHandleGrab, classFromFlow()) }></div> \n }\n </PanelResizeHandle>\n </>\n )\n};\n\nconst DockPanel = ({\n actionKey,\n flow,\n sizes,\n isResizable,\n isPopulated,\n isCollapsed,\n forceExpand,\n hasDragIndicator \n}: {\n actionKey: ActionsStateKeys | null;\n flow: ThDockingKeys.start | ThDockingKeys.end;\n sizes: DockPanelSizes;\n isResizable: boolean;\n isPopulated: boolean;\n isCollapsed: boolean;\n forceExpand: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const { t } = useI18n();\n\n const panelRef = useRef<ImperativePanelHandle>(null);\n const direction = useAppSelector(state => state.reader.direction);\n const dispatch = useAppDispatch();\n\n const dockClassName = flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr ? \"right-dock\" : \"left-dock\";\n\n const makeDockLabel = useCallback(() => { \n let label = \"\";\n if (flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr) {\n label += t(\"reader.app.docking.dockingRight\");\n } else {\n label += t(\"reader.app.docking.dockingLeft\")\n }\n\n if (actionKey) {\n if (!isPopulated) {\n label += ` – ${ t(\"reader.app.docking.dockingClosed\", { action: t(`reader.${ actionKey }.heading`) }) }`;\n } else if (isCollapsed) {\n label += ` – ${ t(\"reader.app.docking.dockingCollapsed\", { action: t(`reader.${ actionKey }.heading`) }) }`;\n }\n } else {\n label += ` – ${ t(\"reader.app.docking.dockingEmpty\") }`;\n }\n\n return label;\n }, [flow, direction, isPopulated, isCollapsed, actionKey, t]);\n\n const collapsePanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.collapse();\n dispatch(collapseDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n const expandPanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.expand();\n dispatch(expandDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n dispatch(activateDockPanel(flow));\n\n return () => {\n dispatch(deactivateDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n isPopulated || forceExpand ? expandPanel() : collapsePanel();\n }, [isPopulated, forceExpand, collapsePanel, expandPanel]);\n\n return(\n <>\n { flow === ThDockingKeys.end &&\n <DockHandle \n flow={ ThDockingKeys.end } \n isResizable={ isResizable } \n isPopulated={ isPopulated }\n hasDragIndicator={ hasDragIndicator } \n /> \n } \n <Panel \n id={ `${ flow }-panel` } \n order={ flow === ThDockingKeys.end ? 3 : 1 } \n collapsible={ true }\n collapsedSize={ 0 }\n ref={ panelRef }\n defaultSize={ isPopulated ? sizes.width : 0 } \n minSize={ sizes.minWidth } \n maxSize={ sizes.maxWidth }\n onCollapse={ collapsePanel }\n onExpand={ expandPanel }\n onResize={ (size: number) => size !== 0 && dispatch(setDockPanelWidth({\n key: flow,\n width: sizes.getCurrentPxWidth(size)\n }))}\n inert={ isCollapsed } \n >\n <div \n id={ flow } \n aria-label={ makeDockLabel() }\n className={ classNames(dockingStyles.dockPanelContainer, dockClassName) }\n ></div>\n </Panel>\n { flow === ThDockingKeys.start && \n <DockHandle \n flow={ ThDockingKeys.start } \n isResizable={ isResizable } \n isPopulated={ isPopulated } \n hasDragIndicator={ hasDragIndicator } \n /> \n } \n </>\n );\n};\n\nexport const StatefulDockingWrapper = ({ \n children\n}: { \n children: ReactNode; \n}) => {\n const RSPrefs = usePreferences();\n const dockingStart = useAppSelector(state => state.actions.dock[ThDockingKeys.start]);\n const dockingEnd = useAppSelector(state => state.actions.dock[ThDockingKeys.end])\n const startPanel = useResizablePanel(dockingStart);\n const endPanel = useResizablePanel(dockingEnd);\n\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n if (!RSPrefs.docking.dock) {\n return(\n <>\n { children }\n </>\n )\n } else {\n const dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none\n });\n\n const dockConfig = breakpoint && dockingMap[breakpoint] || ThDockingTypes.both;\n\n return (\n <>\n <PanelGroup direction=\"horizontal\">\n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.start) \n && <DockPanel \n actionKey={ startPanel.currentKey() }\n flow={ ThDockingKeys.start } \n sizes={{\n width: startPanel.getWidth(),\n minWidth: startPanel.getMinWidth(),\n maxWidth: startPanel.getMaxWidth(),\n getCurrentPxWidth: startPanel.getCurrentPxWidth\n }} \n isResizable={ startPanel.isResizable() }\n isPopulated={ startPanel.isPopulated() }\n isCollapsed={ startPanel.isCollapsed() } \n forceExpand={ startPanel.forceExpand() }\n hasDragIndicator={ startPanel.hasDragIndicator() }\n />\n }\n \n <Panel id=\"main-panel\" order={ 2 }>\n { children }\n </Panel>\n \n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.end)\n && <DockPanel \n actionKey={ endPanel.currentKey() }\n flow={ ThDockingKeys.end } \n sizes={{\n width: endPanel.getWidth(),\n minWidth: endPanel.getMinWidth(),\n maxWidth: endPanel.getMaxWidth(),\n getCurrentPxWidth: endPanel.getCurrentPxWidth\n }} \n isResizable={ endPanel.isResizable() }\n isPopulated={ endPanel.isPopulated() }\n isCollapsed={ endPanel.isCollapsed() } \n forceExpand={ endPanel.forceExpand() }\n hasDragIndicator={ endPanel.hasDragIndicator() }\n />\n }\n </PanelGroup>\n </>\n )\n }\n}","\"use client\";\n\nimport React from \"react\";\n\nimport backLinkStyles from \"./assets/styles/backLink.module.css\";\nimport readerSharedUI from \"./assets/styles/readerSharedUI.module.css\";\n\nimport { ThBackLinkVariant, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport { ThBackArrow } from \"@/core/Components/Links\";\nimport { ThHome } from \"@/core/Components/Links\";\nimport { ThLibrary } from \"@/core/Components/Links\";\nimport { ThLink } from \"@/core/Components/Links\";\n\nimport { useI18n } from \"@/i18n\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport const StatefulBackLink = ({ \n className \n}: { \n className?: string \n}) => {\n const { t } = useI18n();\n const RSPrefs = usePreferences();\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n \n const variant = RSPrefs.header.backLink?.variant || ThBackLinkVariant.arrow;\n const href = RSPrefs.header.backLink?.href;\n const content = RSPrefs.header.backLink?.content;\n const visibility = RSPrefs.header.backLink?.visibility || \"partially\";\n const backLinkClassName = classNames(backLinkStyles.backLink, visibility === \"always\" ? readerSharedUI.alwaysVisible : readerSharedUI.partiallyVisible);\n\n const compounds = {\n tooltipTrigger: {\n delay: RSPrefs.theming.arrow.tooltipDelay,\n closeDelay: RSPrefs.theming.arrow.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip\n },\n label: t(\"reader.app.header.backLink.tooltip\")\n };\n\n if (!href) return null;\n\n switch (variant) {\n case ThBackLinkVariant.arrow:\n return (\n <div className={ className }>\n <ThBackArrow \n className={ backLinkClassName } \n href={ href } \n direction={ isRTL ? \"right\" : \"left\" }\n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n />\n </div>\n );\n\n case ThBackLinkVariant.home:\n return (\n <div className={ className }>\n <ThHome \n className={ backLinkClassName } \n href={ href } \n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n />\n </div>\n );\n\n case ThBackLinkVariant.library:\n return (\n <div className={ className }>\n <ThLibrary \n className={ backLinkClassName } \n href={ href } \n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n />\n </div>\n );\n\n default:\n if (!content) return null;\n \n let contentNode: React.ReactNode = null;\n \n switch (content.type) {\n case \"img\":\n contentNode = <img alt={ content.alt ?? \"\" } src={ content.src } />;\n break;\n \n case \"svg\":\n // Parse the SVG string\n const parser = new DOMParser();\n const doc = parser.parseFromString(content.content, \"image/svg+xml\");\n const svgElement = doc.documentElement;\n \n // Extract all attributes\n const attributes: Record<string, string> = {};\n for (const { name, value } of Array.from(svgElement.attributes)) {\n attributes[name] = value;\n }\n \n // Create the SVG element with all its original attributes\n contentNode = React.createElement(\"svg\", {\n ...attributes,\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n xmlns: \"http://www.w3.org/2000/svg\",\n dangerouslySetInnerHTML: { \n __html: svgElement.innerHTML \n }\n });\n break;\n }\n \n return (\n <div className={ className }>\n <ThLink \n className={ backLinkClassName } \n href={ href } \n aria-label={ t(\"reader.app.header.backLink.trigger\") }\n compounds={ compounds }\n >\n { contentNode }\n </ThLink>\n </div>\n );\n }\n}","import * as React from \"react\";\nconst SvgMoreVert = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z\" /></svg>;\nexport default SvgMoreVert;","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { TooltipProps } from \"react-aria-components\";\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport { ThActionButton, ThActionButtonProps } from \"@/core/Components/Buttons/ThActionButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement, isKeyboardTriggered } from \"@/core/Helpers/focusUtilities\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulActionIconProps extends ThActionButtonProps {\n visibility?: ThCollapsibilityVisibility;\n placement?: TooltipProps[\"placement\"];\n tooltipLabel?: string;\n}\n\nexport const StatefulActionIcon = ({\n visibility,\n placement,\n tooltipLabel,\n children,\n ...props\n}: StatefulActionIconProps) => {\n const RSPrefs = usePreferences();\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const dispatch = useAppDispatch();\n\n const handleClassNameFromState = () => {\n let className = \"\";\n \n switch(visibility) {\n case ThCollapsibilityVisibility.always:\n className = readerSharedUI.alwaysVisible;\n break;\n case ThCollapsibilityVisibility.partially:\n className = readerSharedUI.partiallyVisible;\n break;\n case ThCollapsibilityVisibility.overflow:\n default:\n break;\n }\n\n return className\n };\n\n const defaultOnPressFunc = () => {\n dispatch(setImmersive(false));\n };\n\n const handleImmersive = (event: React.FocusEvent) => {\n // Check whether the focus was triggered by keyboard…\n // We don’t have access to type/modality, unlike onPress\n if (isKeyboardTriggered(event.target)) {\n dispatch(setImmersive(false));\n }\n };\n\n const blurOnEsc = (event: React.KeyboardEvent) => {\n // TODO: handle Tooltip cos first time you press esc, it’s the tooltip that is closed.\n if (triggerRef.current && isActiveElement(triggerRef.current) && event.code === \"Escape\") {\n triggerRef.current.blur();\n }\n };\n\n return (\n <ThActionButton\n ref={ triggerRef }\n className={ classNames(readerSharedUI.icon, handleClassNameFromState(), props.className) } \n onPress={ props.onPress || defaultOnPressFunc }\n onKeyDown={ blurOnEsc } \n onFocus={ handleImmersive }\n compounds={ tooltipLabel ? {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: placement,\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: tooltipLabel\n } : undefined }\n { ...Object.fromEntries(Object.entries(props).filter(([key]) => key !== \"className\")) }\n >\n { children }\n </ThActionButton>\n )\n};","\"use client\";\n\nimport React, { ReactNode, RefObject } from \"react\";\n\nimport overflowMenuStyles from \"./assets/styles/overflowMenu.module.css\";\n\nimport MenuIcon from \"./assets/icons/more_vert.svg\";\n\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\nimport { ThMenu } from \"@/core/Components/Menu/ThMenu\";\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionIcon } from \"./Triggers/StatefulActionIcon\";\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setOverflow } from \"@/lib/actionsReducer\";\n\nexport interface StatefulOverflowMenuProps {\n id: string;\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n triggerRef: RefObject<HTMLElement | null>;\n className?: string;\n children?: ReactNode;\n}\n\nexport const StatefulOverflowMenu = ({ \n id,\n className, \n items,\n triggerRef\n}: StatefulOverflowMenuProps) => {\n const { t } = useI18n();\n const dispatch = useAppDispatch();\n\n const toggleMenuState = (value: boolean) => {\n dispatch(setOverflow({\n key: id,\n isOpen: value\n }));\n }\n\n if (items.length > 0) {\n return (\n <>\n <ThMenu \n id={ id }\n triggerRef={ triggerRef }\n selectionMode=\"none\" \n className={ overflowMenuStyles.overflowMenu }\n dependencies={ [\"Trigger\"] }\n items={ items }\n compounds={{\n menuTrigger: {\n onOpenChange: (val: boolean) => toggleMenuState(val)\n },\n popover: {\n placement: \"bottom\",\n className: overflowMenuStyles.overflowPopover\n },\n button: (\n <StatefulActionIcon\n className={ className ? className : overflowMenuStyles.activeButton }\n aria-label={ t(\"reader.overflowMenu.active.trigger\") }\n placement=\"bottom\"\n tooltipLabel={ t(\"reader.overflowMenu.active.tooltip\") }\n visibility={ ThCollapsibilityVisibility.always }\n >\n <MenuIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n ),\n }}\n />\n </>\n )\n }\n}","\"use client\";\n\nimport { useRef } from \"react\";\n\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThCollapsibleActionsBar, ThCollapsibleActionsBarProps } from \"@/core/Components/Actions/ThCollapsibleActionsBar\";\nimport { StatefulOverflowMenu } from \"./StatefulOverflowMenu\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport interface StatefulCollapsibleActionsBarProps extends ThCollapsibleActionsBarProps {\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n overflowMenuClassName?: string;\n}\n\nexport const StatefulCollapsibleActionsBar = ({\n id, \n items,\n overflowMenuClassName,\n ...props\n}: StatefulCollapsibleActionsBarProps) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n return (\n <>\n <ThCollapsibleActionsBar \n ref={ ref }\n id={ id }\n items={ items }\n breakpoint={ breakpoint }\n compounds={{\n menu: (<StatefulOverflowMenu \n id={ id }\n triggerRef={ ref }\n className={ overflowMenuClassName } \n items={ [] }\n />) }}\n { ...props }\n />\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { ActionKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport { ThLayoutUI } from \"@/preferences/models/enums\";\n\nimport readerHeaderStyles from \"./assets/styles/readerHeader.module.css\";\nimport overflowMenuStyles from \"./Actions/assets/styles/overflowMenu.module.css\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThHeader } from \"@/core/Components/Reader/ThHeader\";\nimport { StatefulBackLink } from \"./StatefulBackLink\";\nimport { ThRunningHead } from \"@/core/Components/Reader/ThRunningHead\";\nimport { ThInteractiveOverlay } from \"../core/Components/Reader/ThInteractiveOverlay\";\nimport { StatefulCollapsibleActionsBar } from \"./Actions/StatefulCollapsibleActionsBar\";\n\nimport { usePlugins } from \"./Plugins/PluginProvider\";\nimport { usePreferences } from \"@/preferences/hooks\";\nimport { useActions } from \"@/core/Components\";\nimport { useFocusWithin } from \"react-aria\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nexport const StatefulReaderHeader = ({\n layout\n}: {\n layout: ThLayoutUI;\n}) => {\n const headerRef = useRef<HTMLDivElement>(null);\n const { reflowActionKeys, fxlActionKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { actionsComponentsMap } = usePlugins();\n \n const actionsMap = useAppSelector(state => state.actions.keys);\n const overflowMap = useAppSelector(state => state.actions.overflow);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = useAppSelector(state => state.settings.scroll);\n const runningHead = useAppSelector(state => state.publication.runningHead);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n const hasScrollAffordance = useAppSelector(state => state.reader.hasScrollAffordance);\n\n const actions = useActions({ ...actionsMap, ...overflowMap });\n const dispatch = useAppDispatch();\n\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin() {\n dispatch(setHovering(true));\n },\n onBlurWithin() { \n if (actions.everyOpenDocked()) {\n dispatch(setHovering(false));\n }\n }\n });\n\n const setHover = () => {\n if (!hasScrollAffordance && actions.everyOpenDocked()) {\n dispatch(setHovering(true));\n }\n };\n\n const removeHover = () => {\n if (!hasScrollAffordance && actions.everyOpenDocked()) {\n dispatch(setHovering(false));\n }\n };\n\n const listActionItems = useCallback(() => {\n const actionKeys = isFXL? fxlActionKeys : reflowActionKeys;\n const actionsItems: ThActionEntry<ActionKeyType>[] = [];\n\n if (actionsComponentsMap && Object.keys(actionsComponentsMap).length > 0) {\n actionKeys.forEach((key) => { \n if (actionsComponentsMap[key]) {\n actionsItems.push({\n Trigger: actionsComponentsMap[key].Trigger,\n Target: actionsComponentsMap[key].Target,\n key: key\n });\n } else {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n }\n });\n }\n \n return actionsItems;\n }, [isFXL, fxlActionKeys, reflowActionKeys, actionsComponentsMap]);\n\n useEffect(() => {\n // Blur any focused element when entering immersive mode\n if (isImmersive) {\n const focusElement = document.activeElement;\n if (focusElement && headerRef.current?.contains(focusElement)) {\n (focusElement as HTMLElement).blur();\n }\n }\n }, [isImmersive]);\n\n return (\n <>\n <ThInteractiveOverlay \n id=\"reader-header-overlay\"\n className=\"bar-overlay\"\n isActive={ layout === ThLayoutUI.layered && isImmersive && !isHovering }\n onMouseEnter={ setHover }\n onMouseLeave={ removeHover }\n />\n\n <ThHeader \n ref={ headerRef }\n className={ readerHeaderStyles.header } \n id=\"top-bar\" \n aria-label={ t(\"reader.app.header.label\") } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n { ...focusWithinProps }\n >\n { RSPrefs.header.backLink && <StatefulBackLink className={ readerHeaderStyles.backLinkWrapper } /> }\n \n <ThRunningHead \n label={ runningHead || t(\"reader.app.header.runningHeadFallback\") } \n syncDocTitle={ true }\n aria-label={ t(\"reader.app.header.runningHead\") }\n />\n \n <StatefulCollapsibleActionsBar \n id=\"reader-header-overflowMenu\" \n items={ listActionItems() }\n prefs={{ \n ...RSPrefs.actions, \n displayOrder: isFXL \n ? RSPrefs.actions.fxlOrder \n : RSPrefs.actions.reflowOrder \n }}\n className={ readerHeaderStyles.actionsWrapper } \n aria-label={ t(\"reader.app.header.actions\") } \n overflowMenuClassName={ \n (!isScroll || RSPrefs.affordances.scroll.hintInImmersive) \n ? overflowMenuStyles.hintButton \n : undefined \n }\n />\n </ThHeader>\n </>\n );\n}","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport arrowStyles from \"./assets/styles/readerArrowButton.module.css\";\nimport readerSharedUI from \"./assets/styles/readerSharedUI.module.css\";\n\nimport { PressEvent } from \"react-aria\";\n\nimport { ThNavigationButton, ThNavigationButtonProps } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setArrows } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\n\nimport classNames from \"classnames\";\n\nexport interface StatefulReaderArrowButtonProps extends ThNavigationButtonProps {\n direction: \"left\" | \"right\";\n occupySpace: boolean;\n}\n\nexport const StatefulReaderArrowButton = ({\n direction,\n occupySpace,\n className,\n isDisabled,\n onPress,\n ...props\n}: StatefulReaderArrowButtonProps) => {\n const RSPrefs = 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 scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n \n const wasScroll = usePrevious(isScroll);\n\n const dispatch = useAppDispatch();\n\n const [isHovering, setIsHovering] = useState(false);\n\n const switchedFromScrollable = () => {\n return wasScroll && !isScroll;\n }\n\n const label = (\n direction === \"right\" && !isRTL || \n direction === \"left\" && isRTL\n ) \n ? t(\"reader.navigation.goForward\") \n : t(\"reader.navigation.goBackward\");\n\n const handleClassNameFromState = () => {\n let className = \"\";\n if (!hasArrows && !switchedFromScrollable()) {\n className = arrowStyles.visuallyHidden;\n }\n return className;\n };\n\n const handleClassNameFromSpaceProp = () => {\n let className = \"\";\n if (occupySpace) {\n className = arrowStyles.viewportLarge;\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 const handleOnPress = (e: PressEvent, cb: (e: PressEvent) => void) => {\n dispatch(setArrows(false));\n cb(e);\n }\n\n return (\n <>\n <ThNavigationButton \n direction={ direction }\n ref= { buttonRef }\n aria-label={ label }\n onPress={ (e: PressEvent) => onPress && handleOnPress(e, 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: RSPrefs.theming.arrow.tooltipDelay,\n closeDelay: RSPrefs.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 React, { useEffect, useState } from \"react\";\n\nimport progressionStyles from \"./assets/styles/readerProgression.module.css\";\n\nimport { ThProgression } from \"@/core/Components/Reader/ThProgression\";\n\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport interface UnstableProgressionObject {\n totalPositions?: number;\n currentPositions?: number[];\n relativeProgression?: number;\n currentChapter?: string;\n totalProgression?: number;\n currentPublication?: string;\n}\n\nexport const StatefulReaderProgression = ({ \n className \n}: { \n className?: string \n}) => {\n const { t } = useI18n();\n const progression: UnstableProgressionObject = useAppSelector(state => state.publication.progression);\n\n const [current, setCurrent] = useState(\"\");\n const [reference, setReference] = useState(\"\");\n\n useEffect(() => {\n if (progression.totalPositions && progression.currentPositions) {\n setCurrent(progression.currentPositions.length === 2 ? `${progression.currentPositions[0]}–${progression.currentPositions[1]}` : `${progression.currentPositions}`);\n setReference(`${progression.totalPositions}`);\n } else if (progression.totalProgression !== undefined && progression.currentPublication) {\n setCurrent(`${Math.round(progression.totalProgression * 100)}%`);\n setReference(progression.currentPublication);\n } else if (progression.relativeProgression !== undefined && progression.currentChapter) {\n setCurrent(`${Math.round(progression.relativeProgression * 100)}%`);\n setReference(progression.currentChapter);\n } else {\n setCurrent(\"\");\n setReference(\"\");\n }\n }, [progression])\n\n return (\n <>\n {(current && reference) \n && <ThProgression \n id={ progressionStyles.current } \n className={ className }\n aria-label={ t(\"reader.app.progression.wrapper\") }\n >\n { t(\"reader.app.progression.of\", { current, reference }) }\n </ThProgression>}\n </>\n )\n}","\"use client\";\n\nimport { useRef, KeyboardEvent } from \"react\";\n\nimport { ThPagination, ThPaginationProps } from \"@/core/Components/Reader/ThPagination\";\n\nimport readerPaginationStyles from \"./assets/styles/readerPagination.module.css\";\n \nexport const StatefulPagination = ({\n ref,\n links,\n compounds,\n children,\n ...props\n}: ThPaginationProps) => {\n const previousButtonRef = useRef<HTMLButtonElement>(null);\n const nextButtonRef = useRef<HTMLButtonElement>(null);\n\n const updatedCompounds = {\n ...compounds,\n previousButton: {\n ...compounds?.previousButton,\n ref: previousButtonRef,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n previousButtonRef.current?.blur();\n }\n }\n },\n nextButton: {\n ...compounds?.nextButton,\n ref: nextButtonRef,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n nextButtonRef.current?.blur();\n }\n }\n }\n };\n\n return (\n <ThPagination \n ref={ ref } \n className={ readerPaginationStyles.pagination }\n links={ links } \n compounds={ updatedCompounds } \n { ...props }\n >\n { children }\n </ThPagination>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport readerPaginationStyles from \"./assets/styles/readerPagination.module.css\";\n\nimport { ThBreakpoints, ThLayoutUI } from \"@/preferences/models/enums\";\n\nimport { ThFooter } from \"@/core/Components/Reader/ThFooter\";\nimport { StatefulReaderProgression } from \"./StatefulReaderProgression\";\nimport { ThInteractiveOverlay } from \"../core/Components/Reader/ThInteractiveOverlay\";\nimport { StatefulPagination } from \"./StatefulPagination\";\nimport { ThPaginationLinkProps } from \"@/core/Components/Reader/ThPagination\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useFocusWithin } from \"react-aria\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\n\nexport const StatefulReaderFooter = ({\n layout\n}: {\n layout: ThLayoutUI;\n}) => {\n const { t } = useI18n();\n const footerRef = useRef<HTMLDivElement>(null);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n const hasScrollAffordance = useAppSelector(state => state.reader.hasScrollAffordance);\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n const timeline = useAppSelector(state => state.publication.unstableTimeline);\n\n const dispatch = useAppDispatch();\n\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin() {\n dispatch(setHovering(true));\n },\n onBlurWithin() {\n dispatch(setHovering(false));\n }\n });\n\n const setHover = () => {\n if (!hasScrollAffordance) {\n dispatch(setHovering(true));\n }\n };\n\n const removeHover = () => {\n if (!hasScrollAffordance) {\n dispatch(setHovering(false));\n }\n };\n\n const { previousLocator, nextLocator, go } = useEpubNavigator();\n\n const updateLinks = useCallback(() => {\n const links: { previous?: ThPaginationLinkProps; next?: ThPaginationLinkProps } = {\n previous: undefined,\n next: undefined\n };\n\n const previous = previousLocator();\n const next = nextLocator();\n\n if (previous) {\n links.previous = {\n node: breakpoint !== ThBreakpoints.compact && breakpoint !== ThBreakpoints.medium ? (\n <>\n <span className=\"sr-only\">{ t(\"reader.navigation.scroll.prevA11yLabel\") }</span>\n <span className={ readerPaginationStyles.paginationLabel }>{ timeline?.previousItem?.title || previous.title || t(\"reader.navigation.scroll.prevLabel\") }</span>\n </>\n ) : (\n <>\n <span className={ readerPaginationStyles.paginationLabel }>{ t(\"reader.navigation.scroll.prevLabel\") }</span>\n </>\n ),\n onPress: () => go(previous, !reducedMotion, () => {})\n }\n }\n\n if (next) {\n links.next = {\n node: breakpoint !== ThBreakpoints.compact && breakpoint !== ThBreakpoints.medium ? (\n <>\n <span className=\"sr-only\">{ t(\"reader.navigation.scroll.nextA11yLabel\") }</span>\n <span className={ readerPaginationStyles.paginationLabel }>{ timeline?.nextItem?.title || next.title || t(\"reader.navigation.scroll.nextLabel\") }</span>\n </>\n ) : ( \n <>\n <span className={ readerPaginationStyles.paginationLabel }>{ t(\"reader.navigation.scroll.nextLabel\") }</span>\n </>\n ),\n onPress: () => go(next, !reducedMotion, () => {})\n }\n }\n\n return links;\n }, [go, previousLocator, nextLocator, t, timeline, breakpoint, reducedMotion]);\n\n useEffect(() => {\n updateLinks();\n }, [timeline, updateLinks]);\n\n useEffect(() => {\n // Blur any focused element when entering immersive mode\n if (isImmersive) {\n const focusElement = document.activeElement;\n if (focusElement && footerRef.current?.contains(focusElement)) {\n (focusElement as HTMLElement).blur();\n }\n }\n }, [isImmersive]);\n\n return(\n <>\n <ThInteractiveOverlay \n id=\"reader-footer-overlay\"\n className=\"bar-overlay\"\n isActive={ layout === ThLayoutUI.layered && isImmersive && !isHovering }\n onMouseEnter={ setHover }\n onMouseLeave={ removeHover }\n />\n \n <ThFooter \n ref={ footerRef }\n id=\"bottom-bar\" \n aria-label={ t(\"reader.app.footer.label\") } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n { ...focusWithinProps }\n >\n { isScroll && !isFXL\n ? <StatefulPagination \n aria-label={ t(\"reader.navigation.scroll.wrapper\") }\n links={ updateLinks() } \n compounds={ {\n listItem: {\n className: readerPaginationStyles.paginationListItem\n },\n previousButton: {\n className: readerPaginationStyles.previousButton,\n preventFocusOnPress: true\n },\n nextButton: {\n className: readerPaginationStyles.nextButton,\n preventFocusOnPress: true\n }\n } } \n >\n <StatefulReaderProgression className={ readerPaginationStyles.progression } />\n </StatefulPagination> \n : <StatefulReaderProgression /> }\n </ThFooter>\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { \n defaultFontFamilyOptions, \n defaultLineHeights, \n ThemeKeyType, \n usePreferenceKeys, \n useTheming\n} from \"../../preferences\";\n\nimport \"../assets/styles/reader.css\";\nimport arrowStyles from \"../assets/styles/readerArrowButton.module.css\";\n\nimport { \n ThActionsKeys, \n ThBreakpoints, \n ThLineHeightOptions, \n ThSettingsKeys, \n ThTextAlignOptions, \n ThLayoutUI\n} from \"../../preferences/models/enums\";\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\n\nimport { ThPlugin, ThPluginRegistry } from \"../Plugins/PluginRegistry\";\n\nimport { I18nProvider } from \"react-aria\";\nimport { ThPluginProvider } from \"../Plugins/PluginProvider\";\n\nimport {\n BasicTextSelection,\n FrameClickEvent,\n} from \"@readium/navigator-html-injectables\";\nimport { \n EpubNavigatorListeners, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences, \n TextAlignment\n} from \"@readium/navigator\";\nimport { \n Locator, \n Manifest, \n Publication, \n Fetcher, \n HttpFetcher, \n Layout, \n ReadingProgression\n} from \"@readium/shared\";\n\nimport { StatefulDockingWrapper } from \"../Docking/StatefulDockingWrapper\";\nimport { StatefulReaderHeader } from \"../StatefulReaderHeader\";\nimport { StatefulReaderArrowButton } from \"../StatefulReaderArrowButton\";\nimport { StatefulReaderFooter } from \"../StatefulReaderFooter\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\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 { useLocalStorage } from \"@/core/Hooks/useLocalStorage\";\n\nimport { toggleActionOpen } from \"@/lib/actionsReducer\";\nimport { useAppSelector, useAppDispatch, useAppStore } from \"@/lib/hooks\";\nimport { AppDispatch } from \"@/lib/store\";\nimport { \n setBreakpoint, \n setColorScheme, \n setContrast, \n setForcedColors, \n setMonochrome, \n setReducedMotion, \n setReducedTransparency, \n setTheme \n} from \"@/lib/themeReducer\";\nimport { \n setImmersive, \n setLoading,\n setHovering, \n toggleImmersive, \n setPlatformModifier, \n setDirection, \n setArrows, \n setFullscreen,\n setScrollAffordance\n} from \"@/lib/readerReducer\";\nimport { \n setFXL, \n setRTL, \n setProgression, \n setRunningHead, \n setPositionsList,\n setTimeline,\n setPublicationStart,\n setPublicationEnd\n} from \"@/lib/publicationReducer\";\nimport { LineLengthStateObject } from \"@/lib/settingsReducer\";\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 { deserializePositions } from \"@/helpers/deserializePositions\";\nimport { propsToCSSVars } from \"@/core/Helpers/propsToCSSVars\";\n\nexport interface ReadiumCSSSettings {\n columnCount: string;\n fontFamily: keyof typeof defaultFontFamilyOptions | null;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineLength: LineLengthStateObject | null;\n lineHeight: ThLineHeightOptions | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n textAlign: ThTextAlignOptions | null;\n textNormalization: boolean;\n theme?: string;\n wordSpacing: number | null;\n}\n\nexport interface StatelessCache {\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 interface StatefulReaderProps {\n rawManifest: object;\n selfHref: string;\n plugins?: ThPlugin[];\n}\n\nexport const StatefulReader = ({ \n rawManifest, \n selfHref, \n plugins \n}: StatefulReaderProps) => {\n if (plugins && plugins.length > 0) {\n plugins.forEach(plugin => {\n ThPluginRegistry.register(plugin);\n });\n } else {\n ThPluginRegistry.register(createDefaultPlugin());\n }\n \n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n \n const [publication, setPublication] = useState<Publication | null>(null);\n\n const container = useRef<HTMLDivElement>(null);\n const localDataKey = useRef(`${selfHref}-current-location`);\n const arrowsWidth = useRef(2 * ((RSPrefs.theming.arrow.size || 40) + (RSPrefs.theming.arrow.offset || 0)));\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const progression = useAppSelector(state => state.publication.progression);\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 letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const lineLength = useAppSelector(state => state.settings.lineLength);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const scroll = useAppSelector(state => state.settings.scroll);\n const isScroll = scroll && !isFXL;\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const wordSpacing = useAppSelector(state => state.settings.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 const arrowsOccupySpace = !isScroll && breakpoint &&\n (breakpoint === ThBreakpoints.large || breakpoint === ThBreakpoints.xLarge);\n \n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n\n const layoutUI = isFXL \n ? RSPrefs.theming.layout.ui?.fxl || ThLayoutUI.layered \n : isScroll \n ? RSPrefs.theming.layout.ui?.reflow || ThLayoutUI.layered\n : ThLayoutUI.stacked;\n\n // Init theming (breakpoints, theme, media queries…)\n useTheming<ThemeKeyType>({ \n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemKeys: RSPrefs.theming.themes.systemThemes,\n breakpointsMap: RSPrefs.theming.breakpoints,\n initProps: {\n ...propsToCSSVars(RSPrefs.theming.arrow, \"arrow\"), \n ...propsToCSSVars(RSPrefs.theming.icon, \"icon\"),\n ...propsToCSSVars(RSPrefs.theming.layout, \"layout\")\n },\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 const atPublicationStart = useAppSelector(state => state.publication.atPublicationStart);\n const atPublicationEnd = useAppSelector(state => state.publication.atPublicationEnd);\n\n const dispatch = useAppDispatch();\n\n const onFsChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n const fs = useFullscreen(onFsChange);\n\n const { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \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 onFXLPositionChange,\n submitPreferences\n } = useEpubNavigator();\n\n const { setLocalData, getLocalData, localData } = useLocalStorage(localDataKey.current);\n\n const timeline = useTimeline({\n publication: publication,\n currentLocation: localData,\n currentPositions: progression.currentPositions || [],\n positionsList: positionsList,\n onChange: (timeline) => {\n dispatch(setTimeline(timeline));\n }\n });\n\n // We need to use a cache so that we can use updated values\n // without re-rendering the component, and reloading EpubNavigator\n const cache = useRef<StatelessCache>({\n layoutUI: layoutUI,\n isImmersive: isImmersive,\n isHovering: isHovering,\n arrowsOccupySpace: arrowsOccupySpace || false,\n settings: {\n columnCount: columnCount,\n fontFamily: fontFamily,\n fontSize: fontSize,\n fontWeight: fontWeight,\n hyphens: hyphens,\n letterSpacing: letterSpacing,\n lineHeight: lineHeight,\n lineLength: lineLength,\n paragraphIndent: paragraphIndent,\n paragraphSpacing: paragraphSpacing,\n publisherStyles: publisherStyles,\n scroll: isScroll,\n textAlign: textAlign,\n textNormalization: textNormalization,\n theme: theme,\n wordSpacing: wordSpacing\n },\n positionsList: positionsList || [],\n colorScheme: colorScheme,\n reducedMotion: reducedMotion\n });\n\n const activateImmersiveOnAction = useCallback(() => {\n if (!cache.current.isImmersive) dispatch(setImmersive(true));\n }, [dispatch]);\n\n const toggleIsImmersive = useCallback(() => {\n // If tap/click in iframe, then header/footer no longer hoovering \n dispatch(setHovering(false));\n dispatch(setArrows(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 = (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 if (event.x < oneQuarter) {\n goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\n } \n else if (event.x > oneQuarter * 3) {\n goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n } else if (oneQuarter <= event.x && event.x <= oneQuarter * 3) {\n toggleIsImmersive();\n }\n } else {\n if (RSPrefs.affordances.scroll.toggleOnMiddlePointer.includes(\"tap\")) {\n toggleIsImmersive();\n }\n }\n }\n };\n\n const handleProgression = useCallback((locator: Locator) => {\n const relativeRef = locator.title || t(\"reader.app.progression.referenceFallback\");\n \n dispatch(setProgression( { \n currentPositions: currentPositions(), \n relativeProgression: locator.locations.progression, \n currentChapter: relativeRef, \n totalProgression: locator.locations.totalProgression \n }));\n }, [dispatch, currentPositions, t]);\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 handleProgression(locator);\n setLocalData(locator);\n }, [handleProgression, setLocalData]);\n\n onFXLPositionChange(handleFXLProgression);\n\n const initReadingEnv = 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 };\n\n const p = new Peripherals(useAppStore(), RSPrefs.actions, {\n moveTo: (direction) => {\n switch(direction) {\n case \"right\":\n if (!cache.current.settings.scroll) goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n break;\n case \"left\":\n if (!cache.current.settings.scroll) goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\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 shiftKey \n ? goBackward(!cache.current.reducedMotion, activateImmersiveOnAction) \n : goForward(!cache.current.reducedMotion, activateImmersiveOnAction);\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 }))\n break;\n // case ThActionsKeys.jumpToPosition:\n default:\n break\n }\n }\n });\n\n const listeners: EpubNavigatorListeners = {\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 handleProgression(locator);\n setLocalData(locator);\n }, 250);\n debouncedHandleProgression();\n }\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 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 },\n tap: function (_e: FrameClickEvent): boolean {\n handleTap(_e);\n return true;\n },\n click: function (_e: FrameClickEvent): boolean {\n if (cache.current.layoutUI === ThLayoutUI.layered) {\n if (\n !cache.current.settings.scroll ||\n RSPrefs.affordances.scroll.toggleOnMiddlePointer.includes(\"click\")\n ) {\n handleTap(_e);\n }\n }\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 (RSPrefs.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 RSPrefs.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 };\n\n const applyConstraint = useCallback(async (value: number) => {\n await submitPreferences({\n constraint: value\n })\n }, [submitPreferences]);\n\n // Handling side effects on Navigator\n\n useEffect(() => {\n cache.current.isImmersive = isImmersive;\n }, [isImmersive]);\n\n useEffect(() => {\n cache.current.isHovering = isHovering;\n }, [isHovering]);\n\n useEffect(() => {\n cache.current.layoutUI = layoutUI;\n }, [layoutUI]);\n\n useEffect(() => {\n cache.current.settings.scroll = isScroll;\n\n // Reset top bar visibility and last position\n dispatch(setImmersive(false));\n\n const handleConstraint = async (value: number) => {\n await applyConstraint(value)\n }\n\n if (!isScroll) {\n handleConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n .catch(console.error);\n } else {\n handleConstraint(0)\n .catch(console.error);\n }\n }, [isScroll, arrowsOccupySpace, applyConstraint, dispatch]);\n\n useEffect(() => {\n cache.current.settings.columnCount = columnCount;\n }, [columnCount]);\n\n useEffect(() => {\n cache.current.settings.fontFamily = fontFamily;\n }, [fontFamily]);\n\n useEffect(() => {\n cache.current.settings.fontSize = fontSize;\n }, [fontSize]);\n\n useEffect(() => {\n cache.current.settings.fontWeight = fontWeight;\n }, [fontWeight]);\n\n useEffect(() => {\n cache.current.settings.hyphens = hyphens;\n }, [hyphens]);\n\n useEffect(() => {\n cache.current.settings.letterSpacing = letterSpacing;\n }, [letterSpacing]);\n\n useEffect(() => {\n cache.current.settings.lineHeight = lineHeight;\n }, [lineHeight]);\n\n useEffect(() => {\n cache.current.settings.lineLength = lineLength;\n }, [lineLength]);\n\n useEffect(() => {\n cache.current.settings.paragraphIndent = paragraphIndent;\n }, [paragraphIndent]);\n\n useEffect(() => {\n cache.current.settings.paragraphSpacing = paragraphSpacing;\n }, [paragraphSpacing]);\n\n useEffect(() => {\n cache.current.settings.textAlign = textAlign;\n }, [textAlign]);\n\n useEffect(() => {\n cache.current.settings.textNormalization = textNormalization;\n }, [textNormalization]);\n\n useEffect(() => {\n cache.current.settings.theme = theme;\n }, [theme]);\n\n useEffect(() => {\n cache.current.settings.wordSpacing = wordSpacing;\n }, [wordSpacing]);\n\n useEffect(() => {\n cache.current.positionsList = positionsList || [];\n }, [positionsList]);\n\n useEffect(() => {\n cache.current.arrowsOccupySpace = arrowsOccupySpace || false;\n }, [arrowsOccupySpace]);\n\n useEffect(() => {\n cache.current.reducedMotion = reducedMotion;\n }, [reducedMotion]);\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 useEffect(() => {\n if (cache.current.colorScheme !== colorScheme) {\n cache.current.colorScheme = colorScheme;\n }\n\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\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: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.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 }, [themeObject, previousTheme, RSPrefs.theming.themes, fxlThemeKeys, reflowThemeKeys, colorScheme, isFXL, submitPreferences, dispatch]);\n\n useEffect(() => {\n RSPrefs.direction && dispatch(setDirection(RSPrefs.direction));\n dispatch(setPlatformModifier(getPlatformModifier()));\n }, [RSPrefs.direction, dispatch]);\n\n useEffect(() => {\n const handleConstraint = async () => {\n await applyConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n }\n handleConstraint()\n .catch(console.error);\n }, [arrowsOccupySpace, applyConstraint]);\n\n useEffect(() => {\n const fetcher: Fetcher = new HttpFetcher(undefined, selfHref);\n const manifest = Manifest.deserialize(rawManifest)!;\n manifest.setSelfLink(selfHref);\n\n setPublication(new Publication({\n manifest: manifest,\n fetcher: fetcher\n }));\n }, [rawManifest, selfHref]);\n\n useEffect(() => {\n if (!publication) return;\n\n dispatch(setRTL(publication.metadata.effectiveReadingProgression === ReadingProgression.rtl));\n dispatch(setFXL(publication.metadata.effectiveLayout === Layout.fixed));\n\n const pubTitle = publication.metadata.title.getTranslation(\"en\");\n\n dispatch(setRunningHead(pubTitle));\n dispatch(setProgression({ currentPublication: pubTitle }));\n\n let positionsList: Locator[] | undefined;\n\n const fetchPositions = async () => {\n positionsList = await publication.positionsFromManifest();\n if (positionsList && positionsList.length > 0) {\n dispatch(setProgression( { totalPositions: positionsList.length }))\n };\n const deserializedPositionsList = deserializePositions(positionsList);\n dispatch(setPositionsList(deserializedPositionsList));\n };\n\n fetchPositions()\n .catch(console.error)\n .then(() => {\n const isFXL = publication.metadata.effectiveLayout === Layout.fixed;\n\n const initialPosition: Locator | null = getLocalData();\n\n const initialConstraint = cache.current.arrowsOccupySpace ? arrowsWidth.current : 0;\n \n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const theme = themeKeys.includes(cache.current.settings.theme as any) ? cache.current.settings.theme : \"auto\";\n const themeProps = buildThemeObject<ThemeKeyType>({\n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme: cache.current.colorScheme\n });\n\n const lineHeightOptions = {\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n };\n\n const preferences: IEpubPreferences = isFXL ? {} : {\n columnCount: cache.current.settings.columnCount === \"auto\" ? null : Number(cache.current.settings.columnCount),\n constraint: initialConstraint,\n fontFamily: cache.current.settings.fontFamily && defaultFontFamilyOptions[cache.current.settings.fontFamily],\n fontSize: cache.current.settings.fontSize,\n fontWeight: cache.current.settings.fontWeight,\n hyphens: cache.current.settings.hyphens,\n letterSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.letterSpacing,\n lineHeight: cache.current.settings.publisherStyles \n ? undefined \n : cache.current.settings.lineHeight === null \n ? null \n : lineHeightOptions[cache.current.settings.lineHeight],\n optimalLineLength: cache.current.settings.lineLength?.optimal,\n maximalLineLength: cache.current.settings.lineLength?.max?.isDisabled \n ? null \n : cache.current.settings.lineLength?.max?.chars,\n minimalLineLength: cache.current.settings.lineLength?.min?.isDisabled \n ? null \n : cache.current.settings.lineLength?.min?.chars,\n paragraphIndent: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphIndent,\n paragraphSpacing: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphSpacing,\n scroll: cache.current.settings.scroll,\n textAlign: cache.current.settings.textAlign as unknown as TextAlignment | null | undefined,\n textNormalization: cache.current.settings.textNormalization,\n wordSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.wordSpacing,\n ...themeProps\n };\n\n const defaults: IEpubDefaults = isFXL ? {} : {\n maximalLineLength: RSPrefs.typography.maximalLineLength, \n minimalLineLength: RSPrefs.typography.minimalLineLength, \n optimalLineLength: RSPrefs.typography.optimalLineLength,\n pageGutter: RSPrefs.typography.pageGutter,\n scrollPaddingTop: RSPrefs.theming.layout.ui?.reflow === ThLayoutUI.layered \n ? (RSPrefs.theming.icon.size || 24) * 3 \n : (RSPrefs.theming.icon.size || 24),\n scrollPaddingBottom: RSPrefs.theming.layout.ui?.reflow === ThLayoutUI.layered \n ? (RSPrefs.theming.icon.size || 24) * 5 \n : (RSPrefs.theming.icon.size || 24)\n }\n \n EpubNavigatorLoad({\n container: container.current, \n publication: publication,\n listeners: listeners, \n positionsList: positionsList,\n initialPosition: initialPosition ?? undefined,\n preferences: preferences,\n defaults: defaults\n }, () => p.observe(window));\n })\n .finally(() => {\n const setLoadingThunk = (dispatch: AppDispatch) => {\n dispatch(setLoading(false));\n };\n dispatch(setLoadingThunk);\n });\n\n return () => {\n EpubNavigatorDestroy(() => p.destroy());\n };\n }, [publication, RSPrefs, fxlThemeKeys, reflowThemeKeys]);\n\n // If breakpoint is not defined, we are not ready to render\n // since useDocking needs it to derive the sheet type\n // Same for arrows and collapsible actions.\n if (!breakpoint) return null;\n\n return (\n <>\n <I18nProvider locale={ RSPrefs.locale }>\n <ThPluginProvider>\n <main id=\"reader-main\">\n <StatefulDockingWrapper>\n <div \n id=\"reader-shell\" \n className={ \n classNames(\n isFXL ? \"isFXL\" : \"isReflow\",\n isImmersive ? \"isImmersive\" : \"\",\n isHovering ? \"isHovering\" : \"\",\n isScroll ? \"isScroll\" : \"isPaged\",\n layoutUI,\n breakpoint\n )\n }\n >\n <StatefulReaderHeader layout={ layoutUI } />\n\n { !isScroll \n ? <nav className={ arrowStyles.container } id={ arrowStyles.left }>\n <StatefulReaderArrowButton \n direction=\"left\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationStart } \n onPress={ () => goLeft(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n <article id=\"wrapper\" aria-label={ t(\"reader.app.publicationWrapper\") }>\n <div id=\"container\" ref={ container }></div>\n </article>\n\n { !isScroll \n ? <nav className={ arrowStyles.container } id={ arrowStyles.right }>\n <StatefulReaderArrowButton \n direction=\"right\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationEnd } \n onPress={ () => goRight(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n <StatefulReaderFooter layout={ layoutUI } />\n </div>\n </StatefulDockingWrapper>\n </main>\n </ThPluginProvider>\n </I18nProvider>\n </>\n)};","import * as React from \"react\";\nconst SvgFullscreen = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z\" /></svg>;\nexport default SvgFullscreen;","import * as React from \"react\";\nconst SvgFullscreenExit = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-120v-120H120v-80h200v200h-80Zm400 0v-200h200v80H720v120h-80ZM120-640v-80h120v-120h80v200H120Zm520 0v-200h80v120h120v80H640Z\" /></svg>;\nexport default SvgFullscreenExit;","\"use client\";\n\nimport React from \"react\";\n\nimport { UnstableShortcut, UnstableShortcutRepresentation, buildShortcut, metaKeys } from \"@/core/Helpers/keyboardUtilities\";\n\nimport { Keyboard } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport const UnstableStatefulShortcut = ({\n className,\n rawForm,\n representation,\n joiner\n}: UnstableShortcut) => {\n const RSPrefs = usePreferences();\n const platformModifier = useAppSelector(state => state.reader.platformModifier);\n\n representation = representation ? representation : RSPrefs.shortcuts.representation || UnstableShortcutRepresentation.symbol;\n joiner = joiner ? joiner : RSPrefs.shortcuts.joiner || \" + \";\n\n const shortcutObj = buildShortcut(rawForm);\n\n if (shortcutObj) {\n let shortcutRepresentation = [];\n\n for (const prop in shortcutObj.modifiers) {\n if (shortcutObj.modifiers[prop]) {\n if (prop === \"platformKey\") {\n shortcutRepresentation.push(platformModifier[representation]);\n } else {\n const metaKey = metaKeys[prop];\n shortcutRepresentation.push(metaKey[representation as UnstableShortcutRepresentation]);\n }\n }\n }\n\n if (shortcutObj.char) {\n shortcutRepresentation.push(shortcutObj.char);\n }\n\n if (shortcutRepresentation.length > 0) {\n const displayShortcut = shortcutRepresentation.join(joiner);\n \n return (\n <Keyboard className={ className }>{ displayShortcut }</Keyboard>\n ) \n } else {\n return (\n <></>\n )\n }\n }\n\n return (\n <></>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nimport overflowMenuStyles from \"../assets/styles/overflowMenu.module.css\";\n\nimport { Text } from \"react-aria-components\";\nimport { UnstableStatefulShortcut as StatefulShortcut } from \"./UnstableStatefulShortcut\";\n\nimport { ThMenuItem, ThMenuItemProps } from \"@/core/Components/Menu/ThMenuItem\";\n\nexport interface StatefulOverflowMenuItemProps extends Omit<ThMenuItemProps, \"shortcut\"> {\n shortcut?: string | null\n}\n\nexport const StatefulOverflowMenuItem = ({\n id,\n label,\n SVGIcon,\n shortcut = undefined,\n ...props\n}: StatefulOverflowMenuItemProps) => {\n const menuItemLabelId = `${id}-label`;\n \n return(\n <>\n <ThMenuItem \n id={ id } \n label={ label }\n className={ overflowMenuStyles.menuItem } \n aria-labelledby={ menuItemLabelId } \n { ...props }\n >\n { SVGIcon && <SVGIcon aria-hidden=\"true\" focusable=\"false\" /> }\n <Text \n className={ overflowMenuStyles.menuItemLabel } \n slot=\"label\"\n id={ menuItemLabelId }\n >\n { label }\n </Text>\n { shortcut && <StatefulShortcut\n className={ overflowMenuStyles.menuItemKbdShortcut } \n rawForm={ shortcut } \n /> }\n </ThMenuItem>\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport FullscreenCorners from \"./assets/icons/fullscreen.svg\";\nimport FullscreenExit from \"./assets/icons/fullscreen_exit.svg\";\n\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useFullscreen } from \"@/core/Hooks/useFullscreen\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setFullscreen, setHovering } from \"@/lib/readerReducer\";\nimport { isIOSish } from \"@/core/Helpers/getPlatform\";\n\nexport const StatefulFullscreenTrigger = ({ variant }: StatefulActionTriggerProps) => {\n // Note: Not using React Aria ToggleButton here as fullscreen is quite\n // difficult to control in isolation due to collapsibility + shortcuts\n\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n\n const dispatch = useAppDispatch();\n const onChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n \n const fs = useFullscreen(onChange);\n\n const label = fs.isFullscreen ? t(\"reader.fullscreen.close\") : t(\"reader.fullscreen.trigger\");\n const Icon = fs.isFullscreen ? FullscreenExit : FullscreenCorners;\n\n const handlePress = () => {\n fs.handleFullscreen();\n // Has to be dispatched manually, otherwise stays true… \n dispatch(setHovering(false));\n // TODO: fix hover state on exit, if even possible w/o a lot of getting around…\n };\n\n // Per React doc/principles this isn’t common but FullScreen is quite an edge case cos’ of iPadOS…\n // And Actions is still a work in progress, with opportunities to rewrite/refactor\n // Note we don’t check window.matchMedia(\"(display-mode: standalone)\").matches as this is not a PWA yet\n // And more values here: https://web.dev/learn/pwa/detection\n if (!document.fullscreenEnabled || isIOSish()) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ label }\n SVGIcon={ Icon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].shortcut }\n onAction={ fs.handleFullscreen } \n id={ ThActionsKeys.fullscreen }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.iconCompSm }\n visibility={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].visibility } \n aria-label={ label }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.fullscreen.tooltip\") } \n onPress={ handlePress } \n >\n <Icon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgPinDrop = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M480-301q99-80 149.5-154T680-594q0-90-56-148t-144-58q-88 0-144 58t-56 148q0 65 50.5 139T480-301Zm0 101Q339-304 269.5-402T200-594q0-125 78-205.5T480-880q124 0 202 80.5T760-594q0 94-69.5 192T480-200Zm0-320q33 0 56.5-23.5T560-600q0-33-23.5-56.5T480-680q-33 0-56.5 23.5T400-600q0 33 23.5 56.5T480-520ZM200-80v-80h560v80H200Zm280-520Z\" /></svg>;\nexport default SvgPinDrop;","\"use client\";\n\nimport React from \"react\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport TargetIcon from \"./assets/icons/pin_drop.svg\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setActionOpen, useAppDispatch, useAppSelector } from \"@/lib\";\n\nexport const StatefulJumpToPositionTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.jumpToPosition,\n isOpen: value \n }));\n }\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.jumpToPosition.trigger\") }\n SVGIcon={ TargetIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].shortcut }\n id={ ThActionsKeys.jumpToPosition }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon\n visibility={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].visibility } \n aria-label={ t(\"reader.jumpToPosition.trigger\") }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.jumpToPosition.tooltip\") }\n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TargetIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgDockToRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-80v-560H200v560h120Zm80 0h360v-560H400v560Zm-80 0H200h120Z\" /></svg>;\nexport default SvgDockToRight;","import * as React from \"react\";\nconst SvgDockToLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm440-80h120v-560H640v560Zm-80 0v-560H200v560h360Zm80 0h120-120Z\" /></svg>;\nexport default SvgDockToLeft;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockStart = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const translationKey = isRTL \n ? \"reader.app.docker.dockToRight\" \n : \"reader.app.docker.dockToLeft\";\n const localeKey = {\n trigger: t(`${ translationKey }.trigger`),\n tooltip: t(`${ translationKey }.tooltip`)\n };\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.start;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.start\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DocktoRight : DockToLeft } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.start].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.start }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockEnd = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const translationKey = isRTL \n ? \"reader.app.docker.dockToLeft\" \n : \"reader.app.docker.dockToRight\";\n const localeKey = {\n trigger: t(`${ translationKey }.trigger`),\n tooltip: t(`${ translationKey }.tooltip`)\n };\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.end;\n\n const dispatch = useAppDispatch();\n \n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.end\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DockToLeft : DocktoRight } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.end].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.end }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgStack = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-400v80h-80q-33 0-56.5-23.5T80-400v-400q0-33 23.5-56.5T160-880h400q33 0 56.5 23.5T640-800v80h-80v-80H160v400h80ZM400-80q-33 0-56.5-23.5T320-160v-400q0-33 23.5-56.5T400-640h400q33 0 56.5 23.5T880-560v400q0 33-23.5 56.5T800-80H400Zm0-80h400v-400H400v400Zm200-200Z\" /></svg>;\nexport default SvgStack;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport Stack from \"./assets/icons/stack.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockTransientPopover = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const isDisabled = !actions.isDocked(associatedKey) || actions.whichDocked(associatedKey) === ThDockingKeys.transient;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.transient\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.app.docker.popover.trigger\") }\n SVGIcon={ Stack } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.transient].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.transient }-${ associatedKey }` } \n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ t(\"reader.app.docker.popover.trigger\") }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.app.docker.popover.tooltip\") } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n <Stack aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport { Toolbar } from \"react-aria-components\";\n\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\nimport { StatefulCollapsibleActionsBar } from \"../Actions/StatefulCollapsibleActionsBar\";\n\nimport { StatefulDockStart } from \"./StatefulDockStart\";\nimport { StatefulDockEnd } from \"./StatefulDockEnd\";\nimport { StatefulDockTransientPopover } from \"./StatefulDockTransientPopover\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nconst dockingComponentsMap = {\n [ThDockingKeys.start]: {\n trigger: StatefulDockStart\n },\n [ThDockingKeys.end]: {\n trigger: StatefulDockEnd\n },\n [ThDockingKeys.transient]: {\n trigger: StatefulDockTransientPopover\n }\n}\n\nexport interface StatefulDockerProps {\n id: ActionsStateKeys;\n keys: ThDockingKeys[];\n ref: React.ForwardedRef<HTMLButtonElement>;\n onClose: () => void;\n}\n\nexport const StatefulDocker = ({\n id,\n keys,\n ref,\n onClose\n}: StatefulDockerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n \n const listActionItems = useCallback(() => {\n const actionsItems: ThActionEntry<ThDockingKeys>[] = [];\n\n keys.map((key) => {\n actionsItems.push({\n Trigger: dockingComponentsMap[key].trigger,\n key: key,\n associatedKey: id\n })\n });\n\n return actionsItems;\n }, [keys, id]);\n\n return(\n <>\n <Toolbar className={ dockingStyles.dockerWrapper }>\n <StatefulCollapsibleActionsBar \n id={ `${ id }-docker-overflowMenu` }\n items={ listActionItems() }\n className={ dockingStyles.docker } \n overflowMenuClassName={ readerSharedUI.dockerButton }\n prefs={ RSPrefs.docking }\n aria-label={ t(\"reader.app.docker.wrapper\") }\n />\n\n <ThCloseButton \n ref={ ref }\n className={ readerSharedUI.dockerButton } \n aria-label={ t(\"reader.app.docker.close.trigger\") } \n onPress={ onClose }\n compounds={ {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip\n },\n label: t(\"reader.app.docker.close.tooltip\")\n }}\n />\n </Toolbar>\n </>\n )\n}\n\n","import { useEffect } from \"react\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppSelector } from \"@/lib\";\n\n/** For some unknown reason, React Aria Components’ Popover and Modal Components\n * are breaking scroll on webkit based browsers in version 1.11.0. \n * It is all the more mind-boggling that the hook we are using for \n * the Bottom Sheet don’t seem to be affected by this issue – but it could be forcing\n * a reflow thanks to its animation. \n * \n * NOTE: This is treating the symptoms and is unsustainable in the long run. \n * We have to find the root cause of this issue and fix it, \n * especially as TS-Toolkit already resolves this bug\n * when the resources are loaded into the iframe directly as scroll. \n*/\nexport const useWebkitPatch = (isOpen: boolean) => {\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const {\n getCframes\n } = useEpubNavigator();\n\n useEffect(() => {\n if (isScroll && !isOpen) {\n // We have to force a reflow on the iframe container to fix the issue.\n // Using the infamous Recalc technique (adding a style element with *{}) \n // in the iframe contentDocument does not work.\n const container = document.getElementById(\"container\");\n if (!container) return;\n\n const currentHeight = container.offsetHeight;\n container.style.height = `${ currentHeight - 1 }px`;\n\n // Otherwise Safari will ignore the reflow.\n setTimeout(() => {\n container.style.height = \"\";\n\n // This is where it becomes unsustainable, because we have to \n // force a scroll on the iframe scrolling element so that Safari\n // even renders the content that is below the viewport…\n // We only have access to the iframe scrolling element\n // because we are on the same origin…\n const frame = getCframes()?.[0];\n if (!frame?.window?.document?.scrollingElement) return;\n\n const currentScrollTop = frame.window.document.scrollingElement.scrollTop;\n\n if (currentScrollTop > 1) {\n frame.window.document.scrollingElement.scrollTop = currentScrollTop - 1;\n } else {\n frame.window.document.scrollingElement.scrollTop = currentScrollTop + 1;\n }\n\n frame.window.document.scrollingElement.scrollTop = currentScrollTop;\n }, 0);\n }\n }, [isScroll, isOpen, getCframes]);\n};\n","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { PopoverProps } from \"react-aria-components\";\n\nimport { ThPopover } from \"@/core/Components/Containers/ThPopover\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\n\nimport { useI18n } from \"@/i18n\";\nimport { useWebkitPatch } from \"./hooks/useWebkitPatch\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulPopoverSheetProps extends StatefulSheet {\n placement?: PopoverProps[\"placement\"];\n}\n\nexport const StatefulPopoverSheet = ({ \n id,\n triggerRef,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n placement,\n docker,\n children,\n resetFocus,\n focusWithinRef,\n scrollTopOnFocus,\n dismissEscapeKeyClose\n }: StatefulPopoverSheetProps) => {\n const { t } = useI18n()\n const direction = useAppSelector(state => state.reader.direction);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const popoverHeaderRef = useRef<HTMLDivElement | null>(null);\n const popoverBodyRef = useRef<HTMLDivElement | null>(null);\n const popoverCloseRef = useRef<HTMLButtonElement | null>(null);\n\n // Warning: This is a temporary fix for a bug in React Aria Components.\n useWebkitPatch(!!isOpen);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThPopover \n ref={ popoverRef }\n triggerRef={ triggerRef }\n focusOptions={{\n withinRef: focusWithinRef ?? popoverBodyRef,\n trackedState: isOpen,\n fallbackRef: popoverCloseRef,\n scrollTop: scrollTopOnFocus,\n updateState: resetFocus\n }}\n placement={ placement || \"bottom\" }\n className={ classNames(sheetStyles.popOverSheet , className) }\n isOpen={ isOpen }\n onOpenChange={ onOpenChange } \n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": popoverHeaderRef.current ? `${ popoverHeaderRef.current.clientHeight }px` : undefined\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n >\n <ThContainerHeader \n ref={ popoverHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ t(\"reader.app.back.trigger\") }\n ref={ popoverCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n />\n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ popoverCloseRef }\n onClose={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody\n ref={ popoverBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThPopover>\n </>\n ) \n }\n}","\"use client\";\n\nimport React, { CSSProperties, KeyboardEvent, useCallback, useMemo, useRef } from \"react\";\n\nimport { ThBottomSheetDetent, ThSheetHeaderVariant } from \"@/preferences\";\n\nimport { StatefulSheet } from \"./models/sheets\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { SheetRef } from \"react-modal-sheet\";\n\nimport { ThBottomSheet } from \"@/core/Components/Containers/ThBottomSheet\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulBottomSheetProps extends StatefulSheet {};\n\nexport interface ScrimPref {\n active: boolean;\n override?: string;\n}\n\nconst DEFAULT_SNAPPOINTS = {\n min: 0.3,\n peek: 0.5,\n max: 1\n}\n\nexport const StatefulBottomSheet = ({\n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n scrollTopOnFocus,\n dismissEscapeKeyClose\n}: StatefulBottomSheetProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n()\n const direction = useAppSelector((state) => state.reader.direction);\n const prefersReducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n\n const sheetRef = useRef<SheetRef | null>(null);\n const sheetContainerRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const detent = useRef<ThBottomSheetDetent>(\"full-height\");\n const isDraggable = useRef<boolean>(true);\n\n const snapArray = useMemo(() => {\n // Val is always checked in 0...1 range\n const getSecureVal = (val: number, ref: number) => {\n if (val > ref) {\n return val;\n } else {\n return ((1 - ref) / 2) + ref;\n }\n };\n\n // Array needs max @ index 0 and min @ index 2 when complete\n // If it doesn’t have a max, then peek is @ index 0. This means\n // the initialProp should always be one item from last\n let snapArray: number[] = [];\n\n const snapPref = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped;\n if (snapPref) {\n // We must start with minHeight to see if it’s \n // constrained by a detent as it means\n // the bottom sheet is not draggable.\n // Hence why unshifting into the array instead of pushing\n if (snapPref.minHeight) {\n switch(snapPref.minHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.minHeight === 100 ? \"full-height\" : snapPref.minHeight;\n isDraggable.current = false;\n return [];\n default:\n const minVal = snapPref.minHeight / 100;\n // Protecting against pref > 100\n minVal > 0 && minVal < 1 \n ? snapArray.unshift(minVal) \n : snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n }\n\n // From now on, check if value is greater than the previous one in array\n // If not, use DEFAULT_SNAPPOINTS fallback and check it as well\n // This is to protect from cases that don’t validate min < peek < max\n\n // If peekHeight is constrained by a detent\n // then there is no maxHeight\n if (snapPref.peekHeight) {\n switch(snapPref.peekHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.peekHeight === 100 ? \"full-height\" : snapPref.peekHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const peekVal = snapPref.peekHeight / 100;\n const prevVal = snapArray[0];\n\n peekVal > 0 && peekVal < 1\n ? snapArray.unshift(getSecureVal(peekVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, prevVal))\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, snapArray[0]));\n }\n\n // If max-height is constrained by a content-height detent\n // then it means the bottom sheet can’t be fullscreen\n // Otherwise we can remove the top corners radii\n if (snapPref.maxHeight) {\n switch(snapPref.maxHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.maxHeight === 100 ? \"full-height\" : snapPref.maxHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const maxVal = snapPref.maxHeight / 100;\n const prevVal = snapArray[0];\n\n maxVal > 0 && maxVal < 1 \n ? snapArray.unshift(getSecureVal(maxVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, prevVal));\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, snapArray[0]));\n }\n } else {\n // There is no pref set\n // Reminder: order of React Modal Sheet is descending so max, peek, min\n snapArray.push(DEFAULT_SNAPPOINTS.max, DEFAULT_SNAPPOINTS.peek, DEFAULT_SNAPPOINTS.min);\n }\n\n return snapArray;\n }, [id, RSPrefs]);\n\n const snapIdx = useRef<number | null>(null);\n\n const onDragPressCallback = useCallback(() => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n const nextIdx = snapIdx.current === 0 ? snapArray.length - 1 : (snapIdx.current - 1);\n sheetRef.current?.snapTo(nextIdx);\n }\n }, [snapArray]);\n\n const onDragKeyCallback = useCallback((e: KeyboardEvent) => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n // Implementation is being kept consistent with React Resizable Panels, which\n // implements this logic by default for PanelResizeHandle when focused\n switch(e.code) {\n case \"PageUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(0);\n break;\n case \"ArrowUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(snapIdx.current - 1);\n break;\n case \"PageDown\":\n onClosePress();\n break;\n case \"ArrowDown\":\n if (snapIdx.current === snapArray.length - 1) {\n onClosePress();\n break;\n }\n sheetRef.current?.snapTo(snapIdx.current + 1)\n break;\n default:\n break;\n }\n }\n }, [snapArray, onClosePress]);\n\n const maxWidthPref = useMemo(() => {\n const maxWidth = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.maxWidth;\n if (typeof maxWidth === \"undefined\") {\n return undefined;\n } else if (maxWidth === null) {\n return \"100%\";\n } else {\n return `${ maxWidth }px`;\n }\n }, [id, RSPrefs]);\n\n const scrimPref = useMemo(() => {\n let scrimPref: ScrimPref = {\n active: false,\n override: undefined\n }\n const scrim = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.scrim;\n if (scrim) {\n scrimPref.active = true;\n\n if (typeof scrim === \"string\") {\n scrimPref.override = scrim;\n }\n }\n\n return scrimPref;\n }, [id, RSPrefs]);\n\n const detentClassName = useMemo(() => {\n let className = \"\";\n if (detent.current === \"content-height\") {\n className = sheetStyles.bottomSheetModalContentHeightDetent;\n } else {\n className = sheetStyles.bottomSheetModalFullHeightDetent;\n }\n return className;\n }, [detent]);\n\n const scrimClassName = useMemo(() => {\n return scrimPref.active ? sheetStyles.bottomSheetScrim : \"\";\n }, [scrimPref]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThBottomSheet\n id={ id }\n ref={ sheetRef }\n isOpen={ isOpen }\n focusOptions={{\n withinRef: focusWithinRef ?? bottomSheetBodyRef,\n trackedState: isOpen,\n fallbackRef: bottomSheetCloseRef,\n scrollTop: scrollTopOnFocus,\n updateState: resetFocus\n }}\n onOpenChange={ onOpenChange }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n { ...(snapArray.length > 1 \n ? { \n snapPoints: snapArray, \n initialSnap: snapArray.length - 2,\n detent: detent.current\n } \n : {\n detent: detent.current\n }) \n }\n onSnap={ (index) => { snapIdx.current = index }}\n prefersReducedMotion={ prefersReducedMotion }\n compounds={ {\n container: {\n className: classNames(sheetStyles.bottomSheetModal, detentClassName),\n ref: sheetContainerRef,\n style: {\n maxWidth: maxWidthPref \n } as CSSProperties\n },\n dragIndicator: {\n className: sheetStyles.dragIndicator,\n onPress: onDragPressCallback,\n onKeyDown: onDragKeyCallback\n },\n content: {\n className: classNames(sheetStyles.bottomSheet, className),\n disableDrag: true\n },\n scroller: {\n className: classNames(sheetStyles.bottomSheetScroller, sheetStyles.sheetBody),\n draggable: false\n },\n backdrop: {\n className: classNames(sheetStyles.bottomSheetBackdrop, scrimClassName),\n style: { \"--defaults-scrim\": scrimPref.override }\n }\n } }\n >\n <ThContainerHeader\n label={ heading }\n className={ sheetStyles.bottomSheetHeader }\n compounds={ {\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ t(\"reader.app.back.trigger\") }\n ref={ bottomSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n /> \n : <ThCloseButton\n ref={ bottomSheetCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ t(\"reader.app.docker.close.trigger\") } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ bottomSheetBodyRef }\n >\n { children }\n </ThContainerBody>\n </ThBottomSheet>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThModal } from \"@/core/Components/Containers/ThModal\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { useI18n } from \"@/i18n\";\nimport { useWebkitPatch } from \"./hooks/useWebkitPatch\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulFullScreenSheetProps extends StatefulSheet {};\n\nexport const StatefulFullScreenSheet = ({\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n scrollTopOnFocus,\n dismissEscapeKeyClose\n }: StatefulFullScreenSheetProps) => {\n const { t } = useI18n()\n const direction = useAppSelector(state => state.reader.direction);\n const fullScreenHeaderRef = useRef<HTMLDivElement | null>(null);\n const fullScreenBodyRef = useRef<HTMLDivElement | null>(null);\n const fullScreenCloseRef = useRef<HTMLButtonElement | null>(null);\n\n // Warning: This is a temporary fix for a bug in React Aria Components.\n useWebkitPatch(!!isOpen);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThModal \n ref={ fullScreenBodyRef }\n focusOptions={{\n withinRef: focusWithinRef ?? fullScreenBodyRef,\n trackedState: isOpen,\n fallbackRef: fullScreenCloseRef,\n scrollTop: scrollTopOnFocus,\n updateState: resetFocus\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n isOpen={ isOpen }\n onOpenChange={ onOpenChange }\n isDismissable={ true }\n className={ classNames(sheetStyles.fullScreenSheet, className) }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": fullScreenHeaderRef.current ? `${ fullScreenHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ fullScreenHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous\n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ t(\"reader.app.back.trigger\") }\n ref={ fullScreenCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n />\n : <ThCloseButton\n ref={ fullScreenCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ t(\"reader.app.docker.close.trigger\") } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ fullScreenBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThModal>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThDockingKeys, ThSheetHeaderVariant, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockedPanel } from \"@/core/Components/Containers/ThDockedPanel\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { useI18n } from \"@/i18n\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulDockedSheetProps extends StatefulSheet {\n flow: ThDockingKeys.start | ThDockingKeys.end | null;\n}\n\nexport const StatefulDockedSheet = ({ \n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onClosePress,\n docker, \n flow,\n children,\n resetFocus,\n focusWithinRef,\n scrollTopOnFocus\n }: StatefulDockedSheetProps) => {\n const { t } = useI18n()\n const dockPortal = flow && document.getElementById(flow);\n const dockedSheetHeaderRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetLeftBorder : sheetStyles.dockedSheetRightBorder;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetRightBorder : sheetStyles.dockedSheetLeftBorder;\n }\n }, [flow, direction]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThDockedPanel\n isOpen={ isOpen }\n portal={ dockPortal }\n focusOptions={ {\n withinRef: focusWithinRef ?? dockedSheetBodyRef, \n trackedState: isOpen, \n fallbackRef: dockedSheetCloseRef,\n autoFocus: true,\n scrollTop: scrollTopOnFocus,\n updateState: resetFocus\n }}\n className={ classNames(sheetStyles.dockedSheet, className, classFromFlow()) }\n style={{\n \"--sheet-sticky-header\": dockedSheetHeaderRef.current ? `${ dockedSheetHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ dockedSheetHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" } \n label={ t(\"reader.app.back.trigger\") }\n ref={ dockedSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ t(\"reader.app.back.trigger\") }\n onPress={ onClosePress }\n /> \n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ dockedSheetCloseRef }\n onClose={ onClosePress }\n />\n } \n </ThContainerHeader>\n <ThContainerBody \n ref={ dockedSheetBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThDockedPanel>\n </>\n )\n }\n}","\"use client\";\n\nimport { ReactNode } from \"react\";\n\nimport { ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { ThTypedComponentRenderer } from \"@/core/Components/Containers/ThTypedComponentRenderer\";\nimport { StatefulPopoverSheet, StatefulPopoverSheetProps } from \"./StatefulPopoverSheet\";\nimport { StatefulBottomSheet, StatefulBottomSheetProps } from \"./StatefulBottomSheet\";\nimport { StatefulFullScreenSheet, StatefulFullScreenSheetProps } from \"./StatefulFullScreenSheet\";\nimport { StatefulDockedSheet, StatefulDockedSheetProps } from \"./StatefulDockedSheet\";\n\nconst componentMap = {\n [ThSheetTypes.popover]: StatefulPopoverSheet,\n [ThSheetTypes.bottomSheet]: StatefulBottomSheet,\n [ThSheetTypes.fullscreen]: StatefulFullScreenSheet,\n [ThSheetTypes.dockedStart]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.start } />,\n [ThSheetTypes.dockedEnd]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.end } />\n};\n\nexport const StatefulSheetWrapper = ({\n sheetType,\n sheetProps,\n children\n}: {\n sheetType: ThSheetTypes,\n sheetProps: StatefulPopoverSheetProps | StatefulFullScreenSheetProps | StatefulDockedSheetProps | StatefulBottomSheetProps,\n children: ReactNode\n}) => {\n\n return (\n <ThTypedComponentRenderer\n type={ sheetType }\n componentMap={ componentMap }\n props={ sheetProps }\n >\n { children }\n </ThTypedComponentRenderer>\n );\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { BreakpointsMap } from \"@/core/Hooks/useBreakpoints\";\nimport { ThDockingTypes, ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport { dockAction, setActionOpen } from \"@/lib/actionsReducer\";\n\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nlet dockingMap: Required<BreakpointsMap<ThDockingTypes>> | null = null;\n\nexport const useDocking = <T extends string>(key: T) => {\n const RSPrefs = usePreferences();\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actionState = actionsMap[key];\n const dispatch = useAppDispatch();\n\n const actions = useActions(actionsMap);\n\n if (!dockingMap) {\n dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none \n });\n }\n const currentDockConfig = breakpoint && dockingMap[breakpoint];\n \n // Use type assertion to tell TypeScript that the key is valid\n const dockablePref = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.docked?.dockable || ThDockingTypes.none;\n \n const defaultSheet = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover;\n \n const sheetMap = makeBreakpointsMap<ThSheetTypes>({\n defaultValue: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover,\n fromEnum: ThSheetTypes,\n pref: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.breakpoints\n });\n const sheetPref = breakpoint && sheetMap[breakpoint] || defaultSheet;\n\n const [sheetType, setSheetType] = useState<ThSheetTypes>(defaultSheet);\n const previousSheetType = usePrevious(sheetType);\n\n // Checks whether the action can be docked: its pref should match the docking pref\n const canBeDocked = useCallback((slot: ThDockingTypes.start | ThDockingTypes.end) => {\n return (currentDockConfig === slot || currentDockConfig === ThDockingTypes.both) \n && (dockablePref === slot || dockablePref === ThDockingTypes.both);\n }, [currentDockConfig, dockablePref]);\n\n // Checks whether the sheet pref is of Dock type \n const isDockedSheetPref = useCallback((type?: ThSheetTypes.dockedStart | ThSheetTypes.dockedEnd) => {\n if (type) {\n return sheetPref === type;\n } else {\n return sheetPref === ThSheetTypes.dockedStart || sheetPref === ThSheetTypes.dockedEnd\n }\n }, [sheetPref]);\n \n // Builds the docker for the action based on all preferences\n const getDocker = useCallback((): ThDockingKeys[] => {\n // First let’s handle the cases where docker shouldn’t be used\n // The sheet is not dockable, per key.docked.dockable pref\n if (dockablePref === ThDockingTypes.none) return [];\n // There’s no docking slot available, per docking.dock pref\n if (currentDockConfig === ThDockingTypes.none) return [];\n // The sheet type is not compatible with docking\n if (sheetPref === ThSheetTypes.fullscreen || sheetPref === ThSheetTypes.bottomSheet) return [];\n\n // We can now build the docker from the display order\n let dockerKeys: ThDockingKeys[] = [];\n // In order for an action to be dockable, the dock slot has to exist\n // and the dockable preference of key.docked should match the values\n RSPrefs.docking.displayOrder.forEach((dockingKey: ThDockingKeys) => {\n switch(dockingKey) {\n case ThDockingKeys.transient:\n // We already handled both cases for none \n dockerKeys.push(dockingKey);\n break;\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n dockerKeys.push(dockingKey);\n }\n break;\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n dockerKeys.push(dockingKey);\n }\n break;\n default:\n break;\n }\n });\n\n // If the action can only be transient, then it can’t be docked\n if (dockerKeys.length === 1 && dockerKeys[0] === ThDockingKeys.transient) return [];\n\n return dockerKeys;\n }, [RSPrefs.docking.displayOrder, currentDockConfig, sheetPref, dockablePref, canBeDocked]);\n\n const getSheetType = useCallback(() => {\n // First check the dockable pref is none to return early\n if (dockablePref === ThDockingTypes.none) {\n // Sheet is of docked type, we return the default\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n // Sheet pref is not of docked type, we can return it\n return sheetPref;\n }\n };\n\n // We now need to check whether the user has docked the action themselves\n // ActionsReducer should has made sure there is no conflict to handle here \n // by updating states of actions on docking\n switch (actionState?.docking) {\n \n // if action.docking is transient we need to check the pref, \n // it can be docked and in that case we need to pick the default\n case ThDockingKeys.transient:\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n return sheetPref;\n }\n \n // If action.docking is set to start/end then we check the docking slot is available\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n // if the pref is not docked start, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedStart)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n // if the pref is not docked end, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n \n // If action.docking is null or undefined then we rely on pref \n // as it means the user did not pick another option\n case null:\n case undefined:\n // We have to check sheetPref is compatible with docking prefs\n if (isDockedSheetPref(ThSheetTypes.dockedStart)) {\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n return defaultSheet;\n }\n } else if (isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n return defaultSheet;\n }\n } else {\n return sheetPref;\n }\n default:\n return defaultSheet;\n }\n }, [dockablePref, sheetPref, defaultSheet, actionState?.docking, canBeDocked, isDockedSheetPref]);\n\n // When docking or breakpoints-related prefs change, get the correct sheet type\n useEffect(() => {\n setSheetType(getSheetType());\n }, [sheetPref, currentDockConfig, actionState?.docking, getSheetType]);\n\n // Dismiss/Close when sheetType has changed from docked to transient\n useEffect(() => {\n // This was not dismissed on breakpoint change, but by the user\n if (actionState?.docking === ThDockingKeys.transient) return;\n\n if (sheetType !== ThSheetTypes.dockedStart && sheetType !== ThSheetTypes.dockedEnd) {\n if (previousSheetType === ThSheetTypes.dockedStart || previousSheetType === ThSheetTypes.dockedEnd) {\n dispatch(setActionOpen({\n key: key,\n isOpen: false\n }));\n }\n }\n }, [dispatch, key, sheetType, previousSheetType, actionState?.docking]);\n\n // on mount, check whether we should update states for docked sheets from pref\n useEffect(() => {\n if (actionState?.isOpen == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n }\n }\n });\n\n // Edge case where the sheet has been opened/closed and\n // is of dockable type, but the dock panel is not populated\n // e.g. action was mounted as a different type of sheet (breakpoint),\n // and opened/closed. If the user resizes the window (another breakpoint) \n // but we don’t dispatch docking, then it can’t be displayed \n // since the docking slot has never been populated.\n useEffect(() => {\n // Action has been opened/closed by user\n // but it’s not been manually docked, \n // which means the pref is used but \n // has not be instantiated yet, and \n // couldn’t be on first mount because\n // a different type was used in prefs\n if (actionState?.isOpen != null && actionState?.docking == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.start) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n }\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.end) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n }\n }\n }\n }, [dispatch, key, sheetType, actionState?.isOpen, actionState?.docking, actions]);\n\n return {\n getDocker,\n sheetType\n }\n}","\"use client\";\n\nimport React, { FormEvent, useCallback, useEffect, useState } from \"react\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport jumpToPositionStyles from \"./assets/styles/jumpToPosition.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThForm } from \"@/core/Components/Form/ThForm\";\nimport { ThFormNumberField } from \"@/core/Components/Form/Fields/ThFormNumberField\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulJumpToPositionContainer = ({ \n triggerRef \n}: StatefulActionContainerProps) => {\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n\n // TODO: Update. We don’t have a timeline yet, so we use the progression we already have\n const positionNumbers = useAppSelector(state => state.publication.progression.currentPositions);\n\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n const dispatch = useAppDispatch();\n\n const docking = useDocking(ThActionsKeys.jumpToPosition);\n const sheetType = docking.sheetType;\n\n const { go } = useEpubNavigator();\n\n // Component has to handle updates locally since EpubNavigator updates positions, \n // so we use these as an intermediary\n const [position, setPosition] = useState(0);\n\n // Position Numbers can be a range so we must check position is in range\n // And not only that the array simply includes the position\n const positionInRange = useCallback(() => {\n if (!positionNumbers) return false;\n return positionNumbers.length === 2\n ? position >= positionNumbers[0] && position <= positionNumbers[1]\n : position === positionNumbers[0];\n }, [position, positionNumbers]);\n\n // Update the label to use react-i18next interpolation\n const label = t(\"reader.jumpToPosition.label\", { positionStart: 1, positionEnd: positionsList.length });\n\n const setOpen = useCallback((value: boolean) => {\n dispatch(setActionOpen({\n key: ThActionsKeys.jumpToPosition,\n isOpen: value\n }));\n }, [dispatch]);\n\n // NumberField onChange won’t fire if the value has been typed\n // so we need to handle the input manually\n const handleInput = useCallback((e: FormEvent<HTMLInputElement>) => {\n const target = e.target as HTMLInputElement;\n setPosition(parseInt(target.value));\n }, []);\n\n // This is a form submit handler so we have to preventDefault\n // We have to use this otherwise any change will trigger a navigation\n const handleAction = useCallback((e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (!positionsList) return;\n\n const item = positionsList.find(item => item.locations.position === position);\n\n if (!item || positionInRange()) return setOpen(false);\n\n go(item, !reducedMotion, () => setOpen(false));\n }, [position, positionsList, reducedMotion, positionInRange, go, setOpen]);\n\n // Since we are using an intermediary local state, we must keep track when positionNumbers changes\n useEffect(() => {\n positionNumbers && setPosition(positionNumbers[0]);\n }, [positionNumbers]);\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return (\n <>\n <StatefulSheetWrapper\n sheetType={sheetType}\n sheetProps={{\n id: ThActionsKeys.jumpToPosition,\n triggerRef: triggerRef,\n heading: t(\"reader.jumpToPosition.heading\"),\n className: jumpToPositionStyles.jumpToPosition,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker()\n }}\n >\n <ThForm\n label={ t(\"reader.jumpToPosition.go\") }\n className={ jumpToPositionStyles.jumpToPositionForm }\n onSubmit={ handleAction }\n compounds={{\n button: {\n className: jumpToPositionStyles.jumpToPositionButton,\n isDisabled: !position || positionInRange()\n }\n }}\n >\n <ThFormNumberField\n label={ label }\n name=\"jumpToPosition\"\n className={ jumpToPositionStyles.jumpToPositionNumberField }\n onChange={ setPosition }\n onInput={ handleInput }\n value={ position }\n minValue={ 1 }\n maxValue={ positionsList.length }\n step={ 1 }\n formatOptions={{ style: \"decimal\" }}\n isWheelDisabled={ true }\n compounds={{\n label: {\n className: jumpToPositionStyles.jumpToPositionLabel\n },\n input: {\n className: jumpToPositionStyles.jumpToPositionInput,\n inputMode: \"numeric\"\n }\n }}\n />\n </ThForm>\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgMatchCase = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"m131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z\" /></svg>;\nexport default SvgMatchCase;","\"use client\";\n\nimport TuneIcon from \"./assets/icons/match_case.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.settings.trigger\") }\n SVGIcon={ TuneIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.settings].shortcut } \n id={ ThActionsKeys.settings }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.settings].visibility }\n aria-label={ t(\"reader.settings.trigger\") }\n placement=\"bottom\" \n tooltipLabel={ t(\"reader.settings.tooltip\") } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TuneIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n usePreferenceKeys\n} from \"@/preferences\";\n\nimport { \n ThActionsKeys, \n ThSettingsContainerKeys, \n ThSheetHeaderVariant\n} from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\n\nimport { StatefulSpacingGroupContainer } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextGroupContainer } from \"../../Epub/Settings/StatefulTextGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"@/components/Plugins/PluginProvider\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { setHovering, setSettingsContainer } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsContainer = ({ \n triggerRef\n}: StatefulActionContainerProps) => {\n const { \n fxlSettingsKeys, \n mainSpacingSettingsKeys,\n mainTextSettingsKeys,\n reflowSettingsKeys,\n subPanelSpacingSettingsKeys,\n subPanelTextSettingsKeys,\n } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const { settingsComponentsMap } = usePlugins();\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const contains = useAppSelector(state => state.reader.settingsContainer);\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const settingItems = useMemo(() => {\n return isFXL ? fxlSettingsKeys : reflowSettingsKeys\n }, [isFXL, fxlSettingsKeys, reflowSettingsKeys]);\n \n const docking = useDocking(ThActionsKeys.settings);\n const sheetType = docking.sheetType;\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n const setInitial = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }, [dispatch]);\n\n const isTextNested = useCallback((key: string) => {\n const textSettings = [\n mainTextSettingsKeys || defaultTextSettingsMain,\n subPanelTextSettingsKeys || defaultTextSettingsSubpanel,\n ].flat() as string[];\n \n return textSettings.includes(key);\n }, [mainTextSettingsKeys, subPanelTextSettingsKeys]);\n \n const isSpacingNested = useCallback((key: string) => {\n const spacingSettings = [\n mainSpacingSettingsKeys || defaultSpacingSettingsMain,\n subPanelSpacingSettingsKeys || defaultSpacingSettingsSubpanel,\n ].flat() as string[];\n \n return spacingSettings.includes(key);\n }, [mainSpacingSettingsKeys, subPanelSpacingSettingsKeys]);\n\n const renderSettings = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return <StatefulTextGroupContainer />;\n \n case ThSettingsContainerKeys.spacing:\n return <StatefulSpacingGroupContainer />;\n\n case ThSettingsContainerKeys.initial:\n default:\n return (\n <>\n { settingItems.length > 0 && settingsComponentsMap \n ? settingItems\n .filter((key) => !(isTextNested(key) || isSpacingNested(key)))\n .map((key) => {\n const match = settingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } { ...match.props } />;\n })\n : <></>\n }\n </>\n );\n }\n }, [settingsComponentsMap, contains, settingItems, isTextNested, isSpacingNested]);\n\n const getHeading = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return t(\"reader.settings.text.title\");\n\n case ThSettingsContainerKeys.spacing:\n return t(\"reader.settings.spacing.title\");\n\n case ThSettingsContainerKeys.initial:\n default:\n return t(\"reader.settings.heading\");\n }\n }, [contains, t]);\n\n const getHeaderVariant = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return RSPrefs.settings.text?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.spacing:\n return RSPrefs.settings.spacing?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.initial:\n default:\n return ThSheetHeaderVariant.close;\n }\n }, [contains, RSPrefs.settings.spacing, RSPrefs.settings.text]);\n\nuseEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && contains !== ThSettingsContainerKeys.initial) {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n}, [contains, dispatch]);\n\n\n // Reset when closed\n useEffect(() => {\n if (!actionState?.isOpen) setInitial();\n }, [actionState?.isOpen, setInitial]);\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.settings,\n triggerRef: triggerRef,\n heading: getHeading(),\n headerVariant: getHeaderVariant(),\n className: settingsStyles.readerSettings,\n placement: \"bottom\", \n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen, \n onClosePress: () => { contains === ThSettingsContainerKeys.initial ? setOpen(false) : setInitial() },\n docker: docking.getDocker(),\n resetFocus: contains,\n scrollTopOnFocus: true,\n dismissEscapeKeyClose: contains !== ThSettingsContainerKeys.initial\n } }\n >\n { renderSettings() }\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgToc = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-280v-80h560v80H120Zm0-160v-80h560v80H120Zm0-160v-80h560v80H120Zm680 320q-17 0-28.5-11.5T760-320q0-17 11.5-28.5T800-360q17 0 28.5 11.5T840-320q0 17-11.5 28.5T800-280Zm0-160q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520q17 0 28.5 11.5T840-480q0 17-11.5 28.5T800-440Zm0-160q-17 0-28.5-11.5T760-640q0-17 11.5-28.5T800-680q17 0 28.5 11.5T840-640q0 17-11.5 28.5T800-600Z\" /></svg>;\nexport default SvgToc;","\"use client\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport TocIcon from \"./assets/icons/toc.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulTocTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const { t } = useI18n();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ t(\"reader.toc.trigger\") }\n SVGIcon={ TocIcon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.toc].shortcut }\n id={ ThActionsKeys.toc }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.toc].visibility }\n aria-label={ t(\"reader.toc.trigger\") } \n placement=\"bottom\"\n tooltipLabel={ t(\"reader.toc.tooltip\") } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TocIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" /></svg>;\nexport default SvgChevronRight;","\"use client\";\n\nimport React, { CSSProperties, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { Link } from \"@readium/shared\";\nimport { ThActionsKeys, ThDockingKeys, ThSheetTypes, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\nimport { TocItem } from \"@/core/Hooks/useTimeline\";\n\nimport tocStyles from \"./assets/styles/toc.module.css\";\n\nimport Chevron from \"./assets/icons/chevron_right.svg\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThFormSearchField } from \"@/core/Components\";\nimport { Button, Collection, Key, Selection, useFilter } from \"react-aria-components\";\nimport {\n Tree,\n TreeItem,\n TreeItemContent\n} from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { useI18n } from \"@/i18n/useI18n\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTocEntry } from \"@/lib/publicationReducer\";\nimport { setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\nexport const StatefulTocContainer = ({ triggerRef }: StatefulActionContainerProps) => {\n const { t } = useI18n();\n\n const treeRef = useRef<HTMLDivElement>(null);\n const [expandedKeys, setExpandedKeys] = useState<Set<Key>>(new Set());\n\n const unstableTimeline = useAppSelector(state => state.publication.unstableTimeline);\n const tocEntry = unstableTimeline?.toc?.currentEntry;\n const tocTree = unstableTimeline?.toc?.tree;\n\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const dispatch = useAppDispatch();\n\n const { goLink } = useEpubNavigator();\n\n const docking = useDocking(ThActionsKeys.toc);\n const sheetType = docking.sheetType;\n\n const { contains } = useFilter({ sensitivity: \"base\" });\n const [filterValue, setFilterValue] = React.useState(\"\");\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n const filterTocTree = (items: TocItem[], filterValue: string): TocItem[] => {\n if (!filterValue) {\n return items;\n }\n\n const recursiveFilter = (items: TocItem[]): TocItem[] => {\n return items.reduce((acc: TocItem[], item: TocItem) => {\n if (item.title && contains(item.title, filterValue)) {\n acc.push({ ...item, children: undefined });\n }\n if (item.children) {\n acc.push(...recursiveFilter(item.children));\n }\n return acc;\n }, []);\n };\n\n const result = recursiveFilter(items);\n return result.map((item: TocItem, index: number) => ({ ...item, key: `${item.id}-${index}` }));\n };\n\n const displayedTocTree = filterTocTree(tocTree || [], filterValue);\n\n const setOpen = useCallback((value: boolean) => {\n if (!value) setFilterValue(\"\");\n\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }, [dispatch, setFilterValue]);\n\n const handleAction = (keys: Selection) => {\n if (keys === \"all\" || !keys || keys.size === 0) return;\n\n const key = [...keys][0];\n \n const el = document.querySelector(`[data-key=${key}]`);\n const href = el?.getAttribute(\"data-href\");\n\n if (!href) return;\n\n const link: Link = new Link({ href: href });\n\n const cb = actionState?.isOpen && \n (sheetType === ThSheetTypes.dockedStart || sheetType === ThSheetTypes.dockedEnd)\n ? () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n } \n : () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n setOpen(false);\n }\n\n goLink(link, true, cb);\n };\n\n // Since React Aria components intercept keys and do not continue propagation\n // we have to handle the escape key in capture phase\n useEffect(() => {\n if (actionState?.isOpen && (!actionState?.docking || actionState?.docking === ThDockingKeys.transient)) { \n const handleEscape = (event: KeyboardEvent) => {\n if ((!isActiveElement(searchInputRef.current) && !filterValue) && event.key === \"Escape\" ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n }\n }, [actionState, setOpen, filterValue]);\n\n // Update expanded keys when tocEntry changes\n useEffect(() => {\n if (tocEntry && tocTree) {\n setExpandedKeys(prevExpandedKeys => {\n // Start with the current expanded keys to preserve existing state\n const newExpandedKeys = new Set<Key>(prevExpandedKeys);\n let hasUpdates = false;\n \n // Helper function to find and expand parent items of the current entry\n const updateExpanded = (items: TocItem[]): boolean => {\n return items.some(item => {\n if (item.id === tocEntry) return true;\n if (item.children) {\n const hasChild = updateExpanded(item.children);\n if (hasChild && !newExpandedKeys.has(item.id)) {\n newExpandedKeys.add(item.id);\n hasUpdates = true;\n }\n return hasChild;\n }\n return false;\n });\n };\n \n // Only update state if we actually need to expand anything\n updateExpanded(tocTree);\n return hasUpdates ? newExpandedKeys : prevExpandedKeys;\n });\n }\n }, [tocEntry, tocTree]);\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.toc,\n triggerRef: triggerRef, \n heading: t(\"reader.toc.heading\"),\n className: tocStyles.toc,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker(),\n resetFocus: tocEntry,\n focusWithinRef: treeRef\n } }\n >\n { tocTree && tocTree.length > 0 \n ? (<>\n <ThFormSearchField\n aria-label={ t(\"reader.toc.search.label\") }\n value={ filterValue }\n onChange={ setFilterValue }\n onClear={ () => setFilterValue(\"\") }\n className={ tocStyles.tocSearch }\n compounds={{\n label: {\n className: tocStyles.tocSearchLabel\n },\n input: {\n ref: searchInputRef,\n className: tocStyles.tocSearchInput,\n placeholder: t(\"reader.toc.search.placeholder\")\n },\n searchIcon: {\n className: tocStyles.tocSearchIcon,\n hidden: !!filterValue\n },\n clearButton: {\n className: tocStyles.tocClearButton,\n isDisabled: !filterValue\n }\n }}\n />\n <Tree\n ref={ treeRef }\n aria-label={ t(\"reader.toc.entries\") }\n selectionMode=\"single\"\n items={ displayedTocTree }\n className={ tocStyles.tocTree }\n onSelectionChange={ handleAction }\n selectedKeys={ tocEntry ? [tocEntry] : [] }\n expandedKeys={ expandedKeys }\n onExpandedChange={ setExpandedKeys }\n >\n { function renderItem(item) {\n return (\n <TreeItem\n data-href={ item.href }\n className={ tocStyles.tocTreeItem }\n textValue={ item.title || \"\" }\n >\n <TreeItemContent>\n {item.children && (\n <Button\n slot=\"chevron\"\n className={tocStyles.tocTreeItemButton}\n style={{ transform: isRTL ? \"scaleX(-1)\" : \"none\" } as CSSProperties}\n >\n <Chevron aria-hidden=\"true\" focusable=\"false\" />\n </Button>\n )}\n <div className={ tocStyles.tocTreeItemText }>\n <div className={ tocStyles.tocTreeItemTextTitle }>{ item.title }</div>\n { item.position && <div className={ tocStyles.tocTreeItemTextPosition }>{ item.position }</div> }\n </div>\n </TreeItemContent>\n <Collection items={ item.children }>\n { renderItem }\n </Collection>\n </TreeItem>\n );\n } }\n </Tree>\n </>) \n : <div className={ tocStyles.empty }>{ t(\"reader.toc.empty\") }</div>\n }\n </StatefulSheetWrapper>\n </>\n )\n}","import { ThPlugin } from \"../PluginRegistry\";\nimport { ThActionsKeys, ThSettingsKeys } from \"@/preferences/models/enums\";\n\nimport { StatefulFullscreenTrigger } from \"../../Actions/Fullscreen/StatefulFullscreenTrigger\";\nimport { StatefulJumpToPositionTrigger } from \"../../Actions/JumpToPosition/StatefulJumpToPositionTrigger\";\nimport { StatefulJumpToPositionContainer } from \"../../Actions/JumpToPosition/StatefulJumpToPositionContainer\";\nimport { StatefulSettingsTrigger } from \"../../Actions/Settings/StatefulSettingsTrigger\";\nimport { StatefulSettingsContainer } from \"../../Actions/Settings/StatefulSettingsContainer\";\nimport { StatefulTocTrigger } from \"../../Actions/Toc/StatefulTocTrigger\";\nimport { StatefulTocContainer } from \"../../Actions/Toc/StatefulTocContainer\";\n\nimport { StatefulColumns } from \"../../Epub/Settings/StatefulColumns\";\nimport { StatefulFontFamily } from \"../../Epub/Settings/StatefulFontFamily\";\nimport { StatefulFontWeight } from \"../../Epub/Settings/StatefulFontWeight\";\nimport { StatefulHyphens } from \"../../Epub/Settings/StatefulHyphens\";\nimport { StatefulLayout } from \"../../Epub/Settings/StatefulLayout\";\nimport { StatefulLetterSpacing } from \"../../Epub/Settings/StatefulLetterSpacing\";\nimport { StatefulLineHeight } from \"../../Epub/Settings/StatefulLineHeight\";\nimport { StatefulParagraphIndent } from \"../../Epub/Settings/StatefulParagraphIndent\";\nimport { StatefulParagraphSpacing } from \"../../Epub/Settings/StatefulParagraphSpacing\";\nimport { StatefulPublisherStyles } from \"../../Epub/Settings/StatefulPublisherStyles\";\nimport { StatefulSpacingGroup } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextAlign } from \"../../Epub/Settings/StatefulTextAlign\";\nimport { StatefulTextGroup } from \"../../Epub/Settings/StatefulTextGroup\";\nimport { StatefulTextNormalize } from \"../../Epub/Settings/StatefulTextNormalize\";\nimport { StatefulTheme } from \"../../Epub/Settings/StatefulTheme\";\nimport { StatefulWordSpacing } from \"../../Epub/Settings/StatefulWordSpacing\";\nimport { StatefulZoom } from \"../../Epub/Settings/StatefulZoom\";\n\nexport const createDefaultPlugin = (): ThPlugin => {\n return {\n id: \"core\",\n name: \"Core Components\",\n description: \"Default components for Thorium Web StatefulReader\",\n version: \"1.0.0\",\n components: {\n actions: {\n [ThActionsKeys.fullscreen]: {\n Trigger: StatefulFullscreenTrigger\n },\n [ThActionsKeys.jumpToPosition]: {\n Trigger: StatefulJumpToPositionTrigger,\n Target: StatefulJumpToPositionContainer\n },\n [ThActionsKeys.settings]: {\n Trigger: StatefulSettingsTrigger,\n Target: StatefulSettingsContainer\n },\n [ThActionsKeys.toc]: {\n Trigger: StatefulTocTrigger,\n Target: StatefulTocContainer\n }\n },\n settings: {\n [ThSettingsKeys.columns]: {\n Comp: StatefulColumns\n },\n [ThSettingsKeys.fontFamily]: {\n Comp: StatefulFontFamily,\n type: \"text\"\n },\n [ThSettingsKeys.fontWeight]: {\n Comp: StatefulFontWeight,\n type: \"text\"\n },\n [ThSettingsKeys.hyphens]: {\n Comp: StatefulHyphens,\n type: \"text\"\n },\n [ThSettingsKeys.layout]: {\n Comp: StatefulLayout\n },\n [ThSettingsKeys.letterSpacing]: {\n Comp: StatefulLetterSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.lineHeight]: {\n Comp: StatefulLineHeight,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphIndent]: {\n Comp: StatefulParagraphIndent,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphSpacing]: {\n Comp: StatefulParagraphSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.publisherStyles]: {\n Comp: StatefulPublisherStyles,\n type: \"spacing\"\n },\n [ThSettingsKeys.spacingGroup]: {\n Comp: StatefulSpacingGroup,\n },\n [ThSettingsKeys.textAlign]: {\n Comp: StatefulTextAlign,\n type: \"text\"\n },\n [ThSettingsKeys.textGroup]: {\n Comp: StatefulTextGroup\n },\n [ThSettingsKeys.textNormalize]: {\n Comp: StatefulTextNormalize,\n type: \"text\"\n },\n [ThSettingsKeys.theme]: {\n Comp: StatefulTheme,\n props: {\n mapArrowNav: 2\n }\n },\n [ThSettingsKeys.wordSpacing]: {\n Comp: StatefulWordSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.zoom]: {\n Comp: StatefulZoom\n }\n }\n }\n };\n};","// Peripherals based on XBReader\nimport { ThActionsPref } from \"@/preferences\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport { buildShortcut, UnstablePShortcut } from \"@/core/Helpers/keyboardUtilities\";\nimport { isInteractiveElement } from \"@/core/Helpers/focusUtilities\";\n\nimport { useAppStore } from \"@/lib/hooks\";\n\nexport interface PCallbacks {\n moveTo: (direction: \"left\" | \"right\" | \"up\" | \"down\" | \"home\" | \"end\") => void;\n goProgression: (shiftKey?: boolean) => void;\n toggleAction: (action: ThActionsKeys) => void;\n}\n\nexport interface PShortcuts {\n [key: string]: {\n actionKey: ThActionsKeys;\n modifiers: UnstablePShortcut[\"modifiers\"];\n }\n}\n\nexport default class Peripherals {\n private readonly observers = [\"keydown\"];\n private targets: EventTarget[] = [];\n private readonly callbacks: PCallbacks;\n private readonly store: ReturnType<typeof useAppStore>;\n private readonly actionsPref: ThActionsPref<ThActionsKeys> | undefined;\n private readonly shortcuts: PShortcuts;\n\n constructor(store: ReturnType<typeof useAppStore>, actionsPref: ThActionsPref<ThActionsKeys> | undefined, callbacks: PCallbacks) {\n this.observers.forEach((method) => {\n (this as any)[\"on\" + method] = (this as any)[\"on\" + method].bind(this);\n });\n this.store = store;\n this.actionsPref = actionsPref;\n this.callbacks = callbacks;\n this.shortcuts = this.retrieveShortcuts();\n }\n\n private getPlatformModifier(): \"ctrlKey\" | \"metaKey\" {\n return this.store.getState().reader.platformModifier.modifier;\n }\n\n private retrieveShortcuts() {\n if (!this.actionsPref) return {};\n\n const shortcutsObj: PShortcuts = {};\n\n const displayOrder = this.store.getState().publication.isFXL\n ? this.actionsPref.fxlOrder\n : this.actionsPref.reflowOrder;\n\n for (const actionKey of displayOrder) {\n const shortcutString = this.actionsPref.keys[actionKey as keyof typeof ThActionsKeys].shortcut;\n \n if (shortcutString) {\n const shortcutObj = buildShortcut(shortcutString);\n\n if (shortcutObj?.key) {\n Object.defineProperty(shortcutsObj, shortcutObj.key, {\n value: {\n actionKey: actionKey,\n modifiers: shortcutObj.modifiers\n },\n writable: false,\n enumerable: true\n });\n }\n }\n };\n \n return shortcutsObj;\n }\n\n destroy() {\n this.targets.forEach((t) => this.unobserve(t));\n }\n\n unobserve(item: EventTarget) {\n if (!item) return;\n this.observers.forEach((EventName) => {\n item.removeEventListener(\n EventName,\n (this as any)[\"on\" + EventName],\n false\n );\n });\n this.targets = this.targets.filter((t) => t !== item);\n }\n\n observe(item: EventTarget) {\n if (!item) return;\n if (this.targets.includes(item)) return;\n this.observers.forEach((EventName) => {\n item.addEventListener(EventName, (this as any)[\"on\" + EventName], false);\n });\n this.targets.push(item);\n }\n\n onkeydown(e: KeyboardEvent) {\n const focusIsSafe = !isInteractiveElement(document.activeElement);\n \n switch(e.code) {\n case \"Space\":\n focusIsSafe && this.callbacks.goProgression(e.shiftKey);\n break;\n case \"ArrowRight\":\n focusIsSafe && this.callbacks.moveTo(\"right\");\n break;\n case \"ArrowLeft\":\n focusIsSafe && this.callbacks.moveTo(\"left\");\n break;\n case \"ArrowUp\":\n case \"PageUp\":\n focusIsSafe && this.callbacks.moveTo(\"up\");\n break;\n case \"ArrowDown\":\n case \"PageDown\":\n focusIsSafe && this.callbacks.moveTo(\"down\");\n break;\n case \"Home\":\n focusIsSafe && this.callbacks.moveTo(\"home\");\n break;\n case \"End\":\n focusIsSafe && this.callbacks.moveTo(\"end\");\n break;\n default:\n if (this.shortcuts.hasOwnProperty(e.code)) {\n const customShortcutObj = this.shortcuts[e.code];\n const sendCallback = Object.entries(customShortcutObj.modifiers).every(( [modifier, value] ) => {\n if (modifier === \"platformKey\") {\n return e[this.getPlatformModifier()] === value;\n } else {\n return e[modifier as \"altKey\" | \"ctrlKey\" | \"metaKey\" | \"shiftKey\"] === value;\n }\n })\n \n if (sendCallback) {\n e.preventDefault();\n this.callbacks.toggleAction(customShortcutObj.actionKey)\n };\n }\n break;\n }\n }\n}","import { Locator } from \"@readium/shared\";\n\n export const deserializePositions = (positionsList?: Locator[]) => {\n return positionsList?.map((locator) => ({\n href: locator.href,\n type: locator.type,\n locations: {\n position: locator.locations.position,\n progression: locator.locations.progression,\n totalProgression: locator.locations.totalProgression\n },\n }));\n };","import { ReactNode } from \"react\";\n\nimport readerLoaderStyles from \"./assets/styles/readerLoader.module.css\";\n\nimport { ThLoader } from \"@/core/Components/Reader/ThLoader\";\n\nimport { useI18n } from \"@/i18n/useI18n\";\n\nexport const StatefulLoader = ({ isLoading, children }: { isLoading: boolean, children: ReactNode }) => {\n const { t } = useI18n();\n\n return (\n <>\n <ThLoader \n isLoading={ isLoading } \n loader={ <div className={ readerLoaderStyles.readerLoader }>{ t(\"reader.app.loading\") }</div> } \n className={ readerLoaderStyles.readerLoaderWrapper } \n >\n { children }\n </ThLoader>\n </>\n )\n}","\"use client\";\n\nimport React, { cloneElement, isValidElement } from \"react\";\n\nimport publicationGridStyles from \"./assets/styles/publicationGrid.module.css\";\n\nimport { ThGrid } from \"@/core/Components\";\nimport { Link } from \"react-aria-components\";\n\nimport classNames from \"classnames\";\n\nexport const DefaultImage = ({\n src,\n alt = \"\"\n}: {\n src: string;\n alt?: string;\n}) => (\n <img\n src={ src }\n alt={ alt }\n className={ publicationGridStyles.publicationImage }\n loading=\"lazy\"\n />\n);\n\nexport interface Publication {\n title: string;\n author: string;\n cover: string;\n url: string;\n rendition?: string;\n}\n\nexport interface PublicationGridProps {\n publications: Publication[];\n columnWidth?: number;\n gap?: string;\n renderCover?: (publication: Publication) => React.ReactElement<React.ImgHTMLAttributes<HTMLImageElement>>;\n}\n\nexport const PublicationGrid = ({ \n publications,\n columnWidth = 400,\n gap = \"1.5rem\",\n renderCover = (publication) => (\n <DefaultImage\n src={ publication.cover }\n alt=\"\"\n />\n ),\n}: PublicationGridProps) => {\n const renderCoverWithClass = (publication: Publication) => {\n const cover = renderCover(publication);\n \n if (!isValidElement<React.ImgHTMLAttributes<HTMLImageElement>>(cover)) {\n return (\n <DefaultImage\n src={ publication.cover }\n alt=\"\"\n />\n );\n }\n\n return cloneElement(cover, {\n className: classNames(\n publicationGridStyles.publicationImage,\n cover.props.className\n )\n });\n };\n\n return (\n <ThGrid\n className={ publicationGridStyles.publicationGrid }\n items={ publications }\n columnWidth={ columnWidth }\n gap={ gap }\n renderItem={ (publication, index) => (\n <Link\n href={ publication.url }\n key={ index }\n className={ publicationGridStyles.publicationCard }\n >\n <figure className={ publicationGridStyles.publicationCover }>\n { renderCoverWithClass(publication) }\n </figure>\n <div className={ publicationGridStyles.publicationInfo }>\n <h2 className={ publicationGridStyles.publicationTitle }>\n { publication.title }\n </h2>\n <p className={ publicationGridStyles.publicationAuthor }>\n { publication.author }\n </p>\n { publication.rendition && (\n <p className={ publicationGridStyles.publicationRendition }>\n { publication.rendition }\n </p>\n ) }\n </div>\n </Link>\n ) }\n />\n );\n};","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Link } from \"@readium/shared\";\nimport { HttpFetcher } from \"@readium/shared\";\n\nexport interface UsePublicationOptions {\n url: string;\n allowedDomains?: string[];\n onError?: (error: string) => void;\n}\n\nexport function usePublication({ \n url, \n allowedDomains, \n onError = () => {} \n}: UsePublicationOptions) {\n const [error, setError] = useState(\"\");\n const [manifest, setManifest] = useState<object | undefined>(undefined);\n const [selfLink, setSelfLink] = useState<string | undefined>(undefined);\n\n // Basic URL validation and loading\n useEffect(() => {\n if (!url) {\n setError(\"Manifest URL is required\");\n return;\n }\n\n // Decode URL if needed\n const decodedUrl = decodeURIComponent(url);\n \n const urlObj = new URL(decodedUrl);\n const domain = urlObj.hostname;\n \n if (allowedDomains?.length && !allowedDomains.includes(domain)) {\n const errorMsg = `Manifest from domain ${ domain } is not allowed`;\n setError(errorMsg);\n return;\n }\n \n const manifestLink = new Link({ href: decodedUrl });\n const fetcher = new HttpFetcher(undefined);\n\n try {\n const fetched = fetcher.get(manifestLink);\n \n // Get self-link first\n fetched.link().then((link) => {\n setSelfLink(link.toURL(decodedUrl));\n });\n\n // Then get manifest data\n fetched.readAsJSON().then((manifestData) => {\n setManifest(manifestData as object);\n }).catch((error) => {\n console.error(\"Error loading manifest:\", error);\n setError(`Failed loading manifest ${ decodedUrl }: ${ error instanceof Error ? error.message : \"Unknown error\" }`);\n });\n } catch (error: unknown) {\n console.error(\"Error loading manifest:\", error);\n setError(`Failed loading manifest ${ decodedUrl }: ${ error instanceof Error ? error.message : \"Unknown error\" }`);\n }\n }, [url, allowedDomains]);\n\n // Call onError callback when error changes\n useEffect(() => {\n if (error) {\n onError(error);\n }\n }, [error, onError]);\n\n return {\n error,\n manifest,\n selfLink\n };\n}\n"]}