@olonjs/core 1.0.127 → 1.1.2

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.
@@ -0,0 +1,4452 @@
1
+ import Tt, { createContext as Te, useContext as Re, Component as rt, useMemo as ze, useState as ot, useEffect as oe, forwardRef as nt, createElement as Ne, useRef as Be, useLayoutEffect as Rt } from "react";
2
+ import { Link as At, createRoutesFromElements as _t, createBrowserRouter as Ot, RouterProvider as Pt, ScrollRestoration as zt, Outlet as Nt, useLocation as It, Route as ye } from "react-router-dom";
3
+ import { z as I } from "zod";
4
+ var xe = { exports: {} }, le = {};
5
+ /**
6
+ * @license React
7
+ * react-jsx-runtime.production.js
8
+ *
9
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
10
+ *
11
+ * This source code is licensed under the MIT license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ */
14
+ var Ue;
15
+ function $t() {
16
+ if (Ue) return le;
17
+ Ue = 1;
18
+ var e = Symbol.for("react.transitional.element"), t = Symbol.for("react.fragment");
19
+ function r(o, n, s) {
20
+ var a = null;
21
+ if (s !== void 0 && (a = "" + s), n.key !== void 0 && (a = "" + n.key), "key" in n) {
22
+ s = {};
23
+ for (var c in n)
24
+ c !== "key" && (s[c] = n[c]);
25
+ } else s = n;
26
+ return n = s.ref, {
27
+ $$typeof: e,
28
+ type: o,
29
+ key: a,
30
+ ref: n !== void 0 ? n : null,
31
+ props: s
32
+ };
33
+ }
34
+ return le.Fragment = t, le.jsx = r, le.jsxs = r, le;
35
+ }
36
+ var ce = {};
37
+ /**
38
+ * @license React
39
+ * react-jsx-runtime.development.js
40
+ *
41
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
42
+ *
43
+ * This source code is licensed under the MIT license found in the
44
+ * LICENSE file in the root directory of this source tree.
45
+ */
46
+ var Ge;
47
+ function Mt() {
48
+ return Ge || (Ge = 1, process.env.NODE_ENV !== "production" && (function() {
49
+ function e(i) {
50
+ if (i == null) return null;
51
+ if (typeof i == "function")
52
+ return i.$$typeof === Y ? null : i.displayName || i.name || null;
53
+ if (typeof i == "string") return i;
54
+ switch (i) {
55
+ case C:
56
+ return "Fragment";
57
+ case W:
58
+ return "Profiler";
59
+ case F:
60
+ return "StrictMode";
61
+ case T:
62
+ return "Suspense";
63
+ case L:
64
+ return "SuspenseList";
65
+ case J:
66
+ return "Activity";
67
+ }
68
+ if (typeof i == "object")
69
+ switch (typeof i.tag == "number" && console.error(
70
+ "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
71
+ ), i.$$typeof) {
72
+ case j:
73
+ return "Portal";
74
+ case O:
75
+ return i.displayName || "Context";
76
+ case E:
77
+ return (i._context.displayName || "Context") + ".Consumer";
78
+ case k:
79
+ var x = i.render;
80
+ return i = i.displayName, i || (i = x.displayName || x.name || "", i = i !== "" ? "ForwardRef(" + i + ")" : "ForwardRef"), i;
81
+ case d:
82
+ return x = i.displayName || null, x !== null ? x : e(i.type) || "Memo";
83
+ case S:
84
+ x = i._payload, i = i._init;
85
+ try {
86
+ return e(i(x));
87
+ } catch {
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ function t(i) {
93
+ return "" + i;
94
+ }
95
+ function r(i) {
96
+ try {
97
+ t(i);
98
+ var x = !1;
99
+ } catch {
100
+ x = !0;
101
+ }
102
+ if (x) {
103
+ x = console;
104
+ var R = x.error, P = typeof Symbol == "function" && Symbol.toStringTag && i[Symbol.toStringTag] || i.constructor.name || "Object";
105
+ return R.call(
106
+ x,
107
+ "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
108
+ P
109
+ ), t(i);
110
+ }
111
+ }
112
+ function o(i) {
113
+ if (i === C) return "<>";
114
+ if (typeof i == "object" && i !== null && i.$$typeof === S)
115
+ return "<...>";
116
+ try {
117
+ var x = e(i);
118
+ return x ? "<" + x + ">" : "<...>";
119
+ } catch {
120
+ return "<...>";
121
+ }
122
+ }
123
+ function n() {
124
+ var i = V.A;
125
+ return i === null ? null : i.getOwner();
126
+ }
127
+ function s() {
128
+ return Error("react-stack-top-frame");
129
+ }
130
+ function a(i) {
131
+ if (X.call(i, "key")) {
132
+ var x = Object.getOwnPropertyDescriptor(i, "key").get;
133
+ if (x && x.isReactWarning) return !1;
134
+ }
135
+ return i.key !== void 0;
136
+ }
137
+ function c(i, x) {
138
+ function R() {
139
+ B || (B = !0, console.error(
140
+ "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
141
+ x
142
+ ));
143
+ }
144
+ R.isReactWarning = !0, Object.defineProperty(i, "key", {
145
+ get: R,
146
+ configurable: !0
147
+ });
148
+ }
149
+ function l() {
150
+ var i = e(this.type);
151
+ return G[i] || (G[i] = !0, console.error(
152
+ "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
153
+ )), i = this.props.ref, i !== void 0 ? i : null;
154
+ }
155
+ function m(i, x, R, P, N, $) {
156
+ var _ = R.ref;
157
+ return i = {
158
+ $$typeof: A,
159
+ type: i,
160
+ key: x,
161
+ props: R,
162
+ _owner: P
163
+ }, (_ !== void 0 ? _ : null) !== null ? Object.defineProperty(i, "ref", {
164
+ enumerable: !1,
165
+ get: l
166
+ }) : Object.defineProperty(i, "ref", { enumerable: !1, value: null }), i._store = {}, Object.defineProperty(i._store, "validated", {
167
+ configurable: !1,
168
+ enumerable: !1,
169
+ writable: !0,
170
+ value: 0
171
+ }), Object.defineProperty(i, "_debugInfo", {
172
+ configurable: !1,
173
+ enumerable: !1,
174
+ writable: !0,
175
+ value: null
176
+ }), Object.defineProperty(i, "_debugStack", {
177
+ configurable: !1,
178
+ enumerable: !1,
179
+ writable: !0,
180
+ value: N
181
+ }), Object.defineProperty(i, "_debugTask", {
182
+ configurable: !1,
183
+ enumerable: !1,
184
+ writable: !0,
185
+ value: $
186
+ }), Object.freeze && (Object.freeze(i.props), Object.freeze(i)), i;
187
+ }
188
+ function b(i, x, R, P, N, $) {
189
+ var _ = x.children;
190
+ if (_ !== void 0)
191
+ if (P)
192
+ if (Z(_)) {
193
+ for (P = 0; P < _.length; P++)
194
+ h(_[P]);
195
+ Object.freeze && Object.freeze(_);
196
+ } else
197
+ console.error(
198
+ "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
199
+ );
200
+ else h(_);
201
+ if (X.call(x, "key")) {
202
+ _ = e(i);
203
+ var H = Object.keys(x).filter(function(pe) {
204
+ return pe !== "key";
205
+ });
206
+ P = 0 < H.length ? "{key: someKey, " + H.join(": ..., ") + ": ...}" : "{key: someKey}", g[_ + P] || (H = 0 < H.length ? "{" + H.join(": ..., ") + ": ...}" : "{}", console.error(
207
+ `A props object containing a "key" prop is being spread into JSX:
208
+ let props = %s;
209
+ <%s {...props} />
210
+ React keys must be passed directly to JSX without using spread:
211
+ let props = %s;
212
+ <%s key={someKey} {...props} />`,
213
+ P,
214
+ _,
215
+ H,
216
+ _
217
+ ), g[_ + P] = !0);
218
+ }
219
+ if (_ = null, R !== void 0 && (r(R), _ = "" + R), a(x) && (r(x.key), _ = "" + x.key), "key" in x) {
220
+ R = {};
221
+ for (var z in x)
222
+ z !== "key" && (R[z] = x[z]);
223
+ } else R = x;
224
+ return _ && c(
225
+ R,
226
+ typeof i == "function" ? i.displayName || i.name || "Unknown" : i
227
+ ), m(
228
+ i,
229
+ _,
230
+ R,
231
+ n(),
232
+ N,
233
+ $
234
+ );
235
+ }
236
+ function h(i) {
237
+ y(i) ? i._store && (i._store.validated = 1) : typeof i == "object" && i !== null && i.$$typeof === S && (i._payload.status === "fulfilled" ? y(i._payload.value) && i._payload.value._store && (i._payload.value._store.validated = 1) : i._store && (i._store.validated = 1));
238
+ }
239
+ function y(i) {
240
+ return typeof i == "object" && i !== null && i.$$typeof === A;
241
+ }
242
+ var w = Tt, A = Symbol.for("react.transitional.element"), j = Symbol.for("react.portal"), C = Symbol.for("react.fragment"), F = Symbol.for("react.strict_mode"), W = Symbol.for("react.profiler"), E = Symbol.for("react.consumer"), O = Symbol.for("react.context"), k = Symbol.for("react.forward_ref"), T = Symbol.for("react.suspense"), L = Symbol.for("react.suspense_list"), d = Symbol.for("react.memo"), S = Symbol.for("react.lazy"), J = Symbol.for("react.activity"), Y = Symbol.for("react.client.reference"), V = w.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, X = Object.prototype.hasOwnProperty, Z = Array.isArray, D = console.createTask ? console.createTask : function() {
243
+ return null;
244
+ };
245
+ w = {
246
+ react_stack_bottom_frame: function(i) {
247
+ return i();
248
+ }
249
+ };
250
+ var B, G = {}, se = w.react_stack_bottom_frame.bind(
251
+ w,
252
+ s
253
+ )(), ae = D(o(s)), g = {};
254
+ ce.Fragment = C, ce.jsx = function(i, x, R) {
255
+ var P = 1e4 > V.recentlyCreatedOwnerStacks++;
256
+ return b(
257
+ i,
258
+ x,
259
+ R,
260
+ !1,
261
+ P ? Error("react-stack-top-frame") : se,
262
+ P ? D(o(i)) : ae
263
+ );
264
+ }, ce.jsxs = function(i, x, R) {
265
+ var P = 1e4 > V.recentlyCreatedOwnerStacks++;
266
+ return b(
267
+ i,
268
+ x,
269
+ R,
270
+ !0,
271
+ P ? Error("react-stack-top-frame") : se,
272
+ P ? D(o(i)) : ae
273
+ );
274
+ };
275
+ })()), ce;
276
+ }
277
+ var Ve;
278
+ function Lt() {
279
+ return Ve || (Ve = 1, process.env.NODE_ENV === "production" ? xe.exports = $t() : xe.exports = Mt()), xe.exports;
280
+ }
281
+ var u = Lt();
282
+ function fe(e) {
283
+ return typeof e == "object" && e !== null;
284
+ }
285
+ function Se(e) {
286
+ if (!fe(e)) return !1;
287
+ const t = Object.getPrototypeOf(e);
288
+ return t === Object.prototype || t === null;
289
+ }
290
+ function Dt(e) {
291
+ return fe(e) && typeof e.$ref == "string" && e.$ref.trim().length > 0;
292
+ }
293
+ function Ft(e) {
294
+ return e.replace(/~1/g, "/").replace(/~0/g, "~");
295
+ }
296
+ function Je(e, t) {
297
+ if (!t || t === "#") return e;
298
+ const r = t.startsWith("#") ? t.slice(1) : t;
299
+ if (!r || r === "/") return e;
300
+ let o = e;
301
+ for (const n of r.replace(/^\//, "").split("/")) {
302
+ const s = Ft(n);
303
+ if (Array.isArray(o)) {
304
+ const a = Number(s);
305
+ if (!Number.isInteger(a) || a < 0 || a >= o.length) return;
306
+ o = o[a];
307
+ continue;
308
+ }
309
+ if (!fe(o) || !(s in o)) return;
310
+ o = o[s];
311
+ }
312
+ return o;
313
+ }
314
+ function ie(e) {
315
+ const o = e.trim().replace(/\\/g, "/").replace(/^\/+/, "").split("/"), n = [];
316
+ for (const s of o)
317
+ if (!(!s || s === ".")) {
318
+ if (s === "..") {
319
+ n.length > 0 && n.pop();
320
+ continue;
321
+ }
322
+ n.push(s);
323
+ }
324
+ return n.join("/");
325
+ }
326
+ function Wt(e) {
327
+ const t = ie(e), r = t.lastIndexOf("/");
328
+ return r === -1 ? "" : t.slice(0, r);
329
+ }
330
+ function Bt(e, t) {
331
+ const r = /* @__PURE__ */ new Set(), o = ie(e);
332
+ o && r.add(o);
333
+ const n = Wt(t), s = ie(n ? `${n}/${e}` : e);
334
+ return s && r.add(s), Array.from(r);
335
+ }
336
+ function me(e) {
337
+ return Array.isArray(e) ? e.map((t) => me(t)) : Se(e) ? Object.fromEntries(
338
+ Object.entries(e).map(([t, r]) => [t, me(r)])
339
+ ) : e;
340
+ }
341
+ function de(e, t, r) {
342
+ for (const o of t) {
343
+ const n = ie(o);
344
+ n && e.set(n, r);
345
+ }
346
+ }
347
+ function Ut({
348
+ pages: e,
349
+ siteConfig: t,
350
+ themeConfig: r,
351
+ menuConfig: o,
352
+ refDocuments: n
353
+ }) {
354
+ const s = /* @__PURE__ */ new Map();
355
+ for (const [a, c] of Object.entries(n ?? {}))
356
+ de(s, [a], c);
357
+ de(s, ["site.json", "config/site.json", "src/data/config/site.json"], t), de(s, ["theme.json", "config/theme.json", "src/data/config/theme.json"], r), de(s, ["menu.json", "config/menu.json", "src/data/config/menu.json"], o);
358
+ for (const [a, c] of Object.entries(e)) {
359
+ const l = a.replace(/^\/+|\/+$/g, "") || "home";
360
+ de(s, [`pages/${l}.json`, `src/data/pages/${l}.json`], c);
361
+ }
362
+ return s;
363
+ }
364
+ function Gt(e, t, r) {
365
+ const [o, n = ""] = e.split("#"), s = n ? `/${n.replace(/^\//, "")}` : "";
366
+ if (!o) {
367
+ const a = ie(t), c = r.documents.get(a);
368
+ if (c === void 0) return null;
369
+ const l = Je(c, s);
370
+ return l === void 0 ? null : { value: l, documentPath: a };
371
+ }
372
+ for (const a of Bt(o, t)) {
373
+ const c = r.documents.get(a);
374
+ if (c === void 0) continue;
375
+ const l = Je(c, s);
376
+ if (l !== void 0)
377
+ return { value: l, documentPath: a };
378
+ }
379
+ return null;
380
+ }
381
+ function re(e, t, r) {
382
+ if (Array.isArray(e))
383
+ return e.map((o) => re(o, t, r));
384
+ if (!Se(e))
385
+ return e;
386
+ if (Dt(e)) {
387
+ const o = `${ie(t)}::${e.$ref}`;
388
+ if (r.stack.includes(o))
389
+ return console.warn("[JsonPages] Circular $ref skipped", e.$ref), me(e);
390
+ if (r.cache.has(o)) {
391
+ const l = me(r.cache.get(o)), m = Object.entries(e).filter(([h]) => h !== "$ref");
392
+ if (m.length === 0) return l;
393
+ const b = Object.fromEntries(
394
+ m.map(([h, y]) => [h, re(y, t, r)])
395
+ );
396
+ return Se(l) ? { ...l, ...b } : l;
397
+ }
398
+ const n = Gt(e.$ref, t, r);
399
+ if (!n)
400
+ return console.warn("[JsonPages] Unresolved $ref", e.$ref), Object.fromEntries(
401
+ Object.entries(e).map(([l, m]) => [l, re(m, t, r)])
402
+ );
403
+ r.stack.push(o);
404
+ const s = re(n.value, n.documentPath, r);
405
+ r.stack.pop(), r.cache.set(o, me(s));
406
+ const a = Object.entries(e).filter(([l]) => l !== "$ref");
407
+ if (a.length === 0) return s;
408
+ const c = Object.fromEntries(
409
+ a.map(([l, m]) => [l, re(m, t, r)])
410
+ );
411
+ return Se(s) ? { ...s, ...c } : s;
412
+ }
413
+ return Object.fromEntries(
414
+ Object.entries(e).map(([o, n]) => [o, re(n, t, r)])
415
+ );
416
+ }
417
+ function ve(e, t, r) {
418
+ return re(e, t, {
419
+ documents: r,
420
+ cache: /* @__PURE__ */ new Map(),
421
+ stack: []
422
+ });
423
+ }
424
+ function Vt(e) {
425
+ return fe(e) && typeof e.label == "string" && typeof e.href == "string";
426
+ }
427
+ function Jt(e) {
428
+ if (!fe(e)) return null;
429
+ const t = e.menu;
430
+ return Array.isArray(t) && t.every(Vt) ? t : null;
431
+ }
432
+ function Yt(e, t) {
433
+ return Jt(e) ?? (Array.isArray(t) ? t : []);
434
+ }
435
+ function _e(e, t) {
436
+ if (e.type === "header")
437
+ return Yt(e.data, t);
438
+ }
439
+ function st(e) {
440
+ const t = Ut(e);
441
+ return {
442
+ pages: Object.fromEntries(
443
+ Object.entries(e.pages).map(([r, o]) => [
444
+ r,
445
+ ve(o, `pages/${r.replace(/^\/+|\/+$/g, "") || "home"}.json`, t)
446
+ ])
447
+ ),
448
+ siteConfig: ve(e.siteConfig, "config/site.json", t),
449
+ themeConfig: ve(e.themeConfig, "config/theme.json", t),
450
+ menuConfig: ve(e.menuConfig, "config/menu.json", t)
451
+ };
452
+ }
453
+ function Ht() {
454
+ if (typeof window > "u") return null;
455
+ const e = window;
456
+ return e.__olonWebMcpTools__ || (e.__olonWebMcpTools__ = /* @__PURE__ */ new Map()), e.__olonWebMcpTools__;
457
+ }
458
+ async function Ye(e) {
459
+ const t = window.location.pathname.replace(/\/admin(\/.*)?$/, "").replace(/\/$/, "");
460
+ if (e === "olon://pages" || e === "olon://pages/") {
461
+ const r = await fetch(`${t}/mcp-manifest.json`);
462
+ if (!r.ok)
463
+ throw new Error(`Resource not found: ${e} (at ${t}/mcp-manifest.json)`);
464
+ return {
465
+ pages: ((await r.json()).pages || []).map((n) => {
466
+ const s = n;
467
+ return {
468
+ slug: s.slug,
469
+ title: s.title,
470
+ contract: s.contractHref
471
+ };
472
+ })
473
+ };
474
+ }
475
+ if (e.startsWith("olon://pages/")) {
476
+ const r = e.replace("olon://pages/", ""), o = await fetch(`${t}/pages/${r}.json`);
477
+ if (!o.ok)
478
+ throw new Error(`Resource not found: ${e} (at ${t}/pages/${r}.json)`);
479
+ return await o.json();
480
+ }
481
+ throw new Error(`Unsupported URI scheme: ${e}`);
482
+ }
483
+ function qt() {
484
+ if (typeof window > "u" || typeof navigator > "u") return;
485
+ const e = Ht();
486
+ if (!e) return;
487
+ const t = navigator;
488
+ t.modelContext || (t.modelContext = {}), t.modelContext.registerTool = (r) => {
489
+ e.set(r.name, r);
490
+ }, t.modelContext.unregisterTool = (r) => {
491
+ e.delete(r);
492
+ }, t.modelContext.readResource = async (r) => Ye(r), t.modelContextProtocol = {
493
+ listTools: () => Array.from(e.values()).map(({ execute: r, ...o }) => o),
494
+ executeTool: async (r, o) => {
495
+ const n = e.get(r);
496
+ if (!n)
497
+ throw new Error(`WebMCP tool "${r}" is not registered.`);
498
+ const s = o ? JSON.parse(o) : {}, a = await n.execute(s);
499
+ return JSON.stringify(a);
500
+ },
501
+ readResource: async (r) => JSON.stringify(await Ye(r))
502
+ };
503
+ }
504
+ function Xt(e) {
505
+ return `/schemas/${e}.schema.json`;
506
+ }
507
+ function Zt(e) {
508
+ return `/mcp-manifests/${e}.json`;
509
+ }
510
+ const Kt = () => /* @__PURE__ */ u.jsxs(
511
+ "div",
512
+ {
513
+ style: {
514
+ "--local-bg": "var(--color-background)",
515
+ "--local-text": "var(--color-text)",
516
+ "--local-text-muted": "var(--color-text-muted)",
517
+ "--local-primary": "var(--color-primary)",
518
+ "--local-radius-md": "var(--radius-md)"
519
+ },
520
+ className: "min-h-screen flex flex-col items-center justify-center bg-[var(--local-bg)] px-6",
521
+ children: [
522
+ /* @__PURE__ */ u.jsx("h1", { className: "text-6xl font-bold text-[var(--local-text)] mb-4", children: "404" }),
523
+ /* @__PURE__ */ u.jsx("p", { className: "text-xl text-[var(--local-text-muted)] mb-8", children: "Page not found" }),
524
+ /* @__PURE__ */ u.jsx(
525
+ At,
526
+ {
527
+ to: "/",
528
+ className: "inline-flex items-center gap-2 px-6 py-3 rounded-[var(--local-radius-md)] bg-[var(--local-primary)] text-[var(--local-bg)] font-semibold text-sm hover:opacity-90 transition-opacity",
529
+ children: "Back to Home"
530
+ }
531
+ )
532
+ ]
533
+ }
534
+ ), at = Te(void 0), Qt = ({ config: e, children: t }) => /* @__PURE__ */ u.jsx(
535
+ at.Provider,
536
+ {
537
+ value: {
538
+ registry: e.registry,
539
+ schemas: e.schemas,
540
+ tenantId: e.tenantId,
541
+ basePath: e.basePath,
542
+ assets: e.assets,
543
+ overlayDisabledSectionTypes: e.overlayDisabledSectionTypes
544
+ },
545
+ children: t
546
+ }
547
+ );
548
+ function er() {
549
+ const e = Re(at);
550
+ if (e === void 0)
551
+ throw new Error("useConfig must be used within ConfigProvider");
552
+ return e;
553
+ }
554
+ const Oe = /* @__PURE__ */ new Set();
555
+ function tr(e) {
556
+ return e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[_\s]+/g, "-").toLowerCase();
557
+ }
558
+ function it(e, t = [], r = {}) {
559
+ return Object.entries(e).forEach(([o, n]) => {
560
+ const s = [...t, tr(o)];
561
+ if (typeof n == "string" || typeof n == "number") {
562
+ r[`--theme-${s.join("-")}`] = String(n);
563
+ return;
564
+ }
565
+ n && typeof n == "object" && !Array.isArray(n) && it(n, s, r);
566
+ }), r;
567
+ }
568
+ function U(e, t, r, o) {
569
+ o && (e[t] = `var(${r})`);
570
+ }
571
+ function rr(e) {
572
+ const t = it(e.tokens), r = { ...t };
573
+ return U(r, "--theme-primary", "--theme-colors-primary", t["--theme-colors-primary"]), U(r, "--theme-secondary", "--theme-colors-secondary", t["--theme-colors-secondary"]), U(r, "--theme-accent", "--theme-colors-accent", t["--theme-colors-accent"]), U(r, "--theme-background", "--theme-colors-background", t["--theme-colors-background"]), U(r, "--theme-surface", "--theme-colors-surface", t["--theme-colors-surface"]), U(r, "--theme-surface-alt", "--theme-colors-surface-alt", t["--theme-colors-surface-alt"]), U(r, "--theme-text", "--theme-colors-text", t["--theme-colors-text"]), U(r, "--theme-text-muted", "--theme-colors-text-muted", t["--theme-colors-text-muted"]), U(r, "--theme-border", "--theme-colors-border", t["--theme-colors-border"]), U(
574
+ r,
575
+ "--theme-font-primary",
576
+ "--theme-typography-font-family-primary",
577
+ t["--theme-typography-font-family-primary"]
578
+ ), U(
579
+ r,
580
+ "--theme-font-mono",
581
+ "--theme-typography-font-family-mono",
582
+ t["--theme-typography-font-family-mono"]
583
+ ), U(
584
+ r,
585
+ "--theme-font-display",
586
+ "--theme-typography-font-family-display",
587
+ t["--theme-typography-font-family-display"]
588
+ ), U(r, "--theme-radius-sm", "--theme-border-radius-sm", t["--theme-border-radius-sm"]), U(r, "--theme-radius-md", "--theme-border-radius-md", t["--theme-border-radius-md"]), U(r, "--theme-radius-lg", "--theme-border-radius-lg", t["--theme-border-radius-lg"]), r;
589
+ }
590
+ const lt = {
591
+ setTheme: (e) => {
592
+ const t = document.documentElement, r = rr(e);
593
+ Oe.forEach((o) => {
594
+ t.style.removeProperty(o);
595
+ }), Oe.clear(), Object.entries(r).forEach(([o, n]) => {
596
+ t.style.setProperty(o, n), Oe.add(o);
597
+ });
598
+ }
599
+ }, or = /^[a-zA-Z][a-zA-Z\d+\-.]*:/;
600
+ function Ie(e) {
601
+ const t = typeof e == "string" ? e.trim() : "";
602
+ if (!t || t === "/") return "/";
603
+ const o = (t.startsWith("/") ? t : `/${t}`).replace(/\/+$/, "");
604
+ return o.length > 0 ? `${o}/` : "/";
605
+ }
606
+ function we(e, t) {
607
+ const r = e.trim();
608
+ if (!r) return Ie(t);
609
+ if (or.test(r) || r.startsWith("#")) return r;
610
+ const o = Ie(t), n = r.startsWith("/") ? r : `/${r}`;
611
+ if (o === "/") return n;
612
+ const s = n.replace(/^\/+/, "");
613
+ return `${o}${s}`;
614
+ }
615
+ const ct = Te({}), Ao = () => Re(ct);
616
+ class nr extends rt {
617
+ constructor(t) {
618
+ super(t), this.state = { hasError: !1, error: null };
619
+ }
620
+ static getDerivedStateFromError(t) {
621
+ return { hasError: !0, error: t };
622
+ }
623
+ componentDidCatch(t, r) {
624
+ console.error("[JsonPages Engine]", t, r);
625
+ }
626
+ render() {
627
+ return this.state.hasError && this.state.error ? /* @__PURE__ */ u.jsxs(
628
+ "div",
629
+ {
630
+ style: {
631
+ minHeight: "100vh",
632
+ display: "flex",
633
+ flexDirection: "column",
634
+ alignItems: "center",
635
+ justifyContent: "center",
636
+ padding: 24,
637
+ backgroundColor: "#0f172a",
638
+ color: "#e2e8f0",
639
+ fontFamily: "ui-sans-serif, system-ui, sans-serif"
640
+ },
641
+ children: [
642
+ /* @__PURE__ */ u.jsx("h1", { style: { fontSize: "1.25rem", fontWeight: 700, marginBottom: 8 }, children: "JsonPages Engine Error" }),
643
+ /* @__PURE__ */ u.jsx(
644
+ "pre",
645
+ {
646
+ style: {
647
+ maxWidth: "100%",
648
+ overflow: "auto",
649
+ padding: 16,
650
+ backgroundColor: "rgba(0,0,0,0.3)",
651
+ borderRadius: 8,
652
+ fontSize: 12,
653
+ marginTop: 8
654
+ },
655
+ children: this.state.error.message
656
+ }
657
+ )
658
+ ]
659
+ }
660
+ ) : this.props.children;
661
+ }
662
+ }
663
+ function sr() {
664
+ return /* @__PURE__ */ u.jsxs(u.Fragment, { children: [
665
+ /* @__PURE__ */ u.jsx(zt, {}),
666
+ /* @__PURE__ */ u.jsx(Nt, {})
667
+ ] });
668
+ }
669
+ function ar({ config: e, routesBuilder: t, adminCss: r = "" }) {
670
+ var d, S, J, Y, V, X, Z;
671
+ const {
672
+ registry: o = {},
673
+ schemas: n = {},
674
+ basePath: s = "/",
675
+ pages: a = {},
676
+ siteConfig: c,
677
+ themeConfig: l,
678
+ menuConfig: m,
679
+ refDocuments: b,
680
+ themeCss: h,
681
+ addSection: y,
682
+ NotFoundComponent: w = Kt
683
+ } = e, A = (y == null ? void 0 : y.addableSectionTypes) ?? Object.keys(n).filter((D) => D !== "header" && D !== "footer"), j = {
684
+ saveToFile: (d = e.persistence) == null ? void 0 : d.saveToFile,
685
+ hotSave: (S = e.persistence) == null ? void 0 : S.hotSave,
686
+ coldSave: (J = e.persistence) == null ? void 0 : J.coldSave,
687
+ showLocalSave: ((Y = e.persistence) == null ? void 0 : Y.showLocalSave) ?? !0,
688
+ showHotSave: ((V = e.persistence) == null ? void 0 : V.showHotSave) ?? !1,
689
+ showColdSave: ((X = e.persistence) == null ? void 0 : X.showColdSave) ?? !1
690
+ }, C = typeof (h == null ? void 0 : h.tenant) == "string" ? h.tenant : "", F = typeof (h == null ? void 0 : h.admin) == "string" ? h.admin : r, W = ze(
691
+ () => st({
692
+ pages: a,
693
+ siteConfig: c,
694
+ themeConfig: l,
695
+ menuConfig: m,
696
+ refDocuments: b
697
+ }),
698
+ [a, c, l, m, b]
699
+ ), [E, O] = ot(!1), k = Ie(s);
700
+ oe(() => {
701
+ var D, B;
702
+ try {
703
+ (D = W.themeConfig) != null && D.tokens && lt.setTheme(W.themeConfig);
704
+ } catch (G) {
705
+ console.warn("[JsonPages] setTheme failed", G);
706
+ }
707
+ (B = e.webmcp) != null && B.enabled && qt(), O(!0);
708
+ }, [W.themeConfig, (Z = e.webmcp) == null ? void 0 : Z.enabled]);
709
+ const T = {
710
+ registry: o,
711
+ schemas: n,
712
+ pageRegistry: a,
713
+ siteConfig: c,
714
+ menuConfig: m,
715
+ themeConfig: W.themeConfig,
716
+ refDocuments: b,
717
+ addSectionConfig: y,
718
+ addableSectionTypes: A,
719
+ webmcp: e.webmcp,
720
+ persistence: j,
721
+ routerBasePath: k,
722
+ tenantCss: C,
723
+ adminCss: F,
724
+ NotFoundComponent: w
725
+ }, L = ze(() => {
726
+ const D = _t(t(T));
727
+ return Ot(D, { basename: k });
728
+ }, [
729
+ w,
730
+ y,
731
+ A,
732
+ F,
733
+ W.themeConfig,
734
+ m,
735
+ a,
736
+ j.coldSave,
737
+ j.hotSave,
738
+ j.saveToFile,
739
+ j.showColdSave,
740
+ j.showHotSave,
741
+ j.showLocalSave,
742
+ b,
743
+ k,
744
+ n,
745
+ c,
746
+ C,
747
+ e.webmcp,
748
+ t
749
+ ]);
750
+ return E ? /* @__PURE__ */ u.jsx(nr, { children: /* @__PURE__ */ u.jsx(ct.Provider, { value: e.iconRegistry ?? {}, children: /* @__PURE__ */ u.jsx(
751
+ Qt,
752
+ {
753
+ config: {
754
+ registry: o,
755
+ schemas: n,
756
+ tenantId: e.tenantId ?? "default",
757
+ basePath: k,
758
+ assets: e.assets,
759
+ overlayDisabledSectionTypes: e.overlayDisabledSectionTypes
760
+ },
761
+ children: /* @__PURE__ */ u.jsx(Pt, { router: L })
762
+ }
763
+ ) }) }) : /* @__PURE__ */ u.jsx(
764
+ "div",
765
+ {
766
+ style: {
767
+ minHeight: "100vh",
768
+ display: "flex",
769
+ alignItems: "center",
770
+ justifyContent: "center",
771
+ backgroundColor: "#0f172a",
772
+ color: "#94a3b8",
773
+ fontFamily: "ui-sans-serif, system-ui, sans-serif",
774
+ fontSize: 14
775
+ },
776
+ children: "Loading..."
777
+ }
778
+ );
779
+ }
780
+ const dt = Te(void 0), ir = ({ mode: e, children: t }) => (oe(() => {
781
+ if (e !== "studio") return;
782
+ const r = new MutationObserver((o) => {
783
+ o.forEach((n) => {
784
+ n.addedNodes.forEach((s) => {
785
+ s instanceof HTMLElement && s.hasAttribute("data-radix-portal") && s.setAttribute("data-jp-studio-portal", "true");
786
+ });
787
+ });
788
+ });
789
+ return r.observe(document.body, { childList: !0 }), () => r.disconnect();
790
+ }, [e]), /* @__PURE__ */ u.jsx(dt.Provider, { value: { mode: e }, children: t })), lr = () => {
791
+ const e = Re(dt);
792
+ if (e === void 0)
793
+ throw new Error("useStudio must be used within a StudioProvider");
794
+ return e;
795
+ };
796
+ function cr(e, t) {
797
+ return t.header != null && e["global-header"] !== !1;
798
+ }
799
+ /**
800
+ * @license lucide-react v0.474.0 - ISC
801
+ *
802
+ * This source code is licensed under the ISC license.
803
+ * See the LICENSE file in the root directory of this source tree.
804
+ */
805
+ const dr = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), ut = (...e) => e.filter((t, r, o) => !!t && t.trim() !== "" && o.indexOf(t) === r).join(" ").trim();
806
+ /**
807
+ * @license lucide-react v0.474.0 - ISC
808
+ *
809
+ * This source code is licensed under the ISC license.
810
+ * See the LICENSE file in the root directory of this source tree.
811
+ */
812
+ var ur = {
813
+ xmlns: "http://www.w3.org/2000/svg",
814
+ width: 24,
815
+ height: 24,
816
+ viewBox: "0 0 24 24",
817
+ fill: "none",
818
+ stroke: "currentColor",
819
+ strokeWidth: 2,
820
+ strokeLinecap: "round",
821
+ strokeLinejoin: "round"
822
+ };
823
+ /**
824
+ * @license lucide-react v0.474.0 - ISC
825
+ *
826
+ * This source code is licensed under the ISC license.
827
+ * See the LICENSE file in the root directory of this source tree.
828
+ */
829
+ const mr = nt(
830
+ ({
831
+ color: e = "currentColor",
832
+ size: t = 24,
833
+ strokeWidth: r = 2,
834
+ absoluteStrokeWidth: o,
835
+ className: n = "",
836
+ children: s,
837
+ iconNode: a,
838
+ ...c
839
+ }, l) => Ne(
840
+ "svg",
841
+ {
842
+ ref: l,
843
+ ...ur,
844
+ width: t,
845
+ height: t,
846
+ stroke: e,
847
+ strokeWidth: o ? Number(r) * 24 / Number(t) : r,
848
+ className: ut("lucide", n),
849
+ ...c
850
+ },
851
+ [
852
+ ...a.map(([m, b]) => Ne(m, b)),
853
+ ...Array.isArray(s) ? s : [s]
854
+ ]
855
+ )
856
+ );
857
+ /**
858
+ * @license lucide-react v0.474.0 - ISC
859
+ *
860
+ * This source code is licensed under the ISC license.
861
+ * See the LICENSE file in the root directory of this source tree.
862
+ */
863
+ const De = (e, t) => {
864
+ const r = nt(
865
+ ({ className: o, ...n }, s) => Ne(mr, {
866
+ ref: s,
867
+ iconNode: t,
868
+ className: ut(`lucide-${dr(e)}`, o),
869
+ ...n
870
+ })
871
+ );
872
+ return r.displayName = `${e}`, r;
873
+ };
874
+ /**
875
+ * @license lucide-react v0.474.0 - ISC
876
+ *
877
+ * This source code is licensed under the ISC license.
878
+ * See the LICENSE file in the root directory of this source tree.
879
+ */
880
+ const fr = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]], pr = De("ChevronDown", fr);
881
+ /**
882
+ * @license lucide-react v0.474.0 - ISC
883
+ *
884
+ * This source code is licensed under the ISC license.
885
+ * See the LICENSE file in the root directory of this source tree.
886
+ */
887
+ const br = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]], hr = De("ChevronUp", br);
888
+ /**
889
+ * @license lucide-react v0.474.0 - ISC
890
+ *
891
+ * This source code is licensed under the ISC license.
892
+ * See the LICENSE file in the root directory of this source tree.
893
+ */
894
+ const gr = [
895
+ [
896
+ "path",
897
+ {
898
+ d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
899
+ key: "wmoenq"
900
+ }
901
+ ],
902
+ ["path", { d: "M12 9v4", key: "juzpu7" }],
903
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
904
+ ], yr = De("TriangleAlert", gr);
905
+ function mt(e) {
906
+ var t, r, o = "";
907
+ if (typeof e == "string" || typeof e == "number") o += e;
908
+ else if (typeof e == "object") if (Array.isArray(e)) {
909
+ var n = e.length;
910
+ for (t = 0; t < n; t++) e[t] && (r = mt(e[t])) && (o && (o += " "), o += r);
911
+ } else for (r in e) e[r] && (o && (o += " "), o += r);
912
+ return o;
913
+ }
914
+ function xr() {
915
+ for (var e, t, r = 0, o = "", n = arguments.length; r < n; r++) (e = arguments[r]) && (t = mt(e)) && (o && (o += " "), o += t);
916
+ return o;
917
+ }
918
+ const vr = (e, t) => {
919
+ const r = new Array(e.length + t.length);
920
+ for (let o = 0; o < e.length; o++)
921
+ r[o] = e[o];
922
+ for (let o = 0; o < t.length; o++)
923
+ r[e.length + o] = t[o];
924
+ return r;
925
+ }, wr = (e, t) => ({
926
+ classGroupId: e,
927
+ validator: t
928
+ }), ft = (e = /* @__PURE__ */ new Map(), t = null, r) => ({
929
+ nextPart: e,
930
+ validators: t,
931
+ classGroupId: r
932
+ }), Ce = "-", He = [], kr = "arbitrary..", jr = (e) => {
933
+ const t = Sr(e), {
934
+ conflictingClassGroups: r,
935
+ conflictingClassGroupModifiers: o
936
+ } = e;
937
+ return {
938
+ getClassGroupId: (a) => {
939
+ if (a.startsWith("[") && a.endsWith("]"))
940
+ return Er(a);
941
+ const c = a.split(Ce), l = c[0] === "" && c.length > 1 ? 1 : 0;
942
+ return pt(c, l, t);
943
+ },
944
+ getConflictingClassGroupIds: (a, c) => {
945
+ if (c) {
946
+ const l = o[a], m = r[a];
947
+ return l ? m ? vr(m, l) : l : m || He;
948
+ }
949
+ return r[a] || He;
950
+ }
951
+ };
952
+ }, pt = (e, t, r) => {
953
+ if (e.length - t === 0)
954
+ return r.classGroupId;
955
+ const n = e[t], s = r.nextPart.get(n);
956
+ if (s) {
957
+ const m = pt(e, t + 1, s);
958
+ if (m) return m;
959
+ }
960
+ const a = r.validators;
961
+ if (a === null)
962
+ return;
963
+ const c = t === 0 ? e.join(Ce) : e.slice(t).join(Ce), l = a.length;
964
+ for (let m = 0; m < l; m++) {
965
+ const b = a[m];
966
+ if (b.validator(c))
967
+ return b.classGroupId;
968
+ }
969
+ }, Er = (e) => e.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
970
+ const t = e.slice(1, -1), r = t.indexOf(":"), o = t.slice(0, r);
971
+ return o ? kr + o : void 0;
972
+ })(), Sr = (e) => {
973
+ const {
974
+ theme: t,
975
+ classGroups: r
976
+ } = e;
977
+ return Cr(r, t);
978
+ }, Cr = (e, t) => {
979
+ const r = ft();
980
+ for (const o in e) {
981
+ const n = e[o];
982
+ Fe(n, r, o, t);
983
+ }
984
+ return r;
985
+ }, Fe = (e, t, r, o) => {
986
+ const n = e.length;
987
+ for (let s = 0; s < n; s++) {
988
+ const a = e[s];
989
+ Tr(a, t, r, o);
990
+ }
991
+ }, Tr = (e, t, r, o) => {
992
+ if (typeof e == "string") {
993
+ Rr(e, t, r);
994
+ return;
995
+ }
996
+ if (typeof e == "function") {
997
+ Ar(e, t, r, o);
998
+ return;
999
+ }
1000
+ _r(e, t, r, o);
1001
+ }, Rr = (e, t, r) => {
1002
+ const o = e === "" ? t : bt(t, e);
1003
+ o.classGroupId = r;
1004
+ }, Ar = (e, t, r, o) => {
1005
+ if (Or(e)) {
1006
+ Fe(e(o), t, r, o);
1007
+ return;
1008
+ }
1009
+ t.validators === null && (t.validators = []), t.validators.push(wr(r, e));
1010
+ }, _r = (e, t, r, o) => {
1011
+ const n = Object.entries(e), s = n.length;
1012
+ for (let a = 0; a < s; a++) {
1013
+ const [c, l] = n[a];
1014
+ Fe(l, bt(t, c), r, o);
1015
+ }
1016
+ }, bt = (e, t) => {
1017
+ let r = e;
1018
+ const o = t.split(Ce), n = o.length;
1019
+ for (let s = 0; s < n; s++) {
1020
+ const a = o[s];
1021
+ let c = r.nextPart.get(a);
1022
+ c || (c = ft(), r.nextPart.set(a, c)), r = c;
1023
+ }
1024
+ return r;
1025
+ }, Or = (e) => "isThemeGetter" in e && e.isThemeGetter === !0, Pr = (e) => {
1026
+ if (e < 1)
1027
+ return {
1028
+ get: () => {
1029
+ },
1030
+ set: () => {
1031
+ }
1032
+ };
1033
+ let t = 0, r = /* @__PURE__ */ Object.create(null), o = /* @__PURE__ */ Object.create(null);
1034
+ const n = (s, a) => {
1035
+ r[s] = a, t++, t > e && (t = 0, o = r, r = /* @__PURE__ */ Object.create(null));
1036
+ };
1037
+ return {
1038
+ get(s) {
1039
+ let a = r[s];
1040
+ if (a !== void 0)
1041
+ return a;
1042
+ if ((a = o[s]) !== void 0)
1043
+ return n(s, a), a;
1044
+ },
1045
+ set(s, a) {
1046
+ s in r ? r[s] = a : n(s, a);
1047
+ }
1048
+ };
1049
+ }, $e = "!", qe = ":", zr = [], Xe = (e, t, r, o, n) => ({
1050
+ modifiers: e,
1051
+ hasImportantModifier: t,
1052
+ baseClassName: r,
1053
+ maybePostfixModifierPosition: o,
1054
+ isExternal: n
1055
+ }), Nr = (e) => {
1056
+ const {
1057
+ prefix: t,
1058
+ experimentalParseClassName: r
1059
+ } = e;
1060
+ let o = (n) => {
1061
+ const s = [];
1062
+ let a = 0, c = 0, l = 0, m;
1063
+ const b = n.length;
1064
+ for (let j = 0; j < b; j++) {
1065
+ const C = n[j];
1066
+ if (a === 0 && c === 0) {
1067
+ if (C === qe) {
1068
+ s.push(n.slice(l, j)), l = j + 1;
1069
+ continue;
1070
+ }
1071
+ if (C === "/") {
1072
+ m = j;
1073
+ continue;
1074
+ }
1075
+ }
1076
+ C === "[" ? a++ : C === "]" ? a-- : C === "(" ? c++ : C === ")" && c--;
1077
+ }
1078
+ const h = s.length === 0 ? n : n.slice(l);
1079
+ let y = h, w = !1;
1080
+ h.endsWith($e) ? (y = h.slice(0, -1), w = !0) : (
1081
+ /**
1082
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
1083
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
1084
+ */
1085
+ h.startsWith($e) && (y = h.slice(1), w = !0)
1086
+ );
1087
+ const A = m && m > l ? m - l : void 0;
1088
+ return Xe(s, w, y, A);
1089
+ };
1090
+ if (t) {
1091
+ const n = t + qe, s = o;
1092
+ o = (a) => a.startsWith(n) ? s(a.slice(n.length)) : Xe(zr, !1, a, void 0, !0);
1093
+ }
1094
+ if (r) {
1095
+ const n = o;
1096
+ o = (s) => r({
1097
+ className: s,
1098
+ parseClassName: n
1099
+ });
1100
+ }
1101
+ return o;
1102
+ }, Ir = (e) => {
1103
+ const t = /* @__PURE__ */ new Map();
1104
+ return e.orderSensitiveModifiers.forEach((r, o) => {
1105
+ t.set(r, 1e6 + o);
1106
+ }), (r) => {
1107
+ const o = [];
1108
+ let n = [];
1109
+ for (let s = 0; s < r.length; s++) {
1110
+ const a = r[s], c = a[0] === "[", l = t.has(a);
1111
+ c || l ? (n.length > 0 && (n.sort(), o.push(...n), n = []), o.push(a)) : n.push(a);
1112
+ }
1113
+ return n.length > 0 && (n.sort(), o.push(...n)), o;
1114
+ };
1115
+ }, $r = (e) => ({
1116
+ cache: Pr(e.cacheSize),
1117
+ parseClassName: Nr(e),
1118
+ sortModifiers: Ir(e),
1119
+ ...jr(e)
1120
+ }), Mr = /\s+/, Lr = (e, t) => {
1121
+ const {
1122
+ parseClassName: r,
1123
+ getClassGroupId: o,
1124
+ getConflictingClassGroupIds: n,
1125
+ sortModifiers: s
1126
+ } = t, a = [], c = e.trim().split(Mr);
1127
+ let l = "";
1128
+ for (let m = c.length - 1; m >= 0; m -= 1) {
1129
+ const b = c[m], {
1130
+ isExternal: h,
1131
+ modifiers: y,
1132
+ hasImportantModifier: w,
1133
+ baseClassName: A,
1134
+ maybePostfixModifierPosition: j
1135
+ } = r(b);
1136
+ if (h) {
1137
+ l = b + (l.length > 0 ? " " + l : l);
1138
+ continue;
1139
+ }
1140
+ let C = !!j, F = o(C ? A.substring(0, j) : A);
1141
+ if (!F) {
1142
+ if (!C) {
1143
+ l = b + (l.length > 0 ? " " + l : l);
1144
+ continue;
1145
+ }
1146
+ if (F = o(A), !F) {
1147
+ l = b + (l.length > 0 ? " " + l : l);
1148
+ continue;
1149
+ }
1150
+ C = !1;
1151
+ }
1152
+ const W = y.length === 0 ? "" : y.length === 1 ? y[0] : s(y).join(":"), E = w ? W + $e : W, O = E + F;
1153
+ if (a.indexOf(O) > -1)
1154
+ continue;
1155
+ a.push(O);
1156
+ const k = n(F, C);
1157
+ for (let T = 0; T < k.length; ++T) {
1158
+ const L = k[T];
1159
+ a.push(E + L);
1160
+ }
1161
+ l = b + (l.length > 0 ? " " + l : l);
1162
+ }
1163
+ return l;
1164
+ }, Dr = (...e) => {
1165
+ let t = 0, r, o, n = "";
1166
+ for (; t < e.length; )
1167
+ (r = e[t++]) && (o = ht(r)) && (n && (n += " "), n += o);
1168
+ return n;
1169
+ }, ht = (e) => {
1170
+ if (typeof e == "string")
1171
+ return e;
1172
+ let t, r = "";
1173
+ for (let o = 0; o < e.length; o++)
1174
+ e[o] && (t = ht(e[o])) && (r && (r += " "), r += t);
1175
+ return r;
1176
+ }, Fr = (e, ...t) => {
1177
+ let r, o, n, s;
1178
+ const a = (l) => {
1179
+ const m = t.reduce((b, h) => h(b), e());
1180
+ return r = $r(m), o = r.cache.get, n = r.cache.set, s = c, c(l);
1181
+ }, c = (l) => {
1182
+ const m = o(l);
1183
+ if (m)
1184
+ return m;
1185
+ const b = Lr(l, r);
1186
+ return n(l, b), b;
1187
+ };
1188
+ return s = a, (...l) => s(Dr(...l));
1189
+ }, Wr = [], M = (e) => {
1190
+ const t = (r) => r[e] || Wr;
1191
+ return t.isThemeGetter = !0, t;
1192
+ }, gt = /^\[(?:(\w[\w-]*):)?(.+)\]$/i, yt = /^\((?:(\w[\w-]*):)?(.+)\)$/i, Br = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/, Ur = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/, Gr = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/, Vr = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/, Jr = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/, Yr = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/, K = (e) => Br.test(e), v = (e) => !!e && !Number.isNaN(Number(e)), Q = (e) => !!e && Number.isInteger(Number(e)), Pe = (e) => e.endsWith("%") && v(e.slice(0, -1)), q = (e) => Ur.test(e), xt = () => !0, Hr = (e) => (
1193
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
1194
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
1195
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
1196
+ Gr.test(e) && !Vr.test(e)
1197
+ ), We = () => !1, qr = (e) => Jr.test(e), Xr = (e) => Yr.test(e), Zr = (e) => !f(e) && !p(e), Kr = (e) => ee(e, kt, We), f = (e) => gt.test(e), te = (e) => ee(e, jt, Hr), Ze = (e) => ee(e, ao, v), Qr = (e) => ee(e, St, xt), eo = (e) => ee(e, Et, We), Ke = (e) => ee(e, vt, We), to = (e) => ee(e, wt, Xr), ke = (e) => ee(e, Ct, qr), p = (e) => yt.test(e), ue = (e) => ne(e, jt), ro = (e) => ne(e, Et), Qe = (e) => ne(e, vt), oo = (e) => ne(e, kt), no = (e) => ne(e, wt), je = (e) => ne(e, Ct, !0), so = (e) => ne(e, St, !0), ee = (e, t, r) => {
1198
+ const o = gt.exec(e);
1199
+ return o ? o[1] ? t(o[1]) : r(o[2]) : !1;
1200
+ }, ne = (e, t, r = !1) => {
1201
+ const o = yt.exec(e);
1202
+ return o ? o[1] ? t(o[1]) : r : !1;
1203
+ }, vt = (e) => e === "position" || e === "percentage", wt = (e) => e === "image" || e === "url", kt = (e) => e === "length" || e === "size" || e === "bg-size", jt = (e) => e === "length", ao = (e) => e === "number", Et = (e) => e === "family-name", St = (e) => e === "number" || e === "weight", Ct = (e) => e === "shadow", io = () => {
1204
+ const e = M("color"), t = M("font"), r = M("text"), o = M("font-weight"), n = M("tracking"), s = M("leading"), a = M("breakpoint"), c = M("container"), l = M("spacing"), m = M("radius"), b = M("shadow"), h = M("inset-shadow"), y = M("text-shadow"), w = M("drop-shadow"), A = M("blur"), j = M("perspective"), C = M("aspect"), F = M("ease"), W = M("animate"), E = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"], O = () => [
1205
+ "center",
1206
+ "top",
1207
+ "bottom",
1208
+ "left",
1209
+ "right",
1210
+ "top-left",
1211
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1212
+ "left-top",
1213
+ "top-right",
1214
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1215
+ "right-top",
1216
+ "bottom-right",
1217
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1218
+ "right-bottom",
1219
+ "bottom-left",
1220
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1221
+ "left-bottom"
1222
+ ], k = () => [...O(), p, f], T = () => ["auto", "hidden", "clip", "visible", "scroll"], L = () => ["auto", "contain", "none"], d = () => [p, f, l], S = () => [K, "full", "auto", ...d()], J = () => [Q, "none", "subgrid", p, f], Y = () => ["auto", {
1223
+ span: ["full", Q, p, f]
1224
+ }, Q, p, f], V = () => [Q, "auto", p, f], X = () => ["auto", "min", "max", "fr", p, f], Z = () => ["start", "end", "center", "between", "around", "evenly", "stretch", "baseline", "center-safe", "end-safe"], D = () => ["start", "end", "center", "stretch", "center-safe", "end-safe"], B = () => ["auto", ...d()], G = () => [K, "auto", "full", "dvw", "dvh", "lvw", "lvh", "svw", "svh", "min", "max", "fit", ...d()], se = () => [K, "screen", "full", "dvw", "lvw", "svw", "min", "max", "fit", ...d()], ae = () => [K, "screen", "full", "lh", "dvh", "lvh", "svh", "min", "max", "fit", ...d()], g = () => [e, p, f], i = () => [...O(), Qe, Ke, {
1225
+ position: [p, f]
1226
+ }], x = () => ["no-repeat", {
1227
+ repeat: ["", "x", "y", "space", "round"]
1228
+ }], R = () => ["auto", "cover", "contain", oo, Kr, {
1229
+ size: [p, f]
1230
+ }], P = () => [Pe, ue, te], N = () => [
1231
+ // Deprecated since Tailwind CSS v4.0.0
1232
+ "",
1233
+ "none",
1234
+ "full",
1235
+ m,
1236
+ p,
1237
+ f
1238
+ ], $ = () => ["", v, ue, te], _ = () => ["solid", "dashed", "dotted", "double"], H = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"], z = () => [v, Pe, Qe, Ke], pe = () => [
1239
+ // Deprecated since Tailwind CSS v4.0.0
1240
+ "",
1241
+ "none",
1242
+ A,
1243
+ p,
1244
+ f
1245
+ ], be = () => ["none", v, p, f], he = () => ["none", v, p, f], Ae = () => [v, p, f], ge = () => [K, "full", ...d()];
1246
+ return {
1247
+ cacheSize: 500,
1248
+ theme: {
1249
+ animate: ["spin", "ping", "pulse", "bounce"],
1250
+ aspect: ["video"],
1251
+ blur: [q],
1252
+ breakpoint: [q],
1253
+ color: [xt],
1254
+ container: [q],
1255
+ "drop-shadow": [q],
1256
+ ease: ["in", "out", "in-out"],
1257
+ font: [Zr],
1258
+ "font-weight": ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black"],
1259
+ "inset-shadow": [q],
1260
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose"],
1261
+ perspective: ["dramatic", "near", "normal", "midrange", "distant", "none"],
1262
+ radius: [q],
1263
+ shadow: [q],
1264
+ spacing: ["px", v],
1265
+ text: [q],
1266
+ "text-shadow": [q],
1267
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest"]
1268
+ },
1269
+ classGroups: {
1270
+ // --------------
1271
+ // --- Layout ---
1272
+ // --------------
1273
+ /**
1274
+ * Aspect Ratio
1275
+ * @see https://tailwindcss.com/docs/aspect-ratio
1276
+ */
1277
+ aspect: [{
1278
+ aspect: ["auto", "square", K, f, p, C]
1279
+ }],
1280
+ /**
1281
+ * Container
1282
+ * @see https://tailwindcss.com/docs/container
1283
+ * @deprecated since Tailwind CSS v4.0.0
1284
+ */
1285
+ container: ["container"],
1286
+ /**
1287
+ * Columns
1288
+ * @see https://tailwindcss.com/docs/columns
1289
+ */
1290
+ columns: [{
1291
+ columns: [v, f, p, c]
1292
+ }],
1293
+ /**
1294
+ * Break After
1295
+ * @see https://tailwindcss.com/docs/break-after
1296
+ */
1297
+ "break-after": [{
1298
+ "break-after": E()
1299
+ }],
1300
+ /**
1301
+ * Break Before
1302
+ * @see https://tailwindcss.com/docs/break-before
1303
+ */
1304
+ "break-before": [{
1305
+ "break-before": E()
1306
+ }],
1307
+ /**
1308
+ * Break Inside
1309
+ * @see https://tailwindcss.com/docs/break-inside
1310
+ */
1311
+ "break-inside": [{
1312
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
1313
+ }],
1314
+ /**
1315
+ * Box Decoration Break
1316
+ * @see https://tailwindcss.com/docs/box-decoration-break
1317
+ */
1318
+ "box-decoration": [{
1319
+ "box-decoration": ["slice", "clone"]
1320
+ }],
1321
+ /**
1322
+ * Box Sizing
1323
+ * @see https://tailwindcss.com/docs/box-sizing
1324
+ */
1325
+ box: [{
1326
+ box: ["border", "content"]
1327
+ }],
1328
+ /**
1329
+ * Display
1330
+ * @see https://tailwindcss.com/docs/display
1331
+ */
1332
+ display: ["block", "inline-block", "inline", "flex", "inline-flex", "table", "inline-table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row-group", "table-row", "flow-root", "grid", "inline-grid", "contents", "list-item", "hidden"],
1333
+ /**
1334
+ * Screen Reader Only
1335
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
1336
+ */
1337
+ sr: ["sr-only", "not-sr-only"],
1338
+ /**
1339
+ * Floats
1340
+ * @see https://tailwindcss.com/docs/float
1341
+ */
1342
+ float: [{
1343
+ float: ["right", "left", "none", "start", "end"]
1344
+ }],
1345
+ /**
1346
+ * Clear
1347
+ * @see https://tailwindcss.com/docs/clear
1348
+ */
1349
+ clear: [{
1350
+ clear: ["left", "right", "both", "none", "start", "end"]
1351
+ }],
1352
+ /**
1353
+ * Isolation
1354
+ * @see https://tailwindcss.com/docs/isolation
1355
+ */
1356
+ isolation: ["isolate", "isolation-auto"],
1357
+ /**
1358
+ * Object Fit
1359
+ * @see https://tailwindcss.com/docs/object-fit
1360
+ */
1361
+ "object-fit": [{
1362
+ object: ["contain", "cover", "fill", "none", "scale-down"]
1363
+ }],
1364
+ /**
1365
+ * Object Position
1366
+ * @see https://tailwindcss.com/docs/object-position
1367
+ */
1368
+ "object-position": [{
1369
+ object: k()
1370
+ }],
1371
+ /**
1372
+ * Overflow
1373
+ * @see https://tailwindcss.com/docs/overflow
1374
+ */
1375
+ overflow: [{
1376
+ overflow: T()
1377
+ }],
1378
+ /**
1379
+ * Overflow X
1380
+ * @see https://tailwindcss.com/docs/overflow
1381
+ */
1382
+ "overflow-x": [{
1383
+ "overflow-x": T()
1384
+ }],
1385
+ /**
1386
+ * Overflow Y
1387
+ * @see https://tailwindcss.com/docs/overflow
1388
+ */
1389
+ "overflow-y": [{
1390
+ "overflow-y": T()
1391
+ }],
1392
+ /**
1393
+ * Overscroll Behavior
1394
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1395
+ */
1396
+ overscroll: [{
1397
+ overscroll: L()
1398
+ }],
1399
+ /**
1400
+ * Overscroll Behavior X
1401
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1402
+ */
1403
+ "overscroll-x": [{
1404
+ "overscroll-x": L()
1405
+ }],
1406
+ /**
1407
+ * Overscroll Behavior Y
1408
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1409
+ */
1410
+ "overscroll-y": [{
1411
+ "overscroll-y": L()
1412
+ }],
1413
+ /**
1414
+ * Position
1415
+ * @see https://tailwindcss.com/docs/position
1416
+ */
1417
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
1418
+ /**
1419
+ * Inset
1420
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1421
+ */
1422
+ inset: [{
1423
+ inset: S()
1424
+ }],
1425
+ /**
1426
+ * Inset Inline
1427
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1428
+ */
1429
+ "inset-x": [{
1430
+ "inset-x": S()
1431
+ }],
1432
+ /**
1433
+ * Inset Block
1434
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1435
+ */
1436
+ "inset-y": [{
1437
+ "inset-y": S()
1438
+ }],
1439
+ /**
1440
+ * Inset Inline Start
1441
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1442
+ * @todo class group will be renamed to `inset-s` in next major release
1443
+ */
1444
+ start: [{
1445
+ "inset-s": S(),
1446
+ /**
1447
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.
1448
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
1449
+ */
1450
+ start: S()
1451
+ }],
1452
+ /**
1453
+ * Inset Inline End
1454
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1455
+ * @todo class group will be renamed to `inset-e` in next major release
1456
+ */
1457
+ end: [{
1458
+ "inset-e": S(),
1459
+ /**
1460
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.
1461
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
1462
+ */
1463
+ end: S()
1464
+ }],
1465
+ /**
1466
+ * Inset Block Start
1467
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1468
+ */
1469
+ "inset-bs": [{
1470
+ "inset-bs": S()
1471
+ }],
1472
+ /**
1473
+ * Inset Block End
1474
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1475
+ */
1476
+ "inset-be": [{
1477
+ "inset-be": S()
1478
+ }],
1479
+ /**
1480
+ * Top
1481
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1482
+ */
1483
+ top: [{
1484
+ top: S()
1485
+ }],
1486
+ /**
1487
+ * Right
1488
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1489
+ */
1490
+ right: [{
1491
+ right: S()
1492
+ }],
1493
+ /**
1494
+ * Bottom
1495
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1496
+ */
1497
+ bottom: [{
1498
+ bottom: S()
1499
+ }],
1500
+ /**
1501
+ * Left
1502
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1503
+ */
1504
+ left: [{
1505
+ left: S()
1506
+ }],
1507
+ /**
1508
+ * Visibility
1509
+ * @see https://tailwindcss.com/docs/visibility
1510
+ */
1511
+ visibility: ["visible", "invisible", "collapse"],
1512
+ /**
1513
+ * Z-Index
1514
+ * @see https://tailwindcss.com/docs/z-index
1515
+ */
1516
+ z: [{
1517
+ z: [Q, "auto", p, f]
1518
+ }],
1519
+ // ------------------------
1520
+ // --- Flexbox and Grid ---
1521
+ // ------------------------
1522
+ /**
1523
+ * Flex Basis
1524
+ * @see https://tailwindcss.com/docs/flex-basis
1525
+ */
1526
+ basis: [{
1527
+ basis: [K, "full", "auto", c, ...d()]
1528
+ }],
1529
+ /**
1530
+ * Flex Direction
1531
+ * @see https://tailwindcss.com/docs/flex-direction
1532
+ */
1533
+ "flex-direction": [{
1534
+ flex: ["row", "row-reverse", "col", "col-reverse"]
1535
+ }],
1536
+ /**
1537
+ * Flex Wrap
1538
+ * @see https://tailwindcss.com/docs/flex-wrap
1539
+ */
1540
+ "flex-wrap": [{
1541
+ flex: ["nowrap", "wrap", "wrap-reverse"]
1542
+ }],
1543
+ /**
1544
+ * Flex
1545
+ * @see https://tailwindcss.com/docs/flex
1546
+ */
1547
+ flex: [{
1548
+ flex: [v, K, "auto", "initial", "none", f]
1549
+ }],
1550
+ /**
1551
+ * Flex Grow
1552
+ * @see https://tailwindcss.com/docs/flex-grow
1553
+ */
1554
+ grow: [{
1555
+ grow: ["", v, p, f]
1556
+ }],
1557
+ /**
1558
+ * Flex Shrink
1559
+ * @see https://tailwindcss.com/docs/flex-shrink
1560
+ */
1561
+ shrink: [{
1562
+ shrink: ["", v, p, f]
1563
+ }],
1564
+ /**
1565
+ * Order
1566
+ * @see https://tailwindcss.com/docs/order
1567
+ */
1568
+ order: [{
1569
+ order: [Q, "first", "last", "none", p, f]
1570
+ }],
1571
+ /**
1572
+ * Grid Template Columns
1573
+ * @see https://tailwindcss.com/docs/grid-template-columns
1574
+ */
1575
+ "grid-cols": [{
1576
+ "grid-cols": J()
1577
+ }],
1578
+ /**
1579
+ * Grid Column Start / End
1580
+ * @see https://tailwindcss.com/docs/grid-column
1581
+ */
1582
+ "col-start-end": [{
1583
+ col: Y()
1584
+ }],
1585
+ /**
1586
+ * Grid Column Start
1587
+ * @see https://tailwindcss.com/docs/grid-column
1588
+ */
1589
+ "col-start": [{
1590
+ "col-start": V()
1591
+ }],
1592
+ /**
1593
+ * Grid Column End
1594
+ * @see https://tailwindcss.com/docs/grid-column
1595
+ */
1596
+ "col-end": [{
1597
+ "col-end": V()
1598
+ }],
1599
+ /**
1600
+ * Grid Template Rows
1601
+ * @see https://tailwindcss.com/docs/grid-template-rows
1602
+ */
1603
+ "grid-rows": [{
1604
+ "grid-rows": J()
1605
+ }],
1606
+ /**
1607
+ * Grid Row Start / End
1608
+ * @see https://tailwindcss.com/docs/grid-row
1609
+ */
1610
+ "row-start-end": [{
1611
+ row: Y()
1612
+ }],
1613
+ /**
1614
+ * Grid Row Start
1615
+ * @see https://tailwindcss.com/docs/grid-row
1616
+ */
1617
+ "row-start": [{
1618
+ "row-start": V()
1619
+ }],
1620
+ /**
1621
+ * Grid Row End
1622
+ * @see https://tailwindcss.com/docs/grid-row
1623
+ */
1624
+ "row-end": [{
1625
+ "row-end": V()
1626
+ }],
1627
+ /**
1628
+ * Grid Auto Flow
1629
+ * @see https://tailwindcss.com/docs/grid-auto-flow
1630
+ */
1631
+ "grid-flow": [{
1632
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
1633
+ }],
1634
+ /**
1635
+ * Grid Auto Columns
1636
+ * @see https://tailwindcss.com/docs/grid-auto-columns
1637
+ */
1638
+ "auto-cols": [{
1639
+ "auto-cols": X()
1640
+ }],
1641
+ /**
1642
+ * Grid Auto Rows
1643
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1644
+ */
1645
+ "auto-rows": [{
1646
+ "auto-rows": X()
1647
+ }],
1648
+ /**
1649
+ * Gap
1650
+ * @see https://tailwindcss.com/docs/gap
1651
+ */
1652
+ gap: [{
1653
+ gap: d()
1654
+ }],
1655
+ /**
1656
+ * Gap X
1657
+ * @see https://tailwindcss.com/docs/gap
1658
+ */
1659
+ "gap-x": [{
1660
+ "gap-x": d()
1661
+ }],
1662
+ /**
1663
+ * Gap Y
1664
+ * @see https://tailwindcss.com/docs/gap
1665
+ */
1666
+ "gap-y": [{
1667
+ "gap-y": d()
1668
+ }],
1669
+ /**
1670
+ * Justify Content
1671
+ * @see https://tailwindcss.com/docs/justify-content
1672
+ */
1673
+ "justify-content": [{
1674
+ justify: [...Z(), "normal"]
1675
+ }],
1676
+ /**
1677
+ * Justify Items
1678
+ * @see https://tailwindcss.com/docs/justify-items
1679
+ */
1680
+ "justify-items": [{
1681
+ "justify-items": [...D(), "normal"]
1682
+ }],
1683
+ /**
1684
+ * Justify Self
1685
+ * @see https://tailwindcss.com/docs/justify-self
1686
+ */
1687
+ "justify-self": [{
1688
+ "justify-self": ["auto", ...D()]
1689
+ }],
1690
+ /**
1691
+ * Align Content
1692
+ * @see https://tailwindcss.com/docs/align-content
1693
+ */
1694
+ "align-content": [{
1695
+ content: ["normal", ...Z()]
1696
+ }],
1697
+ /**
1698
+ * Align Items
1699
+ * @see https://tailwindcss.com/docs/align-items
1700
+ */
1701
+ "align-items": [{
1702
+ items: [...D(), {
1703
+ baseline: ["", "last"]
1704
+ }]
1705
+ }],
1706
+ /**
1707
+ * Align Self
1708
+ * @see https://tailwindcss.com/docs/align-self
1709
+ */
1710
+ "align-self": [{
1711
+ self: ["auto", ...D(), {
1712
+ baseline: ["", "last"]
1713
+ }]
1714
+ }],
1715
+ /**
1716
+ * Place Content
1717
+ * @see https://tailwindcss.com/docs/place-content
1718
+ */
1719
+ "place-content": [{
1720
+ "place-content": Z()
1721
+ }],
1722
+ /**
1723
+ * Place Items
1724
+ * @see https://tailwindcss.com/docs/place-items
1725
+ */
1726
+ "place-items": [{
1727
+ "place-items": [...D(), "baseline"]
1728
+ }],
1729
+ /**
1730
+ * Place Self
1731
+ * @see https://tailwindcss.com/docs/place-self
1732
+ */
1733
+ "place-self": [{
1734
+ "place-self": ["auto", ...D()]
1735
+ }],
1736
+ // Spacing
1737
+ /**
1738
+ * Padding
1739
+ * @see https://tailwindcss.com/docs/padding
1740
+ */
1741
+ p: [{
1742
+ p: d()
1743
+ }],
1744
+ /**
1745
+ * Padding Inline
1746
+ * @see https://tailwindcss.com/docs/padding
1747
+ */
1748
+ px: [{
1749
+ px: d()
1750
+ }],
1751
+ /**
1752
+ * Padding Block
1753
+ * @see https://tailwindcss.com/docs/padding
1754
+ */
1755
+ py: [{
1756
+ py: d()
1757
+ }],
1758
+ /**
1759
+ * Padding Inline Start
1760
+ * @see https://tailwindcss.com/docs/padding
1761
+ */
1762
+ ps: [{
1763
+ ps: d()
1764
+ }],
1765
+ /**
1766
+ * Padding Inline End
1767
+ * @see https://tailwindcss.com/docs/padding
1768
+ */
1769
+ pe: [{
1770
+ pe: d()
1771
+ }],
1772
+ /**
1773
+ * Padding Block Start
1774
+ * @see https://tailwindcss.com/docs/padding
1775
+ */
1776
+ pbs: [{
1777
+ pbs: d()
1778
+ }],
1779
+ /**
1780
+ * Padding Block End
1781
+ * @see https://tailwindcss.com/docs/padding
1782
+ */
1783
+ pbe: [{
1784
+ pbe: d()
1785
+ }],
1786
+ /**
1787
+ * Padding Top
1788
+ * @see https://tailwindcss.com/docs/padding
1789
+ */
1790
+ pt: [{
1791
+ pt: d()
1792
+ }],
1793
+ /**
1794
+ * Padding Right
1795
+ * @see https://tailwindcss.com/docs/padding
1796
+ */
1797
+ pr: [{
1798
+ pr: d()
1799
+ }],
1800
+ /**
1801
+ * Padding Bottom
1802
+ * @see https://tailwindcss.com/docs/padding
1803
+ */
1804
+ pb: [{
1805
+ pb: d()
1806
+ }],
1807
+ /**
1808
+ * Padding Left
1809
+ * @see https://tailwindcss.com/docs/padding
1810
+ */
1811
+ pl: [{
1812
+ pl: d()
1813
+ }],
1814
+ /**
1815
+ * Margin
1816
+ * @see https://tailwindcss.com/docs/margin
1817
+ */
1818
+ m: [{
1819
+ m: B()
1820
+ }],
1821
+ /**
1822
+ * Margin Inline
1823
+ * @see https://tailwindcss.com/docs/margin
1824
+ */
1825
+ mx: [{
1826
+ mx: B()
1827
+ }],
1828
+ /**
1829
+ * Margin Block
1830
+ * @see https://tailwindcss.com/docs/margin
1831
+ */
1832
+ my: [{
1833
+ my: B()
1834
+ }],
1835
+ /**
1836
+ * Margin Inline Start
1837
+ * @see https://tailwindcss.com/docs/margin
1838
+ */
1839
+ ms: [{
1840
+ ms: B()
1841
+ }],
1842
+ /**
1843
+ * Margin Inline End
1844
+ * @see https://tailwindcss.com/docs/margin
1845
+ */
1846
+ me: [{
1847
+ me: B()
1848
+ }],
1849
+ /**
1850
+ * Margin Block Start
1851
+ * @see https://tailwindcss.com/docs/margin
1852
+ */
1853
+ mbs: [{
1854
+ mbs: B()
1855
+ }],
1856
+ /**
1857
+ * Margin Block End
1858
+ * @see https://tailwindcss.com/docs/margin
1859
+ */
1860
+ mbe: [{
1861
+ mbe: B()
1862
+ }],
1863
+ /**
1864
+ * Margin Top
1865
+ * @see https://tailwindcss.com/docs/margin
1866
+ */
1867
+ mt: [{
1868
+ mt: B()
1869
+ }],
1870
+ /**
1871
+ * Margin Right
1872
+ * @see https://tailwindcss.com/docs/margin
1873
+ */
1874
+ mr: [{
1875
+ mr: B()
1876
+ }],
1877
+ /**
1878
+ * Margin Bottom
1879
+ * @see https://tailwindcss.com/docs/margin
1880
+ */
1881
+ mb: [{
1882
+ mb: B()
1883
+ }],
1884
+ /**
1885
+ * Margin Left
1886
+ * @see https://tailwindcss.com/docs/margin
1887
+ */
1888
+ ml: [{
1889
+ ml: B()
1890
+ }],
1891
+ /**
1892
+ * Space Between X
1893
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1894
+ */
1895
+ "space-x": [{
1896
+ "space-x": d()
1897
+ }],
1898
+ /**
1899
+ * Space Between X Reverse
1900
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1901
+ */
1902
+ "space-x-reverse": ["space-x-reverse"],
1903
+ /**
1904
+ * Space Between Y
1905
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1906
+ */
1907
+ "space-y": [{
1908
+ "space-y": d()
1909
+ }],
1910
+ /**
1911
+ * Space Between Y Reverse
1912
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1913
+ */
1914
+ "space-y-reverse": ["space-y-reverse"],
1915
+ // --------------
1916
+ // --- Sizing ---
1917
+ // --------------
1918
+ /**
1919
+ * Size
1920
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1921
+ */
1922
+ size: [{
1923
+ size: G()
1924
+ }],
1925
+ /**
1926
+ * Inline Size
1927
+ * @see https://tailwindcss.com/docs/width
1928
+ */
1929
+ "inline-size": [{
1930
+ inline: ["auto", ...se()]
1931
+ }],
1932
+ /**
1933
+ * Min-Inline Size
1934
+ * @see https://tailwindcss.com/docs/min-width
1935
+ */
1936
+ "min-inline-size": [{
1937
+ "min-inline": ["auto", ...se()]
1938
+ }],
1939
+ /**
1940
+ * Max-Inline Size
1941
+ * @see https://tailwindcss.com/docs/max-width
1942
+ */
1943
+ "max-inline-size": [{
1944
+ "max-inline": ["none", ...se()]
1945
+ }],
1946
+ /**
1947
+ * Block Size
1948
+ * @see https://tailwindcss.com/docs/height
1949
+ */
1950
+ "block-size": [{
1951
+ block: ["auto", ...ae()]
1952
+ }],
1953
+ /**
1954
+ * Min-Block Size
1955
+ * @see https://tailwindcss.com/docs/min-height
1956
+ */
1957
+ "min-block-size": [{
1958
+ "min-block": ["auto", ...ae()]
1959
+ }],
1960
+ /**
1961
+ * Max-Block Size
1962
+ * @see https://tailwindcss.com/docs/max-height
1963
+ */
1964
+ "max-block-size": [{
1965
+ "max-block": ["none", ...ae()]
1966
+ }],
1967
+ /**
1968
+ * Width
1969
+ * @see https://tailwindcss.com/docs/width
1970
+ */
1971
+ w: [{
1972
+ w: [c, "screen", ...G()]
1973
+ }],
1974
+ /**
1975
+ * Min-Width
1976
+ * @see https://tailwindcss.com/docs/min-width
1977
+ */
1978
+ "min-w": [{
1979
+ "min-w": [
1980
+ c,
1981
+ "screen",
1982
+ /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1983
+ "none",
1984
+ ...G()
1985
+ ]
1986
+ }],
1987
+ /**
1988
+ * Max-Width
1989
+ * @see https://tailwindcss.com/docs/max-width
1990
+ */
1991
+ "max-w": [{
1992
+ "max-w": [
1993
+ c,
1994
+ "screen",
1995
+ "none",
1996
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1997
+ "prose",
1998
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1999
+ {
2000
+ screen: [a]
2001
+ },
2002
+ ...G()
2003
+ ]
2004
+ }],
2005
+ /**
2006
+ * Height
2007
+ * @see https://tailwindcss.com/docs/height
2008
+ */
2009
+ h: [{
2010
+ h: ["screen", "lh", ...G()]
2011
+ }],
2012
+ /**
2013
+ * Min-Height
2014
+ * @see https://tailwindcss.com/docs/min-height
2015
+ */
2016
+ "min-h": [{
2017
+ "min-h": ["screen", "lh", "none", ...G()]
2018
+ }],
2019
+ /**
2020
+ * Max-Height
2021
+ * @see https://tailwindcss.com/docs/max-height
2022
+ */
2023
+ "max-h": [{
2024
+ "max-h": ["screen", "lh", ...G()]
2025
+ }],
2026
+ // ------------------
2027
+ // --- Typography ---
2028
+ // ------------------
2029
+ /**
2030
+ * Font Size
2031
+ * @see https://tailwindcss.com/docs/font-size
2032
+ */
2033
+ "font-size": [{
2034
+ text: ["base", r, ue, te]
2035
+ }],
2036
+ /**
2037
+ * Font Smoothing
2038
+ * @see https://tailwindcss.com/docs/font-smoothing
2039
+ */
2040
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
2041
+ /**
2042
+ * Font Style
2043
+ * @see https://tailwindcss.com/docs/font-style
2044
+ */
2045
+ "font-style": ["italic", "not-italic"],
2046
+ /**
2047
+ * Font Weight
2048
+ * @see https://tailwindcss.com/docs/font-weight
2049
+ */
2050
+ "font-weight": [{
2051
+ font: [o, so, Qr]
2052
+ }],
2053
+ /**
2054
+ * Font Stretch
2055
+ * @see https://tailwindcss.com/docs/font-stretch
2056
+ */
2057
+ "font-stretch": [{
2058
+ "font-stretch": ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", Pe, f]
2059
+ }],
2060
+ /**
2061
+ * Font Family
2062
+ * @see https://tailwindcss.com/docs/font-family
2063
+ */
2064
+ "font-family": [{
2065
+ font: [ro, eo, t]
2066
+ }],
2067
+ /**
2068
+ * Font Feature Settings
2069
+ * @see https://tailwindcss.com/docs/font-feature-settings
2070
+ */
2071
+ "font-features": [{
2072
+ "font-features": [f]
2073
+ }],
2074
+ /**
2075
+ * Font Variant Numeric
2076
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2077
+ */
2078
+ "fvn-normal": ["normal-nums"],
2079
+ /**
2080
+ * Font Variant Numeric
2081
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2082
+ */
2083
+ "fvn-ordinal": ["ordinal"],
2084
+ /**
2085
+ * Font Variant Numeric
2086
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2087
+ */
2088
+ "fvn-slashed-zero": ["slashed-zero"],
2089
+ /**
2090
+ * Font Variant Numeric
2091
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2092
+ */
2093
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
2094
+ /**
2095
+ * Font Variant Numeric
2096
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2097
+ */
2098
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
2099
+ /**
2100
+ * Font Variant Numeric
2101
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2102
+ */
2103
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
2104
+ /**
2105
+ * Letter Spacing
2106
+ * @see https://tailwindcss.com/docs/letter-spacing
2107
+ */
2108
+ tracking: [{
2109
+ tracking: [n, p, f]
2110
+ }],
2111
+ /**
2112
+ * Line Clamp
2113
+ * @see https://tailwindcss.com/docs/line-clamp
2114
+ */
2115
+ "line-clamp": [{
2116
+ "line-clamp": [v, "none", p, Ze]
2117
+ }],
2118
+ /**
2119
+ * Line Height
2120
+ * @see https://tailwindcss.com/docs/line-height
2121
+ */
2122
+ leading: [{
2123
+ leading: [
2124
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
2125
+ s,
2126
+ ...d()
2127
+ ]
2128
+ }],
2129
+ /**
2130
+ * List Style Image
2131
+ * @see https://tailwindcss.com/docs/list-style-image
2132
+ */
2133
+ "list-image": [{
2134
+ "list-image": ["none", p, f]
2135
+ }],
2136
+ /**
2137
+ * List Style Position
2138
+ * @see https://tailwindcss.com/docs/list-style-position
2139
+ */
2140
+ "list-style-position": [{
2141
+ list: ["inside", "outside"]
2142
+ }],
2143
+ /**
2144
+ * List Style Type
2145
+ * @see https://tailwindcss.com/docs/list-style-type
2146
+ */
2147
+ "list-style-type": [{
2148
+ list: ["disc", "decimal", "none", p, f]
2149
+ }],
2150
+ /**
2151
+ * Text Alignment
2152
+ * @see https://tailwindcss.com/docs/text-align
2153
+ */
2154
+ "text-alignment": [{
2155
+ text: ["left", "center", "right", "justify", "start", "end"]
2156
+ }],
2157
+ /**
2158
+ * Placeholder Color
2159
+ * @deprecated since Tailwind CSS v3.0.0
2160
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
2161
+ */
2162
+ "placeholder-color": [{
2163
+ placeholder: g()
2164
+ }],
2165
+ /**
2166
+ * Text Color
2167
+ * @see https://tailwindcss.com/docs/text-color
2168
+ */
2169
+ "text-color": [{
2170
+ text: g()
2171
+ }],
2172
+ /**
2173
+ * Text Decoration
2174
+ * @see https://tailwindcss.com/docs/text-decoration
2175
+ */
2176
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
2177
+ /**
2178
+ * Text Decoration Style
2179
+ * @see https://tailwindcss.com/docs/text-decoration-style
2180
+ */
2181
+ "text-decoration-style": [{
2182
+ decoration: [..._(), "wavy"]
2183
+ }],
2184
+ /**
2185
+ * Text Decoration Thickness
2186
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
2187
+ */
2188
+ "text-decoration-thickness": [{
2189
+ decoration: [v, "from-font", "auto", p, te]
2190
+ }],
2191
+ /**
2192
+ * Text Decoration Color
2193
+ * @see https://tailwindcss.com/docs/text-decoration-color
2194
+ */
2195
+ "text-decoration-color": [{
2196
+ decoration: g()
2197
+ }],
2198
+ /**
2199
+ * Text Underline Offset
2200
+ * @see https://tailwindcss.com/docs/text-underline-offset
2201
+ */
2202
+ "underline-offset": [{
2203
+ "underline-offset": [v, "auto", p, f]
2204
+ }],
2205
+ /**
2206
+ * Text Transform
2207
+ * @see https://tailwindcss.com/docs/text-transform
2208
+ */
2209
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
2210
+ /**
2211
+ * Text Overflow
2212
+ * @see https://tailwindcss.com/docs/text-overflow
2213
+ */
2214
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
2215
+ /**
2216
+ * Text Wrap
2217
+ * @see https://tailwindcss.com/docs/text-wrap
2218
+ */
2219
+ "text-wrap": [{
2220
+ text: ["wrap", "nowrap", "balance", "pretty"]
2221
+ }],
2222
+ /**
2223
+ * Text Indent
2224
+ * @see https://tailwindcss.com/docs/text-indent
2225
+ */
2226
+ indent: [{
2227
+ indent: d()
2228
+ }],
2229
+ /**
2230
+ * Vertical Alignment
2231
+ * @see https://tailwindcss.com/docs/vertical-align
2232
+ */
2233
+ "vertical-align": [{
2234
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", p, f]
2235
+ }],
2236
+ /**
2237
+ * Whitespace
2238
+ * @see https://tailwindcss.com/docs/whitespace
2239
+ */
2240
+ whitespace: [{
2241
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
2242
+ }],
2243
+ /**
2244
+ * Word Break
2245
+ * @see https://tailwindcss.com/docs/word-break
2246
+ */
2247
+ break: [{
2248
+ break: ["normal", "words", "all", "keep"]
2249
+ }],
2250
+ /**
2251
+ * Overflow Wrap
2252
+ * @see https://tailwindcss.com/docs/overflow-wrap
2253
+ */
2254
+ wrap: [{
2255
+ wrap: ["break-word", "anywhere", "normal"]
2256
+ }],
2257
+ /**
2258
+ * Hyphens
2259
+ * @see https://tailwindcss.com/docs/hyphens
2260
+ */
2261
+ hyphens: [{
2262
+ hyphens: ["none", "manual", "auto"]
2263
+ }],
2264
+ /**
2265
+ * Content
2266
+ * @see https://tailwindcss.com/docs/content
2267
+ */
2268
+ content: [{
2269
+ content: ["none", p, f]
2270
+ }],
2271
+ // -------------------
2272
+ // --- Backgrounds ---
2273
+ // -------------------
2274
+ /**
2275
+ * Background Attachment
2276
+ * @see https://tailwindcss.com/docs/background-attachment
2277
+ */
2278
+ "bg-attachment": [{
2279
+ bg: ["fixed", "local", "scroll"]
2280
+ }],
2281
+ /**
2282
+ * Background Clip
2283
+ * @see https://tailwindcss.com/docs/background-clip
2284
+ */
2285
+ "bg-clip": [{
2286
+ "bg-clip": ["border", "padding", "content", "text"]
2287
+ }],
2288
+ /**
2289
+ * Background Origin
2290
+ * @see https://tailwindcss.com/docs/background-origin
2291
+ */
2292
+ "bg-origin": [{
2293
+ "bg-origin": ["border", "padding", "content"]
2294
+ }],
2295
+ /**
2296
+ * Background Position
2297
+ * @see https://tailwindcss.com/docs/background-position
2298
+ */
2299
+ "bg-position": [{
2300
+ bg: i()
2301
+ }],
2302
+ /**
2303
+ * Background Repeat
2304
+ * @see https://tailwindcss.com/docs/background-repeat
2305
+ */
2306
+ "bg-repeat": [{
2307
+ bg: x()
2308
+ }],
2309
+ /**
2310
+ * Background Size
2311
+ * @see https://tailwindcss.com/docs/background-size
2312
+ */
2313
+ "bg-size": [{
2314
+ bg: R()
2315
+ }],
2316
+ /**
2317
+ * Background Image
2318
+ * @see https://tailwindcss.com/docs/background-image
2319
+ */
2320
+ "bg-image": [{
2321
+ bg: ["none", {
2322
+ linear: [{
2323
+ to: ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
2324
+ }, Q, p, f],
2325
+ radial: ["", p, f],
2326
+ conic: [Q, p, f]
2327
+ }, no, to]
2328
+ }],
2329
+ /**
2330
+ * Background Color
2331
+ * @see https://tailwindcss.com/docs/background-color
2332
+ */
2333
+ "bg-color": [{
2334
+ bg: g()
2335
+ }],
2336
+ /**
2337
+ * Gradient Color Stops From Position
2338
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2339
+ */
2340
+ "gradient-from-pos": [{
2341
+ from: P()
2342
+ }],
2343
+ /**
2344
+ * Gradient Color Stops Via Position
2345
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2346
+ */
2347
+ "gradient-via-pos": [{
2348
+ via: P()
2349
+ }],
2350
+ /**
2351
+ * Gradient Color Stops To Position
2352
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2353
+ */
2354
+ "gradient-to-pos": [{
2355
+ to: P()
2356
+ }],
2357
+ /**
2358
+ * Gradient Color Stops From
2359
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2360
+ */
2361
+ "gradient-from": [{
2362
+ from: g()
2363
+ }],
2364
+ /**
2365
+ * Gradient Color Stops Via
2366
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2367
+ */
2368
+ "gradient-via": [{
2369
+ via: g()
2370
+ }],
2371
+ /**
2372
+ * Gradient Color Stops To
2373
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2374
+ */
2375
+ "gradient-to": [{
2376
+ to: g()
2377
+ }],
2378
+ // ---------------
2379
+ // --- Borders ---
2380
+ // ---------------
2381
+ /**
2382
+ * Border Radius
2383
+ * @see https://tailwindcss.com/docs/border-radius
2384
+ */
2385
+ rounded: [{
2386
+ rounded: N()
2387
+ }],
2388
+ /**
2389
+ * Border Radius Start
2390
+ * @see https://tailwindcss.com/docs/border-radius
2391
+ */
2392
+ "rounded-s": [{
2393
+ "rounded-s": N()
2394
+ }],
2395
+ /**
2396
+ * Border Radius End
2397
+ * @see https://tailwindcss.com/docs/border-radius
2398
+ */
2399
+ "rounded-e": [{
2400
+ "rounded-e": N()
2401
+ }],
2402
+ /**
2403
+ * Border Radius Top
2404
+ * @see https://tailwindcss.com/docs/border-radius
2405
+ */
2406
+ "rounded-t": [{
2407
+ "rounded-t": N()
2408
+ }],
2409
+ /**
2410
+ * Border Radius Right
2411
+ * @see https://tailwindcss.com/docs/border-radius
2412
+ */
2413
+ "rounded-r": [{
2414
+ "rounded-r": N()
2415
+ }],
2416
+ /**
2417
+ * Border Radius Bottom
2418
+ * @see https://tailwindcss.com/docs/border-radius
2419
+ */
2420
+ "rounded-b": [{
2421
+ "rounded-b": N()
2422
+ }],
2423
+ /**
2424
+ * Border Radius Left
2425
+ * @see https://tailwindcss.com/docs/border-radius
2426
+ */
2427
+ "rounded-l": [{
2428
+ "rounded-l": N()
2429
+ }],
2430
+ /**
2431
+ * Border Radius Start Start
2432
+ * @see https://tailwindcss.com/docs/border-radius
2433
+ */
2434
+ "rounded-ss": [{
2435
+ "rounded-ss": N()
2436
+ }],
2437
+ /**
2438
+ * Border Radius Start End
2439
+ * @see https://tailwindcss.com/docs/border-radius
2440
+ */
2441
+ "rounded-se": [{
2442
+ "rounded-se": N()
2443
+ }],
2444
+ /**
2445
+ * Border Radius End End
2446
+ * @see https://tailwindcss.com/docs/border-radius
2447
+ */
2448
+ "rounded-ee": [{
2449
+ "rounded-ee": N()
2450
+ }],
2451
+ /**
2452
+ * Border Radius End Start
2453
+ * @see https://tailwindcss.com/docs/border-radius
2454
+ */
2455
+ "rounded-es": [{
2456
+ "rounded-es": N()
2457
+ }],
2458
+ /**
2459
+ * Border Radius Top Left
2460
+ * @see https://tailwindcss.com/docs/border-radius
2461
+ */
2462
+ "rounded-tl": [{
2463
+ "rounded-tl": N()
2464
+ }],
2465
+ /**
2466
+ * Border Radius Top Right
2467
+ * @see https://tailwindcss.com/docs/border-radius
2468
+ */
2469
+ "rounded-tr": [{
2470
+ "rounded-tr": N()
2471
+ }],
2472
+ /**
2473
+ * Border Radius Bottom Right
2474
+ * @see https://tailwindcss.com/docs/border-radius
2475
+ */
2476
+ "rounded-br": [{
2477
+ "rounded-br": N()
2478
+ }],
2479
+ /**
2480
+ * Border Radius Bottom Left
2481
+ * @see https://tailwindcss.com/docs/border-radius
2482
+ */
2483
+ "rounded-bl": [{
2484
+ "rounded-bl": N()
2485
+ }],
2486
+ /**
2487
+ * Border Width
2488
+ * @see https://tailwindcss.com/docs/border-width
2489
+ */
2490
+ "border-w": [{
2491
+ border: $()
2492
+ }],
2493
+ /**
2494
+ * Border Width Inline
2495
+ * @see https://tailwindcss.com/docs/border-width
2496
+ */
2497
+ "border-w-x": [{
2498
+ "border-x": $()
2499
+ }],
2500
+ /**
2501
+ * Border Width Block
2502
+ * @see https://tailwindcss.com/docs/border-width
2503
+ */
2504
+ "border-w-y": [{
2505
+ "border-y": $()
2506
+ }],
2507
+ /**
2508
+ * Border Width Inline Start
2509
+ * @see https://tailwindcss.com/docs/border-width
2510
+ */
2511
+ "border-w-s": [{
2512
+ "border-s": $()
2513
+ }],
2514
+ /**
2515
+ * Border Width Inline End
2516
+ * @see https://tailwindcss.com/docs/border-width
2517
+ */
2518
+ "border-w-e": [{
2519
+ "border-e": $()
2520
+ }],
2521
+ /**
2522
+ * Border Width Block Start
2523
+ * @see https://tailwindcss.com/docs/border-width
2524
+ */
2525
+ "border-w-bs": [{
2526
+ "border-bs": $()
2527
+ }],
2528
+ /**
2529
+ * Border Width Block End
2530
+ * @see https://tailwindcss.com/docs/border-width
2531
+ */
2532
+ "border-w-be": [{
2533
+ "border-be": $()
2534
+ }],
2535
+ /**
2536
+ * Border Width Top
2537
+ * @see https://tailwindcss.com/docs/border-width
2538
+ */
2539
+ "border-w-t": [{
2540
+ "border-t": $()
2541
+ }],
2542
+ /**
2543
+ * Border Width Right
2544
+ * @see https://tailwindcss.com/docs/border-width
2545
+ */
2546
+ "border-w-r": [{
2547
+ "border-r": $()
2548
+ }],
2549
+ /**
2550
+ * Border Width Bottom
2551
+ * @see https://tailwindcss.com/docs/border-width
2552
+ */
2553
+ "border-w-b": [{
2554
+ "border-b": $()
2555
+ }],
2556
+ /**
2557
+ * Border Width Left
2558
+ * @see https://tailwindcss.com/docs/border-width
2559
+ */
2560
+ "border-w-l": [{
2561
+ "border-l": $()
2562
+ }],
2563
+ /**
2564
+ * Divide Width X
2565
+ * @see https://tailwindcss.com/docs/border-width#between-children
2566
+ */
2567
+ "divide-x": [{
2568
+ "divide-x": $()
2569
+ }],
2570
+ /**
2571
+ * Divide Width X Reverse
2572
+ * @see https://tailwindcss.com/docs/border-width#between-children
2573
+ */
2574
+ "divide-x-reverse": ["divide-x-reverse"],
2575
+ /**
2576
+ * Divide Width Y
2577
+ * @see https://tailwindcss.com/docs/border-width#between-children
2578
+ */
2579
+ "divide-y": [{
2580
+ "divide-y": $()
2581
+ }],
2582
+ /**
2583
+ * Divide Width Y Reverse
2584
+ * @see https://tailwindcss.com/docs/border-width#between-children
2585
+ */
2586
+ "divide-y-reverse": ["divide-y-reverse"],
2587
+ /**
2588
+ * Border Style
2589
+ * @see https://tailwindcss.com/docs/border-style
2590
+ */
2591
+ "border-style": [{
2592
+ border: [..._(), "hidden", "none"]
2593
+ }],
2594
+ /**
2595
+ * Divide Style
2596
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
2597
+ */
2598
+ "divide-style": [{
2599
+ divide: [..._(), "hidden", "none"]
2600
+ }],
2601
+ /**
2602
+ * Border Color
2603
+ * @see https://tailwindcss.com/docs/border-color
2604
+ */
2605
+ "border-color": [{
2606
+ border: g()
2607
+ }],
2608
+ /**
2609
+ * Border Color Inline
2610
+ * @see https://tailwindcss.com/docs/border-color
2611
+ */
2612
+ "border-color-x": [{
2613
+ "border-x": g()
2614
+ }],
2615
+ /**
2616
+ * Border Color Block
2617
+ * @see https://tailwindcss.com/docs/border-color
2618
+ */
2619
+ "border-color-y": [{
2620
+ "border-y": g()
2621
+ }],
2622
+ /**
2623
+ * Border Color Inline Start
2624
+ * @see https://tailwindcss.com/docs/border-color
2625
+ */
2626
+ "border-color-s": [{
2627
+ "border-s": g()
2628
+ }],
2629
+ /**
2630
+ * Border Color Inline End
2631
+ * @see https://tailwindcss.com/docs/border-color
2632
+ */
2633
+ "border-color-e": [{
2634
+ "border-e": g()
2635
+ }],
2636
+ /**
2637
+ * Border Color Block Start
2638
+ * @see https://tailwindcss.com/docs/border-color
2639
+ */
2640
+ "border-color-bs": [{
2641
+ "border-bs": g()
2642
+ }],
2643
+ /**
2644
+ * Border Color Block End
2645
+ * @see https://tailwindcss.com/docs/border-color
2646
+ */
2647
+ "border-color-be": [{
2648
+ "border-be": g()
2649
+ }],
2650
+ /**
2651
+ * Border Color Top
2652
+ * @see https://tailwindcss.com/docs/border-color
2653
+ */
2654
+ "border-color-t": [{
2655
+ "border-t": g()
2656
+ }],
2657
+ /**
2658
+ * Border Color Right
2659
+ * @see https://tailwindcss.com/docs/border-color
2660
+ */
2661
+ "border-color-r": [{
2662
+ "border-r": g()
2663
+ }],
2664
+ /**
2665
+ * Border Color Bottom
2666
+ * @see https://tailwindcss.com/docs/border-color
2667
+ */
2668
+ "border-color-b": [{
2669
+ "border-b": g()
2670
+ }],
2671
+ /**
2672
+ * Border Color Left
2673
+ * @see https://tailwindcss.com/docs/border-color
2674
+ */
2675
+ "border-color-l": [{
2676
+ "border-l": g()
2677
+ }],
2678
+ /**
2679
+ * Divide Color
2680
+ * @see https://tailwindcss.com/docs/divide-color
2681
+ */
2682
+ "divide-color": [{
2683
+ divide: g()
2684
+ }],
2685
+ /**
2686
+ * Outline Style
2687
+ * @see https://tailwindcss.com/docs/outline-style
2688
+ */
2689
+ "outline-style": [{
2690
+ outline: [..._(), "none", "hidden"]
2691
+ }],
2692
+ /**
2693
+ * Outline Offset
2694
+ * @see https://tailwindcss.com/docs/outline-offset
2695
+ */
2696
+ "outline-offset": [{
2697
+ "outline-offset": [v, p, f]
2698
+ }],
2699
+ /**
2700
+ * Outline Width
2701
+ * @see https://tailwindcss.com/docs/outline-width
2702
+ */
2703
+ "outline-w": [{
2704
+ outline: ["", v, ue, te]
2705
+ }],
2706
+ /**
2707
+ * Outline Color
2708
+ * @see https://tailwindcss.com/docs/outline-color
2709
+ */
2710
+ "outline-color": [{
2711
+ outline: g()
2712
+ }],
2713
+ // ---------------
2714
+ // --- Effects ---
2715
+ // ---------------
2716
+ /**
2717
+ * Box Shadow
2718
+ * @see https://tailwindcss.com/docs/box-shadow
2719
+ */
2720
+ shadow: [{
2721
+ shadow: [
2722
+ // Deprecated since Tailwind CSS v4.0.0
2723
+ "",
2724
+ "none",
2725
+ b,
2726
+ je,
2727
+ ke
2728
+ ]
2729
+ }],
2730
+ /**
2731
+ * Box Shadow Color
2732
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
2733
+ */
2734
+ "shadow-color": [{
2735
+ shadow: g()
2736
+ }],
2737
+ /**
2738
+ * Inset Box Shadow
2739
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2740
+ */
2741
+ "inset-shadow": [{
2742
+ "inset-shadow": ["none", h, je, ke]
2743
+ }],
2744
+ /**
2745
+ * Inset Box Shadow Color
2746
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
2747
+ */
2748
+ "inset-shadow-color": [{
2749
+ "inset-shadow": g()
2750
+ }],
2751
+ /**
2752
+ * Ring Width
2753
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
2754
+ */
2755
+ "ring-w": [{
2756
+ ring: $()
2757
+ }],
2758
+ /**
2759
+ * Ring Width Inset
2760
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2761
+ * @deprecated since Tailwind CSS v4.0.0
2762
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2763
+ */
2764
+ "ring-w-inset": ["ring-inset"],
2765
+ /**
2766
+ * Ring Color
2767
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2768
+ */
2769
+ "ring-color": [{
2770
+ ring: g()
2771
+ }],
2772
+ /**
2773
+ * Ring Offset Width
2774
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2775
+ * @deprecated since Tailwind CSS v4.0.0
2776
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2777
+ */
2778
+ "ring-offset-w": [{
2779
+ "ring-offset": [v, te]
2780
+ }],
2781
+ /**
2782
+ * Ring Offset Color
2783
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2784
+ * @deprecated since Tailwind CSS v4.0.0
2785
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2786
+ */
2787
+ "ring-offset-color": [{
2788
+ "ring-offset": g()
2789
+ }],
2790
+ /**
2791
+ * Inset Ring Width
2792
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2793
+ */
2794
+ "inset-ring-w": [{
2795
+ "inset-ring": $()
2796
+ }],
2797
+ /**
2798
+ * Inset Ring Color
2799
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2800
+ */
2801
+ "inset-ring-color": [{
2802
+ "inset-ring": g()
2803
+ }],
2804
+ /**
2805
+ * Text Shadow
2806
+ * @see https://tailwindcss.com/docs/text-shadow
2807
+ */
2808
+ "text-shadow": [{
2809
+ "text-shadow": ["none", y, je, ke]
2810
+ }],
2811
+ /**
2812
+ * Text Shadow Color
2813
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2814
+ */
2815
+ "text-shadow-color": [{
2816
+ "text-shadow": g()
2817
+ }],
2818
+ /**
2819
+ * Opacity
2820
+ * @see https://tailwindcss.com/docs/opacity
2821
+ */
2822
+ opacity: [{
2823
+ opacity: [v, p, f]
2824
+ }],
2825
+ /**
2826
+ * Mix Blend Mode
2827
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2828
+ */
2829
+ "mix-blend": [{
2830
+ "mix-blend": [...H(), "plus-darker", "plus-lighter"]
2831
+ }],
2832
+ /**
2833
+ * Background Blend Mode
2834
+ * @see https://tailwindcss.com/docs/background-blend-mode
2835
+ */
2836
+ "bg-blend": [{
2837
+ "bg-blend": H()
2838
+ }],
2839
+ /**
2840
+ * Mask Clip
2841
+ * @see https://tailwindcss.com/docs/mask-clip
2842
+ */
2843
+ "mask-clip": [{
2844
+ "mask-clip": ["border", "padding", "content", "fill", "stroke", "view"]
2845
+ }, "mask-no-clip"],
2846
+ /**
2847
+ * Mask Composite
2848
+ * @see https://tailwindcss.com/docs/mask-composite
2849
+ */
2850
+ "mask-composite": [{
2851
+ mask: ["add", "subtract", "intersect", "exclude"]
2852
+ }],
2853
+ /**
2854
+ * Mask Image
2855
+ * @see https://tailwindcss.com/docs/mask-image
2856
+ */
2857
+ "mask-image-linear-pos": [{
2858
+ "mask-linear": [v]
2859
+ }],
2860
+ "mask-image-linear-from-pos": [{
2861
+ "mask-linear-from": z()
2862
+ }],
2863
+ "mask-image-linear-to-pos": [{
2864
+ "mask-linear-to": z()
2865
+ }],
2866
+ "mask-image-linear-from-color": [{
2867
+ "mask-linear-from": g()
2868
+ }],
2869
+ "mask-image-linear-to-color": [{
2870
+ "mask-linear-to": g()
2871
+ }],
2872
+ "mask-image-t-from-pos": [{
2873
+ "mask-t-from": z()
2874
+ }],
2875
+ "mask-image-t-to-pos": [{
2876
+ "mask-t-to": z()
2877
+ }],
2878
+ "mask-image-t-from-color": [{
2879
+ "mask-t-from": g()
2880
+ }],
2881
+ "mask-image-t-to-color": [{
2882
+ "mask-t-to": g()
2883
+ }],
2884
+ "mask-image-r-from-pos": [{
2885
+ "mask-r-from": z()
2886
+ }],
2887
+ "mask-image-r-to-pos": [{
2888
+ "mask-r-to": z()
2889
+ }],
2890
+ "mask-image-r-from-color": [{
2891
+ "mask-r-from": g()
2892
+ }],
2893
+ "mask-image-r-to-color": [{
2894
+ "mask-r-to": g()
2895
+ }],
2896
+ "mask-image-b-from-pos": [{
2897
+ "mask-b-from": z()
2898
+ }],
2899
+ "mask-image-b-to-pos": [{
2900
+ "mask-b-to": z()
2901
+ }],
2902
+ "mask-image-b-from-color": [{
2903
+ "mask-b-from": g()
2904
+ }],
2905
+ "mask-image-b-to-color": [{
2906
+ "mask-b-to": g()
2907
+ }],
2908
+ "mask-image-l-from-pos": [{
2909
+ "mask-l-from": z()
2910
+ }],
2911
+ "mask-image-l-to-pos": [{
2912
+ "mask-l-to": z()
2913
+ }],
2914
+ "mask-image-l-from-color": [{
2915
+ "mask-l-from": g()
2916
+ }],
2917
+ "mask-image-l-to-color": [{
2918
+ "mask-l-to": g()
2919
+ }],
2920
+ "mask-image-x-from-pos": [{
2921
+ "mask-x-from": z()
2922
+ }],
2923
+ "mask-image-x-to-pos": [{
2924
+ "mask-x-to": z()
2925
+ }],
2926
+ "mask-image-x-from-color": [{
2927
+ "mask-x-from": g()
2928
+ }],
2929
+ "mask-image-x-to-color": [{
2930
+ "mask-x-to": g()
2931
+ }],
2932
+ "mask-image-y-from-pos": [{
2933
+ "mask-y-from": z()
2934
+ }],
2935
+ "mask-image-y-to-pos": [{
2936
+ "mask-y-to": z()
2937
+ }],
2938
+ "mask-image-y-from-color": [{
2939
+ "mask-y-from": g()
2940
+ }],
2941
+ "mask-image-y-to-color": [{
2942
+ "mask-y-to": g()
2943
+ }],
2944
+ "mask-image-radial": [{
2945
+ "mask-radial": [p, f]
2946
+ }],
2947
+ "mask-image-radial-from-pos": [{
2948
+ "mask-radial-from": z()
2949
+ }],
2950
+ "mask-image-radial-to-pos": [{
2951
+ "mask-radial-to": z()
2952
+ }],
2953
+ "mask-image-radial-from-color": [{
2954
+ "mask-radial-from": g()
2955
+ }],
2956
+ "mask-image-radial-to-color": [{
2957
+ "mask-radial-to": g()
2958
+ }],
2959
+ "mask-image-radial-shape": [{
2960
+ "mask-radial": ["circle", "ellipse"]
2961
+ }],
2962
+ "mask-image-radial-size": [{
2963
+ "mask-radial": [{
2964
+ closest: ["side", "corner"],
2965
+ farthest: ["side", "corner"]
2966
+ }]
2967
+ }],
2968
+ "mask-image-radial-pos": [{
2969
+ "mask-radial-at": O()
2970
+ }],
2971
+ "mask-image-conic-pos": [{
2972
+ "mask-conic": [v]
2973
+ }],
2974
+ "mask-image-conic-from-pos": [{
2975
+ "mask-conic-from": z()
2976
+ }],
2977
+ "mask-image-conic-to-pos": [{
2978
+ "mask-conic-to": z()
2979
+ }],
2980
+ "mask-image-conic-from-color": [{
2981
+ "mask-conic-from": g()
2982
+ }],
2983
+ "mask-image-conic-to-color": [{
2984
+ "mask-conic-to": g()
2985
+ }],
2986
+ /**
2987
+ * Mask Mode
2988
+ * @see https://tailwindcss.com/docs/mask-mode
2989
+ */
2990
+ "mask-mode": [{
2991
+ mask: ["alpha", "luminance", "match"]
2992
+ }],
2993
+ /**
2994
+ * Mask Origin
2995
+ * @see https://tailwindcss.com/docs/mask-origin
2996
+ */
2997
+ "mask-origin": [{
2998
+ "mask-origin": ["border", "padding", "content", "fill", "stroke", "view"]
2999
+ }],
3000
+ /**
3001
+ * Mask Position
3002
+ * @see https://tailwindcss.com/docs/mask-position
3003
+ */
3004
+ "mask-position": [{
3005
+ mask: i()
3006
+ }],
3007
+ /**
3008
+ * Mask Repeat
3009
+ * @see https://tailwindcss.com/docs/mask-repeat
3010
+ */
3011
+ "mask-repeat": [{
3012
+ mask: x()
3013
+ }],
3014
+ /**
3015
+ * Mask Size
3016
+ * @see https://tailwindcss.com/docs/mask-size
3017
+ */
3018
+ "mask-size": [{
3019
+ mask: R()
3020
+ }],
3021
+ /**
3022
+ * Mask Type
3023
+ * @see https://tailwindcss.com/docs/mask-type
3024
+ */
3025
+ "mask-type": [{
3026
+ "mask-type": ["alpha", "luminance"]
3027
+ }],
3028
+ /**
3029
+ * Mask Image
3030
+ * @see https://tailwindcss.com/docs/mask-image
3031
+ */
3032
+ "mask-image": [{
3033
+ mask: ["none", p, f]
3034
+ }],
3035
+ // ---------------
3036
+ // --- Filters ---
3037
+ // ---------------
3038
+ /**
3039
+ * Filter
3040
+ * @see https://tailwindcss.com/docs/filter
3041
+ */
3042
+ filter: [{
3043
+ filter: [
3044
+ // Deprecated since Tailwind CSS v3.0.0
3045
+ "",
3046
+ "none",
3047
+ p,
3048
+ f
3049
+ ]
3050
+ }],
3051
+ /**
3052
+ * Blur
3053
+ * @see https://tailwindcss.com/docs/blur
3054
+ */
3055
+ blur: [{
3056
+ blur: pe()
3057
+ }],
3058
+ /**
3059
+ * Brightness
3060
+ * @see https://tailwindcss.com/docs/brightness
3061
+ */
3062
+ brightness: [{
3063
+ brightness: [v, p, f]
3064
+ }],
3065
+ /**
3066
+ * Contrast
3067
+ * @see https://tailwindcss.com/docs/contrast
3068
+ */
3069
+ contrast: [{
3070
+ contrast: [v, p, f]
3071
+ }],
3072
+ /**
3073
+ * Drop Shadow
3074
+ * @see https://tailwindcss.com/docs/drop-shadow
3075
+ */
3076
+ "drop-shadow": [{
3077
+ "drop-shadow": [
3078
+ // Deprecated since Tailwind CSS v4.0.0
3079
+ "",
3080
+ "none",
3081
+ w,
3082
+ je,
3083
+ ke
3084
+ ]
3085
+ }],
3086
+ /**
3087
+ * Drop Shadow Color
3088
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
3089
+ */
3090
+ "drop-shadow-color": [{
3091
+ "drop-shadow": g()
3092
+ }],
3093
+ /**
3094
+ * Grayscale
3095
+ * @see https://tailwindcss.com/docs/grayscale
3096
+ */
3097
+ grayscale: [{
3098
+ grayscale: ["", v, p, f]
3099
+ }],
3100
+ /**
3101
+ * Hue Rotate
3102
+ * @see https://tailwindcss.com/docs/hue-rotate
3103
+ */
3104
+ "hue-rotate": [{
3105
+ "hue-rotate": [v, p, f]
3106
+ }],
3107
+ /**
3108
+ * Invert
3109
+ * @see https://tailwindcss.com/docs/invert
3110
+ */
3111
+ invert: [{
3112
+ invert: ["", v, p, f]
3113
+ }],
3114
+ /**
3115
+ * Saturate
3116
+ * @see https://tailwindcss.com/docs/saturate
3117
+ */
3118
+ saturate: [{
3119
+ saturate: [v, p, f]
3120
+ }],
3121
+ /**
3122
+ * Sepia
3123
+ * @see https://tailwindcss.com/docs/sepia
3124
+ */
3125
+ sepia: [{
3126
+ sepia: ["", v, p, f]
3127
+ }],
3128
+ /**
3129
+ * Backdrop Filter
3130
+ * @see https://tailwindcss.com/docs/backdrop-filter
3131
+ */
3132
+ "backdrop-filter": [{
3133
+ "backdrop-filter": [
3134
+ // Deprecated since Tailwind CSS v3.0.0
3135
+ "",
3136
+ "none",
3137
+ p,
3138
+ f
3139
+ ]
3140
+ }],
3141
+ /**
3142
+ * Backdrop Blur
3143
+ * @see https://tailwindcss.com/docs/backdrop-blur
3144
+ */
3145
+ "backdrop-blur": [{
3146
+ "backdrop-blur": pe()
3147
+ }],
3148
+ /**
3149
+ * Backdrop Brightness
3150
+ * @see https://tailwindcss.com/docs/backdrop-brightness
3151
+ */
3152
+ "backdrop-brightness": [{
3153
+ "backdrop-brightness": [v, p, f]
3154
+ }],
3155
+ /**
3156
+ * Backdrop Contrast
3157
+ * @see https://tailwindcss.com/docs/backdrop-contrast
3158
+ */
3159
+ "backdrop-contrast": [{
3160
+ "backdrop-contrast": [v, p, f]
3161
+ }],
3162
+ /**
3163
+ * Backdrop Grayscale
3164
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
3165
+ */
3166
+ "backdrop-grayscale": [{
3167
+ "backdrop-grayscale": ["", v, p, f]
3168
+ }],
3169
+ /**
3170
+ * Backdrop Hue Rotate
3171
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
3172
+ */
3173
+ "backdrop-hue-rotate": [{
3174
+ "backdrop-hue-rotate": [v, p, f]
3175
+ }],
3176
+ /**
3177
+ * Backdrop Invert
3178
+ * @see https://tailwindcss.com/docs/backdrop-invert
3179
+ */
3180
+ "backdrop-invert": [{
3181
+ "backdrop-invert": ["", v, p, f]
3182
+ }],
3183
+ /**
3184
+ * Backdrop Opacity
3185
+ * @see https://tailwindcss.com/docs/backdrop-opacity
3186
+ */
3187
+ "backdrop-opacity": [{
3188
+ "backdrop-opacity": [v, p, f]
3189
+ }],
3190
+ /**
3191
+ * Backdrop Saturate
3192
+ * @see https://tailwindcss.com/docs/backdrop-saturate
3193
+ */
3194
+ "backdrop-saturate": [{
3195
+ "backdrop-saturate": [v, p, f]
3196
+ }],
3197
+ /**
3198
+ * Backdrop Sepia
3199
+ * @see https://tailwindcss.com/docs/backdrop-sepia
3200
+ */
3201
+ "backdrop-sepia": [{
3202
+ "backdrop-sepia": ["", v, p, f]
3203
+ }],
3204
+ // --------------
3205
+ // --- Tables ---
3206
+ // --------------
3207
+ /**
3208
+ * Border Collapse
3209
+ * @see https://tailwindcss.com/docs/border-collapse
3210
+ */
3211
+ "border-collapse": [{
3212
+ border: ["collapse", "separate"]
3213
+ }],
3214
+ /**
3215
+ * Border Spacing
3216
+ * @see https://tailwindcss.com/docs/border-spacing
3217
+ */
3218
+ "border-spacing": [{
3219
+ "border-spacing": d()
3220
+ }],
3221
+ /**
3222
+ * Border Spacing X
3223
+ * @see https://tailwindcss.com/docs/border-spacing
3224
+ */
3225
+ "border-spacing-x": [{
3226
+ "border-spacing-x": d()
3227
+ }],
3228
+ /**
3229
+ * Border Spacing Y
3230
+ * @see https://tailwindcss.com/docs/border-spacing
3231
+ */
3232
+ "border-spacing-y": [{
3233
+ "border-spacing-y": d()
3234
+ }],
3235
+ /**
3236
+ * Table Layout
3237
+ * @see https://tailwindcss.com/docs/table-layout
3238
+ */
3239
+ "table-layout": [{
3240
+ table: ["auto", "fixed"]
3241
+ }],
3242
+ /**
3243
+ * Caption Side
3244
+ * @see https://tailwindcss.com/docs/caption-side
3245
+ */
3246
+ caption: [{
3247
+ caption: ["top", "bottom"]
3248
+ }],
3249
+ // ---------------------------------
3250
+ // --- Transitions and Animation ---
3251
+ // ---------------------------------
3252
+ /**
3253
+ * Transition Property
3254
+ * @see https://tailwindcss.com/docs/transition-property
3255
+ */
3256
+ transition: [{
3257
+ transition: ["", "all", "colors", "opacity", "shadow", "transform", "none", p, f]
3258
+ }],
3259
+ /**
3260
+ * Transition Behavior
3261
+ * @see https://tailwindcss.com/docs/transition-behavior
3262
+ */
3263
+ "transition-behavior": [{
3264
+ transition: ["normal", "discrete"]
3265
+ }],
3266
+ /**
3267
+ * Transition Duration
3268
+ * @see https://tailwindcss.com/docs/transition-duration
3269
+ */
3270
+ duration: [{
3271
+ duration: [v, "initial", p, f]
3272
+ }],
3273
+ /**
3274
+ * Transition Timing Function
3275
+ * @see https://tailwindcss.com/docs/transition-timing-function
3276
+ */
3277
+ ease: [{
3278
+ ease: ["linear", "initial", F, p, f]
3279
+ }],
3280
+ /**
3281
+ * Transition Delay
3282
+ * @see https://tailwindcss.com/docs/transition-delay
3283
+ */
3284
+ delay: [{
3285
+ delay: [v, p, f]
3286
+ }],
3287
+ /**
3288
+ * Animation
3289
+ * @see https://tailwindcss.com/docs/animation
3290
+ */
3291
+ animate: [{
3292
+ animate: ["none", W, p, f]
3293
+ }],
3294
+ // ------------------
3295
+ // --- Transforms ---
3296
+ // ------------------
3297
+ /**
3298
+ * Backface Visibility
3299
+ * @see https://tailwindcss.com/docs/backface-visibility
3300
+ */
3301
+ backface: [{
3302
+ backface: ["hidden", "visible"]
3303
+ }],
3304
+ /**
3305
+ * Perspective
3306
+ * @see https://tailwindcss.com/docs/perspective
3307
+ */
3308
+ perspective: [{
3309
+ perspective: [j, p, f]
3310
+ }],
3311
+ /**
3312
+ * Perspective Origin
3313
+ * @see https://tailwindcss.com/docs/perspective-origin
3314
+ */
3315
+ "perspective-origin": [{
3316
+ "perspective-origin": k()
3317
+ }],
3318
+ /**
3319
+ * Rotate
3320
+ * @see https://tailwindcss.com/docs/rotate
3321
+ */
3322
+ rotate: [{
3323
+ rotate: be()
3324
+ }],
3325
+ /**
3326
+ * Rotate X
3327
+ * @see https://tailwindcss.com/docs/rotate
3328
+ */
3329
+ "rotate-x": [{
3330
+ "rotate-x": be()
3331
+ }],
3332
+ /**
3333
+ * Rotate Y
3334
+ * @see https://tailwindcss.com/docs/rotate
3335
+ */
3336
+ "rotate-y": [{
3337
+ "rotate-y": be()
3338
+ }],
3339
+ /**
3340
+ * Rotate Z
3341
+ * @see https://tailwindcss.com/docs/rotate
3342
+ */
3343
+ "rotate-z": [{
3344
+ "rotate-z": be()
3345
+ }],
3346
+ /**
3347
+ * Scale
3348
+ * @see https://tailwindcss.com/docs/scale
3349
+ */
3350
+ scale: [{
3351
+ scale: he()
3352
+ }],
3353
+ /**
3354
+ * Scale X
3355
+ * @see https://tailwindcss.com/docs/scale
3356
+ */
3357
+ "scale-x": [{
3358
+ "scale-x": he()
3359
+ }],
3360
+ /**
3361
+ * Scale Y
3362
+ * @see https://tailwindcss.com/docs/scale
3363
+ */
3364
+ "scale-y": [{
3365
+ "scale-y": he()
3366
+ }],
3367
+ /**
3368
+ * Scale Z
3369
+ * @see https://tailwindcss.com/docs/scale
3370
+ */
3371
+ "scale-z": [{
3372
+ "scale-z": he()
3373
+ }],
3374
+ /**
3375
+ * Scale 3D
3376
+ * @see https://tailwindcss.com/docs/scale
3377
+ */
3378
+ "scale-3d": ["scale-3d"],
3379
+ /**
3380
+ * Skew
3381
+ * @see https://tailwindcss.com/docs/skew
3382
+ */
3383
+ skew: [{
3384
+ skew: Ae()
3385
+ }],
3386
+ /**
3387
+ * Skew X
3388
+ * @see https://tailwindcss.com/docs/skew
3389
+ */
3390
+ "skew-x": [{
3391
+ "skew-x": Ae()
3392
+ }],
3393
+ /**
3394
+ * Skew Y
3395
+ * @see https://tailwindcss.com/docs/skew
3396
+ */
3397
+ "skew-y": [{
3398
+ "skew-y": Ae()
3399
+ }],
3400
+ /**
3401
+ * Transform
3402
+ * @see https://tailwindcss.com/docs/transform
3403
+ */
3404
+ transform: [{
3405
+ transform: [p, f, "", "none", "gpu", "cpu"]
3406
+ }],
3407
+ /**
3408
+ * Transform Origin
3409
+ * @see https://tailwindcss.com/docs/transform-origin
3410
+ */
3411
+ "transform-origin": [{
3412
+ origin: k()
3413
+ }],
3414
+ /**
3415
+ * Transform Style
3416
+ * @see https://tailwindcss.com/docs/transform-style
3417
+ */
3418
+ "transform-style": [{
3419
+ transform: ["3d", "flat"]
3420
+ }],
3421
+ /**
3422
+ * Translate
3423
+ * @see https://tailwindcss.com/docs/translate
3424
+ */
3425
+ translate: [{
3426
+ translate: ge()
3427
+ }],
3428
+ /**
3429
+ * Translate X
3430
+ * @see https://tailwindcss.com/docs/translate
3431
+ */
3432
+ "translate-x": [{
3433
+ "translate-x": ge()
3434
+ }],
3435
+ /**
3436
+ * Translate Y
3437
+ * @see https://tailwindcss.com/docs/translate
3438
+ */
3439
+ "translate-y": [{
3440
+ "translate-y": ge()
3441
+ }],
3442
+ /**
3443
+ * Translate Z
3444
+ * @see https://tailwindcss.com/docs/translate
3445
+ */
3446
+ "translate-z": [{
3447
+ "translate-z": ge()
3448
+ }],
3449
+ /**
3450
+ * Translate None
3451
+ * @see https://tailwindcss.com/docs/translate
3452
+ */
3453
+ "translate-none": ["translate-none"],
3454
+ // ---------------------
3455
+ // --- Interactivity ---
3456
+ // ---------------------
3457
+ /**
3458
+ * Accent Color
3459
+ * @see https://tailwindcss.com/docs/accent-color
3460
+ */
3461
+ accent: [{
3462
+ accent: g()
3463
+ }],
3464
+ /**
3465
+ * Appearance
3466
+ * @see https://tailwindcss.com/docs/appearance
3467
+ */
3468
+ appearance: [{
3469
+ appearance: ["none", "auto"]
3470
+ }],
3471
+ /**
3472
+ * Caret Color
3473
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
3474
+ */
3475
+ "caret-color": [{
3476
+ caret: g()
3477
+ }],
3478
+ /**
3479
+ * Color Scheme
3480
+ * @see https://tailwindcss.com/docs/color-scheme
3481
+ */
3482
+ "color-scheme": [{
3483
+ scheme: ["normal", "dark", "light", "light-dark", "only-dark", "only-light"]
3484
+ }],
3485
+ /**
3486
+ * Cursor
3487
+ * @see https://tailwindcss.com/docs/cursor
3488
+ */
3489
+ cursor: [{
3490
+ cursor: ["auto", "default", "pointer", "wait", "text", "move", "help", "not-allowed", "none", "context-menu", "progress", "cell", "crosshair", "vertical-text", "alias", "copy", "no-drop", "grab", "grabbing", "all-scroll", "col-resize", "row-resize", "n-resize", "e-resize", "s-resize", "w-resize", "ne-resize", "nw-resize", "se-resize", "sw-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "zoom-in", "zoom-out", p, f]
3491
+ }],
3492
+ /**
3493
+ * Field Sizing
3494
+ * @see https://tailwindcss.com/docs/field-sizing
3495
+ */
3496
+ "field-sizing": [{
3497
+ "field-sizing": ["fixed", "content"]
3498
+ }],
3499
+ /**
3500
+ * Pointer Events
3501
+ * @see https://tailwindcss.com/docs/pointer-events
3502
+ */
3503
+ "pointer-events": [{
3504
+ "pointer-events": ["auto", "none"]
3505
+ }],
3506
+ /**
3507
+ * Resize
3508
+ * @see https://tailwindcss.com/docs/resize
3509
+ */
3510
+ resize: [{
3511
+ resize: ["none", "", "y", "x"]
3512
+ }],
3513
+ /**
3514
+ * Scroll Behavior
3515
+ * @see https://tailwindcss.com/docs/scroll-behavior
3516
+ */
3517
+ "scroll-behavior": [{
3518
+ scroll: ["auto", "smooth"]
3519
+ }],
3520
+ /**
3521
+ * Scroll Margin
3522
+ * @see https://tailwindcss.com/docs/scroll-margin
3523
+ */
3524
+ "scroll-m": [{
3525
+ "scroll-m": d()
3526
+ }],
3527
+ /**
3528
+ * Scroll Margin Inline
3529
+ * @see https://tailwindcss.com/docs/scroll-margin
3530
+ */
3531
+ "scroll-mx": [{
3532
+ "scroll-mx": d()
3533
+ }],
3534
+ /**
3535
+ * Scroll Margin Block
3536
+ * @see https://tailwindcss.com/docs/scroll-margin
3537
+ */
3538
+ "scroll-my": [{
3539
+ "scroll-my": d()
3540
+ }],
3541
+ /**
3542
+ * Scroll Margin Inline Start
3543
+ * @see https://tailwindcss.com/docs/scroll-margin
3544
+ */
3545
+ "scroll-ms": [{
3546
+ "scroll-ms": d()
3547
+ }],
3548
+ /**
3549
+ * Scroll Margin Inline End
3550
+ * @see https://tailwindcss.com/docs/scroll-margin
3551
+ */
3552
+ "scroll-me": [{
3553
+ "scroll-me": d()
3554
+ }],
3555
+ /**
3556
+ * Scroll Margin Block Start
3557
+ * @see https://tailwindcss.com/docs/scroll-margin
3558
+ */
3559
+ "scroll-mbs": [{
3560
+ "scroll-mbs": d()
3561
+ }],
3562
+ /**
3563
+ * Scroll Margin Block End
3564
+ * @see https://tailwindcss.com/docs/scroll-margin
3565
+ */
3566
+ "scroll-mbe": [{
3567
+ "scroll-mbe": d()
3568
+ }],
3569
+ /**
3570
+ * Scroll Margin Top
3571
+ * @see https://tailwindcss.com/docs/scroll-margin
3572
+ */
3573
+ "scroll-mt": [{
3574
+ "scroll-mt": d()
3575
+ }],
3576
+ /**
3577
+ * Scroll Margin Right
3578
+ * @see https://tailwindcss.com/docs/scroll-margin
3579
+ */
3580
+ "scroll-mr": [{
3581
+ "scroll-mr": d()
3582
+ }],
3583
+ /**
3584
+ * Scroll Margin Bottom
3585
+ * @see https://tailwindcss.com/docs/scroll-margin
3586
+ */
3587
+ "scroll-mb": [{
3588
+ "scroll-mb": d()
3589
+ }],
3590
+ /**
3591
+ * Scroll Margin Left
3592
+ * @see https://tailwindcss.com/docs/scroll-margin
3593
+ */
3594
+ "scroll-ml": [{
3595
+ "scroll-ml": d()
3596
+ }],
3597
+ /**
3598
+ * Scroll Padding
3599
+ * @see https://tailwindcss.com/docs/scroll-padding
3600
+ */
3601
+ "scroll-p": [{
3602
+ "scroll-p": d()
3603
+ }],
3604
+ /**
3605
+ * Scroll Padding Inline
3606
+ * @see https://tailwindcss.com/docs/scroll-padding
3607
+ */
3608
+ "scroll-px": [{
3609
+ "scroll-px": d()
3610
+ }],
3611
+ /**
3612
+ * Scroll Padding Block
3613
+ * @see https://tailwindcss.com/docs/scroll-padding
3614
+ */
3615
+ "scroll-py": [{
3616
+ "scroll-py": d()
3617
+ }],
3618
+ /**
3619
+ * Scroll Padding Inline Start
3620
+ * @see https://tailwindcss.com/docs/scroll-padding
3621
+ */
3622
+ "scroll-ps": [{
3623
+ "scroll-ps": d()
3624
+ }],
3625
+ /**
3626
+ * Scroll Padding Inline End
3627
+ * @see https://tailwindcss.com/docs/scroll-padding
3628
+ */
3629
+ "scroll-pe": [{
3630
+ "scroll-pe": d()
3631
+ }],
3632
+ /**
3633
+ * Scroll Padding Block Start
3634
+ * @see https://tailwindcss.com/docs/scroll-padding
3635
+ */
3636
+ "scroll-pbs": [{
3637
+ "scroll-pbs": d()
3638
+ }],
3639
+ /**
3640
+ * Scroll Padding Block End
3641
+ * @see https://tailwindcss.com/docs/scroll-padding
3642
+ */
3643
+ "scroll-pbe": [{
3644
+ "scroll-pbe": d()
3645
+ }],
3646
+ /**
3647
+ * Scroll Padding Top
3648
+ * @see https://tailwindcss.com/docs/scroll-padding
3649
+ */
3650
+ "scroll-pt": [{
3651
+ "scroll-pt": d()
3652
+ }],
3653
+ /**
3654
+ * Scroll Padding Right
3655
+ * @see https://tailwindcss.com/docs/scroll-padding
3656
+ */
3657
+ "scroll-pr": [{
3658
+ "scroll-pr": d()
3659
+ }],
3660
+ /**
3661
+ * Scroll Padding Bottom
3662
+ * @see https://tailwindcss.com/docs/scroll-padding
3663
+ */
3664
+ "scroll-pb": [{
3665
+ "scroll-pb": d()
3666
+ }],
3667
+ /**
3668
+ * Scroll Padding Left
3669
+ * @see https://tailwindcss.com/docs/scroll-padding
3670
+ */
3671
+ "scroll-pl": [{
3672
+ "scroll-pl": d()
3673
+ }],
3674
+ /**
3675
+ * Scroll Snap Align
3676
+ * @see https://tailwindcss.com/docs/scroll-snap-align
3677
+ */
3678
+ "snap-align": [{
3679
+ snap: ["start", "end", "center", "align-none"]
3680
+ }],
3681
+ /**
3682
+ * Scroll Snap Stop
3683
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
3684
+ */
3685
+ "snap-stop": [{
3686
+ snap: ["normal", "always"]
3687
+ }],
3688
+ /**
3689
+ * Scroll Snap Type
3690
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3691
+ */
3692
+ "snap-type": [{
3693
+ snap: ["none", "x", "y", "both"]
3694
+ }],
3695
+ /**
3696
+ * Scroll Snap Type Strictness
3697
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3698
+ */
3699
+ "snap-strictness": [{
3700
+ snap: ["mandatory", "proximity"]
3701
+ }],
3702
+ /**
3703
+ * Touch Action
3704
+ * @see https://tailwindcss.com/docs/touch-action
3705
+ */
3706
+ touch: [{
3707
+ touch: ["auto", "none", "manipulation"]
3708
+ }],
3709
+ /**
3710
+ * Touch Action X
3711
+ * @see https://tailwindcss.com/docs/touch-action
3712
+ */
3713
+ "touch-x": [{
3714
+ "touch-pan": ["x", "left", "right"]
3715
+ }],
3716
+ /**
3717
+ * Touch Action Y
3718
+ * @see https://tailwindcss.com/docs/touch-action
3719
+ */
3720
+ "touch-y": [{
3721
+ "touch-pan": ["y", "up", "down"]
3722
+ }],
3723
+ /**
3724
+ * Touch Action Pinch Zoom
3725
+ * @see https://tailwindcss.com/docs/touch-action
3726
+ */
3727
+ "touch-pz": ["touch-pinch-zoom"],
3728
+ /**
3729
+ * User Select
3730
+ * @see https://tailwindcss.com/docs/user-select
3731
+ */
3732
+ select: [{
3733
+ select: ["none", "text", "all", "auto"]
3734
+ }],
3735
+ /**
3736
+ * Will Change
3737
+ * @see https://tailwindcss.com/docs/will-change
3738
+ */
3739
+ "will-change": [{
3740
+ "will-change": ["auto", "scroll", "contents", "transform", p, f]
3741
+ }],
3742
+ // -----------
3743
+ // --- SVG ---
3744
+ // -----------
3745
+ /**
3746
+ * Fill
3747
+ * @see https://tailwindcss.com/docs/fill
3748
+ */
3749
+ fill: [{
3750
+ fill: ["none", ...g()]
3751
+ }],
3752
+ /**
3753
+ * Stroke Width
3754
+ * @see https://tailwindcss.com/docs/stroke-width
3755
+ */
3756
+ "stroke-w": [{
3757
+ stroke: [v, ue, te, Ze]
3758
+ }],
3759
+ /**
3760
+ * Stroke
3761
+ * @see https://tailwindcss.com/docs/stroke
3762
+ */
3763
+ stroke: [{
3764
+ stroke: ["none", ...g()]
3765
+ }],
3766
+ // ---------------------
3767
+ // --- Accessibility ---
3768
+ // ---------------------
3769
+ /**
3770
+ * Forced Color Adjust
3771
+ * @see https://tailwindcss.com/docs/forced-color-adjust
3772
+ */
3773
+ "forced-color-adjust": [{
3774
+ "forced-color-adjust": ["auto", "none"]
3775
+ }]
3776
+ },
3777
+ conflictingClassGroups: {
3778
+ overflow: ["overflow-x", "overflow-y"],
3779
+ overscroll: ["overscroll-x", "overscroll-y"],
3780
+ inset: ["inset-x", "inset-y", "inset-bs", "inset-be", "start", "end", "top", "right", "bottom", "left"],
3781
+ "inset-x": ["right", "left"],
3782
+ "inset-y": ["top", "bottom"],
3783
+ flex: ["basis", "grow", "shrink"],
3784
+ gap: ["gap-x", "gap-y"],
3785
+ p: ["px", "py", "ps", "pe", "pbs", "pbe", "pt", "pr", "pb", "pl"],
3786
+ px: ["pr", "pl"],
3787
+ py: ["pt", "pb"],
3788
+ m: ["mx", "my", "ms", "me", "mbs", "mbe", "mt", "mr", "mb", "ml"],
3789
+ mx: ["mr", "ml"],
3790
+ my: ["mt", "mb"],
3791
+ size: ["w", "h"],
3792
+ "font-size": ["leading"],
3793
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
3794
+ "fvn-ordinal": ["fvn-normal"],
3795
+ "fvn-slashed-zero": ["fvn-normal"],
3796
+ "fvn-figure": ["fvn-normal"],
3797
+ "fvn-spacing": ["fvn-normal"],
3798
+ "fvn-fraction": ["fvn-normal"],
3799
+ "line-clamp": ["display", "overflow"],
3800
+ rounded: ["rounded-s", "rounded-e", "rounded-t", "rounded-r", "rounded-b", "rounded-l", "rounded-ss", "rounded-se", "rounded-ee", "rounded-es", "rounded-tl", "rounded-tr", "rounded-br", "rounded-bl"],
3801
+ "rounded-s": ["rounded-ss", "rounded-es"],
3802
+ "rounded-e": ["rounded-se", "rounded-ee"],
3803
+ "rounded-t": ["rounded-tl", "rounded-tr"],
3804
+ "rounded-r": ["rounded-tr", "rounded-br"],
3805
+ "rounded-b": ["rounded-br", "rounded-bl"],
3806
+ "rounded-l": ["rounded-tl", "rounded-bl"],
3807
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
3808
+ "border-w": ["border-w-x", "border-w-y", "border-w-s", "border-w-e", "border-w-bs", "border-w-be", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
3809
+ "border-w-x": ["border-w-r", "border-w-l"],
3810
+ "border-w-y": ["border-w-t", "border-w-b"],
3811
+ "border-color": ["border-color-x", "border-color-y", "border-color-s", "border-color-e", "border-color-bs", "border-color-be", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
3812
+ "border-color-x": ["border-color-r", "border-color-l"],
3813
+ "border-color-y": ["border-color-t", "border-color-b"],
3814
+ translate: ["translate-x", "translate-y", "translate-none"],
3815
+ "translate-none": ["translate", "translate-x", "translate-y", "translate-z"],
3816
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mbs", "scroll-mbe", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
3817
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
3818
+ "scroll-my": ["scroll-mt", "scroll-mb"],
3819
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pbs", "scroll-pbe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
3820
+ "scroll-px": ["scroll-pr", "scroll-pl"],
3821
+ "scroll-py": ["scroll-pt", "scroll-pb"],
3822
+ touch: ["touch-x", "touch-y", "touch-pz"],
3823
+ "touch-x": ["touch"],
3824
+ "touch-y": ["touch"],
3825
+ "touch-pz": ["touch"]
3826
+ },
3827
+ conflictingClassGroupModifiers: {
3828
+ "font-size": ["leading"]
3829
+ },
3830
+ orderSensitiveModifiers: ["*", "**", "after", "backdrop", "before", "details-content", "file", "first-letter", "first-line", "marker", "placeholder", "selection"]
3831
+ };
3832
+ }, lo = /* @__PURE__ */ Fr(io);
3833
+ function Me(...e) {
3834
+ return lo(xr(e));
3835
+ }
3836
+ class co extends rt {
3837
+ constructor(t) {
3838
+ super(t), this.state = { hasError: !1 };
3839
+ }
3840
+ static getDerivedStateFromError() {
3841
+ return { hasError: !0 };
3842
+ }
3843
+ componentDidCatch(t, r) {
3844
+ console.error(`[JsonPages] Component Crash [${this.props.type}]:`, t, r);
3845
+ }
3846
+ render() {
3847
+ return this.state.hasError ? /* @__PURE__ */ u.jsxs("div", { className: "p-8 m-4 bg-amber-500/5 border-2 border-dashed border-amber-500/20 rounded-xl flex flex-col items-center text-center gap-3", children: [
3848
+ /* @__PURE__ */ u.jsx(yr, { className: "text-amber-500", size: 32 }),
3849
+ /* @__PURE__ */ u.jsxs("div", { className: "space-y-1", children: [
3850
+ /* @__PURE__ */ u.jsx("h4", { className: "text-sm font-bold text-amber-200 uppercase tracking-tight", children: "Component Error" }),
3851
+ /* @__PURE__ */ u.jsxs("p", { className: "text-xs text-amber-500/70 font-mono", children: [
3852
+ "Type: ",
3853
+ this.props.type
3854
+ ] })
3855
+ ] }),
3856
+ /* @__PURE__ */ u.jsx("p", { className: "text-xs text-zinc-400 max-w-[280px] leading-relaxed", children: "This section failed to render. Check the console for details or verify the JSON data structure." })
3857
+ ] }) : this.props.children;
3858
+ }
3859
+ }
3860
+ const uo = ({ type: e, scope: t, isSelected: r, sectionId: o, sectionIndex: n = 0, totalSections: s = 0, onReorder: a }) => {
3861
+ const c = typeof n == "number" && n > 0 && a, l = typeof n == "number" && n < s - 1 && a;
3862
+ return /* @__PURE__ */ u.jsx(
3863
+ "div",
3864
+ {
3865
+ "data-jp-section-overlay": !0,
3866
+ "aria-hidden": !0,
3867
+ className: Me(
3868
+ "absolute inset-0 pointer-events-none transition-all duration-200 z-[50]",
3869
+ "border-2 border-transparent group-hover:border-blue-400/50 group-hover:border-dashed",
3870
+ r && "border-2 border-blue-600 border-solid bg-blue-500/5"
3871
+ ),
3872
+ children: /* @__PURE__ */ u.jsxs(
3873
+ "div",
3874
+ {
3875
+ className: Me(
3876
+ "absolute top-0 right-0 flex flex-nowrap items-center gap-1 pl-1 pr-2 py-1 text-[9px] font-black uppercase tracking-widest transition-opacity pointer-events-auto",
3877
+ "bg-blue-600 text-white",
3878
+ r || "group-hover:opacity-100 opacity-0"
3879
+ ),
3880
+ children: [
3881
+ a && o != null && /* @__PURE__ */ u.jsxs("span", { className: "shrink-0 flex items-center gap-0.5", children: [
3882
+ /* @__PURE__ */ u.jsx(
3883
+ "button",
3884
+ {
3885
+ type: "button",
3886
+ onClick: (m) => {
3887
+ m.stopPropagation(), c && a(o, n - 1);
3888
+ },
3889
+ disabled: !c,
3890
+ className: "inline-flex items-center justify-center min-w-[18px] min-h-[18px] rounded bg-white/20 hover:bg-white/30 disabled:opacity-30 disabled:pointer-events-none",
3891
+ title: "Move section up",
3892
+ "aria-label": "Move section up",
3893
+ children: /* @__PURE__ */ u.jsx(hr, { size: 12, strokeWidth: 2.5 })
3894
+ }
3895
+ ),
3896
+ /* @__PURE__ */ u.jsx(
3897
+ "button",
3898
+ {
3899
+ type: "button",
3900
+ onClick: (m) => {
3901
+ m.stopPropagation(), l && a(o, n + 2);
3902
+ },
3903
+ disabled: !l,
3904
+ className: "inline-flex items-center justify-center min-w-[18px] min-h-[18px] rounded bg-white/20 hover:bg-white/30 disabled:opacity-30 disabled:pointer-events-none",
3905
+ title: "Move section down",
3906
+ "aria-label": "Move section down",
3907
+ children: /* @__PURE__ */ u.jsx(pr, { size: 12, strokeWidth: 2.5 })
3908
+ }
3909
+ )
3910
+ ] }),
3911
+ /* @__PURE__ */ u.jsx("span", { className: "shrink-0", children: e }),
3912
+ /* @__PURE__ */ u.jsx("span", { className: "opacity-50 shrink-0", children: "|" }),
3913
+ /* @__PURE__ */ u.jsx("span", { className: "shrink-0", children: t })
3914
+ ]
3915
+ }
3916
+ )
3917
+ }
3918
+ );
3919
+ }, Ee = ({
3920
+ section: e,
3921
+ menu: t,
3922
+ selectedId: r,
3923
+ reorderable: o,
3924
+ sectionIndex: n,
3925
+ totalSections: s,
3926
+ onReorder: a
3927
+ }) => {
3928
+ const { mode: c } = lr(), { registry: l, overlayDisabledSectionTypes: m } = er(), b = c === "studio", h = b && r === e.id, y = l[e.type], w = e.type === "header" || e.type === "footer" ? "global" : "local", A = Array.isArray(m) ? m.includes(e.type) : !1, j = e.type === "header" && typeof e.settings == "object" && e.settings !== null && "sticky" in e.settings && !!e.settings.sticky;
3929
+ if (!y)
3930
+ return /* @__PURE__ */ u.jsxs("div", { className: "p-6 m-4 bg-red-500/10 text-red-400 border border-red-500/20 rounded-lg text-sm font-mono", children: [
3931
+ /* @__PURE__ */ u.jsx("strong", { children: "Missing Component:" }),
3932
+ " ",
3933
+ e.type
3934
+ ] });
3935
+ const C = () => {
3936
+ const W = y;
3937
+ return e.type === "header" && t ? /* @__PURE__ */ u.jsx(W, { data: e.data, settings: e.settings, menu: t }) : /* @__PURE__ */ u.jsx(W, { data: e.data, settings: e.settings });
3938
+ }, F = typeof e.data == "object" && e.data !== null && "anchorId" in e.data ? String(e.data.anchorId ?? "") : void 0;
3939
+ return /* @__PURE__ */ u.jsxs(
3940
+ "div",
3941
+ {
3942
+ id: F || void 0,
3943
+ "data-section-id": b ? e.id : void 0,
3944
+ "data-section-type": b ? e.type : void 0,
3945
+ "data-section-scope": b ? w : void 0,
3946
+ ...b && h ? { "data-jp-selected": !0 } : {},
3947
+ className: Me(
3948
+ "relative w-full",
3949
+ b && !A && "group cursor-pointer",
3950
+ b && j ? "sticky top-0 z-[60]" : e.type === "header" ? "relative" : "relative z-0",
3951
+ h && "z-[70]"
3952
+ ),
3953
+ children: [
3954
+ /* @__PURE__ */ u.jsx("div", { className: e.type === "header" ? "relative" : "relative z-0", children: /* @__PURE__ */ u.jsx(co, { type: e.type, children: C() }) }),
3955
+ b && !A && /* @__PURE__ */ u.jsx(
3956
+ uo,
3957
+ {
3958
+ type: e.type,
3959
+ scope: w,
3960
+ isSelected: !!h,
3961
+ sectionId: o && w === "local" ? e.id : void 0,
3962
+ sectionIndex: o && w === "local" ? n : void 0,
3963
+ totalSections: o && w === "local" ? s : void 0,
3964
+ onReorder: o && w === "local" ? a : void 0
3965
+ }
3966
+ )
3967
+ ]
3968
+ }
3969
+ );
3970
+ }, mo = (e) => {
3971
+ oe(() => {
3972
+ document.title = e.title;
3973
+ let t = document.querySelector('meta[name="description"]');
3974
+ t || (t = document.createElement("meta"), t.setAttribute("name", "description"), document.head.appendChild(t)), t.setAttribute("content", e.description);
3975
+ }, [e.title, e.description]);
3976
+ }, fo = "application/json", po = ({
3977
+ pageConfig: e,
3978
+ siteConfig: t,
3979
+ menuConfig: r,
3980
+ selectedId: o,
3981
+ onReorder: n,
3982
+ scrollToSectionId: s,
3983
+ onActiveSectionChange: a
3984
+ }) => {
3985
+ mo(e.meta);
3986
+ const [c, l] = ot(null), m = Be({}), b = Be(a);
3987
+ b.current = a;
3988
+ const h = cr(e, t), y = h ? t.header ?? null : null, w = t.footer ?? null, A = (E) => {
3989
+ var O;
3990
+ (O = b.current) == null || O.call(b, E);
3991
+ };
3992
+ oe(() => {
3993
+ if (!s) return;
3994
+ const E = m.current[s];
3995
+ E && E.scrollIntoView({ behavior: "smooth", block: "center" });
3996
+ }, [s]), oe(() => {
3997
+ if (!b.current) return;
3998
+ const O = [
3999
+ ...y ? [y.id] : [],
4000
+ ...e.sections.map((d) => d.id),
4001
+ ...w ? [w.id] : []
4002
+ ], k = new IntersectionObserver(
4003
+ (d) => {
4004
+ d.forEach((S) => {
4005
+ var J;
4006
+ if (S.isIntersecting && S.intersectionRatio > 0.5) {
4007
+ const Y = S.target.getAttribute("data-section-id");
4008
+ Y && ((J = b.current) == null || J.call(b, Y));
4009
+ }
4010
+ });
4011
+ },
4012
+ { threshold: [0, 0.5, 1], rootMargin: "-20% 0px -20% 0px" }
4013
+ );
4014
+ let T = !1;
4015
+ const L = requestAnimationFrame(() => {
4016
+ T || O.forEach((d) => {
4017
+ const S = m.current[d];
4018
+ S && k.observe(S);
4019
+ });
4020
+ });
4021
+ return () => {
4022
+ T = !0, cancelAnimationFrame(L), k.disconnect();
4023
+ };
4024
+ }, [w, y, e.sections, e["global-header"], h]);
4025
+ const j = (E, O) => {
4026
+ E.preventDefault(), E.dataTransfer.dropEffect = "move", l(O);
4027
+ }, C = () => {
4028
+ l(null);
4029
+ }, F = (E, O) => {
4030
+ if (E.preventDefault(), l(null), !!n)
4031
+ try {
4032
+ const k = E.dataTransfer.getData(fo), { sectionId: T } = JSON.parse(k);
4033
+ typeof T == "string" && n(T, O);
4034
+ } catch {
4035
+ }
4036
+ }, W = () => {
4037
+ const E = typeof n == "function", O = e.sections.map((k, T) => {
4038
+ const L = c === T;
4039
+ return E ? /* @__PURE__ */ u.jsxs(
4040
+ "div",
4041
+ {
4042
+ ref: (d) => {
4043
+ m.current[k.id] = d;
4044
+ },
4045
+ "data-section-id": k.id,
4046
+ style: { position: "relative" },
4047
+ onMouseEnter: () => A(k.id),
4048
+ children: [
4049
+ /* @__PURE__ */ u.jsx(
4050
+ "div",
4051
+ {
4052
+ "data-jp-drop-zone": !0,
4053
+ style: {
4054
+ position: "absolute",
4055
+ left: 0,
4056
+ right: 0,
4057
+ top: -1,
4058
+ height: 12,
4059
+ zIndex: 55,
4060
+ pointerEvents: "auto",
4061
+ backgroundColor: L ? "rgba(59, 130, 246, 0.4)" : "transparent",
4062
+ borderTop: L ? "2px solid rgb(96, 165, 250)" : "2px solid transparent"
4063
+ },
4064
+ onDragOver: (d) => j(d, T),
4065
+ onDragLeave: C,
4066
+ onDrop: (d) => F(d, T)
4067
+ }
4068
+ ),
4069
+ /* @__PURE__ */ u.jsx(
4070
+ Ee,
4071
+ {
4072
+ section: k,
4073
+ menu: _e(k, r.main ?? []),
4074
+ selectedId: o,
4075
+ reorderable: !0,
4076
+ sectionIndex: T,
4077
+ totalSections: e.sections.length,
4078
+ onReorder: n
4079
+ }
4080
+ )
4081
+ ]
4082
+ },
4083
+ k.id
4084
+ ) : /* @__PURE__ */ u.jsx(
4085
+ "div",
4086
+ {
4087
+ ref: (d) => {
4088
+ m.current[k.id] = d;
4089
+ },
4090
+ "data-section-id": k.id,
4091
+ onMouseEnter: () => A(k.id),
4092
+ children: /* @__PURE__ */ u.jsx(
4093
+ Ee,
4094
+ {
4095
+ section: k,
4096
+ menu: _e(k, r.main ?? []),
4097
+ selectedId: o
4098
+ }
4099
+ )
4100
+ },
4101
+ k.id
4102
+ );
4103
+ });
4104
+ if (E && O.length > 0) {
4105
+ const k = e.sections.length, T = c === k;
4106
+ O.push(
4107
+ /* @__PURE__ */ u.jsx(
4108
+ "div",
4109
+ {
4110
+ "data-jp-drop-zone": !0,
4111
+ style: {
4112
+ position: "relative",
4113
+ left: 0,
4114
+ right: 0,
4115
+ height: 24,
4116
+ minHeight: 24,
4117
+ zIndex: 55,
4118
+ pointerEvents: "auto",
4119
+ backgroundColor: T ? "rgba(59, 130, 246, 0.4)" : "transparent",
4120
+ borderTop: T ? "2px solid rgb(96, 165, 250)" : "2px solid transparent"
4121
+ },
4122
+ onDragOver: (L) => j(L, k),
4123
+ onDragLeave: C,
4124
+ onDrop: (L) => F(L, k)
4125
+ },
4126
+ "jp-drop-after-last"
4127
+ )
4128
+ );
4129
+ }
4130
+ return O;
4131
+ };
4132
+ return /* @__PURE__ */ u.jsxs("div", { className: "min-h-screen flex flex-col bg-[var(--color-background)]", children: [
4133
+ y != null && /* @__PURE__ */ u.jsx(
4134
+ "div",
4135
+ {
4136
+ ref: (E) => {
4137
+ m.current[y.id] = E;
4138
+ },
4139
+ "data-section-id": y.id,
4140
+ onMouseEnter: () => A(y.id),
4141
+ children: /* @__PURE__ */ u.jsx(
4142
+ Ee,
4143
+ {
4144
+ section: y,
4145
+ menu: _e(y, r.main ?? []),
4146
+ selectedId: o
4147
+ }
4148
+ )
4149
+ }
4150
+ ),
4151
+ /* @__PURE__ */ u.jsx("main", { className: "flex-1", children: W() }),
4152
+ w != null && /* @__PURE__ */ u.jsx(
4153
+ "div",
4154
+ {
4155
+ ref: (E) => {
4156
+ m.current[w.id] = E;
4157
+ },
4158
+ "data-section-id": w.id,
4159
+ onMouseEnter: () => A(w.id),
4160
+ children: /* @__PURE__ */ u.jsx(Ee, { section: w, selectedId: o })
4161
+ }
4162
+ )
4163
+ ] });
4164
+ }, bo = ({ mode: e, tenantCss: t, adminCss: r, children: o }) => (Rt(() => {
4165
+ const n = `jp-theme-${e}`, s = e === "tenant" ? t : r;
4166
+ if (!document.getElementById(n) && s) {
4167
+ const a = document.createElement("style");
4168
+ a.id = n, a.innerHTML = s, document.head.appendChild(a);
4169
+ }
4170
+ return () => {
4171
+ const a = document.getElementById(n);
4172
+ a && a.remove();
4173
+ };
4174
+ }, [e, t, r]), /* @__PURE__ */ u.jsx(u.Fragment, { children: o }));
4175
+ function et(e, t) {
4176
+ if (typeof document > "u") return;
4177
+ const r = `link[rel="${e}"]`;
4178
+ let o = document.head.querySelector(r);
4179
+ o || (o = document.createElement("link"), o.rel = e, document.head.appendChild(o)), o.href = t;
4180
+ }
4181
+ function ho(e, t, r) {
4182
+ if (typeof document > "u") return;
4183
+ const o = "olonjs-webmcp-jsonld";
4184
+ let n = document.getElementById(o);
4185
+ n || (n = document.createElement("script"), n.type = "application/ld+json", n.id = o, document.head.appendChild(n)), n.textContent = JSON.stringify({
4186
+ "@context": "https://schema.org",
4187
+ "@type": "WebPage",
4188
+ name: e,
4189
+ description: t,
4190
+ url: r
4191
+ });
4192
+ }
4193
+ function Le(e) {
4194
+ return e.split("/").map((t) => t.trim()).filter(Boolean).join("/");
4195
+ }
4196
+ function go(e, t = "") {
4197
+ const r = Le(t);
4198
+ let n = e.replace(/\/+/g, "/");
4199
+ if (r) {
4200
+ const a = `/${r}`;
4201
+ n === a ? n = "/" : n.startsWith(`${a}/`) && (n = n.slice(a.length));
4202
+ }
4203
+ return Le(n) || "home";
4204
+ }
4205
+ function yo(e, t) {
4206
+ const r = Le(t) || "home";
4207
+ return e[r];
4208
+ }
4209
+ const tt = ({
4210
+ pageRegistry: e,
4211
+ siteConfig: t,
4212
+ menuConfig: r,
4213
+ themeConfig: o,
4214
+ refDocuments: n,
4215
+ tenantCss: s,
4216
+ adminCss: a,
4217
+ NotFoundComponent: c
4218
+ }) => {
4219
+ const l = It(), m = go(l.pathname), b = ze(
4220
+ () => st({
4221
+ pages: e,
4222
+ siteConfig: t,
4223
+ themeConfig: o,
4224
+ menuConfig: r,
4225
+ refDocuments: n
4226
+ }),
4227
+ [e, t, o, r, n]
4228
+ ), h = yo(b.pages, m);
4229
+ return oe(() => {
4230
+ var y;
4231
+ try {
4232
+ (y = b.themeConfig) != null && y.tokens && lt.setTheme(b.themeConfig);
4233
+ } catch (w) {
4234
+ console.warn("[JsonPages] visitor theme resolution failed", w);
4235
+ }
4236
+ }, [b.themeConfig]), oe(() => {
4237
+ var A, j;
4238
+ if (!h) return;
4239
+ const y = typeof ((A = h.meta) == null ? void 0 : A.title) == "string" ? h.meta.title : m, w = typeof ((j = h.meta) == null ? void 0 : j.description) == "string" ? h.meta.description : "";
4240
+ et("mcp-manifest", Zt(m)), et("olon-contract", Xt(m)), ho(y, w, m === "home" ? "/" : `/${m}`);
4241
+ }, [h, m]), h ? /* @__PURE__ */ u.jsx(bo, { mode: "tenant", tenantCss: s, adminCss: a, children: /* @__PURE__ */ u.jsx(ir, { mode: "visitor", children: /* @__PURE__ */ u.jsx(
4242
+ po,
4243
+ {
4244
+ pageConfig: h,
4245
+ siteConfig: b.siteConfig,
4246
+ menuConfig: b.menuConfig
4247
+ }
4248
+ ) }) }) : /* @__PURE__ */ u.jsx(c, {});
4249
+ };
4250
+ function xo(e) {
4251
+ const t = {
4252
+ pageRegistry: e.pageRegistry,
4253
+ siteConfig: e.siteConfig,
4254
+ menuConfig: e.menuConfig,
4255
+ themeConfig: e.themeConfig,
4256
+ refDocuments: e.refDocuments,
4257
+ tenantCss: e.tenantCss,
4258
+ adminCss: e.adminCss,
4259
+ // empty string at the Core level for runtime; ignored by ThemeLoader in tenant mode
4260
+ NotFoundComponent: e.NotFoundComponent
4261
+ };
4262
+ return /* @__PURE__ */ u.jsxs(ye, { element: /* @__PURE__ */ u.jsx(sr, {}), children: [
4263
+ /* @__PURE__ */ u.jsx(ye, { path: "/", element: /* @__PURE__ */ u.jsx(tt, { ...t }) }),
4264
+ /* @__PURE__ */ u.jsx(ye, { path: "/*", element: /* @__PURE__ */ u.jsx(tt, { ...t }) }),
4265
+ /* @__PURE__ */ u.jsx(ye, { path: "*", element: /* @__PURE__ */ u.jsx(e.NotFoundComponent, {}) })
4266
+ ] });
4267
+ }
4268
+ function _o({ config: e }) {
4269
+ return /* @__PURE__ */ u.jsx(ar, { config: e, routesBuilder: xo });
4270
+ }
4271
+ const vo = /\.(jpg|jpeg|png|gif|svg|pdf|webp|mp4|webm|ogg)$/i, wo = /^[a-zA-Z][a-zA-Z\d+\-.]*:/, ko = (e) => wo.test(e), Oo = (e, t = "default", r = "/") => {
4272
+ const o = e.trim();
4273
+ if (!o || ko(o) || o.startsWith("#"))
4274
+ return o;
4275
+ if (o.startsWith("/assets/") || o.startsWith("/uploaded-assets/")) return we(o, r);
4276
+ if (o.startsWith("assets/")) return we(`/${o}`, r);
4277
+ if (!vo.test(o))
4278
+ return we(o.startsWith("/") ? o : `/${o}`, r);
4279
+ const s = o.replace(/^\//, "");
4280
+ return we(`/assets/${t}/${s}`, r);
4281
+ }, Po = {
4282
+ UPDATE_DRAFTS: "jsonpages:update-drafts",
4283
+ SYNC_SELECTION: "jsonpages:sync-selection",
4284
+ SECTION_SELECT: "jsonpages:section-select",
4285
+ INLINE_FIELD_UPDATE: "jsonpages:inline-field-update",
4286
+ INLINE_FLUSHED: "jsonpages:inline-flushed",
4287
+ REQUEST_SCROLL_TO_SECTION: "jsonpages:request-scroll-to-section",
4288
+ REQUEST_INLINE_FLUSH: "jsonpages:request-inline-flush",
4289
+ ACTIVE_SECTION_CHANGED: "jsonpages:active-section-changed",
4290
+ STAGE_READY: "jsonpages:stage-ready",
4291
+ WEBMCP_TOOL_CALL: "olonjs:webmcp:tool-call",
4292
+ WEBMCP_TOOL_RESULT: "olonjs:webmcp:tool-result"
4293
+ }, zo = I.object({
4294
+ url: I.string(),
4295
+ alt: I.string().optional()
4296
+ }).describe("ui:image-picker"), No = I.object({
4297
+ id: I.string().optional(),
4298
+ anchorId: I.string().optional().describe("ui:text")
4299
+ }), Io = I.object({
4300
+ id: I.string().optional()
4301
+ }), $o = I.object({
4302
+ paddingTop: I.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("md").describe("ui:select"),
4303
+ paddingBottom: I.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("md").describe("ui:select"),
4304
+ theme: I.enum(["dark", "light", "accent"]).default("dark").describe("ui:select"),
4305
+ container: I.enum(["boxed", "fluid"]).default("boxed").describe("ui:select")
4306
+ }), Mo = I.object({
4307
+ id: I.string().optional(),
4308
+ label: I.string().describe("ui:text"),
4309
+ href: I.string().describe("ui:text"),
4310
+ variant: I.enum(["primary", "secondary", "accent"]).default("primary").describe("ui:select")
4311
+ }), Lo = I.object({
4312
+ recipientEmail: I.string().optional().describe("ui:text")
4313
+ });
4314
+ function jo(e) {
4315
+ const t = e.split(`
4316
+ `).map((n) => n.trimEnd()).filter((n) => n.length > 0);
4317
+ if (t.length === 0) return null;
4318
+ let r = "message";
4319
+ const o = [];
4320
+ for (const n of t) {
4321
+ if (n.startsWith("event:")) {
4322
+ r = n.slice(6).trim();
4323
+ continue;
4324
+ }
4325
+ n.startsWith("data:") && o.push(n.slice(5).trim());
4326
+ }
4327
+ return { event: r, data: o.join(`
4328
+ `) };
4329
+ }
4330
+ async function Do(e) {
4331
+ var a;
4332
+ const t = await fetch(`${e.apiBaseUrl}/save-stream`, {
4333
+ method: "POST",
4334
+ headers: {
4335
+ "Content-Type": "application/json",
4336
+ Authorization: `Bearer ${e.apiKey}`
4337
+ },
4338
+ body: JSON.stringify({
4339
+ path: e.path,
4340
+ content: e.content,
4341
+ message: e.message
4342
+ }),
4343
+ signal: e.signal
4344
+ });
4345
+ if (!t.ok || !t.body) {
4346
+ const c = await t.json().catch(() => ({}));
4347
+ throw new Error(c.message ?? `Cloud save stream failed: ${t.status}`);
4348
+ }
4349
+ const r = t.body.getReader(), o = new TextDecoder();
4350
+ let n = "", s = !1;
4351
+ for (; ; ) {
4352
+ const { value: c, done: l } = await r.read();
4353
+ l ? n += o.decode() : n += o.decode(c, { stream: !0 });
4354
+ const m = n.split(`
4355
+
4356
+ `);
4357
+ n = l ? "" : m.pop() ?? "";
4358
+ for (const b of m) {
4359
+ const h = jo(b);
4360
+ if (h && h.data) {
4361
+ if (h.event === "step") {
4362
+ const y = JSON.parse(h.data);
4363
+ e.onStep(y);
4364
+ } else if (h.event === "log") {
4365
+ const y = JSON.parse(h.data);
4366
+ (a = e.onLog) == null || a.call(e, y);
4367
+ } else if (h.event === "error") {
4368
+ const y = JSON.parse(h.data);
4369
+ throw new Error(y.message ?? "Cloud save failed.");
4370
+ } else if (h.event === "done") {
4371
+ const y = JSON.parse(h.data);
4372
+ e.onDone(y), s = !0;
4373
+ }
4374
+ }
4375
+ }
4376
+ if (l) break;
4377
+ }
4378
+ if (!s)
4379
+ throw new Error("Cloud save stream ended before completion.");
4380
+ }
4381
+ const Fo = [
4382
+ {
4383
+ id: "commit",
4384
+ label: "Commit",
4385
+ verb: "Committing",
4386
+ poem: ["Crystallizing your edit", "into permanent history."],
4387
+ color: "#60a5fa",
4388
+ glyph: "◈",
4389
+ duration: 2200
4390
+ },
4391
+ {
4392
+ id: "push",
4393
+ label: "Push",
4394
+ verb: "Pushing",
4395
+ poem: ["Sending your vision", "across the wire."],
4396
+ color: "#a78bfa",
4397
+ glyph: "◎",
4398
+ duration: 2800
4399
+ },
4400
+ {
4401
+ id: "build",
4402
+ label: "Build",
4403
+ verb: "Building",
4404
+ poem: ["Assembling the pieces,", "brick by digital brick."],
4405
+ color: "#f59e0b",
4406
+ glyph: "⬡",
4407
+ duration: 7500
4408
+ },
4409
+ {
4410
+ id: "live",
4411
+ label: "Live",
4412
+ verb: "Going live",
4413
+ poem: ["Your content", "is now breathing."],
4414
+ color: "#34d399",
4415
+ glyph: "✦",
4416
+ duration: 1600
4417
+ }
4418
+ ], Eo = { status: "idle", message: "" }, So = Te({});
4419
+ function Wo(e) {
4420
+ return Re(So)[e] ?? Eo;
4421
+ }
4422
+ export {
4423
+ Io as BaseArrayItem,
4424
+ No as BaseSectionData,
4425
+ $o as BaseSectionSettingsSchema,
4426
+ Qt as ConfigProvider,
4427
+ Mo as CtaSchema,
4428
+ Fo as DEPLOY_STEPS,
4429
+ Kt as DefaultNotFound,
4430
+ ct as IconRegistryContext,
4431
+ zo as ImageSelectionSchema,
4432
+ So as OlonFormsContext,
4433
+ _o as OlonJSEngine,
4434
+ po as PageRenderer,
4435
+ Po as STUDIO_EVENTS,
4436
+ Ee as SectionRenderer,
4437
+ ir as StudioProvider,
4438
+ bo as ThemeLoader,
4439
+ Lo as WithFormRecipient,
4440
+ rr as buildThemeVariableMap,
4441
+ Me as cn,
4442
+ Ie as normalizeBasePath,
4443
+ Oo as resolveAssetUrl,
4444
+ st as resolveRuntimeConfig,
4445
+ Do as startCloudSaveStream,
4446
+ lt as themeManager,
4447
+ er as useConfig,
4448
+ Wo as useFormState,
4449
+ Ao as useIconRegistry,
4450
+ lr as useStudio,
4451
+ we as withBasePath
4452
+ };