@edrlab/thorium-web 1.0.5 → 1.0.7

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 (62) hide show
  1. package/dist/StatefulReader-BWwn9QKQ.d.mts +378 -0
  2. package/dist/{ThPreferencesAdapter-DrpMdZt6.d.mts → ThPreferencesAdapter-CbAb0Vth.d.mts} +25 -4
  3. package/dist/{ThSettingsWrapper-cIeG-ame.d.mts → ThSettingsWrapper-Cz0dIHPG.d.mts} +54 -17
  4. package/dist/{actionsReducer-CwI-Bgzm.d.mts → actionsReducer-BKoeohBu.d.mts} +2 -2
  5. package/dist/{chunk-F5DEEGRL.mjs → chunk-3KRYGUCM.mjs} +3 -3
  6. package/dist/{chunk-F5DEEGRL.mjs.map → chunk-3KRYGUCM.mjs.map} +1 -1
  7. package/dist/{chunk-IEYR7QV7.mjs → chunk-5LUMM7FW.mjs} +3 -3
  8. package/dist/chunk-5LUMM7FW.mjs.map +1 -0
  9. package/dist/{chunk-O6E2A4KD.mjs → chunk-CVM2ZAPL.mjs} +9 -3
  10. package/dist/chunk-CVM2ZAPL.mjs.map +1 -0
  11. package/dist/{chunk-DFDBT76F.mjs → chunk-DHFW75RZ.mjs} +79 -12
  12. package/dist/chunk-DHFW75RZ.mjs.map +1 -0
  13. package/dist/chunk-EJUXNICF.mjs +4948 -0
  14. package/dist/chunk-EJUXNICF.mjs.map +1 -0
  15. package/dist/{chunk-A3CHUZC2.mjs → chunk-JVKABGBT.mjs} +35 -11
  16. package/dist/chunk-JVKABGBT.mjs.map +1 -0
  17. package/dist/{chunk-GVHJ4YUH.mjs → chunk-OWJCESNF.mjs} +144 -20
  18. package/dist/chunk-OWJCESNF.mjs.map +1 -0
  19. package/dist/{chunk-ACBBACML.mjs → chunk-SQHOOSST.mjs} +300 -60
  20. package/dist/chunk-SQHOOSST.mjs.map +1 -0
  21. package/dist/{chunk-SQUC6VZK.mjs → chunk-VH22EPOM.mjs} +67 -5
  22. package/dist/chunk-VH22EPOM.mjs.map +1 -0
  23. package/dist/components/Epub/index.d.mts +20 -342
  24. package/dist/components/Epub/index.mjs +197 -4811
  25. package/dist/components/Epub/index.mjs.map +1 -1
  26. package/dist/components/WebPub/index.d.mts +48 -0
  27. package/dist/components/WebPub/index.mjs +346 -0
  28. package/dist/components/WebPub/index.mjs.map +1 -0
  29. package/dist/core/Components/index.d.mts +21 -57
  30. package/dist/core/Components/index.mjs +3 -3
  31. package/dist/core/Helpers/index.d.mts +22 -4
  32. package/dist/core/Helpers/index.mjs +3 -3
  33. package/dist/core/Hooks/index.d.mts +4 -3
  34. package/dist/core/Hooks/index.mjs +2 -2
  35. package/dist/{enums-k2t0ns7n.d.mts → enums-CBaXSsr9.d.mts} +6 -1
  36. package/dist/i18n/index.mjs +6 -6
  37. package/dist/{keyboardUtilities-CoTR9LKx.d.mts → keyboardUtilities-BWAyLS_D.d.mts} +1 -1
  38. package/dist/lib/index.d.mts +169 -19
  39. package/dist/lib/index.mjs +3 -3
  40. package/dist/locales/ar/thorium-web.json +22 -0
  41. package/dist/locales/da/thorium-web.json +232 -1
  42. package/dist/locales/fi/thorium-web.json +232 -0
  43. package/dist/locales/lt/thorium-web.json +16 -3
  44. package/dist/locales/pt-PT/thorium-web.json +56 -7
  45. package/dist/locales/sv/thorium-web.json +232 -1
  46. package/dist/{overflowMenu.module-FO27A2A3.module.css → overflowMenu.module-QL32ISXF.module.css} +2 -2
  47. package/dist/preferences/index.d.mts +10 -7
  48. package/dist/preferences/index.mjs +5 -5
  49. package/dist/{readerPagination.module-W4IAEOSH.module.css → readerPagination.module-DYBZAQ7H.module.css} +4 -1
  50. package/dist/{settings.module-O55ZM6BK.module.css → settings.module-H5MUDFJO.module.css} +6 -1
  51. package/dist/{useBreakpoints-tXWqELEV.d.mts → useBreakpoints-BtHd3571.d.mts} +1 -1
  52. package/dist/{usePreferences-DN-y2V__.d.mts → usePreferences-iJ5426UA.d.mts} +1 -1
  53. package/dist/{useTimeline-Ba3SQ3QB.d.mts → useTimeline-DyMx_aWY.d.mts} +5 -5
  54. package/dist/useWebPubNavigator-DBRj8KyC.d.mts +37 -0
  55. package/package.json +34 -33
  56. package/dist/chunk-A3CHUZC2.mjs.map +0 -1
  57. package/dist/chunk-ACBBACML.mjs.map +0 -1
  58. package/dist/chunk-DFDBT76F.mjs.map +0 -1
  59. package/dist/chunk-GVHJ4YUH.mjs.map +0 -1
  60. package/dist/chunk-IEYR7QV7.mjs.map +0 -1
  61. package/dist/chunk-O6E2A4KD.mjs.map +0 -1
  62. package/dist/chunk-SQUC6VZK.mjs.map +0 -1
@@ -0,0 +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-5LUMM7FW.mjs","sourcesContent":["\"use client\";\n\n// Extend Navigator interface to include userAgentData\ndeclare global {\n interface Navigator {\n userAgentData?: {\n brands: Array<{brand: string; version: string}>;\n mobile: boolean;\n platform: string;\n };\n }\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 = window.navigator;\n\n if (nav.userAgentData) {\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\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}"]}
@@ -11,6 +11,12 @@ var ThBackLinkVariant = /* @__PURE__ */ ((ThBackLinkVariant2) => {
11
11
  ThBackLinkVariant2["custom"] = "custom";
12
12
  return ThBackLinkVariant2;
13
13
  })(ThBackLinkVariant || {});
