@edrlab/thorium-web 1.1.4 → 1.1.5

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/dist/{StatefulReader-lpxHxgKK.d.mts → StatefulReader-CjgFzHoO.d.mts} +5 -5
  2. package/dist/ThPreferencesAdapter-B8AYujCA.d.mts +649 -0
  3. package/dist/{ThSettingsWrapper-CMLegiqy.d.mts → ThSettingsWrapper-BlmAxcWF.d.mts} +1 -1
  4. package/dist/actions-BRtHsxpm.d.mts +108 -0
  5. package/dist/{actionsReducer-6UNIgifE.d.mts → actionsReducer-bT0pfxLJ.d.mts} +1 -1
  6. package/dist/{chunk-VH22EPOM.mjs → chunk-47AIIJFO.mjs} +3 -3
  7. package/dist/chunk-47AIIJFO.mjs.map +1 -0
  8. package/dist/{chunk-GKXS45F4.mjs → chunk-52DIMN52.mjs} +20 -20
  9. package/dist/chunk-52DIMN52.mjs.map +1 -0
  10. package/dist/{chunk-MW7LXDWC.mjs → chunk-7HPUATGT.mjs} +3 -3
  11. package/dist/{chunk-MW7LXDWC.mjs.map → chunk-7HPUATGT.mjs.map} +1 -1
  12. package/dist/{chunk-KTZPAJ4S.mjs → chunk-COQXDRKD.mjs} +2 -2
  13. package/dist/chunk-COQXDRKD.mjs.map +1 -0
  14. package/dist/{chunk-BNPR6V7V.mjs → chunk-GFSLVQIG.mjs} +2 -2
  15. package/dist/chunk-GFSLVQIG.mjs.map +1 -0
  16. package/dist/{chunk-GZDYMUV7.mjs → chunk-KTPIH35Y.mjs} +2 -2
  17. package/dist/chunk-KTPIH35Y.mjs.map +1 -0
  18. package/dist/{chunk-KKMH2EPS.mjs → chunk-M7KIO4DQ.mjs} +6 -4
  19. package/dist/chunk-M7KIO4DQ.mjs.map +1 -0
  20. package/dist/chunk-XVSFXHYB.mjs +78 -0
  21. package/dist/chunk-XVSFXHYB.mjs.map +1 -0
  22. package/dist/{chunk-VN44OJDD.mjs → chunk-YIW2OOMW.mjs} +567 -358
  23. package/dist/chunk-YIW2OOMW.mjs.map +1 -0
  24. package/dist/components/Epub/index.d.mts +8 -9
  25. package/dist/components/Epub/index.mjs +25 -17
  26. package/dist/components/Epub/index.mjs.map +1 -1
  27. package/dist/components/Misc/index.mjs +1 -2
  28. package/dist/components/Misc/index.mjs.map +1 -1
  29. package/dist/components/WebPub/index.d.mts +10 -10
  30. package/dist/components/WebPub/index.mjs +22 -16
  31. package/dist/components/WebPub/index.mjs.map +1 -1
  32. package/dist/core/Components/index.d.mts +6 -5
  33. package/dist/core/Components/index.mjs +1 -2
  34. package/dist/core/Helpers/index.d.mts +1 -2
  35. package/dist/core/Helpers/index.mjs +2 -3
  36. package/dist/core/Hooks/index.d.mts +3 -4
  37. package/dist/core/Hooks/index.mjs +2 -3
  38. package/dist/i18n/index.mjs +4 -5
  39. package/dist/lib/index.d.mts +8 -9
  40. package/dist/lib/index.mjs +1 -2
  41. package/dist/locales/en/thorium-web.json +1 -0
  42. package/dist/preferences/index.d.mts +7 -54
  43. package/dist/preferences/index.mjs +3 -4
  44. package/dist/ui-BVlJcPL_.d.mts +105 -0
  45. package/dist/{useEpubNavigator-DQq5VlY0.d.mts → useEpubNavigator-CsraD65e.d.mts} +2 -1
  46. package/dist/{usePreferences-CM_Y2jpZ.d.mts → usePreferences-rfT368__.d.mts} +3 -2
  47. package/dist/{useWebPubNavigator-XFUVekhV.d.mts → useWebPubNavigator-Che8r5Wg.d.mts} +2 -1
  48. package/package.json +21 -21
  49. package/dist/ThPreferencesAdapter-CcJgE3zC.d.mts +0 -405
  50. package/dist/chunk-7CGMWOZN.mjs +0 -20
  51. package/dist/chunk-7CGMWOZN.mjs.map +0 -1
  52. package/dist/chunk-BNPR6V7V.mjs.map +0 -1
  53. package/dist/chunk-CVM2ZAPL.mjs +0 -187
  54. package/dist/chunk-CVM2ZAPL.mjs.map +0 -1
  55. package/dist/chunk-GKXS45F4.mjs.map +0 -1
  56. package/dist/chunk-GZDYMUV7.mjs.map +0 -1
  57. package/dist/chunk-KKMH2EPS.mjs.map +0 -1
  58. package/dist/chunk-KTZPAJ4S.mjs.map +0 -1
  59. package/dist/chunk-VH22EPOM.mjs.map +0 -1
  60. package/dist/chunk-VN44OJDD.mjs.map +0 -1
  61. package/dist/enums-Bhwwdfx5.d.mts +0 -160
  62. package/dist/useBreakpoints-LTrHif3E.d.mts +0 -22
  63. package/dist/useCollapsibility-CM1I24Ol.d.mts +0 -40
