@backbay/glia 0.2.0-alpha.6 → 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 +16 -10
  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,280 +0,0 @@
1
- import { useGlassTokens, useElevationTokens, useMotionTokens, getGlassMaterial, getReducedTransparencyStyles, buildBackdropFilter } from './chunk-VITKG2HL.js';
2
- import { cn } from './chunk-6RX2WGCO.js';
3
- import { usePrefersReducedTransparency } from './chunk-3CMPQOMY.js';
4
- import { cva } from 'class-variance-authority';
5
- import { motion } from 'framer-motion';
6
- import * as React2 from 'react';
7
- import { jsx, jsxs } from 'react/jsx-runtime';
8
-
9
- // src/lib/noise.ts
10
- var DEFAULTS = {
11
- baseFrequency: 0.8,
12
- numOctaves: 3,
13
- opacity: 0.04,
14
- size: 200,
15
- seed: 2
16
- };
17
- function generateNoiseDataUrl(config) {
18
- const {
19
- baseFrequency,
20
- numOctaves,
21
- opacity,
22
- size,
23
- seed
24
- } = { ...DEFAULTS, ...config };
25
- const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}"><filter id="n"><feTurbulence type="fractalNoise" baseFrequency="${baseFrequency}" numOctaves="${numOctaves}" seed="${seed}" stitchTiles="stitch"/><feColorMatrix type="saturate" values="0"/></filter><rect width="${size}" height="${size}" filter="url(#n)" opacity="${opacity}"/></svg>`;
26
- return `data:image/svg+xml,${encodeURIComponent(svg)}`;
27
- }
28
- var NOISE_PRESETS = {
29
- /** Subtle grain for glass panels. opacity: 0.03, freq: 0.8 */
30
- glass: generateNoiseDataUrl({ opacity: 0.03, baseFrequency: 0.8 }),
31
- /** Medium grain for cards/sections. opacity: 0.05, freq: 0.7 */
32
- card: generateNoiseDataUrl({ opacity: 0.05, baseFrequency: 0.7 }),
33
- /** Heavy grain for film/retro effects. opacity: 0.12, freq: 0.9 */
34
- heavy: generateNoiseDataUrl({ opacity: 0.12, baseFrequency: 0.9 }),
35
- /** Fine grain for subtle texture. opacity: 0.02, freq: 1.2 */
36
- fine: generateNoiseDataUrl({ opacity: 0.02, baseFrequency: 1.2 })
37
- };
38
- var NoiseOverlay = React2.memo(function NoiseOverlay2({
39
- preset = "glass",
40
- config,
41
- opacity,
42
- blendMode = "overlay",
43
- className,
44
- style
45
- }) {
46
- const noiseUrl = React2.useMemo(
47
- () => config ? generateNoiseDataUrl(config) : NOISE_PRESETS[preset],
48
- [config, preset]
49
- );
50
- return /* @__PURE__ */ jsx(
51
- "div",
52
- {
53
- className,
54
- "aria-hidden": "true",
55
- style: {
56
- position: "absolute",
57
- inset: 0,
58
- pointerEvents: "none",
59
- backgroundImage: `url("${noiseUrl}")`,
60
- backgroundRepeat: "repeat",
61
- backgroundSize: `${config?.size ?? 200}px ${config?.size ?? 200}px`,
62
- mixBlendMode: blendMode,
63
- opacity: opacity ?? config?.opacity ?? void 0,
64
- borderRadius: "inherit",
65
- zIndex: 1,
66
- ...style
67
- }
68
- }
69
- );
70
- });
71
- var glassPanelVariants = cva("relative overflow-hidden", {
72
- variants: {
73
- variant: {
74
- /** Standard panel surface */
75
- default: "rounded-xl",
76
- /** Larger, more prominent panel */
77
- prominent: "rounded-2xl",
78
- /** Subtle card within a panel */
79
- card: "rounded-lg",
80
- /** Full-bleed panel (no rounding) */
81
- flush: "rounded-none"
82
- },
83
- elevation: {
84
- /** Flat, no shadow */
85
- none: "",
86
- /** Subtle drop shadow */
87
- soft: "",
88
- /** HUD panel shadow */
89
- hud: "",
90
- /** Modal/overlay shadow */
91
- modal: ""
92
- },
93
- interactive: {
94
- true: "cursor-pointer",
95
- false: ""
96
- }
97
- },
98
- defaultVariants: {
99
- variant: "default",
100
- elevation: "soft",
101
- interactive: false
102
- }
103
- });
104
- function HoverGlow({ isHovered, intensity = "subtle", color }) {
105
- const motionTokens = useMotionTokens();
106
- const glassTokens = useGlassTokens();
107
- const opacityMax = intensity === "subtle" ? 0.35 : 0.5;
108
- return /* @__PURE__ */ jsx(
109
- motion.div,
110
- {
111
- initial: false,
112
- animate: {
113
- opacity: isHovered ? opacityMax : 0,
114
- scale: isHovered ? 1.05 : 0.95
115
- },
116
- transition: motionTokens.normal,
117
- className: "pointer-events-none absolute inset-0 -z-10 blur-3xl",
118
- style: {
119
- background: `radial-gradient(ellipse at center, ${color ?? glassTokens.hoverBg}, transparent 70%)`
120
- }
121
- }
122
- );
123
- }
124
- var GlassPanel = React2.forwardRef(function GlassPanel2({
125
- children,
126
- className,
127
- variant,
128
- elevation,
129
- interactive,
130
- showHoverGlow = false,
131
- isActive = false,
132
- disableAnimations = false,
133
- background,
134
- border,
135
- style,
136
- as: Component = "div",
137
- material,
138
- showNoise,
139
- noiseOpacity,
140
- forceReducedTransparency,
141
- onMouseEnter,
142
- onMouseLeave,
143
- ...props
144
- }, ref) {
145
- const glassTokens = useGlassTokens();
146
- const elevationTokens = useElevationTokens();
147
- const motionTokens = useMotionTokens();
148
- const [isHovered, setIsHovered] = React2.useState(false);
149
- const reducedTransparency = usePrefersReducedTransparency();
150
- const isReducedTransparency = forceReducedTransparency ?? reducedTransparency;
151
- const mat = material != null ? getGlassMaterial(material) : null;
152
- const rtOverrides = mat && isReducedTransparency ? getReducedTransparencyStyles(mat) : null;
153
- const defaultBlur = `blur(${glassTokens.panelBlur ?? "24px"})`;
154
- const effectiveBackdropFilter = mat ? rtOverrides ? rtOverrides.backdropFilter : buildBackdropFilter(mat) : isReducedTransparency ? "none" : defaultBlur;
155
- const effectiveBackground = background ?? glassTokens.panelBg;
156
- const effectiveShowNoise = showNoise ?? (rtOverrides ? rtOverrides.showNoise : mat?.showNoise ?? false);
157
- const effectiveNoiseOpacity = noiseOpacity ?? mat?.noiseOpacity ?? 0.03;
158
- const shadowMap = {
159
- none: "none",
160
- soft: elevationTokens.softDrop,
161
- hud: elevationTokens.hudPanel,
162
- modal: elevationTokens.modal
163
- };
164
- const handleMouseEnter = (e) => {
165
- setIsHovered(true);
166
- onMouseEnter?.(e);
167
- };
168
- const handleMouseLeave = (e) => {
169
- setIsHovered(false);
170
- onMouseLeave?.(e);
171
- };
172
- const motionTags = {
173
- div: motion.div,
174
- section: motion.section,
175
- article: motion.article,
176
- aside: motion.aside,
177
- nav: motion.nav
178
- };
179
- const MotionComponent = motionTags[Component];
180
- return /* @__PURE__ */ jsxs(
181
- MotionComponent,
182
- {
183
- ref,
184
- className: cn(glassPanelVariants({ variant, elevation, interactive }), className),
185
- style: {
186
- backdropFilter: effectiveBackdropFilter,
187
- WebkitBackdropFilter: effectiveBackdropFilter,
188
- background: effectiveBackground,
189
- borderWidth: 1,
190
- borderStyle: "solid",
191
- borderColor: isActive ? glassTokens.activeBorder : border ?? glassTokens.panelBorder,
192
- boxShadow: isActive ? glassTokens.activeShadow : shadowMap[elevation ?? "soft"],
193
- ...style
194
- },
195
- onMouseEnter: handleMouseEnter,
196
- onMouseLeave: handleMouseLeave,
197
- whileHover: interactive && !disableAnimations ? {
198
- borderColor: glassTokens.activeBorder,
199
- transition: motionTokens.fast
200
- } : void 0,
201
- ...props,
202
- children: [
203
- effectiveShowNoise && /* @__PURE__ */ jsx(
204
- NoiseOverlay,
205
- {
206
- preset: mat?.noisePreset ?? "glass",
207
- opacity: effectiveNoiseOpacity
208
- }
209
- ),
210
- showHoverGlow && /* @__PURE__ */ jsx(HoverGlow, { isHovered }),
211
- children
212
- ]
213
- }
214
- );
215
- });
216
- function GlassHeader({ children, className, style, ...props }) {
217
- const glassTokens = useGlassTokens();
218
- return /* @__PURE__ */ jsx(
219
- "div",
220
- {
221
- className: cn("relative flex items-center justify-between px-4 py-3", "border-b", className),
222
- style: {
223
- background: glassTokens.headerGradient,
224
- borderColor: glassTokens.cardBorder,
225
- ...style
226
- },
227
- ...props,
228
- children
229
- }
230
- );
231
- }
232
- var GlassCard = React2.forwardRef(function GlassCard2({ children, className, interactive = false, isActive = false, style, ...props }, ref) {
233
- const glassTokens = useGlassTokens();
234
- const elevationTokens = useElevationTokens();
235
- const motionTokens = useMotionTokens();
236
- const [isHovered, setIsHovered] = React2.useState(false);
237
- return /* @__PURE__ */ jsxs(
238
- motion.div,
239
- {
240
- ref,
241
- className: cn("relative rounded-xl p-3", interactive && "cursor-pointer", className),
242
- style: {
243
- background: glassTokens.cardBg,
244
- borderWidth: 1,
245
- borderStyle: "solid",
246
- borderColor: isActive ? glassTokens.activeBorder : glassTokens.cardBorder,
247
- boxShadow: isActive ? glassTokens.activeShadow : elevationTokens.softDrop,
248
- ...style
249
- },
250
- onMouseEnter: () => setIsHovered(true),
251
- onMouseLeave: () => setIsHovered(false),
252
- whileHover: interactive ? {
253
- borderColor: glassTokens.activeBorder,
254
- boxShadow: `0 4px 20px ${glassTokens.hoverBg}`,
255
- transition: motionTokens.fast
256
- } : void 0,
257
- ...props,
258
- children: [
259
- interactive && /* @__PURE__ */ jsx(HoverGlow, { isHovered, intensity: "subtle" }),
260
- children
261
- ]
262
- }
263
- );
264
- });
265
- function GlassSection({
266
- children,
267
- title,
268
- compact = false,
269
- className,
270
- ...props
271
- }) {
272
- return /* @__PURE__ */ jsxs("div", { className: cn(compact ? "p-2" : "p-4", "space-y-2", className), ...props, children: [
273
- title && /* @__PURE__ */ jsx("h4", { className: "text-[10px] font-mono uppercase tracking-[0.12em] text-[var(--glia-color-text-soft,#64748B)] px-1", children: title }),
274
- children
275
- ] });
276
- }
277
-
278
- export { GlassCard, GlassHeader, GlassPanel, GlassSection, NOISE_PRESETS, NoiseOverlay, generateNoiseDataUrl };
279
- //# sourceMappingURL=chunk-E3NVDCZG.js.map
280
- //# sourceMappingURL=chunk-E3NVDCZG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/noise.ts","../src/primitives/organisms/Glass/NoiseOverlay.tsx","../src/primitives/organisms/Glass/GlassPanel.tsx"],"names":["React","NoiseOverlay","jsx","GlassPanel","GlassCard"],"mappings":"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","file":"chunk-E3NVDCZG.js","sourcesContent":["/**\n * Noise texture utilities for glassmorphism effects.\n *\n * Generates SVG-based noise textures as data URLs for use\n * as background overlays on glass surfaces.\n */\n\nexport interface NoiseConfig {\n /** Base frequency for fractal noise (0.1-2.0). Higher = finer grain. Default: 0.8 */\n baseFrequency?: number;\n /** Number of octaves (1-5). More octaves = more detail. Default: 3 */\n numOctaves?: number;\n /** Noise opacity (0-1). Default: 0.04 */\n opacity?: number;\n /** Tile size in pixels. Default: 200 */\n size?: number;\n /** Random seed. Default: 2 */\n seed?: number;\n}\n\nconst DEFAULTS: Required<NoiseConfig> = {\n baseFrequency: 0.8,\n numOctaves: 3,\n opacity: 0.04,\n size: 200,\n seed: 2,\n};\n\n/**\n * Generate a noise texture SVG data URL with the given config.\n */\nexport function generateNoiseDataUrl(config?: NoiseConfig): string {\n const {\n baseFrequency,\n numOctaves,\n opacity,\n size,\n seed,\n } = { ...DEFAULTS, ...config };\n\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\"><filter id=\"n\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"${baseFrequency}\" numOctaves=\"${numOctaves}\" seed=\"${seed}\" stitchTiles=\"stitch\"/><feColorMatrix type=\"saturate\" values=\"0\"/></filter><rect width=\"${size}\" height=\"${size}\" filter=\"url(#n)\" opacity=\"${opacity}\"/></svg>`;\n\n return `data:image/svg+xml,${encodeURIComponent(svg)}`;\n}\n\n/** Pre-generated noise textures for common use cases */\nexport const NOISE_PRESETS = {\n /** Subtle grain for glass panels. opacity: 0.03, freq: 0.8 */\n glass: generateNoiseDataUrl({ opacity: 0.03, baseFrequency: 0.8 }),\n /** Medium grain for cards/sections. opacity: 0.05, freq: 0.7 */\n card: generateNoiseDataUrl({ opacity: 0.05, baseFrequency: 0.7 }),\n /** Heavy grain for film/retro effects. opacity: 0.12, freq: 0.9 */\n heavy: generateNoiseDataUrl({ opacity: 0.12, baseFrequency: 0.9 }),\n /** Fine grain for subtle texture. opacity: 0.02, freq: 1.2 */\n fine: generateNoiseDataUrl({ opacity: 0.02, baseFrequency: 1.2 }),\n} as const;\n\nexport type NoisePreset = keyof typeof NOISE_PRESETS;\n","\"use client\";\n\n/**\n * NoiseOverlay -- SVG grain texture overlay for glass surfaces.\n *\n * Renders an absolutely-positioned, pointer-events-none div with\n * a tiling SVG noise pattern as background-image.\n *\n * @example\n * <div style={{ position: 'relative' }}>\n * <NoiseOverlay preset=\"glass\" />\n * {children}\n * </div>\n */\n\nimport * as React from \"react\";\nimport {\n NOISE_PRESETS,\n generateNoiseDataUrl,\n type NoisePreset,\n type NoiseConfig,\n} from \"../../../lib/noise\";\n\nexport interface NoiseOverlayProps {\n /** Use a preset noise configuration */\n preset?: NoisePreset;\n /** Custom noise config (overrides preset) */\n config?: NoiseConfig;\n /** Override opacity (0-1). Overrides both preset and config opacity. */\n opacity?: number;\n /** Blend mode. Default: 'overlay' */\n blendMode?: React.CSSProperties[\"mixBlendMode\"];\n /** Additional className */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\nexport const NoiseOverlay = React.memo(function NoiseOverlay({\n preset = \"glass\",\n config,\n opacity,\n blendMode = \"overlay\",\n className,\n style,\n}: NoiseOverlayProps) {\n const noiseUrl = React.useMemo(\n () => (config ? generateNoiseDataUrl(config) : NOISE_PRESETS[preset]),\n [config, preset],\n );\n\n return (\n <div\n className={className}\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n backgroundImage: `url(\"${noiseUrl}\")`,\n backgroundRepeat: \"repeat\",\n backgroundSize: `${config?.size ?? 200}px ${config?.size ?? 200}px`,\n mixBlendMode: blendMode,\n opacity: opacity ?? config?.opacity ?? undefined,\n borderRadius: \"inherit\",\n zIndex: 1,\n ...style,\n }}\n />\n );\n});\n","\"use client\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { motion, type HTMLMotionProps } from \"framer-motion\";\nimport * as React from \"react\";\nimport { usePrefersReducedTransparency } from \"../../../lib/accessibility\";\nimport { useElevationTokens, useGlassTokens, useMotionTokens } from \"../../../theme\";\nimport {\n getGlassMaterial,\n buildBackdropFilter,\n getReducedTransparencyStyles,\n type GlassMaterialId,\n} from \"../../../theme/materials\";\nimport { NoiseOverlay } from \"./NoiseOverlay\";\n\n// ============================================================================\n// GLASS PANEL VARIANTS\n// ============================================================================\n\nconst glassPanelVariants = cva(\"relative overflow-hidden\", {\n variants: {\n variant: {\n /** Standard panel surface */\n default: \"rounded-xl\",\n /** Larger, more prominent panel */\n prominent: \"rounded-2xl\",\n /** Subtle card within a panel */\n card: \"rounded-lg\",\n /** Full-bleed panel (no rounding) */\n flush: \"rounded-none\",\n },\n elevation: {\n /** Flat, no shadow */\n none: \"\",\n /** Subtle drop shadow */\n soft: \"\",\n /** HUD panel shadow */\n hud: \"\",\n /** Modal/overlay shadow */\n modal: \"\",\n },\n interactive: {\n true: \"cursor-pointer\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n elevation: \"soft\",\n interactive: false,\n },\n});\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface GlassPanelProps\n extends Omit<HTMLMotionProps<\"div\">, \"children\">, VariantProps<typeof glassPanelVariants> {\n children: React.ReactNode;\n /** Show hover glow effect */\n showHoverGlow?: boolean;\n /** Show active state styling */\n isActive?: boolean;\n /** Disable animations */\n disableAnimations?: boolean;\n /** Custom background override */\n background?: string;\n /** Custom border override */\n border?: string;\n /** As container element */\n as?: \"div\" | \"section\" | \"article\" | \"aside\" | \"nav\";\n /** Glass material preset. Controls blur, opacity, noise, saturate, brightness. */\n material?: GlassMaterialId;\n /** Show noise texture overlay. Defaults to material's setting. */\n showNoise?: boolean;\n /** Noise opacity override (0-1) */\n noiseOpacity?: number;\n /** Force reduced transparency mode (overrides system preference) */\n forceReducedTransparency?: boolean;\n}\n\n// ============================================================================\n// HOVER GLOW COMPONENT\n// ============================================================================\n\ninterface HoverGlowProps {\n isHovered: boolean;\n intensity?: \"subtle\" | \"medium\";\n color?: string;\n}\n\nfunction HoverGlow({ isHovered, intensity = \"subtle\", color }: HoverGlowProps) {\n const motionTokens = useMotionTokens();\n const glassTokens = useGlassTokens();\n const opacityMax = intensity === \"subtle\" ? 0.35 : 0.5;\n\n return (\n <motion.div\n initial={false}\n animate={{\n opacity: isHovered ? opacityMax : 0,\n scale: isHovered ? 1.05 : 0.95,\n }}\n transition={motionTokens.normal}\n className=\"pointer-events-none absolute inset-0 -z-10 blur-3xl\"\n style={{\n background: `radial-gradient(ellipse at center, ${\n color ?? glassTokens.hoverBg\n }, transparent 70%)`,\n }}\n />\n );\n}\n\n// ============================================================================\n// GLASS PANEL\n// ============================================================================\n\nexport const GlassPanel = React.forwardRef<HTMLDivElement, GlassPanelProps>(function GlassPanel(\n {\n children,\n className,\n variant,\n elevation,\n interactive,\n showHoverGlow = false,\n isActive = false,\n disableAnimations = false,\n background,\n border,\n style,\n as: Component = \"div\",\n material,\n showNoise,\n noiseOpacity,\n forceReducedTransparency,\n onMouseEnter,\n onMouseLeave,\n ...props\n },\n ref\n) {\n const glassTokens = useGlassTokens();\n const elevationTokens = useElevationTokens();\n const motionTokens = useMotionTokens();\n const [isHovered, setIsHovered] = React.useState(false);\n\n const reducedTransparency = usePrefersReducedTransparency();\n const isReducedTransparency = forceReducedTransparency ?? reducedTransparency;\n\n // Material system: only active when `material` prop is explicitly set\n const mat = material != null ? getGlassMaterial(material) : null;\n const rtOverrides = mat && isReducedTransparency ? getReducedTransparencyStyles(mat) : null;\n\n // Compute backdrop filter\n const defaultBlur = `blur(${glassTokens.panelBlur ?? \"24px\"})`;\n const effectiveBackdropFilter = mat\n ? rtOverrides\n ? rtOverrides.backdropFilter\n : buildBackdropFilter(mat)\n : isReducedTransparency\n ? \"none\"\n : defaultBlur;\n\n // Compute background (when material is set and no explicit background override)\n const effectiveBackground = background ?? glassTokens.panelBg;\n\n // Compute noise visibility\n const effectiveShowNoise = showNoise ?? (rtOverrides ? rtOverrides.showNoise : mat?.showNoise ?? false);\n const effectiveNoiseOpacity = noiseOpacity ?? mat?.noiseOpacity ?? 0.03;\n\n // Map elevation to shadow\n const shadowMap = {\n none: \"none\",\n soft: elevationTokens.softDrop,\n hud: elevationTokens.hudPanel,\n modal: elevationTokens.modal,\n };\n\n const handleMouseEnter = (e: React.MouseEvent<HTMLDivElement>) => {\n setIsHovered(true);\n onMouseEnter?.(e);\n };\n\n const handleMouseLeave = (e: React.MouseEvent<HTMLDivElement>) => {\n setIsHovered(false);\n onMouseLeave?.(e);\n };\n\n const motionTags = {\n div: motion.div,\n section: motion.section,\n article: motion.article,\n aside: motion.aside,\n nav: motion.nav,\n } as const;\n const MotionComponent = motionTags[Component];\n\n return (\n <MotionComponent\n ref={ref}\n className={cn(glassPanelVariants({ variant, elevation, interactive }), className)}\n style={{\n backdropFilter: effectiveBackdropFilter,\n WebkitBackdropFilter: effectiveBackdropFilter,\n background: effectiveBackground,\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: isActive ? glassTokens.activeBorder : (border ?? glassTokens.panelBorder),\n boxShadow: isActive ? glassTokens.activeShadow : shadowMap[elevation ?? \"soft\"],\n ...style,\n }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n whileHover={\n interactive && !disableAnimations\n ? {\n borderColor: glassTokens.activeBorder,\n transition: motionTokens.fast,\n }\n : undefined\n }\n {...props}\n >\n {effectiveShowNoise && (\n <NoiseOverlay\n preset={mat?.noisePreset ?? \"glass\"}\n opacity={effectiveNoiseOpacity}\n />\n )}\n {showHoverGlow && <HoverGlow isHovered={isHovered} />}\n {children}\n </MotionComponent>\n );\n});\n\n// ============================================================================\n// GLASS HEADER\n// ============================================================================\n\nexport interface GlassHeaderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport function GlassHeader({ children, className, style, ...props }: GlassHeaderProps) {\n const glassTokens = useGlassTokens();\n\n return (\n <div\n className={cn(\"relative flex items-center justify-between px-4 py-3\", \"border-b\", className)}\n style={{\n background: glassTokens.headerGradient,\n borderColor: glassTokens.cardBorder,\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// ============================================================================\n// GLASS CARD\n// ============================================================================\n\nexport interface GlassCardProps extends Omit<HTMLMotionProps<\"div\">, \"children\"> {\n children: React.ReactNode;\n /** Show hover effects */\n interactive?: boolean;\n /** Currently active/selected */\n isActive?: boolean;\n}\n\nexport const GlassCard = React.forwardRef<HTMLDivElement, GlassCardProps>(function GlassCard(\n { children, className, interactive = false, isActive = false, style, ...props },\n ref\n) {\n const glassTokens = useGlassTokens();\n const elevationTokens = useElevationTokens();\n const motionTokens = useMotionTokens();\n const [isHovered, setIsHovered] = React.useState(false);\n\n return (\n <motion.div\n ref={ref}\n className={cn(\"relative rounded-xl p-3\", interactive && \"cursor-pointer\", className)}\n style={{\n background: glassTokens.cardBg,\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: isActive ? glassTokens.activeBorder : glassTokens.cardBorder,\n boxShadow: isActive ? glassTokens.activeShadow : elevationTokens.softDrop,\n ...style,\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n whileHover={\n interactive\n ? {\n borderColor: glassTokens.activeBorder,\n boxShadow: `0 4px 20px ${glassTokens.hoverBg}`,\n transition: motionTokens.fast,\n }\n : undefined\n }\n {...props}\n >\n {interactive && <HoverGlow isHovered={isHovered} intensity=\"subtle\" />}\n {children}\n </motion.div>\n );\n});\n\n// ============================================================================\n// GLASS SECTION\n// ============================================================================\n\nexport interface GlassSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Section title */\n title?: string;\n /** Compact padding */\n compact?: boolean;\n}\n\nexport function GlassSection({\n children,\n title,\n compact = false,\n className,\n ...props\n}: GlassSectionProps) {\n return (\n <div className={cn(compact ? \"p-2\" : \"p-4\", \"space-y-2\", className)} {...props}>\n {title && (\n <h4 className=\"text-[10px] font-mono uppercase tracking-[0.12em] text-[var(--glia-color-text-soft,#64748B)] px-1\">\n {title}\n </h4>\n )}\n {children}\n </div>\n );\n}\n"]}