@a4ui/core 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/commerce.js CHANGED
@@ -1,7 +1,7 @@
1
- import { insert as n, createComponent as c, memo as A, effect as v, className as b, template as o, delegateEvents as y, setAttribute as x } from "solid-js/web";
2
- import { Show as g, For as C } from "solid-js";
1
+ import { insert as n, createComponent as i, memo as A, effect as v, className as b, template as o, delegateEvents as y, setAttribute as x } from "solid-js/web";
2
+ import { Show as s, For as C } from "solid-js";
3
3
  import { c as h } from "./cn-B6yFEsav.js";
4
- import { B as T, C as N, R as E, a as S, b as I } from "./Checkbox-B5Gb3h5J.js";
4
+ import { B as T, C as N, R as E, a as S, b as I } from "./Checkbox-DMx0y81E.js";
5
5
  import { Minus as R, Plus as F, Trash2 as U } from "lucide-solid";
6
6
  var j = /* @__PURE__ */ o('<span class="text-muted-foreground line-through">'), q = /* @__PURE__ */ o("<div><span>");
7
7
  const B = {
@@ -16,24 +16,24 @@ function k(e) {
16
16
  }).format(u), l = () => (e.compareAt ?? 0) > e.amount, t = () => Math.round((1 - e.amount / e.compareAt) * 100);