package/package.json CHANGED
@@ -20,7 +20,7 @@
20
20
  "bugs": {
21
21
  "url": "https://github.com/edrlab/thorium-web/issues"
22
22
  },
23
- "version": "1.1.4",
23
+ "version": "1.1.5",
24
24
  "private": false,
25
25
  "files": [
26
26
  "./dist"
@@ -59,38 +59,38 @@
59
59
  "bundle": "pnpm extract-locales && tsup --config tsup.config.ts && pnpm copy-locales && pnpm copy-fonts"
60
60
  },
61
61
  "peerDependencies": {
62
- "@readium/css": "2.0.0-beta.24",
63
- "@readium/navigator": "2.2.9",
64
- "@readium/navigator-html-injectables": "2.2.5",
62
+ "@readium/css": "^2.0.0",
63
+ "@readium/navigator": "2.3.0",
64
+ "@readium/navigator-html-injectables": "2.3.0",
65
65
  "@readium/shared": "2.1.5",
66
66
  "@reduxjs/toolkit": "^2.11.2",
67
- "i18next": "^25.7.4",
68
- "i18next-browser-languagedetector": "^8.2.0",
67
+ "i18next": "^25.8.13",
68
+ "i18next-browser-languagedetector": "^8.2.1",
69
69
  "i18next-http-backend": "^3.0.2",
70
- "motion": "^12.26.2",
71
- "react": "^19.2.3",
72
- "react-aria": "^3.45.0",
73
- "react-aria-components": "^1.14.0",
74
- "react-dom": "^19.2.3",
75
- "react-i18next": "^16.5.3",
70
+ "motion": "^12.34.3",
71
+ "react": "^19.2.4",
72
+ "react-aria": "^3.46.0",
73
+ "react-aria-components": "^1.15.1",
74
+ "react-dom": "^19.2.4",
75
+ "react-i18next": "^16.5.4",
76
76
  "react-modal-sheet": "^5.2.1",
77
77
  "react-redux": "^9.2.0",
78
78
  "react-resizable-panels": "^3.0.6",
79
- "react-stately": "^3.43.0"
79
+ "react-stately": "^3.44.0"
80
80
  },
