@backbay/glia 0.2.0-alpha.7 → 0.2.0-alpha.8

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 (226) hide show
  1. package/dist/audio/index.js +1145 -5
  2. package/dist/audio/index.js.map +1 -1
  3. package/dist/components/index.js +3187 -10
  4. package/dist/components/index.js.map +1 -1
  5. package/dist/core.js +19714 -12
  6. package/dist/core.js.map +1 -1
  7. package/dist/emotion/index.js +1 -1
  8. package/dist/emotion/index.js.map +1 -1
  9. package/dist/hooks/index.js +941 -6
  10. package/dist/hooks/index.js.map +1 -1
  11. package/dist/index.js +31841 -183
  12. package/dist/index.js.map +1 -1
  13. package/dist/primitives/index.js +21111 -57
  14. package/dist/primitives/index.js.map +1 -1
  15. package/dist/protocol/index.js +360 -2
  16. package/dist/protocol/index.js.map +1 -1
  17. package/dist/speakeasy/index.js +2786 -38
  18. package/dist/speakeasy/index.js.map +1 -1
  19. package/dist/styles.css +1 -1
  20. package/dist/theme/index.js +1150 -3
  21. package/dist/theme/index.js.map +1 -1
  22. package/dist/vision/index.js +370 -2
  23. package/dist/vision/index.js.map +1 -1
  24. package/dist/workspace/index.js +16824 -2
  25. package/dist/workspace/index.js.map +1 -1
  26. package/package.json +15 -9
  27. package/dist/AuroraBackground-AP6ZHVFA.js +0 -6
  28. package/dist/AuroraBackground-AP6ZHVFA.js.map +0 -1
  29. package/dist/BentoGrid-CDARICNM.js +0 -6
  30. package/dist/BentoGrid-CDARICNM.js.map +0 -1
  31. package/dist/CommandPalette-JCWJKRBY.js +0 -6
  32. package/dist/CommandPalette-JCWJKRBY.js.map +0 -1
  33. package/dist/Glass-H4X4ZI4P.js +0 -7
  34. package/dist/Glass-H4X4ZI4P.js.map +0 -1
  35. package/dist/GlitchText-KLQ57PPY.js +0 -6
  36. package/dist/GlitchText-KLQ57PPY.js.map +0 -1
  37. package/dist/GlowButton-VGBPMZO7.js +0 -6
  38. package/dist/GlowButton-VGBPMZO7.js.map +0 -1
  39. package/dist/Graph3D-GO7N2EZQ.js +0 -540
  40. package/dist/Graph3D-GO7N2EZQ.js.map +0 -1
  41. package/dist/HUDProgressRing-N6C5NAEV.js +0 -6
  42. package/dist/HUDProgressRing-N6C5NAEV.js.map +0 -1
  43. package/dist/KPIStat-PBQK27ZB.js +0 -6
  44. package/dist/KPIStat-PBQK27ZB.js.map +0 -1
  45. package/dist/NeonToast-W5F7MU3U.js +0 -6
  46. package/dist/NeonToast-W5F7MU3U.js.map +0 -1
  47. package/dist/ParticleField-WK6CNHWU.js +0 -51
  48. package/dist/ParticleField-WK6CNHWU.js.map +0 -1
  49. package/dist/TextGenerateEffect-EUCEIIUJ.js +0 -6
  50. package/dist/TextGenerateEffect-EUCEIIUJ.js.map +0 -1
  51. package/dist/ThreeDCard-VH5I3SSY.js +0 -6
  52. package/dist/ThreeDCard-VH5I3SSY.js.map +0 -1
  53. package/dist/TypingAnimation-GIWOHPIX.js +0 -6
  54. package/dist/TypingAnimation-GIWOHPIX.js.map +0 -1
  55. package/dist/alert-dialog-QOSYBIIE.js +0 -19
  56. package/dist/alert-dialog-QOSYBIIE.js.map +0 -1
  57. package/dist/avatar-N5R37PCU.js +0 -10
  58. package/dist/avatar-N5R37PCU.js.map +0 -1
  59. package/dist/badge-GTVIIGPY.js +0 -8
  60. package/dist/badge-GTVIIGPY.js.map +0 -1
  61. package/dist/button-D7IMSV2D.js +0 -8
  62. package/dist/button-D7IMSV2D.js.map +0 -1
  63. package/dist/chunk-3CMPQOMY.js +0 -69
  64. package/dist/chunk-3CMPQOMY.js.map +0 -1
  65. package/dist/chunk-3OQT6IYR.js +0 -41
  66. package/dist/chunk-3OQT6IYR.js.map +0 -1
  67. package/dist/chunk-43B2WVLS.js +0 -85
  68. package/dist/chunk-43B2WVLS.js.map +0 -1
  69. package/dist/chunk-4SRFO5W3.js +0 -121
  70. package/dist/chunk-4SRFO5W3.js.map +0 -1
  71. package/dist/chunk-5IZELOOU.js +0 -362
  72. package/dist/chunk-5IZELOOU.js.map +0 -1
  73. package/dist/chunk-6DM4ACSS.js +0 -154
  74. package/dist/chunk-6DM4ACSS.js.map +0 -1
  75. package/dist/chunk-6IGT34PC.js +0 -50
  76. package/dist/chunk-6IGT34PC.js.map +0 -1
  77. package/dist/chunk-6RKBCJHN.js +0 -194
  78. package/dist/chunk-6RKBCJHN.js.map +0 -1
  79. package/dist/chunk-6RX2WGCO.js +0 -108
  80. package/dist/chunk-6RX2WGCO.js.map +0 -1
  81. package/dist/chunk-7K4WZM3U.js +0 -189
  82. package/dist/chunk-7K4WZM3U.js.map +0 -1
  83. package/dist/chunk-7MDBHJPT.js +0 -407
  84. package/dist/chunk-7MDBHJPT.js.map +0 -1
  85. package/dist/chunk-7UQD6ROV.js +0 -9
  86. package/dist/chunk-7UQD6ROV.js.map +0 -1
  87. package/dist/chunk-AFNIVLZP.js +0 -1069
  88. package/dist/chunk-AFNIVLZP.js.map +0 -1
  89. package/dist/chunk-ANWYRO6A.js +0 -407
  90. package/dist/chunk-ANWYRO6A.js.map +0 -1
  91. package/dist/chunk-DIXPOHDO.js +0 -71
  92. package/dist/chunk-DIXPOHDO.js.map +0 -1
  93. package/dist/chunk-DWYMKYPI.js +0 -3
  94. package/dist/chunk-DWYMKYPI.js.map +0 -1
  95. package/dist/chunk-E3NVDCZG.js +0 -280
  96. package/dist/chunk-E3NVDCZG.js.map +0 -1
  97. package/dist/chunk-EBM7YBKL.js +0 -399
  98. package/dist/chunk-EBM7YBKL.js.map +0 -1
  99. package/dist/chunk-EPAM7IWW.js +0 -294
  100. package/dist/chunk-EPAM7IWW.js.map +0 -1
  101. package/dist/chunk-EXQ7GYRS.js +0 -134
  102. package/dist/chunk-EXQ7GYRS.js.map +0 -1
  103. package/dist/chunk-F4QTUZ3C.js +0 -136
  104. package/dist/chunk-F4QTUZ3C.js.map +0 -1
  105. package/dist/chunk-FEW533R2.js +0 -105
  106. package/dist/chunk-FEW533R2.js.map +0 -1
  107. package/dist/chunk-FFZLJKC7.js +0 -270
  108. package/dist/chunk-FFZLJKC7.js.map +0 -1
  109. package/dist/chunk-GEAMOBF7.js +0 -8486
  110. package/dist/chunk-GEAMOBF7.js.map +0 -1
  111. package/dist/chunk-GRTRSCTD.js +0 -74
  112. package/dist/chunk-GRTRSCTD.js.map +0 -1
  113. package/dist/chunk-IKGYOGLK.js +0 -16
  114. package/dist/chunk-IKGYOGLK.js.map +0 -1
  115. package/dist/chunk-IQ7WYWVJ.js +0 -73
  116. package/dist/chunk-IQ7WYWVJ.js.map +0 -1
  117. package/dist/chunk-IXIVWQLF.js +0 -543
  118. package/dist/chunk-IXIVWQLF.js.map +0 -1
  119. package/dist/chunk-JCJU57RC.js +0 -115
  120. package/dist/chunk-JCJU57RC.js.map +0 -1
  121. package/dist/chunk-KORSTBU4.js +0 -117
  122. package/dist/chunk-KORSTBU4.js.map +0 -1
  123. package/dist/chunk-KSEZ6UM2.js +0 -235
  124. package/dist/chunk-KSEZ6UM2.js.map +0 -1
  125. package/dist/chunk-MHPF7R3O.js +0 -1376
  126. package/dist/chunk-MHPF7R3O.js.map +0 -1
  127. package/dist/chunk-MPC5IH7E.js +0 -81
  128. package/dist/chunk-MPC5IH7E.js.map +0 -1
  129. package/dist/chunk-MQIU2NYA.js +0 -114
  130. package/dist/chunk-MQIU2NYA.js.map +0 -1
  131. package/dist/chunk-NYMBJOGR.js +0 -2192
  132. package/dist/chunk-NYMBJOGR.js.map +0 -1
  133. package/dist/chunk-OBZD2M3C.js +0 -169
  134. package/dist/chunk-OBZD2M3C.js.map +0 -1
  135. package/dist/chunk-ODM2AG6G.js +0 -176
  136. package/dist/chunk-ODM2AG6G.js.map +0 -1
  137. package/dist/chunk-ONDKF5LP.js +0 -53
  138. package/dist/chunk-ONDKF5LP.js.map +0 -1
  139. package/dist/chunk-P25YCWQB.js +0 -41
  140. package/dist/chunk-P25YCWQB.js.map +0 -1
  141. package/dist/chunk-PFYVNM6H.js +0 -14
  142. package/dist/chunk-PFYVNM6H.js.map +0 -1
  143. package/dist/chunk-PWNNSGFL.js +0 -20
  144. package/dist/chunk-PWNNSGFL.js.map +0 -1
  145. package/dist/chunk-Q2PGZVOT.js +0 -36
  146. package/dist/chunk-Q2PGZVOT.js.map +0 -1
  147. package/dist/chunk-Q2XDMV7U.js +0 -76
  148. package/dist/chunk-Q2XDMV7U.js.map +0 -1
  149. package/dist/chunk-QG7FH2FI.js +0 -45
  150. package/dist/chunk-QG7FH2FI.js.map +0 -1
  151. package/dist/chunk-R7HUOK2D.js +0 -1914
  152. package/dist/chunk-R7HUOK2D.js.map +0 -1
  153. package/dist/chunk-REUYY7G5.js +0 -773
  154. package/dist/chunk-REUYY7G5.js.map +0 -1
  155. package/dist/chunk-RHC2Z2HT.js +0 -199
  156. package/dist/chunk-RHC2Z2HT.js.map +0 -1
  157. package/dist/chunk-RMCVLIFE.js +0 -23
  158. package/dist/chunk-RMCVLIFE.js.map +0 -1
  159. package/dist/chunk-ROZLTXGR.js +0 -234
  160. package/dist/chunk-ROZLTXGR.js.map +0 -1
  161. package/dist/chunk-RSS2C2O3.js +0 -17
  162. package/dist/chunk-RSS2C2O3.js.map +0 -1
  163. package/dist/chunk-SAGCG5SH.js +0 -355
  164. package/dist/chunk-SAGCG5SH.js.map +0 -1
  165. package/dist/chunk-TM6AOUSD.js +0 -40
  166. package/dist/chunk-TM6AOUSD.js.map +0 -1
  167. package/dist/chunk-TPK4BYCO.js +0 -970
  168. package/dist/chunk-TPK4BYCO.js.map +0 -1
  169. package/dist/chunk-UNQIL4K2.js +0 -34
  170. package/dist/chunk-UNQIL4K2.js.map +0 -1
  171. package/dist/chunk-UUG6L75Y.js +0 -47
  172. package/dist/chunk-UUG6L75Y.js.map +0 -1
  173. package/dist/chunk-V2SYMV4W.js +0 -114
  174. package/dist/chunk-V2SYMV4W.js.map +0 -1
  175. package/dist/chunk-V7EN5CTH.js +0 -130
  176. package/dist/chunk-V7EN5CTH.js.map +0 -1
  177. package/dist/chunk-VITKG2HL.js +0 -1125
  178. package/dist/chunk-VITKG2HL.js.map +0 -1
  179. package/dist/chunk-VYEWU5LO.js +0 -2631
  180. package/dist/chunk-VYEWU5LO.js.map +0 -1
  181. package/dist/chunk-W67QAGSH.js +0 -178
  182. package/dist/chunk-W67QAGSH.js.map +0 -1
  183. package/dist/chunk-WWBIN6KV.js +0 -1353
  184. package/dist/chunk-WWBIN6KV.js.map +0 -1
  185. package/dist/chunk-X77Z4PFB.js +0 -224
  186. package/dist/chunk-X77Z4PFB.js.map +0 -1
  187. package/dist/chunk-X7VG7OTT.js +0 -8
  188. package/dist/chunk-X7VG7OTT.js.map +0 -1
  189. package/dist/chunk-XE4K2SGI.js +0 -74
  190. package/dist/chunk-XE4K2SGI.js.map +0 -1
  191. package/dist/chunk-YIUG7IJK.js +0 -628
  192. package/dist/chunk-YIUG7IJK.js.map +0 -1
  193. package/dist/chunk-YNVN3V4Y.js +0 -13
  194. package/dist/chunk-YNVN3V4Y.js.map +0 -1
  195. package/dist/chunk-Z2S54IZX.js +0 -198
  196. package/dist/chunk-Z2S54IZX.js.map +0 -1
  197. package/dist/chunk-ZR6AH25Z.js +0 -17
  198. package/dist/chunk-ZR6AH25Z.js.map +0 -1
  199. package/dist/dialog-SPM3DTTI.js +0 -17
  200. package/dist/dialog-SPM3DTTI.js.map +0 -1
  201. package/dist/dropdown-menu-HMTWKWGK.js +0 -21
  202. package/dist/dropdown-menu-HMTWKWGK.js.map +0 -1
  203. package/dist/input-BH4P4S26.js +0 -6
  204. package/dist/input-BH4P4S26.js.map +0 -1
  205. package/dist/label-5Z4Q6VER.js +0 -8
  206. package/dist/label-5Z4Q6VER.js.map +0 -1
  207. package/dist/popover-IFOUXYLI.js +0 -18
  208. package/dist/popover-IFOUXYLI.js.map +0 -1
  209. package/dist/scroll-area-DJXNW6QX.js +0 -14
  210. package/dist/scroll-area-DJXNW6QX.js.map +0 -1
  211. package/dist/select-FZ277C3G.js +0 -22
  212. package/dist/select-FZ277C3G.js.map +0 -1
  213. package/dist/separator-BTMLN4NB.js +0 -8
  214. package/dist/separator-BTMLN4NB.js.map +0 -1
  215. package/dist/skeleton-DXIWBH4W.js +0 -6
  216. package/dist/skeleton-DXIWBH4W.js.map +0 -1
  217. package/dist/switch-4MCXIZBY.js +0 -13
  218. package/dist/switch-4MCXIZBY.js.map +0 -1
  219. package/dist/tabs-O7AW3APK.js +0 -17
  220. package/dist/tabs-O7AW3APK.js.map +0 -1
  221. package/dist/textarea-IB5WAFDO.js +0 -6
  222. package/dist/textarea-IB5WAFDO.js.map +0 -1
  223. package/dist/toggle-XVPPG6P4.js +0 -10
  224. package/dist/toggle-XVPPG6P4.js.map +0 -1
  225. package/dist/tooltip-JICZTD4F.js +0 -18
  226. package/dist/tooltip-JICZTD4F.js.map +0 -1
