@frontfriend/sdk 1.2.8 → 1.3.1

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,8 +1,557 @@
1
- var h=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var g=h((D,y)=>{function f(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function p(e,n){if(!f(e)||!f(n))return n===void 0?e:n;let o={...e};for(let[r,a]of Object.entries(n))o[r]=r in o?p(o[r],a):a;return o}function u(e,n,o=[],r=[]){if(e===void 0||n===void 0)return r;if(!f(e)||!f(n))return r.push(o.join(".")),r;for(let a of Object.keys(e))a in n&&u(e[a],n[a],[...o,a],r);return r}function m(e){return f(e)&&("styles"in e||"behavior"in e)}function b(e,n="component"){if(!m(e)||!f(e.styles)||e.behavior!==void 0&&!f(e.behavior)||Object.keys(e).some(r=>!["styles","behavior"].includes(r)))throw new TypeError(`Component ${n} must use the styles/behavior envelope`);let o=u(e.styles,e.behavior,[n]);if(o.length>0)throw new Error(`Component config styles/behavior conflict at ${o.join(", ")}`);return p(e.styles||{},e.behavior||{})}function E(e){if(!f(e))return e;let n=!1,o={};for(let[r,a]of Object.entries(e))o[r]=b(a,r),o[r]!==a&&(n=!0);return n?o:e}y.exports={isPlainObject:f,deepMerge:p,findTreeConflicts:u,isComponentEnvelope:m,toRuntimeComponentConfig:b,toRuntimeComponentsConfig:E}});var C=h((Z,j)=>{var w=["open","closed","checked","unchecked","indeterminate","active"],A={open:['[data-expanded]:not([data-expanded="false"])','[data-popup-open]:not([data-popup-open="false"])','[data-panel-open]:not([data-panel-open="false"])']},S="on",T=["/* Dark mode follows the root class the theme picker toggles. */","@custom-variant dark {"," &:is(.dark, .dark *) {"," @slot;"," }","}",""],d=[...T,"/* Cross-primitive state variants (Radix `data-state=x`, Base UI `data-x`). */",...w.flatMap(e=>{let n=[`[data-state="${e}"]`,`[data-${e}]:not([data-${e}="false"])`,...A[e]||[]];return[`@custom-variant data-${e} {`,...n.map((o,r)=>` &:where(${o})${r===n.length-1?" {":","}`)," @slot;"," }","}",""]}),`@custom-variant data-${S} {`,' &:where([data-state="on"]),',' &:where([aria-pressed="true"]) {'," @slot;"," }","}","","@custom-variant data-selected {",' &:where([data-selected="true"]) {'," @slot;"," }","}","","@custom-variant data-disabled {",' &:where([data-disabled="true"]),',' &:where([data-disabled]:not([data-disabled="false"])) {'," @slot;"," }","}","",...["horizontal","vertical"].flatMap(e=>[`@custom-variant data-${e} {`,` &:where([data-orientation="${e}"]) {`," @slot;"," }","}",""])],$=d.filter(e=>e.startsWith("@custom-variant ")).map(e=>e.slice(16).replace(" {",""));function R(){return d.join(`
2
- `)}j.exports={CROSS_PRIMITIVE_STATES:w,DARK_VARIANT_CSS:T,EXTRA_STATE_MATCHERS:A,PRESSED_STATE:S,STATE_VARIANT_CSS:d,STATE_VARIANT_NAMES:$,stateVariantCss:R}});var{findTreeConflicts:v}=g();function k(e){return String(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function _(e,n){let o=e.length-1,r=e.filter((a,l)=>(l===o||!["styles","slots","variants"].includes(a))&&a!=="root");return[n,...r.map(k)].filter(Boolean).join("-")}function M(e){let n=[],o=[];for(let r of e.trim().split(/\s+/))/^(group|peer)(?:\/[^\s]+)?$/.test(r)?n.push(r):o.push(r);return{passthrough:n,recipe:o}}function O(e,n={}){let o=n.prefix||"ff",r=new Map;function a(i,t){if(typeof i=="string"){let s=_(t,o),c=M(i);return r.set(s,{className:c.recipe.join(" "),depth:t.length,base:t[t.length-1]==="root"}),[s,...c.passthrough].join(" ")}if(Array.isArray(i))return i.map((s,c)=>a(s,[...t,String(c)]));if(!i||typeof i!="object")throw new Error(`Style value at ${t.join(".")} must be a string or object`);return Object.fromEntries(Object.entries(i).map(([s,c])=>[s,a(c,[...t,s])]))}let l={};for(let[i,t]of Object.entries(e||{})){if(!t||typeof t!="object"||!("styles"in t))throw new Error(`Component ${i} must use the styles/behavior envelope`);let s=v(t.styles,t.behavior,[i]);if(s.length>0)throw new Error(`Component config styles/behavior conflict at ${s.join(", ")}`);l[i]={styles:a(t.styles,[i,"styles"]),...t.behavior===void 0?{}:{behavior:t.behavior}}}return{config:l,classes:Object.fromEntries([...r.entries()].sort(([,i],[,t])=>i.depth-t.depth||Number(t.base)-Number(i.base)).map(([i,t])=>[i,t.className]))}}function x(e,n=[]){let o=new Map(e.map(([t],s)=>[t,s])),r=new Map(e.map(([t])=>[t,0])),a=new Map(e.map(([t])=>[t,[]]));for(let t of n){let s=t.filter(c=>o.has(c));for(let c=1;c<s.length;c+=1)a.get(s[c-1]).push(s[c]),r.set(s[c],r.get(s[c])+1)}let l=e.map(([t])=>t).filter(t=>r.get(t)===0),i=[];for(;l.length>0;){l.sort((s,c)=>o.get(s)-o.get(c));let t=l.shift();i.push(e[o.get(t)]);for(let s of a.get(t))r.set(s,r.get(s)-1),r.get(s)===0&&l.push(s)}if(i.length!==e.length){let t=e.map(([s])=>s).filter(s=>r.get(s)>0);throw new Error(`Recipe order has a cycle between ${t.join(", ")}`)}return i}function N(e,n={}){let o=n.scope||"default";if(!/^[a-zA-Z0-9_-]+$/.test(o))throw new Error("Recipe scope may only contain letters, numbers, dashes, and underscores");return`@layer base {
3
- ${x(Object.entries(e).filter(([,a])=>typeof a=="string"&&a.trim()),n.order).map(([a,l])=>` :where([data-ff-recipe="${o}"]) .${a} {
4
- @apply ${l.trim()};
1
+ var d=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var h=d((L,k)=>{function m(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function f(e,r){if(!m(e)||!m(r))return r===void 0?e:r;let s={...e};for(let[l,i]of Object.entries(r))s[l]=l in s?f(s[l],i):i;return s}function p(e,r,s=[],l=[]){if(e===void 0||r===void 0)return l;if(!m(e)||!m(r))return l.push(s.join(".")),l;for(let i of Object.keys(e))i in r&&p(e[i],r[i],[...s,i],l);return l}function u(e){return m(e)&&("styles"in e||"behavior"in e)}function g(e,r="component"){if(!u(e)||!m(e.styles)||e.behavior!==void 0&&!m(e.behavior)||Object.keys(e).some(l=>!["styles","behavior"].includes(l)))throw new TypeError(`Component ${r} must use the styles/behavior envelope`);let s=p(e.styles,e.behavior,[r]);if(s.length>0)throw new Error(`Component config styles/behavior conflict at ${s.join(", ")}`);return f(e.styles||{},e.behavior||{})}function T(e){if(!m(e))return e;let r=!1,s={};for(let[l,i]of Object.entries(e))s[l]=g(i,l),s[l]!==i&&(r=!0);return r?s:e}k.exports={isPlainObject:m,deepMerge:f,findTreeConflicts:p,isComponentEnvelope:u,toRuntimeComponentConfig:g,toRuntimeComponentsConfig:T}});var x=d((F,w)=>{var b=["open","closed","checked","unchecked","indeterminate","active"],y={open:['[data-expanded]:not([data-expanded="false"])','[data-popup-open]:not([data-popup-open="false"])','[data-panel-open]:not([data-panel-open="false"])']},_="on",z=["/* Dark mode follows the root class the theme picker toggles. */","@custom-variant dark {"," &:is(.dark, .dark *) {"," @slot;"," }","}",""],v=[...z,"/* Cross-primitive state variants (Radix `data-state=x`, Base UI `data-x`). */",...b.flatMap(e=>{let r=[`[data-state="${e}"]`,`[data-${e}]:not([data-${e}="false"])`,...y[e]||[]];return[`@custom-variant data-${e} {`,...r.map((s,l)=>` &:where(${s})${l===r.length-1?" {":","}`)," @slot;"," }","}",""]}),`@custom-variant data-${_} {`,' &:where([data-state="on"]),',' &:where([aria-pressed="true"]) {'," @slot;"," }","}","","@custom-variant data-selected {",' &:where([data-selected="true"]) {'," @slot;"," }","}","","@custom-variant data-disabled {",' &:where([data-disabled="true"]),',' &:where([data-disabled]:not([data-disabled="false"])) {'," @slot;"," }","}","",...["horizontal","vertical"].flatMap(e=>[`@custom-variant data-${e} {`,` &:where([data-orientation="${e}"]) {`," @slot;"," }","}",""])],S=v.filter(e=>e.startsWith("@custom-variant ")).map(e=>e.slice(16).replace(" {",""));function j(){return v.join(`
2
+ `)}w.exports={CROSS_PRIMITIVE_STATES:b,DARK_VARIANT_CSS:z,EXTRA_STATE_MATCHERS:y,PRESSED_STATE:_,STATE_VARIANT_CSS:v,STATE_VARIANT_NAMES:S,stateVariantCss:j}});var A=d((H,C)=>{var E=`
3
+ @property --scroll-fade-t {
4
+ syntax: "<length-percentage>";
5
+ inherits: false;
6
+ initial-value: 0px;
7
+ }
8
+ @property --scroll-fade-b {
9
+ syntax: "<length-percentage>";
10
+ inherits: false;
11
+ initial-value: 0px;
12
+ }
13
+ @property --scroll-fade-s {
14
+ syntax: "<length-percentage>";
15
+ inherits: false;
16
+ initial-value: 0px;
17
+ }
18
+ @property --scroll-fade-e {
19
+ syntax: "<length-percentage>";
20
+ inherits: false;
21
+ initial-value: 0px;
22
+ }
23
+ @property --scroll-fade-mask {
24
+ syntax: "*";
25
+ inherits: false;
26
+ }
27
+
28
+ @layer theme {
29
+ @keyframes scroll-fade-reveal-t {
30
+ from {
31
+ --scroll-fade-t: 0px;
32
+ }
33
+ to {
34
+ --scroll-fade-t: var(--_scroll-fade-size-t, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
35
+ }
36
+ }
37
+ @keyframes scroll-fade-reveal-b {
38
+ from {
39
+ --scroll-fade-b: var(--_scroll-fade-size-b, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
40
+ }
41
+ to {
42
+ --scroll-fade-b: 0px;
43
+ }
44
+ }
45
+ @keyframes scroll-fade-reveal-s {
46
+ from {
47
+ --scroll-fade-s: 0px;
48
+ }
49
+ to {
50
+ --scroll-fade-s: var(--_scroll-fade-size-s, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
51
+ }
52
+ }
53
+ @keyframes scroll-fade-reveal-e {
54
+ from {
55
+ --scroll-fade-e: var(--_scroll-fade-size-e, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
56
+ }
57
+ to {
58
+ --scroll-fade-e: 0px;
59
+ }
60
+ }
61
+ }
62
+
63
+ @utility scroll-fade {
64
+ --_scroll-fade-size-t: var(
65
+ --scroll-fade-t-size,
66
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
67
+ );
68
+ --_scroll-fade-size-b: var(
69
+ --scroll-fade-b-size,
70
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
71
+ );
72
+ --scroll-fade-block: linear-gradient(
73
+ to bottom,
74
+ transparent 0,
75
+ #000 var(--scroll-fade-t, 0px),
76
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
77
+ transparent 100%
78
+ );
79
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
80
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
81
+ -webkit-mask-composite: source-in;
82
+ mask-composite: intersect;
83
+ -webkit-mask-repeat: no-repeat;
84
+ mask-repeat: no-repeat;
85
+
86
+ @supports (animation-timeline: scroll()) {
87
+ animation:
88
+ scroll-fade-reveal-t 1ms ease-in-out,
89
+ scroll-fade-reveal-b 1ms ease-in-out;
90
+ --_scroll-fade-timeline: scroll(self y), scroll(self y);
91
+ animation-timeline: var(--_scroll-fade-timeline);
92
+ animation-range:
93
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
94
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
95
+ animation-fill-mode: both;
96
+ }
97
+
98
+ @supports not (animation-timeline: scroll()) {
99
+ --scroll-fade-t: var(--_scroll-fade-size-t);
100
+ --scroll-fade-b: var(--_scroll-fade-size-b);
101
+ }
102
+ }
103
+
104
+ @utility scroll-fade-y {
105
+ --_scroll-fade-size-t: var(
106
+ --scroll-fade-t-size,
107
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
108
+ );
109
+ --_scroll-fade-size-b: var(
110
+ --scroll-fade-b-size,
111
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
112
+ );
113
+ --scroll-fade-block: linear-gradient(
114
+ to bottom,
115
+ transparent 0,
116
+ #000 var(--scroll-fade-t, 0px),
117
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
118
+ transparent 100%
119
+ );
120
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
121
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
122
+ -webkit-mask-composite: source-in;
123
+ mask-composite: intersect;
124
+ -webkit-mask-repeat: no-repeat;
125
+ mask-repeat: no-repeat;
126
+
127
+ @supports (animation-timeline: scroll()) {
128
+ animation:
129
+ scroll-fade-reveal-t 1ms ease-in-out,
130
+ scroll-fade-reveal-b 1ms ease-in-out;
131
+ --_scroll-fade-timeline: scroll(self y), scroll(self y);
132
+ animation-timeline: var(--_scroll-fade-timeline);
133
+ animation-range:
134
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
135
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
136
+ animation-fill-mode: both;
137
+ }
138
+
139
+ @supports not (animation-timeline: scroll()) {
140
+ --scroll-fade-t: var(--_scroll-fade-size-t);
141
+ --scroll-fade-b: var(--_scroll-fade-size-b);
142
+ }
143
+ }
144
+
145
+ @utility scroll-fade-x {
146
+ --_scroll-fade-size-s: var(
147
+ --scroll-fade-s-size,
148
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
149
+ );
150
+ --_scroll-fade-size-e: var(
151
+ --scroll-fade-e-size,
152
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
153
+ );
154
+ --scroll-fade-inline: linear-gradient(
155
+ to right,
156
+ transparent 0,
157
+ #000 var(--scroll-fade-s, 0px),
158
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
159
+ transparent 100%
160
+ );
161
+ &:where([dir="rtl"], [dir="rtl"] *) {
162
+ --scroll-fade-inline: linear-gradient(
163
+ to left,
164
+ transparent 0,
165
+ #000 var(--scroll-fade-s, 0px),
166
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
167
+ transparent 100%
168
+ );
169
+ }
170
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
171
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
172
+ -webkit-mask-composite: source-in;
173
+ mask-composite: intersect;
174
+ -webkit-mask-repeat: no-repeat;
175
+ mask-repeat: no-repeat;
176
+
177
+ @supports (animation-timeline: scroll()) {
178
+ animation:
179
+ scroll-fade-reveal-s 1ms ease-in-out,
180
+ scroll-fade-reveal-e 1ms ease-in-out;
181
+ --_scroll-fade-timeline: scroll(self inline), scroll(self inline);
182
+ animation-timeline: var(--_scroll-fade-timeline);
183
+ animation-range:
184
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
185
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
186
+ animation-fill-mode: both;
187
+ }
188
+
189
+ @supports not (animation-timeline: scroll()) {
190
+ --scroll-fade-s: var(--_scroll-fade-size-s);
191
+ --scroll-fade-e: var(--_scroll-fade-size-e);
192
+ }
193
+ }
194
+
195
+ @utility scroll-fade-t {
196
+ --_scroll-fade-size-t: var(
197
+ --scroll-fade-t-size,
198
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
199
+ );
200
+ --scroll-fade-mask: linear-gradient(
201
+ to bottom,
202
+ transparent 0,
203
+ #000 var(--scroll-fade-t, 0px),
204
+ #000 100%
205
+ );
206
+ -webkit-mask-image: var(--scroll-fade-mask);
207
+ mask-image: var(--scroll-fade-mask);
208
+ -webkit-mask-composite: source-in;
209
+ mask-composite: intersect;
210
+ -webkit-mask-repeat: no-repeat;
211
+ mask-repeat: no-repeat;
212
+
213
+ @supports (animation-timeline: scroll()) {
214
+ animation: scroll-fade-reveal-t 1ms ease-in-out;
215
+ --_scroll-fade-timeline: scroll(self y);
216
+ animation-timeline: var(--_scroll-fade-timeline);
217
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
218
+ animation-fill-mode: both;
219
+ }
220
+
221
+ @supports not (animation-timeline: scroll()) {
222
+ --scroll-fade-t: var(--_scroll-fade-size-t);
223
+ }
224
+ }
225
+
226
+ @utility scroll-fade-b {
227
+ --_scroll-fade-size-b: var(
228
+ --scroll-fade-b-size,
229
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
230
+ );
231
+ --scroll-fade-mask: linear-gradient(
232
+ to bottom,
233
+ #000 0,
234
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
235
+ transparent 100%
236
+ );
237
+ -webkit-mask-image: var(--scroll-fade-mask);
238
+ mask-image: var(--scroll-fade-mask);
239
+ -webkit-mask-composite: source-in;
240
+ mask-composite: intersect;
241
+ -webkit-mask-repeat: no-repeat;
242
+ mask-repeat: no-repeat;
243
+
244
+ @supports (animation-timeline: scroll()) {
245
+ animation: scroll-fade-reveal-b 1ms ease-in-out;
246
+ --_scroll-fade-timeline: scroll(self y);
247
+ animation-timeline: var(--_scroll-fade-timeline);
248
+ animation-range: calc(
249
+ 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
250
+ )
251
+ 100%;
252
+ animation-fill-mode: both;
253
+ }
254
+
255
+ @supports not (animation-timeline: scroll()) {
256
+ --scroll-fade-b: var(--_scroll-fade-size-b);
257
+ }
258
+ }
259
+
260
+ @utility scroll-fade-l {
261
+ --_scroll-fade-size-s: var(
262
+ --scroll-fade-s-size,
263
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
264
+ );
265
+ --scroll-fade-mask: linear-gradient(
266
+ to right,
267
+ transparent 0,
268
+ #000 var(--scroll-fade-s, 0px),
269
+ #000 100%
270
+ );
271
+ -webkit-mask-image: var(--scroll-fade-mask);
272
+ mask-image: var(--scroll-fade-mask);
273
+ -webkit-mask-composite: source-in;
274
+ mask-composite: intersect;
275
+ -webkit-mask-repeat: no-repeat;
276
+ mask-repeat: no-repeat;
277
+
278
+ @supports (animation-timeline: scroll()) {
279
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
280
+ --_scroll-fade-timeline: scroll(self x);
281
+ animation-timeline: var(--_scroll-fade-timeline);
282
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
283
+ animation-fill-mode: both;
284
+ }
285
+
286
+ @supports not (animation-timeline: scroll()) {
287
+ --scroll-fade-s: var(--_scroll-fade-size-s);
288
+ }
289
+ }
290
+
291
+ @utility scroll-fade-r {
292
+ --_scroll-fade-size-e: var(
293
+ --scroll-fade-e-size,
294
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
295
+ );
296
+ --scroll-fade-mask: linear-gradient(
297
+ to right,
298
+ #000 0,
299
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
300
+ transparent 100%
301
+ );
302
+ -webkit-mask-image: var(--scroll-fade-mask);
303
+ mask-image: var(--scroll-fade-mask);
304
+ -webkit-mask-composite: source-in;
305
+ mask-composite: intersect;
306
+ -webkit-mask-repeat: no-repeat;
307
+ mask-repeat: no-repeat;
308
+
309
+ @supports (animation-timeline: scroll()) {
310
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
311
+ --_scroll-fade-timeline: scroll(self x);
312
+ animation-timeline: var(--_scroll-fade-timeline);
313
+ animation-range: calc(
314
+ 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
315
+ )
316
+ 100%;
317
+ animation-fill-mode: both;
318
+ }
319
+
320
+ @supports not (animation-timeline: scroll()) {
321
+ --scroll-fade-e: var(--_scroll-fade-size-e);
322
+ }
323
+ }
324
+
325
+ @utility scroll-fade-s {
326
+ --_scroll-fade-size-s: var(
327
+ --scroll-fade-s-size,
328
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
329
+ );
330
+ --scroll-fade-mask: linear-gradient(
331
+ to right,
332
+ transparent 0,
333
+ #000 var(--scroll-fade-s, 0px),
334
+ #000 100%
335
+ );
336
+ &:where([dir="rtl"], [dir="rtl"] *) {
337
+ --scroll-fade-mask: linear-gradient(
338
+ to left,
339
+ transparent 0,
340
+ #000 var(--scroll-fade-s, 0px),
341
+ #000 100%
342
+ );
343
+ }
344
+ -webkit-mask-image: var(--scroll-fade-mask);
345
+ mask-image: var(--scroll-fade-mask);
346
+ -webkit-mask-composite: source-in;
347
+ mask-composite: intersect;
348
+ -webkit-mask-repeat: no-repeat;
349
+ mask-repeat: no-repeat;
350
+
351
+ @supports (animation-timeline: scroll()) {
352
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
353
+ --_scroll-fade-timeline: scroll(self inline);
354
+ animation-timeline: var(--_scroll-fade-timeline);
355
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
356
+ animation-fill-mode: both;
357
+ }
358
+
359
+ @supports not (animation-timeline: scroll()) {
360
+ --scroll-fade-s: var(--_scroll-fade-size-s);
361
+ }
362
+ }
363
+
364
+ @utility scroll-fade-e {
365
+ --_scroll-fade-size-e: var(
366
+ --scroll-fade-e-size,
367
+ var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10)))
368
+ );
369
+ --scroll-fade-mask: linear-gradient(
370
+ to right,
371
+ #000 0,
372
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
373
+ transparent 100%
374
+ );
375
+ &:where([dir="rtl"], [dir="rtl"] *) {
376
+ --scroll-fade-mask: linear-gradient(
377
+ to left,
378
+ #000 0,
379
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
380
+ transparent 100%
381
+ );
382
+ }
383
+ -webkit-mask-image: var(--scroll-fade-mask);
384
+ mask-image: var(--scroll-fade-mask);
385
+ -webkit-mask-composite: source-in;
386
+ mask-composite: intersect;
387
+ -webkit-mask-repeat: no-repeat;
388
+ mask-repeat: no-repeat;
389
+
390
+ @supports (animation-timeline: scroll()) {
391
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
392
+ --_scroll-fade-timeline: scroll(self inline);
393
+ animation-timeline: var(--_scroll-fade-timeline);
394
+ animation-range: calc(
395
+ 100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))
396
+ )
397
+ 100%;
398
+ animation-fill-mode: both;
399
+ }
400
+
401
+ @supports not (animation-timeline: scroll()) {
402
+ --scroll-fade-e: var(--_scroll-fade-size-e);
403
+ }
404
+ }
405
+
406
+ @utility scroll-fade-* {
407
+ --scroll-fade-size: calc(var(--spacing) * --value(integer));
408
+ --scroll-fade-size: --value([length], [percentage]);
409
+ }
410
+
411
+ @utility scroll-fade-t-* {
412
+ --scroll-fade-t-size: calc(var(--spacing) * --value(integer));
413
+ --scroll-fade-t-size: --value([length], [percentage]);
414
+ }
415
+
416
+ @utility scroll-fade-b-* {
417
+ --scroll-fade-b-size: calc(var(--spacing) * --value(integer));
418
+ --scroll-fade-b-size: --value([length], [percentage]);
419
+ }
420
+
421
+ @utility scroll-fade-s-* {
422
+ --scroll-fade-s-size: calc(var(--spacing) * --value(integer));
423
+ --scroll-fade-s-size: --value([length], [percentage]);
424
+ }
425
+
426
+ @utility scroll-fade-e-* {
427
+ --scroll-fade-e-size: calc(var(--spacing) * --value(integer));
428
+ --scroll-fade-e-size: --value([length], [percentage]);
429
+ }
430
+
431
+ @utility scroll-fade-none {
432
+ --scroll-fade-mask: none;
433
+ }
434
+
435
+
436
+ @property --shimmer-angle {
437
+ syntax: "<angle>";
438
+ inherits: true;
439
+ initial-value: 20deg;
440
+ }
441
+ @property --shimmer-image {
442
+ syntax: "*";
443
+ inherits: false;
444
+ }
445
+ @property --shimmer-text-fill {
446
+ syntax: "*";
447
+ inherits: false;
448
+ }
449
+
450
+ @layer theme {
451
+ @keyframes tw-shimmer {
452
+ from {
453
+ background-position: 100% 0;
454
+ }
455
+ to {
456
+ background-position: 0 0;
457
+ }
458
+ }
459
+ }
460
+
461
+ @utility shimmer {
462
+ --_spread: var(--shimmer-spread, calc(3ch + 40px));
463
+ --_base: currentColor;
464
+ --_highlight: var(
465
+ --shimmer-color,
466
+ oklch(from currentColor l c h / calc(alpha* 0.2))
467
+ );
468
+
469
+ background-image: var(
470
+ --shimmer-image,
471
+ linear-gradient(
472
+ calc(90deg + var(--shimmer-angle)),
473
+ var(--_base) calc(50% - var(--_spread)),
474
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%)
475
+ calc(50% - var(--_spread) * 0.5),
476
+ var(--_highlight) 50%,
477
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%)
478
+ calc(50% + var(--_spread) * 0.5),
479
+ var(--_base) calc(50% + var(--_spread))
480
+ )
481
+ );
482
+ background-repeat: no-repeat;
483
+ background-size: calc(200% + var(--_spread) * 2) 100%;
484
+ background-position: 0 0;
485
+ background-clip: text;
486
+ -webkit-background-clip: text;
487
+ -webkit-text-fill-color: var(--shimmer-text-fill, transparent);
488
+ animation: tw-shimmer var(--shimmer-duration, 2s) linear infinite;
489
+
490
+ @variant dark {
491
+ --_highlight: var(
492
+ --shimmer-color,
493
+ oklch(from currentColor max(0.8, calc(l + 0.4)) c h / calc(alpha + 0.4))
494
+ );
495
+ }
496
+
497
+ &:where([dir="rtl"], [dir="rtl"] *) {
498
+ animation-direction: reverse;
499
+ }
500
+
501
+ @media (prefers-reduced-motion: reduce) {
502
+ animation: none;
503
+ background-image: none;
504
+ -webkit-text-fill-color: currentColor;
505
+ }
506
+ }
507
+
508
+ @utility shimmer-once {
509
+ animation-iteration-count: 1;
510
+ }
511
+
512
+ @utility shimmer-reverse {
513
+ animation-direction: reverse;
514
+ }
515
+
516
+ @utility shimmer-none {
517
+ --shimmer-image: none;
518
+ --shimmer-text-fill: currentColor;
519
+ }
520
+
521
+ @utility shimmer-color-* {
522
+ --shimmer-color: --value(--color, [color]);
523
+ --shimmer-color: color-mix(
524
+ in oklch,
525
+ --value(--color, [color]) calc(--modifier(integer) * 1%),
526
+ transparent
527
+ );
528
+ }
529
+
530
+ @utility shimmer-duration-* {
531
+ --shimmer-duration: calc(--value(integer) * 1ms);
532
+ }
533
+
534
+ @utility shimmer-spread-* {
535
+ --shimmer-spread: calc(var(--spacing) * --value(integer));
536
+ --shimmer-spread: --value([length], [percentage]);
537
+ }
538
+
539
+ @utility shimmer-angle-* {
540
+ --shimmer-angle: calc(--value(integer) * 1deg);
541
+ }
542
+
543
+
544
+ @media (prefers-reduced-motion: reduce) {
545
+ .shimmer {
546
+ animation: none;
547
+ background-image: none;
548
+ -webkit-text-fill-color: currentColor;
549
+ }
550
+ }
551
+ `;function $(){return E}C.exports={motionUtilityCss:$}});var{findTreeConflicts:R}=h();function M(e){return String(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function O(e,r){let s=e.length-1,l=e.filter((i,c)=>(c===s||!["styles","slots","variants"].includes(i))&&i!=="root");return[r,...l.map(M)].filter(Boolean).join("-")}function I(e){let r=[],s=[];for(let l of e.trim().split(/\s+/))/^(group|peer)(?:\/[^\s]+)?$/.test(l)?r.push(l):s.push(l);return{passthrough:r,recipe:s}}function N(e,r={}){let s=r.prefix||"ff",l=new Map;function i(o,a){if(typeof o=="string"){let t=O(a,s),n=I(o);return l.set(t,{className:n.recipe.join(" "),depth:a.length,base:a[a.length-1]==="root"}),[t,...n.passthrough].join(" ")}if(Array.isArray(o))return o.map((t,n)=>i(t,[...a,String(n)]));if(!o||typeof o!="object")throw new Error(`Style value at ${a.join(".")} must be a string or object`);return Object.fromEntries(Object.entries(o).map(([t,n])=>[t,i(n,[...a,t])]))}let c={};for(let[o,a]of Object.entries(e||{})){if(!a||typeof a!="object"||!("styles"in a))throw new Error(`Component ${o} must use the styles/behavior envelope`);let t=R(a.styles,a.behavior,[o]);if(t.length>0)throw new Error(`Component config styles/behavior conflict at ${t.join(", ")}`);c[o]={styles:i(a.styles,[o,"styles"]),...a.behavior===void 0?{}:{behavior:a.behavior}}}return{config:c,classes:Object.fromEntries([...l.entries()].sort(([,o],[,a])=>o.depth-a.depth||Number(a.base)-Number(o.base)).map(([o,a])=>[o,a.className]))}}function V(e,r=[]){let s=new Map(e.map(([a],t)=>[a,t])),l=new Map(e.map(([a])=>[a,0])),i=new Map(e.map(([a])=>[a,[]]));for(let a of r){let t=a.filter(n=>s.has(n));for(let n=1;n<t.length;n+=1)i.get(t[n-1]).push(t[n]),l.set(t[n],l.get(t[n])+1)}let c=e.map(([a])=>a).filter(a=>l.get(a)===0),o=[];for(;c.length>0;){c.sort((t,n)=>s.get(t)-s.get(n));let a=c.shift();o.push(e[s.get(a)]);for(let t of i.get(a))l.set(t,l.get(t)-1),l.get(t)===0&&c.push(t)}if(o.length!==e.length){let a=e.map(([t])=>t).filter(t=>l.get(t)>0);throw new Error(`Recipe order has a cycle between ${a.join(", ")}`)}return o}function P(e,r={}){let s=r.scope||"default";if(!/^[a-zA-Z0-9_-]+$/.test(s))throw new Error("Recipe scope may only contain letters, numbers, dashes, and underscores");return`@layer base {
552
+ ${V(Object.entries(e).filter(([,i])=>typeof i=="string"&&i.trim()),r.order).map(([i,c])=>` :where([data-ff-recipe="${s}"]) .${i} {
553
+ @apply ${c.trim()};
5
554
  }`).join(`
6
555
  `)}
7
556
  }
8
- `}var{STATE_VARIANT_CSS:I,STATE_VARIANT_NAMES:V,stateVariantCss:P}=C();module.exports={STATE_VARIANT_CSS:I,STATE_VARIANT_NAMES:V,stateVariantCss:P,createComponentRecipe:O,emitComponentRecipeCss:N};
557
+ `}var{STATE_VARIANT_CSS:U,STATE_VARIANT_NAMES:q,stateVariantCss:D}=x(),{motionUtilityCss:Z}=A();module.exports={STATE_VARIANT_CSS:U,STATE_VARIANT_NAMES:q,stateVariantCss:D,motionUtilityCss:Z,createComponentRecipe:N,emitComponentRecipeCss:P};