@tenerife.music/ui 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/ThemeProvider-CaUX_Jam.cjs +2 -0
  2. package/dist/ThemeProvider-ltuW-773.js +1227 -0
  3. package/dist/animation/index.d.ts +9 -0
  4. package/dist/animation/index.d.ts.map +1 -0
  5. package/dist/animation/presets.d.ts +304 -0
  6. package/dist/animation/presets.d.ts.map +1 -0
  7. package/dist/animation/tas.d.ts +80 -0
  8. package/dist/animation/tas.d.ts.map +1 -0
  9. package/dist/animation/types.d.ts +106 -0
  10. package/dist/animation/types.d.ts.map +1 -0
  11. package/dist/animation/utils.d.ts +7 -0
  12. package/dist/animation/utils.d.ts.map +1 -0
  13. package/dist/components/SectionBuilder.d.ts +37 -0
  14. package/dist/components/SectionBuilder.d.ts.map +1 -0
  15. package/dist/components/SectionBuilder.presets.d.ts +229 -0
  16. package/dist/components/SectionBuilder.presets.d.ts.map +1 -0
  17. package/dist/components/SectionBuilder.types.d.ts +327 -0
  18. package/dist/components/SectionBuilder.types.d.ts.map +1 -0
  19. package/dist/components/auth/ProfileCard.d.ts.map +1 -1
  20. package/dist/components/cards/EventCard.d.ts +32 -31
  21. package/dist/components/cards/EventCard.d.ts.map +1 -1
  22. package/dist/components/cards/VenueCard.d.ts +32 -33
  23. package/dist/components/cards/VenueCard.d.ts.map +1 -1
  24. package/dist/components/data/List.d.ts.map +1 -1
  25. package/dist/components/data/Table.d.ts.map +1 -1
  26. package/dist/components/data/Timeline.d.ts.map +1 -1
  27. package/dist/components/feedback/Alert.d.ts +1 -1
  28. package/dist/components/feedback/Alert.d.ts.map +1 -1
  29. package/dist/components/feedback/Progress.d.ts.map +1 -1
  30. package/dist/components/filters/FilterSelect.d.ts.map +1 -1
  31. package/dist/components/image/Image.d.ts.map +1 -1
  32. package/dist/components/layout/Box.d.ts +82 -0
  33. package/dist/components/layout/Box.d.ts.map +1 -0
  34. package/dist/components/layout/Container.d.ts.map +1 -1
  35. package/dist/components/layout/Flex.d.ts +27 -6
  36. package/dist/components/layout/Flex.d.ts.map +1 -1
  37. package/dist/components/layout/Grid.d.ts +42 -3
  38. package/dist/components/layout/Grid.d.ts.map +1 -1
  39. package/dist/components/layout/Navbar.d.ts +2 -2
  40. package/dist/components/layout/Navbar.d.ts.map +1 -1
  41. package/dist/components/layout/Section.d.ts.map +1 -1
  42. package/dist/components/layout/Stack.d.ts +21 -4
  43. package/dist/components/layout/Stack.d.ts.map +1 -1
  44. package/dist/components/layout/index.d.ts +15 -0
  45. package/dist/components/layout/index.d.ts.map +1 -0
  46. package/dist/components/layout/layout.types.d.ts +92 -0
  47. package/dist/components/layout/layout.types.d.ts.map +1 -0
  48. package/dist/components/menus/DropdownMenu.d.ts.map +1 -1
  49. package/dist/components/menus/NavigationMenu.d.ts.map +1 -1
  50. package/dist/components/menus/Tabs.d.ts.map +1 -1
  51. package/dist/components/modals/ConfirmDialog.d.ts +2 -2
  52. package/dist/components/modals/ConfirmDialog.d.ts.map +1 -1
  53. package/dist/components/modals/Modal.d.ts.map +1 -1
  54. package/dist/components/modals/SimpleModal.d.ts +3 -1
  55. package/dist/components/modals/SimpleModal.d.ts.map +1 -1
  56. package/dist/components/navigation/Breadcrumbs.d.ts +1 -0
  57. package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -1
  58. package/dist/components/navigation/Pagination.d.ts +1 -0
  59. package/dist/components/navigation/Pagination.d.ts.map +1 -1
  60. package/dist/components/overlays/OverlayPortal.d.ts.map +1 -1
  61. package/dist/components/overlays/Popover.d.ts +4 -4
  62. package/dist/components/overlays/Popover.d.ts.map +1 -1
  63. package/dist/components/overlays/Tooltip.d.ts +2 -2
  64. package/dist/components/overlays/Tooltip.d.ts.map +1 -1
  65. package/dist/components/primitives/Badge.d.ts +1 -1
  66. package/dist/components/primitives/Badge.d.ts.map +1 -1
  67. package/dist/components/primitives/Card.d.ts.map +1 -1
  68. package/dist/components/primitives/Divider.d.ts.map +1 -1
  69. package/dist/components/primitives/Label.d.ts.map +1 -1
  70. package/dist/components/primitives/Link.d.ts +4 -2
  71. package/dist/components/primitives/Link.d.ts.map +1 -1
  72. package/dist/components/primitives/ThemeSwitch.d.ts +2 -2
  73. package/dist/components/primitives/ThemeSwitch.d.ts.map +1 -1
  74. package/dist/components/primitives/Typography.d.ts +2 -2
  75. package/dist/components/primitives/Typography.d.ts.map +1 -1
  76. package/dist/components/search/SearchBar.d.ts.map +1 -1
  77. package/dist/components/sections/ArticlesSection.d.ts +14 -4
  78. package/dist/components/sections/ArticlesSection.d.ts.map +1 -1
  79. package/dist/components/sections/CTASection.d.ts +38 -0
  80. package/dist/components/sections/CTASection.d.ts.map +1 -0
  81. package/dist/components/sections/FeatureSection.d.ts +34 -0
  82. package/dist/components/sections/FeatureSection.d.ts.map +1 -0
  83. package/dist/components/sections/HeroSection.d.ts +28 -0
  84. package/dist/components/sections/HeroSection.d.ts.map +1 -0
  85. package/dist/components/sections/TrendingSection.d.ts +15 -3
  86. package/dist/components/sections/TrendingSection.d.ts.map +1 -1
  87. package/dist/components/toasts/Toast.d.ts +1 -1
  88. package/dist/components/toasts/Toast.d.ts.map +1 -1
  89. package/dist/components/toasts/ToastProvider.d.ts.map +1 -1
  90. package/dist/components/ui/button.d.ts +4 -2
  91. package/dist/components/ui/button.d.ts.map +1 -1
  92. package/dist/components/ui/card.d.ts.map +1 -1
  93. package/dist/components/ui/dialog.d.ts.map +1 -1
  94. package/dist/components/ui/input.d.ts.map +1 -1
  95. package/dist/components/ui/label.d.ts.map +1 -1
  96. package/dist/components/ui/tooltip.d.ts.map +1 -1
  97. package/dist/index.cjs +1 -1
  98. package/dist/index.d.ts +27 -18
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.mjs +3897 -2372
  101. package/dist/lib/a11y.d.ts +16 -0
  102. package/dist/lib/a11y.d.ts.map +1 -0
  103. package/dist/lib/responsive-props.d.ts +64 -0
  104. package/dist/lib/responsive-props.d.ts.map +1 -0
  105. package/dist/motion-4SRNkZlz.cjs +2 -0
  106. package/dist/motion-CuHacXY1.js +722 -0
  107. package/dist/test/animation-utils.d.ts +60 -0
  108. package/dist/test/animation-utils.d.ts.map +1 -0
  109. package/dist/theme/ThemeProvider.d.ts +19 -8
  110. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  111. package/dist/theme/applyMode.d.ts +11 -2
  112. package/dist/theme/applyMode.d.ts.map +1 -1
  113. package/dist/theme/index.cjs +1 -1
  114. package/dist/theme/index.d.ts +3 -0
  115. package/dist/theme/index.d.ts.map +1 -1
  116. package/dist/theme/index.mjs +236 -101
  117. package/dist/theme/loader.d.ts +64 -0
  118. package/dist/theme/loader.d.ts.map +1 -0
  119. package/dist/theme/registry.d.ts +71 -0
  120. package/dist/theme/registry.d.ts.map +1 -0
  121. package/dist/theme/schema.d.ts +125 -0
  122. package/dist/theme/schema.d.ts.map +1 -0
  123. package/dist/themes/brand_engine.d.ts +102 -0
  124. package/dist/themes/brand_engine.d.ts.map +1 -0
  125. package/dist/themes/index.d.ts +3 -0
  126. package/dist/themes/index.d.ts.map +1 -1
  127. package/dist/themes/minimal.d.ts +7 -0
  128. package/dist/themes/minimal.d.ts.map +1 -0
  129. package/dist/themes/neon.d.ts +7 -0
  130. package/dist/themes/neon.d.ts.map +1 -0
  131. package/dist/themes/types.d.ts +220 -5
  132. package/dist/themes/types.d.ts.map +1 -1
  133. package/dist/tokens/css-variables.d.ts +21 -0
  134. package/dist/tokens/css-variables.d.ts.map +1 -1
  135. package/dist/tokens/index.cjs +3 -3
  136. package/dist/tokens/index.mjs +295 -551
  137. package/dist/tokens/motion.d.ts +77 -0
  138. package/dist/tokens/motion.d.ts.map +1 -1
  139. package/package.json +20 -7
  140. package/dist/applyMode-Bh7sEqT6.js +0 -144
  141. package/dist/applyMode-DCenL-Bg.cjs +0 -2
  142. package/dist/colors-BGRiFoSZ.cjs +0 -2
  143. package/dist/colors-ClemXPPi.js +0 -377
