@pathscale/ui 1.1.79 → 1.1.81

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.
@@ -1,115 +1,179 @@
1
1
  @layer components {
2
2
  .glass-panel {
3
- position: relative;
4
- border-radius: 0.75rem;
5
- transition: all 200ms ease-in-out;
6
- background: color-mix(in srgb, var(--color-base-300) 45%, transparent);
7
- border: 1px solid
8
- color-mix(in srgb, var(--color-base-content) 12%, transparent);
9
- }
10
-
11
- .glass-panel--transparent {
12
- background: transparent;
13
- border-color: transparent;
14
- }
15
-
16
- .glass-panel--glow {
17
- box-shadow: inset 0 1px 0
18
- color-mix(in srgb, var(--color-base-content) 5%, transparent);
19
- }
20
-
21
- .glass-panel--liquid {
22
- --glass-panel-liquid-bg: color-mix(
3
+ --glass-panel-blur: var(--glass-blur, 11px);
4
+ --glass-panel-background: color-mix(
23
5
  in oklab,
24
- var(--color-base-100) 12%,
6
+ var(--glass-background-color, white) var(--glass-background-opacity, 38%),
25
7
  transparent
26
8
  );
27
- --glass-panel-liquid-border: color-mix(
9
+ --glass-panel-border: color-mix(
28
10
  in oklab,
29
- var(--color-base-content) 14%,
11
+ var(--glass-border-color, white) var(--glass-border-opacity, 30%),
30
12
  transparent
31
13
  );
32
- --glass-panel-liquid-highlight: color-mix(
14
+ --glass-panel-highlight: color-mix(
33
15
  in oklab,
34
- var(--color-base-100) 48%,
16
+ var(--glass-highlight-color, white) var(--glass-highlight-opacity, 80%),
35
17
  transparent
36
18
  );
37
- --glass-panel-liquid-inner: color-mix(
19
+ --glass-panel-bottom-highlight: color-mix(
38
20
  in oklab,
39
- var(--color-base-100) 10%,
21
+ var(--glass-highlight-color, white)
22
+ var(--glass-bottom-highlight-opacity, 10%),
40
23
  transparent
41
24
  );
42
- --glass-panel-liquid-brightness: 1.03;
43
- --glass-panel-liquid-saturation: 1.18;
44
- isolation: isolate;
45
- overflow: hidden;
46
- background: var(--glass-panel-liquid-bg);
47
- border-color: var(--glass-panel-liquid-border);
48
- box-shadow:
49
- inset 0 0 3px 0 var(--glass-panel-liquid-highlight),
50
- inset 0 1px 10px var(--glass-panel-liquid-inner);
51
- backdrop-filter: blur(1px) blur(2px)
52
- brightness(var(--glass-panel-liquid-brightness, 1.08))
53
- saturate(var(--glass-panel-liquid-saturation, 1.35));
54
- -webkit-backdrop-filter: blur(1px) blur(2px)
55
- brightness(var(--glass-panel-liquid-brightness, 1.08))
56
- saturate(var(--glass-panel-liquid-saturation, 1.35));
57
- }
58
-
59
- [data-theme="dark"] .glass-panel--liquid,
60
- .glass-panel--liquid[data-theme="dark"] {
61
- --glass-panel-liquid-bg: color-mix(
25
+ --glass-panel-edge-highlight: color-mix(
26
+ in oklab,
27
+ var(--glass-highlight-color, white)
28
+ var(--glass-edge-highlight-opacity, 30%),
29
+ transparent
30
+ );
31
+ --glass-panel-depth-sheen: color-mix(
32
+ in oklab,
33
+ var(--glass-highlight-color, white) var(--glass-depth-sheen-opacity, 40%),
34
+ transparent
35
+ );
36
+ --glass-panel-rim-start: color-mix(
62
37
  in oklab,
63
- var(--color-base-200) 22%,
38
+ var(--glass-rim-start-color, var(--glass-border-color, white))
39
+ var(--glass-rim-start-opacity, 21%),
64
40
  transparent
65
41
  );
66
- --glass-panel-liquid-border: color-mix(
42
+ --glass-panel-rim-end: color-mix(
67
43
  in oklab,
68
- var(--color-base-content) 10%,
44
+ var(--glass-rim-end-color, var(--glass-highlight-color, white))
45
+ var(--glass-rim-end-opacity, 35%),
69
46
  transparent
70
47
  );
71
- --glass-panel-liquid-highlight: color-mix(
48
+ --glass-panel-inner-glow: rgb(
49
+ var(--glass-inner-glow-rgb, 255 255 255) /
50
+ var(--glass-inner-glow-alpha, 0.5)
51
+ );
52
+ --glass-panel-depth-top-glow: color-mix(
72
53
  in oklab,
73
- var(--color-base-content) 14%,
54
+ var(--glass-highlight-color, white)
55
+ var(--glass-depth-top-glow-opacity, 8%),
74
56
  transparent
75
57
  );
76
- --glass-panel-liquid-inner: color-mix(
58
+ --glass-panel-depth-bottom-glow: color-mix(
77
59
  in oklab,
78
- var(--color-base-content) 5%,
60
+ var(--glass-highlight-color, white)
61
+ var(--glass-depth-bottom-glow-opacity, 12%),
79
62
  transparent
80
63
  );
81
- --glass-panel-liquid-brightness: 0.98;
82
- --glass-panel-liquid-saturation: 1.08;
64
+ position: relative;
65
+ isolation: isolate;
66
+ overflow: hidden;
67
+ border-radius: var(--glass-border-radius, 20px);
68
+ transition: background-color 200ms ease-in-out, border-color 200ms
69
+ ease-in-out, box-shadow 200ms ease-in-out, backdrop-filter 200ms
70
+ ease-in-out;
71
+ background: var(--glass-panel-background);
72
+ border: 1px solid var(--glass-panel-border);
73
+ box-shadow: var(--glass-shadow-depth, 0 8px 32px rgb(0 0 0 / 10%)), inset 0
74
+ 1px 0 var(--glass-panel-highlight), inset 0 -1px 0
75
+ var(--glass-panel-bottom-highlight);
76
+ backdrop-filter: blur(var(--glass-panel-blur));
77
+ -webkit-backdrop-filter: blur(var(--glass-panel-blur));
78
+ }
79
+
80
+ .glass-panel::before,
81
+ .glass-panel::after {
82
+ content: "";
83
+ position: absolute;
84
+ pointer-events: none;
85
+ z-index: 1;
86
+ }
87
+
88
+ .glass-panel::before {
89
+ top: 0;
90
+ right: 12%;
91
+ left: 12%;
92
+ height: 1px;
93
+ background: linear-gradient(
94
+ 90deg,
95
+ transparent,
96
+ var(--glass-panel-highlight),
97
+ transparent
98
+ );
99
+ }
100
+
101
+ .glass-panel::after {
102
+ top: 0;
103
+ bottom: 0;
104
+ left: 0;
105
+ width: 1px;
106
+ background: linear-gradient(
107
+ 180deg,
108
+ var(--glass-panel-highlight),
109
+ transparent 45%,
110
+ var(--glass-panel-edge-highlight)
111
+ );
112
+ }
113
+
114
+ .glass-panel--transparent {
115
+ background: transparent;
116
+ border-color: transparent;
117
+ box-shadow: none;
118
+ backdrop-filter: none;
119
+ -webkit-backdrop-filter: none;
120
+ }
121
+
122
+ .glass-panel--transparent::before,
123
+ .glass-panel--transparent::after,
124
+ .glass-panel--transparent > .glass-panel__rim,
125
+ .glass-panel--transparent > .glass-panel__depth,
126
+ .glass-panel--transparent > .glass-panel__sheen {
127
+ display: none;
128
+ }
129
+
130
+ .glass-panel--glow {
131
+ box-shadow: var(--glass-shadow-depth, 0 8px 32px rgb(0 0 0 / 10%)), 0 0 0
132
+ 1px
133
+ color-mix(
134
+ in oklab,
135
+ var(--color-primary) var(--glass-glow-ring-opacity, 10%),
136
+ transparent
137
+ ), inset 0 1px 0 var(--glass-panel-highlight), inset 0 -1px 0
138
+ var(--glass-panel-bottom-highlight);
139
+ }
140
+
141
+ .glass-panel--liquid {
142
+ box-shadow: var(--glass-shadow-depth, 0 8px 32px rgb(0 0 0 / 10%)), inset 0
143
+ 0 var(--glass-liquid-edge-size, 3px) 0 var(--glass-panel-highlight), inset
144
+ 0 1px var(--glass-liquid-inner-blur, 18px)
145
+ var(--glass-panel-edge-highlight);
83
146
  }
84
147
 
85
148
  .glass-panel--liquid > .glass-panel__header-button,
86
149
  .glass-panel--liquid > .glass-panel__content {
87
150
  position: relative;
88
- z-index: 1;
151
+ z-index: 2;
89
152
  }
90
153
 
91
154
  .glass-panel--blur-none {
92
155
  backdrop-filter: none;
156
+ -webkit-backdrop-filter: none;
93
157
  }
94
158
 
95
159
  .glass-panel--blur-sm {
96
- backdrop-filter: blur(4px);
160
+ --glass-panel-blur: calc(var(--glass-blur, 11px) * 0.5);
97
161
  }
98
162
 
99
163
  .glass-panel--blur-md {
100
- backdrop-filter: blur(12px);
164
+ --glass-panel-blur: var(--glass-blur, 11px);
101
165
  }
102
166
 
103
167
  .glass-panel--blur-lg {
104
- backdrop-filter: blur(16px);
168
+ --glass-panel-blur: calc(var(--glass-blur, 11px) * 1.25);
105
169
  }
106
170
 
107
171
  .glass-panel--blur-xl {
108
- backdrop-filter: blur(24px);
172
+ --glass-panel-blur: calc(var(--glass-blur, 11px) * 1.5);
109
173
  }
110
174
 
111
175
  .glass-panel--blur-2xl {
112
- backdrop-filter: blur(40px);
176
+ --glass-panel-blur: calc(var(--glass-blur, 11px) * 2);
113
177
  }
114
178
 
115
179
  .glass-panel--accent-primary,
@@ -161,6 +225,8 @@
161
225
  }
162
226
 
163
227
  .glass-panel__header-button {
228
+ position: relative;
229
+ z-index: 2;
164
230
  display: flex;
165
231
  width: 100%;
166
232
  cursor: pointer;
@@ -200,7 +266,64 @@
200
266
  transform: rotate(180deg);
201
267
  }
202
268
 
269
+ .glass-panel__rim,
270
+ .glass-panel__depth,
271
+ .glass-panel__sheen {
272
+ position: absolute;
273
+ pointer-events: none;
274
+ z-index: 1;
275
+ }
276
+
277
+ .glass-panel__rim {
278
+ inset: 0;
279
+ border-radius: inherit;
280
+ padding: 1px;
281
+ background: linear-gradient(
282
+ 180deg,
283
+ var(--glass-panel-rim-start) 1%,
284
+ var(--glass-panel-rim-end) 100%
285
+ );
286
+ mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
287
+ mask-composite: exclude;
288
+ -webkit-mask: linear-gradient(#fff 0 0) content-box,
289
+ linear-gradient(#fff 0 0);
290
+ -webkit-mask-composite: xor;
291
+ }
292
+
293
+ .glass-panel__depth {
294
+ inset: 1px;
295
+ border-radius: max(0px, calc(var(--glass-border-radius, 20px) - 1px));
296
+ background: radial-gradient(
297
+ circle at 50% 45%,
298
+ color-mix(
299
+ in oklab,
300
+ var(--glass-highlight-color, white)
301
+ var(--glass-depth-surface-opacity, 8%),
302
+ transparent
303
+ )
304
+ 0%,
305
+ transparent var(--glass-depth-surface-size, 82%)
306
+ );
307
+ box-shadow: inset 0 0 var(--glass-inner-glow-blur, 10px)
308
+ var(--glass-inner-glow-spread, 5px) var(--glass-panel-inner-glow), inset 0
309
+ 2px 4px 0 var(--glass-panel-depth-top-glow), inset 0 -2px 2px 0
310
+ var(--glass-panel-depth-bottom-glow);
311
+ }
312
+
313
+ .glass-panel__sheen {
314
+ inset: 2px;
315
+ border-radius: max(0px, calc(var(--glass-border-radius, 20px) - 2px));
316
+ background: radial-gradient(
317
+ circle at 30% 20%,
318
+ var(--glass-panel-depth-sheen) 0%,
319
+ transparent var(--glass-depth-sheen-size, 70%)
320
+ );
321
+ mix-blend-mode: overlay;
322
+ }
323
+
203
324
  .glass-panel__content {
325
+ position: relative;
326
+ z-index: 2;
204
327
  display: grid;
205
328
  transition: grid-template-rows 200ms ease-in-out, opacity 200ms ease-in-out;
206
329
  }
@@ -236,4 +359,18 @@
236
359
  .glass-panel__content--xl {
237
360
  padding: 1.5rem;
238
361
  }
362
+
363
+ @supports not (
364
+ (backdrop-filter: blur(1px)) or
365
+ (-webkit-backdrop-filter: blur(1px))
366
+ ) {
367
+ .glass-panel {
368
+ background: color-mix(
369
+ in oklab,
370
+ var(--glass-background-color, white)
371
+ var(--glass-fallback-background-opacity, 78%),
372
+ transparent
373
+ );
374
+ }
375
+ }
239
376
  }
@@ -3,12 +3,11 @@ import "./GlassPanel.css";
3
3
  import * as __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__ from "solid-js";
4
4
  import * as __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__ from "tailwind-merge";
5
5
  import * as __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__ from "./GlassPanel.classes.js";
6
- var _tmpl$ = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)('<button type=button><span></span><svg><path stroke-linecap=round stroke-linejoin=round d="M19 9l-7 7-7-7">'), _tmpl$2 = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)("<div><div><div>");
7
- const LIQUID_DEPTH_RATIO = 0.05;
8
- const LIQUID_RADIUS_RATIO = 0.08;
9
- const LIQUID_STRENGTH_RATIO = 0.5;
10
- const LIQUID_CHROMATIC_ABERRATION_RATIO = 0.025;
11
- const LIQUID_BLUR = 2;
6
+ var _tmpl$ = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)('<button type=button><span></span><svg><path stroke-linecap=round stroke-linejoin=round d="M19 9l-7 7-7-7">'), _tmpl$2 = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)("<div><span class=glass-panel__rim aria-hidden=true></span><span class=glass-panel__depth aria-hidden=true></span><span class=glass-panel__sheen aria-hidden=true></span><div><div>");
7
+ const DEFAULT_GLASS_REFRACTION_DEPTH = 10;
8
+ const DEFAULT_GLASS_REFRACTION_RADIUS_RATIO = 0.08;
9
+ const DEFAULT_GLASS_REFRACTION_STRENGTH = 0.42;
10
+ const DEFAULT_GLASS_CHROMATIC_ABERRATION = 0.018;
12
11
  const getDisplacementMap = ({ height, width, radius, depth })=>`data:image/svg+xml;utf8,${encodeURIComponent(`<svg height="${height}" width="${width}" viewBox="0 0 ${width} ${height}" xmlns="http://www.w3.org/2000/svg">
13
12
  <style>
14
13
  .mix { mix-blend-mode: screen; }
@@ -129,6 +128,10 @@ const getPx = (value)=>{
129
128
  const parsed = Number.parseFloat(value);
130
129
  return Number.isFinite(parsed) ? parsed : 0;
131
130
  };
131
+ const getCssNumber = (style, name, fallback)=>{
132
+ const parsed = Number.parseFloat(style.getPropertyValue(name));
133
+ return Number.isFinite(parsed) ? parsed : fallback;
134
+ };
132
135
  const callEventHandler = (handler, event)=>{
133
136
  if ("function" == typeof handler) handler(event);
134
137
  };
@@ -156,7 +159,7 @@ const GlassPanel = (props)=>{
156
159
  "style"
157
160
  ]);
158
161
  const contentId = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createUniqueId)();
159
- const blur = ()=>local.blur ?? "none";
162
+ const blur = ()=>local.blur ?? "md";
160
163
  const size = ()=>local.size ?? "md";
161
164
  const isLiquid = ()=>"liquid" === local.effect;
162
165
  const [geometry, setGeometry] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)();
@@ -198,24 +201,29 @@ const GlassPanel = (props)=>{
198
201
  }
199
202
  const nextGeometry = geometry();
200
203
  if (!nextGeometry) return;
204
+ const style = window.getComputedStyle(element);
201
205
  const minSide = Math.min(nextGeometry.width, nextGeometry.height);
202
206
  const maxDepth = Math.max(1, Math.floor(minSide / 2) - 1);
203
- const depth = Math.min(maxDepth, Math.max(10, Math.round(minSide * LIQUID_DEPTH_RATIO)) / (pressed() ? 0.7 : 1));
207
+ const baseDepth = Math.max(1, getCssNumber(style, "--glass-refraction-depth", DEFAULT_GLASS_REFRACTION_DEPTH));
208
+ const depth = Math.min(maxDepth, baseDepth * (pressed() ? 1.35 : 1));
209
+ const radiusRatio = getCssNumber(style, "--glass-refraction-radius-ratio", DEFAULT_GLASS_REFRACTION_RADIUS_RATIO);
210
+ const strengthRatio = getCssNumber(style, "--glass-refraction-strength", DEFAULT_GLASS_REFRACTION_STRENGTH);
211
+ const chromaticRatio = getCssNumber(style, "--glass-refraction-chromatic-aberration", DEFAULT_GLASS_CHROMATIC_ABERRATION);
204
212
  const filter = getDisplacementFilter({
205
213
  ...nextGeometry,
206
- radius: Math.max(nextGeometry.radius, Math.round(minSide * LIQUID_RADIUS_RATIO)),
214
+ radius: Math.max(nextGeometry.radius, Math.round(minSide * radiusRatio)),
207
215
  depth,
208
- strength: Math.round(minSide * LIQUID_STRENGTH_RATIO),
209
- chromaticAberration: Math.round(minSide * LIQUID_CHROMATIC_ABERRATION_RATIO)
216
+ strength: Math.round(minSide * strengthRatio),
217
+ chromaticAberration: Math.round(minSide * chromaticRatio)
210
218
  });
211
- const backdropFilter = `blur(${LIQUID_BLUR / 2}px) url('${filter}') blur(${LIQUID_BLUR}px) brightness(var(--glass-panel-liquid-brightness, 1.1)) saturate(var(--glass-panel-liquid-saturation, 1.5))`;
219
+ const backdropFilter = `blur(calc(var(--glass-panel-blur, var(--glass-blur, 16px)) / 2)) url('${filter}') blur(var(--glass-panel-blur, var(--glass-blur, 16px))) brightness(var(--glass-brightness, 1)) saturate(var(--glass-saturation, 1.2))`;
212
220
  element.style.backdropFilter = backdropFilter;
213
221
  element.style.setProperty("-webkit-backdrop-filter", backdropFilter);
214
222
  });