@@ -1,5 +1,1152 @@
1
- export { DEFAULT_THEME_ID, GLASS_MATERIALS, GliaThemeProvider, THEMES, UiThemeProvider, applyGliaCssVariables, applyThemeCssVariables, buildBackdropFilter, buildGliaCssVariables, desktopThemeFromUiTheme, getGlassMaterial, getReducedTransparencyStyles, getTheme, getThemeIds, nebulaTheme, removeThemeCssVariables, solarpunkTheme, themeToCssVariables, useAmbientTokens, useColorTokens, useControlTokens, useElevationTokens, useFontTokens, useGlassTokens, useGliaTheme, useIsNebula, useIsSolarpunk, useMotionTokens, useRadiiTokens, useSpacingTokens, useThemeTokens, useUiTheme } from '../chunk-VITKG2HL.js';
2
- import '../chunk-3CMPQOMY.js';
3
- import '../chunk-TM6AOUSD.js';
1
+ import * as React from 'react';
2
+ import { useSyncExternalStore } from 'react';
3
+ import { MotionConfig } from 'framer-motion';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ // src/theme/nebula.ts
7
+ var nebulaTheme = {
8
+ id: "nebula",
9
+ name: "Nebula",
10
+ description: "Clinical cyberpunk HUD with neon accents and starfield ambience",
11
+ color: {
12
+ bg: {
13
+ body: "#02040a",
14
+ panel: "rgba(4, 8, 16, 0.94)",
15
+ elevated: "rgba(12, 17, 23, 0.98)",
16
+ horizon: "#050609"
17
+ },
18
+ text: {
19
+ primary: "#E5E7EB",
20
+ muted: "#94A3B8",
21
+ soft: "#64748B"
22
+ },
23
+ accent: {
24
+ primary: "#22D3EE",
25
+ // cyan-neon
26
+ secondary: "#F43F5E",
27
+ // magenta-neon
28
+ positive: "#10B981",
29
+ // emerald-neon
30
+ warning: "#EAB308",
31
+ // yellow-warning
32
+ destructive: "#F43F5E"
33
+ },
34
+ border: "rgba(34, 211, 238, 0.12)",
35
+ ring: "#22D3EE"
36
+ },
37
+ glass: {
38
+ panelBg: "rgba(4, 8, 16, 0.94)",
39
+ panelBorder: "rgba(34, 211, 238, 0.12)",
40
+ panelBlur: "24px",
41
+ headerGradient: "linear-gradient(to right, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0.015), transparent)",
42
+ cardBg: "rgba(255, 255, 255, 0.015)",
43
+ cardBorder: "rgba(255, 255, 255, 0.04)",
44
+ hoverBg: "rgba(34, 211, 238, 0.08)",
45
+ activeBorder: "rgba(34, 211, 238, 0.35)",
46
+ activeShadow: "0 6px 28px rgba(34, 211, 238, 0.1)"
47
+ },
48
+ elevation: {
49
+ softDrop: "0 2px 8px rgba(0, 0, 0, 0.15)",
50
+ hudPanel: "0 8px 32px rgba(2, 4, 8, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.02)",
51
+ hudRail: "0 -6px 32px rgba(2, 4, 8, 0.6), inset 0 1px 0 rgba(255, 255, 255, 0.02)",
52
+ modal: "0 16px 48px rgba(0, 0, 0, 0.5), 0 8px 24px rgba(34, 211, 238, 0.08)",
53
+ glow: "0 0 16px 1px rgba(34, 211, 238, 0.4)"
54
+ },
55
+ motion: {
56
+ fast: { duration: 0.15, ease: "easeOut" },
57
+ normal: { duration: 0.2, ease: "easeOut" },
58
+ spring: { type: "spring", damping: 25, stiffness: 280 },
59
+ ambientDrift: { duration: 8, ease: "linear" },
60
+ ripple: { duration: 2, ease: "easeInOut" }
61
+ },
62
+ ambient: {
63
+ type: "nebula-stars",
64
+ particleColors: ["#22D3EE", "#F43F5E", "#8B5CF6", "#10B981"],
65
+ particleDensity: 0.6,
66
+ particleSpeed: 0.3,
67
+ particleSizeRange: [1, 3],
68
+ horizonGradient: `
69
+ radial-gradient(ellipse at top left, rgba(34, 211, 238, 0.08), transparent 50%),
70
+ radial-gradient(ellipse at bottom right, rgba(139, 92, 246, 0.06), transparent 50%),
71
+ radial-gradient(circle at 30% 70%, rgba(244, 63, 94, 0.04), transparent 40%)
72
+ `,
73
+ rippleColorPrimary: "rgba(34, 211, 238, 0.04)",
74
+ rippleColorSecondary: "rgba(217, 70, 239, 0.025)",
75
+ glowIntensity: 0.8
76
+ },
77
+ controls: {
78
+ switch: {
79
+ track: {
80
+ bg: {
81
+ on: "rgba(34, 211, 238, 0.2)",
82
+ off: "rgba(255, 255, 255, 0.08)"
83
+ },
84
+ border: {
85
+ on: "rgba(34, 211, 238, 0.4)",
86
+ off: "rgba(255, 255, 255, 0.15)"
87
+ }
88
+ },
89
+ thumb: {
90
+ bg: {
91
+ on: "#22D3EE",
92
+ off: "#64748B"
93
+ },
94
+ shadow: {
95
+ on: "0 0 8px rgba(34, 211, 238, 0.5)",
96
+ off: "0 1px 2px rgba(0, 0, 0, 0.2)"
97
+ }
98
+ }
99
+ },
100
+ slider: {
101
+ track: {
102
+ bg: "rgba(255, 255, 255, 0.08)",
103
+ border: "rgba(255, 255, 255, 0.15)"
104
+ },
105
+ thumb: {
106
+ bg: "#22D3EE",
107
+ shadow: "0 0 8px rgba(34, 211, 238, 0.5)"
108
+ },
109
+ fill: "rgba(34, 211, 238, 0.6)"
110
+ },
111
+ buttonGlow: {
112
+ hoverBg: "rgba(34, 211, 238, 0.08)",
113
+ hoverText: "#22D3EE",
114
+ hoverShadow: "0 0 10px rgba(34, 211, 238, 0.1)"
115
+ }
116
+ },
117
+ fonts: {
118
+ display: "'Inter', sans-serif",
119
+ body: "'Inter', sans-serif",
120
+ mono: "'JetBrains Mono', monospace"
121
+ },
122
+ radii: {
123
+ sm: "6px",
124
+ md: "8px",
125
+ lg: "8px"
126
+ },
127
+ spacing: {
128
+ taskbarHeight: "48px",
129
+ titlebarHeight: "36px",
130
+ windowPadding: "12px",
131
+ iconSize: "64px",
132
+ iconGap: "16px",
133
+ windowBorderWidth: "1px"
134
+ }
135
+ };
136
+
137
+ // src/theme/solarpunk.ts
138
+ var solarpunkTheme = {
139
+ id: "solarpunk",
140
+ name: "Solarpunk Observatory",
141
+ description: "Botanical space station with sunlit warmth and organic calm",
142
+ color: {
143
+ bg: {
144
+ body: "#0a0f14",
145
+ // Slightly warmer than nebula
146
+ panel: "rgba(16, 24, 32, 0.92)",
147
+ elevated: "rgba(24, 32, 40, 0.96)",
148
+ horizon: "#0d1318"
149
+ },
150
+ text: {
151
+ primary: "#F0EDE8",
152
+ // Warm white
153
+ muted: "#A8B4A8",
154
+ // Sage-tinged gray
155
+ soft: "#6B7B6B"
156
+ // Muted sage
157
+ },
158
+ accent: {
159
+ primary: "#F5A623",
160
+ // Warm gold (sun)
161
+ secondary: "#4ADE80",
162
+ // Leaf green
163
+ positive: "#4ADE80",
164
+ // Same leaf green
165
+ warning: "#FB923C",
166
+ // Warm orange
167
+ destructive: "#EF4444"
168
+ // Softer red
169
+ },
170
+ border: "rgba(74, 222, 128, 0.15)",
171
+ ring: "#4ADE80"
172
+ },
173
+ glass: {
174
+ panelBg: "rgba(16, 24, 20, 0.88)",
175
+ // Jade-tinted
176
+ panelBorder: "rgba(74, 222, 128, 0.12)",
177
+ panelBlur: "20px",
178
+ // Slightly less blur for organic feel
179
+ headerGradient: "linear-gradient(to right, rgba(245, 166, 35, 0.06), rgba(74, 222, 128, 0.04), transparent)",
180
+ cardBg: "rgba(245, 166, 35, 0.02)",
181
+ cardBorder: "rgba(74, 222, 128, 0.08)",
182
+ hoverBg: "rgba(245, 166, 35, 0.06)",
183
+ activeBorder: "rgba(245, 166, 35, 0.35)",
184
+ activeShadow: "0 6px 24px rgba(245, 166, 35, 0.1)"
185
+ },
186
+ elevation: {
187
+ softDrop: "0 4px 12px rgba(0, 0, 0, 0.12)",
188
+ hudPanel: "0 8px 32px rgba(10, 15, 20, 0.5), inset 0 1px 0 rgba(245, 166, 35, 0.02)",
189
+ hudRail: "0 -6px 28px rgba(10, 15, 20, 0.5), inset 0 1px 0 rgba(74, 222, 128, 0.03)",
190
+ modal: "0 16px 48px rgba(0, 0, 0, 0.4), 0 4px 16px rgba(245, 166, 35, 0.06)",
191
+ glow: "0 0 20px 2px rgba(245, 166, 35, 0.25)"
192
+ },
193
+ motion: {
194
+ fast: { duration: 0.18, ease: "easeOut" },
195
+ normal: { duration: 0.25, ease: [0.4, 0, 0.2, 1] },
196
+ // Slightly smoother
197
+ spring: { type: "spring", damping: 28, stiffness: 240 },
198
+ // More relaxed
199
+ ambientDrift: { duration: 12, ease: "linear" },
200
+ // Slower drift
201
+ ripple: { duration: 2.5, ease: "easeInOut" }
202
+ },
203
+ ambient: {
204
+ type: "dust-motes",
205
+ particleColors: [
206
+ "rgba(245, 166, 35, 0.6)",
207
+ // Gold
208
+ "rgba(255, 248, 220, 0.5)",
209
+ // Warm cream
210
+ "rgba(74, 222, 128, 0.3)",
211
+ // Faint green
212
+ "rgba(255, 255, 255, 0.4)"
213
+ // White
214
+ ],
215
+ particleDensity: 0.35,
216
+ // Sparser than stars
217
+ particleSpeed: 0.15,
218
+ // Slower, lazier drift
219
+ particleSizeRange: [2, 6],
220
+ // Larger motes
221
+ horizonGradient: `
222
+ radial-gradient(ellipse at top, rgba(245, 166, 35, 0.06), transparent 60%),
223
+ radial-gradient(ellipse at bottom left, rgba(74, 222, 128, 0.05), transparent 50%),
224
+ linear-gradient(to bottom, rgba(16, 24, 20, 0.3), transparent 70%)
225
+ `,
226
+ rippleColorPrimary: "rgba(245, 166, 35, 0.035)",
227
+ rippleColorSecondary: "rgba(74, 222, 128, 0.025)",
228
+ glowIntensity: 0.5
229
+ // Softer glow
230
+ },
231
+ controls: {
232
+ switch: {
233
+ track: {
234
+ bg: {
235
+ on: "rgba(74, 222, 128, 0.2)",
236
+ off: "rgba(245, 230, 210, 0.1)"
237
+ // Warm cream off state
238
+ },
239
+ border: {
240
+ on: "rgba(74, 222, 128, 0.4)",
241
+ off: "rgba(245, 230, 210, 0.2)"
242
+ }
243
+ },
244
+ thumb: {
245
+ bg: {
246
+ on: "#F5A623",
247
+ // Gold sun disk
248
+ off: "#8B9B8B"
249
+ // Sage gray
250
+ },
251
+ shadow: {
252
+ on: "0 0 10px rgba(245, 166, 35, 0.5), inset 0 -1px 2px rgba(0,0,0,0.1)",
253
+ off: "0 1px 3px rgba(0, 0, 0, 0.15)"
254
+ }
255
+ }
256
+ },
257
+ slider: {
258
+ track: {
259
+ bg: "rgba(245, 230, 210, 0.1)",
260
+ border: "rgba(74, 222, 128, 0.15)"
261
+ },
262
+ thumb: {
263
+ bg: "linear-gradient(135deg, #F5A623, #D4860F)",
264
+ // Brass/wood knob
265
+ shadow: "0 2px 6px rgba(0, 0, 0, 0.2), 0 0 8px rgba(245, 166, 35, 0.3)"
266
+ },
267
+ fill: "rgba(74, 222, 128, 0.5)"
268
+ },
269
+ buttonGlow: {
270
+ hoverBg: "rgba(245, 166, 35, 0.08)",
271
+ hoverText: "#F5A623",
272
+ hoverShadow: "0 0 12px rgba(245, 166, 35, 0.12)"
273
+ }
274
+ },
275
+ fonts: {
276
+ display: "'Inter', sans-serif",
277
+ body: "'Inter', sans-serif",
278
+ mono: "'JetBrains Mono', monospace"
279
+ },
280
+ radii: {
281
+ sm: "6px",
282
+ md: "8px",
283
+ lg: "8px"
284
+ },
285
+ spacing: {
286
+ taskbarHeight: "48px",
287
+ titlebarHeight: "36px",
288
+ windowPadding: "12px",
289
+ iconSize: "64px",
290
+ iconGap: "16px",
291
+ windowBorderWidth: "1px"
292
+ }
293
+ };
294
+
295
+ // src/theme/registry.ts
296
+ var THEMES = {
297
+ nebula: nebulaTheme,
298
+ solarpunk: solarpunkTheme
299
+ };
300
+ var DEFAULT_THEME_ID = "nebula";
301
+ function getTheme(id) {
302
+ return THEMES[id] ?? THEMES[DEFAULT_THEME_ID];
303
+ }
304
+ function getThemeIds() {
305
+ return Object.keys(THEMES);
306
+ }
307
+ function clampByte(value) {
308
+ if (Number.isNaN(value)) return 0;
309
+ return Math.min(255, Math.max(0, value));
310
+ }
311
+ function parseHexColor(hex) {
312
+ const value = hex.trim();
313
+ if (!value.startsWith("#")) return null;
314
+ const raw = value.slice(1);
315
+ if (raw.length === 3) {
316
+ const r = Number.parseInt(raw[0] + raw[0], 16);
317
+ const g = Number.parseInt(raw[1] + raw[1], 16);
318
+ const b = Number.parseInt(raw[2] + raw[2], 16);
319
+ if ([r, g, b].some((n) => Number.isNaN(n))) return null;
320
+ return { r, g, b };
321
+ }
322
+ if (raw.length === 6) {
323
+ const r = Number.parseInt(raw.slice(0, 2), 16);
324
+ const g = Number.parseInt(raw.slice(2, 4), 16);
325
+ const b = Number.parseInt(raw.slice(4, 6), 16);
326
+ if ([r, g, b].some((n) => Number.isNaN(n))) return null;
327
+ return { r, g, b };
328
+ }
329
+ return null;
330
+ }
331
+ function parseRgbFunction(color) {
332
+ const match = color.trim().match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)(?:\s*,\s*[\d.]+)?\s*\)$/i);
333
+ if (!match) return null;
334
+ const r = clampByte(Number.parseFloat(match[1]));
335
+ const g = clampByte(Number.parseFloat(match[2]));
336
+ const b = clampByte(Number.parseFloat(match[3]));
337
+ return { r, g, b };
338
+ }
339
+ function parseColorToRgb(color) {
340
+ return parseHexColor(color) ?? parseRgbFunction(color);
341
+ }
342
+ function rgbToHslComponents(rgb) {
343
+ const r = rgb.r / 255;
344
+ const g = rgb.g / 255;
345
+ const b = rgb.b / 255;
346
+ const max = Math.max(r, g, b);
347
+ const min = Math.min(r, g, b);
348
+ const delta = max - min;
349
+ let h = 0;
350
+ let s = 0;
351
+ const l = (max + min) / 2;
352
+ if (delta !== 0) {
353
+ s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
354
+ switch (max) {
355
+ case r:
356
+ h = (g - b) / delta + (g < b ? 6 : 0);
357
+ break;
358
+ case g:
359
+ h = (b - r) / delta + 2;
360
+ break;
361
+ default:
362
+ h = (r - g) / delta + 4;
363
+ break;
364
+ }
365
+ h /= 6;
366
+ }
367
+ const hDeg = Math.round(h * 360);
368
+ const sPct = Math.round(s * 100);
369
+ const lPct = Math.round(l * 100);
370
+ return `${hDeg} ${sPct}% ${lPct}%`;
371
+ }
372
+ function colorToHslComponents(color) {
373
+ const rgb = parseColorToRgb(color);
374
+ if (!rgb) return null;
375
+ return rgbToHslComponents(rgb);
376
+ }
377
+ function themeToCssVariables(theme) {
378
+ return {
379
+ // Colors
380
+ "--theme-bg-body": theme.color.bg.body,
381
+ "--theme-bg-panel": theme.color.bg.panel,
382
+ "--theme-bg-elevated": theme.color.bg.elevated,
383
+ "--theme-bg-horizon": theme.color.bg.horizon,
384
+ "--theme-text-primary": theme.color.text.primary,
385
+ "--theme-text-muted": theme.color.text.muted,
386
+ "--theme-text-soft": theme.color.text.soft,
387
+ "--theme-accent-primary": theme.color.accent.primary,
388
+ "--theme-accent-secondary": theme.color.accent.secondary,
389
+ "--theme-accent-positive": theme.color.accent.positive,
390
+ "--theme-accent-warning": theme.color.accent.warning,
391
+ "--theme-accent-destructive": theme.color.accent.destructive,
392
+ "--theme-border": theme.color.border,
393
+ "--theme-ring": theme.color.ring,
394
+ // Glass
395
+ "--theme-glass-panel-bg": theme.glass.panelBg,
396
+ "--theme-glass-panel-border": theme.glass.panelBorder,
397
+ "--theme-glass-panel-blur": theme.glass.panelBlur,
398
+ "--theme-glass-header-gradient": theme.glass.headerGradient,
399
+ "--theme-glass-card-bg": theme.glass.cardBg,
400
+ "--theme-glass-card-border": theme.glass.cardBorder,
401
+ "--theme-glass-hover-bg": theme.glass.hoverBg,
402
+ "--theme-glass-active-border": theme.glass.activeBorder,
403
+ "--theme-glass-active-shadow": theme.glass.activeShadow,
404
+ // Elevation
405
+ "--theme-shadow-soft": theme.elevation.softDrop,
406
+ "--theme-shadow-hud-panel": theme.elevation.hudPanel,
407
+ "--theme-shadow-hud-rail": theme.elevation.hudRail,
408
+ "--theme-shadow-modal": theme.elevation.modal,
409
+ "--theme-shadow-glow": theme.elevation.glow,
410
+ // Ambient
411
+ "--theme-ambient-horizon": theme.ambient.horizonGradient,
412
+ "--theme-ambient-ripple-primary": theme.ambient.rippleColorPrimary,
413
+ "--theme-ambient-ripple-secondary": theme.ambient.rippleColorSecondary,
414
+ "--theme-ambient-glow-intensity": String(theme.ambient.glowIntensity),
415
+ // Controls
416
+ "--theme-switch-track-on": theme.controls.switch.track.bg.on,
417
+ "--theme-switch-track-off": theme.controls.switch.track.bg.off,
418
+ "--theme-switch-thumb-on": theme.controls.switch.thumb.bg.on,
419
+ "--theme-switch-thumb-off": theme.controls.switch.thumb.bg.off,
420
+ "--theme-button-glow-hover-bg": theme.controls.buttonGlow.hoverBg,
421
+ "--theme-button-glow-hover-text": theme.controls.buttonGlow.hoverText,
422
+ "--theme-button-glow-hover-shadow": theme.controls.buttonGlow.hoverShadow
423
+ };
424
+ }
425
+ var TAILWIND_CSS_VARIABLE_KEYS = [
426
+ "--cyan-neon",
427
+ "--magenta-neon",
428
+ "--emerald-neon",
429
+ "--violet-neon",
430
+ "--yellow-warning",
431
+ "--background",
432
+ "--foreground",
433
+ "--card",
434
+ "--card-foreground",
435
+ "--popover",
436
+ "--popover-foreground",
437
+ "--primary",
438
+ "--primary-foreground",
439
+ "--secondary",
440
+ "--secondary-foreground",
441
+ "--muted",
442
+ "--muted-foreground",
443
+ "--accent",
444
+ "--accent-foreground",
445
+ "--destructive",
446
+ "--destructive-foreground",
447
+ "--border",
448
+ "--input",
449
+ "--ring"
450
+ ];
451
+ function themeToTailwindCssVariables(theme) {
452
+ const bg = colorToHslComponents(theme.color.bg.body);
453
+ const fg = colorToHslComponents(theme.color.text.primary);
454
+ const panel = colorToHslComponents(theme.color.bg.panel);
455
+ const elevated = colorToHslComponents(theme.color.bg.elevated);
456
+ const primary = colorToHslComponents(theme.color.accent.primary);
457
+ const secondary = colorToHslComponents(theme.color.accent.secondary);
458
+ const positive = colorToHslComponents(theme.color.accent.positive);
459
+ const warning = colorToHslComponents(theme.color.accent.warning);
460
+ const destructive = colorToHslComponents(theme.color.accent.destructive);
461
+ const border = colorToHslComponents(theme.color.border);
462
+ const ring = colorToHslComponents(theme.color.ring);
463
+ const mutedFg = colorToHslComponents(theme.color.text.muted);
464
+ const violetFallback = theme.id === "nebula" ? colorToHslComponents("#8B5CF6") : colorToHslComponents(theme.color.accent.secondary);
465
+ return {
466
+ "--cyan-neon": primary ?? void 0,
467
+ "--magenta-neon": secondary ?? void 0,
468
+ "--emerald-neon": positive ?? void 0,
469
+ "--violet-neon": violetFallback ?? void 0,
470
+ "--yellow-warning": warning ?? void 0,
471
+ "--background": bg ?? void 0,
472
+ "--foreground": fg ?? void 0,
473
+ "--card": panel ?? void 0,
474
+ "--card-foreground": fg ?? void 0,
475
+ "--popover": elevated ?? void 0,
476
+ "--popover-foreground": fg ?? void 0,
477
+ "--primary": primary ?? void 0,
478
+ "--primary-foreground": bg ?? void 0,
479
+ "--secondary": secondary ?? void 0,
480
+ "--secondary-foreground": fg ?? void 0,
481
+ "--muted": elevated ?? void 0,
482
+ "--muted-foreground": mutedFg ?? void 0,
483
+ "--accent": panel ?? void 0,
484
+ "--accent-foreground": primary ?? void 0,
485
+ "--destructive": destructive ?? void 0,
486
+ "--destructive-foreground": fg ?? void 0,
487
+ "--border": border ?? void 0,
488
+ "--input": elevated ?? void 0,
489
+ "--ring": ring ?? void 0
490
+ };
491
+ }
492
+ function applyThemeCssVariables(theme, target = document.documentElement) {
493
+ const variables = themeToCssVariables(theme);
494
+ const tailwindVariables = themeToTailwindCssVariables(theme);
495
+ for (const [key, value] of Object.entries(variables)) {
496
+ target.style.setProperty(key, value);
497
+ }
498
+ for (const [key, value] of Object.entries(tailwindVariables)) {
499
+ if (!value) continue;
500
+ target.style.setProperty(key, value);
501
+ }
502
+ target.dataset.uiTheme = theme.id;
503
+ }
504
+ function removeThemeCssVariables(target = document.documentElement) {
505
+ const variables = themeToCssVariables(THEMES.nebula);
506
+ for (const key of Object.keys(variables)) {
507
+ target.style.removeProperty(key);
508
+ }
509
+ for (const key of TAILWIND_CSS_VARIABLE_KEYS) {
510
+ target.style.removeProperty(key);
511
+ }
512
+ delete target.dataset.uiTheme;
513
+ }
514
+ function createMediaQueryStore(query) {
515
+ function subscribe(callback) {
516
+ if (typeof window === "undefined") return () => {
517
+ };
518
+ const mql = window.matchMedia(query);
519
+ mql.addEventListener("change", callback);
520
+ return () => mql.removeEventListener("change", callback);
521
+ }
522
+ function getSnapshot() {
523
+ if (typeof window === "undefined") return false;
524
+ return window.matchMedia(query).matches;
525
+ }
526
+ function getServerSnapshot() {
527
+ return false;
528
+ }
529
+ return { subscribe, getSnapshot, getServerSnapshot };
530
+ }
531
+ var reducedMotionStore = createMediaQueryStore(
532
+ "(prefers-reduced-motion: reduce)"
533
+ );
534
+ function usePrefersReducedMotion() {
535
+ return useSyncExternalStore(
536
+ reducedMotionStore.subscribe,
537
+ reducedMotionStore.getSnapshot,
538
+ reducedMotionStore.getServerSnapshot
539
+ );
540
+ }
541
+ var UiThemeContext = React.createContext(null);
542
+ var STORAGE_KEY = "oos-ui-theme";
543
+ function UiThemeProvider({
544
+ children,
545
+ defaultThemeId = DEFAULT_THEME_ID,
546
+ themeId: controlledThemeId,
547
+ onThemeChange,
548
+ storageKey = STORAGE_KEY,
549
+ disableCssVariables = false
550
+ }) {
551
+ const deprecationWarned = React.useRef(false);
552
+ if (!deprecationWarned.current) {
553
+ deprecationWarned.current = true;
554
+ console.warn("[Glia] UiThemeProvider is deprecated. Use GliaThemeProvider instead.");
555
+ }
556
+ const [isHydrating, setIsHydrating] = React.useState(true);
557
+ const [internalThemeId, setInternalThemeId] = React.useState(defaultThemeId);
558
+ const activeThemeId = controlledThemeId ?? internalThemeId;
559
+ const theme = getTheme(activeThemeId);
560
+ React.useEffect(() => {
561
+ if (controlledThemeId !== void 0) {
562
+ setIsHydrating(false);
563
+ return;
564
+ }
565
+ try {
566
+ const stored = localStorage.getItem(storageKey);
567
+ if (stored && (stored === "nebula" || stored === "solarpunk")) {
568
+ setInternalThemeId(stored);
569
+ }
570
+ } catch {
571
+ }
572
+ setIsHydrating(false);
573
+ }, [controlledThemeId, storageKey]);
574
+ React.useEffect(() => {
575
+ if (disableCssVariables || isHydrating) return;
576
+ applyThemeCssVariables(theme);
577
+ return () => {
578
+ };
579
+ }, [theme, disableCssVariables, isHydrating]);
580
+ const setThemeId = React.useCallback(
581
+ (id) => {
582
+ if (controlledThemeId === void 0) {
583
+ setInternalThemeId(id);
584
+ try {
585
+ localStorage.setItem(storageKey, id);
586
+ } catch {
587
+ }
588
+ }
589
+ onThemeChange?.(id);
590
+ },
591
+ [controlledThemeId, onThemeChange, storageKey]
592
+ );
593
+ const contextValue = React.useMemo(
594
+ () => ({
595
+ theme,
596
+ themeId: activeThemeId,
597
+ setThemeId,
598
+ isHydrating
599
+ }),
600
+ [theme, activeThemeId, setThemeId, isHydrating]
601
+ );
602
+ const reduceMotion = usePrefersReducedMotion();
603
+ return /* @__PURE__ */ jsx(UiThemeContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(MotionConfig, { reducedMotion: reduceMotion ? "always" : "never", children }) });
604
+ }
605
+ function useUiTheme() {
606
+ const context = React.useContext(UiThemeContext);
607
+ if (!context) {
608
+ throw new Error("useUiTheme must be used within a UiThemeProvider");
609
+ }
610
+ return context;
611
+ }
612
+ function useThemeTokens() {
613
+ const { theme } = useUiTheme();
614
+ return theme;
615
+ }
616
+ function useGlassTokens() {
617
+ const { theme } = useUiTheme();
618
+ return theme.glass;
619
+ }
620
+ function useColorTokens() {
621
+ const { theme } = useUiTheme();
622
+ return theme.color;
623
+ }
624
+ function useMotionTokens() {
625
+ const { theme } = useUiTheme();
626
+ return theme.motion;
627
+ }
628
+ function useAmbientTokens() {
629
+ const { theme } = useUiTheme();
630
+ return theme.ambient;
631
+ }
632
+ function useControlTokens() {
633
+ const { theme } = useUiTheme();
634
+ return theme.controls;
635
+ }
636
+ function useElevationTokens() {
637
+ const { theme } = useUiTheme();
638
+ return theme.elevation;
639
+ }
640
+ function useIsSolarpunk() {
641
+ const { themeId } = useUiTheme();
642
+ return themeId === "solarpunk";
643
+ }
644
+ function useIsNebula() {
645
+ const { themeId } = useUiTheme();
646
+ return themeId === "nebula";
647
+ }
648
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
649
+ function easeToCss(ease) {
650
+ if (Array.isArray(ease)) {
651
+ return `cubic-bezier(${ease[0]}, ${ease[1]}, ${ease[2]}, ${ease[3]})`;
652
+ }
653
+ const map = {
654
+ linear: "linear",
655
+ easeIn: "cubic-bezier(0.4, 0, 1, 1)",
656
+ easeOut: "cubic-bezier(0, 0, 0.2, 1)",
657
+ easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)"
658
+ };
659
+ return map[ease] ?? "cubic-bezier(0.4, 0, 0.2, 1)";
660
+ }
661
+ function buildGliaCssVariables(theme) {
662
+ const vars = {};
663
+ vars["--glia-color-bg-body"] = theme.color.bg.body;
664
+ vars["--glia-color-bg-panel"] = theme.color.bg.panel;
665
+ vars["--glia-color-bg-elevated"] = theme.color.bg.elevated;
666
+ vars["--glia-color-bg-horizon"] = theme.color.bg.horizon;
667
+ vars["--glia-color-text-primary"] = theme.color.text.primary;
668
+ vars["--glia-color-text-muted"] = theme.color.text.muted;
669
+ vars["--glia-color-text-soft"] = theme.color.text.soft;
670
+ vars["--glia-color-accent"] = theme.color.accent.primary;
671
+ vars["--glia-color-accent-secondary"] = theme.color.accent.secondary;
672
+ vars["--glia-color-accent-positive"] = theme.color.accent.positive;
673
+ vars["--glia-color-accent-warning"] = theme.color.accent.warning;
674
+ vars["--glia-color-accent-destructive"] = theme.color.accent.destructive;
675
+ vars["--glia-color-border"] = theme.color.border;
676
+ vars["--glia-color-ring"] = theme.color.ring;
677
+ vars["--glia-glass-panel-bg"] = theme.glass.panelBg;
678
+ vars["--glia-glass-panel-border"] = theme.glass.panelBorder;
679
+ vars["--glia-glass-panel-blur"] = theme.glass.panelBlur;
680
+ vars["--glia-glass-header-gradient"] = theme.glass.headerGradient;
681
+ vars["--glia-glass-card-bg"] = theme.glass.cardBg;
682
+ vars["--glia-glass-card-border"] = theme.glass.cardBorder;
683
+ vars["--glia-glass-hover-bg"] = theme.glass.hoverBg;
684
+ vars["--glia-glass-active-border"] = theme.glass.activeBorder;
685
+ vars["--glia-glass-active-shadow"] = theme.glass.activeShadow;
686
+ vars["--glia-shadow-soft"] = theme.elevation.softDrop;
687
+ vars["--glia-shadow-hud-panel"] = theme.elevation.hudPanel;
688
+ vars["--glia-shadow-hud-rail"] = theme.elevation.hudRail;
689
+ vars["--glia-shadow-modal"] = theme.elevation.modal;
690
+ vars["--glia-shadow-glow"] = theme.elevation.glow;
691
+ vars["--glia-ambient-horizon"] = theme.ambient.horizonGradient;
692
+ vars["--glia-ambient-ripple-primary"] = theme.ambient.rippleColorPrimary;
693
+ vars["--glia-ambient-ripple-secondary"] = theme.ambient.rippleColorSecondary;
694
+ vars["--glia-ambient-glow-intensity"] = String(theme.ambient.glowIntensity);
695
+ vars["--glia-switch-track-on"] = theme.controls.switch.track.bg.on;
696
+ vars["--glia-switch-track-off"] = theme.controls.switch.track.bg.off;
697
+ vars["--glia-switch-thumb-on"] = theme.controls.switch.thumb.bg.on;
698
+ vars["--glia-switch-thumb-off"] = theme.controls.switch.thumb.bg.off;
699
+ vars["--glia-button-glow-hover-bg"] = theme.controls.buttonGlow.hoverBg;
700
+ vars["--glia-button-glow-hover-text"] = theme.controls.buttonGlow.hoverText;
701
+ vars["--glia-button-glow-hover-shadow"] = theme.controls.buttonGlow.hoverShadow;
702
+ vars["--glia-font-display"] = theme.fonts.display;
703
+ vars["--glia-font-body"] = theme.fonts.body;
704
+ vars["--glia-font-mono"] = theme.fonts.mono;
705
+ vars["--glia-radius-sm"] = theme.radii.sm;
706
+ vars["--glia-radius-md"] = theme.radii.md;
707
+ vars["--glia-radius-lg"] = theme.radii.lg;
708
+ vars["--glia-spacing-taskbar-height"] = theme.spacing.taskbarHeight;
709
+ vars["--glia-spacing-titlebar-height"] = theme.spacing.titlebarHeight;
710
+ vars["--glia-spacing-window-padding"] = theme.spacing.windowPadding;
711
+ vars["--glia-spacing-icon-size"] = theme.spacing.iconSize;
712
+ vars["--glia-spacing-icon-gap"] = theme.spacing.iconGap;
713
+ vars["--glia-spacing-window-border-width"] = theme.spacing.windowBorderWidth;
714
+ const fastMs = Math.round(theme.motion.fast.duration * 1e3);
715
+ const normalMs = Math.round(theme.motion.normal.duration * 1e3);
716
+ const slowMs = Math.round(theme.motion.normal.duration * 1500);
717
+ vars["--glia-duration-fast"] = `${fastMs}ms`;
718
+ vars["--glia-duration-normal"] = `${normalMs}ms`;
719
+ vars["--glia-duration-slow"] = `${slowMs}ms`;
720
+ vars["--glia-easing-default"] = easeToCss(theme.motion.normal.ease);
721
+ vars["--glia-easing-spring"] = "cubic-bezier(0.34, 1.56, 0.64, 1)";
722
+ vars["--glia-easing-bounce"] = "cubic-bezier(0.68, -0.55, 0.265, 1.55)";
723
+ vars["--glia-blur-backdrop"] = `blur(${theme.glass.panelBlur})`;
724
+ const twMap = {
725
+ "background": theme.color.bg.body,
726
+ "foreground": theme.color.text.primary,
727
+ "card": theme.color.bg.panel,
728
+ "card-foreground": theme.color.text.primary,
729
+ "popover": theme.color.bg.elevated,
730
+ "popover-foreground": theme.color.text.primary,
731
+ "primary": theme.color.accent.primary,
732
+ "primary-foreground": theme.color.bg.body,
733
+ "secondary": theme.color.accent.secondary,
734
+ "secondary-foreground": theme.color.text.primary,
735
+ "muted": theme.color.bg.elevated,
736
+ "muted-foreground": theme.color.text.muted,
737
+ "accent": theme.color.bg.panel,
738
+ "accent-foreground": theme.color.accent.primary,
739
+ "destructive": theme.color.accent.destructive,
740
+ "destructive-foreground": theme.color.text.primary,
741
+ "border": theme.color.border,
742
+ "input": theme.color.bg.elevated,
743
+ "ring": theme.color.ring
744
+ };
745
+ for (const [name, color] of Object.entries(twMap)) {
746
+ const hsl = colorToHslComponents(color);
747
+ if (hsl) {
748
+ vars[`--glia-tw-${name}`] = hsl;
749
+ }
750
+ }
751
+ const neonMap = {
752
+ "cyan-neon": theme.color.accent.primary,
753
+ "magenta-neon": theme.color.accent.secondary,
754
+ "emerald-neon": theme.color.accent.positive,
755
+ "yellow-warning": theme.color.accent.warning
756
+ };
757
+ const violetFallback = theme.id === "nebula" ? "#8B5CF6" : theme.color.accent.secondary;
758
+ neonMap["violet-neon"] = violetFallback;
759
+ for (const [name, color] of Object.entries(neonMap)) {
760
+ const hsl = colorToHslComponents(color);
761
+ if (hsl) {
762
+ vars[`--glia-tw-${name}`] = hsl;
763
+ }
764
+ }
765
+ vars["--theme-bg-body"] = "var(--glia-color-bg-body)";
766
+ vars["--theme-bg-panel"] = "var(--glia-color-bg-panel)";
767
+ vars["--theme-bg-elevated"] = "var(--glia-color-bg-elevated)";
768
+ vars["--theme-bg-horizon"] = "var(--glia-color-bg-horizon)";
769
+ vars["--theme-text-primary"] = "var(--glia-color-text-primary)";
770
+ vars["--theme-text-muted"] = "var(--glia-color-text-muted)";
771
+ vars["--theme-text-soft"] = "var(--glia-color-text-soft)";
772
+ vars["--theme-accent-primary"] = "var(--glia-color-accent)";
773
+ vars["--theme-accent-secondary"] = "var(--glia-color-accent-secondary)";
774
+ vars["--theme-accent-positive"] = "var(--glia-color-accent-positive)";
775
+ vars["--theme-accent-warning"] = "var(--glia-color-accent-warning)";
776
+ vars["--theme-accent-destructive"] = "var(--glia-color-accent-destructive)";
777
+ vars["--theme-border"] = "var(--glia-color-border)";
778
+ vars["--theme-ring"] = "var(--glia-color-ring)";
779
+ vars["--theme-glass-panel-bg"] = "var(--glia-glass-panel-bg)";
780
+ vars["--theme-glass-panel-border"] = "var(--glia-glass-panel-border)";
781
+ vars["--theme-glass-panel-blur"] = "var(--glia-glass-panel-blur)";
782
+ vars["--theme-glass-header-gradient"] = "var(--glia-glass-header-gradient)";
783
+ vars["--theme-glass-card-bg"] = "var(--glia-glass-card-bg)";
784
+ vars["--theme-glass-card-border"] = "var(--glia-glass-card-border)";
785
+ vars["--theme-glass-hover-bg"] = "var(--glia-glass-hover-bg)";
786
+ vars["--theme-glass-active-border"] = "var(--glia-glass-active-border)";
787
+ vars["--theme-glass-active-shadow"] = "var(--glia-glass-active-shadow)";
788
+ vars["--theme-shadow-soft"] = "var(--glia-shadow-soft)";
789
+ vars["--theme-shadow-hud-panel"] = "var(--glia-shadow-hud-panel)";
790
+ vars["--theme-shadow-hud-rail"] = "var(--glia-shadow-hud-rail)";
791
+ vars["--theme-shadow-modal"] = "var(--glia-shadow-modal)";
792
+ vars["--theme-shadow-glow"] = "var(--glia-shadow-glow)";
793
+ vars["--theme-ambient-horizon"] = "var(--glia-ambient-horizon)";
794
+ vars["--theme-ambient-ripple-primary"] = "var(--glia-ambient-ripple-primary)";
795
+ vars["--theme-ambient-ripple-secondary"] = "var(--glia-ambient-ripple-secondary)";
796
+ vars["--theme-ambient-glow-intensity"] = "var(--glia-ambient-glow-intensity)";
797
+ vars["--theme-switch-track-on"] = "var(--glia-switch-track-on)";
798
+ vars["--theme-switch-track-off"] = "var(--glia-switch-track-off)";
799
+ vars["--theme-switch-thumb-on"] = "var(--glia-switch-thumb-on)";
800
+ vars["--theme-switch-thumb-off"] = "var(--glia-switch-thumb-off)";
801
+ vars["--theme-button-glow-hover-bg"] = "var(--glia-button-glow-hover-bg)";
802
+ vars["--theme-button-glow-hover-text"] = "var(--glia-button-glow-hover-text)";
803
+ vars["--theme-button-glow-hover-shadow"] = "var(--glia-button-glow-hover-shadow)";
804
+ vars["--bb-color-window-bg"] = "var(--glia-color-bg-panel)";
805
+ vars["--bb-color-window-border"] = "var(--glia-color-border)";
806
+ vars["--bb-color-window-border-focused"] = "var(--glia-glass-active-border)";
807
+ vars["--bb-color-titlebar-bg"] = "var(--glia-color-bg-panel)";
808
+ vars["--bb-color-titlebar-text"] = "var(--glia-color-text-primary)";
809
+ vars["--bb-color-accent"] = "var(--glia-color-accent)";
810
+ vars["--bb-color-accent-muted"] = "var(--glia-glass-hover-bg)";
811
+ vars["--bb-color-accent-glow"] = "var(--glia-glass-active-shadow)";
812
+ vars["--bb-color-taskbar-bg"] = "var(--glia-glass-panel-bg)";
813
+ vars["--bb-color-taskbar-text"] = "var(--glia-color-text-muted)";
814
+ vars["--bb-color-start-menu-bg"] = "var(--glia-color-bg-elevated)";
815
+ vars["--bb-color-context-menu-bg"] = "var(--glia-color-bg-elevated)";
816
+ vars["--bb-color-context-menu-hover"] = "var(--glia-glass-hover-bg)";
817
+ vars["--bb-color-desktop-bg"] = "var(--glia-color-bg-body)";
818
+ vars["--bb-color-icon-text"] = "var(--glia-color-text-muted)";
819
+ vars["--bb-color-icon-selected"] = "var(--glia-glass-hover-bg)";
820
+ vars["--bb-color-destructive"] = "var(--glia-color-accent-destructive)";
821
+ vars["--bb-color-success"] = "var(--glia-color-accent-positive)";
822
+ vars["--bb-color-warning"] = "var(--glia-color-accent-warning)";
823
+ vars["--bb-color-text-primary"] = "var(--glia-color-text-primary)";
824
+ vars["--bb-color-text-secondary"] = "var(--glia-color-text-muted)";
825
+ vars["--bb-color-text-muted"] = "var(--glia-color-text-soft)";
826
+ vars["--bb-font-display"] = "var(--glia-font-display)";
827
+ vars["--bb-font-body"] = "var(--glia-font-body)";
828
+ vars["--bb-font-mono"] = "var(--glia-font-mono)";
829
+ vars["--bb-radius-window"] = "var(--glia-radius-lg)";
830
+ vars["--bb-radius-button"] = "var(--glia-radius-sm)";
831
+ vars["--bb-radius-menu"] = "var(--glia-radius-md)";
832
+ vars["--bb-radius-input"] = "var(--glia-radius-sm)";
833
+ vars["--bb-shadow-window"] = "var(--glia-shadow-hud-panel)";
834
+ vars["--bb-shadow-window-focused"] = "var(--glia-shadow-modal)";
835
+ vars["--bb-shadow-menu"] = "var(--glia-shadow-hud-panel)";
836
+ vars["--bb-shadow-tooltip"] = "var(--glia-shadow-soft)";
837
+ vars["--bb-spacing-window-padding"] = "var(--glia-spacing-window-padding)";
838
+ vars["--bb-spacing-taskbar-height"] = "var(--glia-spacing-taskbar-height)";
839
+ vars["--bb-spacing-icon-size"] = "var(--glia-spacing-icon-size)";
840
+ vars["--bb-spacing-icon-gap"] = "var(--glia-spacing-icon-gap)";
841
+ vars["--bb-spacing-titlebar-height"] = "var(--glia-spacing-titlebar-height)";
842
+ vars["--bb-spacing-window-border-width"] = "var(--glia-spacing-window-border-width)";
843
+ vars["--bb-duration-fast"] = "var(--glia-duration-fast)";
844
+ vars["--bb-duration-normal"] = "var(--glia-duration-normal)";
845
+ vars["--bb-duration-slow"] = "var(--glia-duration-slow)";
846
+ vars["--bb-easing-default"] = "var(--glia-easing-default)";
847
+ vars["--bb-easing-spring"] = "var(--glia-easing-spring)";
848
+ vars["--bb-easing-bounce"] = "var(--glia-easing-bounce)";
849
+ vars["--bb-blur-backdrop"] = "var(--glia-blur-backdrop)";
850
+ return vars;
851
+ }
852
+ function applyGliaCssVariables(theme, target = document.documentElement) {
853
+ const vars = buildGliaCssVariables(theme);
854
+ for (const [key, value] of Object.entries(vars)) {
855
+ target.style.setProperty(key, value);
856
+ }
857
+ applyThemeCssVariables(theme, target);
858
+ target.dataset.gliaTheme = theme.id;
859
+ }
860
+ var GliaThemeContext = React.createContext(null);
861
+ var STORAGE_KEY2 = "glia-theme";
862
+ function GliaThemeProvider({
863
+ children,
864
+ themeId: controlledThemeId,
865
+ overrides,
866
+ storageKey = STORAGE_KEY2
867
+ }) {
868
+ const [internalThemeId, setInternalThemeId] = React.useState(
869
+ controlledThemeId ?? DEFAULT_THEME_ID
870
+ );
871
+ const activeThemeId = controlledThemeId ?? internalThemeId;
872
+ const theme = React.useMemo(() => {
873
+ const base = getTheme(activeThemeId);
874
+ if (!overrides) return base;
875
+ return { ...base, ...overrides };
876
+ }, [activeThemeId, overrides]);
877
+ React.useEffect(() => {
878
+ if (controlledThemeId !== void 0) return;
879
+ try {
880
+ const stored = localStorage.getItem(storageKey);
881
+ if (stored && (stored === "nebula" || stored === "solarpunk")) {
882
+ setInternalThemeId(stored);
883
+ }
884
+ } catch {
885
+ }
886
+ }, [controlledThemeId, storageKey]);
887
+ useIsomorphicLayoutEffect(() => {
888
+ applyGliaCssVariables(theme);
889
+ return () => {
890
+ };
891
+ }, [theme]);
892
+ const setThemeId = React.useCallback(
893
+ (id) => {
894
+ if (controlledThemeId === void 0) {
895
+ setInternalThemeId(id);
896
+ try {
897
+ localStorage.setItem(storageKey, id);
898
+ } catch {
899
+ }
900
+ }
901
+ },
902
+ [controlledThemeId, storageKey]
903
+ );
904
+ const contextValue = React.useMemo(
905
+ () => ({ theme, themeId: activeThemeId, setThemeId }),
906
+ [theme, activeThemeId, setThemeId]
907
+ );
908
+ return /* @__PURE__ */ jsx(GliaThemeContext.Provider, { value: contextValue, children });
909
+ }
910
+ function useGliaTheme() {
911
+ const context = React.useContext(GliaThemeContext);
912
+ if (!context) {
913
+ throw new Error("useGliaTheme must be used within a GliaThemeProvider");
914
+ }
915
+ return context;
916
+ }
917
+ function useFontTokens() {
918
+ const { theme } = useGliaTheme();
919
+ return theme.fonts;
920
+ }
921
+ function useRadiiTokens() {
922
+ const { theme } = useGliaTheme();
923
+ return theme.radii;
924
+ }
925
+ function useSpacingTokens() {
926
+ const { theme } = useGliaTheme();
927
+ return theme.spacing;
928
+ }
929
+
930
+ // src/theme/bridge.ts
931
+ var EASING_MAP = {
932
+ linear: "linear",
933
+ easeIn: "cubic-bezier(0.4, 0, 1, 1)",
934
+ easeOut: "cubic-bezier(0, 0, 0.2, 1)",
935
+ easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)"
936
+ };
937
+ function easeToCss2(ease) {
938
+ if (Array.isArray(ease)) {
939
+ return `cubic-bezier(${ease[0]}, ${ease[1]}, ${ease[2]}, ${ease[3]})`;
940
+ }
941
+ return EASING_MAP[ease] ?? "cubic-bezier(0.4, 0, 0.2, 1)";
942
+ }
943
+ function extractColorFromShadow(shadow, fallback) {
944
+ const rgbaMatch = shadow.match(/rgba?\([^)]+\)/);
945
+ return rgbaMatch ? rgbaMatch[0] : fallback;
946
+ }
947
+ function nudgeAlpha(color, delta) {
948
+ const match = color.match(
949
+ /^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d.]+)\s*\)$/
950
+ );
951
+ if (!match) return color;
952
+ const [, r, g, b, a] = match;
953
+ const newAlpha = Math.min(1, Math.max(0, parseFloat(a) + delta));
954
+ return `rgba(${r}, ${g}, ${b}, ${newAlpha})`;
955
+ }
956
+ function desktopThemeFromUiTheme(uiTheme, options = {}) {
957
+ const { overrides, fonts: fontOverrides } = options;
958
+ const colors = {
959
+ windowBg: uiTheme.color.bg.panel,
960
+ windowBorder: uiTheme.color.border,
961
+ windowBorderFocused: uiTheme.glass.activeBorder,
962
+ titlebarBg: nudgeAlpha(uiTheme.color.bg.panel, 0.02),
963
+ titlebarText: uiTheme.color.text.primary,
964
+ accent: uiTheme.color.accent.primary,
965
+ accentMuted: uiTheme.glass.hoverBg,
966
+ accentGlow: extractColorFromShadow(
967
+ uiTheme.glass.activeShadow,
968
+ uiTheme.color.accent.primary
969
+ ),
970
+ taskbarBg: uiTheme.glass.panelBg,
971
+ taskbarText: uiTheme.color.text.muted,
972
+ startMenuBg: uiTheme.color.bg.elevated,
973
+ contextMenuBg: uiTheme.color.bg.elevated,
974
+ contextMenuHover: uiTheme.glass.hoverBg,
975
+ desktopBg: uiTheme.color.bg.body,
976
+ iconText: uiTheme.color.text.muted,
977
+ iconSelected: uiTheme.glass.hoverBg,
978
+ destructive: uiTheme.color.accent.destructive,
979
+ success: uiTheme.color.accent.positive,
980
+ warning: uiTheme.color.accent.warning,
981
+ textPrimary: uiTheme.color.text.primary,
982
+ textSecondary: uiTheme.color.text.muted,
983
+ textMuted: uiTheme.color.text.soft,
984
+ ...overrides?.colors
985
+ };
986
+ const fonts = {
987
+ display: fontOverrides?.display ?? uiTheme.fonts.display,
988
+ body: fontOverrides?.body ?? uiTheme.fonts.body,
989
+ mono: fontOverrides?.mono ?? uiTheme.fonts.mono,
990
+ ...overrides?.fonts
991
+ };
992
+ const radii = {
993
+ window: uiTheme.radii.lg,
994
+ button: uiTheme.radii.sm,
995
+ menu: uiTheme.radii.md,
996
+ input: uiTheme.radii.sm,
997
+ ...overrides?.radii
998
+ };
999
+ const shadows = {
1000
+ window: uiTheme.elevation.hudPanel,
1001
+ windowFocused: uiTheme.elevation.modal,
1002
+ menu: uiTheme.elevation.hudPanel,
1003
+ tooltip: uiTheme.elevation.softDrop,
1004
+ ...overrides?.shadows
1005
+ };
1006
+ const spacing = {
1007
+ windowPadding: uiTheme.spacing.windowPadding,
1008
+ taskbarHeight: uiTheme.spacing.taskbarHeight,
1009
+ iconSize: uiTheme.spacing.iconSize,
1010
+ iconGap: uiTheme.spacing.iconGap,
1011
+ titlebarHeight: uiTheme.spacing.titlebarHeight,
1012
+ windowBorderWidth: uiTheme.spacing.windowBorderWidth,
1013
+ ...overrides?.spacing
1014
+ };
1015
+ const fastMs = Math.round(uiTheme.motion.fast.duration * 1e3);
1016
+ const normalMs = Math.round(uiTheme.motion.normal.duration * 1e3);
1017
+ const slowMs = Math.round(uiTheme.motion.normal.duration * 1500);
1018
+ const animation = {
1019
+ duration: {
1020
+ fast: `${fastMs}ms`,
1021
+ normal: `${normalMs}ms`,
1022
+ slow: `${slowMs}ms`
1023
+ },
1024
+ easing: {
1025
+ default: easeToCss2(uiTheme.motion.normal.ease),
1026
+ spring: "cubic-bezier(0.34, 1.56, 0.64, 1)",
1027
+ bounce: "cubic-bezier(0.68, -0.55, 0.265, 1.55)"
1028
+ }
1029
+ };
1030
+ const blur = {
1031
+ backdrop: `blur(${uiTheme.glass.panelBlur})`
1032
+ };
1033
+ return {
1034
+ id: `bridged-${uiTheme.id}`,
1035
+ name: `${uiTheme.name} (Bridged)`,
1036
+ colors,
1037
+ fonts,
1038
+ radii,
1039
+ shadows,
1040
+ spacing,
1041
+ animation,
1042
+ blur
1043
+ };
1044
+ }
1045
+
1046
+ // src/theme/materials.ts
1047
+ var GLASS_MATERIALS = {
1048
+ /**
1049
+ * Standard frosted glass -- the default material.
1050
+ * Medium blur, full opacity, subtle noise grain.
1051
+ */
1052
+ frosted: {
1053
+ id: "frosted",
1054
+ name: "Frosted Glass",
1055
+ backdropFilter: "blur(24px)",
1056
+ bgOpacity: 1,
1057
+ borderOpacity: 1,
1058
+ showNoise: true,
1059
+ noisePreset: "glass",
1060
+ noiseOpacity: 0.03,
1061
+ saturate: 180,
1062
+ brightness: 110
1063
+ },
1064
+ /**
1065
+ * Thin/clear glass -- minimal blur, very transparent.
1066
+ * For subtle layering where content behind should remain visible.
1067
+ */
1068
+ thin: {
1069
+ id: "thin",
1070
+ name: "Thin Glass",
1071
+ backdropFilter: "blur(8px)",
1072
+ bgOpacity: 0.4,
1073
+ borderOpacity: 0.6,
1074
+ showNoise: false,
1075
+ noisePreset: "fine",
1076
+ noiseOpacity: 0.02,
1077
+ saturate: 120,
1078
+ brightness: 105
1079
+ },
1080
+ /**
1081
+ * Thick/dense glass -- heavy blur, opaque, strong borders.
1082
+ * For modals, dialogs, and high-contrast surfaces.
1083
+ */
1084
+ thick: {
1085
+ id: "thick",
1086
+ name: "Thick Glass",
1087
+ backdropFilter: "blur(40px)",
1088
+ bgOpacity: 1.2,
1089
+ borderOpacity: 1.5,
1090
+ showNoise: true,
1091
+ noisePreset: "card",
1092
+ noiseOpacity: 0.05,
1093
+ saturate: 200,
1094
+ brightness: 100
1095
+ },
1096
+ /**
1097
+ * Clear glass -- no blur, just tinted transparency.
1098
+ * For overlays that should be visible but not obscured.
1099
+ */
1100
+ clear: {
1101
+ id: "clear",
1102
+ name: "Clear Glass",
1103
+ backdropFilter: "blur(0px)",
1104
+ bgOpacity: 0.3,
1105
+ borderOpacity: 0.4,
1106
+ showNoise: false,
1107
+ noisePreset: "glass",
1108
+ noiseOpacity: 0,
1109
+ saturate: 100,
1110
+ brightness: 100
1111
+ },
1112
+ /**
1113
+ * Holographic glass -- saturated, vibrant, with heavy noise.
1114
+ * For decorative/accent panels with a sci-fi feel.
1115
+ */
1116
+ holographic: {
1117
+ id: "holographic",
1118
+ name: "Holographic Glass",
1119
+ backdropFilter: "blur(20px)",
1120
+ bgOpacity: 0.8,
1121
+ borderOpacity: 1,
1122
+ showNoise: true,
1123
+ noisePreset: "heavy",
1124
+ noiseOpacity: 0.08,
1125
+ saturate: 250,
1126
+ brightness: 120
1127
+ }
1128
+ };
1129
+ function getGlassMaterial(id) {
1130
+ return GLASS_MATERIALS[id] ?? GLASS_MATERIALS.frosted;
1131
+ }
1132
+ function buildBackdropFilter(material) {
1133
+ const parts = [material.backdropFilter];
1134
+ if (material.saturate !== 100) {
1135
+ parts.push(`saturate(${material.saturate}%)`);
1136
+ }
1137
+ if (material.brightness !== 100) {
1138
+ parts.push(`brightness(${material.brightness}%)`);
1139
+ }
1140
+ return parts.join(" ");
1141
+ }
1142
+ function getReducedTransparencyStyles(material) {
1143
+ return {
1144
+ backdropFilter: "none",
1145
+ bgOpacity: Math.min(material.bgOpacity * 2.5, 1),
1146
+ showNoise: false
1147
+ };
1148
+ }
1149
+
1150
+ export { DEFAULT_THEME_ID, GLASS_MATERIALS, GliaThemeProvider, THEMES, UiThemeProvider, applyGliaCssVariables, applyThemeCssVariables, buildBackdropFilter, buildGliaCssVariables, desktopThemeFromUiTheme, getGlassMaterial, getReducedTransparencyStyles, getTheme, getThemeIds, nebulaTheme, removeThemeCssVariables, solarpunkTheme, themeToCssVariables, useAmbientTokens, useColorTokens, useControlTokens, useElevationTokens, useFontTokens, useGlassTokens, useGliaTheme, useIsNebula, useIsSolarpunk, useMotionTokens, useRadiiTokens, useSpacingTokens, useThemeTokens, useUiTheme };
4
1151
  //# sourceMappingURL=index.js.map
5
1152
  //# sourceMappingURL=index.js.map