17
17
  return (() => {
18
18
  var u = q(), d = u.firstChild;
19
- return n(d, () => r(e.amount)), n(u, c(g, {
19
+ return n(d, () => r(e.amount)), n(u, i(s, {
20
20
  get when() {
21
21
  return l();
22
22
  },
23
23
  get children() {
24
24
  return [(() => {
25
- var i = j();
26
- return n(i, () => r(e.compareAt)), i;
27
- })(), c(T, {
25
+ var c = j();
26
+ return n(c, () => r(e.compareAt)), c;
27
+ })(), i(T, {
28
28
  tone: "danger",
29
29
  get children() {
30
30
  return ["-", A(() => t()), "%"];
31
31
  }
32
32
  })];
33
33
  }
34
- }), null), v((i) => {
34
+ }), null), v((c) => {
35
35
  var a = h("inline-flex items-center gap-2", e.class), m = h("font-bold text-foreground", B[e.size ?? "md"]);
36
- return a !== i.e && b(u, i.e = a), m !== i.t && b(d, i.t = m), i;
36
+ return a !== c.e && b(u, c.e = a), m !== c.t && b(d, c.t = m), c;
37
37
  }, {
38
38
  e: void 0,
39
39
  t: void 0
@@ -42,21 +42,21 @@ function k(e) {
42
42
  }
43
43
  var M = /* @__PURE__ */ o('<div><button type=button aria-label="Decrease quantity"class="grid h-8 w-8 place-items-center hover:bg-muted disabled:opacity-40"></button><span class="grid min-w-[2.5rem] place-items-center tabular-nums"></span><button type=button aria-label="Increase quantity"class="grid h-8 w-8 place-items-center hover:bg-muted disabled:opacity-40">');
44
44
  function P(e) {
45
- const r = () => e.min ?? 0, l = () => e.max ?? Number.MAX_SAFE_INTEGER, t = (i) => Math.min(l(), Math.max(r(), i)), u = () => e.onChange(t(e.value - 1)), d = () => e.onChange(t(e.value + 1));
45
+ const r = () => e.min ?? 0, l = () => e.max ?? Number.MAX_SAFE_INTEGER, t = (c) => Math.min(l(), Math.max(r(), c)), u = () => e.onChange(t(e.value - 1)), d = () => e.onChange(t(e.value + 1));
46
46
  return (() => {
47
- var i = M(), a = i.firstChild, m = a.nextSibling, f = m.nextSibling;
48
- return a.$$click = u, n(a, c(R, {
47
+ var c = M(), a = c.firstChild, m = a.nextSibling, f = m.nextSibling;
48
+ return a.$$click = u, n(a, i(R, {
49
49
  class: "h-4 w-4"
50
- })), n(m, () => e.value), f.$$click = d, n(f, c(F, {
50
+ })), n(m, () => e.value), f.$$click = d, n(f, i(F, {
51
51
  class: "h-4 w-4"
52
- })), v((s) => {
52
+ })), v((g) => {
53
53
  var $ = h("inline-flex items-stretch rounded-md border border-input", e.class), _ = e.disabled || e.value <= r(), w = e.disabled || e.value >= l();
54
- return $ !== s.e && b(i, s.e = $), _ !== s.t && (a.disabled = s.t = _), w !== s.a && (f.disabled = s.a = w), s;
54
+ return $ !== g.e && b(c, g.e = $), _ !== g.t && (a.disabled = g.t = _), w !== g.a && (f.disabled = g.a = w), g;
55
55
  }, {
56
56
  e: void 0,
57
57
  t: void 0,
58
58
  a: void 0
59
- }), i;
59
+ }), c;
60
60
  })();
61
61
  }
62
62
  y(["click"]);
@@ -72,16 +72,22 @@ function X(e, r) {
72
72
  return /sale|off|%|deal/.test(l) ? "sale" : /new/.test(l) ? "new" : "featured";
73
73
  }
74
74
  function ue(e) {
75
- return c(N, {
75
+ return i(N, {
76
76
  glass: !0,
77
77
  glow: !0,
78
+ get tilt() {
79
+ return e.tilt;
80
+ },
81
+ get spotlight() {
82
+ return e.spotlight;
83
+ },
78
84
  get class() {
79
85
  return h("flex h-full flex-col overflow-hidden p-4", e.class);
80
86
  },
81
87
  get children() {
82
88
  return [(() => {
83
89
  var r = L(), l = r.firstChild;
84
- return n(r, c(g, {
90
+ return n(r, i(s, {
85
91
  get when() {
86
92
  return e.badge;
87
93
  },
@@ -98,7 +104,7 @@ function ue(e) {
98
104
  }), r;
99
105
  })(), (() => {
100
106
  var r = O(), l = r.firstChild;
101
- return n(r, c(g, {
107
+ return n(r, i(s, {
102
108
  get when() {
103
109
  return e.brand;
104
110
  },
@@ -106,7 +112,7 @@ function ue(e) {
106
112
  var t = z();
107
113
  return n(t, () => e.brand), t;
108
114
  }
109
- }), l), n(l, () => e.title), n(r, c(g, {
115
+ }), l), n(l, () => e.title), n(r, i(s, {
110
116
  get when() {
111
117
  return e.category;
112
118
  },
@@ -114,12 +120,12 @@ function ue(e) {
114
120
  var t = G();
115
121
  return n(t, () => e.category), t;
116
122
  }
117
- }), null), n(r, c(g, {
123
+ }), null), n(r, i(s, {
118
124
  get when() {
119
125
  return e.rating !== void 0;
120
126
  },
121
127
  get children() {
122
- return c(E, {
128
+ return i(E, {
123
129
  get value() {
124
130
  return e.rating;
125
131
  },
@@ -127,7 +133,7 @@ function ue(e) {
127
133
  max: 5
128
134
  });
129
135
  }
130
- }), null), n(r, c(k, {
136
+ }), null), n(r, i(k, {
131
137
  get amount() {
132
138
  return e.price;
133
139
  },
@@ -140,12 +146,12 @@ function ue(e) {
140
146
  get locale() {
141
147
  return e.locale;
142
148
  }
143
- }), null), n(r, c(g, {
149
+ }), null), n(r, i(s, {
144
150
  get when() {
145
151
  return e.onAddToCart;
146
152
  },
147
153
  get children() {
148
- return c(S, {
154
+ return i(S, {
149
155
  class: "mt-auto w-full",
150
156
  onClick: () => {
151
157
  var t;
@@ -160,35 +166,35 @@ function ue(e) {
160
166
  });
161
167
  }
162
168
  var Z = /* @__PURE__ */ o("<div>");
163
- function ce(e) {
169
+ function ie(e) {
164
170
  return (() => {
165
171
  var r = Z();
166
172
  return n(r, () => e.children), v(() => b(r, h("grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4", e.class))), r;
167
173
  })();
168
174
  }
169
175
  var H = /* @__PURE__ */ o('<img class="h-16 w-16 shrink-0 rounded-md bg-muted object-cover">'), J = /* @__PURE__ */ o('<button type=button aria-label="Remove item"class="text-muted-foreground hover:text-foreground">'), K = /* @__PURE__ */ o('<div><div class="min-w-[8rem] flex-1"><p class="line-clamp-1 font-medium text-foreground"></p></div><span class="min-w-[4rem] text-right font-medium tabular-nums text-foreground">');
170
- function ie(e) {
176
+ function ce(e) {
171
177
  const r = () => e.price * e.quantity, l = (t) => new Intl.NumberFormat(e.locale ?? "en-US", {
172
178
  style: "currency",
173
179
  currency: e.currency ?? "USD"
174
180
  }).format(t);
175
181
  return (() => {
176
- var t = K(), u = t.firstChild, d = u.firstChild, i = u.nextSibling;
177
- return n(t, c(g, {
182
+ var t = K(), u = t.firstChild, d = u.firstChild, c = u.nextSibling;
183
+ return n(t, i(s, {
178
184
  get when() {
179
185
  return e.image;
180
186
  },
181
187
  get children() {
182
188
  var a = H();
183
189
  return v((m) => {
184
- var f = e.image, s = e.title;
185
- return f !== m.e && x(a, "src", m.e = f), s !== m.t && x(a, "alt", m.t = s), m;
190
+ var f = e.image, g = e.title;
191
+ return f !== m.e && x(a, "src", m.e = f), g !== m.t && x(a, "alt", m.t = g), m;
186
192
  }, {
187
193
  e: void 0,
188
194
  t: void 0
189
195
  }), a;
190
196
  }
191
- }), u), n(d, () => e.title), n(u, c(k, {
197
+ }), u), n(d, () => e.title), n(u, i(k, {
192
198
  get amount() {
193
199
  return e.price;
194
200
  },
@@ -199,7 +205,7 @@ function ie(e) {
199
205
  return e.locale;
200
206
  },
201
207
  size: "sm"
202
- }), null), n(t, c(P, {
208
+ }), null), n(t, i(P, {
203
209
  get value() {
204
210
  return e.quantity;
205
211
  },
@@ -208,7 +214,7 @@ function ie(e) {
208
214
  return (m = e.onQuantityChange) == null ? void 0 : m.call(e, a);
209
215
  },
210
216
  min: 1
211
- }), i), n(i, () => l(r())), n(t, c(g, {
217
+ }), c), n(c, () => l(r())), n(t, i(s, {
212
218
  get when() {
213
219
  return e.onRemove;
214
220
  },
@@ -217,7 +223,7 @@ function ie(e) {
217
223
  return a.$$click = () => {
218
224
  var m;
219
225
  return (m = e.onRemove) == null ? void 0 : m.call(e);
220
- }, n(a, c(U, {
226
+ }, n(a, i(U, {
221
227
  class: "h-4 w-4"
222
228
  })), a;
223
229
  }
@@ -232,21 +238,21 @@ function de(e) {
232
238
  currency: e.currency ?? "USD"
233
239
  }).format(l);
234
240
  return (() => {
235
- var l = V(), t = l.firstChild, u = t.nextSibling, d = u.firstChild, i = d.nextSibling;
236
- return n(l, c(C, {
241
+ var l = V(), t = l.firstChild, u = t.nextSibling, d = u.firstChild, c = d.nextSibling;
242
+ return n(l, i(C, {
237
243
  get each() {
238
244
  return e.lines;
239
245
  },
240
246
  children: (a) => (() => {
241
- var m = W(), f = m.firstChild, s = f.nextSibling;
242
- return n(f, () => a.label), n(s, () => r(a.amount)), m;
247
+ var m = W(), f = m.firstChild, g = f.nextSibling;
248
+ return n(f, () => a.label), n(g, () => r(a.amount)), m;
243
249
  })()
244
- }), t), n(i, () => r(e.total)), n(l, c(g, {
250
+ }), t), n(c, () => r(e.total)), n(l, i(s, {
245
251
  get when() {
246
252
  return e.onCheckout;
247
253
  },
248
254
  get children() {
249
- return c(S, {
255
+ return i(S, {
250
256
  class: "mt-4 w-full",
251
257
  onClick: () => {
252
258
  var a;
@@ -268,13 +274,13 @@ function me(e) {
268
274
  };
269
275
  return (() => {
270
276
  var l = Y(), t = l.firstChild, u = t.nextSibling;
271
- return n(t, () => e.title), n(u, c(C, {
277
+ return n(t, () => e.title), n(u, i(C, {
272
278
  get each() {
273
279
  return e.options;
274
280
  },
275
281
  children: (d) => (() => {
276
- var i = ee();
277
- return n(i, c(I, {
282
+ var c = ee();
283
+ return n(c, i(I, {
278
284
  get checked() {
279
285
  return e.selected.includes(d.value);
280
286
  },
@@ -282,7 +288,7 @@ function me(e) {
282
288
  get label() {
283
289
  return d.label;
284
290
  }
285
- }), null), n(i, c(g, {
291
+ }), null), n(c, i(s, {
286
292
  get when() {
287
293
  return d.count != null;
288
294
  },
@@ -290,17 +296,17 @@ function me(e) {
290
296
  var a = p();
291
297
  return n(a, () => d.count), a;
292
298
  }
293
- }), null), i;
299
+ }), null), c;
294
300
  })()
295
301
  })), v(() => b(l, h("space-y-2", e.class))), l;
296
302
  })();
297
303
  }
298
304
  export {
299
- ie as CartLine,
305
+ ce as CartLine,
300
306
  de as CartSummary,
301
307
  me as FilterGroup,
302
308
  k as PriceTag,
303
309
  ue as ProductCard,
304
- ce as ProductGrid,
310
+ ie as ProductGrid,
305
311
  P as QuantityStepper
306
312
  };
package/dist/elements.css CHANGED
@@ -163,6 +163,72 @@ body {
163
163
  animation: toast-out 0.18s ease-in;
164
164
  }
165
165
 
166
+ /* Skeleton shimmer — a light band sweeping across the placeholder (opt-in
167
+ alternative to the default pulse). The band color is token-driven so it reads
168
+ on every theme; the sweep is a pure CSS animation (no engine). */
169
+ @keyframes skeleton-shimmer {
170
+ 100% {
171
+ transform: translateX(100%);
172
+ }
173
+ }
174
+ .skeleton-shimmer {
175
+ position: relative;
176
+ overflow: hidden;
177
+ }
178
+ .skeleton-shimmer::after {
179
+ content: '';
180
+ position: absolute;
181
+ inset: 0;
182
+ transform: translateX(-100%);
183
+ background: linear-gradient(90deg, transparent, hsl(var(--foreground) / 0.08), transparent);
184
+ animation: skeleton-shimmer 1.5s ease-in-out infinite;
185
+ }
186
+
187
+ /* Accordion open/close — animate the panel height using Kobalte's measured
188
+ `--kb-accordion-content-height` var (presence keyed off data-expanded/closed,
189
+ animationend-driven like Modal). Engine-free. */
190
+ @keyframes accordion-down {
191
+ from {
192
+ height: 0;
193
+ }
194
+ to {
195
+ height: var(--kb-accordion-content-height);
196
+ }
197
+ }
198
+ @keyframes accordion-up {
199
+ from {
200
+ height: var(--kb-accordion-content-height);
201
+ }
202
+ to {
203
+ height: 0;
204
+ }
205
+ }
206
+ .accordion-content {
207
+ overflow: hidden;
208
+ }
209
+ .accordion-content[data-expanded] {
210
+ animation: accordion-down 0.2s ease-out;
211
+ }
212
+ .accordion-content[data-closed] {
213
+ animation: accordion-up 0.2s ease-out;
214
+ }
215
+
216
+ /* List stagger — rows fade/slide in on mount, delayed per index (set inline as
217
+ `animation-delay`). Opt-in via <List stagger>. */
218
+ @keyframes list-row-in {
219
+ from {
220
+ opacity: 0;
221
+ transform: translateY(6px);
222
+ }
223
+ to {
224
+ opacity: 1;
225
+ transform: none;
226
+ }
227
+ }
228
+ .list-row-stagger {
229
+ animation: list-row-in 0.35s both ease-out;
230
+ }
231
+
166
232
  /* Table row enter/exit fade. */
167
233
  .row-enter-active,
168
234
  .row-exit-active {
@@ -1935,9 +2001,24 @@ html.calm .tile-glass {
1935
2001
  --tw-rotate: 90deg;
1936
2002
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1937
2003
  }
2004
+ .scale-\[1\.03\] {
2005
+ --tw-scale-x: 1.03;
2006
+ --tw-scale-y: 1.03;
2007
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
2008
+ }
1938
2009
  .transform {
1939
2010
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
1940
2011
  }
2012
+ @keyframes ping {
2013
+
2014
+ 75%, 100% {
2015
+ transform: scale(2);
2016
+ opacity: 0;
2017
+ }
2018
+ }
2019
+ .animate-ping {
2020
+ animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
2021
+ }
1941
2022
  @keyframes pulse {
1942
2023
 
1943
2024
  50% {
@@ -1974,6 +2055,10 @@ html.calm .tile-glass {
1974
2055
  .cursor-zoom-in {
1975
2056
  cursor: zoom-in;
1976
2057
  }
2058
+ .touch-pan-y {
2059
+ --tw-pan-y: pan-y;
2060
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
2061
+ }
1977
2062
  .select-none {
1978
2063
  user-select: none;
1979
2064
  }
@@ -1998,6 +2083,12 @@ html.calm .tile-glass {
1998
2083
  .grid-cols-7 {
1999
2084
  grid-template-columns: repeat(7, minmax(0, 1fr));
2000
2085
  }
2086
+ .grid-rows-\[0fr\] {
2087
+ grid-template-rows: 0fr;
2088
+ }
2089
+ .grid-rows-\[1fr\] {
2090
+ grid-template-rows: 1fr;
2091
+ }
2001
2092
  .flex-row {
2002
2093
  flex-direction: row;
2003
2094
  }
@@ -2801,6 +2892,10 @@ html.calm .tile-glass {
2801
2892
  --tw-blur: blur(8px);
2802
2893
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2803
2894
  }
2895
+ .blur-lg {
2896
+ --tw-blur: blur(16px);
2897
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
2898
+ }
2804
2899
  .brightness-110 {
2805
2900
  --tw-brightness: brightness(1.1);
2806
2901
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
@@ -2841,6 +2936,16 @@ html.calm .tile-glass {
2841
2936
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2842
2937
  transition-duration: 150ms;
2843
2938
  }
2939
+ .transition-\[filter\2c transform\] {
2940
+ transition-property: filter,transform;
2941
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2942
+ transition-duration: 150ms;
2943
+ }
2944
+ .transition-\[grid-template-rows\] {
2945
+ transition-property: grid-template-rows;
2946
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
2947
+ transition-duration: 150ms;
2948
+ }
2844
2949
  .transition-\[transform\2c opacity\] {
2845
2950
  transition-property: transform,opacity;
2846
2951
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -3075,6 +3180,12 @@ html.calm .tile-glass {
3075
3180
  .data-\[disabled\]\:opacity-50[data-disabled] {
3076
3181
  opacity: 0.5;
3077
3182
  }
3183
+ @media (prefers-reduced-motion: reduce) {
3184
+
3185
+ .motion-reduce\:transition-none {
3186
+ transition-property: none;
3187
+ }
3188
+ }
3078
3189
  @media (min-width: 640px) {
3079
3190
 
3080
3191
  .sm\:grid-cols-2 {