215
223
  const containerClasses = ()=>(0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)(__WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.base, !local.transparent && !isLiquid() && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.blur[blur()], !local.transparent && isLiquid() && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.flag.liquid, local.transparent && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.flag.transparent, local.glow && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.flag.glow, local.accent && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.accent[accentKey()], local.class, local.className);
216
224
  const contentClasses = ()=>(0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)(__WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.slot.content, local.collapsible && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.flag.contentCollapsible, local.collapsible && !isOpen() && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.flag.contentCollapsed, (!local.collapsible || isOpen()) && !(local.paddingX || local.paddingY) && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.size[size()], local.paddingX, local.paddingY);
217
225
  return (()=>{
218
- var _el$ = _tmpl$2(), _el$5 = _el$.firstChild, _el$6 = _el$5.firstChild;
226
+ var _el$ = _tmpl$2(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling, _el$8 = _el$4.nextSibling, _el$9 = _el$8.firstChild;
219
227
  var _ref$ = rootRef;
220
228
  "function" == typeof _ref$ ? (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.use)(_ref$, _el$) : rootRef = _el$;
221
229
  (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(others, ()=>({
@@ -248,8 +256,8 @@ const GlassPanel = (props)=>{
248
256
  return local.collapsible && local.title;
249
257
  },
250
258
  get children () {
251
- var _el$2 = _tmpl$(), _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
252
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$2, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
259
+ var _el$5 = _tmpl$(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;
260
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$5, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
253
261
  class: __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.slot.headerButton
254
262
  }), {
255
263
  onClick: handleToggle,
@@ -258,10 +266,10 @@ const GlassPanel = (props)=>{
258
266
  },
259
267
  "aria-controls": contentId
260
268
  }), false, true);
261
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$3, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
269
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$6, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
262
270
  class: __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.slot.headerLabel
263
271
  })), false, true);
264
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$3, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.createComponent)(__WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.Show, {
272
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$6, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.createComponent)(__WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.Show, {
265
273
  get when () {
266
274
  return local.icon;
267
275
  },
@@ -269,8 +277,8 @@ const GlassPanel = (props)=>{
269
277
  return local.icon;
270
278
  }
271
279
  }), null);