14
+ var ThArrowVariant = /* @__PURE__ */ ((ThArrowVariant2) => {
15
+ ThArrowVariant2["none"] = "none";
16
+ ThArrowVariant2["stacked"] = "stacked";
17
+ ThArrowVariant2["layered"] = "layered";
18
+ return ThArrowVariant2;
19
+ })(ThArrowVariant || {});
14
20
  var ThDocumentTitleFormat = /* @__PURE__ */ ((ThDocumentTitleFormat2) => {
15
21
  ThDocumentTitleFormat2["title"] = "title";
16
22
  ThDocumentTitleFormat2["chapter"] = "chapter";
@@ -176,6 +182,6 @@ var ThLineHeightOptions = /* @__PURE__ */ ((ThLineHeightOptions2) => {
176
182
  return ThLineHeightOptions2;
177
183
  })(ThLineHeightOptions || {});
178
184
 
179
- export { ThActionsKeys, ThBackLinkVariant, ThBreakpoints, ThDockingKeys, ThDockingTypes, ThDocumentTitleFormat, ThLayoutDirection, ThLayoutOptions, ThLayoutUI, ThLineHeightOptions, ThProgressionFormat, ThRunningHeadFormat, ThSettingsContainerKeys, ThSettingsKeys, ThSettingsRangePlaceholder, ThSettingsRangeVariant, ThSheetHeaderVariant, ThSheetTypes, ThSpacingPresetKeys, ThSpacingSettingsKeys, ThTextAlignOptions, ThTextSettingsKeys, ThThemeKeys };
180
- //# sourceMappingURL=chunk-O6E2A4KD.mjs.map
181
- //# sourceMappingURL=chunk-O6E2A4KD.mjs.map
185
+ export { ThActionsKeys, ThArrowVariant, ThBackLinkVariant, ThBreakpoints, ThDockingKeys, ThDockingTypes, ThDocumentTitleFormat, ThLayoutDirection, ThLayoutOptions, ThLayoutUI, ThLineHeightOptions, ThProgressionFormat, ThRunningHeadFormat, ThSettingsContainerKeys, ThSettingsKeys, ThSettingsRangePlaceholder, ThSettingsRangeVariant, ThSheetHeaderVariant, ThSheetTypes, ThSpacingPresetKeys, ThSpacingSettingsKeys, ThTextAlignOptions, ThTextSettingsKeys, ThThemeKeys };
186
+ //# sourceMappingURL=chunk-CVM2ZAPL.mjs.map
187
+ //# sourceMappingURL=chunk-CVM2ZAPL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/preferences/models/enums.ts"],"names":["ThLayoutUI","ThBackLinkVariant","ThArrowVariant","ThDocumentTitleFormat","ThRunningHeadFormat","ThProgressionFormat","ThActionsKeys","ThBreakpoints","ThDockingKeys","ThDockingTypes","ThSettingsKeys","ThTextSettingsKeys","ThSpacingSettingsKeys","ThSettingsContainerKeys","ThSettingsRangeVariant","ThSettingsRangePlaceholder","ThSheetTypes","ThSheetHeaderVariant","ThThemeKeys","ThSpacingPresetKeys","ThLayoutDirection","ThLayoutOptions","ThTextAlignOptions","ThLineHeightOptions"],"mappings":"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","file":"chunk-CVM2ZAPL.mjs","sourcesContent":["\"use client\";\n\nexport enum ThLayoutUI {\n stacked = \"stacked-ui\",\n layered = \"layered-ui\"\n}\n\nexport enum ThBackLinkVariant {\n arrow = \"arrow\",\n home = \"home\",\n library = \"library\",\n custom = \"custom\"\n}\n\nexport enum ThArrowVariant {\n none = \"none\",\n stacked = \"stacked\",\n layered = \"layered\"\n}\n\nexport enum ThDocumentTitleFormat {\n title = \"title\",\n chapter = \"chapter\",\n titleAndChapter = \"titleAndChapter\",\n none = \"none\"\n}\n\nexport enum ThRunningHeadFormat {\n title = \"title\",\n chapter = \"chapter\",\n // titleAndChapter = \"titleAndChapter\",\n none = \"none\"\n}\n\nexport enum ThProgressionFormat {\n positionsPercentOfTotal = \"positionsPercentOfTotal\", // x-y of z (%)\n positionsOfTotal = \"positionsOfTotal\", // x-y of z\n positions = \"positions\", // x-y\n overallProgression = \"overallProgression\", // x%\n positionsLeft = \"positionsLeft\", // x left in chapter\n readingOrderIndex = \"readingOrderIndex\", // x of y\n resourceProgression = \"resourceProgression\", // x%\n progressionOfResource = \"progressionOfResource\", // x% of y\n none = \"none\" // nothing displayed\n}\n\nexport enum ThActionsKeys {\n fullscreen = \"fullscreen\",\n jumpToPosition = \"jumpToPosition\",\n settings = \"settings\",\n toc = \"toc\"\n}\n\nexport enum ThBreakpoints {\n compact = \"compact\",\n medium = \"medium\",\n expanded = \"expanded\",\n large = \"large\",\n xLarge = \"xLarge\"\n}\n\nexport enum ThDockingKeys {\n start = \"dockingStart\",\n end = \"dockingEnd\",\n transient = \"dockingTransient\"\n}\n\nexport enum ThDockingTypes {\n none = \"none\",\n both = \"both\",\n start = \"start\",\n end = \"end\"\n}\n\nexport enum ThSettingsKeys {\n columns = \"columns\",\n fontFamily = \"fontFamily\",\n fontWeight = \"fontWeight\",\n hyphens = \"hyphens\",\n layout = \"layout\",\n letterSpacing = \"letterSpacing\",\n lineHeight = \"lineHeight\",\n paragraphIndent = \"paragraphIndent\",\n paragraphSpacing = \"paragraphSpacing\",\n publisherStyles = \"publisherStyles\",\n spacingGroup = \"spacingGroup\",\n spacingPresets = \"spacingPresets\",\n textAlign = \"textAlign\",\n textGroup = \"textGroup\",\n textNormalize = \"textNormalize\",\n theme = \"theme\",\n wordSpacing = \"wordSpacing\",\n zoom = \"zoom\"\n}\n\nexport enum ThTextSettingsKeys {\n fontFamily = \"fontFamily\",\n fontWeight = \"fontWeight\",\n hyphens = \"hyphens\",\n textAlign = \"textAlign\",\n textNormalize = \"textNormalize\"\n}\n\nexport enum ThSpacingSettingsKeys {\n letterSpacing = \"letterSpacing\",\n lineHeight = \"lineHeight\",\n paragraphIndent = \"paragraphIndent\",\n paragraphSpacing = \"paragraphSpacing\",\n publisherStyles = \"publisherStyles\",\n spacingPresets = \"spacingPresets\",\n wordSpacing = \"wordSpacing\"\n}\n\nexport enum ThSettingsContainerKeys {\n initial = \"initial\",\n text = \"text\",\n spacing = \"spacing\"\n}\n\nexport enum ThSettingsRangeVariant {\n slider = \"slider\",\n incrementedSlider = \"incrementedSlider\",\n numberField = \"numberField\"\n}\n\nexport enum ThSettingsRangePlaceholder {\n range = \"range\",\n none = \"none\"\n}\n\nexport enum ThSheetTypes {\n popover = \"popover\",\n fullscreen = \"fullscreen\",\n dockedStart = \"docked start\",\n dockedEnd = \"docked end\",\n bottomSheet = \"bottomSheet\"\n}\n\nexport enum ThSheetHeaderVariant {\n close = \"close\",\n previous = \"previous\"\n}\n\nexport enum ThThemeKeys {\n light = \"light\",\n sepia = \"sepia\",\n dark = \"dark\",\n paper = \"paper\",\n contrast1 = \"contrast1\",\n contrast2 = \"contrast2\",\n contrast3 = \"contrast3\"\n}\n\nexport enum ThSpacingPresetKeys {\n publisher = \"publisher\",\n tight = \"tight\",\n balanced = \"balanced\",\n loose = \"loose\",\n accessible = \"accessible\",\n custom = \"custom\"\n}\n\nexport enum ThLayoutDirection {\n rtl = \"rtl\",\n ltr = \"ltr\"\n}\n\nexport enum ThLayoutOptions { \n scroll = \"scroll_option\",\n paginated = \"page_option\"\n}\n\nexport enum ThTextAlignOptions {\n publisher = \"publisher\",\n start = \"start\",\n justify = \"justify\"\n}\n\nexport enum ThLineHeightOptions {\n publisher = \"publisher\",\n small = \"small\",\n medium = \"medium\",\n large = \"large\"\n}"]}
@@ -1,7 +1,7 @@
1
- import { propsToCSSVars } from './chunk-TTGURRX3.mjs';
2
1
  import { useBreakpoints, useForcedColors, useMonochrome, useReducedMotion, useReducedTransparency } from './chunk-BNPR6V7V.mjs';
3
2
  import { useColorScheme, useContrast } from './chunk-NQ2ZSGCX.mjs';
4
- import { ThSettingsKeys } from './chunk-O6E2A4KD.mjs';
3
+ import { propsToCSSVars } from './chunk-TTGURRX3.mjs';
4
+ import { ThSettingsKeys } from './chunk-CVM2ZAPL.mjs';
5
5
  import { createContext, useMemo, useState, useCallback, useEffect, useContext, useRef } from 'react';
6
6
  import ReadiumCSSColors from '@readium/css/css/vars/colors.json';
7
7
  import fontStacks from '@readium/css/css/vars/fontStacks.json';
@@ -31,7 +31,7 @@ var createPreferences = (params) => {
31
31
  };
32
32
  if (params.actions) {
33
33
  validateObjectKeys(
34
- [params.actions.reflowOrder, params.actions.fxlOrder],
34
+ [params.actions.reflowOrder, params.actions.fxlOrder, params.actions.webPubOrder],
35
35
  params.actions.keys,
36
36
  "actions"
37
37
  );
@@ -138,10 +138,10 @@ var defaultSpacingSettingsMain = [
138
138
  var defaultSpacingSettingsSubpanel = [
139
139
  "spacingPresets" /* spacingPresets */,
140
140
  "lineHeight" /* lineHeight */,
141
- "wordSpacing" /* wordSpacing */,
142
- "letterSpacing" /* letterSpacing */,
143
141
  "paragraphSpacing" /* paragraphSpacing */,
144
- "paragraphIndent" /* paragraphIndent */
142
+ "paragraphIndent" /* paragraphIndent */,
143
+ "wordSpacing" /* wordSpacing */,
144
+ "letterSpacing" /* letterSpacing */
145
145
  ];
146
146
  var defaultSpacingPresetsOrder = [
147
147
  "publisher" /* publisher */,
@@ -273,6 +273,13 @@ var defaultPreferences = createPreferences({
273
273
  displayInFullscreen: true
274
274
  }
275
275
  }
276
+ },
277
+ webPub: {
278
+ default: {
279
+ variants: "chapter" /* chapter */,
280
+ displayInImmersive: true,
281
+ displayInFullscreen: true
282
+ }
276
283
  }
277
284
  }
278
285
  }
@@ -320,6 +327,16 @@ var defaultPreferences = createPreferences({
320
327
  displayInFullscreen: true
321
328
  }
322
329
  }
330
+ },
331
+ webPub: {
332
+ default: {
333
+ variants: [
334
+ "readingOrderIndex" /* readingOrderIndex */,
335
+ "none" /* none */
336
+ ],
337
+ displayInImmersive: true,
338
+ displayInFullscreen: true
339
+ }
323
340
  }
324
341
  }
325
342
  },