@@ -0,0 +1,60 @@
1
+ import { default as React } from 'react';
2
+ import { AnimationProps } from '../animation/types';
3
+ /**
4
+ * Mock prefers-reduced-motion media query
5
+ * Use this in tests to simulate reduced motion preference
6
+ * Works with both Jest and Vitest
7
+ */
8
+ export declare function mockReducedMotion(enabled: boolean): () => void;
9
+ /**
10
+ * Check if animation props respect reduced motion
11
+ * Returns true if animations are disabled when reduced motion is enabled
12
+ */
13
+ export declare function checkReducedMotionSupport(animationProps: AnimationProps, reducedMotionEnabled?: boolean): boolean;
14
+ /**
15
+ * Verify that animation props use motion tokens
16
+ * Checks that duration/easing values come from tokens, not hardcoded
17
+ */
18
+ export declare function verifyTokenUsage(animationProps: AnimationProps): {
19
+ valid: boolean;
20
+ issues: string[];
21
+ };
22
+ /**
23
+ * Test that animation preset returns correct AnimationProps
24
+ */
25
+ export declare function testAnimationPreset(presetFn: (config?: unknown) => AnimationProps, config?: unknown): {
26
+ hasInitial: boolean;
27
+ hasAnimate: boolean;
28
+ hasTransition: boolean;
29
+ respectsReducedMotion: boolean;
30
+ };
31
+ /**
32
+ * Verify that component animation props are properly resolved
33
+ */
34
+ export declare function verifyComponentAnimationProps(resolvedProps: AnimationProps, expectedAnimation?: string, expectedHoverAnimation?: string): {
35
+ valid: boolean;
36
+ issues: string[];
37
+ };
38
+ /**
39
+ * Wait for animation to complete
40
+ * Useful for testing animation end states
41
+ */
42
+ export declare function waitForAnimation(element: HTMLElement, timeout?: number): Promise<void>;
43
+ /**
44
+ * Get animation duration from element
45
+ * Extracts duration from computed styles
46
+ */
47
+ export declare function getAnimationDuration(element: HTMLElement): number;
48
+ /**
49
+ * Check if element has animation applied
50
+ */
51
+ export declare function hasAnimation(element: HTMLElement): boolean;
52
+ /**
53
+ * Test helper for checking animation behavior with reduced motion
54
+ */
55
+ export declare function testAnimationWithReducedMotion(_renderFn: (reducedMotion: boolean) => React.ReactElement): Promise<{
56
+ withReducedMotion: boolean;
57
+ withoutReducedMotion: boolean;
58
+ }>;
59
+ export type { AnimationProps } from '../animation/types';
60
+ //# sourceMappingURL=animation-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-utils.d.ts","sourceRoot":"","sources":["../../src/test/animation-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,IAAI,CA+B9D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,cAAc,EAC9B,oBAAoB,GAAE,OAAc,GACnC,OAAO,CAgBT;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,cAAc,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAoCA;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,cAAc,EAC9C,MAAM,CAAC,EAAE,OAAO,GACf;IACD,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,qBAAqB,EAAE,OAAO,CAAC;CAChC,CAcA;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,cAAc,EAC7B,iBAAiB,CAAC,EAAE,MAAM,EAC1B,sBAAsB,CAAC,EAAE,MAAM,GAC9B;IACD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CA+BA;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAgBjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAG1D;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,KAAK,CAAC,YAAY,GACxD,OAAO,CAAC;IACT,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAAC,CAeD;AAGD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -7,10 +7,17 @@ import { Mode } from '../tokens/colors';
7
7
  interface ThemeContextValue {
8
8
  mode: Mode;
9
9
  theme: ThemeName;
10
+ brand: string | null;
11
+ reduceMotion: boolean;
12
+ enableAnimations: boolean;
10
13
  setMode: (mode: Mode) => void;
11
14
  setTheme: (theme: ThemeName) => void;
15
+ setBrand: (brandId: string | null) => Promise<void>;
12
16
  toggleMode: () => void;
17
+ setReduceMotion: (reduce: boolean) => void;
18
+ setEnableAnimations: (enable: boolean) => void;
13
19
  }