272
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$3, ()=>local.title, null);
273
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$4, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
280
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$6, ()=>local.title, null);
281
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$7, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
274
282
  class: (0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)(__WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.slot.chevron, isOpen() && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.flag.chevronOpen)
275
283
  }), {
276
284
  "aria-hidden": "true",
@@ -279,11 +287,11 @@ const GlassPanel = (props)=>{
279
287
  stroke: "currentColor",
280
288
  "stroke-width": "1.5"
281
289
  }), true, true);
282
- return _el$2;
290
+ return _el$5;
283
291
  }
284
- }), _el$5);
285
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.setAttribute)(_el$5, "id", contentId);
286
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$5, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
292
+ }), _el$8);
293
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.setAttribute)(_el$8, "id", contentId);
294
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$8, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
287
295
  class: contentClasses()
288
296
  }), {
289
297
  get style () {
@@ -293,10 +301,10 @@ const GlassPanel = (props)=>{
293
301
  };
294
302
  }
295
303
  }), false, true);
296
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$6, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
304
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$9, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(()=>({
297
305
  class: (0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)(__WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.slot.contentInner, local.collapsible && __WEBPACK_EXTERNAL_MODULE__GlassPanel_classes_js_5f11fbfd__.CLASSES.flag.contentInnerHidden)
298
306
  })), false, true);
