@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.
Files changed (63) hide show
  1. package/LICENSE +1 -1
  2. package/dist/{ThSettingsWrapper-De4qvjsh.d.mts → ThSettingsWrapper-CA2_0nQz.d.mts} +1 -1
  3. package/dist/{actionsReducer-e808e6V_.d.mts → actionsReducer-D4Mphfuv.d.mts} +1 -1
  4. package/dist/chunk-BNPR6V7V.mjs.map +1 -1
  5. package/dist/chunk-IEYR7QV7.mjs.map +1 -1
  6. package/dist/{chunk-O4MBY6P4.mjs → chunk-KQLSID7M.mjs} +52 -20
  7. package/dist/chunk-KQLSID7M.mjs.map +1 -0
  8. package/dist/chunk-MLEYTQGK.mjs.map +1 -1
  9. package/dist/chunk-NA3KMUS4.mjs +417 -0
  10. package/dist/chunk-NA3KMUS4.mjs.map +1 -0
  11. package/dist/{chunk-GHEGQBCW.mjs → chunk-NOV43IG4.mjs} +4 -18
  12. package/dist/chunk-NOV43IG4.mjs.map +1 -0
  13. package/dist/chunk-NQ2ZSGCX.mjs.map +1 -1
  14. package/dist/{chunk-TWGRY5SW.mjs → chunk-RQFPGXWN.mjs} +29 -22
  15. package/dist/chunk-RQFPGXWN.mjs.map +1 -0
  16. package/dist/{chunk-BVSROK7Z.mjs → chunk-SDVDRPT5.mjs} +116 -6
  17. package/dist/chunk-SDVDRPT5.mjs.map +1 -0
  18. package/dist/chunk-TTGURRX3.mjs.map +1 -1
  19. package/dist/{chunk-PGZF5NO2.mjs → chunk-TXILKP4F.mjs} +16 -12
  20. package/dist/chunk-TXILKP4F.mjs.map +1 -0
  21. package/dist/components/Epub/index.d.mts +48 -25
  22. package/dist/components/Epub/index.mjs +877 -407
  23. package/dist/components/Epub/index.mjs.map +1 -1
  24. package/dist/{const-DGYvRLhk.d.mts → const-IAfi9t_g.d.mts} +14 -11
  25. package/dist/core/Components/index.d.mts +52 -6
  26. package/dist/core/Components/index.mjs +2 -2
  27. package/dist/core/Helpers/index.d.mts +3 -9
  28. package/dist/core/Helpers/index.mjs +2 -3
  29. package/dist/core/Hooks/index.d.mts +15 -5
  30. package/dist/core/Hooks/index.mjs +2 -3
  31. package/dist/{enums-DxbWWvn7.d.mts → enums-DqGQ66r1.d.mts} +1 -23
  32. package/dist/lib/index.d.mts +355 -11
  33. package/dist/lib/index.mjs +2 -3
  34. package/dist/{overflowMenu.module-XQRI7RJJ.module.css → overflowMenu.module-FO27A2A3.module.css} +12 -0
  35. package/dist/preferences/index.d.mts +6 -6
  36. package/dist/preferences/index.mjs +2 -3
  37. package/dist/publicationGrid.module-T6ISNRGM.module.css +70 -0
  38. package/dist/{reader-QFK7DGLX.css → reader-NGCQJKLX.css} +74 -36
  39. package/dist/{readerArrowButton.module-NHAUIQXS.module.css → readerArrowButton.module-EFLOIADG.module.css} +4 -0
  40. package/dist/{readerHeader.module-OBKZATSW.module.css → readerHeader.module-K7OLOIJP.module.css} +2 -7
  41. package/dist/{readerLoader.module-U6LLXOVQ.module.css → readerLoader.module-KDBPCQZJ.module.css} +1 -1
  42. package/dist/readerPagination.module-W4IAEOSH.module.css +73 -0
  43. package/dist/readerProgression.module-7PU7L74S.module.css +5 -0
  44. package/dist/{readerSharedUI.module-MCLGNG22.module.css → readerSharedUI.module-Y2VDWFS5.module.css} +1 -5
  45. package/dist/{sheets.module-DDN7GPMG.module.css → sheets.module-NA32WOSZ.module.css} +4 -4
  46. package/dist/{toc.module-XJLXQM7G.module.css → toc.module-KNW5CKIY.module.css} +1 -0
  47. package/dist/{useBreakpoints-I7vHrywa.d.mts → useBreakpoints-BQaiwecQ.d.mts} +1 -1
  48. package/dist/{useEpubNavigator-BrV4MYJy.d.mts → useEpubNavigator-DFRJ_tHa.d.mts} +9 -10
  49. package/dist/{usePreferences-B55XqFto.d.mts → usePreferences-BMyBhq7F.d.mts} +1 -1
  50. package/dist/useTimeline-Bid5B7AQ.d.mts +39 -0
  51. package/package.json +31 -22
  52. package/dist/bookUrlConverter.module-J46O27CR.module.css +0 -63
  53. package/dist/chunk-3QS3WKRC.mjs +0 -29
  54. package/dist/chunk-3QS3WKRC.mjs.map +0 -1
  55. package/dist/chunk-BVSROK7Z.mjs.map +0 -1
  56. package/dist/chunk-GHEGQBCW.mjs.map +0 -1
  57. package/dist/chunk-JS5WI5D4.mjs +0 -600
  58. package/dist/chunk-JS5WI5D4.mjs.map +0 -1
  59. package/dist/chunk-O4MBY6P4.mjs.map +0 -1
  60. package/dist/chunk-PGZF5NO2.mjs.map +0 -1
  61. package/dist/chunk-TWGRY5SW.mjs.map +0 -1
  62. package/dist/index-ClB-1iNN.d.mts +0 -356
  63. package/dist/readerProgression.module-S5R3Y6JI.module.css +0 -11
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  BSD 3-Clause License
2
2
 