81
81
  "dependencies": {
82
82
  "@edrlab/thorium-locales": "github:edrlab/thorium-locales",
83
- "@readium/css": "2.0.0-beta.24",
84
- "@readium/navigator": "2.2.9",
85
- "@readium/navigator-html-injectables": "2.2.5",
83
+ "@readium/css": "^2.0.0",
84
+ "@readium/navigator": "2.3.0",
85
+ "@readium/navigator-html-injectables": "2.3.0",
86
86
  "@readium/shared": "2.1.5",
87
87
  "@reduxjs/toolkit": "^2.11.2",
88
88
  "classnames": "^2.5.1",
89
89
  "debounce": "^3.0.0",
90
- "i18next": "^25.8.4",
91
- "i18next-browser-languagedetector": "^8.2.0",
90
+ "i18next": "^25.8.13",
91
+ "i18next-browser-languagedetector": "^8.2.1",
92
92
  "i18next-http-backend": "^3.0.2",
93
- "motion": "^12.33.2",
93
+ "motion": "^12.34.3",
94
94
  "next": "16.1.6",
95
95
  "react": "^19.2.4",
96
96
  "react-aria": "^3.46.0",
@@ -106,13 +106,13 @@
106
106
  "@svgr/webpack": "^8.1.0",
107
107
  "@types/css-modules": "^1.0.5",
108
108
  "@types/node": "^22.19.7",
109
- "@types/react": "^19.2.13",
109
+ "@types/react": "^19.2.14",
110
110
  "@types/react-dom": "^19.2.3",
111
111
  "cpx2": "^8.0.0",
112
112
  "esbuild-plugin-svgr": "^3.1.1",
113
113
  "eslint": "^9.39.2",
114
114
  "eslint-config-next": "16.1.6",
115
- "glob": "^13.0.1",
115
+ "glob": "^13.0.6",
116
116
  "immer": "11.1.2",
117
117
  "tsup": "^8.5.1",
118
118
  "typescript": "^5.9.3"
@@ -1,405 +0,0 @@
1
- import { e as UnstableShortcutRepresentation } from './keyboardUtilities-BWAyLS_D.mjs';
2
- import { B as BreakpointsMap, T as ThBreakpointsObject } from './useBreakpoints-LTrHif3E.mjs';
3
- import { b as ThBreakpoints, d as ThArrowVariant, e as ThLayoutDirection, f as ThDocumentTitleFormat, g as ThBackLinkVariant, h as ThRunningHeadFormat, i as ThProgressionFormat, j as ThLayoutUI, k as ThSheetTypes, l as ThThemeKeys, m as ThActionsKeys, n as ThDockingTypes, c as ThDockingKeys, o as ThSettingsKeys, p as ThTextSettingsKeys, q as ThSpacingSettingsKeys, r as ThSettingsRangeVariant, s as ThSettingsRangePlaceholder, T as ThLineHeightOptions, t as ThSheetHeaderVariant, u as ThSpacingPresetKeys } from './enums-Bhwwdfx5.mjs';
4
- import { T as ThColorScheme, a as ThContrast } from './useContrast-Cgsrl7GS.mjs';
5
- import { ExperimentKey } from '@readium/navigator';
6
- import { T as ThCollapsibility, a as ThCollapsibilityVisibility } from './useCollapsibility-CM1I24Ol.mjs';
7
-
8
- type CSSColor = string | `#${string}` | `rgb(${string})` | `rgba(${string})` | `hsl(${string})` | `hsla(${string})` | `hwb(${string})` | `lab(${string})` | `lch(${string})` | `oklab(${string})` | `oklch(${string})` | `color(${string})` | `color-mix(${string})` | `light-dark(${string})`;
9
-
10
- interface ThemeTokens {
11
- background: CSSColor;
12
- text: CSSColor;
13
- link: CSSColor;
14
- visited: CSSColor;
15
- subdue: CSSColor;
16
- disable: CSSColor;
17
- hover: CSSColor;
18
- onHover: CSSColor;
19
- select: CSSColor;
20
- onSelect: CSSColor;
21
- focus: CSSColor;
22
- elevate: string;
23
- immerse: string;
24
- }
25
- interface useThemingProps<T extends string> {
26
- theme?: string;
27
- themeKeys: {
28
- [key in T]?: ThemeTokens;
29
- };
30
- systemKeys?: {
31
- light: T;
32
- dark: T;
33
- };
34
- breakpointsMap: BreakpointsMap<number | null>;
35
- initProps?: Record<string, any>;
36
- onBreakpointChange?: (breakpoint: ThBreakpoints | null) => void;
37
- onColorSchemeChange?: (colorScheme: ThColorScheme) => void;
38
- onContrastChange?: (contrast: ThContrast) => void;
39
- onForcedColorsChange?: (forcedColors: boolean) => void;
40
- onMonochromeChange?: (isMonochrome: boolean) => void;
41
- onReducedMotionChange?: (reducedMotion: boolean) => void;
42
- onReducedTransparencyChange?: (reducedTransparency: boolean) => void;
43
- }
44
- declare const useTheming: <T extends string>({ theme, systemKeys, themeKeys, breakpointsMap, initProps, onBreakpointChange, onColorSchemeChange, onContrastChange, onForcedColorsChange, onMonochromeChange, onReducedMotionChange, onReducedTransparencyChange, }: useThemingProps<T>) => {
45
- inferThemeAuto: () => T | undefined;
46
- theme: string | undefined;
47
- breakpoints: ThBreakpointsObject;
48
- colorScheme: ThColorScheme;
49
- contrast: ThContrast;
50
- forcedColors: boolean;
51
- monochrome: boolean;
52
- reducedMotion: boolean;
53
- reducedTransparency: boolean;
54
- };
55
-
56
- type I18nValue<T> = T | string | {
57
- key: string;
58
- fallback?: string;
59
- };
60
- interface SystemFontSource {
61
- type: "system";
62
- }
63
- interface BunnyFontSource {
64
- type: "custom";
65
- provider: "bunny";
66
- }
67
- interface GoogleFontSource {
68
- type: "custom";
69
- provider: "google";
70
- }
71
- interface LocalStaticFontFile {
72
- path: string;
73
- weight: number;
74
- style: "normal" | "italic";
75
- }
76
- interface LocalVariableFontFile {
77
- path: string;
78
- style?: "normal" | "italic";
79
- }
80
- interface LocalStaticFontSource {
81
- type: "custom";
82
- provider: "local";
83
- variant: "static";
84
- files: LocalStaticFontFile[];
85
- }
86
- interface LocalVariableFontSource {
87
- type: "custom";
88
- provider: "local";
89
- variant: "variable";
90
- files: LocalVariableFontFile[];
91
- }
92
- type LocalFontSource = LocalStaticFontSource | LocalVariableFontSource;
93
- type FontSource = SystemFontSource | BunnyFontSource | GoogleFontSource | LocalFontSource;
94
- type VariableFontRangeConfig = {
95
- min: number;
96
- max: number;
97
- step?: number;
98
- };
99
- type WeightConfig = {
100
- type: "static";
101
- values: number[];
102
- } | {
103
- type: "variable";
104
- } & VariableFontRangeConfig;
105
- interface FontSpec {
106
- family: string;
107
- fallbacks: string[];
108
- weights: WeightConfig;
109
- styles?: ("normal" | "italic")[];
110
- widths?: VariableFontRangeConfig;
111
- display?: "swap" | "block" | "fallback" | "optional";
112
- }
113
- interface FontDefinition {
114
- id: string;
115
- name: string;
116
- label?: I18nValue<string>;
117
- source: FontSource;
118
- spec: FontSpec;
119
- }
120
- type FontCollection = Record<string, FontDefinition>;
121
- type ValidatedLanguageCollection = {
122
- fonts: FontCollection;
123
- supportedLanguages: string[];
124
- };
125
- type ThFontFamilyPref = {
126
- default: FontCollection;
127
- } | {
128
- [K in Exclude<string, "default">]: ValidatedLanguageCollection;
129
- };
130
- type ThBackLinkContent = {
131
- type: "img";
132
- src: string;
133
- alt?: string;
134
- } | {
135
- type: "svg";
136
- content: string;
137
- };
138
- interface ThBackLinkPref {
139
- href: string;
140
- variant?: ThBackLinkVariant;
141
- visibility?: "always" | "partially";
142
- content?: ThBackLinkContent;
143
- }
144
- type ThBottomSheetDetent = "content-height" | "full-height";
145
- interface ThActionsSnappedPref {
146
- scrim?: boolean | string;
147
- maxWidth?: number | null;
148
- maxHeight?: number | ThBottomSheetDetent;
149
- peekHeight?: number | ThBottomSheetDetent;
150
- minHeight?: number | ThBottomSheetDetent;
151
- }
152
- interface ThActionsDockedPref {
153
- dockable: ThDockingTypes;
154
- dragIndicator?: boolean;
155
- width?: number;
156
- minWidth?: number;
157
- maxWidth?: number;
158
- }
159
- interface ThActionsTokens {
160
- visibility: ThCollapsibilityVisibility;
161
- shortcut: string | null;
162
- sheet?: {
163
- defaultSheet: Exclude<ThSheetTypes, ThSheetTypes.dockedStart | ThSheetTypes.dockedEnd>;
164
- breakpoints: BreakpointsMap<ThSheetTypes>;
165
- };
166
- docked?: ThActionsDockedPref;
167
- snapped?: ThActionsSnappedPref;
168
- }
169
- interface ThSettingsSpacingPresets<K extends CustomizableKeys = DefaultKeys> {
170
- reflowOrder: Array<ThSpacingPresetKeys>;
171
- webPubOrder: Array<ThSpacingPresetKeys>;
172
- keys: {
173
- [key in Exclude<ThSpacingPresetKeys, "publisher" | "custom">]?: ThSpacingPreset<K>;
174
- };
175
- }
176
- type ThSpacingPreset<K extends CustomizableKeys = DefaultKeys> = {
177
- [ThSpacingSettingsKeys.letterSpacing]?: number;
178
- [ThSpacingSettingsKeys.lineHeight]?: ThLineHeightOptions;
179
- [ThSpacingSettingsKeys.paragraphIndent]?: number;
180
- [ThSpacingSettingsKeys.paragraphSpacing]?: number;
181
- [ThSpacingSettingsKeys.wordSpacing]?: number;
182
- } & (K extends {
183
- spacing: infer S;
184
- } ? S extends string ? {
185
- [key in S]?: number | ThLineHeightOptions;
186
- } : {} : {});
187
- type CustomizableKeys = {
188
- action?: string;
189
- theme?: string;
190
- settings?: string;
191
- text?: string;
192
- spacing?: string;
193
- };
194
- type ActionKey<K extends CustomizableKeys> = K extends {
195
- action: infer A;
196
- } ? A extends string ? ThActionsKeys | A : ThActionsKeys : ThActionsKeys;
197
- type ThemeKey<K extends CustomizableKeys> = K extends {
198
- theme: infer T;
199
- } ? T extends string ? ThThemeKeys | T : ThThemeKeys : ThThemeKeys;
200
- type SettingsKey<K extends CustomizableKeys> = K extends {
201
- settings: infer S;
202
- } ? S extends string ? ThSettingsKeys | S : ThSettingsKeys : ThSettingsKeys;
203
- type TextSettingsKey<K extends CustomizableKeys> = K extends {
204
- text: infer T;
205
- } ? T extends string ? ThTextSettingsKeys | T : ThTextSettingsKeys : ThTextSettingsKeys;
206
- type SpacingSettingsKey<K extends CustomizableKeys> = K extends {
207
- spacing: infer S;
208
- } ? S extends string ? ThSpacingSettingsKeys | S : ThSpacingSettingsKeys : ThSpacingSettingsKeys;
209
- interface ThActionsPref<K extends CustomizableKeys> {
210
- reflowOrder: Array<ActionKey<K>>;
211
- fxlOrder: Array<ActionKey<K>>;
212
- webPubOrder: Array<ActionKey<K>>;
213
- collapse: ThCollapsibility;
214
- keys: Record<ActionKey<K>, ThActionsTokens>;
215
- }
216
- interface ThDockingPref<T extends string> {
217
- displayOrder: T[];
218
- collapse: ThCollapsibility;
219
- dock: BreakpointsMap<ThDockingTypes> | boolean;
220
- keys: {
221
- [key in T]: Pick<ThActionsTokens, "visibility" | "shortcut">;
222
- };
223
- }
224
- interface ThSettingsGroupPref<T> {
225
- main: T[];
226
- subPanel: T[] | null;
227
- header?: ThSheetHeaderVariant;
228
- }
229
- interface ThSettingsRangePref {
230
- variant?: ThSettingsRangeVariant;
231
- placeholder?: I18nValue<ThSettingsRangePlaceholder>;
232
- range?: [number, number];
233
- step?: number;
234
- }
235
- interface ThSettingsRadioPref<T extends string> {
236
- allowUnset?: boolean;
237
- keys: {
238
- [key in T]: number;
239
- };
240
- }
241
- type ThSettingsKeyTypes<K extends CustomizableKeys = DefaultKeys> = {
242
- [ThSettingsKeys.fontFamily]: ThFontFamilyPref;
243
- [ThSettingsKeys.letterSpacing]: ThSettingsRangePref;
244
- [ThSettingsKeys.lineHeight]: ThSettingsRadioPref<Exclude<ThLineHeightOptions, ThLineHeightOptions.publisher>>;
245
- [ThSettingsKeys.paragraphIndent]: ThSettingsRangePref;
246
- [ThSettingsKeys.paragraphSpacing]: ThSettingsRangePref;
247
- [ThSettingsKeys.wordSpacing]: ThSettingsRangePref;
248
- [ThSettingsKeys.zoom]: ThSettingsRangePref;
249
- } & (K extends {
250
- settings: infer S;
251
- } ? S extends string ? {
252
- [key in S]: any;
253
- } : {} : {});
254
- type ThConstraintKeys = Extract<ThSheetTypes, ThSheetTypes.bottomSheet | ThSheetTypes.popover> | "pagination";
255
- interface ThFormatPrefValue<T extends string | Array<string>> {
256
- variants: T;
257
- displayInImmersive?: boolean;
258
- displayInFullscreen?: boolean;
259
- }
260
- interface ThFormatPref<T extends string | Array<string>> {
261
- default: ThFormatPrefValue<T>;
262
- breakpoints?: {
263
- [key in ThBreakpoints]?: ThFormatPrefValue<T>;
264
- };
265
- }
266
- interface ThPaginatedAffordancePrefValue {
267
- variant: ThArrowVariant;
268
- discard?: Array<"navigation" | "immersive" | "fullscreen"> | "none";
269
- hint?: Array<"immersiveChange" | "fullscreenChange" | "layoutChange"> | "none";
270
- }
271
- interface ThPaginatedAffordancePref {
272
- default: Required<ThPaginatedAffordancePrefValue>;
273
- breakpoints?: {
274
- [key in ThBreakpoints]?: ThPaginatedAffordancePrefValue;
275
- };
276
- }
277
- interface ThPreferences<K extends CustomizableKeys = {}> {
278
- direction?: ThLayoutDirection;
279
- locale?: string;
280
- experiments?: {
281
- reflow?: Array<ExperimentKey>;
282
- webPub?: Array<ExperimentKey>;
283
- };
284
- metadata?: {
285
- documentTitle?: {
286
- format: I18nValue<ThDocumentTitleFormat>;
287
- };
288
- };
289
- typography: {
290
- minimalLineLength?: number | null;
291
- maximalLineLength?: number | null;
292
- optimalLineLength: number;
293
- pageGutter: number;
294
- };
295
- theming: {
296
- header?: {
297
- backLink?: ThBackLinkPref | null;
298
- runningHead?: {
299
- format?: {
300
- reflow?: ThFormatPref<ThRunningHeadFormat>;
301
- fxl?: ThFormatPref<ThRunningHeadFormat>;
302
- webPub?: ThFormatPref<ThRunningHeadFormat>;
303
- };
304
- };
305
- };
306
- progression?: {
307
- format?: {
308
- reflow?: ThFormatPref<ThProgressionFormat | Array<ThProgressionFormat>>;
309
- fxl?: ThFormatPref<ThProgressionFormat | Array<ThProgressionFormat>>;
310
- webPub?: ThFormatPref<ThProgressionFormat | Array<ThProgressionFormat>>;
311
- };
312
- };
313
- arrow: {
314
- size: number;
315
- offset: number;
316
- tooltipDelay?: number;
317
- };
318
- icon: {
319
- size: number;
320
- tooltipOffset: number;
321
- tooltipDelay?: number;
322
- };
323
- layout: {
324
- ui?: {
325
- reflow?: ThLayoutUI;
326
- fxl?: ThLayoutUI;
327
- webPub?: ThLayoutUI;
328
- };
329
- radius: number;
330
- spacing: number;
331
- defaults: {
332
- dockingWidth: number;
333
- scrim: string;
334
- };
335
- constraints?: {
336
- [key in ThConstraintKeys]?: number | null;
337
- };
338
- };
339
- breakpoints: BreakpointsMap<number | null>;
340
- themes: {
341
- reflowOrder: Array<ThemeKey<K> | "auto">;
342
- fxlOrder: Array<ThemeKey<K> | "auto">;
343
- systemThemes?: {
344
- light: ThemeKey<K>;
345
- dark: ThemeKey<K>;
346
- };
347
- keys: Record<Exclude<ThemeKey<K>, "auto"> & string, ThemeTokens>;
348
- };
349
- };
350
- affordances: {
351
- scroll: {
352
- hintInImmersive: boolean;
353
- toggleOnMiddlePointer: Array<"tap" | "click">;
354
- hideOnForwardScroll: boolean;
355
- showOnBackwardScroll: boolean;
356
- };
357
- paginated: {
358
- reflow: ThPaginatedAffordancePref;
359
- fxl: ThPaginatedAffordancePref;
360
- };
361
- };
362
- actions: ThActionsPref<K>;
363
- shortcuts: {
364
- representation: UnstableShortcutRepresentation;
365
- joiner?: string;
366
- };
367
- docking: ThDockingPref<ThDockingKeys>;
368
- settings: {
369
- reflowOrder: Array<SettingsKey<K>>;
370
- fxlOrder: Array<SettingsKey<K>>;
371
- webPubOrder: Array<SettingsKey<K>>;
372
- keys: ThSettingsKeyTypes<K>;
373
- text: ThSettingsGroupPref<TextSettingsKey<K>>;
374
- spacing: ThSettingsGroupPref<SpacingSettingsKey<K>> & {
375
- presets?: ThSettingsSpacingPresets<K>;
376
- };
377
- };
378
- }
379
- /**
380
- * Creates a new preferences object with the provided parameters
381
- * @param params The preferences object to create
382
- * @returns A new preferences object
383
- */
384
- declare const createPreferences: <K extends CustomizableKeys = {}>(params: ThPreferences<K>) => ThPreferences<K>;
385
- type DefaultKeys = {
386
- action: ThActionsKeys;
387
- theme: ThThemeKeys;
388
- settings: ThSettingsKeys;
389
- text: ThTextSettingsKeys;
390
- spacing: ThSpacingSettingsKeys;
391
- };
392
- type ActionKeyType<K extends CustomizableKeys = DefaultKeys> = K["action"] extends string ? K["action"] : ThActionsKeys;
393
- type ThemeKeyType<K extends CustomizableKeys = DefaultKeys> = K["theme"] extends string ? K["theme"] : ThThemeKeys;
394
- type SettingsKeyType<K extends CustomizableKeys = DefaultKeys> = K["settings"] extends string ? K["settings"] : ThSettingsKeys;
395
- type TextSettingsKeyType<K extends CustomizableKeys = DefaultKeys> = K["text"] extends string ? K["text"] : ThTextSettingsKeys;
396
- type SpacingSettingsKeyType<K extends CustomizableKeys = DefaultKeys> = K["spacing"] extends string ? K["spacing"] : ThSpacingSettingsKeys;
397
-
398
- interface ThPreferencesAdapter<T extends CustomizableKeys = CustomizableKeys> {
399
- getPreferences(): ThPreferences<T>;
400
- setPreferences(prefs: ThPreferences<T>): void;
401
- subscribe(callback: (prefs: ThPreferences<T>) => void): void;
402
- unsubscribe(callback: (prefs: ThPreferences<T>) => void): void;
403
- }
404
-
405
- export { type useThemingProps as $, type ActionKey as A, type BunnyFontSource as B, type CustomizableKeys as C, type DefaultKeys as D, type ThDockingPref as E, type FontCollection as F, type GoogleFontSource as G, type ThSettingsGroupPref as H, type I18nValue as I, type ThSettingsRadioPref as J, type ThSettingsKeyTypes as K, type LocalStaticFontFile as L, type ThConstraintKeys as M, type ThFormatPrefValue as N, type ThFormatPref as O, type ThPaginatedAffordancePrefValue as P, type ThPaginatedAffordancePref as Q, createPreferences as R, type SystemFontSource as S, type ThPreferencesAdapter as T, type ActionKeyType as U, type VariableFontRangeConfig as V, type WeightConfig as W, type ThemeKeyType as X, type SettingsKeyType as Y, type TextSettingsKeyType as Z, type SpacingSettingsKeyType as _, type ThPreferences as a, type ThemeTokens as b, type FontDefinition as c, type ThActionsTokens as d, type ThSettingsRangePref as e, type LocalVariableFontFile as f, type LocalStaticFontSource as g, type LocalVariableFontSource as h, type LocalFontSource as i, type FontSource as j, type FontSpec as k, type ValidatedLanguageCollection as l, type ThFontFamilyPref as m, type ThBackLinkContent as n, type ThBackLinkPref as o, type ThBottomSheetDetent as p, type ThActionsSnappedPref as q, type ThActionsDockedPref as r, type ThSettingsSpacingPresets as s, type ThSpacingPreset as t, useTheming as u, type ThemeKey as v, type SettingsKey as w, type TextSettingsKey as x, type SpacingSettingsKey as y, type ThActionsPref as z };
@@ -1,20 +0,0 @@
1
- // src/core/Helpers/propsToCSSVars.ts
2
- var propsToCSSVars = (props, { prefix, exclude = [] } = {}) => {
3
- return Object.entries(props).reduce((acc, [key, value]) => {
4
- if (exclude.includes(key)) {
5
- return acc;
6
- }
7
- const cssVar = prefix ? `--${prefix}-${key}` : `--${key}`;
8
- if (typeof value === "object" && value !== null) {
9
- Object.assign(acc, propsToCSSVars(value, { prefix: prefix ? `${prefix}-${key}` : key }));
10
- } else if (value != null) {
11
- const cssValue = typeof value === "number" ? `${value}px` : value;
12
- acc[cssVar] = cssValue;
13
- }
14
- return acc;
15
- }, {});
16
- };
17
-
18
- export { propsToCSSVars };
19
- //# sourceMappingURL=chunk-7CGMWOZN.mjs.map
20
- //# sourceMappingURL=chunk-7CGMWOZN.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/Helpers/propsToCSSVars.ts"],"names":[],"mappings":";AAcO,IAAM,cAAA,GAAiB,CAAC,KAAA,EAA8B,EAAE,MAAA,EAAQ,UAAU,EAAC,EAAE,GAA2B,EAAC,KAAM;AACpH,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAClB,MAAA,CAAO,CAAC,GAAA,EAA6B,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACrD,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,MAAM,MAAA,GAAS,SAAS,CAAA,EAAA,EAAK,MAAM,IAAI,GAAG,CAAA,CAAA,GAAK,KAAK,GAAG,CAAA,CAAA;AACvD,IAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAE/C,MAAA,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,cAAA,CAAe,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,GAAA,EAAK,CAAC,CAAA;AAAA,IACzF,CAAA,MAAA,IAAW,SAAS,IAAA,EAAM;AACxB,MAAA,MAAM,WAAW,OAAO,KAAA,KAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AAC5D,MAAA,GAAA,CAAI,MAAM,CAAA,GAAI,QAAA;AAAA,IAChB;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACf","file":"chunk-7CGMWOZN.mjs","sourcesContent":["\"use client\";\n\ninterface PropsToCSSVarsOptions {\n prefix?: string;\n exclude?: string[];\n}\n\n/** \n * Converts Object properties to CSS custom properties, recursively.\n * @param props - The object containing CSS property values\n * @param options - Configuration options\n * @param options.prefix - Optional prefix for CSS variable names (applies to all levels)\n * @param options.exclude - Array of property names to exclude\n */\nexport const propsToCSSVars = (props: { [x: string]: any; }, { prefix, exclude = [] }: PropsToCSSVarsOptions = {}) => {\n return Object.entries(props)\n .reduce((acc: { [key: string]: any }, [key, value]) => {\n if (exclude.includes(key)) {\n return acc;\n }\n const cssVar = prefix ? `--${prefix}-${key}` : `--${key}`;\n if (typeof value === \"object\" && value !== null) {\n // Keep the same prefix for nested objects\n Object.assign(acc, propsToCSSVars(value, { prefix: prefix ? `${prefix}-${key}` : key }));\n } else if (value != null) {\n const cssValue = typeof value === \"number\" ? `${value}px` : value;\n acc[cssVar] = cssValue;\n } \n return acc;\n }, {});\n}"]}
@@ -1 +0,0 @@
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}"]}