299
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$6, ()=>local.children);
307
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$9, ()=>local.children);
300
308
  return _el$;
301
309
  })();
302
310
  };
@@ -1,6 +1,16 @@
1
1
  .glow-card {
2
- --glow-color-border: oklch(100% 0 0 / 0.3);
3
- --glow-color-bg: oklch(100% 0 0 / 0.1);
2
+ --glow-color-border: color-mix(
3
+ in oklab,
4
+ var(--glass-highlight-color, var(--color-base-content))
5
+ var(--glass-border-opacity, 24%),
6
+ transparent
7
+ );
8
+ --glow-color-bg: color-mix(
9
+ in oklab,
10
+ var(--glass-highlight-color, var(--color-base-100))
11
+ var(--glass-background-opacity, 58%),
12
+ transparent
13
+ );
4
14
  position: relative;
5
15
  border-radius: inherit;
6
16
  }
@@ -28,12 +38,8 @@
28
38
  );
29
39
  z-index: 1;
30
40
  inset: -1px;
31
- -webkit-mask:
32
- linear-gradient(#fff 0 0) content-box,
33
- linear-gradient(#fff 0 0);
34
- mask:
35
- linear-gradient(#fff 0 0) content-box,
36
- linear-gradient(#fff 0 0);
41
+ -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
42
+ mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
37
43
  -webkit-mask-composite: xor;
38
44
  mask-composite: exclude;
39
45
  padding: 1px;
@@ -53,14 +59,6 @@
53
59
  opacity: 1;
54
60
  }
55
61
 
56
- [data-theme="light"] .glow-card::before {
57
- --glow-color-border: oklch(30% 0.15 260 / 0.4);
58
- }
59
-
60
- [data-theme="light"] .glow-card::after {
61
- --glow-color-bg: oklch(30% 0.15 260 / 0.15);
62
- }
63
-
64
62
  @media (prefers-reduced-motion: reduce) {
65
63
  .glow-card::before,
66
64
  .glow-card::after {
@@ -6,6 +6,8 @@ export { prefersReducedMotion } from "./reduced-motion";
6
6
  export { defaultMotionTokens, mergeMotionTokens, motionDurations, motionDistances, motionEasings, } from "./tokens";
7
7
  export { getPreset, createMotionPresets, motionPresets, noMotion, registerPreset, resolvePreset, routeTransition, } from "./presets";
8
8
  export { MotionDiv, type MotionDivProps } from "./solid";
9
+ export { Presence, nextPresenceState, type PresenceProps, type PresenceRenderProp, } from "./solid";
10
+ export { AnimatedCollapse, nextCollapsePhase, computeCollapseStyle, type AnimatedCollapseProps, } from "./solid";
9
11
  export { createPopmotionDriver, enablePopmotion, type PopmotionAnimate, } from "./popmotion";
10
12
  export { createMotionSystem, type MotionSystemConfig } from "./system";
11
13
  export { createRouteTransitionResolver, type RouteTransitionRule, type RouteTransitionRuleResult, type RouteTransitionResolverOptions, } from "./route";
@@ -8,7 +8,10 @@ import * as __WEBPACK_EXTERNAL_MODULE__solid_index_js_0e5c9791__ from "./solid/i
8
8
  import * as __WEBPACK_EXTERNAL_MODULE__popmotion_js_a3c50ca9__ from "./popmotion.js";
9
9
  import * as __WEBPACK_EXTERNAL_MODULE__system_js_50c29608__ from "./system.js";
10
10
  import * as __WEBPACK_EXTERNAL_MODULE__route_js_d0361f8a__ from "./route.js";
11
+ var __webpack_exports__AnimatedCollapse = __WEBPACK_EXTERNAL_MODULE__solid_index_js_0e5c9791__.AnimatedCollapse;
11
12
  var __webpack_exports__MotionDiv = __WEBPACK_EXTERNAL_MODULE__solid_index_js_0e5c9791__.MotionDiv;
13
+ var __webpack_exports__Presence = __WEBPACK_EXTERNAL_MODULE__solid_index_js_0e5c9791__.Presence;
14
+ var __webpack_exports__computeCollapseStyle = __WEBPACK_EXTERNAL_MODULE__solid_index_js_0e5c9791__.computeCollapseStyle;
12
15
  var __webpack_exports__createMotionPresets = __WEBPACK_EXTERNAL_MODULE__presets_js_17a1eb8d__.createMotionPresets;
13
16
  var __webpack_exports__createMotionSystem = __WEBPACK_EXTERNAL_MODULE__system_js_50c29608__.createMotionSystem;
14
17
  var __webpack_exports__createPopmotionDriver = __WEBPACK_EXTERNAL_MODULE__popmotion_js_a3c50ca9__.createPopmotionDriver;
@@ -23,6 +26,8 @@ var __webpack_exports__motionDistances = __WEBPACK_EXTERNAL_MODULE__tokens_js_af
23
26
  var __webpack_exports__motionDurations = __WEBPACK_EXTERNAL_MODULE__tokens_js_afbe9ddb__.motionDurations;
24
27
  var __webpack_exports__motionEasings = __WEBPACK_EXTERNAL_MODULE__tokens_js_afbe9ddb__.motionEasings;
25
28
  var __webpack_exports__motionPresets = __WEBPACK_EXTERNAL_MODULE__presets_js_17a1eb8d__.motionPresets;
29
+ var __webpack_exports__nextCollapsePhase = __WEBPACK_EXTERNAL_MODULE__solid_index_js_0e5c9791__.nextCollapsePhase;
30
+ var __webpack_exports__nextPresenceState = __WEBPACK_EXTERNAL_MODULE__solid_index_js_0e5c9791__.nextPresenceState;
26
31
  var __webpack_exports__noMotion = __WEBPACK_EXTERNAL_MODULE__presets_js_17a1eb8d__.noMotion;
27
32
  var __webpack_exports__prefersReducedMotion = __WEBPACK_EXTERNAL_MODULE__reduced_motion_js_6b898224__.prefersReducedMotion;
28
33
  var __webpack_exports__registerPreset = __WEBPACK_EXTERNAL_MODULE__presets_js_17a1eb8d__.registerPreset;
@@ -31,4 +36,4 @@ var __webpack_exports__resolvePreset = __WEBPACK_EXTERNAL_MODULE__presets_js_17a
31
36
  var __webpack_exports__routeTransition = __WEBPACK_EXTERNAL_MODULE__presets_js_17a1eb8d__.routeTransition;
32
37
  var __webpack_exports__runMotion = __WEBPACK_EXTERNAL_MODULE__engine_js_45c545c3__.runMotion;
33
38
  var __webpack_exports__setMotionDriver = __WEBPACK_EXTERNAL_MODULE__driver_js_09718513__.setMotionDriver;
34
- export { __webpack_exports__MotionDiv as MotionDiv, __webpack_exports__createMotionPresets as createMotionPresets, __webpack_exports__createMotionSystem as createMotionSystem, __webpack_exports__createPopmotionDriver as createPopmotionDriver, __webpack_exports__createRouteTransitionResolver as createRouteTransitionResolver, __webpack_exports__defaultMotionTokens as defaultMotionTokens, __webpack_exports__enablePopmotion as enablePopmotion, __webpack_exports__getMotionDriver as getMotionDriver, __webpack_exports__getPreset as getPreset, __webpack_exports__immediateDriver as immediateDriver, __webpack_exports__mergeMotionTokens as mergeMotionTokens, __webpack_exports__motionDistances as motionDistances, __webpack_exports__motionDurations as motionDurations, __webpack_exports__motionEasings as motionEasings, __webpack_exports__motionPresets as motionPresets, __webpack_exports__noMotion as noMotion, __webpack_exports__prefersReducedMotion as prefersReducedMotion, __webpack_exports__registerPreset as registerPreset, __webpack_exports__resolveEase as resolveEase, __webpack_exports__resolvePreset as resolvePreset, __webpack_exports__routeTransition as routeTransition, __webpack_exports__runMotion as runMotion, __webpack_exports__setMotionDriver as setMotionDriver };
39
+ export { __webpack_exports__AnimatedCollapse as AnimatedCollapse, __webpack_exports__MotionDiv as MotionDiv, __webpack_exports__Presence as Presence, __webpack_exports__computeCollapseStyle as computeCollapseStyle, __webpack_exports__createMotionPresets as createMotionPresets, __webpack_exports__createMotionSystem as createMotionSystem, __webpack_exports__createPopmotionDriver as createPopmotionDriver, __webpack_exports__createRouteTransitionResolver as createRouteTransitionResolver, __webpack_exports__defaultMotionTokens as defaultMotionTokens, __webpack_exports__enablePopmotion as enablePopmotion, __webpack_exports__getMotionDriver as getMotionDriver, __webpack_exports__getPreset as getPreset, __webpack_exports__immediateDriver as immediateDriver, __webpack_exports__mergeMotionTokens as mergeMotionTokens, __webpack_exports__motionDistances as motionDistances, __webpack_exports__motionDurations as motionDurations, __webpack_exports__motionEasings as motionEasings, __webpack_exports__motionPresets as motionPresets, __webpack_exports__nextCollapsePhase as nextCollapsePhase, __webpack_exports__nextPresenceState as nextPresenceState, __webpack_exports__noMotion as noMotion, __webpack_exports__prefersReducedMotion as prefersReducedMotion, __webpack_exports__registerPreset as registerPreset, __webpack_exports__resolveEase as resolveEase, __webpack_exports__resolvePreset as resolvePreset, __webpack_exports__routeTransition as routeTransition, __webpack_exports__runMotion as runMotion, __webpack_exports__setMotionDriver as setMotionDriver };
@@ -0,0 +1,35 @@
1
+ import { type JSX } from "solid-js";
2
+ export interface AnimatedCollapseProps {
3
+ /** Whether the panel is expanded. */
4
+ open: boolean;
5
+ children: JSX.Element;
6
+ /** Animation duration in seconds. Default 0.24. */
7
+ duration?: number;
8
+ /** Wrapper class (applied to the height-animated container). */
9
+ class?: string;
10
+ /** Inner content class (applied to the measured content wrapper). */
11
+ contentClass?: string;
12
+ /** Cross-fade content during open/close. Default true. */
13
+ animateOpacity?: boolean;
14
+ /** Remove content from the tree when fully closed. Default false. */
15
+ unmountOnExit?: boolean;
16
+ /** Forwarded to the wrapper element. */
17
+ id?: string;
18
+ /** Override for prefers-reduced-motion detection. */
19
+ reduceMotion?: boolean;
20
+ }
21
+ type CollapsePhase = "closed" | "opening" | "open" | "closing";
22
+ /**
23
+ * Pure: returns the next collapse phase given the previous phase and target
24
+ * `open`. Exposed for unit testing.
25
+ */
26
+ export declare const nextCollapsePhase: (prev: CollapsePhase, open: boolean) => CollapsePhase;
27
+ /**
28
+ * Pure: computes the inline style for the collapse wrapper based on phase,
29
+ * measured height (px), and opacity preference. `null` means "no inline
30
+ * height — let layout flow" (used while fully open with dynamic content).
31
+ * Exposed for unit testing.
32
+ */
33
+ export declare const computeCollapseStyle: (phase: CollapsePhase, heightPx: number | null, animateOpacity: boolean) => JSX.CSSProperties;
34
+ export declare const AnimatedCollapse: (props: AnimatedCollapseProps) => JSX.Element;
35
+ export default AnimatedCollapse;