20
+ export declare const ThemeContext: React.Context<ThemeContextValue | undefined>;
14
21
  /**
15
22
  * Theme Provider Props
16
23
  */
@@ -18,18 +25,22 @@ interface ThemeProviderProps {
18
25
  children: React.ReactNode;
19
26
  defaultMode?: Mode;
20
27
  defaultTheme?: ThemeName;
28
+ defaultBrand?: string | null;
21
29
  storageKey?: string;
22
30
  themeStorageKey?: string;
31
+ brandStorageKey?: string;
23
32
  attribute?: string;
24
33
  enableSystem?: boolean;
34
+ /**
35
+ * Override reduced motion preference
36
+ */
37
+ reduceMotion?: boolean;
38
+ /**
39
+ * Global animation toggle
40
+ */
41
+ enableAnimations?: boolean;
25
42
  }
26
- /**
27
- * Theme Provider
28
- *
29
- * Provides theme context and manages theme mode (day/night) and theme overrides (default/dark/brand).
30
- * Uses tokens for all theme values and persists mode and theme in localStorage.
31
- */
32
- export declare function ThemeProvider({ children, defaultMode, defaultTheme, storageKey, themeStorageKey, attribute, enableSystem, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
43
+ export declare function ThemeProvider({ children, defaultMode, defaultTheme, defaultBrand, storageKey, themeStorageKey, brandStorageKey, attribute, enableSystem, reduceMotion: reduceMotionOverride, enableAnimations: enableAnimationsOverride, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
33
44
  /**
34
45
  * useTheme Hook
35
46
  *
@@ -37,7 +48,7 @@ export declare function ThemeProvider({ children, defaultMode, defaultTheme, sto
37
48
  *
38
49
  * @example
39
50
  * ```tsx
40
- * const { mode, theme, setMode, setTheme, toggleMode } = useTheme();
51
+ * const { mode, theme, brand, setMode, setTheme, setBrand, toggleMode } = useTheme();
41
52
  * ```
42
53
  */
43
54
  export declare function useTheme(): ThemeContextValue;
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAU5C;;GAEG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAID;;GAEG;AACH,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,WAAmB,EACnB,YAAwB,EACxB,UAAsB,EACtB,eAA4B,EAC5B,SAAuB,EACvB,YAAmB,GACpB,EAAE,kBAAkB,2CA8GpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAQ5C"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAY5C;;GAEG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD;AAED,eAAO,MAAM,YAAY,8CAAgE,CAAC;AAE1F;;GAEG;AACH,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAqBD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,WAAmB,EACnB,YAAwB,EACxB,YAAmB,EACnB,UAAsB,EACtB,eAA4B,EAC5B,eAA4B,EAC5B,SAAuB,EACvB,YAAmB,EACnB,YAAY,EAAE,oBAAoB,EAClC,gBAAgB,EAAE,wBAA+B,GAClD,EAAE,kBAAkB,2CAsQpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAQ5C"}
@@ -12,13 +12,14 @@ export declare function loadThemeOverride(themeName: "default" | "dark" | "brand
12
12
  /**
13
13
  * Apply theme and mode to document
14
14
  * Updates DOM attributes, classes, and CSS variables from tokens with theme overrides
15
+ * Also applies brand overrides if a brand is specified
15
16
  */
16
- export declare function applyDocumentTheme(mode: Mode, themeName?: "default" | "dark" | "brand"): Promise<void>;
17
+ export declare function applyDocumentTheme(mode: Mode, themeName?: "default" | "dark" | "brand", brandId?: string | null): Promise<void>;
17
18
  /**
18
19
  * Apply mode to document (backward compatible)
19
20
  * Updates DOM attributes, classes, and CSS variables from tokens
20
21
  */
21
- export declare function applyDocumentMode(mode: Mode): void;
22
+ export declare function applyDocumentMode(mode: Mode): Promise<void>;
22
23
  /**
23
24
  * Get initial theme from various sources
24
25
  */
@@ -31,4 +32,12 @@ export declare function persistMode(mode: Mode, storageKey?: string): void;
31
32
  * Persist theme to localStorage
32
33
  */
33
34
  export declare function persistTheme(theme: "default" | "dark" | "brand", storageKey?: string): void;
35
+ /**
36
+ * Get initial brand from various sources
37
+ */
38
+ export declare function getInitialBrand(defaultBrand?: string | null, storageKey?: string): string | null;
39
+ /**
40
+ * Persist brand to localStorage
41
+ */
42
+ export declare function persistBrand(brandId: string | null, storageKey?: string): void;
34
43
  //# sourceMappingURL=applyMode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"applyMode.d.ts","sourceRoot":"","sources":["../../src/theme/applyMode.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAKL,KAAK,IAAI,EASV,MAAM,iBAAiB,CAAC;AAOzB;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,WAAW,GAAE,IAAY,EACzB,UAAU,GAAE,MAAkB,EAC9B,YAAY,GAAE,OAAc,GAC3B,IAAI,CAsCN;AAOD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GACtC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAe/B;AA4LD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,SAAS,GAAG,MAAM,GAAG,OAAmB,iBAiCpD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,QAY3C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,GAAE,SAAS,GAAG,MAAM,GAAG,OAAmB,EACtD,UAAU,GAAE,MAAmB,GAC9B,SAAS,GAAG,MAAM,GAAG,OAAO,CAsB9B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,GAAE,MAAkB,QAUrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,EAAE,UAAU,GAAE,MAAmB,QAQhG"}
1
+ {"version":3,"file":"applyMode.d.ts","sourceRoot":"","sources":["../../src/theme/applyMode.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAKL,KAAK,IAAI,EASV,MAAM,iBAAiB,CAAC;AAQzB;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,WAAW,GAAE,IAAY,EACzB,UAAU,GAAE,MAAkB,EAC9B,YAAY,GAAE,OAAc,GAC3B,IAAI,CAsCN;AAOD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GACtC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAe/B;AAiMD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,SAAS,GAAE,SAAS,GAAG,MAAM,GAAG,OAAmB,EACnD,OAAO,GAAE,MAAM,GAAG,IAAW,iBAwD9B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,iBAajD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,GAAE,SAAS,GAAG,MAAM,GAAG,OAAmB,EACtD,UAAU,GAAE,MAAmB,GAC9B,SAAS,GAAG,MAAM,GAAG,OAAO,CAsB9B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,GAAE,MAAkB,QAUrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,EAAE,UAAU,GAAE,MAAmB,QAQhG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,UAAU,GAAE,MAAmB,GAC9B,MAAM,GAAG,IAAI,CAsBf;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,GAAE,MAAmB,QAYnF"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../applyMode-DCenL-Bg.cjs"),y=require("react/jsx-runtime"),o=require("react"),F={day:{background:"hsl(var(--background))",foreground:"hsl(var(--foreground))",card:"hsl(var(--card))",cardForeground:"hsl(var(--card-foreground))",popover:"hsl(var(--popover))",popoverForeground:"hsl(var(--popover-foreground))",primary:"hsl(var(--tm-primary))",primaryForeground:"hsl(var(--tm-primary-foreground))",secondary:"hsl(var(--tm-secondary))",secondaryForeground:"hsl(var(--tm-secondary-foreground))",muted:"hsl(var(--muted))",mutedForeground:"hsl(var(--muted-foreground))",accent:"hsl(var(--tm-accent))",accentForeground:"hsl(var(--tm-accent-foreground))",destructive:"hsl(var(--destructive))",destructiveForeground:"hsl(var(--destructive-foreground))",border:"hsl(var(--border))",input:"hsl(var(--input))",ring:"hsl(var(--ring))",chart1:"hsl(12, 76%, 61%)",chart2:"hsl(173, 58%, 39%)",chart3:"hsl(197, 37%, 24%)",chart4:"hsl(43, 74%, 66%)",chart5:"hsl(27, 87%, 67%)"},night:{background:"hsl(var(--background))",foreground:"hsl(var(--foreground))",card:"hsl(var(--card))",cardForeground:"hsl(var(--card-foreground))",popover:"hsl(var(--popover))",popoverForeground:"hsl(var(--popover-foreground))",primary:"hsl(var(--tm-primary))",primaryForeground:"hsl(var(--tm-primary-foreground))",secondary:"hsl(var(--tm-secondary))",secondaryForeground:"hsl(var(--tm-secondary-foreground))",muted:"hsl(var(--muted))",mutedForeground:"hsl(var(--muted-foreground))",accent:"hsl(var(--tm-accent))",accentForeground:"hsl(var(--tm-accent-foreground))",destructive:"hsl(var(--destructive))",destructiveForeground:"hsl(var(--destructive-foreground))",border:"hsl(var(--border))",input:"hsl(var(--input))",ring:"hsl(var(--ring))",chart1:"hsl(220, 70%, 50%)",chart2:"hsl(160, 60%, 45%)",chart3:"hsl(30, 80%, 55%)",chart4:"hsl(280, 65%, 60%)",chart5:"hsl(340, 75%, 55%)"}},w={background:"hsl(var(--background))",foreground:"hsl(var(--foreground))",card:{DEFAULT:"hsl(var(--card))",foreground:"hsl(var(--card-foreground))"},popover:{DEFAULT:"hsl(var(--popover))",foreground:"hsl(var(--popover-foreground))"},primary:{DEFAULT:"hsl(var(--tm-primary))",foreground:"hsl(var(--tm-primary-foreground))"},secondary:{DEFAULT:"hsl(var(--tm-secondary))",foreground:"hsl(var(--tm-secondary-foreground))"},muted:{DEFAULT:"hsl(var(--muted))",foreground:"hsl(var(--muted-foreground))"},accent:{DEFAULT:"hsl(var(--tm-accent))",foreground:"hsl(var(--tm-accent-foreground))"},destructive:{DEFAULT:"hsl(var(--destructive))",foreground:"hsl(var(--destructive-foreground))"},border:"hsl(var(--border))",input:"hsl(var(--input))",ring:"hsl(var(--ring))",chart:{1:"hsl(var(--chart-1))",2:"hsl(var(--chart-2))",3:"hsl(var(--chart-3))",4:"hsl(var(--chart-4))",5:"hsl(var(--chart-5))"}},M={none:"0",xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem","2xl":"2.5rem","3xl":"3rem","4xl":"4rem","5xl":"5rem"},C={none:"0px",sm:"0.125rem",base:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},D={none:"none",sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",base:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"},x=o.createContext(void 0);function E({children:m,defaultMode:u="day",defaultTheme:h="default",storageKey:n="tm_mode",themeStorageKey:a="tm_theme",attribute:b="data-mode",enableSystem:c=!0}){const[s,p]=o.useState(()=>{if(typeof window>"u")return u;const t=document.documentElement.getAttribute(b);if(t==="day"||t==="night")return t;try{const l=localStorage.getItem(n);if(l==="day"||l==="night")return l}catch{}return c&&typeof window<"u"?window.matchMedia("(prefers-color-scheme: dark)").matches?"night":"day":u}),[d,g]=o.useState(()=>typeof window>"u"?h:r.getInitialTheme(h,a)),i=o.useCallback(e=>{p(e),r.applyDocumentTheme(e,d),r.persistMode(e,n)},[d,n]),v=o.useCallback(async e=>{g(e),await r.applyDocumentTheme(s,e),r.persistTheme(e,a)},[s,a]),f=o.useCallback(()=>{i(s==="night"?"day":"night")},[s,i]);o.useEffect(()=>{const e=r.getInitialMode(u,n,c),t=r.getInitialTheme(h,a);p(e),g(t),r.applyDocumentTheme(e,t),r.persistMode(e,n),r.persistTheme(t,a)},[u,h,n,a,c]),o.useEffect(()=>{if(!c)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),t=l=>{try{localStorage.getItem(n)||i(l.matches?"night":"day")}catch{}};return e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[c,n,i]),o.useEffect(()=>{r.applyDocumentTheme(s,d)},[s,d]);const T=o.useMemo(()=>({mode:s,theme:d,setMode:i,setTheme:v,toggleMode:f}),[s,d,i,v,f]);return y.jsx(x.Provider,{value:T,children:m})}function k(){const m=o.useContext(x);if(m===void 0)throw new Error("useTheme must be used within a ThemeProvider");return m}const I={sans:["ui-sans-serif","system-ui","-apple-system","Segoe UI","Roboto","Ubuntu","Cantarell","Noto Sans","Helvetica Neue","Arial","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"].join(", "),serif:["ui-serif","Georgia","Cambria","Times New Roman","Times","serif"].join(", "),mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas","Liberation Mono","Courier New","monospace"].join(", ")},U={xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem"},A={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},L={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},j={tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"};exports.applyDocumentMode=r.applyDocumentMode;exports.applyDocumentTheme=r.applyDocumentTheme;exports.getInitialMode=r.getInitialMode;exports.getInitialTheme=r.getInitialTheme;exports.loadThemeOverride=r.loadThemeOverride;exports.persistMode=r.persistMode;exports.persistTheme=r.persistTheme;exports.ThemeProvider=E;exports.borderRadius=C;exports.cssVariableColorTokens=F;exports.fontFamilies=I;exports.fontSizes=U;exports.fontWeights=A;exports.letterSpacings=j;exports.lineHeights=L;exports.shadows=D;exports.spacing=M;exports.tailwindThemeColors=w;exports.useTheme=k;
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../ThemeProvider-CaUX_Jam.cjs"),b={day:{background:"hsl(var(--background))",foreground:"hsl(var(--foreground))",card:"hsl(var(--card))",cardForeground:"hsl(var(--card-foreground))",popover:"hsl(var(--popover))",popoverForeground:"hsl(var(--popover-foreground))",primary:"hsl(var(--tm-primary))",primaryForeground:"hsl(var(--tm-primary-foreground))",secondary:"hsl(var(--tm-secondary))",secondaryForeground:"hsl(var(--tm-secondary-foreground))",muted:"hsl(var(--muted))",mutedForeground:"hsl(var(--muted-foreground))",accent:"hsl(var(--tm-accent))",accentForeground:"hsl(var(--tm-accent-foreground))",destructive:"hsl(var(--destructive))",destructiveForeground:"hsl(var(--destructive-foreground))",border:"hsl(var(--border))",input:"hsl(var(--input))",ring:"hsl(var(--ring))",chart1:"hsl(12, 76%, 61%)",chart2:"hsl(173, 58%, 39%)",chart3:"hsl(197, 37%, 24%)",chart4:"hsl(43, 74%, 66%)",chart5:"hsl(27, 87%, 67%)"},night:{background:"hsl(var(--background))",foreground:"hsl(var(--foreground))",card:"hsl(var(--card))",cardForeground:"hsl(var(--card-foreground))",popover:"hsl(var(--popover))",popoverForeground:"hsl(var(--popover-foreground))",primary:"hsl(var(--tm-primary))",primaryForeground:"hsl(var(--tm-primary-foreground))",secondary:"hsl(var(--tm-secondary))",secondaryForeground:"hsl(var(--tm-secondary-foreground))",muted:"hsl(var(--muted))",mutedForeground:"hsl(var(--muted-foreground))",accent:"hsl(var(--tm-accent))",accentForeground:"hsl(var(--tm-accent-foreground))",destructive:"hsl(var(--destructive))",destructiveForeground:"hsl(var(--destructive-foreground))",border:"hsl(var(--border))",input:"hsl(var(--input))",ring:"hsl(var(--ring))",chart1:"hsl(220, 70%, 50%)",chart2:"hsl(160, 60%, 45%)",chart3:"hsl(30, 80%, 55%)",chart4:"hsl(280, 65%, 60%)",chart5:"hsl(340, 75%, 55%)"}},T={background:"hsl(var(--background))",foreground:"hsl(var(--foreground))",card:{DEFAULT:"hsl(var(--card))",foreground:"hsl(var(--card-foreground))"},popover:{DEFAULT:"hsl(var(--popover))",foreground:"hsl(var(--popover-foreground))"},primary:{DEFAULT:"hsl(var(--tm-primary))",foreground:"hsl(var(--tm-primary-foreground))"},secondary:{DEFAULT:"hsl(var(--tm-secondary))",foreground:"hsl(var(--tm-secondary-foreground))"},muted:{DEFAULT:"hsl(var(--muted))",foreground:"hsl(var(--muted-foreground))"},accent:{DEFAULT:"hsl(var(--tm-accent))",foreground:"hsl(var(--tm-accent-foreground))"},destructive:{DEFAULT:"hsl(var(--destructive))",foreground:"hsl(var(--destructive-foreground))"},border:"hsl(var(--border))",input:"hsl(var(--input))",ring:"hsl(var(--ring))",chart:{1:"hsl(var(--chart-1))",2:"hsl(var(--chart-2))",3:"hsl(var(--chart-3))",4:"hsl(var(--chart-4))",5:"hsl(var(--chart-5))"}},d=new Map;function c(e){d.set(e.metadata.id,e)}function y(e){var a;return(a=d.get(e))==null?void 0:a.metadata}function h(){return Array.from(d.values()).filter(e=>e.enabled!==!1).map(e=>e.metadata)}function x(e){return h().filter(a=>a.category===e)}function i(e){return d.has(e)}async function v(e){const a=d.get(e);if(!a)throw new Error(`Theme "${e}" not found in registry`);if(a.enabled===!1)throw new Error(`Theme "${e}" is disabled`);try{return(await a.loader()).default}catch(r){throw new Error(`Failed to load theme "${e}": ${r instanceof Error?r.message:String(r)}`)}}function p(){c({metadata:{id:"default",name:"Default",description:"Default Tenerife UI theme with standard color palette",category:"default",version:"1.0.0"},loader:async()=>({default:{...(await Promise.resolve().then(()=>require("../default-Ddg7Haf2.cjs"))).defaultTheme,id:"default",name:"Default"}}),enabled:!0}),c({metadata:{id:"dark",name:"Dark",description:"Enhanced dark theme with deeper surfaces and higher contrast",category:"default",version:"1.0.0"},loader:async()=>({default:{...(await Promise.resolve().then(()=>require("../dark-OOhiqt1q.cjs"))).darkTheme,id:"dark",name:"Dark"}}),enabled:!0}),c({metadata:{id:"brand",name:"Brand",description:"Brand-specific theme with custom color palette",category:"brand",version:"1.0.0"},loader:async()=>({default:{...(await Promise.resolve().then(()=>require("../brand-DQb18Frh.cjs"))).brandTheme,id:"brand",name:"Brand"}}),enabled:!0})}p();const w=["id","name"];function u(e){const a=[],r=[];if(!e||typeof e!="object")return{valid:!1,errors:["Theme must be an object"],warnings:[]};const o=e;for(const t of w)(!(t in o)||!o[t])&&a.push(`Missing required field: ${t}`);if(o.id&&typeof o.id=="string"&&(/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(o.id)||a.push(`Invalid theme ID format: "${o.id}". Must be kebab-case (e.g., "ocean-blue")`)),o.name&&typeof o.name!="string"&&a.push("Theme name must be a string"),o.category){const t=["default","brand","seasonal","custom"];t.includes(o.category)||a.push(`Invalid category: "${o.category}". Must be one of: ${t.join(", ")}`)}const s=["primaryColors","accentColors","secondaryColors"];for(const t of s)if(o[t]){const f=o[t],g=["50","100","200","300","400","500","600","700","800","900","950"];for(const m of Object.keys(f))g.includes(m)||r.push(`Invalid color scale key in ${t}: ${m}. Valid keys: ${g.join(", ")}`),typeof f[m]!="string"&&a.push(`Color value in ${t}.${m} must be a string (HSL format)`)}return o.version&&typeof o.version=="string"&&(/^\d+\.\d+\.\d+$/.test(o.version)||r.push(`Invalid version format: "${o.version}". Should be semver (e.g., "1.0.0")`)),{valid:a.length===0,errors:a,warnings:r}}function k(e){return u(e).valid}function E(e,a){return{id:e,name:a,description:`Custom theme: ${a}`,category:"custom",version:"1.0.0"}}const $={fallbackThemeId:"default",validate:!0,throwOnError:!1};async function l(e,a={}){const r={...$,...a},o=[];if(!i(e)){if(r.throwOnError)throw new Error(`Theme "${e}" not found`);if(r.fallbackThemeId&&i(r.fallbackThemeId))return o.push(`Theme "${e}" not found, using fallback "${r.fallbackThemeId}"`),l(r.fallbackThemeId,{...r,throwOnError:!1});throw new Error(`Theme "${e}" not found and no fallback available`)}try{const s=await v(e);if(r.validate){const t=u(s);if(!t.valid){if(r.throwOnError)throw new Error(`Theme "${e}" validation failed: ${t.errors.join(", ")}`);if(r.fallbackThemeId&&i(r.fallbackThemeId))return o.push(`Theme "${e}" validation failed: ${t.errors.join(", ")}. Using fallback "${r.fallbackThemeId}"`),l(r.fallbackThemeId,{...r,throwOnError:!1});throw new Error(`Theme "${e}" validation failed: ${t.errors.join(", ")}`)}o.push(...t.warnings)}return{theme:s,usedFallback:!1,warnings:o}}catch(s){if(r.throwOnError)throw s;if(r.fallbackThemeId&&i(r.fallbackThemeId)&&r.fallbackThemeId!==e)return o.push(`Failed to load theme "${e}": ${s instanceof Error?s.message:String(s)}. Using fallback "${r.fallbackThemeId}"`),l(r.fallbackThemeId,{...r,throwOnError:!1});throw s}}async function F(e){const a=e.map(r=>l(r,{validate:!1,throwOnError:!1}).catch(()=>{}));await Promise.all(a)}function S(){return h().map(e=>e.id)}async function I(e){if(!i(e))return!1;try{return await l(e,{validate:!1,throwOnError:!0}),!0}catch{return!1}}const D={none:"0",xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem","2xl":"2.5rem","3xl":"3rem","4xl":"4rem","5xl":"5rem"},M={none:"0px",sm:"0.125rem",base:"0.25rem",md:"0.375rem",lg:"0.5rem",xl:"0.75rem","2xl":"1rem","3xl":"1.5rem",full:"9999px"},C={none:"none",sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",base:"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",xl:"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)","2xl":"0 25px 50px -12px rgb(0 0 0 / 0.25)",inner:"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"},j={sans:["ui-sans-serif","system-ui","-apple-system","Segoe UI","Roboto","Ubuntu","Cantarell","Noto Sans","Helvetica Neue","Arial","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"].join(", "),serif:["ui-serif","Georgia","Cambria","Times New Roman","Times","serif"].join(", "),mono:["ui-monospace","SFMono-Regular","Menlo","Monaco","Consolas","Liberation Mono","Courier New","monospace"].join(", ")},O={xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.875rem","4xl":"2.25rem","5xl":"3rem","6xl":"3.75rem"},U={thin:"100",extralight:"200",light:"300",normal:"400",medium:"500",semibold:"600",bold:"700",extrabold:"800",black:"900"},A={none:"1",tight:"1.25",snug:"1.375",normal:"1.5",relaxed:"1.625",loose:"2"},L={tighter:"-0.05em",tight:"-0.025em",normal:"0em",wide:"0.025em",wider:"0.05em",widest:"0.1em"};exports.ThemeProvider=n.ThemeProvider;exports.applyDocumentMode=n.applyDocumentMode;exports.applyDocumentTheme=n.applyDocumentTheme;exports.getInitialBrand=n.getInitialBrand;exports.getInitialMode=n.getInitialMode;exports.getInitialTheme=n.getInitialTheme;exports.loadThemeOverride=n.loadThemeOverride;exports.persistBrand=n.persistBrand;exports.persistMode=n.persistMode;exports.persistTheme=n.persistTheme;exports.useTheme=n.useTheme;exports.borderRadius=M;exports.canLoadTheme=I;exports.createMinimalThemeSchema=E;exports.cssVariableColorTokens=b;exports.fontFamilies=j;exports.fontSizes=O;exports.fontWeights=U;exports.getAllThemes=h;exports.getAvailableThemeIds=S;exports.getThemeMetadata=y;exports.getThemesByCategory=x;exports.initializeDefaultThemes=p;exports.isThemeSchema=k;exports.letterSpacings=L;exports.lineHeights=A;exports.loadTheme=v;exports.loadThemeSafe=l;exports.preloadThemes=F;exports.registerTheme=c;exports.shadows=C;exports.spacing=D;exports.tailwindThemeColors=T;exports.themeExists=i;exports.themeRegistry=d;exports.validateThemeSchema=u;
@@ -1,5 +1,8 @@
1
1
  export * from './applyMode';
2
2
  export * from './colors';
3
+ export * from './loader';
4
+ export * from './registry';
5
+ export * from './schema';
3
6
  export * from './spacing';
4
7
  export { ThemeProvider, useTheme } from './ThemeProvider';
5
8
  export * from './typography';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC1D,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC1D,cAAc,cAAc,CAAC"}
@@ -1,9 +1,6 @@
1
1
  "use client";
2
- import { g as x, a as h, p as b, b as y, c as E } from "../applyMode-Bh7sEqT6.js";
3
- import { d as V, l as W } from "../applyMode-Bh7sEqT6.js";
4
- import { jsx as k } from "react/jsx-runtime";
5
- import e from "react";
6
- const L = {
2
+ import { T as B, b as N, a as z, e as P, g as H, c as V, l as _, f as q, p as G, d as K, u as Q } from "../ThemeProvider-ltuW-773.js";
3
+ const y = {
7
4
  day: {
8
5
  background: "hsl(var(--background))",
9
6
  foreground: "hsl(var(--foreground))",
@@ -56,7 +53,7 @@ const L = {
56
53
  chart4: "hsl(280, 65%, 60%)",
57
54
  chart5: "hsl(340, 75%, 55%)"
58
55
  }
59
- }, M = {
56
+ }, T = {
60
57
  background: "hsl(var(--background))",
61
58
  foreground: "hsl(var(--foreground))",
62
59
  card: {
@@ -97,7 +94,196 @@ const L = {
97
94
  4: "hsl(var(--chart-4))",
98
95
  5: "hsl(var(--chart-5))"
99
96
  }
100
- }, j = {
97
+ }, i = /* @__PURE__ */ new Map();
98
+ function c(r) {
99
+ i.set(r.metadata.id, r);
100
+ }
101
+ function x(r) {
102
+ var a;
103
+ return (a = i.get(r)) == null ? void 0 : a.metadata;
104
+ }
105
+ function h() {
106
+ return Array.from(i.values()).filter((r) => r.enabled !== !1).map((r) => r.metadata);
107
+ }
108
+ function w(r) {
109
+ return h().filter((a) => a.category === r);
110
+ }
111
+ function s(r) {
112
+ return i.has(r);
113
+ }
114
+ async function g(r) {
115
+ const a = i.get(r);
116
+ if (!a)
117
+ throw new Error(`Theme "${r}" not found in registry`);
118
+ if (a.enabled === !1)
119
+ throw new Error(`Theme "${r}" is disabled`);
120
+ try {
121
+ return (await a.loader()).default;
122
+ } catch (e) {
123
+ throw new Error(
124
+ `Failed to load theme "${r}": ${e instanceof Error ? e.message : String(e)}`
125
+ );
126
+ }
127
+ }
128
+ function v() {
129
+ c({
130
+ metadata: {
131
+ id: "default",
132
+ name: "Default",
133
+ description: "Default Tenerife UI theme with standard color palette",
134
+ category: "default",
135
+ version: "1.0.0"
136
+ },
137
+ loader: async () => ({ default: { ...(await import("../default-BKgH1D9-.js")).defaultTheme, id: "default", name: "Default" } }),
138
+ enabled: !0
139
+ }), c({
140
+ metadata: {
141
+ id: "dark",
142
+ name: "Dark",
143
+ description: "Enhanced dark theme with deeper surfaces and higher contrast",
144
+ category: "default",
145
+ version: "1.0.0"
146
+ },
147
+ loader: async () => ({ default: { ...(await import("../dark-Cvoy1uFT.js")).darkTheme, id: "dark", name: "Dark" } }),
148
+ enabled: !0
149
+ }), c({
150
+ metadata: {
151
+ id: "brand",
152
+ name: "Brand",
153
+ description: "Brand-specific theme with custom color palette",
154
+ category: "brand",
155
+ version: "1.0.0"
156
+ },
157
+ loader: async () => ({ default: { ...(await import("../brand-C5R2semX.js")).brandTheme, id: "brand", name: "Brand" } }),
158
+ enabled: !0
159
+ });
160
+ }
161
+ v();
162
+ const p = ["id", "name"];
163
+ function f(r) {
164
+ const a = [], e = [];
165
+ if (!r || typeof r != "object")
166
+ return {
167
+ valid: !1,
168
+ errors: ["Theme must be an object"],
169
+ warnings: []
170
+ };
171
+ const o = r;
172
+ for (const t of p)
173
+ (!(t in o) || !o[t]) && a.push(`Missing required field: ${t}`);
174
+ if (o.id && typeof o.id == "string" && (/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(o.id) || a.push(
175
+ `Invalid theme ID format: "${o.id}". Must be kebab-case (e.g., "ocean-blue")`
176
+ )), o.name && typeof o.name != "string" && a.push("Theme name must be a string"), o.category) {
177
+ const t = ["default", "brand", "seasonal", "custom"];
178
+ t.includes(o.category) || a.push(
179
+ `Invalid category: "${o.category}". Must be one of: ${t.join(", ")}`
180
+ );
181
+ }
182
+ const n = ["primaryColors", "accentColors", "secondaryColors"];
183
+ for (const t of n)
184
+ if (o[t]) {
185
+ const m = o[t], u = [
186
+ "50",
187
+ "100",
188
+ "200",
189
+ "300",
190
+ "400",
191
+ "500",
192
+ "600",
193
+ "700",
194
+ "800",
195
+ "900",
196
+ "950"
197
+ ];
198
+ for (const d of Object.keys(m))
199
+ u.includes(d) || e.push(
200
+ `Invalid color scale key in ${t}: ${d}. Valid keys: ${u.join(", ")}`
201
+ ), typeof m[d] != "string" && a.push(`Color value in ${t}.${d} must be a string (HSL format)`);
202
+ }
203
+ return o.version && typeof o.version == "string" && (/^\d+\.\d+\.\d+$/.test(o.version) || e.push(
204
+ `Invalid version format: "${o.version}". Should be semver (e.g., "1.0.0")`
205
+ )), {
206
+ valid: a.length === 0,
207
+ errors: a,
208
+ warnings: e
209
+ };
210
+ }
211
+ function k(r) {
212
+ return f(r).valid;
213
+ }
214
+ function E(r, a) {
215
+ return {
216
+ id: r,
217
+ name: a,
218
+ description: `Custom theme: ${a}`,
219
+ category: "custom",
220
+ version: "1.0.0"
221
+ };
222
+ }
223
+ const b = {
224
+ fallbackThemeId: "default",
225
+ validate: !0,
226
+ throwOnError: !1
227
+ };
228
+ async function l(r, a = {}) {
229
+ const e = { ...b, ...a }, o = [];
230
+ if (!s(r)) {
231
+ if (e.throwOnError)
232
+ throw new Error(`Theme "${r}" not found`);
233
+ if (e.fallbackThemeId && s(e.fallbackThemeId))
234
+ return o.push(`Theme "${r}" not found, using fallback "${e.fallbackThemeId}"`), l(e.fallbackThemeId, { ...e, throwOnError: !1 });
235
+ throw new Error(`Theme "${r}" not found and no fallback available`);
236
+ }
237
+ try {
238
+ const n = await g(r);
239
+ if (e.validate) {
240
+ const t = f(n);
241
+ if (!t.valid) {
242
+ if (e.throwOnError)
243
+ throw new Error(`Theme "${r}" validation failed: ${t.errors.join(", ")}`);
244
+ if (e.fallbackThemeId && s(e.fallbackThemeId))
245
+ return o.push(
246
+ `Theme "${r}" validation failed: ${t.errors.join(", ")}. Using fallback "${e.fallbackThemeId}"`
247
+ ), l(e.fallbackThemeId, { ...e, throwOnError: !1 });
248
+ throw new Error(`Theme "${r}" validation failed: ${t.errors.join(", ")}`);
249
+ }
250
+ o.push(...t.warnings);
251
+ }
252
+ return {
253
+ theme: n,
254
+ usedFallback: !1,
255
+ warnings: o
256
+ };
257
+ } catch (n) {
258
+ if (e.throwOnError)
259
+ throw n;
260
+ if (e.fallbackThemeId && s(e.fallbackThemeId) && e.fallbackThemeId !== r)
261
+ return o.push(
262
+ `Failed to load theme "${r}": ${n instanceof Error ? n.message : String(n)}. Using fallback "${e.fallbackThemeId}"`
263
+ ), l(e.fallbackThemeId, { ...e, throwOnError: !1 });
264
+ throw n;
265
+ }
266
+ }
267
+ async function $(r) {
268
+ const a = r.map(
269
+ (e) => l(e, { validate: !1, throwOnError: !1 }).catch(() => {
270
+ })
271
+ );
272
+ await Promise.all(a);
273
+ }
274
+ function F() {
275
+ return h().map((r) => r.id);
276
+ }
277
+ async function I(r) {
278
+ if (!s(r))
279
+ return !1;
280
+ try {
281
+ return await l(r, { validate: !1, throwOnError: !0 }), !0;
282
+ } catch {
283
+ return !1;
284
+ }
285
+ }
286
+ const D = {
101
287
  none: "0",
102
288
  xs: "0.25rem",
103
289
  // 4px
@@ -117,7 +303,7 @@ const L = {
117
303
  // 64px
118
304
  "5xl": "5rem"
119
305
  // 80px
120
- }, I = {
306
+ }, S = {
121
307
  none: "0px",
122
308
  sm: "0.125rem",
123
309
  // 2px
@@ -134,7 +320,7 @@ const L = {
134
320
  "3xl": "1.5rem",
135
321
  // 24px
136
322
  full: "9999px"
137
- }, N = {
323
+ }, U = {
138
324
  none: "none",
139
325
  sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
140
326
  base: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
@@ -143,75 +329,7 @@ const L = {
143
329
  xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
144
330
  "2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)",
145
331
  inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"
146
- }, F = e.createContext(void 0);
147
- function R({
148
- children: i,
149
- defaultMode: m = "day",
150
- defaultTheme: u = "default",
151
- storageKey: t = "tm_mode",
152
- themeStorageKey: a = "tm_theme",
153
- attribute: T = "data-mode",
154
- enableSystem: l = !0
155
- }) {
156
- const [n, g] = e.useState(() => {
157
- if (typeof window > "u") return m;
158
- const o = document.documentElement.getAttribute(T);
159
- if (o === "day" || o === "night")
160
- return o;
161
- try {
162
- const c = localStorage.getItem(t);
163
- if (c === "day" || c === "night")
164
- return c;
165
- } catch {
166
- }
167
- return l && typeof window < "u" ? window.matchMedia("(prefers-color-scheme: dark)").matches ? "night" : "day" : m;
168
- }), [s, p] = e.useState(() => typeof window > "u" ? u : x(u, a)), d = e.useCallback(
169
- (r) => {
170
- g(r), h(r, s), b(r, t);
171
- },
172
- [s, t]
173
- ), v = e.useCallback(
174
- async (r) => {
175
- p(r), await h(n, r), y(r, a);
176
- },
177
- [n, a]
178
- ), f = e.useCallback(() => {
179
- d(n === "night" ? "day" : "night");
180
- }, [n, d]);
181
- e.useEffect(() => {
182
- const r = E(m, t, l), o = x(u, a);
183
- g(r), p(o), h(r, o), b(r, t), y(o, a);
184
- }, [m, u, t, a, l]), e.useEffect(() => {
185
- if (!l) return;
186
- const r = window.matchMedia("(prefers-color-scheme: dark)"), o = (c) => {
187
- try {
188
- localStorage.getItem(t) || d(c.matches ? "night" : "day");
189
- } catch {
190
- }
191
- };
192
- return r.addEventListener("change", o), () => r.removeEventListener("change", o);
193
- }, [l, t, d]), e.useEffect(() => {
194
- h(n, s);
195
- }, [n, s]);
196
- const w = e.useMemo(
197
- () => ({
198
- mode: n,
199
- theme: s,
200
- setMode: d,
201
- setTheme: v,
202
- toggleMode: f
203
- }),
204
- [n, s, d, v, f]
205
- );
206
- return /* @__PURE__ */ k(F.Provider, { value: w, children: i });
207
- }
208
- function S() {
209
- const i = e.useContext(F);
210
- if (i === void 0)
211
- throw new Error("useTheme must be used within a ThemeProvider");
212
- return i;
213
- }
214
- const _ = {
332
+ }, j = {
215
333
  sans: [
216
334
  "ui-sans-serif",
217
335
  "system-ui",
@@ -239,7 +357,7 @@ const _ = {
239
357
  "Courier New",
240
358
  "monospace"
241
359
  ].join(", ")
242
- }, P = {
360
+ }, C = {
243
361
  xs: "0.75rem",
244
362
  // 12px
245
363
  sm: "0.875rem",
@@ -260,7 +378,7 @@ const _ = {
260
378
  // 48px
261
379
  "6xl": "3.75rem"
262
380
  // 60px
263
- }, H = {
381
+ }, O = {
264
382
  thin: "100",
265
383
  extralight: "200",
266
384
  light: "300",
@@ -270,14 +388,14 @@ const _ = {
270
388
  bold: "700",
271
389
  extrabold: "800",
272
390
  black: "900"
273
- }, z = {
391
+ }, A = {
274
392
  none: "1",
275
393
  tight: "1.25",
276
394
  snug: "1.375",
277
395
  normal: "1.5",
278
396
  relaxed: "1.625",
279
397
  loose: "2"
280
- }, G = {
398
+ }, M = {
281
399
  tighter: "-0.05em",
282
400
  tight: "-0.025em",
283
401
  normal: "0em",
@@ -286,23 +404,40 @@ const _ = {
286
404
  widest: "0.1em"
287
405
  };
288
406
  export {
289
- R as ThemeProvider,
290
- V as applyDocumentMode,
291
- h as applyDocumentTheme,
292
- I as borderRadius,
293
- L as cssVariableColorTokens,
294
- _ as fontFamilies,
295
- P as fontSizes,
296
- H as fontWeights,
297
- E as getInitialMode,
298
- x as getInitialTheme,
299
- G as letterSpacings,
300
- z as lineHeights,
301
- W as loadThemeOverride,
302
- b as persistMode,
303
- y as persistTheme,
304
- N as shadows,
305
- j as spacing,
306
- M as tailwindThemeColors,
307
- S as useTheme
407
+ B as ThemeProvider,
408
+ N as applyDocumentMode,
409
+ z as applyDocumentTheme,
410
+ S as borderRadius,
411
+ I as canLoadTheme,
412
+ E as createMinimalThemeSchema,
413
+ y as cssVariableColorTokens,
414
+ j as fontFamilies,
415
+ C as fontSizes,
416
+ O as fontWeights,
417
+ h as getAllThemes,
418
+ F as getAvailableThemeIds,
419
+ P as getInitialBrand,
420
+ H as getInitialMode,
421
+ V as getInitialTheme,
422
+ x as getThemeMetadata,
423
+ w as getThemesByCategory,
424
+ v as initializeDefaultThemes,
425
+ k as isThemeSchema,
426
+ M as letterSpacings,
427
+ A as lineHeights,
428
+ g as loadTheme,
429
+ _ as loadThemeOverride,
430
+ l as loadThemeSafe,
431
+ q as persistBrand,
432
+ G as persistMode,
433
+ K as persistTheme,
434
+ $ as preloadThemes,
435
+ c as registerTheme,
436
+ U as shadows,
437
+ D as spacing,
438
+ T as tailwindThemeColors,
439
+ s as themeExists,
440
+ i as themeRegistry,
441
+ Q as useTheme,
442
+ f as validateThemeSchema
308
443
  };