@@ -338,7 +355,8 @@ var defaultPreferences = createPreferences({
338
355
  layout: {
339
356
  ui: {
340
357
  reflow: "layered-ui" /* layered */,
341
- fxl: "layered-ui" /* layered */
358
+ fxl: "layered-ui" /* layered */,
359
+ webPub: "stacked-ui" /* stacked */
342
360
  },
343
361
  radius: 5,
344
362
  // border-radius of containers
@@ -355,7 +373,7 @@ var defaultPreferences = createPreferences({
355
373
  // Max-width of all bottom sheets
356
374
  ["popover" /* popover */]: 600,
357
375
  // Max-width of all popover sheets
358
- pagination: null
376
+ pagination: 1024
359
377
  // Max-width of pagination component
360
378
  }
361
379
  },
@@ -517,9 +535,41 @@ var defaultPreferences = createPreferences({
517
535
  affordances: {
518
536
  scroll: {
519
537
  hintInImmersive: true,
520
- toggleOnMiddlePointer: ["tap"],
538
+ toggleOnMiddlePointer: ["tap", "click"],
521
539
  hideOnForwardScroll: true,
522
540
  showOnBackwardScroll: true
541
+ },
542
+ paginated: {
543
+ reflow: {
544
+ default: {
545
+ variant: "layered" /* layered */,
546
+ discard: ["navigation"],
547
+ hint: ["layoutChange"]
548
+ },
549
+ breakpoints: {
550
+ ["large" /* large */]: {
551
+ variant: "stacked" /* stacked */
552
+ },
553
+ ["xLarge" /* xLarge */]: {
554
+ variant: "stacked" /* stacked */
555
+ }
556
+ }
557
+ },
558
+ fxl: {
559
+ default: {
560
+ variant: "layered" /* layered */,
561
+ discard: ["navigation"],
562
+ hint: "none"
563
+ },
564
+ breakpoints: {
565
+ ["large" /* large */]: {
566
+ variant: "stacked" /* stacked */
567
+ },
568
+ ["xLarge" /* xLarge */]: {
569
+ variant: "stacked" /* stacked */
570
+ }
571
+ }
572
+ }
523
573
  }
524
574
  },
525
575
  shortcuts: {
@@ -539,6 +589,11 @@ var defaultPreferences = createPreferences({
539
589
  "fullscreen" /* fullscreen */,
540
590
  "jumpToPosition" /* jumpToPosition */
541
591
  ],
592
+ webPubOrder: [
593
+ "settings" /* settings */,
594
+ "toc" /* toc */,
595
+ "fullscreen" /* fullscreen */
596
+ ],
542
597
  collapse: {
543
598
  // Number of partially icons to display
544
599
  // value "all" a keyword for the length of displayOrder above
@@ -653,6 +708,11 @@ var defaultPreferences = createPreferences({
653
708
  "theme" /* theme */,
654
709
  "columns" /* columns */
655
710
  ],
711
+ webPubOrder: [
712
+ "zoom" /* zoom */,
713
+ "textGroup" /* textGroup */,
714
+ "spacingGroup" /* spacingGroup */
715
+ ],
656
716
  keys: {
657
717
  ["letterSpacing" /* letterSpacing */]: defaultLetterSpacing,
658
718
  ["lineHeight" /* lineHeight */]: {
@@ -671,6 +731,7 @@ var defaultPreferences = createPreferences({
671
731
  header: "previous" /* previous */,
672
732
  presets: {
673
733
  reflowOrder: defaultSpacingPresetsOrder,
734
+ webPubOrder: defaultSpacingPresetsOrder,
674
735
  keys: defaultSpacingPresets
675
736
  }
676
737
  }
@@ -805,29 +866,35 @@ var usePreferenceKeys = () => {
805
866
  const { preferences } = usePreferences();
806
867
  const reflowActionKeys = preferences.actions.reflowOrder;
807
868
  const fxlActionKeys = preferences.actions.fxlOrder;
869
+ const webPubActionKeys = preferences.actions.webPubOrder;
808
870
  const reflowThemeKeys = preferences.theming.themes.reflowOrder;
809
871
  const fxlThemeKeys = preferences.theming.themes.fxlOrder;
810
872
  const reflowSettingsKeys = preferences.settings.reflowOrder;
811
873
  const fxlSettingsKeys = preferences.settings.fxlOrder;
874
+ const webPubSettingsKeys = preferences.settings.webPubOrder;
812
875
  const mainTextSettingsKeys = preferences.settings.text?.main ?? defaultTextSettingsMain;
813
876
  const subPanelTextSettingsKeys = preferences.settings.text?.subPanel ?? defaultTextSettingsSubpanel;
814
877
  const mainSpacingSettingsKeys = preferences.settings.spacing?.main ?? defaultSpacingSettingsMain;
815
878
  const subPanelSpacingSettingsKeys = preferences.settings.spacing?.subPanel ?? defaultSpacingSettingsSubpanel;
816
879
  const reflowSpacingPresetKeys = preferences.settings.spacing?.presets?.reflowOrder ?? defaultSpacingPresetsOrder;
817
880
  const fxlSpacingPresetKeys = [];
881
+ const webPubSpacingPresetKeys = preferences.settings.spacing?.presets?.webPubOrder ?? defaultSpacingPresetsOrder;
818
882
  return {
819
883
  reflowActionKeys,
820
884
  fxlActionKeys,
885
+ webPubActionKeys,
821
886
  reflowThemeKeys,
822
887
  fxlThemeKeys,
823
888
  reflowSettingsKeys,
824
889
  fxlSettingsKeys,
890
+ webPubSettingsKeys,
825
891
  mainTextSettingsKeys,
826
892
  subPanelTextSettingsKeys,
827
893
  mainSpacingSettingsKeys,
828
894
  subPanelSpacingSettingsKeys,
829
895
  reflowSpacingPresetKeys,
830
- fxlSpacingPresetKeys
896
+ fxlSpacingPresetKeys,
897
+ webPubSpacingPresetKeys
831
898
  };
832
899
  };
833
900
  var useTheming = ({
@@ -912,5 +979,5 @@ var useTheming = ({
912
979
  };
913
980
 
914
981
  export { ThMemoryPreferencesAdapter, ThPreferencesContext, ThPreferencesProvider, buildThemeObject, createPreferences, defaultActionKeysObject, defaultFontFamilyOptions, defaultLetterSpacing, defaultLineHeights, defaultParagraphIndent, defaultParagraphSpacing, defaultPreferences, defaultPreferencesContextValue, defaultSpacingPresets, defaultSpacingPresetsOrder, defaultSpacingSettingsMain, defaultSpacingSettingsSubpanel, defaultTextSettingsMain, defaultTextSettingsSubpanel, defaultWordSpacing, defaultZoom, usePreferenceKeys, usePreferences, useTheming };
915
- //# sourceMappingURL=chunk-DFDBT76F.mjs.map
916
- //# sourceMappingURL=chunk-DFDBT76F.mjs.map
982
+ //# sourceMappingURL=chunk-DHFW75RZ.mjs.map
983
+ //# sourceMappingURL=chunk-DHFW75RZ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/preferences/preferences.ts","../src/preferences/models/const.ts","../src/preferences/defaultPreferences.ts","../src/preferences/ThPreferencesContext.ts","../src/preferences/adapters/ThMemoryPreferencesAdapter.ts","../src/preferences/ThDirectionSetter.tsx","../src/preferences/ThPreferencesProvider.tsx","../src/preferences/helpers/buildThemeObject.ts","../src/preferences/hooks/usePreferences.ts","../src/preferences/hooks/usePreferenceKeys.ts","../src/preferences/hooks/useTheming.ts"],"names":["useEffect","useCallback"],"mappings":"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","file":"chunk-DHFW75RZ.mjs","sourcesContent":["import { UnstableShortcutRepresentation } from \"@/core/Helpers/keyboardUtilities\";\nimport { BreakpointsMap } from \"@/core/Hooks/useBreakpoints\";\nimport { ThemeTokens } from \"@/preferences/hooks/useTheming\";\nimport { \n ThActionsKeys,\n ThDockingKeys,\n ThDockingTypes,\n ThLineHeightOptions, \n ThSettingsKeys, \n ThSettingsRangeVariant, \n ThSheetHeaderVariant, \n ThSheetTypes, \n ThSpacingSettingsKeys, \n ThTextSettingsKeys, \n ThThemeKeys, \n ThLayoutDirection, \n ThLayoutUI,\n ThBackLinkVariant,\n ThProgressionFormat,\n ThRunningHeadFormat,\n ThBreakpoints,\n ThDocumentTitleFormat,\n ThSpacingPresetKeys,\n ThSettingsRangePlaceholder,\n ThArrowVariant\n} from \"./models/enums\";\nimport { ThCollapsibility, ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\n\nexport type I18nValue<T> = T | string | { key: string; fallback?: string };\n\nexport type ThBackLinkContent = \n | { \n type: \"img\";\n src: string;\n alt?: string;\n }\n | {\n type: \"svg\";\n content: string; // Raw SVG string\n };\n\nexport interface ThBackLinkPref {\n href: string;\n variant?: ThBackLinkVariant;\n visibility?: \"always\" | \"partially\";\n content?: ThBackLinkContent;\n}\n\nexport type ThBottomSheetDetent = \"content-height\" | \"full-height\";\n\nexport interface ThActionsSnappedPref {\n scrim?: boolean | string;\n maxWidth?: number | null;\n maxHeight?: number | ThBottomSheetDetent;\n peekHeight?: number | ThBottomSheetDetent;\n minHeight?: number | ThBottomSheetDetent;\n}\n\nexport interface ThActionsDockedPref {\n dockable: ThDockingTypes,\n dragIndicator?: boolean,\n width?: number,\n minWidth?: number,\n maxWidth?: number\n}\n\nexport interface ThActionsTokens {\n visibility: ThCollapsibilityVisibility;\n shortcut: string | null;\n sheet?: {\n defaultSheet: Exclude<ThSheetTypes, ThSheetTypes.dockedStart | ThSheetTypes.dockedEnd>;\n breakpoints: BreakpointsMap<ThSheetTypes>;\n };\n docked?: ThActionsDockedPref;\n snapped?: ThActionsSnappedPref;\n};\n\nexport interface ThSettingsSpacingPresets<K extends CustomizableKeys = DefaultKeys> {\n reflowOrder: Array<ThSpacingPresetKeys>;\n webPubOrder: Array<ThSpacingPresetKeys>;\n // Not customizable as the component is static radiogroup (icons), unlike themes\n // Publisher and custom are not included as they are special cases\n keys: {\n [key in Exclude<ThSpacingPresetKeys, \"publisher\" | \"custom\">]?: ThSpacingPreset<K>;\n };\n}\n\nexport type ThSpacingPreset<K extends CustomizableKeys = DefaultKeys> = {\n [ThSpacingSettingsKeys.letterSpacing]?: number;\n [ThSpacingSettingsKeys.lineHeight]?: ThLineHeightOptions;\n [ThSpacingSettingsKeys.paragraphIndent]?: number;\n [ThSpacingSettingsKeys.paragraphSpacing]?: number;\n [ThSpacingSettingsKeys.wordSpacing]?: number;\n} & (K extends { spacing: infer S } \n ? S extends string \n ? { [key in S]?: number | ThLineHeightOptions }\n : {}\n : {});\n\nexport type CustomizableKeys = {\n action?: string;\n theme?: string;\n settings?: string;\n text?: string;\n spacing?: string;\n};\n\n// Key types to better handle custom keys for external consumers\nexport type ActionKey<K extends CustomizableKeys> = \n K extends { action: infer A } \n ? A extends string \n ? ThActionsKeys | A \n : ThActionsKeys\n : ThActionsKeys;\n\nexport type ThemeKey<K extends CustomizableKeys> = \n K extends { theme: infer T } \n ? T extends string \n ? ThThemeKeys | T \n : ThThemeKeys\n : ThThemeKeys;\n\nexport type SettingsKey<K extends CustomizableKeys> = \n K extends { settings: infer S } \n ? S extends string \n ? ThSettingsKeys | S \n : ThSettingsKeys\n : ThSettingsKeys;\n\nexport type TextSettingsKey<K extends CustomizableKeys> = \n K extends { text: infer T } \n ? T extends string \n ? ThTextSettingsKeys | T \n : ThTextSettingsKeys\n : ThTextSettingsKeys;\n\nexport type SpacingSettingsKey<K extends CustomizableKeys> = \n K extends { spacing: infer S } \n ? S extends string \n ? ThSpacingSettingsKeys | S \n : ThSpacingSettingsKeys\n : ThSpacingSettingsKeys;\n\nexport interface ThActionsPref<K extends CustomizableKeys> {\n reflowOrder: Array<ActionKey<K>>;\n fxlOrder: Array<ActionKey<K>>;\n webPubOrder: Array<ActionKey<K>>;\n collapse: ThCollapsibility;\n keys: Record<ActionKey<K>, ThActionsTokens>;\n};\n\nexport interface ThDockingPref<T extends string> {\n displayOrder: T[];\n collapse: ThCollapsibility;\n dock: BreakpointsMap<ThDockingTypes> | boolean; \n keys: {\n [key in T]: Pick<ThActionsTokens, \"visibility\" | \"shortcut\">;\n }\n};\n\nexport interface ThSettingsGroupPref<T> {\n main?: T[];\n subPanel?: T[] | null;\n header?: ThSheetHeaderVariant;\n}\n\nexport interface ThSettingsRangePref {\n variant?: ThSettingsRangeVariant;\n placeholder?: I18nValue<ThSettingsRangePlaceholder>;\n range?: [number, number];\n step?: number;\n}\n\nexport interface ThSettingsRadioPref<T extends string> {\n allowUnset?: boolean;\n keys: {\n [key in T]: number;\n };\n}\n\nexport type ThSettingsKeyTypes<K extends CustomizableKeys = DefaultKeys> = {\n [ThSettingsKeys.letterSpacing]: ThSettingsRangePref;\n [ThSettingsKeys.lineHeight]: ThSettingsRadioPref<Exclude<ThLineHeightOptions, ThLineHeightOptions.publisher>>;\n [ThSettingsKeys.paragraphIndent]: ThSettingsRangePref;\n [ThSettingsKeys.paragraphSpacing]: ThSettingsRangePref;\n [ThSettingsKeys.wordSpacing]: ThSettingsRangePref;\n [ThSettingsKeys.zoom]: ThSettingsRangePref;\n} & (\n K extends { settings: infer S } \n ? S extends string \n ? { [key in S]: any }\n : {}\n : {}\n);\n\nexport type ThConstraintKeys = Extract<ThSheetTypes, ThSheetTypes.bottomSheet | ThSheetTypes.popover> | \"pagination\";\n\nexport interface ThFormatPrefValue<T extends string | Array<string>> {\n variants: T;\n displayInImmersive?: boolean;\n displayInFullscreen?: boolean;\n}\n\nexport interface ThFormatPref<T extends string | Array<string>> {\n default: ThFormatPrefValue<T>;\n breakpoints?: { \n [key in ThBreakpoints]?: ThFormatPrefValue<T>;\n };\n}\n\nexport interface ThPaginatedAffordancePrefValue {\n variant: ThArrowVariant;\n discard?: Array<\"navigation\" | \"immersive\" | \"fullscreen\"> | \"none\";\n hint?: Array<\"immersiveChange\" | \"fullscreenChange\" | \"layoutChange\"> | \"none\";\n}\n\nexport interface ThPaginatedAffordancePref {\n default: Required<ThPaginatedAffordancePrefValue>;\n breakpoints?: {\n [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue;\n };\n}\n\n// Main preferences interface with simplified generics\nexport interface ThPreferences<K extends CustomizableKeys = {}> {\n direction?: ThLayoutDirection;\n locale?: string;\n metadata?: {\n documentTitle?: {\n // TODO – Templating of custom\n format: I18nValue<ThDocumentTitleFormat>;\n };\n };\n typography: {\n minimalLineLength?: number | null;\n maximalLineLength?: number | null;\n optimalLineLength: number;\n pageGutter: number;\n };\n theming: {\n header?: {\n backLink?: ThBackLinkPref | null;\n runningHead?: {\n format?: {\n reflow?: ThFormatPref<ThRunningHeadFormat>;\n fxl?: ThFormatPref<ThRunningHeadFormat>;\n webPub?: ThFormatPref<ThRunningHeadFormat>;\n }\n }\n };\n progression?: {\n format?: {\n reflow?: ThFormatPref<ThProgressionFormat | Array<ThProgressionFormat>>;\n fxl?: ThFormatPref<ThProgressionFormat | Array<ThProgressionFormat>>;\n webPub?: ThFormatPref<ThProgressionFormat | Array<ThProgressionFormat>>;\n };\n };\n arrow: {\n size: number;\n offset: number;\n tooltipDelay?: number;\n };\n icon: {\n size: number;\n tooltipOffset: number;\n tooltipDelay?: number;\n };\n layout: {\n ui?: {\n reflow?: ThLayoutUI,\n fxl?: ThLayoutUI,\n webPub?: ThLayoutUI\n };\n radius: number;\n spacing: number;\n defaults: {\n dockingWidth: number;\n scrim: string;\n };\n constraints?: {\n [key in ThConstraintKeys]?: number | null\n }\n };\n breakpoints: BreakpointsMap<number | null>;\n themes: {\n reflowOrder: Array<ThemeKey<K> | \"auto\">;\n fxlOrder: Array<ThemeKey<K> | \"auto\">;\n systemThemes?: {\n light: ThemeKey<K>;\n dark: ThemeKey<K>;\n };\n // keys never includes \"auto\"\n keys: Record<Exclude<ThemeKey<K>, \"auto\"> & string, ThemeTokens>;\n };\n };\n affordances: {\n scroll: {\n hintInImmersive: boolean;\n toggleOnMiddlePointer: Array<\"tap\" | \"click\">;\n hideOnForwardScroll: boolean;\n showOnBackwardScroll: boolean;\n },\n paginated: {\n reflow: ThPaginatedAffordancePref;\n fxl: ThPaginatedAffordancePref;\n }\n };\n actions: ThActionsPref<K>;\n shortcuts: {\n representation: UnstableShortcutRepresentation;\n joiner?: string;\n };\n docking: ThDockingPref<ThDockingKeys>;\n settings: {\n reflowOrder: Array<SettingsKey<K>>;\n fxlOrder: Array<SettingsKey<K>>;\n webPubOrder: Array<SettingsKey<K>>;\n keys: ThSettingsKeyTypes<K>;\n text?: ThSettingsGroupPref<TextSettingsKey<K>>;\n spacing?: ThSettingsGroupPref<SpacingSettingsKey<K>> & { presets?: ThSettingsSpacingPresets<K> };\n };\n}\n\n/**\n * Creates a new preferences object with the provided parameters\n * @param params The preferences object to create\n * @returns A new preferences object\n */\nexport const createPreferences = <K extends CustomizableKeys = {}>(\n params: ThPreferences<K>\n): ThPreferences<K> => {\n // Helper function to validate keys against the provided order arrays\n const validateObjectKeys = <K extends string, V>(\n orderArrays: K[][],\n keysObj: Record<string, V>,\n context: string,\n specialCase?: string | string[],\n fallback?: V\n ): void => {\n // Combine all arrays and filter out special cases if needed\n const allOrders = new Set<K>(\n orderArrays.flatMap(arr => {\n if (!specialCase) return arr;\n return arr.filter(k => {\n if (Array.isArray(specialCase)) {\n return !specialCase.includes(k);\n } else {\n return k !== specialCase;\n }\n });\n })\n );\n \n // Get available keys\n const availableKeys = Object.keys(keysObj);\n \n // Check that all keys exist and add from fallback if available\n allOrders.forEach(key => {\n if (!availableKeys.includes(key)) {\n if (fallback) {\n // Add the missing key from fallback to the params object\n keysObj[key] = fallback;\n }\n console.warn(`Key \"${ key }\" in ${ context } order arrays not found in ${ context }.keys.${ fallback ? `\\nUsing fallback: ${ JSON.stringify(fallback) }` : \"\" }`);\n }\n });\n };\n \n // Validate actions\n if (params.actions) {\n validateObjectKeys<ActionKey<K>, ThActionsTokens>(\n [params.actions.reflowOrder as Array<ActionKey<K>>, params.actions.fxlOrder as Array<ActionKey<K>>, params.actions.webPubOrder as Array<ActionKey<K>>],\n params.actions.keys as Record<string, ThActionsTokens>,\n \"actions\"\n );\n }\n \n // Validate themes\n if (params.theming?.themes) {\n validateObjectKeys<ThemeKey<K> | \"auto\", ThemeTokens>(\n [params.theming.themes.reflowOrder as Array<ThemeKey<K> | \"auto\">, params.theming.themes.fxlOrder as Array<ThemeKey<K> | \"auto\">],\n params.theming.themes.keys as Record<string, ThemeTokens>,\n \"theming.themes\",\n \"auto\" // Special case for themes\n );\n }\n\n // Validate spacing presets\n if (params.settings.spacing?.presets) {\n validateObjectKeys<ThSpacingPresetKeys, ThSpacingPreset<K>>(\n [params.settings.spacing.presets.reflowOrder],\n params.settings.spacing.presets.keys as Record<string, ThSpacingPreset<K>>,\n \"settings.spacing.presets\",\n [\"publisher\", \"custom\"]\n );\n }\n\n // Validate spacing values in theming against settings\n if (params.settings?.spacing?.presets?.keys && params.settings?.keys) {\n const spacingSettings = params.settings.spacing.presets.keys;\n const spacingThemes = params.settings.spacing.presets.keys;\n \n // Helper function to adjust a value to the nearest valid step or range boundary\n const adjustSpacingValue = (key: string, value: number, context: string[]): number => {\n // Type-safe way to get the setting\n const settingKey = Object.values(ThSettingsKeys).find((k) => k === key);\n if (!settingKey) {\n return value; // Return as-is if no setting found\n }\n \n const setting = (spacingSettings as any)[settingKey];\n if (!setting) {\n return value; // Return as-is if no setting found\n }\n \n // Handle different setting types\n let range: [number, number] | undefined;\n let step: number | undefined;\n \n if (setting && typeof setting === \"object\" && \"range\" in setting) {\n range = setting.range;\n step = setting.step;\n } else if (setting && typeof setting === \"object\") {\n // Handle nested settings (like lineHeight and margin)\n // These will be validated when their parent key is validated\n return value;\n }\n \n let adjustedValue = value;\n \n // Adjust to range boundaries if needed\n if (range) {\n const [min, max] = range;\n if (adjustedValue < min) {\n console.warn(`Adjusting value ${ value } for ${ context.join(\".\") } to minimum allowed value ${ min }`);\n adjustedValue = min;\n } else if (adjustedValue > max) {\n console.warn(`Adjusting value ${ value } for ${ context.join(\".\") } to maximum allowed value ${ max }`);\n adjustedValue = max;\n }\n }\n \n // Adjust to nearest step if needed\n if (step && range) {\n const [min] = range;\n const steps = Math.round((adjustedValue - min) / step);\n const steppedValue = parseFloat((min + (steps * step)).toFixed(10));\n \n // Ensure the stepped value is within range (in case of floating point precision issues)\n const finalValue = Math.min(Math.max(steppedValue, range[0]), range[1]);\n \n if (Math.abs(finalValue - adjustedValue) > Number.EPSILON) {\n console.warn(`Adjusting value ${ value } for ${ context.join(\".\") } to nearest step value ${ finalValue }`);\n adjustedValue = finalValue;\n }\n }\n \n return adjustedValue;\n };\n \n // Process each spacing theme to adjust values to valid steps/ranges\n for (const [themeName, spacingTheme] of Object.entries(spacingThemes)) {\n if (spacingTheme && typeof spacingTheme === \"object\") {\n const adjustedTheme: Record<string, any> = {};\n let hasAdjustedValues = false;\n \n // Process each value in the theme\n for (const [key, value] of Object.entries(spacingTheme)) {\n if (typeof value === \"number\") {\n const context = [\"theming\", \"spacing\", \"keys\", themeName, key];\n const adjustedValue = adjustSpacingValue(key, value, context);\n adjustedTheme[key] = adjustedValue;\n \n if (adjustedValue !== value) {\n hasAdjustedValues = true;\n }\n } else {\n // Keep non-number values as-is\n adjustedTheme[key] = value;\n }\n }\n \n // Replace the theme with adjusted values if any changes were made\n if (hasAdjustedValues) {\n // @ts-ignore - We know spacingThemes[themeName] is mutable\n spacingThemes[themeName as keyof typeof spacingThemes] = adjustedTheme;\n }\n }\n }\n }\n \n return params;\n};\n\n// Default internal keys alias for convenience\nexport type DefaultKeys = {\n action: ThActionsKeys;\n theme: ThThemeKeys;\n settings: ThSettingsKeys;\n text: ThTextSettingsKeys;\n spacing: ThSpacingSettingsKeys;\n};\n\n// Type helpers that support both custom and default keys\nexport type ActionKeyType<K extends CustomizableKeys = DefaultKeys> = K[\"action\"] extends string ? K[\"action\"] : ThActionsKeys;\nexport type ThemeKeyType<K extends CustomizableKeys = DefaultKeys> = K[\"theme\"] extends string ? K[\"theme\"] : ThThemeKeys;\nexport type SettingsKeyType<K extends CustomizableKeys = DefaultKeys> = K[\"settings\"] extends string ? K[\"settings\"] : ThSettingsKeys;\nexport type TextSettingsKeyType<K extends CustomizableKeys = DefaultKeys> = K[\"text\"] extends string ? K[\"text\"] : ThTextSettingsKeys;\nexport type SpacingSettingsKeyType<K extends CustomizableKeys = DefaultKeys> = K[\"spacing\"] extends string ? K[\"spacing\"] : ThSpacingSettingsKeys;","\"use client\";\n\nimport fontStacks from \"@readium/css/css/vars/fontStacks.json\";\n\nimport { \n ThLineHeightOptions, \n ThSettingsRangePlaceholder, \n ThSettingsRangeVariant, \n ThSpacingPresetKeys, \n ThSpacingSettingsKeys, \n ThTextSettingsKeys \n} from \"./enums\";\nimport { ThActionsTokens, ThSettingsRangePref } from \"../preferences\";\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\n\nexport const defaultActionKeysObject: ThActionsTokens = {\n visibility: ThCollapsibilityVisibility.partially,\n shortcut: null\n};\n\nexport const defaultTextSettingsMain = [ThTextSettingsKeys.fontFamily];\n\nexport const defaultTextSettingsSubpanel = [\n ThTextSettingsKeys.fontFamily,\n ThTextSettingsKeys.textAlign,\n ThTextSettingsKeys.hyphens,\n ThTextSettingsKeys.fontWeight,\n ThTextSettingsKeys.textNormalize\n]\n\nexport const defaultSpacingSettingsMain = [\n ThSpacingSettingsKeys.spacingPresets\n];\n\nexport const defaultSpacingSettingsSubpanel = [\n ThSpacingSettingsKeys.spacingPresets,\n ThSpacingSettingsKeys.lineHeight,\n ThSpacingSettingsKeys.paragraphSpacing,\n ThSpacingSettingsKeys.paragraphIndent,\n ThSpacingSettingsKeys.wordSpacing,\n ThSpacingSettingsKeys.letterSpacing\n];\n\nexport const defaultSpacingPresetsOrder = [\n ThSpacingPresetKeys.publisher,\n ThSpacingPresetKeys.accessible,\n ThSpacingPresetKeys.custom,\n ThSpacingPresetKeys.tight,\n ThSpacingPresetKeys.balanced,\n ThSpacingPresetKeys.loose\n]\n\nexport const defaultFontFamilyOptions = {\n publisher: null,\n oldStyle: fontStacks.RS__oldStyleTf,\n modern: fontStacks.RS__modernTf,\n sans: fontStacks.RS__sansTf,\n humanist: fontStacks.RS__humanistTf,\n monospace: fontStacks.RS__monospaceTf\n}\n\nexport const defaultParagraphSpacing: Required<ThSettingsRangePref> = {\n variant: ThSettingsRangeVariant.numberField,\n placeholder: ThSettingsRangePlaceholder.range,\n range: [0, 3],\n step: 0.25\n}\n\nexport const defaultParagraphIndent: Required<ThSettingsRangePref> = {\n variant: ThSettingsRangeVariant.numberField,\n placeholder: ThSettingsRangePlaceholder.range,\n range: [0, 2],\n step: 0.25\n}\n\nexport const defaultWordSpacing: Required<ThSettingsRangePref> = {\n variant: ThSettingsRangeVariant.numberField,\n placeholder: ThSettingsRangePlaceholder.range,\n range: [0, 1],\n step: 0.1\n}\n\nexport const defaultLetterSpacing: Required<ThSettingsRangePref> = {\n variant: ThSettingsRangeVariant.numberField,\n placeholder: ThSettingsRangePlaceholder.range,\n range: [0, 0.5],\n step: 0.05\n}\n\nexport const defaultLineHeights = {\n [ThLineHeightOptions.small]: 1.3,\n [ThLineHeightOptions.medium]: 1.5,\n [ThLineHeightOptions.large]: 1.75\n}\n\nexport const defaultZoom: Required<ThSettingsRangePref> = {\n variant: ThSettingsRangeVariant.numberField,\n placeholder: ThSettingsRangePlaceholder.range,\n range: [0.7, 4],\n step: 0.05\n}\n\nexport const defaultSpacingPresets = {\n [ThSpacingPresetKeys.tight]: {\n [ThSpacingSettingsKeys.lineHeight]: ThLineHeightOptions.small,\n [ThSpacingSettingsKeys.paragraphSpacing]: 0,\n [ThSpacingSettingsKeys.paragraphIndent]: 1\n },\n [ThSpacingPresetKeys.balanced]: {\n [ThSpacingSettingsKeys.lineHeight]: ThLineHeightOptions.medium,\n [ThSpacingSettingsKeys.paragraphSpacing]: 0.75,\n [ThSpacingSettingsKeys.paragraphIndent]: 0\n },\n [ThSpacingPresetKeys.loose]: {\n [ThSpacingSettingsKeys.lineHeight]: ThLineHeightOptions.large,\n [ThSpacingSettingsKeys.paragraphSpacing]: 1.75,\n [ThSpacingSettingsKeys.paragraphIndent]: 0\n },\n [ThSpacingPresetKeys.accessible]: {\n [ThSpacingSettingsKeys.lineHeight]: ThLineHeightOptions.large,\n [ThSpacingSettingsKeys.paragraphSpacing]: 2.5,\n [ThSpacingSettingsKeys.paragraphIndent]: 0,\n [ThSpacingSettingsKeys.letterSpacing]: 0.1,\n [ThSpacingSettingsKeys.wordSpacing]: 0.3\n }\n}","\"use client\";\n\nimport { UnstableShortcutMetaKeywords, UnstableShortcutRepresentation } from \"@/core/Helpers/keyboardUtilities\";\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\nimport { \n ThActionsKeys, \n ThBreakpoints, \n ThDockingTypes, \n ThDockingKeys, \n ThSettingsKeys, \n ThSheetTypes, \n ThThemeKeys, \n ThLayoutDirection,\n ThTextSettingsKeys,\n ThSheetHeaderVariant,\n ThLayoutUI,\n ThBackLinkVariant,\n ThProgressionFormat,\n ThRunningHeadFormat,\n ThDocumentTitleFormat,\n ThArrowVariant,\n} from \"./models/enums\";\nimport { createPreferences, ThPreferences, DefaultKeys } from \"./preferences\";\n\nimport ReadiumCSSColors from \"@readium/css/css/vars/colors.json\";\nimport { \n defaultLetterSpacing, \n defaultLineHeights, \n defaultParagraphIndent, \n defaultParagraphSpacing, \n defaultSpacingPresets, \n defaultSpacingPresetsOrder, \n defaultWordSpacing, \n defaultZoom\n} from \"./models/const\";\n\nexport const defaultPreferences: ThPreferences<DefaultKeys> = createPreferences<DefaultKeys>({\n// direction: ThLayoutDirection.ltr,\n// locale: \"en\",\n metadata: {\n documentTitle: {\n format: ThDocumentTitleFormat.title\n }\n },\n typography: {\n minimalLineLength: 40, // undefined | null | number of characters. If 2 cols will switch to 1 based on this\n optimalLineLength: 55, // number of characters. If auto layout, picks colCount based on this\n maximalLineLength: 70, // undefined | null | number of characters.\n pageGutter: 20\n },\n theming: {\n header: {\n backLink: {\n variant: ThBackLinkVariant.arrow,\n visibility: \"partially\",\n href: \"/\"\n },\n runningHead: {\n format: {\n reflow: {\n default: {\n variants: ThRunningHeadFormat.chapter,\n displayInImmersive: true,\n displayInFullscreen: false\n },\n breakpoints: {\n [ThBreakpoints.compact]: {\n variants: ThRunningHeadFormat.chapter,\n displayInImmersive: false,\n displayInFullscreen: false\n }\n }\n },\n fxl: {\n default: {\n variants: ThRunningHeadFormat.title,\n displayInImmersive: true,\n displayInFullscreen: true\n },\n breakpoints: {\n [ThBreakpoints.compact]: {\n variants: ThRunningHeadFormat.title,\n displayInImmersive: false,\n displayInFullscreen: true\n }\n }\n },\n webPub: {\n default: {\n variants: ThRunningHeadFormat.chapter,\n displayInImmersive: true,\n displayInFullscreen: true\n }\n }\n }\n }\n },\n progression: {\n format: {\n reflow: {\n default: {\n variants: [\n ThProgressionFormat.positionsPercentOfTotal,\n ThProgressionFormat.progressionOfResource\n ],\n displayInImmersive: true,\n displayInFullscreen: false\n },\n breakpoints: {\n [ThBreakpoints.compact]: {\n variants: [\n ThProgressionFormat.positionsOfTotal, \n ThProgressionFormat.resourceProgression\n ],\n displayInImmersive: false,\n displayInFullscreen: false\n }\n }\n },\n fxl: {\n default: {\n variants: [\n ThProgressionFormat.positionsOfTotal, \n ThProgressionFormat.overallProgression,\n ThProgressionFormat.none\n ],\n displayInImmersive: true,\n displayInFullscreen: true\n },\n breakpoints: {\n [ThBreakpoints.compact]: {\n variants: [\n ThProgressionFormat.positions, \n ThProgressionFormat.overallProgression,\n ThProgressionFormat.none\n ],\n displayInImmersive: false,\n displayInFullscreen: true\n }\n }\n },\n webPub: {\n default: {\n variants: [\n ThProgressionFormat.readingOrderIndex, \n ThProgressionFormat.none\n ],\n displayInImmersive: true,\n displayInFullscreen: true\n }\n }\n }\n },\n arrow: {\n size: 40, // Size of the left and right arrows in px\n offset: 5 // offset of the arrows from the edges in px\n },\n icon: {\n size: 24, // Size of icons in px\n tooltipOffset: 10 // offset of tooltip in px\n },\n layout: {\n ui: {\n reflow: ThLayoutUI.layered,\n fxl: ThLayoutUI.layered,\n webPub: ThLayoutUI.stacked\n },\n radius: 5, // border-radius of containers\n spacing: 20, // padding of containers/sheets\n defaults: {\n dockingWidth: 340, // default width of resizable panels\n scrim: \"rgba(0, 0, 0, 0.2)\" // default scrim/underlay bg-color\n },\n constraints: {\n [ThSheetTypes.bottomSheet]: 600, // Max-width of all bottom sheets\n [ThSheetTypes.popover]: 600, // Max-width of all popover sheets\n pagination: 1024 // Max-width of pagination component\n }\n },\n breakpoints: {\n // See https://m3.material.io/foundations/layout/applying-layout/window-size-classes\n [ThBreakpoints.compact]: 600, // Phone in portrait\n [ThBreakpoints.medium]: 840, // Tablet in portrait, Foldable in portrait (unfolded)\n [ThBreakpoints.expanded]: 1200, // Phone in landscape, Tablet in landscape, Foldable in landscape (unfolded), Desktop\n [ThBreakpoints.large]: 1600, // Desktop\n [ThBreakpoints.xLarge]: null // Desktop Ultra-wide\n },\n themes: {\n reflowOrder: [\n \"auto\", \n ThThemeKeys.light, \n ThThemeKeys.sepia, \n ThThemeKeys.paper, \n ThThemeKeys.dark, \n ThThemeKeys.contrast1, \n ThThemeKeys.contrast2, \n ThThemeKeys.contrast3\n ],\n fxlOrder: [\n \"auto\",\n ThThemeKeys.light,\n ThThemeKeys.dark\n ],\n systemThemes: {\n light: ThThemeKeys.light,\n dark: ThThemeKeys.dark\n },\n keys: {\n [ThThemeKeys.light]: {\n background: ReadiumCSSColors.RS__backgroundColor, // Color of background\n text: ReadiumCSSColors.RS__textColor, // Color of text\n link: \"#0000ee\", // Color of links\n visited: \"#551a8b\", // Color of visited links\n subdue: \"#808080\", // Color of subdued elements\n disable: \"#808080\", // color for :disabled\n hover: \"#d9d9d9\", // color of background for :hover\n onHover: ReadiumCSSColors.RS__textColor, // color of text for :hover\n select: \"#b4d8fe\", // color of selected background\n onSelect: \"inherit\", // color of selected text\n focus: \"#0067f4\", // color of :focus-visible\n elevate: \"0px 0px 2px #808080\", // drop shadow of containers\n immerse: \"0.6\" // opacity of immersive mode\n },\n [ThThemeKeys.sepia]: {\n background: \"#faf4e8\",\n text: \"#121212\",\n link: \"#0000EE\",\n visited: \"#551A8B\",\n subdue: \"#8c8c8c\",\n disable: \"#8c8c8c\",\n hover: \"#edd7ab\",\n onHover: \"#121212\",\n select: \"#b4d8fe\",\n onSelect: \"inherit\",\n focus: \"#0067f4\",\n elevate: \"0px 0px 2px #8c8c8c\",\n immerse: \"0.5\"\n },\n [ThThemeKeys.dark]: {\n background: \"#000000\",\n text: \"#FEFEFE\",\n link: \"#63caff\",\n visited: \"#0099E5\",\n subdue: \"#808080\",\n disable: \"#808080\",\n hover: \"#404040\",\n onHover: \"#FEFEFE\",\n select: \"#b4d8fe\",\n onSelect: \"inherit\",\n focus: \"#0067f4\",\n elevate: \"0px 0px 2px #808080\",\n immerse: \"0.4\"\n },\n [ThThemeKeys.paper]: {\n background: \"#e9ddc8\",\n text: \"#000000\",\n link: \"#0000EE\",\n visited: \"#551A8B\",\n subdue: \"#8c8c8c\",\n disable: \"#8c8c8c\",\n hover: \"#ccb07f\",\n onHover: \"#000000\",\n select: \"#b4d8fe\",\n onSelect: \"inherit\",\n focus: \"#004099\",\n elevate: \"0px 0px 2px #8c8c8c\",\n immerse: \"0.45\"\n },\n [ThThemeKeys.contrast1]: {\n background: \"#000000\",\n text: \"#ffff00\",\n link: \"#63caff\",\n visited: \"#0099E5\",\n subdue: \"#808000\",\n disable: \"#808000\",\n hover: \"#404040\",\n onHover: \"#ffff00\",\n select: \"#b4d8fe\",\n onSelect: \"inherit\",\n focus: \"#0067f4\",\n elevate: \"0px 0px 2px #808000\",\n immerse: \"0.4\"\n },\n [ThThemeKeys.contrast2]: {\n background: \"#181842\",\n text: \"#ffffff\",\n link: \"#adcfff\",\n visited: \"#7ab2ff\",\n subdue: \"#808080\",\n disable: \"#808080\",\n hover: \"#4444bb\",\n onHover: \"#ffffff\",\n select: \"#b4d8fe\",\n onSelect: \"inherit\",\n focus: \"#6BA9FF\",\n elevate: \"0px 0px 2px #808080\",\n immerse: \"0.4\"\n },\n [ThThemeKeys.contrast3]: {\n background: \"#c5e7cd\",\n text: \"#000000\",\n link: \"#0000EE\",\n visited: \"#551A8B\",\n subdue: \"#8c8c8c\",\n disable: \"#8c8c8c\",\n hover: \"#6fc383\",\n onHover: \"#000000\",\n select: \"#b4d8fe\",\n onSelect: \"inherit\",\n focus: \"#004099\",\n elevate: \"0px 0px 2px #8c8c8c\",\n immerse: \"0.45\"\n }\n }\n },\n },\n affordances: { \n scroll: {\n hintInImmersive: true,\n toggleOnMiddlePointer: [\"tap\", \"click\"],\n hideOnForwardScroll: true,\n showOnBackwardScroll: true\n },\n paginated: {\n reflow: {\n default: {\n variant: ThArrowVariant.layered,\n discard: [\"navigation\"],\n hint: [\"layoutChange\"]\n },\n breakpoints: {\n [ThBreakpoints.large]: {\n variant: ThArrowVariant.stacked\n },\n [ThBreakpoints.xLarge]: {\n variant: ThArrowVariant.stacked\n }\n }\n },\n fxl: {\n default: {\n variant: ThArrowVariant.layered,\n discard: [\"navigation\"],\n hint: \"none\"\n },\n breakpoints: {\n [ThBreakpoints.large]: {\n variant: ThArrowVariant.stacked\n },\n [ThBreakpoints.xLarge]: {\n variant: ThArrowVariant.stacked\n }\n }\n }\n }\n },\n shortcuts: {\n representation: UnstableShortcutRepresentation.symbol,\n joiner: \"+\"\n },\n actions: {\n reflowOrder: [\n ThActionsKeys.settings,\n ThActionsKeys.toc,\n ThActionsKeys.fullscreen,\n ThActionsKeys.jumpToPosition\n ],\n fxlOrder: [\n ThActionsKeys.settings,\n ThActionsKeys.toc,\n ThActionsKeys.fullscreen,\n ThActionsKeys.jumpToPosition\n ],\n webPubOrder: [\n ThActionsKeys.settings,\n ThActionsKeys.toc,\n ThActionsKeys.fullscreen\n ],\n collapse: {\n // Number of partially icons to display\n // value \"all\" a keyword for the length of displayOrder above\n // Icons with visibility always are excluded from collapsing\n [ThBreakpoints.compact]: 2,\n [ThBreakpoints.medium]: 3\n }, \n keys: {\n [ThActionsKeys.settings]: {\n visibility: ThCollapsibilityVisibility.partially,\n shortcut: null, // `${ UnstableShortcutMetaKeywords.shift }+${ ShortcutMetaKeywords.alt }+P`,\n sheet: {\n defaultSheet: ThSheetTypes.popover,\n breakpoints: {\n [ThBreakpoints.compact]: ThSheetTypes.bottomSheet\n }\n },\n docked: {\n dockable: ThDockingTypes.none,\n width: 340\n },\n snapped: {\n scrim: true,\n peekHeight: 50,\n minHeight: 30,\n maxHeight: 100\n }\n },\n [ThActionsKeys.fullscreen]: {\n visibility: ThCollapsibilityVisibility.partially,\n shortcut: null\n },\n [ThActionsKeys.toc]: {\n visibility: ThCollapsibilityVisibility.partially,\n shortcut: null, // `${ UnstableShortcutMetaKeywords.shift }+${ ShortcutMetaKeywords.alt }+T`,\n sheet: {\n defaultSheet: ThSheetTypes.popover,\n breakpoints: {\n [ThBreakpoints.compact]: ThSheetTypes.fullscreen,\n [ThBreakpoints.medium]: ThSheetTypes.fullscreen\n }\n },\n docked: {\n dockable: ThDockingTypes.both,\n dragIndicator: false,\n width: 360,\n minWidth: 320,\n maxWidth: 450\n }\n },\n [ThActionsKeys.jumpToPosition]: {\n visibility: ThCollapsibilityVisibility.overflow,\n shortcut: null, // `${ UnstableShortcutMetaKeywords.shift }+${ ShortcutMetaKeywords.alt }+J`,\n sheet: {\n defaultSheet: ThSheetTypes.popover,\n breakpoints: {\n [ThBreakpoints.compact]: ThSheetTypes.bottomSheet\n }\n },\n docked: {\n dockable: ThDockingTypes.none\n },\n snapped: {\n scrim: true,\n minHeight: \"content-height\"\n }\n }\n }\n },\n docking: {\n displayOrder: [\n ThDockingKeys.transient,\n ThDockingKeys.start,\n ThDockingKeys.end\n ],\n dock: {\n [ThBreakpoints.compact]: ThDockingTypes.none,\n [ThBreakpoints.medium]: ThDockingTypes.none,\n [ThBreakpoints.expanded]: ThDockingTypes.start,\n [ThBreakpoints.large]: ThDockingTypes.both,\n [ThBreakpoints.xLarge]: ThDockingTypes.both\n },\n collapse: true,\n keys: {\n [ThDockingKeys.start]: {\n visibility: ThCollapsibilityVisibility.overflow,\n shortcut: null\n },\n [ThDockingKeys.end]: {\n visibility: ThCollapsibilityVisibility.overflow,\n shortcut: null\n },\n [ThDockingKeys.transient]: {\n visibility: ThCollapsibilityVisibility.overflow,\n shortcut: null\n }\n }\n },\n settings: {\n reflowOrder: [\n ThSettingsKeys.zoom,\n ThSettingsKeys.textGroup,\n ThSettingsKeys.theme,\n ThSettingsKeys.spacingGroup,\n ThSettingsKeys.layout,\n ThSettingsKeys.columns\n ],\n fxlOrder: [\n ThSettingsKeys.theme,\n ThSettingsKeys.columns\n ],\n webPubOrder: [\n ThSettingsKeys.zoom,\n ThSettingsKeys.textGroup,\n ThSettingsKeys.spacingGroup\n ],\n keys: {\n [ThSettingsKeys.letterSpacing]: defaultLetterSpacing,\n [ThSettingsKeys.lineHeight]: {\n allowUnset: false,\n keys: defaultLineHeights\n },\n [ThSettingsKeys.paragraphIndent]: defaultParagraphIndent,\n [ThSettingsKeys.paragraphSpacing]: defaultParagraphSpacing,\n [ThSettingsKeys.wordSpacing]: defaultWordSpacing,\n [ThSettingsKeys.zoom]: defaultZoom\n },\n text: {\n header: ThSheetHeaderVariant.previous\n },\n spacing: {\n header: ThSheetHeaderVariant.previous,\n presets: {\n reflowOrder: defaultSpacingPresetsOrder,\n webPubOrder: defaultSpacingPresetsOrder,\n keys: defaultSpacingPresets\n }\n }\n }\n})","\"use client\";\n\nimport { createContext } from \"react\";\nimport { defaultPreferences } from \"./defaultPreferences\";\nimport { ThPreferences, DefaultKeys, CustomizableKeys } from \"./preferences\";\n\nexport interface PreferencesContextValue<K extends CustomizableKeys = DefaultKeys> {\n preferences: ThPreferences<K>;\n updatePreferences: (prefs: ThPreferences<K>) => void;\n}\n\n// Create a context with a default value that will be overridden\nexport const ThPreferencesContext = createContext<PreferencesContextValue<any> | null>(null);\n\n// Keep the default export for backward compatibility\nexport const defaultPreferencesContextValue: PreferencesContextValue<DefaultKeys> = {\n preferences: defaultPreferences as ThPreferences<DefaultKeys>,\n updatePreferences: () => {\n throw new Error(\"updatePreferences must be used within a ThPreferencesProvider with an adapter\");\n },\n};","import { ThPreferences, CustomizableKeys } from \"../preferences\";\nimport { ThPreferencesAdapter } from \"./ThPreferencesAdapter\";\n\nexport class ThMemoryPreferencesAdapter<T extends CustomizableKeys = CustomizableKeys> implements ThPreferencesAdapter<T> {\n private currentPreferences: ThPreferences<T>;\n private listeners: Set<(prefs: ThPreferences<T>) => void> = new Set();\n\n constructor(initialPreferences: ThPreferences<T>) {\n this.currentPreferences = { ...initialPreferences };\n }\n\n public getPreferences(): ThPreferences<T> {\n return { ...this.currentPreferences };\n }\n\n public setPreferences(prefs: ThPreferences<T>): void {\n this.currentPreferences = { ...prefs };\n this.notifyListeners(this.currentPreferences);\n }\n\n public subscribe(listener: (prefs: ThPreferences<T>) => void): void {\n this.listeners.add(listener);\n }\n\n public unsubscribe(listener: (prefs: ThPreferences<T>) => void): void {\n this.listeners.delete(listener);\n }\n\n private notifyListeners(prefs: ThPreferences<T>): void {\n this.listeners.forEach(listener => listener({ ...prefs }));\n }\n}\n","\"use client\";\n\nimport { useEffect } from \"react\";\n\nimport { ThLayoutDirection } from \"./models/enums\";\n\nexport const ThDirectionSetter = ({ \n direction, \n children \n}: { \n direction?: ThLayoutDirection,\n children: React.ReactNode \n}) => {\n \n useEffect(() => {\n if (direction) document.documentElement.dir = direction;\n }, [direction]);\n\n return children;\n};","\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { ThPreferences, CustomizableKeys, DefaultKeys } from \"./preferences\";\nimport { ThPreferencesContext, defaultPreferencesContextValue } from \"./ThPreferencesContext\";\n\nimport { ThPreferencesAdapter } from \"./adapters/ThPreferencesAdapter\";\nimport { ThMemoryPreferencesAdapter } from \"./adapters/ThMemoryPreferencesAdapter\";\nimport { ThDirectionSetter } from \"./ThDirectionSetter\";\n\ntype Props<K extends CustomizableKeys = DefaultKeys> = {\n adapter?: ThPreferencesAdapter<K>;\n initialPreferences?: ThPreferences<K>;\n children: React.ReactNode;\n};\n\nexport function ThPreferencesProvider<K extends CustomizableKeys = DefaultKeys>({ \n adapter,\n initialPreferences,\n children, \n}: Props<K>) {\n // Create a default in-memory adapter if none is provided\n const effectiveAdapter = useMemo(() => {\n return adapter || new ThMemoryPreferencesAdapter<K>(\n (initialPreferences as ThPreferences<K>) || (defaultPreferencesContextValue.preferences as ThPreferences<K>)\n );\n }, [adapter, initialPreferences]);\n \n const [preferences, setPreferences] = useState<ThPreferences<K>>(\n (initialPreferences || defaultPreferencesContextValue.preferences) as ThPreferences<K>\n );\n\n // Handle preference changes\n const handlePreferenceChange = useCallback((newPrefs: ThPreferences<K>) => {\n setPreferences(prev => {\n // Only update if preferences actually changed\n return JSON.stringify(prev) === JSON.stringify(newPrefs) ? prev : newPrefs;\n });\n }, []);\n\n // Set up and clean up subscription to preference changes\n useEffect(() => {\n // Set up the subscription\n effectiveAdapter.subscribe(handlePreferenceChange);\n \n // Clean up the subscription when the component unmounts or dependencies change\n return () => {\n effectiveAdapter.unsubscribe(handlePreferenceChange);\n };\n }, [effectiveAdapter, handlePreferenceChange]);\n\n // Provide current app context typing\n const contextValue = useMemo(() => ({\n preferences,\n updatePreferences: (newPrefs: ThPreferences<K>) => {\n effectiveAdapter.setPreferences(newPrefs);\n },\n }), [preferences, effectiveAdapter]);\n\n return (\n <ThPreferencesContext.Provider value={ contextValue }>\n <ThDirectionSetter direction={ preferences.direction }>\n { children }\n </ThDirectionSetter>\n </ThPreferencesContext.Provider>\n );\n}","\"use client\";\n\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\nimport { ThemeTokens } from \"../hooks/useTheming\";\n\nexport interface buildThemeProps<T extends string> {\n theme?: string;\n themeKeys: { [key in T]?: ThemeTokens },\n systemThemes?: {\n light: T,\n dark: T\n },\n colorScheme?: ThColorScheme;\n}\n\nexport const buildThemeObject = <T extends string>({\n theme,\n themeKeys,\n systemThemes,\n colorScheme\n}: buildThemeProps<T>) => {\n if (!theme) {\n return {};\n }\n\n if (theme === \"auto\" && colorScheme && systemThemes) {\n theme = colorScheme === ThColorScheme.dark ? systemThemes.dark : systemThemes.light;\n }\n\n let themeProps = {};\n\n const themeToken = themeKeys[theme as T];\n if (themeToken) {\n themeProps = {\n backgroundColor: themeToken.background,\n textColor: themeToken.text,\n linkColor: themeToken.link,\n selectionBackgroundColor: themeToken.select,\n selectionTextColor: themeToken.onSelect,\n visitedColor: themeToken.visited\n };\n } else {\n // Fallback if theme doesn't exist\n console.warn(`Theme key \"${String(theme)}\" not found in themeKeys.`);\n themeProps = {\n backgroundColor: null,\n textColor: null,\n linkColor: null,\n selectionBackgroundColor: null,\n selectionTextColor: null,\n visitedColor: null\n };\n }\n\n return themeProps;\n};","\"use client\";\n\nimport { useContext } from \"react\";\nimport { ThPreferencesContext } from \"../ThPreferencesContext\";\nimport { CustomizableKeys, DefaultKeys, ThPreferences } from \"../preferences\";\n\nexport function usePreferences<K extends CustomizableKeys = DefaultKeys>() {\n const context = useContext(ThPreferencesContext);\n \n if (!context) {\n throw new Error(\"usePreferences must be used within a ThPreferencesProvider\");\n }\n \n return {\n preferences: context.preferences as ThPreferences<K>,\n updatePreferences: context.updatePreferences as (prefs: ThPreferences<K>) => void,\n };\n}","\"use client\";\n\nimport { ThSpacingPresetKeys } from \"@/preferences/models/enums\";\nimport { \n defaultSpacingSettingsSubpanel,\n defaultTextSettingsMain,\n defaultTextSettingsSubpanel,\n defaultSpacingSettingsMain,\n defaultSpacingPresetsOrder\n} from \"@/preferences/models/const\";\n\nimport { usePreferences } from \"./usePreferences\";\n\nexport const usePreferenceKeys = () => {\n const { preferences } = usePreferences();\n\n const reflowActionKeys = preferences.actions.reflowOrder;\n const fxlActionKeys = preferences.actions.fxlOrder;\n const webPubActionKeys = preferences.actions.webPubOrder;\n\n const reflowThemeKeys = preferences.theming.themes.reflowOrder;\n const fxlThemeKeys = preferences.theming.themes.fxlOrder;\n\n const reflowSettingsKeys = preferences.settings.reflowOrder;\n const fxlSettingsKeys = preferences.settings.fxlOrder;\n const webPubSettingsKeys = preferences.settings.webPubOrder;\n\n const mainTextSettingsKeys = preferences.settings.text?.main ?? defaultTextSettingsMain;\n const subPanelTextSettingsKeys = preferences.settings.text?.subPanel ?? defaultTextSettingsSubpanel;\n const mainSpacingSettingsKeys = preferences.settings.spacing?.main ?? defaultSpacingSettingsMain;\n const subPanelSpacingSettingsKeys = preferences.settings.spacing?.subPanel ?? defaultSpacingSettingsSubpanel;\n\n const reflowSpacingPresetKeys = preferences.settings.spacing?.presets?.reflowOrder ?? defaultSpacingPresetsOrder;\n const fxlSpacingPresetKeys: ThSpacingPresetKeys[] = [];\n const webPubSpacingPresetKeys = preferences.settings.spacing?.presets?.webPubOrder ?? defaultSpacingPresetsOrder;\n\n return {\n reflowActionKeys,\n fxlActionKeys,\n webPubActionKeys,\n reflowThemeKeys,\n fxlThemeKeys,\n reflowSettingsKeys,\n fxlSettingsKeys,\n webPubSettingsKeys,\n mainTextSettingsKeys,\n subPanelTextSettingsKeys,\n mainSpacingSettingsKeys,\n subPanelSpacingSettingsKeys,\n reflowSpacingPresetKeys,\n fxlSpacingPresetKeys,\n webPubSpacingPresetKeys\n };\n}","\"use client\";\n\nimport { useCallback, useEffect, useRef } from \"react\";\n\nimport { CSSColor } from \"../CSSValues\";\n\nimport { ThBreakpoints } from \"../models/enums\";\nimport { BreakpointsMap, useBreakpoints } from \"@/core/Hooks/useBreakpoints\";\nimport { useReducedMotion } from \"@/core/Hooks/useReducedMotion\";\nimport { useReducedTransparency } from \"@/core/Hooks/useReducedTransparency\";\nimport { ThColorScheme, useColorScheme } from \"@/core/Hooks/useColorScheme\";\nimport { ThContrast, useContrast } from \"@/core/Hooks/useContrast\";\nimport { useForcedColors } from \"@/core/Hooks/useForcedColors\";\nimport { useMonochrome } from \"@/core/Hooks/useMonochrome\";\n\nimport { propsToCSSVars } from \"@/core/Helpers/propsToCSSVars\";\n\nexport interface ThemeTokens {\n background: CSSColor;\n text: CSSColor;\n link: CSSColor;\n visited: CSSColor;\n subdue: CSSColor;\n disable: CSSColor;\n hover: CSSColor;\n onHover: CSSColor;\n select: CSSColor;\n onSelect: CSSColor;\n focus: CSSColor;\n elevate: string;\n immerse: string;\n};\n\nexport interface useThemingProps<T extends string> {\n theme?: string;\n themeKeys: { [key in T]?: ThemeTokens };\n systemKeys?: {\n light: T;\n dark: T;\n };\n breakpointsMap: BreakpointsMap<number | null>;\n initProps?: Record<string, any>;\n onBreakpointChange?: (breakpoint: ThBreakpoints | null) => void;\n onColorSchemeChange?: (colorScheme: ThColorScheme) => void;\n onContrastChange?: (contrast: ThContrast) => void;\n onForcedColorsChange?: (forcedColors: boolean) => void;\n onMonochromeChange?: (isMonochrome: boolean) => void;\n onReducedMotionChange?: (reducedMotion: boolean) => void;\n onReducedTransparencyChange?: (reducedTransparency: boolean) => void; \n}\n\n// Takes care of the init of theming and side effects on :root/html\n// Reader still has to handle the side effects on Navigator\nexport const useTheming = <T extends string>({\n theme,\n systemKeys,\n themeKeys,\n breakpointsMap,\n initProps,\n onBreakpointChange,\n onColorSchemeChange,\n onContrastChange,\n onForcedColorsChange,\n onMonochromeChange,\n onReducedMotionChange,\n onReducedTransparencyChange,\n}: useThemingProps<T>) => {\n const breakpoints = useBreakpoints(breakpointsMap, onBreakpointChange);\n const colorScheme = useColorScheme(onColorSchemeChange);\n const colorSchemeRef = useRef(colorScheme);\n const contrast = useContrast(onContrastChange);\n const forcedColors = useForcedColors(onForcedColorsChange);\n const monochrome = useMonochrome(onMonochromeChange);\n const reducedMotion = useReducedMotion(onReducedMotionChange);\n const reducedTransparency = useReducedTransparency(onReducedTransparencyChange);\n\n const updateThemeColorMetaTag = useCallback((color: string): void => {\n if (typeof document === \"undefined\") return;\n \n let metaTag = document.querySelector(\"meta[name='theme-color']\");\n if (!metaTag) {\n metaTag = document.createElement(\"meta\");\n metaTag.setAttribute(\"name\", \"theme-color\");\n document.head.appendChild(metaTag);\n }\n metaTag.setAttribute(\"content\", color);\n }, []);\n\n const inferThemeAuto = useCallback(() => {\n return colorSchemeRef.current === ThColorScheme.dark ? systemKeys?.dark : systemKeys?.light;\n }, [systemKeys]);\n\n const initThemingCustomProps = useCallback(() => {\n for (let p in initProps) {\n document.documentElement.style.setProperty(p, initProps[p])\n }\n }, [initProps]);\n\n const setThemeCustomProps = useCallback((t?: string) => {\n if (!t) {\n return;\n }\n\n if (t === \"auto\") {\n const autoTheme = inferThemeAuto();\n if (!autoTheme) {\n // We are not removing properties cos iframes won’t update\n // Removing here would consequently create a theme inconsistency\n // between the iframe and the main window\n return;\n }\n t = autoTheme;\n }\n \n const themeTokens = themeKeys[t as T];\n if (!themeTokens) {\n // We are not removing properties cos iframes won’t update\n // Removing here would consequently create a theme inconsistency\n // between the iframe and the main window\n return;\n }\n \n const props = propsToCSSVars(themeTokens, \"theme\");\n \n for (let p in props) {\n document.documentElement.style.setProperty(p, props[p])\n }\n\n updateThemeColorMetaTag(themeTokens.background);\n }, [inferThemeAuto, updateThemeColorMetaTag, themeKeys]);\n\n // On mount add custom props to :root/html\n useEffect(() => {\n initThemingCustomProps();\n }, [initThemingCustomProps]);\n\n // Update theme custom props\n useEffect(() => {\n colorSchemeRef.current = colorScheme;\n setThemeCustomProps(theme);\n }, [setThemeCustomProps, theme, colorScheme]);\n\n return {\n inferThemeAuto,\n theme, \n breakpoints,\n colorScheme,\n contrast, \n forcedColors, \n monochrome, \n reducedMotion, \n reducedTransparency\n }\n}"]}