3
- Copyright (c) 2024, Readium
3
+ Copyright (c) 2024, EDRLab (European Digital Reading Lab)
4
4
 
5
5
  Redistribution and use in source and binary forms, with or without
6
6
  modification, are permitted provided that the following conditions are met:
@@ -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<HTMLLIElement>;
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 { c as ThDockingKeys } from './enums-DxbWWvn7.mjs';
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":"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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
+ {"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-3QS3WKRC.mjs';
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.min,
210
- chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength.min?.chars,
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.max,
220
- chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength.max?.chars,
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
- tocTree: void 0,
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.tocTree = action.payload;
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.tocEntry = action.payload;
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, setLayoutStrategy, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
641
- //# sourceMappingURL=chunk-O4MBY6P4.mjs.map
642
- //# sourceMappingURL=chunk-O4MBY6P4.mjs.map
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":";;;AAQY,IAAA,0BAAA,qBAAAA,2BAAL,KAAA;AACL,EAAAA,4BAAA,QAAS,CAAA,GAAA,QAAA;AACT,EAAAA,4BAAA,WAAY,CAAA,GAAA,WAAA;AACZ,EAAAA,4BAAA,UAAW,CAAA,GAAA,UAAA;AAHD,EAAAA,OAAAA,2BAAAA;AAAA,CAAA,EAAA,0BAAA,IAAA,EAAA;AAiBL,IAAM,iBAAoB,GAAA,CAAC,KAAgC,EAAA,KAAA,EAAwB,UAAwB,KAAA;AAChH,EAAA,MAAM,CAAC,WAAA,EAAa,SAAS,CAAA,GAAI,QAAQ,MAAM;AAC7C,IAAA,MAAMC,eAAuC,EAAC;AAC9C,IAAA,MAAMC,aAAqC,EAAC;AAE5C,IAAA,IAAI,SAAoB,GAAA,CAAA;AAExB,IAAA,IAAI,MAAM,QAAU,EAAA;AAElB,MAAA,IAAI,OAAO,KAAM,CAAA,QAAA,KAAa,YAAY,EAAE,KAAA,CAAM,oBAAoB,OAAU,CAAA,EAAA;AAC9E,QAAA,IAAI,UAAY,EAAA;AACd,UAAM,MAAA,iBAAA,GAAoB,KAAM,CAAA,QAAA,CAAS,UAAU,CAAA;AACnD,UAAA,IAAI,iBAAmB,EAAA;AACrB,YAAA,IAAI,sBAAsB,KAAO,EAAA;AAC/B,cAAY,SAAA,GAAA,CAAA;AAAA,aACH,MAAA,IAAA,CAAC,KAAM,CAAA,iBAAiB,CAAG,EAAA;AACpC,cAAI,IAAA,iBAAA,KAAsB,MAAM,MAAQ,EAAA;AACtC,gBAAY,SAAA,GAAA,CAAA;AAAA,eACd,MAAA,IAAW,iBAAoB,GAAA,KAAA,CAAM,MAAQ,EAAA;AAG3C,gBAAY,SAAA,GAAA,KAAA,CAAM,UAAU,iBAAoB,GAAA,CAAA,CAAA;AAAA;AAClD;AACF;AACF;AACF;AAIF,MAAC,CAAA,GAAG,KAAK,CAAE,CAAA,KAAA,GAAQ,OAAQ,EAAA,CAAE,GAAI,CAAA,CAAC,IAAS,KAAA;AACzC,QAAA,MAAM,UAAa,GAAA,KAAA,CAAM,IAAK,CAAA,IAAA,CAAK,GAAG,CAAA;AACtC,QAAI,IAAA,UAAA,CAAW,eAAe,UAAqC,iBAAA;AACjE,UAAAA,UAAAA,CAAU,QAAQ,IAAI,CAAA;AACtB,UAAE,EAAA,SAAA;AAAA,SACJ,MAAA,IAAW,UAAW,CAAA,UAAA,KAAe,WAAsC,kBAAA;AACzE,UAAA,IAAI,YAAY,CAAG,EAAA;AACjB,YAAAA,UAAAA,CAAU,QAAQ,IAAI,CAAA;AACtB,YAAE,EAAA,SAAA;AAAA,WACG,MAAA;AACL,YAAAD,YAAAA,CAAY,QAAQ,IAAI,CAAA;AAAA;AAC1B,SACK,MAAA;AACL,UAAAA,YAAAA,CAAY,QAAQ,IAAI,CAAA;AAAA;AAC1B,OACD,CAAA;AAAA,KACI,MAAA;AAEL,MAAM,KAAA,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AAClB,QAAAA,YAAAA,CAAY,KAAK,IAAI,CAAA;AAAA,OACtB,CAAA;AAAA;AAGH,IAAO,OAAA,CAACA,cAAaC,UAAS,CAAA;AAAA,GAC7B,EAAA,CAAC,KAAO,EAAA,KAAA,EAAO,UAAU,CAAC,CAAA;AAE7B,EAAA,OAAO,EAAE,WAAA,EAAa,WAAa,EAAA,SAAA,EAAW,SAAU,EAAA;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}"]}
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}"]}