@edrlab/thorium-web 1.0.0-beta.2 → 1.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/{ThSettingsWrapper-De4qvjsh.d.mts → ThSettingsWrapper-CA2_0nQz.d.mts} +1 -1
- package/dist/{actionsReducer-e808e6V_.d.mts → actionsReducer-D4Mphfuv.d.mts} +1 -1
- package/dist/chunk-BNPR6V7V.mjs.map +1 -1
- package/dist/chunk-IEYR7QV7.mjs.map +1 -1
- package/dist/{chunk-O4MBY6P4.mjs → chunk-KQLSID7M.mjs} +52 -20
- package/dist/chunk-KQLSID7M.mjs.map +1 -0
- package/dist/chunk-MLEYTQGK.mjs.map +1 -1
- package/dist/chunk-NA3KMUS4.mjs +417 -0
- package/dist/chunk-NA3KMUS4.mjs.map +1 -0
- package/dist/{chunk-GHEGQBCW.mjs → chunk-NOV43IG4.mjs} +4 -18
- package/dist/chunk-NOV43IG4.mjs.map +1 -0
- package/dist/chunk-NQ2ZSGCX.mjs.map +1 -1
- package/dist/{chunk-TWGRY5SW.mjs → chunk-RQFPGXWN.mjs} +29 -22
- package/dist/chunk-RQFPGXWN.mjs.map +1 -0
- package/dist/{chunk-BVSROK7Z.mjs → chunk-SDVDRPT5.mjs} +116 -6
- package/dist/chunk-SDVDRPT5.mjs.map +1 -0
- package/dist/chunk-TTGURRX3.mjs.map +1 -1
- package/dist/{chunk-PGZF5NO2.mjs → chunk-TXILKP4F.mjs} +16 -12
- package/dist/chunk-TXILKP4F.mjs.map +1 -0
- package/dist/components/Epub/index.d.mts +48 -25
- package/dist/components/Epub/index.mjs +877 -407
- package/dist/components/Epub/index.mjs.map +1 -1
- package/dist/{const-DGYvRLhk.d.mts → const-IAfi9t_g.d.mts} +14 -11
- package/dist/core/Components/index.d.mts +52 -6
- package/dist/core/Components/index.mjs +2 -2
- package/dist/core/Helpers/index.d.mts +3 -9
- package/dist/core/Helpers/index.mjs +2 -3
- package/dist/core/Hooks/index.d.mts +15 -5
- package/dist/core/Hooks/index.mjs +2 -3
- package/dist/{enums-DxbWWvn7.d.mts → enums-DqGQ66r1.d.mts} +1 -23
- package/dist/lib/index.d.mts +355 -11
- package/dist/lib/index.mjs +2 -3
- package/dist/{overflowMenu.module-XQRI7RJJ.module.css → overflowMenu.module-FO27A2A3.module.css} +12 -0
- package/dist/preferences/index.d.mts +6 -6
- package/dist/preferences/index.mjs +2 -3
- package/dist/publicationGrid.module-T6ISNRGM.module.css +70 -0
- package/dist/{reader-QFK7DGLX.css → reader-NGCQJKLX.css} +74 -36
- package/dist/{readerArrowButton.module-NHAUIQXS.module.css → readerArrowButton.module-EFLOIADG.module.css} +4 -0
- package/dist/{readerHeader.module-OBKZATSW.module.css → readerHeader.module-K7OLOIJP.module.css} +2 -7
- package/dist/{readerLoader.module-U6LLXOVQ.module.css → readerLoader.module-KDBPCQZJ.module.css} +1 -1
- package/dist/readerPagination.module-W4IAEOSH.module.css +73 -0
- package/dist/readerProgression.module-7PU7L74S.module.css +5 -0
- package/dist/{readerSharedUI.module-MCLGNG22.module.css → readerSharedUI.module-Y2VDWFS5.module.css} +1 -5
- package/dist/{sheets.module-DDN7GPMG.module.css → sheets.module-NA32WOSZ.module.css} +4 -4
- package/dist/{toc.module-XJLXQM7G.module.css → toc.module-KNW5CKIY.module.css} +1 -0
- package/dist/{useBreakpoints-I7vHrywa.d.mts → useBreakpoints-BQaiwecQ.d.mts} +1 -1
- package/dist/{useEpubNavigator-BrV4MYJy.d.mts → useEpubNavigator-DFRJ_tHa.d.mts} +9 -10
- package/dist/{usePreferences-B55XqFto.d.mts → usePreferences-BMyBhq7F.d.mts} +1 -1
- package/dist/useTimeline-Bid5B7AQ.d.mts +39 -0
- package/package.json +31 -22
- package/dist/bookUrlConverter.module-J46O27CR.module.css +0 -63
- package/dist/chunk-3QS3WKRC.mjs +0 -29
- package/dist/chunk-3QS3WKRC.mjs.map +0 -1
- package/dist/chunk-BVSROK7Z.mjs.map +0 -1
- package/dist/chunk-GHEGQBCW.mjs.map +0 -1
- package/dist/chunk-JS5WI5D4.mjs +0 -600
- package/dist/chunk-JS5WI5D4.mjs.map +0 -1
- package/dist/chunk-O4MBY6P4.mjs.map +0 -1
- package/dist/chunk-PGZF5NO2.mjs.map +0 -1
- package/dist/chunk-TWGRY5SW.mjs.map +0 -1
- package/dist/index-ClB-1iNN.d.mts +0 -356
- package/dist/readerProgression.module-S5R3Y6JI.module.css +0 -11
package/LICENSE
CHANGED
|
@@ -67,7 +67,7 @@ interface ThCollapsibleActionsBarProps extends ThActionsBarProps {
|
|
|
67
67
|
declare const ThCollapsibleActionsBar: ({ ref, id, items, prefs, breakpoint, compounds, ...props }: ThCollapsibleActionsBarProps) => react_jsx_runtime.JSX.Element;
|
|
68
68
|
|
|
69
69
|
interface ThMenuItemProps extends MenuItemProps {
|
|
70
|
-
ref?: React__default.Ref<
|
|
70
|
+
ref?: React__default.Ref<HTMLDivElement>;
|
|
71
71
|
id: string;
|
|
72
72
|
SVGIcon?: React__default.ComponentType<React__default.SVGProps<SVGElement>>;
|
|
73
73
|
label: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _reduxjs_toolkit from '@reduxjs/toolkit';
|
|
2
|
-
import {
|
|
2
|
+
import { a as ThDockingKeys } from './enums-DqGQ66r1.mjs';
|
|
3
3
|
|
|
4
4
|
type PrimitiveType = number | string | boolean;
|
|
5
5
|
/** Object types that should never be mapped */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/Hooks/useBreakpoints.ts","../src/core/Hooks/useReducedMotion.ts","../src/core/Hooks/useReducedTransparency.ts","../src/core/Hooks/useForcedColors.ts","../src/core/Hooks/useMonochrome.ts"],"names":["useState","useEffect"],"mappings":"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","file":"chunk-BNPR6V7V.mjs","sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\n\nimport { ThBreakpoints } from \"@/preferences/models/enums\";\n\nimport { useMediaQuery } from \"./useMediaQuery\";\n\ntype ThBreakpointRange = {\n min: number | null,\n max: number | null\n}\n\ntype ThBreakpointRanges = { [key in ThBreakpoints]: ThBreakpointRange | null; }\n\nexport type BreakpointsMap<T> = {\n [key in ThBreakpoints]?: T\n};\n\nexport type ThBreakpointsObject = { [key in ThBreakpoints]: boolean | null } & { current: string | null } & { ranges: ThBreakpointRanges }\n\nexport const useBreakpoints = (map: BreakpointsMap<number | null>, onChange?: (breakpoint: ThBreakpoints | null) => void): ThBreakpointsObject => {\n const [currentBreakpoint, setCurrentBreakpoint] = useState<ThBreakpoints | null>(null);\n\n const makeMediaString = (range: ThBreakpointRange | null) => {\n if (!range || (!range.min && !range.max)) return null;\n \n let mediaString = \"screen\"\n if (range.min) {\n mediaString += ` and (min-width: ${ range.min }px)`;\n }\n if (range.max) {\n mediaString += ` and (max-width: ${ range.max }px)`\n }\n return mediaString;\n };\n\n const initRanges = (prefs: BreakpointsMap<number | null>) => {\n const breakpointRanges: ThBreakpointRanges = {\n [ThBreakpoints.compact]: null,\n [ThBreakpoints.medium]: null,\n [ThBreakpoints.expanded]: null,\n [ThBreakpoints.large]: null,\n [ThBreakpoints.xLarge]: null\n };\n \n let prev: null | number = null;\n \n Object.entries(prefs).forEach(([ key, value ]) => {\n if (value && !isNaN(value)) {\n const max = value;\n const min = prev ? prev + 1 : null;\n Object.defineProperty(breakpointRanges, key, {\n value: {\n min: min,\n max: max\n }\n });\n prev = value;\n } else if (!value && key === ThBreakpoints.xLarge && prev) {\n Object.defineProperty(breakpointRanges, key, {\n value: {\n min: prev + 1,\n max: null\n }\n });\n }\n });\n\n return breakpointRanges;\n };\n\n const ranges = useMemo(() => initRanges(map), [map]);\n\n const compactMedia = makeMediaString(ranges[ThBreakpoints.compact]);\n const mediumMedia = makeMediaString(ranges[ThBreakpoints.medium]);\n const expandedMedia = makeMediaString(ranges[ThBreakpoints.expanded]);\n const largeMedia = makeMediaString(ranges[ThBreakpoints.large]);\n const xLargeMedia = makeMediaString(ranges[ThBreakpoints.xLarge]);\n\n const compactMatches = useMediaQuery(compactMedia);\n const mediumMatches = useMediaQuery(mediumMedia);\n const expandedMatches = useMediaQuery(expandedMedia);\n const largeMatches = useMediaQuery(largeMedia);\n const xLargeMatches = useMediaQuery(xLargeMedia);\n\n useEffect(() => {\n let newBreakpoint = currentBreakpoint;\n\n if (compactMatches) {\n newBreakpoint = ThBreakpoints.compact;\n } else if (mediumMatches) {\n newBreakpoint = ThBreakpoints.medium;\n } else if (expandedMatches) {\n newBreakpoint = ThBreakpoints.expanded;\n } else if (largeMatches) {\n newBreakpoint = ThBreakpoints.large;\n } else if (xLargeMatches) {\n newBreakpoint = ThBreakpoints.xLarge;\n }\n\n setCurrentBreakpoint(newBreakpoint);\n onChange && onChange(newBreakpoint);\n }, [currentBreakpoint, compactMatches, mediumMatches, expandedMatches, largeMatches, xLargeMatches, onChange]);\n\n return {\n [ThBreakpoints.compact]: compactMatches,\n [ThBreakpoints.medium]: mediumMatches,\n [ThBreakpoints.expanded]: expandedMatches,\n [ThBreakpoints.large]: largeMatches,\n [ThBreakpoints.xLarge]: xLargeMatches,\n current: currentBreakpoint,\n ranges: ranges\n };\n};","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useReducedMotion = (onChange?: (reducedMotion: boolean) => void) => {\n const [reducedMotion, setReducedMotion] = useState(false);\n\n const prefersReducedMotion = useMediaQuery(\"(prefers-reduced-motion: reduce)\");\n\n useEffect(() => {\n setReducedMotion(prefersReducedMotion);\n onChange && onChange(prefersReducedMotion);\n }, [prefersReducedMotion, onChange]);\n\n return reducedMotion;\n}","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useReducedTransparency = (onChange?: (reducedTransparency: boolean) => void) => {\n const [reducedTransparency, setReducedTransparency] = useState(false);\n\n const prefersReducedTransparency = useMediaQuery(\"(prefers-reduced-transparency: reduce)\");\n\n useEffect(() => {\n setReducedTransparency(prefersReducedTransparency);\n onChange && onChange(prefersReducedTransparency);\n }, [prefersReducedTransparency, onChange]);\n\n return reducedTransparency;\n}","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useForcedColors = (onChange?: (forcedColors: boolean) => void) => {\n const [colors, setForcedColors] = useState(false);\n\n const forcedColors = useMediaQuery(\"(forced-colors: active)\");\n\n useEffect(() => {\n setForcedColors(forcedColors);\n onChange && onChange(forcedColors);\n }, [forcedColors, onChange]);\n\n return colors;\n}","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useMonochrome = (onChange?: (isMonochrome: boolean) => void) => {\n const [isMonochrome, setMonochrome] = useState(false);\n\n const monochrome = useMediaQuery(\"(monochrome)\");\n\n useEffect(() => {\n setMonochrome(monochrome);\n onChange && onChange(monochrome);\n }, [monochrome, onChange]);\n\n return isMonochrome;\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/Hooks/useBreakpoints.ts","../src/core/Hooks/useReducedMotion.ts","../src/core/Hooks/useReducedTransparency.ts","../src/core/Hooks/useForcedColors.ts","../src/core/Hooks/useMonochrome.ts"],"names":["useState","useEffect"],"mappings":"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","file":"chunk-BNPR6V7V.mjs","sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\n\nimport { ThBreakpoints } from \"@/preferences/models/enums\";\n\nimport { useMediaQuery } from \"./useMediaQuery\";\n\ntype ThBreakpointRange = {\n min: number | null,\n max: number | null\n}\n\ntype ThBreakpointRanges = { [key in ThBreakpoints]: ThBreakpointRange | null; }\n\nexport type BreakpointsMap<T> = {\n [key in ThBreakpoints]?: T\n};\n\nexport type ThBreakpointsObject = { [key in ThBreakpoints]: boolean | null } & { current: string | null } & { ranges: ThBreakpointRanges }\n\nexport const useBreakpoints = (map: BreakpointsMap<number | null>, onChange?: (breakpoint: ThBreakpoints | null) => void): ThBreakpointsObject => {\n const [currentBreakpoint, setCurrentBreakpoint] = useState<ThBreakpoints | null>(null);\n\n const makeMediaString = (range: ThBreakpointRange | null) => {\n if (!range || (!range.min && !range.max)) return null;\n \n let mediaString = \"screen\"\n if (range.min) {\n mediaString += ` and (min-width: ${ range.min }px)`;\n }\n if (range.max) {\n mediaString += ` and (max-width: ${ range.max }px)`\n }\n return mediaString;\n };\n\n const initRanges = (prefs: BreakpointsMap<number | null>) => {\n const breakpointRanges: ThBreakpointRanges = {\n [ThBreakpoints.compact]: null,\n [ThBreakpoints.medium]: null,\n [ThBreakpoints.expanded]: null,\n [ThBreakpoints.large]: null,\n [ThBreakpoints.xLarge]: null\n };\n \n let prev: null | number = null;\n \n Object.entries(prefs).forEach(([ key, value ]) => {\n if (value && !isNaN(value)) {\n const max = value;\n const min = prev ? prev + 1 : null;\n Object.defineProperty(breakpointRanges, key, {\n value: {\n min: min,\n max: max\n }\n });\n prev = value;\n } else if (!value && key === ThBreakpoints.xLarge && prev) {\n Object.defineProperty(breakpointRanges, key, {\n value: {\n min: prev + 1,\n max: null\n }\n });\n }\n });\n\n return breakpointRanges;\n };\n\n const ranges = useMemo(() => initRanges(map), [map]);\n\n const compactMedia = makeMediaString(ranges[ThBreakpoints.compact]);\n const mediumMedia = makeMediaString(ranges[ThBreakpoints.medium]);\n const expandedMedia = makeMediaString(ranges[ThBreakpoints.expanded]);\n const largeMedia = makeMediaString(ranges[ThBreakpoints.large]);\n const xLargeMedia = makeMediaString(ranges[ThBreakpoints.xLarge]);\n\n const compactMatches = useMediaQuery(compactMedia);\n const mediumMatches = useMediaQuery(mediumMedia);\n const expandedMatches = useMediaQuery(expandedMedia);\n const largeMatches = useMediaQuery(largeMedia);\n const xLargeMatches = useMediaQuery(xLargeMedia);\n\n useEffect(() => {\n let newBreakpoint = currentBreakpoint;\n\n if (compactMatches) {\n newBreakpoint = ThBreakpoints.compact;\n } else if (mediumMatches) {\n newBreakpoint = ThBreakpoints.medium;\n } else if (expandedMatches) {\n newBreakpoint = ThBreakpoints.expanded;\n } else if (largeMatches) {\n newBreakpoint = ThBreakpoints.large;\n } else if (xLargeMatches) {\n newBreakpoint = ThBreakpoints.xLarge;\n }\n\n setCurrentBreakpoint(newBreakpoint);\n onChange && onChange(newBreakpoint);\n }, [currentBreakpoint, compactMatches, mediumMatches, expandedMatches, largeMatches, xLargeMatches, onChange]);\n\n return {\n [ThBreakpoints.compact]: compactMatches,\n [ThBreakpoints.medium]: mediumMatches,\n [ThBreakpoints.expanded]: expandedMatches,\n [ThBreakpoints.large]: largeMatches,\n [ThBreakpoints.xLarge]: xLargeMatches,\n current: currentBreakpoint,\n ranges: ranges\n };\n};","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useReducedMotion = (onChange?: (reducedMotion: boolean) => void) => {\n const [reducedMotion, setReducedMotion] = useState(false);\n\n const prefersReducedMotion = useMediaQuery(\"(prefers-reduced-motion: reduce)\");\n\n useEffect(() => {\n setReducedMotion(prefersReducedMotion);\n onChange && onChange(prefersReducedMotion);\n }, [prefersReducedMotion, onChange]);\n\n return reducedMotion;\n}","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useReducedTransparency = (onChange?: (reducedTransparency: boolean) => void) => {\n const [reducedTransparency, setReducedTransparency] = useState(false);\n\n const prefersReducedTransparency = useMediaQuery(\"(prefers-reduced-transparency: reduce)\");\n\n useEffect(() => {\n setReducedTransparency(prefersReducedTransparency);\n onChange && onChange(prefersReducedTransparency);\n }, [prefersReducedTransparency, onChange]);\n\n return reducedTransparency;\n}","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useForcedColors = (onChange?: (forcedColors: boolean) => void) => {\n const [colors, setForcedColors] = useState(false);\n\n const forcedColors = useMediaQuery(\"(forced-colors: active)\");\n\n useEffect(() => {\n setForcedColors(forcedColors);\n onChange && onChange(forcedColors);\n }, [forcedColors, onChange]);\n\n return colors;\n}","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useMediaQuery } from \"./useMediaQuery\";\n\nexport const useMonochrome = (onChange?: (isMonochrome: boolean) => void) => {\n const [isMonochrome, setMonochrome] = useState(false);\n\n const monochrome = useMediaQuery(\"(monochrome)\");\n\n useEffect(() => {\n setMonochrome(monochrome);\n onChange && onChange(monochrome);\n }, [monochrome, onChange]);\n\n return isMonochrome;\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/Helpers/getPlatform.ts","../src/core/Helpers/keyboardUtilities.ts"],"names":["UnstableShortcutMetaKeywords","UnstableShortcutRepresentation"],"mappings":";AAeO,IAAM,cAAc,MAAM;AAC/B,
|
|
1
|
+
{"version":3,"sources":["../src/core/Helpers/getPlatform.ts","../src/core/Helpers/keyboardUtilities.ts"],"names":["UnstableShortcutMetaKeywords","UnstableShortcutRepresentation"],"mappings":"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","file":"chunk-IEYR7QV7.mjs","sourcesContent":["\"use client\";\n\n// Not caring about instance methods there, only properties\n// See https://developer.mozilla.org/en-US/docs/Web/API/NavigatorUAData\ninterface ExtNavigatorUAData {\n brands: string[];\n mobile: boolean;\n platform: string;\n}\n\ninterface ExtNavigator extends Navigator {\n userAgentData: ExtNavigatorUAData;\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData\nexport const getPlatform = () => {\n if (typeof window !== \"undefined\") {\n const nav: ExtNavigator = window.navigator as ExtNavigator;\n\n if (typeof nav.userAgentData !== \"undefined\" && typeof nav.userAgentData != null) {\n return nav.userAgentData.platform.toLowerCase();\n }\n\n // Deprecated but userAgentData still experimental…\n if (typeof nav.platform !== \"undefined\") {\n // android navigator.platform is often set as \"linux\", so we have to check userAgent\n if (typeof nav.userAgent !== \"undefined\" && /android/.test(nav.userAgent.toLowerCase())) {\n return \"android\";\n }\n return nav.platform.toLowerCase();\n }\n }\n return \"unknown\";\n}\n\nexport const isMacish = () => {\n const MacOSPattern = /mac|ipod|iphone|ipad/i;\n const platform = getPlatform();\n return MacOSPattern.test(platform);\n}\n\n// “Desktop-class” iPadOS\nexport const isIpadOS = () => {\n return !!(navigator.maxTouchPoints \n && navigator.maxTouchPoints > 2 \n && navigator.userAgent.includes(\"Intel\"));\n}\n\n// Stopgap measure for fullscreen on iPadOS, do not use elsewhere\nexport const isIOSish = () => {\n const AppleMobilePattern = /ipod|iphone|ipad/i;\n const platform = getPlatform();\n if (AppleMobilePattern.test(platform)) {\n return true;\n } else {\n return isIpadOS();\n }\n}","\"use client\";\n\nimport { isMacish } from \"./getPlatform\";\n\nexport interface UnstableKey {\n [key: string]: string;\n longform: string;\n shortform: string;\n}\n\nexport interface UnstableMetaKey extends UnstableKey {\n modifier: \"altKey\" | \"ctrlKey\" | \"metaKey\" | \"shiftKey\";\n symbol: \"⌥\" | \"^\" | \"⌘\" | \"⊞\" | \"⇧\";\n}\n\nexport interface UnstablePlatformModifier extends UnstableKey {\n modifier: \"ctrlKey\" | \"metaKey\";\n symbol: \"^\" | \"⌘\";\n}\n\nexport interface UnstableMetaKeys {\n [key: string]: UnstableMetaKey;\n altKey: UnstableMetaKey;\n ctrlKey: UnstableMetaKey;\n metaKey: UnstableMetaKey;\n shiftKey: UnstableMetaKey;\n}\n\nexport enum UnstableShortcutMetaKeywords {\n alt = \"altKey\",\n ctrl = \"ctrlKey\",\n meta = \"metaKey\",\n platform = \"platformKey\",\n shift = \"shiftKey\"\n}\n\nexport enum UnstableShortcutRepresentation {\n symbol = \"symbol\",\n short = \"shortform\",\n long = \"longform\"\n};\n\nexport interface UnstableShortcut {\n className?: string;\n rawForm: string;\n representation?: UnstableShortcutRepresentation; \n joiner?: string;\n}\n\nexport interface UnstablePShortcut {\n key?: string;\n char?: string;\n modifiers: {\n [key: string]: boolean;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n platformKey: boolean;\n shiftKey: boolean;\n }\n}\n\nconst altModifier: UnstableMetaKey = {\n longform: \"Option\",\n shortform: \"Alt\",\n modifier: \"altKey\",\n symbol: \"⌥\"\n}\n\nconst ctrlModifier: UnstableMetaKey & UnstablePlatformModifier = {\n longform: \"Control\",\n shortform: \"Ctrl\",\n modifier: \"ctrlKey\",\n symbol: \"^\"\n}\n\nconst metaModifierMac: UnstableMetaKey & UnstablePlatformModifier = {\n longform: \"Command\",\n shortform: \"Cmd\",\n modifier: \"metaKey\",\n symbol: \"⌘\" \n}\n\nconst metaModifierWin: UnstableMetaKey = {\n longform: \"Windows\",\n shortform: \"Win\",\n modifier: \"metaKey\",\n symbol: \"⊞\"\n}\n\nconst shiftModifier: UnstableMetaKey = {\n longform: \"Shift\",\n shortform: \"Shift\",\n modifier: \"shiftKey\",\n symbol: \"⇧\"\n}\n\nexport const metaKeys: UnstableMetaKeys = {\n altKey: altModifier,\n ctrlKey: ctrlModifier,\n metaKey: isMacish() ? metaModifierMac : metaModifierWin,\n shiftKey: shiftModifier\n}\n\n// Platform modifier differs from Mac to Windows so we have to get it dynamically\n\nexport const defaultPlatformModifier = ctrlModifier;\n\nexport const getPlatformModifier = (): UnstablePlatformModifier => {\n if (isMacish()) {\n return metaModifierMac;\n } else {\n return ctrlModifier;\n }\n}\n\nexport const buildShortcut = (str: string) => {\n let shortcutObj: UnstablePShortcut = {\n key: \"\",\n char: \"\",\n modifiers: {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n platformKey: false,\n shiftKey: false\n }\n }\n \n const shortcutArray = str.split(/\\s*?[+-]\\s*?/);\n\n shortcutArray.filter((val) => {\n if ((Object.values(UnstableShortcutMetaKeywords) as string[]).includes(val)) {\n const trimmedKey = val.trim();\n shortcutObj.modifiers[trimmedKey] = true;\n } else {\n shortcutObj.char = val.trim().toUpperCase();\n shortcutObj.key = `Key${ val.trim().toUpperCase() }`;\n }\n });\n\n return shortcutObj.key ? shortcutObj : null;\n}"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defaultPlatformModifier } from './chunk-IEYR7QV7.mjs';
|
|
2
|
-
import { __commonJS, __toESM } from './chunk-
|
|
2
|
+
import { __commonJS, __toESM } from './chunk-RQFPGXWN.mjs';
|
|
3
3
|
import { useRef } from 'react';
|
|
4
4
|
import { useDispatch, useSelector, useStore, Provider } from 'react-redux';
|
|
5
5
|
import { createSlice, configureStore } from '@reduxjs/toolkit';
|
|
@@ -89,6 +89,7 @@ var initialState = {
|
|
|
89
89
|
isLoading: true,
|
|
90
90
|
isImmersive: false,
|
|
91
91
|
isHovering: false,
|
|
92
|
+
hasScrollAffordance: false,
|
|
92
93
|
hasArrows: true,
|
|
93
94
|
isFullscreen: false,
|
|
94
95
|
settingsContainer: "initial" /* initial */,
|
|
@@ -109,13 +110,28 @@ var readerSlice = createSlice({
|
|
|
109
110
|
},
|
|
110
111
|
setImmersive: (state, action) => {
|
|
111
112
|
state.isImmersive = action.payload;
|
|
113
|
+
if (action.payload === true) {
|
|
114
|
+
state.isHovering = false;
|
|
115
|
+
state.hasScrollAffordance = false;
|
|
116
|
+
}
|
|
112
117
|
},
|
|
113
118
|
toggleImmersive: (state) => {
|
|
114
119
|
state.isImmersive = !state.isImmersive;
|
|
120
|
+
if (state.isImmersive === true) {
|
|
121
|
+
state.isHovering = false;
|
|
122
|
+
state.hasScrollAffordance = false;
|
|
123
|
+
}
|
|
115
124
|
},
|
|
116
125
|
setHovering: (state, action) => {
|
|
117
126
|
state.isHovering = action.payload;
|
|
118
127
|
},
|
|
128
|
+
setScrollAffordance: (state, action) => {
|
|
129
|
+
state.hasScrollAffordance = action.payload;
|
|
130
|
+
if (action.payload === true) {
|
|
131
|
+
state.isHovering = false;
|
|
132
|
+
state.isImmersive = false;
|
|
133
|
+
}
|
|
134
|
+
},
|
|
119
135
|
setArrows: (state, action) => {
|
|
120
136
|
state.hasArrows = action.payload;
|
|
121
137
|
},
|
|
@@ -134,6 +150,7 @@ var {
|
|
|
134
150
|
setImmersive,
|
|
135
151
|
toggleImmersive,
|
|
136
152
|
setHovering,
|
|
153
|
+
setScrollAffordance,
|
|
137
154
|
setArrows,
|
|
138
155
|
setFullscreen,
|
|
139
156
|
setSettingsContainer
|
|
@@ -145,12 +162,9 @@ var initialState2 = {
|
|
|
145
162
|
fontSize: 1,
|
|
146
163
|
fontWeight: 400,
|
|
147
164
|
hyphens: null,
|
|
148
|
-
layoutStrategy: "lineLength" /* lineLength */,
|
|
149
165
|
letterSpacing: null,
|
|
150
166
|
lineHeight: "publisher" /* publisher */,
|
|
151
|
-
lineLength:
|
|
152
|
-
optimal: 65
|
|
153
|
-
},
|
|
167
|
+
lineLength: null,
|
|
154
168
|
paragraphIndent: null,
|
|
155
169
|
paragraphSpacing: null,
|
|
156
170
|
publisherStyles: true,
|
|
@@ -178,9 +192,6 @@ var settingsSlice = createSlice({
|
|
|
178
192
|
setHyphens: (state, action) => {
|
|
179
193
|
state.hyphens = action.payload;
|
|
180
194
|
},
|
|
181
|
-
setLayoutStrategy: (state, action) => {
|
|
182
|
-
state.layoutStrategy = action.payload;
|
|
183
|
-
},
|
|
184
195
|
setLetterSpacing: (state, action) => {
|
|
185
196
|
state.letterSpacing = action.payload;
|
|
186
197
|
},
|
|
@@ -206,8 +217,8 @@ var settingsSlice = createSlice({
|
|
|
206
217
|
state.lineLength = {
|
|
207
218
|
...state.lineLength,
|
|
208
219
|
min: {
|
|
209
|
-
...state.lineLength
|
|
210
|
-
chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength
|
|
220
|
+
...state.lineLength?.min,
|
|
221
|
+
chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength?.min?.chars,
|
|
211
222
|
isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)
|
|
212
223
|
}
|
|
213
224
|
};
|
|
@@ -216,8 +227,8 @@ var settingsSlice = createSlice({
|
|
|
216
227
|
state.lineLength = {
|
|
217
228
|
...state.lineLength,
|
|
218
229
|
max: {
|
|
219
|
-
...state.lineLength
|
|
220
|
-
chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength
|
|
230
|
+
...state.lineLength?.max,
|
|
231
|
+
chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength?.max?.chars,
|
|
221
232
|
isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)
|
|
222
233
|
}
|
|
223
234
|
};
|
|
@@ -253,7 +264,6 @@ var {
|
|
|
253
264
|
setFontWeight,
|
|
254
265
|
setFontFamily,
|
|
255
266
|
setHyphens,
|
|
256
|
-
setLayoutStrategy,
|
|
257
267
|
setLetterSpacing,
|
|
258
268
|
setLineHeight,
|
|
259
269
|
setLineLength,
|
|
@@ -497,8 +507,7 @@ var initialState5 = {
|
|
|
497
507
|
positionsList: [],
|
|
498
508
|
atPublicationStart: false,
|
|
499
509
|
atPublicationEnd: false,
|
|
500
|
-
|
|
501
|
-
tocEntry: void 0
|
|
510
|
+
unstableTimeline: void 0
|
|
502
511
|
};
|
|
503
512
|
var publicationSlice = createSlice({
|
|
504
513
|
name: "publication",
|
|
@@ -525,11 +534,33 @@ var publicationSlice = createSlice({
|
|
|
525
534
|
setPublicationEnd: (state, action) => {
|
|
526
535
|
state.atPublicationEnd = action.payload;
|
|
527
536
|
},
|
|
537
|
+
setTimeline: (state, action) => {
|
|
538
|
+
state.unstableTimeline = {
|
|
539
|
+
...action.payload,
|
|
540
|
+
toc: action.payload.toc || { tree: void 0, currentEntry: void 0 }
|
|
541
|
+
};
|
|
542
|
+
},
|
|
528
543
|
setTocTree: (state, action) => {
|
|
529
|
-
state.
|
|
544
|
+
if (!state.unstableTimeline) {
|
|
545
|
+
state.unstableTimeline = {
|
|
546
|
+
toc: { tree: action.payload, currentEntry: void 0 }
|
|
547
|
+
};
|
|
548
|
+
} else if (state.unstableTimeline.toc) {
|
|
549
|
+
state.unstableTimeline.toc.tree = action.payload;
|
|
550
|
+
} else {
|
|
551
|
+
state.unstableTimeline.toc = { tree: action.payload, currentEntry: void 0 };
|
|
552
|
+
}
|
|
530
553
|
},
|
|
531
554
|
setTocEntry: (state, action) => {
|
|
532
|
-
state.
|
|
555
|
+
if (!state.unstableTimeline) {
|
|
556
|
+
state.unstableTimeline = {
|
|
557
|
+
toc: { tree: void 0, currentEntry: action.payload }
|
|
558
|
+
};
|
|
559
|
+
} else if (state.unstableTimeline.toc) {
|
|
560
|
+
state.unstableTimeline.toc.currentEntry = action.payload;
|
|
561
|
+
} else {
|
|
562
|
+
state.unstableTimeline.toc = { tree: void 0, currentEntry: action.payload };
|
|
563
|
+
}
|
|
533
564
|
}
|
|
534
565
|
}
|
|
535
566
|
});
|
|
@@ -541,6 +572,7 @@ var {
|
|
|
541
572
|
setPositionsList,
|
|
542
573
|
setPublicationStart,
|
|
543
574
|
setPublicationEnd,
|
|
575
|
+
setTimeline,
|
|
544
576
|
setTocTree,
|
|
545
577
|
setTocEntry
|
|
546
578
|
} = publicationSlice.actions;
|
|
@@ -637,6 +669,6 @@ var useAppDispatch = useDispatch;
|
|
|
637
669
|
var useAppSelector = useSelector;
|
|
638
670
|
var useAppStore = useStore;
|
|
639
671
|
|
|
640
|
-
export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, require_debounce, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive,
|
|
641
|
-
//# sourceMappingURL=chunk-
|
|
642
|
-
//# sourceMappingURL=chunk-
|
|
672
|
+
export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, require_debounce, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setScrollAffordance, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
|
|
673
|
+
//# sourceMappingURL=chunk-KQLSID7M.mjs.map
|
|
674
|
+
//# sourceMappingURL=chunk-KQLSID7M.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/.pnpm/debounce@2.2.0/node_modules/debounce/index.js","../src/lib/readerReducer.ts","../src/lib/settingsReducer.ts","../src/lib/themeReducer.ts","../src/lib/actionsReducer.ts","../src/lib/publicationReducer.ts","../src/lib/store.ts","../src/lib/ThStoreProvider.tsx","../src/lib/hooks.ts"],"names":["debounce","initialState","createSlice"],"mappings":";;;;;;;;AAAA,IAAA,gBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,kEAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,SAASA,UAAS,SAAA,EAAW,IAAA,GAAO,GAAA,EAAK,OAAA,GAAU,EAAC,EAAG;AACtD,MAAA,IAAI,OAAO,cAAc,UAAA,EAAY;AACpC,QAAA,MAAM,IAAI,SAAA,CAAU,CAAA,qDAAA,EAAwD,OAAO,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,MAClG;AAEA,MAAA,IAAI,OAAO,CAAA,EAAG;AACb,QAAA,MAAM,IAAI,WAAW,8BAA8B,CAAA;AAAA,MACpD;AAGA,MAAA,MAAM,EAAC,WAAS,GAAI,OAAO,YAAY,SAAA,GAAY,EAAC,SAAA,EAAW,OAAA,EAAO,GAAI,OAAA;AAE1E,MAAA,IAAI,aAAA;AACJ,MAAA,IAAI,eAAA;AACJ,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI,MAAA;AAEJ,MAAA,SAAS,GAAA,GAAM;AACd,QAAA,MAAM,WAAA,GAAc,aAAA;AACpB,QAAA,MAAM,aAAA,GAAgB,eAAA;AACtB,QAAA,aAAA,GAAgB,MAAA;AAChB,QAAA,eAAA,GAAkB,MAAA;AAClB,QAAA,MAAA,GAAS,SAAA,CAAU,KAAA,CAAM,WAAA,EAAa,aAAa,CAAA;AACnD,QAAA,OAAO,MAAA;AAAA,MACR;AAEA,MAAA,SAAS,KAAA,GAAQ;AAChB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE1B,QAAA,IAAI,IAAA,GAAO,IAAA,IAAQ,IAAA,IAAQ,CAAA,EAAG;AAC7B,UAAA,SAAA,GAAY,UAAA,CAAW,KAAA,EAAO,IAAA,GAAO,IAAI,CAAA;AAAA,QAC1C,CAAA,MAAO;AACN,UAAA,SAAA,GAAY,MAAA;AAEZ,UAAA,IAAI,CAAC,SAAA,EAAW;AACf,YAAA,MAAA,GAAS,GAAA,EAAI;AAAA,UACd;AAAA,QACD;AAAA,MACD;AAEA,MAAA,MAAM,SAAA,GAAY,YAAa,UAAA,EAAY;AAC1C,QAAA,IACC,aAAA,IACG,IAAA,KAAS,aAAA,IACT,MAAA,CAAO,cAAA,CAAe,IAAI,CAAA,KAAM,MAAA,CAAO,cAAA,CAAe,aAAa,CAAA,EACrE;AACD,UAAA,MAAM,IAAI,MAAM,wEAAwE,CAAA;AAAA,QACzF;AAEA,QAAA,aAAA,GAAgB,IAAA;AAChB,QAAA,eAAA,GAAkB,UAAA;AAClB,QAAA,SAAA,GAAY,KAAK,GAAA,EAAI;AAErB,QAAA,MAAM,OAAA,GAAU,aAAa,CAAC,SAAA;AAE9B,QAAA,IAAI,CAAC,SAAA,EAAW;AACf,UAAA,SAAA,GAAY,UAAA,CAAW,OAAO,IAAI,CAAA;AAAA,QACnC;AAEA,QAAA,IAAI,OAAA,EAAS;AACZ,UAAA,MAAA,GAAS,GAAA,EAAI;AAAA,QACd;AAEA,QAAA,OAAO,MAAA;AAAA,MACR,CAAA;AAEA,MAAA,MAAA,CAAO,cAAA,CAAe,WAAW,WAAA,EAAa;AAAA,QAC7C,GAAA,GAAM;AACL,UAAA,OAAO,SAAA,KAAc,MAAA;AAAA,QACtB;AAAA,OACA,CAAA;AAED,MAAA,SAAA,CAAU,QAAQ,MAAM;AACvB,QAAA,IAAI,CAAC,SAAA,EAAW;AACf,UAAA;AAAA,QACD;AAEA,QAAA,YAAA,CAAa,SAAS,CAAA;AACtB,QAAA,SAAA,GAAY,MAAA;AAAA,MACb,CAAA;AAEA,MAAA,SAAA,CAAU,QAAQ,MAAM;AACvB,QAAA,IAAI,CAAC,SAAA,EAAW;AACf,UAAA;AAAA,QACD;AAEA,QAAA,SAAA,CAAU,OAAA,EAAQ;AAAA,MACnB,CAAA;AAEA,MAAA,SAAA,CAAU,UAAU,MAAM;AACzB,QAAA,MAAA,GAAS,GAAA,EAAI;AAEb,QAAA,SAAA,CAAU,KAAA,EAAM;AAAA,MACjB,CAAA;AAEA,MAAA,OAAO,SAAA;AAAA,IACR;AAGA,IAAA,MAAA,CAAO,QAAQ,QAAA,GAAWA,SAAAA;AAE1B,IAAA,MAAA,CAAO,OAAA,GAAUA,SAAAA;AAAA,EAAA;AAAA,CAAA;ACrFjB,IAAM,YAAA,GAAmC;AAAA,EACvC,SAAA,EAAA,KAAA;AAAA,EACA,SAAA,EAAW,IAAA;AAAA,EACX,WAAA,EAAa,KAAA;AAAA,EACb,UAAA,EAAY,KAAA;AAAA,EACZ,mBAAA,EAAqB,KAAA;AAAA,EACrB,SAAA,EAAW,IAAA;AAAA,EACX,YAAA,EAAc,KAAA;AAAA,EACd,iBAAA,EAAA,SAAA;AAAA,EACA,gBAAA,EAAkB;AACpB,CAAA;AAEO,IAAM,cAAc,WAAA,CAAY;AAAA,EACrC,IAAA,EAAM,QAAA;AAAA,EACN,YAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,YAAA,EAAc,CAAC,KAAA,EAAO,MAAA,KAAW;AAC/B,MAAA,KAAA,CAAM,YAAY,MAAA,CAAO,OAAA;AAAA,IAC3B,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,KAAA,EAAO,MAAA,KAAW;AAC7B,MAAA,KAAA,CAAM,YAAY,MAAA,CAAO,OAAA;AAAA,IAC3B,CAAA;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAA,KAAW;AACtC,MAAA,KAAA,CAAM,mBAAmB,MAAA,CAAO,OAAA;AAAA,IAClC,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,EAAO,MAAA,KAAW;AAC/B,MAAA,KAAA,CAAM,cAAc,MAAA,CAAO,OAAA;AAC3B,MAAA,IAAI,MAAA,CAAO,YAAY,IAAA,EAAM;AAC3B,QAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,QAAA,KAAA,CAAM,mBAAA,GAAsB,KAAA;AAAA,MAC9B;AAAA,IACF,CAAA;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,KAAU;AAC1B,MAAA,KAAA,CAAM,WAAA,GAAc,CAAC,KAAA,CAAM,WAAA;AAC3B,MAAA,IAAI,KAAA,CAAM,gBAAgB,IAAA,EAAM;AAC9B,QAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,QAAA,KAAA,CAAM,mBAAA,GAAsB,KAAA;AAAA,MAC9B;AAAA,IACF,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAA,KAAW;AAC9B,MAAA,KAAA,CAAM,aAAa,MAAA,CAAO,OAAA;AAAA,IAC5B,CAAA;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAA,KAAW;AACtC,MAAA,KAAA,CAAM,sBAAsB,MAAA,CAAO,OAAA;AACnC,MAAA,IAAI,MAAA,CAAO,YAAY,IAAA,EAAM;AAC3B,QAAA,KAAA,CAAM,UAAA,GAAa,KAAA;AACnB,QAAA,KAAA,CAAM,WAAA,GAAc,KAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,EAAO,MAAA,KAAW;AAC5B,MAAA,KAAA,CAAM,YAAY,MAAA,CAAO,OAAA;AAAA,IAC3B,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAW;AAChC,MAAA,KAAA,CAAM,eAAe,MAAA,CAAO,OAAA;AAAA,IAC9B,CAAA;AAAA,IACA,oBAAA,EAAsB,CAAC,KAAA,EAAO,MAAA,KAAW;AACvC,MAAA,KAAA,CAAM,oBAAoB,MAAA,CAAO,OAAA;AAAA,IACnC;AAAA;AAEJ,CAAC;AAGM,IAAM;AAAA,EACX,YAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,GAAI,WAAA,CAAY;AAEhB,IAAO,wBAAQ,WAAA,CAAY,OAAA;AChD3B,IAAMC,aAAAA,GAAqC;AAAA,EACzC,WAAA,EAAa,MAAA;AAAA,EACb,UAAA,EAAY,WAAA;AAAA,EACZ,QAAA,EAAU,CAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,OAAA,EAAS,IAAA;AAAA,EACT,aAAA,EAAe,IAAA;AAAA,EACf,UAAA,EAAA,WAAA;AAAA,EACA,UAAA,EAAY,IAAA;AAAA,EACZ,eAAA,EAAiB,IAAA;AAAA,EACjB,gBAAA,EAAkB,IAAA;AAAA,EAClB,eAAA,EAAiB,IAAA;AAAA,EACjB,MAAA,EAAQ,KAAA;AAAA,EACR,SAAA,EAAA,WAAA;AAAA,EACA,iBAAA,EAAmB,KAAA;AAAA,EACnB,WAAA,EAAa;AACf,CAAA;AAEO,IAAM,gBAAgBC,WAAAA,CAAY;AAAA,EACvC,IAAA,EAAM,UAAA;AAAA,EACN,YAAA,EAAAD,aAAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAA,KAAW;AACjC,MAAA,KAAA,CAAM,cAAc,MAAA,CAAO,OAAA;AAAA,IAC7B,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAW;AAChC,MAAA,KAAA,CAAM,aAAa,MAAA,CAAO,OAAA;AAAA,IAC5B,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAA,KAAW;AAC9B,MAAA,KAAA,CAAM,WAAW,MAAA,CAAO,OAAA;AAAA,IAC1B,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAW;AAChC,MAAA,KAAA,CAAM,aAAa,MAAA,CAAO,OAAA;AAAA,IAC5B,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,KAAA,EAAO,MAAA,KAAW;AAC7B,MAAA,KAAA,CAAM,UAAU,MAAA,CAAO,OAAA;AAAA,IACzB,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAA,KAAW;AACnC,MAAA,KAAA,CAAM,gBAAgB,MAAA,CAAO,OAAA;AAAA,IAC/B,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAW;AAChC,MAAA,KAAA,CAAM,aAAa,MAAA,CAAO,OAAA;AAAA,IAC5B,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAiC;AAGtD,MAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,EAAkC,UAAA,KAAkC;AAC5F,QAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,QAAA,IAAI,UAAA,KAAe,QAAW,OAAO,UAAA;AACrC,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAEA,MAAA,QAAQ,MAAA,CAAO,QAAQ,GAAA;AAAK,QAC1B,KAAK,SAAA;AACH,UAAA,IAAI,MAAA,CAAO,QAAQ,KAAA,EAAO;AACxB,YAAA,KAAA,CAAM,UAAA,GAAa;AAAA,cACjB,GAAG,KAAA,CAAM,UAAA;AAAA,cACT,OAAA,EAAS,OAAO,OAAA,CAAQ;AAAA,aAC1B;AAAA,UACF;AACA,UAAA;AAAA,QAEF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,UAAA,GAAa;AAAA,YACjB,GAAG,KAAA,CAAM,UAAA;AAAA,YACT,GAAA,EAAK;AAAA,cACH,GAAG,MAAM,UAAA,EAAY,GAAA;AAAA,cACrB,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,KAAA,KAAU,MAAA,GAC5B,OAAO,OAAA,CAAQ,KAAA,GACf,KAAA,CAAM,UAAA,EAAY,GAAA,EAAK,KAAA;AAAA,cAC3B,YAAY,gBAAA,CAAiB,MAAA,CAAO,QAAQ,KAAA,EAAO,MAAA,CAAO,QAAQ,UAAU;AAAA;AAC9E,WACF;AACA,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,UAAA,GAAa;AAAA,YACjB,GAAG,KAAA,CAAM,UAAA;AAAA,YACT,GAAA,EAAK;AAAA,cACH,GAAG,MAAM,UAAA,EAAY,GAAA;AAAA,cACrB,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,KAAA,KAAU,MAAA,GAC5B,OAAO,OAAA,CAAQ,KAAA,GACf,KAAA,CAAM,UAAA,EAAY,GAAA,EAAK,KAAA;AAAA,cAC3B,YAAY,gBAAA,CAAiB,MAAA,CAAO,QAAQ,KAAA,EAAO,MAAA,CAAO,QAAQ,UAAU;AAAA;AAC9E,WACF;AACA,UAAA;AAEA;AACJ,IACF,CAAA;AAAA,IACA,kBAAA,EAAoB,CAAC,KAAA,EAAO,MAAA,KAAW;AACrC,MAAA,KAAA,CAAM,kBAAkB,MAAA,CAAO,OAAA;AAAA,IACjC,CAAA;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAA,KAAW;AACtC,MAAA,KAAA,CAAM,mBAAmB,MAAA,CAAO,OAAA;AAAA,IAClC,CAAA;AAAA,IACA,kBAAA,EAAoB,CAAC,KAAA,EAAO,MAAA,KAAW;AACrC,MAAA,KAAA,CAAM,kBAAkB,MAAA,CAAO,OAAA;AAAA,IACjC,CAAA;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,EAAO,MAAA,KAAW;AAC5B,MAAA,KAAA,CAAM,SAAS,MAAA,CAAO,OAAA;AAAA,IACxB,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,EAAO,MAAA,KAAW;AAC/B,MAAA,KAAA,CAAM,YAAY,MAAA,CAAO,OAAA;AAAA,IAC3B,CAAA;AAAA,IACA,oBAAA,EAAsB,CAAC,KAAA,EAAO,MAAA,KAAW;AACvC,MAAA,KAAA,CAAM,oBAAoB,MAAA,CAAO,OAAA;AAAA,IACnC,CAAA;AAAA,IACA,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAA,KAAW;AACjC,MAAA,KAAA,CAAM,cAAc,MAAA,CAAO,OAAA;AAAA,IAC7B;AAAA;AAEJ,CAAC;AAGM,IAAM;AAAA,EACX,cAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,GAAI,aAAA,CAAc;AAElB,IAAO,0BAAQ,aAAA,CAAc,OAAA;ACnJ7B,IAAMA,aAAAA,GAAkC;AAAA,EACtC,UAAA,EAAY,KAAA;AAAA,EACZ,WAAA,EAAA,OAAA;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AAAA,EACA,oBAAA,EAAsB,KAAA;AAAA,EACtB,0BAAA,EAA4B,KAAA;AAAA,EAC5B,eAAA,EAAA,eAAA;AAAA,EACA,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY;AACd,CAAA;AAEO,IAAM,aAAaC,WAAAA,CAAY;AAAA,EACpC,IAAA,EAAM,SAAA;AAAA,EACN,YAAA,EAAAD,aAAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAW;AAChC,MAAA,KAAA,CAAM,aAAa,MAAA,CAAO,OAAA;AAAA,IAC5B,CAAA;AAAA,IACA,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAA,KAAW;AACjC,MAAA,KAAA,CAAM,cAAc,MAAA,CAAO,OAAA;AAAA,IAC7B,CAAA;AAAA,IACA,QAAA,EAAU,CAAC,KAAA,EAAO,MAAA,KAAoC;AACpD,MAAA,KAAA,CAAM,MAAM,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,KAAA,IAAS,MAAA;AAAA,IAC5D,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAA,KAAW;AACnC,MAAA,KAAA,CAAM,uBAAuB,MAAA,CAAO,OAAA;AAAA,IACtC,CAAA;AAAA,IACA,sBAAA,EAAwB,CAAC,KAAA,EAAO,MAAA,KAAW;AACzC,MAAA,KAAA,CAAM,6BAA6B,MAAA,CAAO,OAAA;AAAA,IAC5C,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAA,KAAW;AAC9B,MAAA,KAAA,CAAM,kBAAkB,MAAA,CAAO,OAAA;AAAA,IACjC,CAAA;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,EAAO,MAAA,KAAW;AAClC,MAAA,KAAA,CAAM,eAAe,MAAA,CAAO,OAAA;AAAA,IAC9B,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAW;AAChC,MAAA,KAAA,CAAM,aAAa,MAAA,CAAO,OAAA;AAAA,IAC5B;AAAA;AAEJ,CAAC;AAGM,IAAM;AAAA,EACX,aAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,GAAI,UAAA,CAAW;AAEf,IAAO,uBAAQ,UAAA,CAAW,OAAA;ACI1B,IAAMA,aAAAA,GAAoC;AAAA,EACxC,IAAA,EAAM;AAAA,IACJ,8BAAuB;AAAA,MACrB,SAAA,EAAW,IAAA;AAAA,MACX,MAAA,EAAQ,KAAA;AAAA,MACR,SAAA,EAAW;AAAA,KACb;AAAA,IACA,0BAAqB;AAAA,MACnB,SAAA,EAAW,IAAA;AAAA,MACX,MAAA,EAAQ,KAAA;AAAA,MACR,SAAA,EAAW;AAAA;AACb,GACF;AAAA,EACA,MAAM,EAAC;AAAA,EACP,UAAU;AACZ,CAAA;AAEO,IAAM,eAAeC,WAAAA,CAAY;AAAA,EACtC,IAAA,EAAM,SAAA;AAAA,EACN,YAAA,EAAAD,aAAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,UAAA,EAAY,CAAC,KAAA,EAAO,MAAA,KAAmC;AAIrD,MAAA,QAAO,MAAA,CAAO,QAAQ,UAAA;AAAY,QAChC,KAAA,cAAA;AAIE,UAAA,KAAA,MAAW,GAAA,IAAO,MAAM,IAAA,EAAM;AAC5B,YAAA,IAAI,MAAM,IAAA,CAAK,GAAuB,GAAG,OAAA,KAAY,MAAA,CAAO,QAAQ,UAAA,EAAY;AAC9E,cAAA,KAAA,CAAM,IAAA,CAAK,GAAuB,CAAA,GAAI;AAAA,gBACpC,GAAG,KAAA,CAAM,IAAA,CAAK,GAAuB,CAAA;AAAA,gBACrC,OAAA,EAAA,kBAAA;AAAA,gBACA,MAAA,EAAQ;AAAA,eACV;AAAA,YACF;AAAA,UACF;AAGA,UAAA,KAAA,CAAM,gCAAwB,GAAI;AAAA,YAChC,GAAG,MAAM,IAAA,CAAA,cAAA,aAAwB;AAAA,YACjC,SAAA,EAAW,OAAO,OAAA,CAAQ;AAAA,WAC5B;AAEA,UAAA,IAAI,MAAM,IAAA,CAAA,YAAA,WAAsB,CAAE,SAAA,KAAc,MAAA,CAAO,QAAQ,GAAA,EAAK;AAClE,YAAA,KAAA,CAAM,4BAAsB,GAAI;AAAA,cAC9B,GAAG,MAAM,IAAA,CAAA,YAAA,WAAsB;AAAA,cAC/B,SAAA,EAAW;AAAA,aACb;AAAA,UACF;AACA,UAAA;AAAA,QAEF,KAAA,YAAA;AAIE,UAAA,KAAA,MAAW,GAAA,IAAO,MAAM,IAAA,EAAM;AAC5B,YAAA,IAAI,MAAM,IAAA,CAAK,GAAuB,GAAG,OAAA,KAAY,MAAA,CAAO,QAAQ,UAAA,EAAY;AAC9E,cAAA,KAAA,CAAM,IAAA,CAAK,GAAuB,CAAA,GAAI;AAAA,gBACpC,GAAG,KAAA,CAAM,IAAA,CAAK,GAAuB,CAAA;AAAA,gBACrC,OAAA,EAAA,kBAAA;AAAA,gBACA,MAAA,EAAQ;AAAA,eACV;AAAA,YACF;AAAA,UACF;AAGA,UAAA,KAAA,CAAM,4BAAsB,GAAI;AAAA,YAC9B,GAAG,MAAM,IAAA,CAAA,YAAA,WAAsB;AAAA,YAC/B,SAAA,EAAW,OAAO,OAAA,CAAQ;AAAA,WAC5B;AAEA,UAAA,IAAI,MAAM,IAAA,CAAA,cAAA,aAAwB,CAAE,SAAA,KAAc,MAAA,CAAO,QAAQ,GAAA,EAAK;AACpE,YAAA,KAAA,CAAM,gCAAwB,GAAI;AAAA,cAChC,GAAG,MAAM,IAAA,CAAA,cAAA,aAAwB;AAAA,cACjC,SAAA,EAAW;AAAA,aACb;AAAA,UACF;AACA,UAAA;AAAA;AAAA,QAGF,KAAA,kBAAA;AAAA,QACA;AAEE,UAAA,IAAI,MAAM,IAAA,CAAA,cAAA,aAAwB,CAAE,SAAA,KAAc,MAAA,CAAO,QAAQ,GAAA,EAAK;AACpE,YAAA,KAAA,CAAM,gCAAwB,GAAI;AAAA,cAChC,GAAG,MAAM,IAAA,CAAA,cAAA,aAAwB;AAAA,cACjC,SAAA,EAAW;AAAA,aACb;AAAA,UACF;AACA,UAAA,IAAI,MAAM,IAAA,CAAA,YAAA,WAAsB,CAAE,SAAA,KAAc,MAAA,CAAO,QAAQ,GAAA,EAAK;AAClE,YAAA,KAAA,CAAM,4BAAsB,GAAI;AAAA,cAC9B,GAAG,MAAM,IAAA,CAAA,YAAA,WAAsB;AAAA,cAC/B,SAAA,EAAW;AAAA,aACb;AAAA,UACF;AACA,UAAA;AAAA;AAGJ,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,GAAI;AAAA,QAC/B,GAAG,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,QAChC,OAAA,EAAS,OAAO,OAAA,CAAQ;AAAA,OAC1B;AAAA,IACF,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAA,KAAmC;AAIxD,MAAA,MAAM,aAAa,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAA;AACnD,MAAA,IACI,CAAC,OAAO,OAAA,CAAQ,MAAA,IAChB,cACA,UAAA,KAAA,kBAAA,oBACA,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAE,SAAA,KAAc,OAAO,OAAA,CAAQ,GAAA,IACpD,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAE,UACvB,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAE,SAAA,EACzB;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,GAAI;AAAA,UACvB,GAAG,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AAAA,UACxB,SAAA,EAAW;AAAA,SACb;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,GAAI;AAAA,UAC/B,GAAG,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,UAChC,MAAA,EAAQ,OAAO,OAAA,CAAQ;AAAA,SACzB;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAA,KAAqC;AAC7D,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,GAAA,EAAK,OAAO,OAAA,CAAQ,GAAA;AAAA,QACpB,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,GAAG,CAAA,EAAG,MAAA,GAAS,CAAC,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,GAAG,MAAA,GAAS;AAAA,OAC7F;AACA,MAAA,YAAA,CAAa,YAAA,CAAa,cAAc,KAAA,EAAO;AAAA,QAC7C,IAAA,EAAM,kBAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAA,KAAsC;AACzD,MAAA,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,GAAI;AAAA,QACnC,GAAG,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,QACpC,MAAA,EAAQ,OAAO,OAAA,CAAQ;AAAA,OACzB;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAA,KAAmC;AAC5D,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,GAAI;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,CAAA;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAA,KAAmC;AAC9D,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,GAAI;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,MAAA,EAAQ;AAAA,OACV;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAA,KAAmC;AAC5D,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,GAAI;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,SAAA,EAAW;AAAA,OACb;AAAA,IACF,CAAA;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,EAAO,MAAA,KAAmC;AAC1D,MAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA,GAAI;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,SAAA,EAAW;AAAA,OACb;AAAA,IACF,CAAA;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAA,KAAwC;AAIjE,MAAA,MAAM,MAA+B,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,CAAE,SAAA;AACpE,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,UAChB,GAAG,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAAA,UACjB,WAAA,EAAa,OAAO,OAAA,CAAQ;AAAA,SAC9B;AAAA,MACF;AAGA,MAAA,IAAI,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,MAAM,IAAA,EAAM;AAC3C,QAAA,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,GAAI;AAAA,UAC/B,GAAG,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,UAChC,KAAA,EAAO,OAAO,OAAA,CAAQ;AAAA,SACxB;AAAA,MACF;AAAA,IACF;AAAA;AAEJ,CAAC;AAEM,IAAM;AAAA,EACX,UAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,GAAI,YAAA,CAAa;AAEjB,IAAO,yBAAQ,YAAA,CAAa,OAAA;ACvR5B,IAAMA,aAAAA,GAAwC;AAAA,EAC5C,WAAA,EAAa,MAAA;AAAA,EACb,KAAA,EAAO,KAAA;AAAA,EACP,KAAA,EAAO,KAAA;AAAA,EACP,aAAa,EAAC;AAAA,EACd,eAAe,EAAC;AAAA,EAChB,kBAAA,EAAoB,KAAA;AAAA,EACpB,gBAAA,EAAkB,KAAA;AAAA,EAClB,gBAAA,EAAkB;AACpB,CAAA;AAEO,IAAM,mBAAmBC,WAAAA,CAAY;AAAA,EAC1C,IAAA,EAAM,aAAA;AAAA,EACN,YAAA,EAAAD,aAAAA;AAAA,EACA,QAAA,EAAU;AAAA,IACR,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAA,KAAW;AACjC,MAAA,KAAA,CAAM,cAAc,MAAA,CAAO,OAAA;AAAA,IAC7B,CAAA;AAAA,IACA,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACzB,MAAA,KAAA,CAAM,QAAQ,MAAA,CAAO,OAAA;AAAA,IACvB,CAAA;AAAA,IACA,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AACzB,MAAA,KAAA,CAAM,QAAQ,MAAA,CAAO,OAAA;AAAA,IACvB,CAAA;AAAA,IACA,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAA,KAAW;AACjC,MAAA,KAAA,CAAM,cAAc,EAAC,GAAG,MAAM,WAAA,EAAa,GAAG,OAAO,OAAA,EAAQ;AAAA,IAC/D,CAAA;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAA,KAAW;AACnC,MAAA,KAAA,CAAM,gBAAgB,MAAA,CAAO,OAAA;AAAA,IAC/B,CAAA;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAA,KAAW;AACtC,MAAA,KAAA,CAAM,qBAAqB,MAAA,CAAO,OAAA;AAAA,IACpC,CAAA;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAA,KAAW;AACpC,MAAA,KAAA,CAAM,mBAAmB,MAAA,CAAO,OAAA;AAAA,IAClC,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAA,KAAW;AAC9B,MAAA,KAAA,CAAM,gBAAA,GAAmB;AAAA,QACvB,GAAG,MAAA,CAAO,OAAA;AAAA,QACV,GAAA,EAAK,OAAO,OAAA,CAAQ,GAAA,IAAO,EAAE,IAAA,EAAM,MAAA,EAAW,cAAc,MAAA;AAAU,OACxE;AAAA,IACF,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,KAAA,EAAO,MAAA,KAAW;AAC7B,MAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,QAAA,KAAA,CAAM,gBAAA,GAAmB;AAAA,UACvB,KAAK,EAAE,IAAA,EAAM,MAAA,CAAO,OAAA,EAAS,cAAc,MAAA;AAAU,SACvD;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,gBAAA,CAAiB,GAAA,EAAK;AACrC,QAAA,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,IAAA,GAAO,MAAA,CAAO,OAAA;AAAA,MAC3C,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,iBAAiB,GAAA,GAAM,EAAE,MAAM,MAAA,CAAO,OAAA,EAAS,cAAc,MAAA,EAAU;AAAA,MAC/E;AAAA,IACF,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAA,KAAW;AAC9B,MAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,QAAA,KAAA,CAAM,gBAAA,GAAmB;AAAA,UACvB,KAAK,EAAE,IAAA,EAAM,MAAA,EAAW,YAAA,EAAc,OAAO,OAAA;AAAQ,SACvD;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,gBAAA,CAAiB,GAAA,EAAK;AACrC,QAAA,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,YAAA,GAAe,MAAA,CAAO,OAAA;AAAA,MACnD,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,iBAAiB,GAAA,GAAM,EAAE,MAAM,MAAA,EAAW,YAAA,EAAc,OAAO,OAAA,EAAQ;AAAA,MAC/E;AAAA,IACF;AAAA;AAEJ,CAAC;AAGM,IAAM;AAAA,EACX,cAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,GAAI,gBAAA,CAAiB;AAErB,IAAO,6BAAQ,gBAAA,CAAiB,OAAA;;;ACxFhC,IAAA,eAAA,GAAqB,OAAA,CAAA,gBAAA,EAAA,CAAA;AAErB,IAAM,mBAAA,GAAsB,mBAAA;AAI5B,IAAM,iBAAA,GAAoB,CAAC,KAAA,KAA6B;AACtD,EAAA,IAAI,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,EAAU;AACnC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,QAAQ,KAAA,CAAM,KAAA;AAAA,QACd,KAAK,KAAA,CAAM;AAAA;AACb,KACF;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAGA,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAA+B;AACzD,EAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAAA,IACzB,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,MAC/C,GAAA;AAAA,MACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,KAAA,EAAO,OAAA,KAAA,kBAAA,oBAAuC,KAAA,EAAO,OAAA,IAAW,QAAQ,KAAA,EAAO,MAAA,KAAW,IAAA,GAAO,KAAA,GAAQ,KAAA,EAAO;AAAA;AAC1H,KACD;AAAA,GACH;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,IAAA,EAAM,WAAA;AAAA,IACN,UAAU;AAAC,GACb;AACF,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,UAAA,KAAwB;AACzC,EAAA,IAAI;AACF,IAAA,MAAM,cAAc,UAAA,IAAc,mBAAA;AAClC,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,OAAA,CAAQ,WAAW,CAAA;AACxD,IAAA,IAAI,oBAAoB,IAAA,EAAM;AAC5B,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,CAAA,EAAW,QAAA,EAAU,KAAA,CAAA,EAAW,SAAS,KAAA,CAAA,EAAU;AAAA,IACvE;AACA,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,KAAA,CAAM,eAAe,CAAA;AACpD,IAAA,iBAAA,CAAkB,OAAA,GAAU,kBAAA,CAAmB,iBAAA,CAAkB,OAAO,CAAA;AAIxE,IAAA,iBAAA,CAAkB,OAAA,GAAU,iBAAA,CAAkB,iBAAA,CAAkB,OAAO,CAAA;AAEvE,IAAA,OAAO,iBAAA;AAAA,EACT,SAAS,GAAA,EAAK;AACZ,IAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAW,QAAA,EAAU,MAAA,EAAW,SAAS,MAAA,EAAU;AAAA,EACvE;AACF,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,KAAA,EAAe,UAAA,KAAwB;AACxD,EAAA,IAAI;AACF,IAAA,MAAM,cAAc,UAAA,IAAc,mBAAA;AAClC,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAC5C,IAAA,YAAA,CAAa,OAAA,CAAQ,aAAa,eAAe,CAAA;AAAA,EACnD,SAAS,GAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,EACnB;AACF,CAAA;AAEO,IAAM,SAAA,GAAY,CAAC,UAAA,KAAwB;AAChD,EAAA,MAAM,QAAQ,cAAA,CAAe;AAAA,IAC3B,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,qBAAA;AAAA,MACR,QAAA,EAAU,uBAAA;AAAA,MACV,OAAA,EAAS,oBAAA;AAAA,MACT,OAAA,EAAS,sBAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACf;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,OAAA,EAAS,SAAA,CAAU,UAAU,CAAA,CAAE,OAAA;AAAA,MAC/B,QAAA,EAAU,SAAA,CAAU,UAAU,CAAA,CAAE,QAAA;AAAA,MAChC,OAAA,EAAS,SAAA,CAAU,UAAU,CAAA,CAAE;AAAA;AACjC,GACD,CAAA;AAED,EAAA,MAAM,kBAAA,GAAA,IAAqB,eAAA,CAAAD,OAAAA,EAAS,MAAM;AACxC,IAAA,SAAA,CAAU,KAAA,CAAM,QAAA,EAAS,EAAG,UAAU,CAAA;AAAA,EACxC,GAAG,GAAG,CAAA;AAEN,EAAA,KAAA,CAAM,UAAU,kBAAkB,CAAA;AAElC,EAAA,OAAO,KAAA;AACT;AC/FO,SAAS,eAAA,CAAgB;AAAA,EAC9B,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,QAAA,GAAW,OAAwB,IAAI,CAAA;AAC7C,EAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACrB,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA,IAAS,SAAA,CAAU,UAAU,CAAA;AAAA,EAClD;AAEA,EAAA,uBAAO,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAQ,QAAA,CAAS,SAAY,QAAA,EAAU,CAAA;AAC1D;ACjBO,IAAM,cAAA,GAAoC;AAC1C,IAAM,cAAA,GAAkD;AACxD,IAAM,WAAA,GAA8B","file":"chunk-KQLSID7M.mjs","sourcesContent":["function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { defaultPlatformModifier, UnstablePlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { ThSettingsContainerKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nexport interface ReaderReducerState {\n direction: ThLayoutDirection;\n isLoading: boolean;\n isImmersive: boolean;\n isHovering: boolean;\n hasScrollAffordance: boolean;\n hasArrows: boolean;\n isFullscreen: boolean;\n settingsContainer: ThSettingsContainerKeys;\n platformModifier: UnstablePlatformModifier;\n}\n\nconst initialState: ReaderReducerState = {\n direction: ThLayoutDirection.ltr,\n isLoading: true,\n isImmersive: false,\n isHovering: false,\n hasScrollAffordance: false,\n hasArrows: true,\n isFullscreen: false,\n settingsContainer: ThSettingsContainerKeys.initial,\n platformModifier: defaultPlatformModifier\n}\n\nexport const readerSlice = createSlice({\n name: \"reader\",\n initialState,\n reducers: {\n setDirection: (state, action) => {\n state.direction = action.payload\n },\n setLoading: (state, action) => {\n state.isLoading = action.payload\n },\n setPlatformModifier: (state, action) => {\n state.platformModifier = action.payload\n },\n setImmersive: (state, action) => {\n state.isImmersive = action.payload\n if (action.payload === true) {\n state.isHovering = false;\n state.hasScrollAffordance = false;\n }\n },\n toggleImmersive: (state) => {\n state.isImmersive = !state.isImmersive;\n if (state.isImmersive === true) {\n state.isHovering = false;\n state.hasScrollAffordance = false;\n }\n },\n setHovering: (state, action) => {\n state.isHovering = action.payload\n },\n setScrollAffordance: (state, action) => {\n state.hasScrollAffordance = action.payload\n if (action.payload === true) {\n state.isHovering = false;\n state.isImmersive = false;\n }\n },\n setArrows: (state, action) => {\n state.hasArrows = action.payload\n },\n setFullscreen: (state, action) => {\n state.isFullscreen = action.payload\n },\n setSettingsContainer: (state, action) => {\n state.settingsContainer = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setDirection, \n setLoading,\n setPlatformModifier, \n setImmersive, \n toggleImmersive, \n setHovering, \n setScrollAffordance, \n setArrows, \n setFullscreen, \n setSettingsContainer\n} = readerSlice.actions;\n\nexport default readerSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThLineHeightOptions, ThTextAlignOptions } from \"@/preferences/models/enums\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\n\nexport interface LineLengthStateObject {\n optimal?: number | null;\n min?: {\n chars?: number | null;\n isDisabled?: boolean;\n },\n max?: {\n chars?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SetLineLengthPayload {\n type: string;\n payload: {\n key: \"optimal\" | \"min\" | \"max\";\n value?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SettingsReducerState {\n columnCount: string;\n fontFamily: keyof typeof defaultFontFamilyOptions;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineHeight: ThLineHeightOptions;\n lineLength: LineLengthStateObject | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n textAlign: ThTextAlignOptions;\n textNormalization: boolean;\n wordSpacing: number | null;\n}\n\nconst initialState: SettingsReducerState = {\n columnCount: \"auto\",\n fontFamily: \"publisher\",\n fontSize: 1,\n fontWeight: 400,\n hyphens: null,\n letterSpacing: null,\n lineHeight: ThLineHeightOptions.publisher,\n lineLength: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n publisherStyles: true,\n scroll: false,\n textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\n}\n\nexport const settingsSlice = createSlice({\n name: \"settings\",\n initialState,\n reducers: {\n setColumnCount: (state, action) => {\n state.columnCount = action.payload\n },\n setFontFamily: (state, action) => {\n state.fontFamily = action.payload\n },\n setFontSize: (state, action) => {\n state.fontSize = action.payload\n },\n setFontWeight: (state, action) => {\n state.fontWeight = action.payload\n },\n setHyphens: (state, action) => {\n state.hyphens = action.payload\n },\n setLetterSpacing: (state, action) => {\n state.letterSpacing = action.payload\n },\n setLineHeight: (state, action) => {\n state.lineHeight = action.payload\n },\n setLineLength: (state, action: SetLineLengthPayload) => {\n // For min and max, we need to spread and handle isDisabled\n // when it is directly set, or depending on the payload value\n const deriveIsDisabled = (value: number | null | undefined, isDisabled?: boolean): boolean => {\n if (value === null) return true;\n if (isDisabled !== undefined) return isDisabled;\n return false;\n };\n\n switch (action.payload.key) {\n case \"optimal\":\n if (action.payload.value) {\n state.lineLength = {\n ...state.lineLength,\n optimal: action.payload.value\n };\n }\n break;\n \n case \"min\":\n state.lineLength = {\n ...state.lineLength,\n min: {\n ...state.lineLength?.min,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength?.min?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n case \"max\":\n state.lineLength = {\n ...state.lineLength,\n max: {\n ...state.lineLength?.max,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength?.max?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n default:\n break;\n }\n },\n setParagraphIndent: (state, action) => {\n state.paragraphIndent = action.payload\n },\n setParagraphSpacing: (state, action) => {\n state.paragraphSpacing = action.payload\n },\n setPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setScroll: (state, action) => {\n state.scroll = action.payload\n },\n setTextAlign: (state, action) => {\n state.textAlign = action.payload\n },\n setTextNormalization: (state, action) => {\n state.textNormalization = action.payload\n },\n setWordSpacing: (state, action) => {\n state.wordSpacing = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setColumnCount,\n setFontSize,\n setFontWeight, \n setFontFamily,\n setHyphens, \n setLetterSpacing,\n setLineHeight,\n setLineLength,\n setParagraphIndent,\n setParagraphSpacing,\n setPublisherStyles,\n setScroll,\n setTextAlign,\n setTextNormalization, \n setWordSpacing\n} = settingsSlice.actions;\n\nexport default settingsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\nimport { ThContrast } from \"@/core/Hooks/useContrast\";\nimport { ThBreakpoints } from \"@/preferences/models/enums\";\n\nexport interface ThemeStateObject {\n reflow?: string;\n fxl?: string;\n}\n\nexport interface ThemeStateChangePayload {\n type: string;\n payload: {\n key: \"reflow\" | \"fxl\";\n value?: string;\n }\n}\n\nexport interface ThemeReducerState {\n monochrome: boolean;\n colorScheme: ThColorScheme;\n theme: ThemeStateObject;\n prefersReducedMotion: boolean;\n prefersReducedTransparency: boolean;\n prefersContrast: ThContrast;\n forcedColors: boolean;\n breakpoint?: ThBreakpoints;\n}\n\nconst initialState: ThemeReducerState = {\n monochrome: false,\n colorScheme: ThColorScheme.light,\n theme: {\n reflow: \"auto\",\n fxl: \"auto\"\n },\n prefersReducedMotion: false,\n prefersReducedTransparency: false, \n prefersContrast: ThContrast.none,\n forcedColors: false, \n breakpoint: undefined\n}\n\nexport const themeSlice = createSlice({\n name: \"theming\",\n initialState,\n reducers: {\n setMonochrome: (state, action) => {\n state.monochrome = action.payload\n },\n setColorScheme: (state, action) => {\n state.colorScheme = action.payload\n },\n setTheme: (state, action: ThemeStateChangePayload) => {\n state.theme[action.payload.key] = action.payload.value || \"auto\"\n },\n setReducedMotion: (state, action) => {\n state.prefersReducedMotion = action.payload\n },\n setReducedTransparency: (state, action) => {\n state.prefersReducedTransparency = action.payload\n },\n setContrast: (state, action) => {\n state.prefersContrast = action.payload\n },\n setForcedColors: (state, action) => {\n state.forcedColors = action.payload\n },\n setBreakpoint: (state, action) => {\n state.breakpoint = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setMonochrome, \n setColorScheme, \n setTheme, \n setReducedMotion, \n setReducedTransparency, \n setContrast, \n setForcedColors, \n setBreakpoint,\n} = themeSlice.actions;\n\nexport default themeSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThDockingKeys } from \"../preferences/models/enums\";\n\nexport type ActionsStateKeys = string;\nexport type OverflowStateKeys = string; \n\nexport interface ActionStateObject {\n isOpen?: boolean | null;\n docking?: ThDockingKeys | null;\n dockedWidth?: number;\n}\n\nexport interface OverflowStateObject {\n isOpen: boolean;\n}\n\nexport interface DockStateObject {\n actionKey: ActionsStateKeys | null;\n active: boolean;\n collapsed: boolean;\n width?: number;\n}\n\nexport interface ActionStateDockPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n dockingKey: ThDockingKeys;\n }\n}\n\nexport interface ActionStateOpenPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n isOpen: boolean;\n }\n}\n\nexport interface ActionStateTogglePayload {\n type: string;\n payload: {\n key: ActionsStateKeys\n }\n}\n\nexport interface ActionOverflowOpenPayload {\n type: string;\n payload: {\n key: OverflowStateKeys;\n isOpen: boolean;\n }\n}\n\nexport interface ActionStateDockedPayload {\n type: string;\n payload: { \n slot: ThDockingKeys.start | ThDockingKeys.end;\n docked: DockStateObject;\n }\n}\n\nexport interface ActionStateSlotPayload {\n type: string;\n payload: ThDockingKeys.start | ThDockingKeys.end;\n}\n\nexport interface ActionStateSlotWidthPayload {\n type: string;\n payload: { \n key: ThDockingKeys.start | ThDockingKeys.end;\n width: number;\n }\n}\n\nexport interface DockState {\n [ThDockingKeys.start]: DockStateObject;\n [ThDockingKeys.end]: DockStateObject;\n}\n\nexport type ActionsReducerState = {\n keys: {\n [key in ActionsStateKeys]?: ActionStateObject;\n };\n dock: DockState,\n overflow: {\n [key in OverflowStateKeys]?: OverflowStateObject;\n }\n}\n\nconst initialState: ActionsReducerState = {\n dock: {\n [ThDockingKeys.start]: {\n actionKey: null,\n active: false,\n collapsed: false\n },\n [ThDockingKeys.end]: {\n actionKey: null,\n active: false,\n collapsed: false\n }\n },\n keys: {},\n overflow: {}\n}\n\nexport const actionsSlice = createSlice({\n name: \"actions\",\n initialState,\n reducers: {\n dockAction: (state, action: ActionStateDockPayload) => {\n // The user should be able to override the dock slot\n // so we override the previous value, and sync \n // any other action with the same docking key\n switch(action.payload.dockingKey) {\n case ThDockingKeys.start:\n // We need to find if any other action has the same docking key. \n // If it does, we also have to close it so that its transient sheet \n // doesn’t pop over on the screen when it’s replaced\n for (const key in state.keys) {\n if (state.keys[key as ActionsStateKeys]?.docking === action.payload.dockingKey) {\n state.keys[key as ActionsStateKeys] = { \n ...state.keys[key as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: action.payload.key\n }\n // And remove it from the other one\n if (state.dock[ThDockingKeys.end].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: null\n }\n }\n break;\n\n case ThDockingKeys.end:\n // We need to find if any other action has the same docking key. \n // If it does, we also have to close it so that its transient sheet \n // doesn’t pop over on the screen when it’s replaced\n for (const key in state.keys) {\n if (state.keys[key as ActionsStateKeys]?.docking === action.payload.dockingKey) {\n state.keys[key as ActionsStateKeys] = { \n ...state.keys[key as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: action.payload.key\n }\n // And remove it from the other one\n if (state.dock[ThDockingKeys.start].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: null\n }\n }\n break;\n\n // We don’t need to sync another action\n case ThDockingKeys.transient:\n default: \n // We need to empty the docking slot\n if (state.dock[ThDockingKeys.start].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: null\n }\n }\n if (state.dock[ThDockingKeys.end].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: null\n }\n } \n break;\n }\n\n state.keys[action.payload.key] = { \n ...state.keys[action.payload.key],\n docking: action.payload.dockingKey \n };\n },\n setActionOpen: (state, action: ActionStateOpenPayload) => { \n // If the action is docked and set Open, we must take care of \n // the dock panel’s collapsibility. Otherwise we end up with bugs \n // i.e. user has to click/tap action icon twice to open, \n const dockingKey = state.keys[action.payload.key]?.docking;\n if (\n !action.payload.isOpen && \n dockingKey && \n dockingKey !== ThDockingKeys.transient &&\n state.dock[dockingKey].actionKey === action.payload.key &&\n state.dock[dockingKey].active &&\n state.dock[dockingKey].collapsed\n ) {\n state.dock[dockingKey] = {\n ...state.dock[dockingKey],\n collapsed: false\n }\n } else {\n state.keys[action.payload.key] = {\n ...state.keys[action.payload.key],\n isOpen: action.payload.isOpen \n };\n }\n },\n toggleActionOpen: (state, action: ActionStateTogglePayload) => {\n const payload = {\n key: action.payload.key,\n isOpen: state.keys[action.payload.key]?.isOpen ? !state.keys[action.payload.key]?.isOpen : true\n };\n actionsSlice.caseReducers.setActionOpen(state, {\n type: \"toggleActionOpen\",\n payload: payload\n });\n },\n setOverflow: (state, action: ActionOverflowOpenPayload) => {\n state.overflow[action.payload.key] = {\n ...state.overflow[action.payload.key],\n isOpen: action.payload.isOpen \n }\n },\n activateDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n active: true\n }\n },\n deactivateDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n active: false\n }\n },\n collapseDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n collapsed: true\n }\n },\n expandDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n collapsed: false\n }\n },\n setDockPanelWidth: (state, action: ActionStateSlotWidthPayload) => {\n // Copy the value in the action state \n // in case we do something with it later.\n\n const key: ActionsStateKeys | null = state.dock[action.payload.key].actionKey;\n if (key) {\n state.keys[key] = {\n ...state.keys[key],\n dockedWidth: action.payload.width\n }\n }\n\n // We only care if it’s populated.\n if (state.dock[action.payload.key] !== null) {\n state.dock[action.payload.key] = {\n ...state.dock[action.payload.key],\n width: action.payload.width\n }\n }\n }\n }\n})\n\nexport const { \n dockAction, \n setActionOpen, \n toggleActionOpen, \n setOverflow, \n activateDockPanel, \n deactivateDockPanel, \n collapseDockPanel,\n expandDockPanel, \n setDockPanelWidth\n} = actionsSlice.actions;\n\nexport default actionsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { UnstableProgressionObject } from \"@/components/StatefulReaderProgression\";\nimport { Locator } from \"@readium/shared\";\nimport { UnstableTimeline } from \"@/core/Hooks/useTimeline\";\n\nexport interface PublicationReducerState {\n runningHead?: string;\n isFXL: boolean;\n isRTL: boolean;\n progression: UnstableProgressionObject;\n positionsList: Locator[],\n atPublicationStart: boolean;\n atPublicationEnd: boolean;\n unstableTimeline?: UnstableTimeline;\n}\n\nconst initialState: PublicationReducerState = {\n runningHead: undefined,\n isFXL: false,\n isRTL: false,\n progression: {},\n positionsList: [],\n atPublicationStart: false,\n atPublicationEnd: false,\n unstableTimeline: undefined\n}\n\nexport const publicationSlice = createSlice({\n name: \"publication\",\n initialState,\n reducers: {\n setRunningHead: (state, action) => {\n state.runningHead = action.payload\n },\n setFXL: (state, action) => {\n state.isFXL = action.payload\n },\n setRTL: (state, action) => {\n state.isRTL = action.payload\n },\n setProgression: (state, action) => {\n state.progression = {...state.progression, ...action.payload }\n },\n setPositionsList: (state, action) => {\n state.positionsList = action.payload\n },\n setPublicationStart: (state, action) => {\n state.atPublicationStart = action.payload\n },\n setPublicationEnd: (state, action) => {\n state.atPublicationEnd = action.payload\n },\n setTimeline: (state, action) => {\n state.unstableTimeline = {\n ...action.payload,\n toc: action.payload.toc || { tree: undefined, currentEntry: undefined }\n };\n },\n setTocTree: (state, action) => {\n if (!state.unstableTimeline) {\n state.unstableTimeline = {\n toc: { tree: action.payload, currentEntry: undefined }\n };\n } else if (state.unstableTimeline.toc) {\n state.unstableTimeline.toc.tree = action.payload;\n } else {\n state.unstableTimeline.toc = { tree: action.payload, currentEntry: undefined };\n }\n },\n setTocEntry: (state, action) => {\n if (!state.unstableTimeline) {\n state.unstableTimeline = {\n toc: { tree: undefined, currentEntry: action.payload }\n };\n } else if (state.unstableTimeline.toc) {\n state.unstableTimeline.toc.currentEntry = action.payload;\n } else {\n state.unstableTimeline.toc = { tree: undefined, currentEntry: action.payload };\n }\n }\n }\n});\n\n// Action creators are generated for each case reducer function\nexport const { \n setRunningHead,\n setFXL,\n setRTL,\n setProgression,\n setPositionsList,\n setPublicationStart,\n setPublicationEnd,\n setTimeline,\n setTocTree, \n setTocEntry,\n} = publicationSlice.actions;\n\nexport default publicationSlice.reducer;","import { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport { configureStore } from \"@reduxjs/toolkit\";\n\nimport readerReducer from \"@/lib/readerReducer\";\nimport settingsReducer from \"@/lib/settingsReducer\";\nimport themeReducer, { ThemeReducerState } from \"@/lib/themeReducer\";\nimport actionsReducer, { ActionsReducerState } from \"@/lib/actionsReducer\";\nimport publicationReducer from \"./publicationReducer\";\n\nimport debounce from \"debounce\";\n\nconst DEFAULT_STORAGE_KEY = \"thorium-web-state\";\n\n// TMP Migration\n// TODO: Remove this in the next major version\nconst migrateThemeState = (state: ThemeReducerState) => {\n if (typeof state.theme === \"string\") {\n return {\n ...state,\n theme: {\n reflow: state.theme,\n fxl: state.theme\n }\n };\n }\n return state;\n};\n\n\nconst updateActionsState = (state: ActionsReducerState) => {\n const updatedKeys = Object.fromEntries(\n Object.entries(state.keys).map(([key, value]) => [\n key,\n {\n ...value,\n isOpen: value?.docking === ThDockingKeys.transient || value?.docking == null && value?.isOpen === true ? false : value?.isOpen,\n },\n ])\n );\n\n return {\n ...state,\n keys: updatedKeys,\n overflow: {}\n };\n};\n\nconst loadState = (storageKey?: string) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n const serializedState = localStorage.getItem(resolvedKey);\n if (serializedState === null) {\n return { actions: undefined, settings: undefined, theming: undefined };\n }\n const deserializedState = JSON.parse(serializedState);\n deserializedState.actions = updateActionsState(deserializedState.actions);\n \n // TMP Migration\n // TODO: Remove this in the next major version\n deserializedState.theming = migrateThemeState(deserializedState.theming);\n\n return deserializedState;\n } catch (err) {\n return { actions: undefined, settings: undefined, theming: undefined };\n }\n};\n\nconst saveState = (state: object, storageKey?: string) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n const serializedState = JSON.stringify(state);\n localStorage.setItem(resolvedKey, serializedState);\n } catch (err) {\n console.error(err);\n }\n};\n\nexport const makeStore = (storageKey?: string) => {\n const store = configureStore({\n reducer: {\n reader: readerReducer,\n settings: settingsReducer,\n theming: themeReducer,\n actions: actionsReducer,\n publication: publicationReducer\n },\n preloadedState: {\n actions: loadState(storageKey).actions,\n settings: loadState(storageKey).settings,\n theming: loadState(storageKey).theming\n },\n });\n\n const saveStateDebounced = debounce(() => {\n saveState(store.getState(), storageKey);\n }, 250);\n\n store.subscribe(saveStateDebounced);\n\n return store;\n}\n\n// Infer the type of makeStore\nexport type AppStore = ReturnType<typeof makeStore>;\n// Infer the `RootState` and `AppDispatch` types from the store itself\nexport type RootState = ReturnType<AppStore[\"getState\"]>;\nexport type AppDispatch = AppStore[\"dispatch\"];","\"use client\";\n\nimport { useRef } from \"react\";\nimport { Provider } from \"react-redux\";\nimport { makeStore, AppStore } from \"./store\";\n\nexport function ThStoreProvider({\n storageKey,\n store,\n children\n}: {\n storageKey?: string,\n store?: AppStore,\n children: React.ReactNode\n}) {\n const storeRef = useRef<AppStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = store || makeStore(storageKey);\n }\n\n return <Provider store={ storeRef.current }>{ children }</Provider>\n}\n\nexport default ThStoreProvider;","import { TypedUseSelectorHook, useDispatch, useSelector, useStore } from \"react-redux\";\nimport type { AppDispatch, AppStore, RootState } from \"./store\";\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch: () => AppDispatch = useDispatch;\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\nexport const useAppStore: () => AppStore = useStore;"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/Components/Actions/hooks/useCollapsibility.ts"],"names":["ThCollapsibilityVisibility","actionIcons","menuItems"],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/core/Components/Actions/hooks/useCollapsibility.ts"],"names":["ThCollapsibilityVisibility","actionIcons","menuItems"],"mappings":";;;AAQO,IAAK,0BAAA,qBAAAA,2BAAAA,KAAL;AACL,EAAAA,4BAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,4BAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,4BAAA,UAAA,CAAA,GAAW,UAAA;AAHD,EAAA,OAAAA,2BAAAA;AAAA,CAAA,EAAA,0BAAA,IAAA,EAAA;AAiBL,IAAM,iBAAA,GAAoB,CAAC,KAAA,EAAgC,KAAA,EAAwB,UAAA,KAAwB;AAChH,EAAA,MAAM,CAAC,WAAA,EAAa,SAAS,CAAA,GAAI,QAAQ,MAAM;AAC7C,IAAA,MAAMC,eAAuC,EAAC;AAC9C,IAAA,MAAMC,aAAqC,EAAC;AAE5C,IAAA,IAAI,SAAA,GAAoB,CAAA;AAExB,IAAA,IAAI,MAAM,QAAA,EAAU;AAElB,MAAA,IAAI,OAAO,KAAA,CAAM,QAAA,KAAa,YAAY,EAAE,KAAA,CAAM,oBAAoB,OAAA,CAAA,EAAU;AAC9E,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,QAAA,CAAS,UAAU,CAAA;AACnD,UAAA,IAAI,iBAAA,EAAmB;AACrB,YAAA,IAAI,sBAAsB,KAAA,EAAO;AAC/B,cAAA,SAAA,GAAY,CAAA;AAAA,YACd,CAAA,MAAA,IAAW,CAAC,KAAA,CAAM,iBAAiB,CAAA,EAAG;AACpC,cAAA,IAAI,iBAAA,KAAsB,MAAM,MAAA,EAAQ;AACtC,gBAAA,SAAA,GAAY,CAAA;AAAA,cACd,CAAA,MAAA,IAAW,iBAAA,GAAoB,KAAA,CAAM,MAAA,EAAQ;AAG3C,gBAAA,SAAA,GAAY,KAAA,CAAM,UAAU,iBAAA,GAAoB,CAAA,CAAA;AAAA,cAClD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAGA,MAAA,CAAC,GAAG,KAAK,CAAA,CAAE,KAAA,GAAQ,OAAA,EAAQ,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS;AACzC,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AACtC,QAAA,IAAI,UAAA,CAAW,eAAe,UAAA,iBAAqC;AACjE,UAAAA,UAAAA,CAAU,QAAQ,IAAI,CAAA;AACtB,UAAA,EAAE,SAAA;AAAA,QACJ,CAAA,MAAA,IAAW,UAAA,CAAW,UAAA,KAAe,WAAA,kBAAsC;AACzE,UAAA,IAAI,YAAY,CAAA,EAAG;AACjB,YAAAA,UAAAA,CAAU,QAAQ,IAAI,CAAA;AACtB,YAAA,EAAE,SAAA;AAAA,UACJ,CAAA,MAAO;AACL,YAAAD,YAAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,UAC1B;AAAA,QACF,CAAA,MAAO;AACL,UAAAA,YAAAA,CAAY,QAAQ,IAAI,CAAA;AAAA,QAC1B;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AAClB,QAAAA,YAAAA,CAAY,KAAK,IAAI,CAAA;AAAA,MACvB,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,CAACA,cAAaC,UAAS,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAA,EAAO,UAAU,CAAC,CAAA;AAE7B,EAAA,OAAO,EAAE,WAAA,EAAa,WAAA,EAAa,SAAA,EAAW,SAAA,EAAU;AAC1D","file":"chunk-MLEYTQGK.mjs","sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\n\nimport { ThActionEntry } from \"../ThActionsBar\";\n\nexport type ThCollapsibility = boolean | Record<string, number | \"all\">;\n\nexport enum ThCollapsibilityVisibility {\n always = \"always\",\n partially = \"partially\",\n overflow = \"overflow\"\n}\n\nexport interface CollapsiblePref {\n displayOrder: string[];\n collapse: ThCollapsibility;\n keys: {\n [key: string]: {\n [key: string]: any;\n visibility: ThCollapsibilityVisibility;\n };\n }\n}\n\nexport const useCollapsibility = (items: ThActionEntry<string>[], prefs: CollapsiblePref, breakpoint?: string) => {\n const [actionIcons, menuItems] = useMemo(() => {\n const actionIcons: ThActionEntry<string>[] = [];\n const menuItems: ThActionEntry<string>[] = [];\n\n let countdown: number = 0;\n\n if (prefs.collapse) {\n // Handling number of items to collapse\n if (typeof prefs.collapse === \"object\" && !(prefs.collapse instanceof Boolean)) {\n if (breakpoint) {\n const prefForBreakpoint = prefs.collapse[breakpoint];\n if (prefForBreakpoint) {\n if (prefForBreakpoint === \"all\") {\n countdown = 0;\n } else if (!isNaN(prefForBreakpoint)) {\n if (prefForBreakpoint === items.length) {\n countdown = 0;\n } else if (prefForBreakpoint < items.length) {\n // We must take the overflow icon into account so that\n // it doesn’t contain only one partially visible item \n countdown = items.length - (prefForBreakpoint - 1);\n }\n }\n }\n }\n }\n\n // Creating a shallow copy so that actionsOrder doesn’t mutate between rerenders\n [...items].slice().reverse().map((item) => {\n const actionPref = prefs.keys[item.key];\n if (actionPref.visibility === ThCollapsibilityVisibility.overflow) {\n menuItems.unshift(item);\n --countdown;\n } else if (actionPref.visibility === ThCollapsibilityVisibility.partially) {\n if (countdown > 0) {\n menuItems.unshift(item);\n --countdown;\n } else {\n actionIcons.unshift(item);\n }\n } else {\n actionIcons.unshift(item);\n }\n });\n } else {\n // collapse set to false so we ignore visibility and don’t triage\n items.map((item) => {\n actionIcons.push(item);\n });\n }\n\n return [actionIcons, menuItems];\n }, [items, prefs, breakpoint]);\n\n return { ActionIcons: actionIcons, MenuItems: menuItems };\n}"]}
|