@edrlab/thorium-web 1.1.7 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ThPreferencesAdapter-B8AYujCA.d.mts → ThPreferencesAdapter-DrZ5_6Dv.d.mts} +4 -139
- package/dist/{ThSettingsWrapper-BlmAxcWF.d.mts → ThSettingsWrapper-8Kx0SnH4.d.mts} +1 -1
- package/dist/{actions-BRtHsxpm.d.mts → actions-D2CHvCHu.d.mts} +2 -2
- package/dist/{actionsReducer-bT0pfxLJ.d.mts → actionsReducer-kc-S130w.d.mts} +3 -24
- package/dist/{chunk-KJXHAJYK.mjs → chunk-4VHEHMJN.mjs} +128 -11
- package/dist/chunk-4VHEHMJN.mjs.map +1 -0
- package/dist/{chunk-6V3O7FCS.mjs → chunk-72XCX5TD.mjs} +3 -3
- package/dist/{chunk-6V3O7FCS.mjs.map → chunk-72XCX5TD.mjs.map} +1 -1
- package/dist/{chunk-YIW2OOMW.mjs → chunk-7NEQAW7J.mjs} +2 -2
- package/dist/chunk-7NEQAW7J.mjs.map +1 -0
- package/dist/{chunk-COQXDRKD.mjs → chunk-K3K7TUWM.mjs} +2 -2
- package/dist/chunk-K3K7TUWM.mjs.map +1 -0
- package/dist/chunk-P4V3LA5R.mjs +407 -0
- package/dist/chunk-P4V3LA5R.mjs.map +1 -0
- package/dist/{chunk-4C3UOTX4.mjs → chunk-PXAUQJEU.mjs} +172 -27
- package/dist/chunk-PXAUQJEU.mjs.map +1 -0
- package/dist/chunk-QPE574OW.mjs +913 -0
- package/dist/chunk-QPE574OW.mjs.map +1 -0
- package/dist/chunk-RRDEPGBK.mjs +75 -0
- package/dist/chunk-RRDEPGBK.mjs.map +1 -0
- package/dist/components/Epub/index.css +7 -0
- package/dist/components/Epub/index.css.map +1 -1
- package/dist/components/Epub/index.d.mts +17 -11
- package/dist/components/Epub/index.mjs +9 -828
- package/dist/components/Epub/index.mjs.map +1 -1
- package/dist/components/Misc/index.css +23 -0
- package/dist/components/Misc/index.css.map +1 -1
- package/dist/components/Misc/index.d.mts +10 -1
- package/dist/components/Misc/index.mjs +31 -3
- package/dist/components/Misc/index.mjs.map +1 -1
- package/dist/components/Reader/index.css +1290 -0
- package/dist/components/Reader/index.css.map +1 -0
- package/dist/components/Reader/index.d.mts +30 -0
- package/dist/components/Reader/index.mjs +79 -0
- package/dist/components/Reader/index.mjs.map +1 -0
- package/dist/components/WebPub/index.css +7 -0
- package/dist/components/WebPub/index.css.map +1 -1
- package/dist/components/WebPub/index.d.mts +16 -32
- package/dist/components/WebPub/index.mjs +9 -372
- package/dist/components/WebPub/index.mjs.map +1 -1
- package/dist/core/Components/index.d.mts +7 -6
- package/dist/core/Helpers/index.d.mts +1 -1
- package/dist/core/Hooks/index.d.mts +55 -6
- package/dist/core/Hooks/index.mjs +1 -1
- package/dist/errorHandler-CL2YIfQY.d.mts +26 -0
- package/dist/i18n/index.mjs +2 -2
- package/dist/immer.d-CoRThNOF.d.mts +23 -0
- package/dist/lib/index.d.mts +12 -162
- package/dist/lib/index.mjs +1 -1
- package/dist/locales/el/thorium-web.json +31 -0
- package/dist/locales/en/thorium-shared.json +84 -0
- package/dist/locales/en/thorium-web.json +10 -1
- package/dist/locales/et/thorium-shared.json +93 -2
- package/dist/locales/et/thorium-web.json +6 -2
- package/dist/locales/fi/thorium-shared.json +82 -8
- package/dist/locales/fi/thorium-web.json +2 -1
- package/dist/locales/fr/thorium-shared.json +100 -0
- package/dist/locales/it/thorium-shared.json +9 -0
- package/dist/locales/lt/thorium-shared.json +22 -13
- package/dist/locales/lt/thorium-web.json +2 -1
- package/dist/locales/pt-PT/thorium-shared.json +64 -1
- package/dist/locales/pt-PT/thorium-web.json +4 -3
- package/dist/locales/sv/thorium-shared.json +61 -3
- package/dist/locales/sv/thorium-web.json +4 -3
- package/dist/preferences/index.d.mts +8 -7
- package/dist/preferences/index.mjs +1 -1
- package/dist/settingsReducer-C1wwCAMv.d.mts +159 -0
- package/dist/{ui-BVlJcPL_.d.mts → ui-CamWuqOo.d.mts} +1 -1
- package/dist/useContrast-D6sjPjxy.d.mts +152 -0
- package/dist/{useEpubNavigator-CsraD65e.d.mts → useEpubNavigator-CwHJfoiV.d.mts} +1 -1
- package/dist/{usePreferences-rfT368__.d.mts → usePreferences-BXFJbval.d.mts} +1 -1
- package/dist/{StatefulReader-CjgFzHoO.d.mts → useReaderTransitions-guT-eA-Q.d.mts} +50 -50
- package/dist/{useWebPubNavigator-Che8r5Wg.d.mts → useWebPubNavigator-CuSNQKMw.d.mts} +1 -1
- package/package.json +5 -3
- package/dist/chunk-4C3UOTX4.mjs.map +0 -1
- package/dist/chunk-COQXDRKD.mjs.map +0 -1
- package/dist/chunk-KJXHAJYK.mjs.map +0 -1
- package/dist/chunk-YIW2OOMW.mjs.map +0 -1
- package/dist/useContrast-Cgsrl7GS.d.mts +0 -15
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/preferences/models/actions.ts","../src/preferences/helpers/buildThemeObject.ts","../src/preferences/helpers/fontPref/bunnyFonts.ts","../src/preferences/helpers/fontPref/googleFonts.ts","../src/preferences/helpers/fontPref/localFonts.ts","../src/preferences/models/fonts.ts","../src/preferences/models/protection.ts","../src/preferences/models/settings.ts","../src/preferences/models/theme.ts","../src/preferences/preferences.ts","../src/preferences/defaultPreferences.ts","../src/preferences/ThPreferencesContext.ts","../src/preferences/adapters/ThMemoryPreferencesAdapter.ts","../src/preferences/ThDirectionSetter.tsx","../src/preferences/ThPreferencesProvider.tsx","../src/preferences/services/createBunnyFontResources.ts","../src/preferences/services/createGoogleFontResources.ts","../src/preferences/services/createLocalFontResources.ts","../src/preferences/services/fonts.ts","../src/preferences/hooks/usePreferences.ts","../src/preferences/hooks/usePreferenceKeys.ts","../src/core/Helpers/prefixString.ts","../src/preferences/hooks/useTheming.ts"],"names":["ThActionsKeys","ThDockingKeys","ThDockingTypes","ThSheetTypes","ThSheetHeaderVariant","styles","DEFAULT_FALLBACK","ThSettingsKeys","ThTextSettingsKeys","ThSpacingSettingsKeys","ThSettingsContainerKeys","ThSettingsRangeVariant","ThSettingsRangePlaceholder","ThSpacingPresetKeys","ThLayoutOptions","ThTextAlignOptions","ThLineHeightOptions","ThThemeKeys","useEffect","useCallback"],"mappings":"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","file":"chunk-7NEQAW7J.mjs","sourcesContent":["import { ThCollapsibility, ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\nimport { BreakpointsMap } from \"@/core/Hooks/useBreakpoints\";\nimport { ThBreakpoints } from \"./ui\";\n\nexport type ThBottomSheetDetent = \"content-height\" | \"full-height\";\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 ThActionsDockedPref {\n dockable: ThDockingTypes,\n dragIndicator?: boolean,\n width?: number,\n minWidth?: number,\n maxWidth?: number\n}\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 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 enum ThActionsKeys {\n fullscreen = \"fullscreen\",\n jumpToPosition = \"jumpToPosition\",\n settings = \"settings\",\n toc = \"toc\"\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 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 const defaultActionKeysObject: ThActionsTokens = {\n visibility: ThCollapsibilityVisibility.partially,\n shortcut: null\n};\n\nexport const defaultSettingsAction: ThActionsTokens = {\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\nexport const defaultFullscreenAction: ThActionsTokens = {\n visibility: ThCollapsibilityVisibility.partially,\n shortcut: null\n}\n\nexport const defaultTocAction: ThActionsTokens = {\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\nexport const defaultJumpToPositionAction: ThActionsTokens = {\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}","\"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};","import { FontCollection, FontDefinition } from \"@/preferences/models\";\n\ninterface BunnyFontDefinitionParams {\n cssUrl: string;\n options?: {\n labels?: Record<string, string>; // derived fontId -> label\n fallbacks?: Record<string, string[]>; // derived fontId -> fallback array\n order?: string[]; // array of font IDs in desired order\n };\n}\n\nconst DEFAULT_FALLBACK = \"sans-serif\";\n\n/**\n * Parses a Bunny Fonts CSS URL and creates font definitions for all families\n * @param params Bunny Fonts CSS URL and optional configuration\n * @returns FontCollection object with all font definitions\n * @throws Error if CSS URL is invalid or cannot be parsed\n */\nexport const createDefinitionsFromBunnyFonts = (params: BunnyFontDefinitionParams): FontCollection => {\n const { cssUrl, options } = params;\n const { fallbacks, order, labels } = options || {};\n \n // Extract URL from @import url() or href=\"\", otherwise use as-is\n const processedUrl = cssUrl.includes(\"@import\") \n ? cssUrl.match(/@import\\s+url\\(['\"]?([^'\")]+)['\"]?\\)/i)?.[1] || cssUrl\n : cssUrl.includes(\"href=\")\n ? cssUrl.match(/href=[\"']([^\"']+)[\"']/)?.[1] || cssUrl\n : cssUrl;\n \n // Parse the URL\n const url = new URL(processedUrl);\n if (!url.hostname.includes(\"fonts.bunny.net\")) {\n throw new Error(\"Invalid Bunny Fonts URL\");\n }\n\n // Get the family parameter\n const familyParam = url.searchParams.get(\"family\");\n if (!familyParam) {\n throw new Error(\"No family parameter found in Bunny Fonts URL\"); \n }\n\n // Split multiple font families and process each one\n const fontEntries = familyParam.split(\"|\").map((familyStr): [string, any] => {\n // Format: \"font-name:weight1,weight1i,weight2,weight3i,weight4,weight4i\"\n const [familyName, weightsStr = \"\"] = familyStr.split(\":\");\n if (!familyName) {\n throw new Error(`Invalid font family format: ${ familyStr }`);\n }\n\n // Track weights and their styles\n const weightStyles = new Map<number, Set<\"normal\" | \"italic\">>();\n\n // Parse weights and their styles\n if (weightsStr) {\n weightsStr.split(\",\").forEach(weightStr => {\n const isItalic = weightStr.endsWith(\"i\");\n const weightValue = parseInt(isItalic ? weightStr.slice(0, -1) : weightStr, 10);\n \n if (!isNaN(weightValue)) {\n if (!weightStyles.has(weightValue)) {\n weightStyles.set(weightValue, new Set());\n }\n weightStyles.get(weightValue)?.add(isItalic ? \"italic\" : \"normal\");\n }\n });\n }\n\n // Convert to arrays\n const weights = Array.from(weightStyles.keys()).sort((a, b) => a - b);\n const hasItalic = Array.from(weightStyles.values()).some(styles => styles.has(\"italic\"));\n const styles: Array<\"normal\" | \"italic\"> = hasItalic ? [\"normal\", \"italic\"] : [\"normal\"];\n\n const fontId = familyName; // Keep the original ID as is (e.g., \"advent-pro\")\n const familyDisplayName = familyName\n .split(\"-\")\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n\n return [\n fontId,\n {\n id: fontId,\n name: familyDisplayName,\n ...(labels?.[fontId] && { label: labels[fontId] }),\n source: {\n type: \"custom\",\n provider: \"bunny\"\n },\n spec: {\n family: familyDisplayName,\n fallbacks: fallbacks?.[fontId] || [DEFAULT_FALLBACK],\n weights: {\n type: \"static\",\n values: weights.length ? weights : [400],\n },\n styles\n },\n },\n ] as [string, FontDefinition];\n });\n\n // Convert to FontCollection format\n const result: FontCollection = Object.fromEntries(fontEntries);\n \n // Apply ordering if specified\n if (order && order.length > 0) {\n const orderedResult: FontCollection = {};\n order.forEach(fontId => {\n if (result[fontId]) {\n orderedResult[fontId] = result[fontId];\n }\n });\n \n // Add any remaining fonts that weren't in the order array\n Object.entries(result).forEach(([fontId, definition]) => {\n if (!orderedResult[fontId]) {\n orderedResult[fontId] = definition;\n }\n });\n \n return orderedResult;\n }\n \n return result;\n};","import { FontCollection, GoogleFontSource, VariableFontRangeConfig, WeightConfig } from \"@/preferences/models\";\n\n\nconst DEFAULT_FALLBACK = \"sans-serif\";\nconst DEFAULT_WIDTH_STEP = 20;\nconst DEFAULT_WEIGHT_STEP = 20;\n\ninterface GoogleFontFamily {\n name: string;\n styles: (\"normal\" | \"italic\")[];\n weights: WeightConfig;\n widths?: VariableFontRangeConfig;\n}\n\nexport interface GoogleFontDefinitionParams {\n cssUrl: string,\n options?: {\n widthStep?: number;\n weightStep?: number;\n display?: \"swap\" | \"block\" | \"fallback\" | \"optional\";\n labels?: Record<string, string>; // derived fontId -> label\n fallbacks?: Record<string, string[]>; // derived fontId -> fallback array\n order?: string[]; // array of font IDs in desired order\n }\n}\n\n/**\n * Parses a Google Fonts CSS URL and creates font definitions for all families\n * @param params Google Fonts CSS URL and optional configuration for step values and display\n * @returns FontCollection object with all font definitions\n * @throws Error if CSS URL is invalid or cannot be parsed\n */\nexport const createDefinitionsFromGoogleFonts = (params: GoogleFontDefinitionParams): FontCollection => {\n const { cssUrl, options } = params;\n const { widthStep = DEFAULT_WIDTH_STEP, weightStep = DEFAULT_WEIGHT_STEP, display, labels, fallbacks, order } = options || {};\n \n // Extract URL from @import url() or href=\"\", otherwise use as-is\n const processedUrl = cssUrl.includes(\"@import\") \n ? cssUrl.match(/@import\\s+url\\(['\"]?([^'\")]+)['\"]?\\)/i)?.[1] || cssUrl\n : cssUrl.includes(\"href=\")\n ? cssUrl.match(/href=[\"']([^\"']+)[\"']/)?.[1] || cssUrl\n : cssUrl;\n \n // Parse the URL using static method\n const url = new URL(processedUrl);\n if (!url.hostname.includes(\"fonts.googleapis.com\")) {\n throw new Error(\"Invalid Google Fonts URL\");\n }\n\n // Get all family parameters using searchParams\n const familyParams = url.searchParams.getAll(\"family\");\n if (familyParams.length === 0) {\n throw new Error(\"No family parameter found in Google Fonts URL\");\n }\n\n // Parse each family parameter\n const families = familyParams.map(familyParam => {\n const decodedFamily = decodeURIComponent(familyParam);\n const [familyName, axesStr] = decodedFamily.split(\":\");\n \n if (!familyName) {\n throw new Error(`Invalid family format: ${ familyParam }`);\n }\n\n const family: GoogleFontFamily = {\n name: familyName.replace(/\\+/g, \" \"),\n styles: [\"normal\"],\n weights: { type: \"static\", values: [400] } // Default weight\n };\n \n // Track if we've seen any explicit weights in the URL\n let hasExplicitWeights = false;\n\n // Parse axes if present\n if (axesStr) {\n const [axisNames, valuesStr] = axesStr.split(\"@\");\n if (axisNames && valuesStr) {\n const axes = axisNames.split(\",\");\n const variations = valuesStr.split(\";\");\n \n variations.forEach(variation => {\n const values = variation.split(\",\");\n axes.forEach((axis, index) => {\n const value = values[index];\n if (!value) return;\n \n switch (axis) {\n case \"ital\":\n if (value === \"1\") {\n family.styles = Array.from(new Set([...family.styles, \"italic\"]));\n }\n break;\n case \"wght\":\n if (value.includes(\"..\")) {\n // Variable font - use the range\n const [min, max] = value.split(\"..\").map(Number);\n if (!isNaN(min) && !isNaN(max)) {\n family.weights = {\n type: \"variable\",\n min,\n max,\n step: weightStep\n };\n }\n } else {\n // Handle explicit weight from URL\n const weight = Number(value);\n if (!isNaN(weight) && family.weights.type === \"static\") {\n const currentWeights = family.weights.values;\n const newWeights = !hasExplicitWeights \n ? [weight] // First weight replaces default\n : Array.from(new Set([...currentWeights, weight])).sort((a, b) => a - b); // Add to existing and deduplicate\n \n family.weights = {\n type: \"static\",\n values: newWeights\n };\n hasExplicitWeights = true;\n }\n }\n break;\n case \"wdth\":\n if (value.includes(\"..\")) {\n const [min, max] = value.split(\"..\").map(Number);\n if (!isNaN(min) && !isNaN(max)) {\n family.widths = {\n min,\n max,\n step: widthStep\n };\n }\n }\n break;\n }\n });\n });\n }\n }\n\n return family;\n });\n\n // Convert families to FontCollection object\n const fontEntries: [string, any][] = families.map(family => {\n const fontId = family.name.toLowerCase().replace(/\\s+/g, \"-\");\n return [\n fontId,\n {\n id: fontId,\n name: family.name,\n ...(labels?.[fontId] && { label: labels[fontId] }),\n source: { type: \"custom\", provider: \"google\" } as GoogleFontSource,\n spec: {\n family: family.name,\n fallbacks: fallbacks?.[fontId] || [DEFAULT_FALLBACK],\n weights: family.weights,\n styles: family.styles,\n ...(family.widths && { widths: family.widths }),\n ...(display && { display })\n }\n }\n ];\n });\n\n // If order is specified, sort the entries according to the order\n if (order && order.length > 0) {\n const orderedEntries: [string, any][] = [];\n const fontMap = new Map<string, any>(fontEntries);\n \n // Add fonts in the specified order (using font IDs directly)\n for (const fontId of order) {\n const fontEntry = fontMap.get(fontId);\n if (fontEntry) {\n orderedEntries.push([fontId, fontEntry]);\n fontMap.delete(fontId);\n }\n }\n \n // Add any remaining fonts that weren't in the order list\n for (const [fontId, fontEntry] of fontMap.entries()) {\n orderedEntries.push([fontId, fontEntry]);\n }\n \n return Object.fromEntries(orderedEntries);\n }\n\n // Default behavior - use original order from URL\n return Object.fromEntries(fontEntries); \n} \n","import { FontDefinition, FontSpec, LocalStaticFontFile, LocalStaticFontSource } from \"@/preferences/models\";\n\ninterface CreateFontDefinitionParams {\n id: string;\n name: string;\n files: LocalStaticFontFile[];\n family?: string;\n label?: string;\n fallbacks?: string[];\n}\n\n/**\n * Creates a complete font definition by inferring properties from static font files\n * @param params Font definition parameters\n * @returns Complete font definition with inferred spec\n * @throws Error if files are not static font files or if no files provided\n */\nexport const createDefinitionFromStaticFonts = (\n params: CreateFontDefinitionParams\n): FontDefinition => {\n const { id, name, files, family, label, fallbacks = [\"sans-serif\"] } = params;\n \n if (!files || files.length === 0) {\n throw new Error(\"No files provided to infer font specification\");\n }\n\n // Verify all files have weights (static fonts only)\n if (!files.every(file => file.weight !== undefined)) {\n throw new Error(\"All files must have explicit weights for static font specification inference\");\n }\n\n const weights = Array.from(new Set(files.map(file => file.weight))).sort((a, b) => a - b);\n const styles = Array.from(new Set(files.map(file => file.style)));\n \n const source: LocalStaticFontSource = {\n type: \"custom\",\n provider: \"local\",\n variant: \"static\",\n files\n };\n \n const spec: FontSpec = {\n family: family || name,\n fallbacks,\n weights: {\n type: \"static\",\n values: weights\n },\n styles: styles\n };\n \n return {\n id,\n name,\n ...(label && { label }),\n source,\n spec\n };\n}","import fontStacks from \"@readium/css/css/vars/fontStacks.json\";\n\nimport { createDefinitionFromStaticFonts, createDefinitionsFromGoogleFonts } from \"../helpers\";\nimport { I18nValue } from \"./i18n\";\n\nexport interface SystemFontSource {\n type: \"system\";\n}\n\nexport interface BunnyFontSource {\n type: \"custom\";\n provider: \"bunny\";\n}\n\nexport interface GoogleFontSource {\n type: \"custom\";\n provider: \"google\";\n}\n\nexport interface LocalStaticFontFile {\n path: string;\n weight: number;\n style: \"normal\" | \"italic\";\n}\n\nexport interface LocalVariableFontFile {\n path: string;\n style?: \"normal\" | \"italic\";\n}\n\nexport interface LocalStaticFontSource {\n type: \"custom\";\n provider: \"local\";\n variant: \"static\";\n files: LocalStaticFontFile[];\n}\n\nexport interface LocalVariableFontSource {\n type: \"custom\";\n provider: \"local\";\n variant: \"variable\";\n files: LocalVariableFontFile[];\n}\n\nexport type LocalFontSource = LocalStaticFontSource | LocalVariableFontSource;\n\nexport type FontSource = SystemFontSource | BunnyFontSource | GoogleFontSource | LocalFontSource;\n\nexport type VariableFontRangeConfig = {\n min: number;\n max: number;\n step?: number;\n};\n\nexport type WeightConfig =\n | {\n type: \"static\";\n values: number[];\n }\n | {\n type: \"variable\";\n } & VariableFontRangeConfig;\n\nexport interface FontSpec {\n family: string;\n fallbacks: string[];\n weights: WeightConfig;\n styles?: (\"normal\" | \"italic\")[];\n widths?: VariableFontRangeConfig;\n display?: \"swap\" | \"block\" | \"fallback\" | \"optional\";\n}\n\nexport interface FontDefinition {\n id: string;\n name: string;\n label?: I18nValue<string>;\n source: FontSource;\n spec: FontSpec;\n}\n\nexport type FontCollection = Record<string, FontDefinition>;\n\nexport type ValidatedLanguageCollection = {\n fonts: FontCollection; \n supportedLanguages: string[] \n};\n\nexport type ThFontFamilyPref = {\n default: FontCollection;\n} | {\n [K in Exclude<string, \"default\">]: ValidatedLanguageCollection;\n};\n\nexport const readiumCSSFontCollection: FontCollection = {\n oldStyle: {\n id: \"oldStyle\",\n name: \"Old Style\",\n label: \"reader.preferences.fontFamily.oldStyle.descriptive\",\n source: { type: \"system\" },\n spec: {\n family: fontStacks.RS__oldStyleTf,\n weights: { type: \"static\", values: [400, 700] },\n fallbacks: []\n }\n },\n modern: {\n id: \"modern\",\n name: \"Modern\",\n label: \"reader.preferences.fontFamily.modern.descriptive\",\n source: { type: \"system\" },\n spec: {\n family: fontStacks.RS__modernTf,\n weights: { type: \"static\", values: [400, 700] },\n fallbacks: []\n }\n },\n sans: {\n id: \"sans\",\n name: \"Sans\",\n label: \"reader.preferences.fontFamily.sans\",\n source: { type: \"system\" },\n spec: {\n family: fontStacks.RS__sansTf,\n weights: { type: \"static\", values: [400, 700] },\n fallbacks: []\n }\n },\n humanist: {\n id: \"humanist\",\n name: \"Humanist\",\n label: \"reader.preferences.fontFamily.humanist.descriptive\",\n source: { type: \"system\" },\n spec: {\n family: fontStacks.RS__humanistTf,\n weights: { type: \"static\", values: [400, 700] },\n fallbacks: []\n }\n },\n monospace: {\n id: \"monospace\",\n name: \"Monospace\",\n label: \"reader.preferences.fontFamily.monospace\",\n source: { type: \"system\" },\n spec: {\n family: fontStacks.RS__monospaceTf,\n weights: { type: \"static\", values: [400, 700] },\n fallbacks: []\n }\n }\n};\n\nexport const defaultFontCollection: FontCollection = {\n ...createDefinitionsFromGoogleFonts({\n cssUrl: \"https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible+Next:ital,wght@0,200..800;1,200..800&family=Literata:ital,opsz,wght@0,7..72,200..900;1,7..72,200..900\",\n options: {\n order: [\"literata\", \"atkinson-hyperlegible-next\"],\n fallbacks: {\n \"literata\": [\"serif\"],\n \"atkinson-hyperlegible-next\": [\"sans-serif\"]\n }\n }\n }),\n luciole: createDefinitionFromStaticFonts({\n id: \"luciole\",\n name: \"Luciole\",\n files: [\n { path: \"/fonts/Luciole/Luciole-Regular.woff2\", weight: 400, style: \"normal\" },\n { path: \"/fonts/Luciole/Luciole-Italic.woff2\", weight: 400, style: \"italic\" },\n { path: \"/fonts/Luciole/Luciole-Bold.woff2\", weight: 700, style: \"normal\" },\n { path: \"/fonts/Luciole/Luciole-BoldItalic.woff2\", weight: 700, style: \"italic\" }\n ]\n }),\n ...readiumCSSFontCollection,\n iAWriterDuo: createDefinitionFromStaticFonts({\n id: \"iAWriterDuo\",\n name: \"iA Writer Duo\",\n label: \"iA Writer Duospace\",\n fallbacks: [\"monospace\"],\n files: [\n { path: \"/fonts/iAWriterDuo/iAWriterDuoS-Regular.woff2\", weight: 400, style: \"normal\" },\n { path: \"/fonts/iAWriterDuo/iAWriterDuoS-Bold.woff2\", weight: 700, style: \"normal\" },\n { path: \"/fonts/iAWriterDuo/iAWriterDuoS-Italic.woff2\", weight: 400, style: \"italic\" },\n { path: \"/fonts/iAWriterDuo/iAWriterDuoS-BoldItalic.woff2\", weight: 700, style: \"italic\" }\n ]\n }),\n openDyslexic: createDefinitionFromStaticFonts({\n id: \"openDyslexic\",\n name: \"Open Dyslexic\",\n files: [\n { path: \"/fonts/OpenDyslexic/OpenDyslexic-Regular.otf\", weight: 400, style: \"normal\" },\n { path: \"/fonts/OpenDyslexic/OpenDyslexic-Italic.otf\", weight: 400, style: \"italic\" },\n { path: \"/fonts/OpenDyslexic/OpenDyslexic-Bold.otf\", weight: 700, style: \"normal\" },\n { path: \"/fonts/OpenDyslexic/OpenDyslexic-BoldItalic.otf\", weight: 700, style: \"italic\" }\n ]\n }),\n accessibleDfA: createDefinitionFromStaticFonts({\n id: \"accessibleDfA\",\n name: \"Accessible DfA\",\n files: [\n { path: \"/fonts/AccessibleDfA/AccessibleDfA-Regular.woff2\", weight: 400, style: \"normal\" },\n { path: \"/fonts/AccessibleDfA/AccessibleDfA-Italic.woff2\", weight: 400, style: \"italic\" },\n { path: \"/fonts/AccessibleDfA/AccessibleDfA-Bold.woff2\", weight: 700, style: \"normal\" }\n ]\n })\n};\n\nexport const tamilCollection = {\n ...createDefinitionsFromGoogleFonts({\n cssUrl: \"https://fonts.googleapis.com/css2?family=Anek+Tamil:wght@100..800&family=Catamaran:wght@100..900&family=Hind+Madurai:wght@400;700&family=Mukta+Malar:wght@400;700&family=Noto+Sans+Tamil:wght@100..900&family=Noto+Serif+Tamil:ital,wght@0,100..900;1,100..900\",\n options: {\n order: [\"noto-sans-tamil\", \"noto-serif-tamil\", \"anek-tamil\", \"catamaran\", \"hind-madurai\", \"mukta-malar\"],\n labels: {\n \"noto-sans-tamil\": \"Noto Sans\",\n \"noto-serif-tamil\": \"Noto Serif\",\n \"anek-tamil\": \"அனேக் தமிழ்\",\n \"catamaran\": \"கட்டுமரன்\",\n \"mukta-malar\": \"முக்த மலர்\"\n },\n fallbacks: {\n \"noto-serif-tamil\": [\"serif\"]\n }\n }\n })\n}","import { IContentProtectionConfig } from \"@readium/navigator\";\nimport { I18nValue } from \"./i18n\";\n\nexport interface CopyProtectionConfig {\n /** Maximum percentage of content that can be selected (0-1) */\n maxSelectionPercent: number;\n /** Minimum number of characters that can be selected before protection kicks in */\n minThreshold: number;\n /** Absolute maximum number of characters that can be copied in total */\n absoluteMaxChars: number;\n /** Number of recent copy attempts to keep in history for pattern analysis */\n historySize: number;\n}\n\nexport interface PrintProtectionConfig {\n /** Disable printing completely */\n disable?: boolean;\n /** Optional watermark text to show when printing is disabled */\n watermark?: I18nValue<string>;\n}\n\nexport interface ContentProtectionConfig {\n /**\n * Higher-level API will make use of the following from Content Protection API:\n * - checkAutomation\n * - checkIFrameEmbedding\n * - monitorSelection\n * - monitorDevTools\n * - monitorScrollingExperimental\n */\n\n /**\n * Configure copy protection\n * - boolean: true to enable with default settings, false to disable\n * - object: Fine-grained control over copy protection\n */\n protectCopy?: boolean | CopyProtectionConfig;\n\n /** Disable right-click context menu */\n disableContextMenu?: boolean;\n\n /** Disable drag and drop functionality */\n disableDragAndDrop?: boolean;\n\n /** Print protection configuration */\n protectPrinting?: PrintProtectionConfig;\n\n /** Disable Select All functionality (Ctrl+A/Cmd+A) */\n disableSelectAll?: boolean;\n\n /** Disable Save functionality (Ctrl+S/Cmd+S) */\n disableSave?: boolean;\n\n /** Monitor developer tools for suspicious activity. We need it for the shortcut protection */\n monitorDevTools?: boolean;\n}\n\n/**\n * Resolves content protection configuration with localized strings\n * @param contentProtection The content protection config to resolve\n * @param t Translation function that supports defaultValue option\n * @returns Resolved content protection config compatible with navigator\n */\nexport const resolveContentProtectionConfig = (\n contentProtection: ContentProtectionConfig | undefined,\n t: (key: string, options?: { defaultValue?: string }) => string\n): IContentProtectionConfig | undefined => {\n if (!contentProtection) return undefined;\n \n // Resolve watermark localization following the StatefulFontFamily pattern\n let resolvedWatermark: string | undefined;\n if (contentProtection.protectPrinting?.watermark) {\n if (typeof contentProtection.protectPrinting.watermark === \"object\" && \"key\" in contentProtection.protectPrinting.watermark) {\n // Handle I18nValue object with key and fallback using t() defaultValue option\n resolvedWatermark = t(contentProtection.protectPrinting.watermark.key, {\n defaultValue: contentProtection.protectPrinting.watermark.fallback\n });\n } else if (typeof contentProtection.protectPrinting.watermark === \"string\") {\n // Handle plain string (should be a translation key)\n resolvedWatermark = t(contentProtection.protectPrinting.watermark);\n }\n }\n \n // Construct the resolved config with proper types matching IContentProtectionConfig\n const resolved: IContentProtectionConfig = {\n protectCopy: contentProtection.protectCopy,\n disableContextMenu: contentProtection.disableContextMenu,\n disableDragAndDrop: contentProtection.disableDragAndDrop,\n protectPrinting: contentProtection.protectPrinting ? {\n disable: contentProtection.protectPrinting.disable,\n watermark: resolvedWatermark\n } : undefined,\n disableSelectAll: contentProtection.disableSelectAll,\n disableSave: contentProtection.disableSave,\n monitorDevTools: contentProtection.monitorDevTools\n };\n \n return resolved;\n};\n\n/**\n * Default content protection configuration\n */\nexport const defaultContentProtectionConfig: ContentProtectionConfig = {\n protectCopy: false,\n disableContextMenu: false,\n disableDragAndDrop: false,\n protectPrinting: {\n disable: false,\n watermark: \"reader.app.printingDisabled\"\n },\n disableSelectAll: false,\n disableSave: false,\n monitorDevTools: false\n};\n\n/**\n * Development content protection configuration - disables all protections\n */\nexport const devContentProtectionConfig: ContentProtectionConfig = {\n protectCopy: false,\n disableContextMenu: false,\n disableDragAndDrop: false,\n protectPrinting: {\n disable: false\n },\n disableSelectAll: false,\n disableSave: false,\n monitorDevTools: false\n};","import { ThSheetHeaderVariant } from \"./actions\";\nimport { I18nValue } from \"./i18n\";\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 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 ThSpacingPresetKeys {\n publisher = \"publisher\",\n tight = \"tight\",\n balanced = \"balanced\",\n loose = \"loose\",\n accessible = \"accessible\",\n custom = \"custom\"\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}\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 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}","import ReadiumCSSColors from \"@readium/css/css/vars/colors.json\";\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 const lightTheme = {\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\nexport const darkTheme = {\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\nexport const paperTheme = {\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\nexport const sepiaTheme = {\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\nexport const contrast1Theme = {\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\nexport const contrast2Theme = {\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\nexport const contrast3Theme = {\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}","import { UnstableShortcutRepresentation } from \"@/core/Helpers/keyboardUtilities\";\nimport { BreakpointsMap } from \"@/core/Hooks/useBreakpoints\";\nimport { ThemeTokens } from \"@/preferences/hooks/useTheming\";\nimport { \n ThActionsKeys,\n ThDocumentTitleFormat,\n ThLayoutUI,\n ThProgressionFormat,\n ThRunningHeadFormat,\n ThDockingKeys,\n ThLineHeightOptions, \n ThSettingsKeys, \n ThSheetTypes, \n ThSpacingSettingsKeys, \n ThTextSettingsKeys, \n ThThemeKeys, \n ThLayoutDirection, \n ThSpacingPresetKeys,\n ThActionsTokens,\n ThFontFamilyPref,\n ThSettingsRangePref,\n ThSettingsRadioPref,\n I18nValue,\n ThBackLinkPref,\n ThFormatPref,\n ThPaginatedAffordancePref,\n ThDockingPref,\n ThSettingsGroupPref,\n ValidatedLanguageCollection\n} from \"./models\";\nimport { ExperimentKey } from \"@readium/navigator\";\nimport { ThCollapsibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\nimport { supportedLocales, isSupportedLocale } from \"@/i18n/supported-locales\";\nimport { ContentProtectionConfig } from \"./models/protection\";\n\nexport type CustomizableKeys = {\n action?: string;\n theme?: string;\n settings?: string;\n text?: string;\n spacing?: string;\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// 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 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 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 type ThSettingsKeyTypes<K extends CustomizableKeys = DefaultKeys> = {\n [ThSettingsKeys.fontFamily]: ThFontFamilyPref;\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\n// Main preferences interface with simplified generics\nexport interface ThPreferences<K extends CustomizableKeys = {}> {\n direction?: ThLayoutDirection;\n locale?: string;\n experiments?: {\n reflow?: Array<ExperimentKey>;\n webPub?: Array<ExperimentKey>;\n };\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 contentProtection?: ContentProtectionConfig;\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 // Validate locale preference\n if (params.locale) {\n // Extract language code from BCP-47 locale (e.g., \"en-US\" -> \"en\")\n const languageCode = params.locale.split(\"-\")[0];\n if (!isSupportedLocale(languageCode)) {\n console.warn(`Locale \"${ params.locale }\" is not supported. Supported locales: ${ supportedLocales.join(\", \") }. Falling back to browser/OS language settings.`);\n params.locale = undefined; // Let i18n fall back to browser/OS language settings\n }\n }\n\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 // Validate font family preferences for language conflicts\n if (params.settings?.keys?.fontFamily) {\n const fontFamilyPref = params.settings.keys.fontFamily;\n const languageMap = new Map<string, string[]>();\n \n // Build a map of languages to the collections that support them\n Object.entries(fontFamilyPref).forEach(([collectionName, collectionData]) => {\n if (collectionName === \"default\") return;\n \n // Check if this collection has supportedLanguages (it's a ValidatedLanguageCollection)\n const supportedLangs = \"supportedLanguages\" in collectionData ? \n (collectionData as ValidatedLanguageCollection).supportedLanguages : null;\n \n if (supportedLangs && Array.isArray(supportedLangs)) {\n supportedLangs.forEach((lang: string) => {\n if (!languageMap.has(lang)) {\n languageMap.set(lang, []);\n }\n languageMap.get(lang)!.push(collectionName);\n });\n }\n });\n \n // Check for conflicts and warn about them\n languageMap.forEach((collections, language) => {\n if (collections.length > 1) {\n console.warn(`Language \"${ language }\" is supported by multiple font collections: ${ collections.join(\", \") }. This may cause ambiguous font selection. Consider consolidating to a single collection per language.`);\n }\n });\n }\n\n return params;\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 { 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 ThSheetHeaderVariant,\n ThLayoutUI,\n ThBackLinkVariant,\n ThProgressionFormat,\n ThRunningHeadFormat,\n ThDocumentTitleFormat,\n ThArrowVariant,\n lightTheme,\n darkTheme,\n paperTheme,\n sepiaTheme,\n contrast1Theme,\n contrast2Theme,\n contrast3Theme,\n defaultSettingsAction,\n defaultFullscreenAction,\n defaultTocAction,\n defaultJumpToPositionAction,\n defaultContentProtectionConfig,\n defaultFontCollection,\n defaultLetterSpacing, \n defaultLineHeights, \n defaultParagraphIndent, \n defaultParagraphSpacing, \n defaultSpacingPresets, \n defaultSpacingPresetsOrder, \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n defaultWordSpacing, \n defaultZoom,\n tamilCollection\n} from \"./models\";\nimport { createPreferences, ThPreferences, DefaultKeys } from \"./preferences\";\n\nexport const defaultPreferences: ThPreferences<DefaultKeys> = createPreferences<DefaultKeys>({\n// direction: ThLayoutDirection.ltr,\n// locale: \"en\",\n experiments: {\n reflow: [\"experimentalHeaderFiltering\", \"experimentalZoom\"],\n webPub: [\"experimentalHeaderFiltering\", \"experimentalZoom\"]\n },\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.paper,\n ThThemeKeys.sepia, \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]: lightTheme,\n [ThThemeKeys.dark]: darkTheme,\n [ThThemeKeys.paper]: paperTheme,\n [ThThemeKeys.sepia]: sepiaTheme,\n [ThThemeKeys.contrast1]: contrast1Theme,\n [ThThemeKeys.contrast2]: contrast2Theme,\n [ThThemeKeys.contrast3]: contrast3Theme\n }\n },\n },\n contentProtection: defaultContentProtectionConfig,\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 // Note FXL arrows are always layered\n // FXL navigator is using the window width to calculate the layout\n // so we need to force the layered variant to prevent layout issues\n default: {\n variant: ThArrowVariant.layered,\n discard: [\"navigation\"],\n hint: \"none\"\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]: defaultSettingsAction,\n [ThActionsKeys.fullscreen]: defaultFullscreenAction,\n [ThActionsKeys.toc]: defaultTocAction,\n [ThActionsKeys.jumpToPosition]: defaultJumpToPositionAction\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.fontFamily]: {\n default: defaultFontCollection,\n tamil: {\n supportedLanguages: [\"ta\"],\n fonts: tamilCollection\n }\n },\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 main: defaultTextSettingsMain,\n subPanel: defaultTextSettingsSubpanel\n },\n spacing: {\n header: ThSheetHeaderVariant.previous,\n main: defaultSpacingSettingsMain,\n subPanel: defaultSpacingSettingsSubpanel,\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\";\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\";\nimport { devContentProtectionConfig } from \"./models/protection\";\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 devMode?: boolean;\n children: React.ReactNode;\n};\n\nexport function ThPreferencesProvider<K extends CustomizableKeys = DefaultKeys>({ \n adapter,\n initialPreferences,\n devMode,\n children, \n}: Props<K>) {\n // Create a default in-memory adapter if none is provided\n const effectiveAdapter = useMemo(() => {\n let fallbackPreferences = defaultPreferencesContextValue.preferences as ThPreferences<K>;\n \n // Apply dev mode modifications if needed and no initial preferences provided\n if (devMode && !initialPreferences) {\n fallbackPreferences = {\n ...fallbackPreferences,\n contentProtection: devContentProtectionConfig\n };\n }\n \n return adapter || new ThMemoryPreferencesAdapter<K>(\n (initialPreferences as ThPreferences<K>) || fallbackPreferences\n );\n }, [adapter, initialPreferences, devMode]);\n \n const [preferences, setPreferences] = useState<ThPreferences<K>>(\n (() => {\n let fallbackPreferences = defaultPreferencesContextValue.preferences as ThPreferences<K>;\n \n if (devMode && !initialPreferences) {\n fallbackPreferences = {\n ...fallbackPreferences,\n contentProtection: devContentProtectionConfig\n };\n }\n \n return (initialPreferences as ThPreferences<K>) || fallbackPreferences;\n })()\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}","import { FontDefinition, FontSpec, WeightConfig } from \"../models\";\nimport { FontResource } from \"./fonts\";\n\n/**\n * Builds a Bunny Fonts API URL\n * @see https://fonts.bunny.net\n */\nconst buildBunnyFontsUrl = ({\n family,\n weights,\n styles = [\"normal\"]\n}: {\n family: string;\n weights: WeightConfig;\n styles?: FontSpec[\"styles\"];\n}): string => {\n if (weights.type !== \"static\") {\n throw new Error(\"Bunny Fonts only supports static fonts\");\n }\n const weightValues = weights.values;\n \n // For Bunny Fonts, we need to handle italic variants by appending \"i\" to the weight\n const variants = new Set<string>();\n \n for (const weight of weightValues) {\n // Always add the base weight\n variants.add(weight.toString());\n \n // Add italic variant if needed\n if (styles.includes(\"italic\")) {\n variants.add(`${ weight }i`);\n }\n }\n\n // Convert set to array and sort for consistent URLs\n const variantList = Array.from(variants).sort();\n \n const familyParam = family.replace(/ /g, \"-\").toLowerCase();\n const variantParam = variantList.join(\",\");\n\n return `https://fonts.bunny.net/css?family=${ familyParam }:${ variantParam }`;\n};\n\n/**\n * Creates Bunny Fonts resources for injection\n */\nexport const createBunnyFontResources = (font: FontDefinition): FontResource | null => {\n if (font.source.type !== \"custom\" || font.source.provider !== \"bunny\" || font.spec.weights.type !== \"static\") {\n return null;\n }\n\n const { family, weights, styles } = font.spec;\n\n const url = buildBunnyFontsUrl({\n family,\n weights,\n styles\n });\n\n return {\n as: \"link\",\n rel: \"stylesheet\",\n url\n };\n};","import { FontDefinition, WeightConfig, VariableFontRangeConfig, FontSpec } from \"../models\";\nimport { FontResource } from \"./fonts\";\n\n/**\n * Builds a Google Fonts API v2 URL according to the specification.\n * @see https://developers.google.com/fonts/docs/css2\n */\nconst buildGoogleFontsV2Url = ({\n family,\n weights,\n styles = [\"normal\"],\n widths,\n display = \"block\",\n text\n}: {\n family: string;\n weights: WeightConfig;\n styles?: FontSpec[\"styles\"];\n widths?: VariableFontRangeConfig;\n display?: FontSpec[\"display\"];\n text?: string;\n}): string => {\n // If optimizing with text, just load the font family with the text parameter\n if (text) {\n return `https://fonts.googleapis.com/css2?family=${ family.replace(/ /g, \"+\") }&text=${ encodeURIComponent(text) }`;\n }\n\n const hasItalic = styles.includes(\"italic\");\n const hasWidth = !!widths;\n const weightValues = weights.type === \"static\"\n ? weights.values.join(\",\")\n : `${ weights.min }..${ weights.max }`;\n const widthValues = hasWidth && widths ? `${ widths.min }..${ widths.max }` : undefined;\n\n const familyParam = family.replace(/ /g, \"+\");\n let axesParam: string;\n\n if (hasItalic && hasWidth) {\n // With italic and width: ital,wdth,wght@0,widthValues,weightValues;1,widthValues,weightValues\n const variants = [\n `0,${ widthValues },${ weightValues }`, // normal\n `1,${ widthValues },${ weightValues }` // italic\n ];\n axesParam = `:ital,wdth,wght@${ variants.join(\";\") }`;\n } else if (hasItalic) {\n // With italic only: ital,wght@0,weightValues;1,weightValues\n const variants = [\n `0,${ weightValues }`, // normal\n `1,${ weightValues }` // italic\n ];\n axesParam = `:ital,wght@${ variants.join(\";\") }`;\n } else if (hasWidth) {\n // With width only: wdth,wght@widthValues,weightValues\n axesParam = `:wdth,wght@${ widthValues },${ weightValues }`;\n } else {\n // Without italic or width: wght@weightValues\n axesParam = `:wght@${ weightValues }`;\n }\n const displayParam = display ? `&display=${ display }` : \"\";\n\n return `https://fonts.googleapis.com/css2?family=${ familyParam }${ axesParam }${ displayParam }`;\n};\n\n/**\n * Creates Google Font resources for injection\n */\nexport const createGoogleFontResources = (font: FontDefinition, text?: string): FontResource | null => {\n if (font.source.type !== \"custom\" || font.source.provider !== \"google\") {\n return null;\n }\n\n const { family, weights, display, styles, widths } = font.spec;\n\n const url = buildGoogleFontsV2Url({\n family,\n weights,\n display,\n styles,\n widths,\n text\n });\n\n return {\n as: \"link\",\n rel: \"stylesheet\",\n url\n };\n};\n","import { FontDefinition } from \"../models\";\nimport { FontResource } from \"./fonts\";\n\n/**\n * Determines the font format from a file path\n */\n const getFontFormat = (path: string): string => {\n const ext = path.split(\".\").pop()?.toLowerCase();\n switch (ext) {\n case \"woff\": return \"woff\";\n case \"woff2\": return \"woff2\";\n case \"ttf\": return \"truetype\";\n case \"otf\": return \"opentype\";\n case \"eot\": return \"embedded-opentype\";\n case \"svg\": return \"svg\";\n default: return \"woff2\"; // default to woff2 if unknown\n }\n };\n\n/**\n * Creates local font resources for injection\n */\n export const createLocalFontResources = (font: FontDefinition): FontResource | null => {\n if (font.source.type !== \"custom\" || font.source.provider !== \"local\") {\n return null;\n }\n\n const { family, weights, display, widths } = font.spec;\n const fontFiles = font.source.files || [];\n \n // Generate CSS for each font file\n const cssContent = fontFiles.map(fontFile => {\n const format = getFontFormat(fontFile.path);\n const fontUrl = new URL(fontFile.path, window.location.origin).toString();\n\n // Check if this is a variable font\n const isVariable = font.source.type === \"custom\" && \n font.source.provider === \"local\" && \n \"variant\" in font.source && \n font.source.variant === \"variable\";\n \n const rules = [\n `@font-face {`,\n ` font-family: \"${ family }\";`,\n ` src: url(\"${ fontUrl }\") format(\"${ format }\");`\n ];\n\n // Handle font weight\n if (isVariable && weights.type === \"variable\") {\n rules.push(` font-weight: ${ weights.min } ${ weights.max };`);\n } else if (\"weight\" in fontFile) {\n rules.push(` font-weight: ${ fontFile.weight };`);\n }\n\n // Handle font style\n if (\"style\" in fontFile) {\n rules.push(` font-style: ${ fontFile.style };`);\n }\n\n // Handle font width for variable fonts\n if (isVariable && widths) {\n rules.push(` font-stretch: ${ widths.min }% ${ widths.max }%;`);\n }\n \n if (display) {\n rules.push(` font-display: ${ display };`);\n } else {\n rules.push(` font-display: block;`);\n }\n \n return rules.join(\"\\n\") + \"\\n}\";\n }).filter(Boolean).join(\"\\n\\n\");\n \n const blob = new Blob([cssContent], { type: \"text/css\" });\n \n // Return the font face as a stylesheet resource\n return {\n as: \"link\",\n rel: \"stylesheet\",\n blob: blob\n };\n };\n","import { FontDefinition, VariableFontRangeConfig, WeightConfig, ThFontFamilyPref, FontCollection, ValidatedLanguageCollection } from \"../models\";\n\nimport { ILinkInjectable, IUrlInjectable, IBlobInjectable } from \"@readium/navigator\";\n\nimport { createBunnyFontResources } from \"./createBunnyFontResources\";\nimport { createGoogleFontResources } from \"./createGoogleFontResources\";\nimport { createLocalFontResources } from \"./createLocalFontResources\";\n\nexport type FontResource = (ILinkInjectable & IUrlInjectable) | (ILinkInjectable & IBlobInjectable);\n\nexport interface InjectableFontResources {\n allowedDomains: string[];\n prepend: FontResource[];\n append: FontResource[];\n}\n\nexport interface FontMetadata {\n fontStack: string | null;\n fontFamily: string | null;\n weights: WeightConfig | null;\n widths: VariableFontRangeConfig | null;\n}\n\nexport interface FontService {\n getInjectables: (options?: { language?: string } | { key?: string }, optimize?: boolean) => InjectableFontResources | null;\n getFontMetadata: (fontId: string) => FontMetadata;\n getFontCollection: (options?: { language?: string } | { key?: string }) => FontCollection;\n resolveFontLanguage: (bcp47Tag: string | undefined, direction: \"ltr\" | \"rtl\") => string;\n}\n\nexport const createFontService = (fontFamilyPref: ThFontFamilyPref): FontService => {\n const allSupportedLanguages: string[] = [];\n const parsedFonts = new Map<string, FontMetadata>();\n \n const bunnyFonts = new Map<string, FontDefinition[]>();\n const googleFonts = new Map<string, FontDefinition[]>();\n const localFonts = new Map<string, FontDefinition[]>();\n \n /**\n * Resolves a BCP47 language tag to a supported language format based on specific rules and available font collections.\n * \n * Rules:\n * - First checks if the full BCP47 tag exists in supportedLanguages\n * - If not found, checks for { language }-{ scriptOrRegion } format\n * - Special case for Japanese (ja):\n * - For RTL direction, checks if \"ja-v\" is supported\n * - Otherwise falls back to \"ja\" if supported\n * - Filters out specific language-script combinations:\n * - Mongolian: \"mn-mong\" and \"mn-cyrl\"\n * - Chinese: \"zh-hant\", \"zh-tw\", \"zh-hk\"\n * - If not filtered, falls back to { language } if supported\n * - Returns \"default\" if no match is found\n * \n * @param bcp47Tag - The BCP47 language tag to resolve\n * @param direction - Text direction (\"ltr\" or \"rtl\")\n * @returns The resolved language tag or \"default\" if no match found\n */\n const resolveFontLanguage = (\n bcp47Tag: string | undefined, \n direction: \"ltr\" | \"rtl\" = \"ltr\"\n ): string => {\n if (!bcp47Tag) return \"default\";\n \n // Check direct match of full BCP47 tag\n if (allSupportedLanguages.includes(bcp47Tag)) {\n return bcp47Tag;\n }\n \n const parts = bcp47Tag.split(/[-_]/);\n const language = parts[0].toLowerCase();\n const scriptOrRegion = parts[1]?.toLowerCase();\n \n // Check { language }-{ scriptOrRegion } format\n if (scriptOrRegion) {\n const langScriptOrRegion = `${ language }-${ scriptOrRegion }`;\n if (allSupportedLanguages.includes(langScriptOrRegion)) {\n return langScriptOrRegion;\n }\n }\n \n // Special case for Japanese\n if (language === \"ja\" && !scriptOrRegion) {\n if (direction === \"rtl\" && allSupportedLanguages.includes(\"ja-v\")) {\n return \"ja-v\";\n }\n if (allSupportedLanguages.includes(\"ja\")) {\n return \"ja\";\n }\n }\n \n // Special cases that should be filtered out\n const shouldFilter = \n (language === \"mn\" && (scriptOrRegion === \"mong\" || scriptOrRegion === \"cyrl\")) ||\n (language === \"zh\" && (scriptOrRegion === \"hant\" || scriptOrRegion === \"tw\" || scriptOrRegion === \"hk\"));\n \n // If not filtered, check if just the language is supported\n if (!shouldFilter && allSupportedLanguages.includes(language)) {\n return language;\n }\n \n return \"default\";\n };\n\n // Parse ALL fonts upfront - index by collection\n Object.entries(fontFamilyPref).forEach(([collectionName, collectionData]) => {\n // Handle both FontCollection and ValidatedLanguageCollection\n const fontCollection = \"fonts\" in collectionData ? \n (collectionData as ValidatedLanguageCollection).fonts : \n collectionData as FontCollection;\n \n // Collect supported languages if this is a ValidatedLanguageCollection\n if (\"supportedLanguages\" in collectionData) {\n const reducedLanguages = collectionData.supportedLanguages.map((lang: string) => {\n const parts = lang.split(/[-_]/);\n const language = parts[0].toLowerCase();\n const scriptOrRegion = parts[1]?.toLowerCase();\n return scriptOrRegion ? `${ language }-${ scriptOrRegion }` : language;\n });\n allSupportedLanguages.push(...reducedLanguages);\n }\n \n // Initialize arrays for this collection\n bunnyFonts.set(collectionName, []);\n googleFonts.set(collectionName, []);\n localFonts.set(collectionName, []);\n \n const collectionBunnyFonts = bunnyFonts.get(collectionName)!;\n const collectionGoogleFonts = googleFonts.get(collectionName)!;\n const collectionLocalFonts = localFonts.get(collectionName)!;\n \n // Process each font in the collection\n Object.entries<FontDefinition>(fontCollection as Record<string, FontDefinition>).forEach(([id, font]) => {\n const fontFamily = font.spec.family;\n let fontStack = fontFamily;\n\n if (font.source.type === \"custom\") {\n switch (font.source.provider) {\n case \"bunny\":\n collectionBunnyFonts.push(font);\n break;\n case \"google\":\n collectionGoogleFonts.push(font);\n break;\n case \"local\":\n collectionLocalFonts.push(font);\n break;\n }\n }\n\n const wrapIfNeeded = (name: string): string => {\n const trimmed = name.trim();\n if (!trimmed) return \"\";\n \n // If the name has spaces and isn't already wrapped in quotes\n if (trimmed.includes(\" \") && !/^['\"].*['\"]$/.test(trimmed)) {\n return `\"${ trimmed }\"`;\n }\n return trimmed;\n };\n\n const wrappedFontFamily = wrapIfNeeded(fontFamily);\n \n if (font.spec.fallbacks?.length) {\n const uniqueFallbacks = [...new Set(\n font.spec.fallbacks\n .filter((fallback: string) => fallback.toLowerCase() !== fontFamily.toLowerCase())\n .map(wrapIfNeeded)\n )];\n if (uniqueFallbacks.length > 0) {\n fontStack = [wrappedFontFamily, ...uniqueFallbacks].join(\", \");\n }\n }\n\n parsedFonts.set(id, { \n fontStack: fontStack || wrappedFontFamily, \n fontFamily: wrappedFontFamily,\n weights: font.spec.weights || null,\n widths: font.spec.widths || null\n });\n });\n });\n\n // Get default collection for fallback\n const defaultBunnyFonts = bunnyFonts.get(\"default\") || [];\n const defaultGoogleFonts = googleFonts.get(\"default\") || [];\n const defaultLocalFonts = localFonts.get(\"default\") || [];\n \n // Helper function to process fonts into injectable resources\n const processFonts = (bunnyFontsList: FontDefinition[], googleFontsList: FontDefinition[], localFontsList: FontDefinition[], optimize: boolean = false): InjectableFontResources | null => {\n const result: InjectableFontResources = {\n allowedDomains: [],\n prepend: [],\n append: []\n };\n\n // Process Bunny Fonts\n const bunnyResources = bunnyFontsList\n .map(font => createBunnyFontResources(font))\n .filter((resource): resource is FontResource => resource !== null);\n\n if (bunnyResources.length > 0) {\n result.allowedDomains.push(\n \"https://fonts.bunny.net\"\n );\n\n result.prepend.push(\n { \n as: \"link\",\n rel: \"preconnect\",\n url: \"https://fonts.bunny.net\"\n }\n );\n\n result.append.push(...bunnyResources);\n }\n\n // Process Google Fonts\n const googleResources = googleFontsList\n .map(font => createGoogleFontResources(font, optimize ? font.name : undefined))\n .filter((resource): resource is FontResource => resource !== null);\n\n if (googleResources.length > 0) {\n result.allowedDomains.push(\n \"https://fonts.googleapis.com\",\n \"https://fonts.gstatic.com\"\n );\n \n result.prepend.push(\n { \n as: \"link\",\n rel: \"preconnect\",\n url: \"https://fonts.googleapis.com\"\n },\n { \n as: \"link\",\n rel: \"preconnect\",\n url: \"https://fonts.gstatic.com\",\n attributes: { crossOrigin: \"anonymous\" }\n }\n );\n \n result.append.push(...googleResources);\n }\n\n // Process Local Fonts\n const localResources = localFontsList\n .map(createLocalFontResources)\n .filter((resource): resource is FontResource => resource !== null);\n\n if (localResources.length > 0) {\n result.allowedDomains.push(window.location.origin);\n result.append.push(...localResources);\n }\n\n return result.append.length > 0 ? result : null;\n };\n\n /**\n * Returns injectable font resources based on the provided options.\n * \n * @param options - The options object containing either a language or a key.\n * @param optimize - Whether to optimize the font resources. This will use the font label/name to determine the letters to request from Google Fonts.\n * @returns The injectable font resources or null if no valid collection is found.\n */\n const getInjectables = (options?: { language?: string } | { key?: string }, optimize = false): InjectableFontResources | null => {\n // Handle key-based selection\n if (options && \"key\" in options) {\n const { key } = options;\n \n if (!key || !(key in fontFamilyPref)) {\n return null;\n }\n \n return processFonts(bunnyFonts.get(key) || [], googleFonts.get(key) || [], localFonts.get(key) || [], optimize);\n }\n \n // Handle language-based selection\n if (options && \"language\" in options) {\n const { language: publicationLanguage } = options;\n \n // Find the collection for this language (validation already done in createPreferences)\n for (const [collectionName, collectionData] of Object.entries(fontFamilyPref)) {\n if (collectionName === \"default\") continue;\n \n const supportedLangs = \"supportedLanguages\" in collectionData ? \n collectionData.supportedLanguages : null;\n \n if (supportedLangs && Array.isArray(supportedLangs) && publicationLanguage && supportedLangs.includes(publicationLanguage)) {\n return processFonts(bunnyFonts.get(collectionName) || [], googleFonts.get(collectionName) || [], localFonts.get(collectionName) || [], optimize);\n }\n }\n }\n \n // Default behavior - return default collection\n return processFonts(defaultBunnyFonts, defaultGoogleFonts, defaultLocalFonts, optimize);\n };\n \n /**\n * Returns metadata for a specific font.\n * \n * @param fontId - The ID of the font.\n * @returns The metadata for the font or null if the font is not found.\n */\n const getFontMetadata = (fontId: string) => {\n const parsed = parsedFonts.get(fontId);\n return parsed || { fontStack: null, fontFamily: null, weights: null, widths: null };\n };\n\n /**\n * Returns the font collection based on the provided options.\n * \n * @param options - The options object containing either a language or a key.\n * @returns The font collection or the default collection if no valid collection is found.\n */\n const getFontCollection = (options?: { language?: string } | { key?: string }): FontCollection => {\n // Handle key-based selection\n if (options && \"key\" in options) {\n const { key } = options;\n \n if (!key || !(key in fontFamilyPref)) {\n return fontFamilyPref.default as FontCollection;\n }\n \n // Check if we're accessing the default collection\n if (key === \"default\") {\n return fontFamilyPref.default as FontCollection;\n }\n \n // For non-default keys, we expect ValidatedLanguageCollection\n const prefRecord = fontFamilyPref as Record<string, FontCollection | ValidatedLanguageCollection>;\n const collection = prefRecord[key] as ValidatedLanguageCollection;\n if (collection && \"fonts\" in collection) {\n return collection.fonts;\n }\n \n // Fallback to default\n return fontFamilyPref.default as FontCollection;\n }\n \n // Handle language-based selection\n if (options && \"language\" in options) {\n const { language: publicationLanguage } = options;\n \n // Find the collection for this language (validation already done in createPreferences)\n for (const [collectionName, collectionData] of Object.entries(fontFamilyPref)) {\n if (collectionName === \"default\") continue;\n \n const collection = \"fonts\" in collectionData ? collectionData : { fonts: collectionData };\n const supportedLangs = \"supportedLanguages\" in collection ? \n collection.supportedLanguages : null;\n \n if (supportedLangs?.includes(publicationLanguage!)) {\n return collection.fonts;\n }\n }\n\n // Fall back to default if no collection supports this language\n return fontFamilyPref.default as FontCollection;\n }\n \n // Default behavior - return default collection\n return fontFamilyPref.default as FontCollection;\n };\n\n return {\n getInjectables,\n getFontMetadata,\n getFontCollection,\n resolveFontLanguage\n };\n};\n","\"use client\";\n\nimport { useContext } from \"react\";\nimport { ThPreferencesContext } from \"../ThPreferencesContext\";\nimport { CustomizableKeys, DefaultKeys, ThPreferences } from \"../preferences\";\nimport { createFontService } from \"../services/fonts\";\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 // Create font service that handles the entire ThFontFamilyPref object\n const fontService = createFontService(context.preferences.settings.keys.fontFamily);\n \n return {\n preferences: context.preferences as ThPreferences<K>,\n updatePreferences: context.updatePreferences as (prefs: ThPreferences<K>) => void,\n \n getFontInjectables: (options?: { language?: string } | { key?: string }, optimize?: boolean) => {\n return fontService.getInjectables(options, optimize);\n },\n \n getFontsList: (options?: { language?: string } | { key?: string }) => {\n return fontService.getFontCollection(options);\n },\n \n getFontMetadata: (fontId: string) => {\n return fontService.getFontMetadata(fontId);\n },\n \n resolveFontLanguage: (bcp47Tag: string | undefined, direction: \"ltr\" | \"rtl\") => {\n return fontService.resolveFontLanguage(bcp47Tag, direction);\n }\n };\n}","\"use client\";\n\nimport { \n ThSpacingPresetKeys,\n defaultSpacingSettingsSubpanel,\n defaultTextSettingsMain,\n defaultTextSettingsSubpanel,\n defaultSpacingSettingsMain,\n defaultSpacingPresetsOrder\n} from \"@/preferences/models\";\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}","const PREFIXES = {\n short: \"th\",\n full: \"thorium_web\"\n} as const;\n\ntype PrefixVariant = keyof typeof PREFIXES;\n\nexport const prefixString = (str: string, variant: PrefixVariant = \"short\") => {\n return `${ PREFIXES[variant] }-${ str }`;\n}","\"use client\";\n\nimport { useCallback, useEffect, useRef } from \"react\";\n\nimport { ThBreakpoints, CSSColor } from \"../models\";\n\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\";\nimport { prefixString } from \"@/core/Helpers/prefixString\";\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, { prefix: prefixString(\"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}"]}
|
|
@@ -1209,5 +1209,5 @@ var useAppSelector = useSelector;
|
|
|
1209
1209
|
var useAppStore = useStore;
|
|
1210
1210
|
|
|
1211
1211
|
export { ThReduxPreferencesAdapter, ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, debounce, dockAction, expandDockPanel, handleSpacingSetting, initialSettingsState, initialWebPubSettingsState, makeStore, preferencesSlice, publicationSlice, readerSlice, setActionOpen, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontLanguage, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setHyphens, setImmersive, setL10n, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setPaginatedAffordance, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgressionFormat, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRunningHeadFormat, setScroll, setScrollAffordance, setScrollAffordances, setSettingsContainer, setSpacingPreset, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setUI, setUserNavigated, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLineHeight, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, updateFromPreferences, useAppDispatch, useAppSelector, useAppStore, webPubSettingsSlice };
|
|
1212
|
-
//# sourceMappingURL=chunk-
|
|
1213
|
-
//# sourceMappingURL=chunk-
|
|
1212
|
+
//# sourceMappingURL=chunk-K3K7TUWM.mjs.map
|
|
1213
|
+
//# sourceMappingURL=chunk-K3K7TUWM.mjs.map
|